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
GitHubPoster - Make everything a GitHub svg poster

GitHubPoster Make everything a GitHub svg poster 支持 Strava 开心词场 扇贝 Nintendo Switch GPX 多邻国 Issue

yihong 1.3k Jan 2, 2023
Generate SVG (dark/light) images visualizing (private/public) GitHub repo statistics for profile/website.

Generate daily updated visualizations of GitHub user and repository statistics from the GitHub API using GitHub Actions for any combination of private and public repositories, whether owned or contributed to - no server required.

Adam Ross 2 Dec 16, 2022
Create Badges with stats of Scratch User, Project and Studio. Use those badges in Github readmes, etc.

Scratch-Stats-Badge Create customized Badges with stats of Scratch User, Studio or Project. Use those badges in Github readmes, etc. Examples Document

Siddhesh Chavan 5 Aug 28, 2022
Chem: collection of mostly python code for molecular visualization, QM/MM, FEP, etc

chem: collection of mostly python code for molecular visualization, QM/MM, FEP,

null 5 Sep 2, 2022
:bowtie: Create a dashboard with python!

Installation | Documentation | Gitter Chat | Google Group Bowtie Introduction Bowtie is a library for writing dashboards in Python. No need to know we

Jacques Kvam 753 Dec 22, 2022
Create HTML profiling reports from pandas DataFrame objects

Pandas Profiling Documentation | Slack | Stack Overflow Generates profile reports from a pandas DataFrame. The pandas df.describe() function is great

null 10k Jan 1, 2023
Python library that makes it easy for data scientists to create charts.

Chartify Chartify is a Python library that makes it easy for data scientists to create charts. Why use Chartify? Consistent input data format: Spend l

Spotify 3.2k Jan 4, 2023
Create HTML profiling reports from pandas DataFrame objects

Pandas Profiling Documentation | Slack | Stack Overflow Generates profile reports from a pandas DataFrame. The pandas df.describe() function is great

null 6.8k Feb 18, 2021
Python library that makes it easy for data scientists to create charts.

Chartify Chartify is a Python library that makes it easy for data scientists to create charts. Why use Chartify? Consistent input data format: Spend l

Spotify 2.8k Feb 18, 2021
Painlessly create beautiful matplotlib plots.

Announcement Thank you to everyone who has used prettyplotlib and made it what it is today! Unfortunately, I no longer have the bandwidth to maintain

Olga Botvinnik 1.6k Jan 6, 2023
Python library that makes it easy for data scientists to create charts.

Chartify Chartify is a Python library that makes it easy for data scientists to create charts. Why use Chartify? Consistent input data format: Spend l

Spotify 3.2k Jan 1, 2023
Create a visualization for Trump's Tweeted Words Using Python

Data Trump's Tweeted Words This plot illustrates twitter word occurences. We already did the coding I needed for this plot, so I was very inspired to

null 7 Mar 27, 2022
Python package to Create, Read, Write, Edit, and Visualize GSFLOW models

pygsflow pyGSFLOW is a python package to Create, Read, Write, Edit, and Visualize GSFLOW models API Documentation pyGSFLOW API documentation can be fo

pyGSFLOW 21 Dec 14, 2022
Script to create an animated data visualisation for categorical timeseries data - GIF choropleth map with annotations.

choropleth_ldn Simple script to create a chloropleth map of London with categorical timeseries data. The script in main.py creates a gif of the most f

null 1 Oct 7, 2021
Create 3d loss surface visualizations, with optimizer path. Issues welcome!

MLVTK A loss surface visualization tool Simple feed-forward network trained on chess data, using elu activation and Adam optimizer Simple feed-forward

null 7 Dec 21, 2022
Create a table with row explanations, column headers, using matplotlib

Create a table with row explanations, column headers, using matplotlib. Intended usage was a small table containing a custom heatmap.

null 4 Aug 14, 2022
🐍PyNode Next allows you to easily create beautiful graph visualisations and animations

PyNode Next A complete rewrite of PyNode for the modern era. Up to five times faster than the original PyNode. PyNode Next allows you to easily create

ehne 3 Feb 12, 2022
Using SQLite within Python to create database and analyze Starcraft 2 units data (Pandas also used)

SQLite python Starcraft 2 English This project shows the usage of SQLite with python. To create, modify and communicate with the SQLite database from

null 1 Dec 30, 2021
Use Perspective to create the chart for the trader’s dashboard

Task Overview | Installation Instructions | Link to Module 3 Introduction Experience Technology at JP Morgan Chase Try out what real work is like in t

Abdulazeez Jimoh 1 Jan 22, 2022