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
A tool to plot and execute Rossmos's Formula, that helps to catch serial criminals using mathematics

Rossmo Plotter A tool to plot and execute Rossmos's Formula using python, that helps to catch serial criminals using mathematics Author: Amlan Saha Ku

Amlan Saha Kundu 3 Aug 29, 2022
Learn Basic to advanced level Data visualisation techniques from this Repository

Data visualisation Hey, You can learn Basic to advanced level Data visualisation techniques from this Repository. Data visualization is the graphic re

Shashank dwivedi 16 Jan 03, 2023
Dipto Chakrabarty 7 Sep 06, 2022
A python script to visualise explain plans as a graph using graphviz

README Needs to be improved Prerequisites Need to have graphiz installed on the machine. Refer to https://graphviz.readthedocs.io/en/stable/manual.htm

Edward Mallia 1 Sep 28, 2021
By default, networkx has problems with drawing self-loops in graphs.

By default, networkx has problems with drawing self-loops in graphs. It makes it hard to draw a graph with self-loops or to make a nicely looking chord diagram. This repository provides some code to

Vladimir Shitov 5 Jan 06, 2022
Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python

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

AirSage 247 Dec 18, 2021
Seismic Waveform Inversion Toolbox-1.0

Seismic Waveform Inversion Toolbox (SWIT-1.0)

Haipeng Li 98 Dec 29, 2022
A GUI for Pandas DataFrames

PandasGUI A GUI for analyzing Pandas DataFrames. Demo Installation Install latest release from PyPi: pip install pandasgui Install directly from Githu

Adam 2.8k Jan 03, 2023
Lumen provides a framework for visual analytics, which allows users to build data-driven dashboards from a simple yaml specification

Lumen project provides a framework for visual analytics, which allows users to build data-driven dashboards from a simple yaml specification

HoloViz 120 Jan 04, 2023
cqMore is a CadQuery plugin based on CadQuery 2.1.

cqMore (under construction) cqMore is a CadQuery plugin based on CadQuery 2.1. Installation Please use conda to install CadQuery and its dependencies

Justin Lin 36 Dec 21, 2022
Visualization of hidden layer activations of small multilayer perceptrons (MLPs)

MLP Hidden Layer Activation Visualization To gain some intuition about the internal representation of simple multi-layer perceptrons (MLPs) I trained

Andreas Köpf 7 Dec 30, 2022
A python visualization of the A* path finding algorithm

A python visualization of the A* path finding algorithm. It allows you to pick your start, end location and make obstacles and then view the process of finding the shortest path. You can also choose

Kimeon 4 Aug 02, 2022
This is a small program that prints a user friendly, visual representation, of your current bsp tree

bspcq, q for query A bspc analyzer (utility for bspwm) This is a small program that prints a user friendly, visual representation, of your current bsp

nedia 9 Apr 24, 2022
Fast 1D and 2D histogram functions in Python

About Sometimes you just want to compute simple 1D or 2D histograms with regular bins. Fast. No nonsense. Numpy's histogram functions are versatile, a

Thomas Robitaille 237 Dec 18, 2022
Numerical methods for ordinary differential equations: Euler, Improved Euler, Runge-Kutta.

Numerical methods Numerical methods for ordinary differential equations are methods used to find numerical approximations to the solutions of ordinary

Aleksey Korshuk 5 Apr 29, 2022
Geospatial Data Visualization using PyGMT

Example script to visualize topographic data, earthquake data, and tomographic data on a map

Utpal Kumar 2 Jul 30, 2022
Alternative layout visualizer for ZSA Moonlander keyboard

General info This is a keyboard layout visualizer for ZSA Moonlander keyboard (because I didn't find their Oryx or their training tool particularly us

10 Jul 19, 2022
University of Missouri - Kansas City: CS451R: Capstone

CS451RC University of Missouri - Kansas City: CS451R: Capstone Installation cd git clone https://github.com/ala2q6/CS451RC.git cd CS451RC pip3 instal

Alex Arbuckle 1 Nov 17, 2021
A simple python script using Numpy and Matplotlib library to plot a Mohr's Circle when given a two-dimensional state of stress.

Mohr's Circle Calculator This is a really small personal project done for Department of Civil Engineering, Delhi Technological University (formerly, D

Agyeya Mishra 0 Jul 17, 2021
Python package for hypergraph analysis and visualization.

The HyperNetX library provides classes and methods for the analysis and visualization of complex network data. HyperNetX uses data structures designed to represent set systems containing nested data

Pacific Northwest National Laboratory 304 Dec 27, 2022