Create SVG drawings from vector geodata files (SHP, geojson, etc).

Overview

SVGIS

Create SVG drawings from vector geodata files (SHP, geojson, etc).

SVGIS is great for: creating small multiples, combining lots of datasets in a sensible projection, and drawing styled based on classes in the source data. It's perfect for creating base maps for editing in a drawing program, and its CSS-based styling gives great flexibility for styling.

svgis draw input.shp -o out.svg
svgis draw south_dakota.shp north_dakota.geojson -o dakota.svg
svgis draw england.shp scotland.shp wales.shp --style gb.css -o great_britain.svg

Complete documentation, with more examples and explanation of classes and methods: https://svgis.readthedocs.io/en/stable/

Install

Requires fiona, which in turn requires GDAL.

See the GDAL docs for install info.

Then:

pip install svgis

An optional feature of svgis is clipping polygons to a bounding box. This will speed things up if you need to draw only part of a very complex feature.

pip install 'svgis[clip]'

Commands

The svgis command line tool includes several utilities. The most important is svgis draw, which draws SVG maps based on input geodata layers.

Additional commands:

  • svgis bounds: get the bounding box for a layer in a given projection
  • svgis graticule: create a graticule (grid) within a given bounds
  • svgis project: determine what projection svgis draw will (optionally) generate for given bounding box
  • svgis scale: change the scale of an existing SVG
  • svgis style: add css styles to an existing SVG

Read the docs for complete information on these commands and their options.

Examples

Draw the outline of the contiguous United States, projected in Albers:

curl -O http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_nation_20m.zip
unzip cb_2014_us_nation_20m.zip
svgis draw cb_2014_us_nation_20m.shp --crs EPSG:5070 --scale 1000 --bounds -124 20.5 -64 49 -o us.svg

The next two examples use the Natural Earth admin-0 data set.

Draw upper income countries in green, low-income countries in blue:

/* style.css */
.income_grp_5_Low_income {
    fill: blue;
}
.income_grp_3_Upper_middle_income {
    fill: green
}
.ne_110m_lakes {
    fill: #09d;
    stroke: none;
}
svgis draw --style style.css --class-fields income_grp ne_110m_admin_0_countries.shp ne_110m_lakes.shp -o out.svg

Draw national boundaries and lakes in Europe using the LAEA Europe projection, simplifying the output polygons, and coloring Germany in purple.

svgis draw ne_110m_admin_0_countries.shp ne_110m_lakes.shp \
    --crs EPSG:3035 \ 
    --scale 1000 \ 
    --simplify 90 \ 
    --style '.ne_110m_admin_0_countries { fill: tan } #Germany { fill: purple }' \
    --style '.ne_110m_lakes { fill: #09d; stroke: none; }' \ 
    --id-field name \ 
    --bounds -10 30 40 65 \ 
    -o out.svg
Comments
  • Getting value error converting GeoJSON with coordinates array of length > 1

    Getting value error converting GeoJSON with coordinates array of length > 1

    Using svgis 0.5.1

    Traceback:

    File "/usr/local/lib/python3.6/dist-packages/svgis/svgis.py", line 84, in map
        ).compose(**kwargs)
      File "/usr/local/lib/python3.6/dist-packages/svgis/svgis.py", line 476, in compose
        members = [svg.group(**self.compose_file(f, bounds, scalar=scalar, **kwargs)) for f in self.files]
      File "/usr/local/lib/python3.6/dist-packages/svgis/svgis.py", line 476, in <listcomp>
        members = [svg.group(**self.compose_file(f, bounds, scalar=scalar, **kwargs)) for f in self.files]
      File "/usr/local/lib/python3.6/dist-packages/svgis/svgis.py", line 380, in compose_file
        group = tuple(self.feature(f, **kwargs) for _, f in layer.items(bbox=bounds))
      File "/usr/local/lib/python3.6/dist-packages/svgis/svgis.py", line 380, in <genexpr>
        group = tuple(self.feature(f, **kwargs) for _, f in layer.items(bbox=bounds))
      File "/usr/local/lib/python3.6/dist-packages/svgis/svgis.py", line 419, in feature
        if not geom['coordinates']:
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    

    GeoJSON (excuse the size):

    {
      "type": "FeatureCollection",
      "features": [
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 0,
            "surfaceArea": 2.1440696916641775,
            "perimeter": 7.10731713835107,
            "azimuth": 210.11937158278803,
            "slope": 20.646261460804354
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27582144344457,
                  37.83630635709143,
                  4.833463177084923
                ],
                [
                  -121.27583143751141,
                  37.83629160087113,
                  4.133936115540564
                ],
                [
                  -121.27579970398412,
                  37.83629735130918,
                  4.884500785730779
                ],
                [
                  -121.27582144344457,
                  37.83630635709143,
                  4.833463177084923
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 1,
            "surfaceArea": 10.825123556776308,
            "perimeter": 14.542523478240337,
            "azimuth": 24.1704032014689,
            "slope": 23.14000504460674
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27582144344457,
                  37.83630635709143,
                  4.833463177084923
                ],
                [
                  -121.27580257616148,
                  37.836334004858024,
                  3.3815100491046906
                ],
                [
                  -121.27577121760163,
                  37.83632071797112,
                  3.406243648380041
                ],
                [
                  -121.27577357354005,
                  37.836317631240696,
                  3.573150190524757
                ],
                [
                  -121.2757772356068,
                  37.83631893500418,
                  3.6227799635380507
                ],
                [
                  -121.2757958573853,
                  37.83629075005293,
                  5.131495578214526
                ],
                [
                  -121.27579970398412,
                  37.83629735130918,
                  4.884500785730779
                ],
                [
                  -121.27582144344457,
                  37.83630635709143,
                  4.833463177084923
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 2,
            "surfaceArea": 27.44068205227838,
            "perimeter": 36.240407054341574,
            "azimuth": -63.75542195174191,
            "slope": 19.583553945307585
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27586567286802,
                  37.83626207901918,
                  3.7059282921254635
                ],
                [
                  -121.27586391965484,
                  37.83626086347862,
                  3.8359531983733177
                ],
                [
                  -121.27588115789048,
                  37.836234727946696,
                  3.7950636046007276
                ],
                [
                  -121.27587667607592,
                  37.83623251718042,
                  4.059723211452365
                ],
                [
                  -121.27587793627684,
                  37.836231284364665,
                  3.841487598605454
                ],
                [
                  -121.27590041745219,
                  37.836240655304394,
                  3.1380982594564557
                ],
                [
                  -121.27586425101408,
                  37.83629776300183,
                  3.1416021874174476
                ],
                [
                  -121.27585835169138,
                  37.83629523513036,
                  3.327386242337525
                ],
                [
                  -121.27584132028394,
                  37.8363225560868,
                  3.3058541547507048
                ],
                [
                  -121.2758172617218,
                  37.83631280334612,
                  4.185891821980476
                ],
                [
                  -121.27583143751141,
                  37.83629160087113,
                  4.133936115540564
                ],
                [
                  -121.27579970398412,
                  37.83629735130918,
                  4.884500785730779
                ],
                [
                  -121.2757958573853,
                  37.83629075005293,
                  5.131495578214526
                ],
                [
                  -121.27580929262643,
                  37.836274778426144,
                  5.110839830711484
                ],
                [
                  -121.2758483983373,
                  37.83628861076945,
                  3.7071462105959654
                ],
                [
                  -121.27586567286802,
                  37.83626207901918,
                  3.7059282921254635
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 3,
            "surfaceArea": 21.830967030742887,
            "perimeter": 20.28903530253757,
            "azimuth": 207.09645855277546,
            "slope": 22.03961254658374
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27579119643984,
                  37.836232210132444,
                  7.844164335168898
                ],
                [
                  -121.27586388503121,
                  37.836262398627824,
                  7.805101899430156
                ],
                [
                  -121.27588373849159,
                  37.836232434722234,
                  6.309722417034209
                ],
                [
                  -121.27584659183364,
                  37.83621758591053,
                  6.312090791761875
                ],
                [
                  -121.27579119643984,
                  37.836232210132444,
                  7.844164335168898
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 4,
            "surfaceArea": 0.9777817066947325,
            "perimeter": 5.418937858014594,
            "azimuth": 227.0699071149062,
            "slope": 25.21430915629759
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27585635744335,
                  37.83627504356126,
                  7.1366206696256995
                ],
                [
                  -121.27585930768811,
                  37.83627647549584,
                  7.113984065130353
                ],
                [
                  -121.27587010323093,
                  37.836259907181955,
                  6.183894299902022
                ],
                [
                  -121.27586483191283,
                  37.83625721582116,
                  6.266144037246704
                ],
                [
                  -121.27585635744335,
                  37.83627504356126,
                  7.1366206696256995
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 5,
            "surfaceArea": 74.55044790697363,
            "perimeter": 38.27431637512636,
            "azimuth": 115.6125272999443,
            "slope": 22.729529147581488
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27572578303094,
                  37.83630047520815,
                  8.4885044246912
                ],
                [
                  -121.27567213103877,
                  37.836277738347,
                  6.257800497114658
                ],
                [
                  -121.27573993371544,
                  37.836175013286734,
                  6.318326803855598
                ],
                [
                  -121.27577776804954,
                  37.8361907493256,
                  7.94224742334336
                ],
                [
                  -121.27577573334501,
                  37.83619439168128,
                  7.937819387763739
                ],
                [
                  -121.27578303176935,
                  37.83619772302146,
                  8.246436497196555
                ],
                [
                  -121.27578610640342,
                  37.83619354141349,
                  8.2577840173617
                ],
                [
                  -121.27579365655174,
                  37.83619794134555,
                  8.551419008523226
                ],
                [
                  -121.27572578303094,
                  37.83630047520815,
                  8.4885044246912
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 6,
            "surfaceArea": 59.52150166245687,
            "perimeter": 40.76332239773024,
            "azimuth": -63.08670677001493,
            "slope": 23.16126990415202
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27579119643984,
                  37.836232210132444,
                  7.844164335168898
                ],
                [
                  -121.27584659183364,
                  37.83621758591053,
                  6.312090791761875
                ],
                [
                  -121.27579365655174,
                  37.83619794134555,
                  8.551419008523226
                ],
                [
                  -121.27572578303094,
                  37.83630047520815,
                  8.4885044246912
                ],
                [
                  -121.27578025544622,
                  37.83632241759496,
                  6.214883226901293
                ],
                [
                  -121.27580919688194,
                  37.83627707427692,
                  6.261006620712578
                ],
                [
                  -121.27579119643984,
                  37.836232210132444,
                  7.844164335168898
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofFacet",
            "id": 7,
            "surfaceArea": 22.199615298550718,
            "perimeter": 20.775422449082573,
            "azimuth": 25.651614565932135,
            "slope": 23.076335657486027
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27579119643984,
                  37.836232210132444,
                  7.844164335168898
                ],
                [
                  -121.27586388503121,
                  37.836262398627824,
                  7.805101899430156
                ],
                [
                  -121.27585635744335,
                  37.83627504356126,
                  7.1366206696256995
                ],
                [
                  -121.27585930768811,
                  37.83627647549584,
                  7.113984065130353
                ],
                [
                  -121.27584880154441,
                  37.8362927514546,
                  6.25716826505959
                ],
                [
                  -121.27580919688194,
                  37.83627707427692,
                  6.261006620712578
                ],
                [
                  -121.27579119643984,
                  37.836232210132444,
                  7.844164335168898
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 1.9862084646052045,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              0
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27582144344457,
                37.83630635709143,
                4.833463177084923
              ],
              [
                -121.27583143751141,
                37.83629160087113,
                4.133936115540564
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.9617558045156485,
            "roofEdgeType": "VALLEY",
            "gutter": false,
            "roofFacetIds": [
              2,
              0
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27583143751141,
                37.83629160087113,
                4.133936115540564
              ],
              [
                -121.27579970398412,
                37.83629735130918,
                4.884500785730779
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.1593528692302177,
            "roofEdgeType": "RIDGE",
            "gutter": false,
            "roofFacetIds": [
              1,
              0
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27579970398412,
                37.83629735130918,
                4.884500785730779
              ],
              [
                -121.27582144344457,
                37.83630635709143,
                4.833463177084923
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.7789874624991326,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              1
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27582144344457,
                37.83630635709143,
                4.833463177084923
              ],
              [
                -121.27580257616148,
                37.836334004858024,
                3.3815100491046906
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.129392762905842,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              1
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27580257616148,
                37.836334004858024,
                3.3815100491046906
              ],
              [
                -121.27577121760163,
                37.83632071797112,
                3.406243648380041
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.4338307282471547,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              1
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27577121760163,
                37.83632071797112,
                3.406243648380041
              ],
              [
                -121.27577357354005,
                37.836317631240696,
                3.573150190524757
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.3567800132061024,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              1
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27577357354005,
                37.836317631240696,
                3.573150190524757
              ],
              [
                -121.2757772356068,
                37.83631893500418,
                3.6227799635380507
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.8401703415944644,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              1
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.2757772356068,
                37.83631893500418,
                3.6227799635380507
              ],
              [
                -121.2757958573853,
                37.83629075005293,
                5.131495578214526
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.8440093005574266,
            "roofEdgeType": "HIP",
            "gutter": false,
            "roofFacetIds": [
              1,
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.2757958573853,
                37.83629075005293,
                5.131495578214526
              ],
              [
                -121.27579970398412,
                37.83629735130918,
                4.884500785730779
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.24272878268629117,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27586567286802,
                37.83626207901918,
                3.7059282921254635
              ],
              [
                -121.27586391965484,
                37.83626086347862,
                3.8359531983733177
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.273659017725325,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27586391965484,
                37.83626086347862,
                3.8359531983733177
              ],
              [
                -121.27588115789048,
                37.836234727946696,
                3.7950636046007276
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.5346531972698263,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27588115789048,
                37.836234727946696,
                3.7950636046007276
              ],
              [
                -121.27587667607592,
                37.83623251718042,
                4.059723211452365
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.28044458601856487,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27587667607592,
                37.83623251718042,
                4.059723211452365
              ],
              [
                -121.27587793627684,
                37.836231284364665,
                3.841487598605454
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.34343931874503,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27587793627684,
                37.836231284364665,
                3.841487598605454
              ],
              [
                -121.27590041745219,
                37.836240655304394,
                3.1380982594564557
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 7.092346901000751,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27590041745219,
                37.836240655304394,
                3.1380982594564557
              ],
              [
                -121.27586425101408,
                37.83629776300183,
                3.1416021874174476
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.6187344326559621,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27586425101408,
                37.83629776300183,
                3.1416021874174476
              ],
              [
                -121.27585835169138,
                37.83629523513036,
                3.327386242337525
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.382485959863508,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27585835169138,
                37.83629523513036,
                3.327386242337525
              ],
              [
                -121.27584132028394,
                37.8363225560868,
                3.3058541547507048
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.5357553458401783,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27584132028394,
                37.8363225560868,
                3.3058541547507048
              ],
              [
                -121.2758172617218,
                37.83631280334612,
                4.185891821980476
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.663902519136443,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.2758172617218,
                37.83631280334612,
                4.185891821980476
              ],
              [
                -121.27583143751141,
                37.83629160087113,
                4.133936115540564
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.1308915617612336,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.2757958573853,
                37.83629075005293,
                5.131495578214526
              ],
              [
                -121.27580929262643,
                37.836274778426144,
                5.110839830711484
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 4.021705863750946,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27580929262643,
                37.836274778426144,
                5.110839830711484
              ],
              [
                -121.2758483983373,
                37.83628861076945,
                3.7071462105959654
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.313894462814442,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.2758483983373,
                37.83628861076945,
                3.7071462105959654
              ],
              [
                -121.27586567286802,
                37.83626207901918,
                3.7059282921254635
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 7.222094604618665,
            "roofEdgeType": "RIDGE",
            "gutter": false,
            "roofFacetIds": [
              3,
              7
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27579119643984,
                37.836232210132444,
                7.844164335168898
              ],
              [
                -121.27586388503121,
                37.836262398627824,
                7.805101899430156
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 4.043273495790457,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              3
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27586388503121,
                37.836262398627824,
                7.805101899430156
              ],
              [
                -121.27588373849159,
                37.836232434722234,
                6.309722417034209
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.661364502108562,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              3
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27588373849159,
                37.836232434722234,
                6.309722417034209
              ],
              [
                -121.27584659183364,
                37.83621758591053,
                6.312090791761875
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 5.362302700019888,
            "roofEdgeType": "VALLEY",
            "gutter": false,
            "roofFacetIds": [
              6,
              3
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27584659183364,
                37.83621758591053,
                6.312090791761875
              ],
              [
                -121.27579119643984,
                37.836232210132444,
                7.844164335168898
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.3052810500643061,
            "roofEdgeType": "HIP",
            "gutter": false,
            "roofFacetIds": [
              7,
              4
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27585635744335,
                37.83627504356126,
                7.1366206696256995
              ],
              [
                -121.27585930768811,
                37.83627647549584,
                7.113984065130353
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.269133656519098,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              4
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27585930768811,
                37.83627647549584,
                7.113984065130353
              ],
              [
                -121.27587010323093,
                37.836259907181955,
                6.183894299902022
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.5578929688408287,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              4
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27587010323093,
                37.836259907181955,
                6.183894299902022
              ],
              [
                -121.27586483191283,
                37.83625721582116,
                6.266144037246704
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.286630182590362,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              4
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27586483191283,
                37.83625721582116,
                6.266144037246704
              ],
              [
                -121.27585635744335,
                37.83627504356126,
                7.1366206696256995
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 5.800290885516833,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27572578303094,
                37.83630047520815,
                8.4885044246912
              ],
              [
                -121.27567213103877,
                37.836277738347,
                6.257800497114658
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 12.868143405494957,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27567213103877,
                37.836277738347,
                6.257800497114658
              ],
              [
                -121.27573993371544,
                37.836175013286734,
                6.318326803855598
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 4.095899715539762,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27573993371544,
                37.836175013286734,
                6.318326803855598
              ],
              [
                -121.27577776804954,
                37.8361907493256,
                7.94224742334336
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.44214772594384844,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27577776804954,
                37.8361907493256,
                7.94224742334336
              ],
              [
                -121.27577573334501,
                37.83619439168128,
                7.937819387763739
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.8028659570934007,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27577573334501,
                37.83619439168128,
                7.937819387763739
              ],
              [
                -121.27578303176935,
                37.83619772302146,
                8.246436497196555
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.5373374853148606,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27578303176935,
                37.83619772302146,
                8.246436497196555
              ],
              [
                -121.27578610640342,
                37.83619354141349,
                8.2577840173617
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 0.8753754332718328,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27578610640342,
                37.83619354141349,
                8.2577840173617
              ],
              [
                -121.27579365655174,
                37.83619794134555,
                8.551419008523226
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 12.852255766950869,
            "roofEdgeType": "RIDGE",
            "gutter": false,
            "roofFacetIds": [
              6,
              5
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27579365655174,
                37.83619794134555,
                8.551419008523226
              ],
              [
                -121.27572578303094,
                37.83630047520815,
                8.4885044246912
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 5.6103465142255775,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27584659183364,
                37.83621758591053,
                6.312090791761875
              ],
              [
                -121.27579365655174,
                37.83619794134555,
                8.551419008523226
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 5.838381135894072,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27572578303094,
                37.83630047520815,
                8.4885044246912
              ],
              [
                -121.27578025544622,
                37.83632241759496,
                6.214883226901293
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 5.640419499554775,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27578025544622,
                37.83632241759496,
                6.214883226901293
              ],
              [
                -121.27580919688194,
                37.83627707427692,
                6.261006620712578
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 5.4596167810850575,
            "roofEdgeType": "VALLEY",
            "gutter": false,
            "roofFacetIds": [
              6,
              7
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27580919688194,
                37.83627707427692,
                6.261006620712578
              ],
              [
                -121.27579119643984,
                37.836232210132444,
                7.844164335168898
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 1.6897374961705753,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              7
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27586388503121,
                37.836262398627824,
                7.805101899430156
              ],
              [
                -121.27585635744335,
                37.83627504356126,
                7.1366206696256995
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 2.202727553690211,
            "roofEdgeType": "RAKE",
            "gutter": false,
            "roofFacetIds": [
              7
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27585930768811,
                37.83627647549584,
                7.113984065130353
              ],
              [
                -121.27584880154441,
                37.8362927514546,
                6.25716826505959
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofEdge",
            "length": 3.895964963453757,
            "roofEdgeType": "EAVE",
            "gutter": false,
            "roofFacetIds": [
              7
            ]
          },
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                -121.27584880154441,
                37.8362927514546,
                6.25716826505959
              ],
              [
                -121.27580919688194,
                37.83627707427692,
                6.261006620712578
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 0,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27578908577561,
                  37.83621203116862
                ],
                [
                  -121.27578095532957,
                  37.83620845650105
                ],
                [
                  -121.27577693201603,
                  37.83621342131706
                ],
                [
                  -121.27578682266176,
                  37.836216400206496
                ],
                [
                  -121.27578908577561,
                  37.83621203116862
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 1,
            "roofFacetIds": [
              2
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27581473439933,
                  37.83628941605919
                ],
                [
                  -121.27581817097962,
                  37.83628412026089
                ],
                [
                  -121.2758101243526,
                  37.8362814723616
                ],
                [
                  -121.27580752596262,
                  37.83628650337017
                ],
                [
                  -121.27581473439933,
                  37.83628941605919
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 2,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.2758318334818,
                  37.8362189819106
                ],
                [
                  -121.27583510242404,
                  37.83622030586137
                ],
                [
                  -121.27583644352853,
                  37.83621779035487
                ],
                [
                  -121.27583367750049,
                  37.83621659879915
                ],
                [
                  -121.2758318334818,
                  37.8362189819106
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 3,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27582630142572,
                  37.83621719457701
                ],
                [
                  -121.27582889981569,
                  37.83621851852783
                ],
                [
                  -121.27583040855826,
                  37.836216003021256
                ],
                [
                  -121.27582764253022,
                  37.83621501005812
                ],
                [
                  -121.27582630142572,
                  37.83621719457701
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 4,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27577391453089,
                  37.83619435642173
                ],
                [
                  -121.27578355371953,
                  37.836199122646036
                ],
                [
                  -121.2757892534137,
                  37.836191178938705
                ],
                [
                  -121.275779530406,
                  37.836186346516314
                ],
                [
                  -121.27577391453089,
                  37.83619435642173
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 5,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27576880156995,
                  37.83624863840242
                ],
                [
                  -121.27577056176962,
                  37.83624612289689
                ],
                [
                  -121.27576653845611,
                  37.83624479894659
                ],
                [
                  -121.2757649458945,
                  37.836247049662106
                ],
                [
                  -121.27576880156995,
                  37.83624863840242
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 6,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27579604275526,
                  37.8362680342712
                ],
                [
                  -121.27579763531688,
                  37.83626578355631
                ],
                [
                  -121.27579528838397,
                  37.83626485679134
                ],
                [
                  -121.27579386346046,
                  37.83626697511128
                ],
                [
                  -121.27579604275526,
                  37.8362680342712
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 7,
            "roofFacetIds": [
              6
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27579285763208,
                  37.836277037130046
                ],
                [
                  -121.27579478546981,
                  37.83627472021795
                ],
                [
                  -121.27579109743239,
                  37.83627326387317
                ],
                [
                  -121.27578942105175,
                  37.8362757131803
                ],
                [
                  -121.27579285763208,
                  37.836277037130046
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 8,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27572387456895,
                  37.83629047521881
                ],
                [
                  -121.27572513185443,
                  37.83628868788695
                ],
                [
                  -121.27572312019767,
                  37.836287959714696
                ],
                [
                  -121.2757218629122,
                  37.836289747046564
                ],
                [
                  -121.27572387456895,
                  37.83629047521881
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 9,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27569277770819,
                  37.836284385050824
                ],
                [
                  -121.27569420263175,
                  37.836282796311274
                ],
                [
                  -121.27569160424176,
                  37.836281737151545
                ],
                [
                  -121.27569034695627,
                  37.83628339208861
                ],
                [
                  -121.27569277770819,
                  37.836284385050824
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 10,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.2757023330778,
                  37.83625975958379
                ],
                [
                  -121.27570367418232,
                  37.8362579722512
                ],
                [
                  -121.27570115961136,
                  37.83625724407861
                ],
                [
                  -121.27569998614493,
                  37.836258766621235
                ],
                [
                  -121.2757023330778,
                  37.83625975958379
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 11,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27569076605143,
                  37.83626121592882
                ],
                [
                  -121.27569210715595,
                  37.83625916380626
                ],
                [
                  -121.27568934112789,
                  37.83625830323869
                ],
                [
                  -121.27568808384241,
                  37.83626009057129
                ],
                [
                  -121.27569076605143,
                  37.83626121592882
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "RoofObstruction",
            "id": 12,
            "roofFacetIds": [
              5
            ]
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27571691758934,
                  37.83622758759026
                ],
                [
                  -121.27571817487478,
                  37.836225866454406
                ],
                [
                  -121.27571557648484,
                  37.83622507208401
                ],
                [
                  -121.27571457065646,
                  37.83622666082481
                ],
                [
                  -121.27571691758934,
                  37.83622758759026
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 0,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 2.759511769976871
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27580526367184,
                  37.8363379078634
                ],
                [
                  -121.27580634598287,
                  37.83634268220605
                ],
                [
                  -121.27580964964552,
                  37.8363467646411
                ],
                [
                  -121.27581467170732,
                  37.83634953365469
                ],
                [
                  -121.27582064760475,
                  37.836350567689415
                ],
                [
                  -121.27582666756118,
                  37.8363497093228
                ],
                [
                  -121.27583181509242,
                  37.83634708923342
                ],
                [
                  -121.2758353065333,
                  37.8363431063063
                ],
                [
                  -121.27583661034372,
                  37.83633836690612
                ],
                [
                  -121.27583552803078,
                  37.836333592563705
                ],
                [
                  -121.27583222436724,
                  37.83632951012935
                ],
                [
                  -121.27582720230608,
                  37.83632674111652
                ],
                [
                  -121.27582122641046,
                  37.83632570708216
                ],
                [
                  -121.27581520645595,
                  37.83632656544855
                ],
                [
                  -121.27581005892559,
                  37.83632918553723
                ],
                [
                  -121.27580656748408,
                  37.836333168463604
                ],
                [
                  -121.27580526367184,
                  37.8363379078634
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 1,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 1.8114214609867836
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27559305439338,
                  37.836257622975154
                ],
                [
                  -121.27559376484322,
                  37.83626075698959
                ],
                [
                  -121.2755959334505,
                  37.83626343681897
                ],
                [
                  -121.27559923006457,
                  37.83626525448351
                ],
                [
                  -121.27560315280569,
                  37.83626593326018
                ],
                [
                  -121.27560710447196,
                  37.83626536981134
                ],
                [
                  -121.27561048345781,
                  37.83626364991702
                ],
                [
                  -121.27561277534322,
                  37.836261035415575
                ],
                [
                  -121.27561363120941,
                  37.83625792434123
                ],
                [
                  -121.27561292075876,
                  37.83625479032689
                ],
                [
                  -121.27561075215107,
                  37.83625211049782
                ],
                [
                  -121.27560745553731,
                  37.836250292833604
                ],
                [
                  -121.27560353279696,
                  37.836249614057095
                ],
                [
                  -121.2755995811315,
                  37.83625017750583
                ],
                [
                  -121.27559620214603,
                  37.836251897399855
                ],
                [
                  -121.27559391026037,
                  37.836254511900975
                ],
                [
                  -121.27559305439338,
                  37.836257622975154
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 2,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 2.0711030182624257
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27559023837102,
                  37.8362157645385
                ],
                [
                  -121.27559105066894,
                  37.836219347838664
                ],
                [
                  -121.27559353016179,
                  37.836222411842776
                ],
                [
                  -121.27559729936938,
                  37.83622449008389
                ],
                [
                  -121.27560178446392,
                  37.836225266168555
                ],
                [
                  -121.27560630263022,
                  37.83622462194486
                ],
                [
                  -121.27561016601823,
                  37.836222655490076
                ],
                [
                  -121.27561278646193,
                  37.836219666179176
                ],
                [
                  -121.27561376502271,
                  37.83621610910774
                ],
                [
                  -121.27561295272372,
                  37.8362125258077
                ],
                [
                  -121.27561047323036,
                  37.836209461804
                ],
                [
                  -121.27560670402315,
                  37.8362073835633
                ],
                [
                  -121.27560221892962,
                  37.83620660747885
                ],
                [
                  -121.27559770076437,
                  37.83620725170242
                ],
                [
                  -121.27559383737692,
                  37.83620921815681
                ],
                [
                  -121.27559121693282,
                  37.83621220746728
                ],
                [
                  -121.27559023837102,
                  37.8362157645385
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 3,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 2.5698431518390263
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27591279111121,
                  37.83633964478555
                ],
                [
                  -121.2759137990386,
                  37.83634409097411
                ],
                [
                  -121.27591687563739,
                  37.83634789280982
                ],
                [
                  -121.2759215525234,
                  37.83635047149754
                ],
                [
                  -121.27592711768308,
                  37.83635143445528
                ],
                [
                  -121.27593272387095,
                  37.836350635081416
                ],
                [
                  -121.27593751759535,
                  37.83634819507339
                ],
                [
                  -121.27594076905503,
                  37.83634448590044
                ],
                [
                  -121.27594198324489,
                  37.836340072250664
                ],
                [
                  -121.27594097531583,
                  37.83633562606231
                ],
                [
                  -121.2759378987163,
                  37.8363318242272
                ],
                [
                  -121.2759332218308,
                  37.83632924554014
                ],
                [
                  -121.2759276566727,
                  37.83632828258271
                ],
                [
                  -121.27592205048649,
                  37.83632908195638
                ],
                [
                  -121.27591725676287,
                  37.836331521963814
                ],
                [
                  -121.27591400530261,
                  37.8363352311361
                ],
                [
                  -121.27591279111121,
                  37.83633964478555
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 4,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 9.20709583396192
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27591096778579,
                  37.8362462839185
                ],
                [
                  -121.27591457893023,
                  37.83626221348385
                ],
                [
                  -121.27592560159285,
                  37.836275834495865
                ],
                [
                  -121.27594235767528,
                  37.83628507327719
                ],
                [
                  -121.27596229621437,
                  37.83628852330535
                ],
                [
                  -121.27598238174392,
                  37.836285659343886
                ],
                [
                  -121.27599955641949,
                  37.83627691740558
                ],
                [
                  -121.27601120555029,
                  37.83626362837291
                ],
                [
                  -121.27601555566329,
                  37.83624781538251
                ],
                [
                  -121.27601194449758,
                  37.83623188581969
                ],
                [
                  -121.27600092182502,
                  37.83621826481545
                ],
                [
                  -121.27598416574973,
                  37.836209026042546
                ],
                [
                  -121.27596422723074,
                  37.836205576018536
                ],
                [
                  -121.27594414172246,
                  37.836208439977455
                ],
                [
                  -121.27592696705685,
                  37.83621718190801
                ],
                [
                  -121.2759153179189,
                  37.83623047093225
                ],
                [
                  -121.27591096778579,
                  37.8362462839185
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 5,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 6.8016745526655145
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27577258231533,
                  37.836101511229586
                ],
                [
                  -121.27577524999523,
                  37.836113279081985
                ],
                [
                  -121.27578339287113,
                  37.836123341513854
                ],
                [
                  -121.27579577126518,
                  37.83613016661026
                ],
                [
                  -121.27581050067819,
                  37.836132715311116
                ],
                [
                  -121.27582533868822,
                  37.836130599599365
                ],
                [
                  -121.27583802634025,
                  37.8361241415732
                ],
                [
                  -121.27584663205306,
                  37.83611432440952
                ],
                [
                  -121.27584984568574,
                  37.83610264268349
                ],
                [
                  -121.27584717799422,
                  37.83609087483249
                ],
                [
                  -121.2758390351129,
                  37.83608081240485
                ],
                [
                  -121.27582665672278,
                  37.83607398731305
                ],
                [
                  -121.27581192732073,
                  37.83607143861445
                ],
                [
                  -121.27579708932228,
                  37.83607355432483
                ],
                [
                  -121.2757844016757,
                  37.83608001234675
                ],
                [
                  -121.27577579595899,
                  37.83608982950582
                ],
                [
                  -121.27577258231533,
                  37.836101511229586
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 6,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 3.8553942856780026
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27575712987996,
                  37.83612889731287
                ],
                [
                  -121.27575864200037,
                  37.8361355676867
                ],
                [
                  -121.27576325762779,
                  37.836141271377286
                ],
                [
                  -121.27577027407514,
                  37.83614514004913
                ],
                [
                  -121.2757786231517,
                  37.836146584731715
                ],
                [
                  -121.27578703378542,
                  37.83614538548505
                ],
                [
                  -121.2757942255328,
                  37.83614172488364
                ],
                [
                  -121.27579910351511,
                  37.836136160221194
                ],
                [
                  -121.275800925104,
                  37.836129538667436
                ],
                [
                  -121.27579941297988,
                  37.836122868294034
                ],
                [
                  -121.27579479735071,
                  37.836117164604815
                ],
                [
                  -121.27578778090462,
                  37.83611329593444
                ],
                [
                  -121.27577943183158,
                  37.83611185125258
                ],
                [
                  -121.27577102120159,
                  37.83611305049883
                ],
                [
                  -121.27576382945594,
                  37.83611671109886
                ],
                [
                  -121.27575895147241,
                  37.836122275759834
                ],
                [
                  -121.27575712987996,
                  37.83612889731287
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 7,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 0.2621119892549938
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27569967088486,
                  37.836145877988095
                ],
                [
                  -121.27569977368718,
                  37.83614633147869
                ],
                [
                  -121.27570008748394,
                  37.83614671924871
                ],
                [
                  -121.27570056450236,
                  37.83614698226366
                ],
                [
                  -121.27570113212073,
                  37.83614708048187
                ],
                [
                  -121.27570170392431,
                  37.836146998950554
                ],
                [
                  -121.27570219286119,
                  37.83614675008209
                ],
                [
                  -121.27570252449513,
                  37.83614637176445
                ],
                [
                  -121.2757026483379,
                  37.836145921593065
                ],
                [
                  -121.27570254553552,
                  37.83614546810245
                ],
                [
                  -121.27570223173876,
                  37.83614508033245
                ],
                [
                  -121.27570175472034,
                  37.83614481731751
                ],
                [
                  -121.27570118710199,
                  37.83614471909931
                ],
                [
                  -121.27570061529843,
                  37.83614480063061
                ],
                [
                  -121.27570012636156,
                  37.83614504949907
                ],
                [
                  -121.27569979472761,
                  37.83614542781671
                ],
                [
                  -121.27569967088486,
                  37.836145877988095
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 8,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 4.186601675659331
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27562155734964,
                  37.83614998677459
                ],
                [
                  -121.27562319935961,
                  37.83615723018529
                ],
                [
                  -121.27562821149404,
                  37.83616342387135
                ],
                [
                  -121.27563583070132,
                  37.836167624899794
                ],
                [
                  -121.2756448970259,
                  37.8361691937018
                ],
                [
                  -121.27565403020112,
                  37.83616789144129
                ],
                [
                  -121.27566183978293,
                  37.836163916375725
                ],
                [
                  -121.27566713683281,
                  37.83615787367315
                ],
                [
                  -121.27566911492328,
                  37.836150683280636
                ],
                [
                  -121.27566747290889,
                  37.83614343987046
                ],
                [
                  -121.27566246077241,
                  37.83613724618603
                ],
                [
                  -121.27565484156663,
                  37.83613304515931
                ],
                [
                  -121.2756457752462,
                  37.836131476358155
                ],
                [
                  -121.27563664207537,
                  37.83613277861816
                ],
                [
                  -121.27562883249564,
                  37.836136753682105
                ],
                [
                  -121.27562353544428,
                  37.836142796382944
                ],
                [
                  -121.27562155734964,
                  37.83614998677459
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 9,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 2.7794358243913715
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.2755868019777,
                  37.8361252797176
                ],
                [
                  -121.27558789208629,
                  37.836130088533416
                ],
                [
                  -121.27559121958039,
                  37.83613420045
                ],
                [
                  -121.27559627787937,
                  37.83613698946517
                ],
                [
                  -121.27560229690292,
                  37.836138030976485
                ],
                [
                  -121.27560836030888,
                  37.8361371664232
                ],
                [
                  -121.27561354499824,
                  37.83613452742577
                ],
                [
                  -121.27561706164883,
                  37.83613051574777
                ],
                [
                  -121.27561837488263,
                  37.83612574213101
                ],
                [
                  -121.2756172847721,
                  37.836120933315414
                ],
                [
                  -121.27561395727709,
                  37.83611682139954
                ],
                [
                  -121.27560889897877,
                  37.83611403238513
                ],
                [
                  -121.27560287995705,
                  37.8361129908742
                ],
                [
                  -121.27559681655302,
                  37.83611385542725
                ],
                [
                  -121.27559163186457,
                  37.83611649442399
                ],
                [
                  -121.27558811521332,
                  37.836120506101196
                ],
                [
                  -121.2755868019777,
                  37.8361252797176
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 10,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 2.7776820769196107
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.2756812759915,
                  37.836101713518495
                ],
                [
                  -121.27568236541813,
                  37.836106519299385
                ],
                [
                  -121.27568569081701,
                  37.836110628618904
                ],
                [
                  -121.2756907459265,
                  37.836113415870294
                ],
                [
                  -121.27569676115182,
                  37.836114456719606
                ],
                [
                  -121.27570282072907,
                  37.83611359270688
                ],
                [
                  -121.27570800214215,
                  37.836110955370295
                ],
                [
                  -121.27571151656765,
                  37.83610694622058
                ],
                [
                  -121.27571282896632,
                  37.83610217561459
                ],
                [
                  -121.27571173953774,
                  37.83609736983393
                ],
                [
                  -121.27570841413795,
                  37.83609326051513
                ],
                [
                  -121.27570335902912,
                  37.83609047326452
                ],
                [
                  -121.27569734380565,
                  37.83608943241558
                ],
                [
                  -121.27569128423032,
                  37.83609029642806
                ],
                [
                  -121.27568610281816,
                  37.83609293376394
                ],
                [
                  -121.27568258839199,
                  37.83609694291289
                ],
                [
                  -121.2756812759915,
                  37.836101713518495
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 11,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 4.661361886893401
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27569069376818,
                  37.836090170840656
                ],
                [
                  -121.27569252198829,
                  37.83609823565255
                ],
                [
                  -121.27569810250066,
                  37.83610513169878
                ],
                [
                  -121.2757065857234,
                  37.836109809118376
                ],
                [
                  -121.27571668016238,
                  37.83611155581612
                ],
                [
                  -121.27572684902961,
                  37.83611010587291
                ],
                [
                  -121.2757355442061,
                  37.836105680029576
                ],
                [
                  -121.27574144192947,
                  37.83609895208109
                ],
                [
                  -121.27574364432519,
                  37.836090946297084
                ],
                [
                  -121.27574181609961,
                  37.83608288148582
                ],
                [
                  -121.2757362355847,
                  37.836075985441596
                ],
                [
                  -121.27572775236378,
                  37.83607130802416
                ],
                [
                  -121.27571765792997,
                  37.83606956132747
                ],
                [
                  -121.27570748906818,
                  37.836071011270036
                ],
                [
                  -121.27569879389426,
                  37.83607543711138
                ],
                [
                  -121.27569289616906,
                  37.836082165057704
                ],
                [
                  -121.27569069376818,
                  37.836090170840656
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 12,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 4.76728304607297
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27564885320754,
                  37.83607374500049
                ],
                [
                  -121.2756507229657,
                  37.836081993071474
                ],
                [
                  -121.27565643028002,
                  37.83608904582
                ],
                [
                  -121.27566510626428,
                  37.83609382952859
                ],
                [
                  -121.27567543007808,
                  37.83609561592049
                ],
                [
                  -121.27568583001317,
                  37.8360941330335
                ],
                [
                  -121.27569472277249,
                  37.83608960662385
                ],
                [
                  -121.27570075451348,
                  37.83608272579683
                ],
                [
                  -121.27570300695864,
                  37.83607453809647
                ],
                [
                  -121.27570113719479,
                  37.836066290026174
                ],
                [
                  -121.27569542987776,
                  37.83605923727973
                ],
                [
                  -121.27568675389543,
                  37.83605445357339
                ],
                [
                  -121.27567643008703,
                  37.83605266718259
                ],
                [
                  -121.27566603015764,
                  37.83605415006891
                ],
                [
                  -121.275657137401,
                  37.83605867647648
                ],
                [
                  -121.2756511056581,
                  37.83606555730125
                ],
                [
                  -121.27564885320754,
                  37.83607374500049
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 13,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 5.12991454851732
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27566422793322,
                  37.836033201855614
                ],
                [
                  -121.27566623991865,
                  37.83604207732997
                ],
                [
                  -121.2756723813681,
                  37.83604966655701
                ],
                [
                  -121.2756817173022,
                  37.8360548141452
                ],
                [
                  -121.27569282640917,
                  37.83605673642033
                ],
                [
                  -121.27570401742679,
                  37.836055140733144
                ],
                [
                  -121.27571358662269,
                  37.83605027001274
                ],
                [
                  -121.2757200771728,
                  37.836042865782666
                ],
                [
                  -121.27572250095025,
                  37.836034055270396
                ],
                [
                  -121.27572048895821,
                  37.836025179796835
                ],
                [
                  -121.27571434750566,
                  37.8360175905722
                ],
                [
                  -121.27570501157379,
                  37.83601244298662
                ],
                [
                  -121.27569390247305,
                  37.8360105207128
                ],
                [
                  -121.27568271146203,
                  37.83601211639918
                ],
                [
                  -121.27567314226924,
                  37.836016987117176
                ],
                [
                  -121.2756666517169,
                  37.83602439134463
                ],
                [
                  -121.27566422793322,
                  37.836033201855614
                ]
              ]
            ]
          },
          "bbox": null
        },
        {
          "type": "Feature",
          "properties": {
            "type": "Tree",
            "id": 14,
            "maxHeightAboveGroundLevel": 0,
            "maxWidth": 4.177225273242035
          },
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -121.27557995256883,
                  37.836081340602206
                ],
                [
                  -121.27558159089598,
                  37.83608856779093
                ],
                [
                  -121.27558659179718,
                  37.8360947476071
                ],
                [
                  -121.27559419393096,
                  37.83609893922936
                ],
                [
                  -121.27560323994105,
                  37.83610050452083
                ],
                [
                  -121.27561235265354,
                  37.83609920517991
                ],
                [
                  -121.27562014473959,
                  37.83609523901958
                ],
                [
                  -121.27562542992429,
                  37.83608920985214
                ],
                [
                  -121.27562740358651,
                  37.83608203556406
                ],
                [
                  -121.27562576525499,
                  37.836074808375855
                ],
                [
                  -121.27562076435174,
                  37.83606862856129
                ],
                [
                  -121.27561316221946,
                  37.836064436940774
                ],
                [
                  -121.27560411621349,
                  37.83606287165015
                ],
                [
                  -121.27559500350537,
                  37.836064170990554
                ],
                [
                  -121.27558721142138,
                  37.83606813714929
                ],
                [
                  -121.2755819262352,
                  37.83607416631498
                ],
                [
                  -121.27557995256883,
                  37.836081340602206
                ]
              ]
            ]
          },
          "bbox": null
        }
      ]
    }
    
    opened by jlconnor 4
  • Cannot import name 'SIGPIPE' from 'signal'

    Cannot import name 'SIGPIPE' from 'signal'

    Windows 10 64bit Python 3.8.6

    > svgis.exe draw GSHHS_i_L1.shp -o tmp.svg
    Traceback (most recent call last):
      File "d:\applications\python\lib\runpy.py", line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "d:\applications\python\lib\runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "D:\Applications\packages\python\Scripts\svgis.exe\__main__.py", line 4, in <module>
      File "D:\Applications\packages\python\Lib\site-packages\svgis\cli.py", line 11, in <module>
        from signal import signal, SIGPIPE, SIG_DFL
    ImportError: cannot import name 'SIGPIPE' from 'signal' (d:\applications\python\lib\signal.py)
    
    opened by spajak 4
  • Readthedocs example fails in pyproj

    Readthedocs example fails in pyproj

    $ uname -a
    Linux minikat 5.9.3-arch1-1 #1 SMP PREEMPT Sun, 01 Nov 2020 12:58:59 +0000 x86_64 GNU/Linux
    
    $ pip freeze
    appdirs==1.4.4
    attrs==20.3.0
    certifi==2020.6.20
    click==7.1.2
    click-plugins==1.1.1
    cligj==0.7.0
    coverage==5.3
    cssselect==1.1.0
    distlib==0.3.1
    filelock==3.0.12
    Fiona==1.8.17
    lxml==4.6.1
    munch==2.5.0
    packaging==20.4
    pluggy==0.13.1
    py==1.9.0
    pyparsing==2.4.7
    pyproj==3.0.0
    Shapely==1.7.1
    six==1.15.0
    svgis==0.5.0
    tinycss2==1.1.0
    toml==0.10.2
    tox==3.20.1
    utm==0.6.0
    virtualenv==20.1.0
    webencodings==0.5.1```
    
    $ python -c"import sys;print(sys.version)"
    3.9.0 (default, Oct 16 2020, 23:11:00) 
    [GCC 10.2.0]
    
    $ cat europe-lakes 
    svgis draw ne_110m_admin_0_countries.shp ne_110m_lakes.shp \
        --crs EPSG:102013 \
        --scale 1000 \
        --simplify 90 \
        --style '.ne_110m_admin_0_countries { fill: tan } .Germany { fill: purple }' \
        --style '.ne_110m_lakes { fill: #09d; stroke: none; }' \
        --class-fields name \
        --bounds -10 30 40 65 \
        -o out.svg
    
     $ ls ne_110m*
    ne_110m_admin_0_countries.cpg  ne_110m_admin_0_countries.prj          ne_110m_admin_0_countries.shp  ne_110m_admin_0_countries.VERSION.txt
    ne_110m_admin_0_countries.dbf  ne_110m_admin_0_countries.README.html  ne_110m_admin_0_countries.shx
    
    $ source europe-lakes 
    Traceback (most recent call last):
      File "/home/robin/devel/svgis/bin/svgis", line 8, in <module>
        sys.exit(main())
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/click/core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/click/core.py", line 782, in main
        rv = self.invoke(ctx)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/click/core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/cli.py", line 185, in draw
        click.echo(svgis.map(layer, **kwargs).encode('utf-8'), file=output)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/svgis.py", line 67, in map
        drawing = SVGIS(
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/svgis.py", line 453, in compose
        members = [svg.group(**self.compose_file(f, bounds, scalar=scalar, **kwargs))
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/svgis.py", line 453, in <listcomp>
        members = [svg.group(**self.compose_file(f, bounds, scalar=scalar, **kwargs))
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/svgis.py", line 349, in compose_file
        self.update_projected_bounds(self.in_crs, self.out_crs, unprojected_bounds, padding)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/svgis.py", line 228, in update_projected_bounds
        projected = bounding.transform(bounds, in_crs=in_crs, out_crs=out_crs)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/svgis/bounding.py", line 128, in transform
        transformer = Transformer.from_crs(in_crs, out_crs, skip_equivalent=True, always_xy=True)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/pyproj/transformer.py", line 370, in from_crs
        CRS.from_user_input(crs_to),
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/pyproj/crs/crs.py", line 440, in from_user_input
        return CRS(value, **kwargs)
      File "/home/robin/devel/svgis/lib/python3.9/site-packages/pyproj/crs/crs.py", line 296, in __init__
        super().__init__(projstring)
      File "pyproj/_crs.pyx", line 2302, in pyproj._crs._CRS.__init__
    pyproj.exceptions.CRSError: Invalid projection: +init=epsg:102013 +no_defs +type=crs: (Internal Proj Error: proj_create: crs not found)
    

    I ran all the cli tests with make test-cli and they seemed to work. However, make test had some failures.

    opened by MrBitBucket 2
  • convert underscores in attribute names to hyphens

    convert underscores in attribute names to hyphens

    This is currently only an issue with the fill_rule attribute, which generates fill_rule="evenodd", instead of the expected fill-rule="evenodd". But in general SVG uses hyphens in attribute names, which would presumably be reflected by underscores in Python variables.

    bug 
    opened by RossPaterson 1
  • Consider making license more visible

    Consider making license more visible

    I almost missed fact that this tool is GPLed ( https://github.com/fitnr/svgis/blob/master/src/svgis/graticule.py#L8 )

    Can you consider mentioning it in README and/or adding LICENSE file? Note that it is recommended by GPL authors (though they suggest naming file COPYING - https://www.gnu.org/licenses/gpl-howto.en.html )

    It would also allow GitHub to display license in project summary, see for example my https://github.com/matkoniecz/osm_bot_abstraction_layer

    opened by matkoniecz 1
  • add character encoding

    add character encoding

    The W3C validator reports:

    Warning: No Character encoding declared at document level

    This could be fixed by prepending

    <?xml version="1.0" encoding="UTF-8"?>
    

    to the SVG output.

    bug 
    opened by RossPaterson 2
  • option (or default?) to render points as zero-length lines

    option (or default?) to render points as zero-length lines

    Currently it is possible to control the display of lines and areas using the stylesheet, but point objects are always rendered as a circle with radius 1. If a point could be rendered as a zero-length line, i.e. a line with the point as start and end point, users would be able to style the line using the stroke-width property and setting stroke-linecap: round, producing a circle of the desired size.

    enhancement 
    opened by RossPaterson 4
Releases(v0.5.3)
  • v0.5.3(May 30, 2022)

  • v0.5.2(Sep 25, 2021)

    • Fix an error checking certain geometries (#8)
    • Migrate CI workflows from Travis to Github Actions
    • Remove Python 3.5 from list of supported versions
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Feb 14, 2021)

  • v0.3.10(Mar 7, 2016)

    • Fix CDATA bug with svgis style
    • refactoring, PEP 8 formatting
    • Fix bug that ignored precision
    • Correctly identify and use projections in projected files
    Source code(tar.gz)
    Source code(zip)
  • v0.3.9(Mar 2, 2016)

    • Remove periods and number signs from classes and ids.
    • Refactor classing functions to svgis.style
    • Improve error messages when drawing features.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.8(Feb 28, 2016)

  • v0.3.6(Feb 15, 2016)

    • Add svgis graticule command line tool
    • Ensure no repeated style rules when inlining CSS.
    • Round numbers at the last minute in the svg module. This is quicker.
    • Improve py 2/3 compatibility, esp. when testing.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.5(Feb 14, 2016)

    • Fix problem reprojecting bounds with mixed projections.
    • Add cli tool for getting bounds of a layer
    • Repair --verbose option.
    • Add svgis bounds command line tool for checking the bounds of a layer.
    • Expand tests (coverage now above 90%)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Jan 31, 2016)

    • Switch from argparse to click for cli functions. Much better performance, same options.
    • Switch --simplify argument to accept an integer between 1-99
    • Change --project/-j option in svgis project to --method/-m
    • Remove lxml dependency for inlining CSS.
    • Completely refactor functions that parse XML to use ElementTree (quicker than minidom).
    • Add column names to class of layer group.
    • Prevent broken pipes
    • Squash several bugs related to setting class fields.
    • Squash bugs in drawing certain paths.
    • Remove duplicate/unused code.
    • Ensure use of unicode internally, fixed some small Py3 bugs.
    • More tests and more docs!
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jan 31, 2016)

  • v0.3.1(Jan 23, 2016)

    • Add option to clip files, requires Shapely
    • Add option to inline files, requires lxml
    • Add line simplification option using Visivalingam algorithm, requires numpy
    • Remove svgwrite as a dependency for faster file writing
    • Tests expanded and code refactored, crushing lots of bugs
    • --proj option can now read a file containing a proj4 string
    • Allow unicode in class and id fields
    Source code(tar.gz)
    Source code(zip)
Owner
Neil Freeman
Add a bio
Neil Freeman
An interactive dashboard built with python that enables you to visualise how rent prices differ across Sweden.

sweden-rent-dashboard An interactive dashboard built with python that enables you to visualise how rent prices differ across Sweden. The dashboard/web

Rory Crean 5 Dec 19, 2021
HM02: Visualizing Interesting Datasets

HM02: Visualizing Interesting Datasets This is a homework assignment for CSCI 40 class at Claremont McKenna College. Go to the project page to learn m

Qiaoling Chen 11 Oct 26, 2021
This is a learning tool and exploration app made using the Dash interactive Python framework developed by Plotly

Support Vector Machine (SVM) Explorer This app has been moved here. This repo is likely outdated and will not be updated. This is a learning tool and

Plotly 150 Nov 03, 2022
Moscow DEG 2021 elections plots

Построение графиков на основе публичных данных о ДЭГ в Москве в 2021г. Описание Скрипты в данном репозитории позволяют собственноручно построить графи

9 Jul 15, 2022
Bioinformatics tool for exploring RNA-Protein interactions

Explore RNA-Protein interactions. RNPFind is a bioinformatics tool. It takes an RNA transcript as input and gives a list of RNA binding protein (RBP)

Nahin Khan 3 Jan 27, 2022
Visualize the training curve from the *.csv file (tensorboard format).

Training-Curve-Vis Visualize the training curve from the *.csv file (tensorboard format). Feature Custom labels Curve smoothing Support for multiple c

Luckky 7 Feb 23, 2022
MPL Plotter is a Matplotlib based Python plotting library built with the goal of delivering publication-quality plots concisely.

MPL Plotter is a Matplotlib based Python plotting library built with the goal of delivering publication-quality plots concisely.

Antonio López Rivera 162 Nov 11, 2022
Easily configurable, chart dashboards from any arbitrary API endpoint. JSON config only

Flask JSONDash Easily configurable, chart dashboards from any arbitrary API endpoint. JSON config only. Ready to go. This project is a flask blueprint

Chris Tabor 3.3k Dec 31, 2022
Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python

Petrel Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python. NOTE: The base Storm package provides storm.py, which

AirSage 247 Dec 18, 2021
Wikipedia WordCloud App generate Wikipedia word cloud art created using python's streamlit, matplotlib, wikipedia and wordcloud packages

Wikipedia WordCloud App Wikipedia WordCloud App generate Wikipedia word cloud art created using python's streamlit, matplotlib, wikipedia and wordclou

Siva Prakash 5 Jan 02, 2022
Designed a greedy algorithm based on Markov sequential decision-making process in MATLAB/Python to optimize using Gurobi solver

Designed a greedy algorithm based on Markov sequential decision-making process in MATLAB/Python to optimize using Gurobi solver, the wheel size, gear shifting sequence by modeling drivetrain constrai

Sabbella Prasanna 1 Jan 11, 2022
This GitHub Repository contains Data Analysis projects that I have completed so far! While most of th project are focused on Data Analysis, some of them are also put here to show off other skills that I have learned.

Welcome to my Data Analysis projects page! This GitHub Repository contains Data Analysis projects that I have completed so far! While most of th proje

Kyle Dini 1 Jan 31, 2022
Yata is a fast, simple and easy Data Visulaization tool, running on python dash

Yata is a fast, simple and easy Data Visulaization tool, running on python dash. The main goal of Yata is to provide a easy way for persons with little programming knowledge to visualize their data e

Cybercreek 3 Jun 28, 2021
Flame Graphs visualize profiled code

Flame Graphs visualize profiled code

Brendan Gregg 14.1k Jan 03, 2023
📊📈 Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

📊📈 Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

wq framework 1.2k Jan 01, 2023
Ana's Portfolio

Ana's Portfolio ✌️ Welcome to my Portfolio! You will find here different Projects I have worked on (from scratch) 💪 Projects 💻 1️⃣ Hangman game (Mad

Ana Katherine Cortes Sobrino 9 Mar 15, 2022
Plot and save the ground truth and predicted results of human 3.6 M and CMU mocap dataset.

Visualization-of-Human3.6M-Dataset Plot and save the ground truth and predicted results of human 3.6 M and CMU mocap dataset. human-motion-prediction

Gaurav Kumar Yadav 5 Nov 18, 2022
A small timeseries transformation API built on Flask and Pandas

#Mcflyin ###A timeseries transformation API built on Pandas and Flask This is a small demo of an API to do timeseries transformations built on Flask a

Rob Story 84 Mar 25, 2022
Compute and visualise incidence (reworking of the original incidence package)

incidence2 incidence2 is an R package that implements functions and classes to compute, handle and visualise incidence from linelist data. It refocuss

15 Nov 22, 2022
Turn a STAC catalog into a dask-based xarray

StackSTAC Turn a list of STAC items into a 4D xarray DataArray (dims: time, band, y, x), including reprojection to a common grid. The array is a lazy

Gabe Joseph 148 Dec 19, 2022