We have answer of your question!

100% solved queries, no empty question

Question: Building a GeoJSON with Python


0

I want to generate dinamically a geoJSON with a variable number of polygons. Example for 2 polygons:

{
              "type": "FeatureCollection", 
              "features": [
                {"geometry": {
                    "type": "GeometryCollection", 
                    "geometries": [
                        {
                            "type": "Polygon", 
                            "coordinates": 
                                [[11.0878902207, 45.1602390564],
                                 [0.8251953125, 41.0986328125], 
                                 [7.63671875, 48.96484375], 
                                 [15.01953125, 48.1298828125]]
                        }, 
                        {
                            "type": "Polygon", 
                            "coordinates": 
                                [[11.0878902207, 45.1602390564], 
                                 [14.931640625, 40.9228515625], 
                                 [11.0878902207, 45.1602390564]]
                        }
                    ]
                }, 
                "type": "Feature", 
                "properties": {}}
              ]
}

I have a function which gives me the list of coordinates for each polygon, so I can create a list of polygons, so I am able to build the geoJSON iterating it with a for loop.

The problem is that I don't see how to do it easily (I thought for example in returning the list as a string, but building the geoJSON as a string looks like a bad idea).

I have been suggested this very pythonic idea:

geo_json = [ {"type": "Feature",,
                    "geometry": {
                        "type": "Point",
                        "coordinates": [lon,lat] }}
                    for lon,lat in zip(ListOfLong,ListOfLat) ] 

But since I am adding a variable number of Polygons instead of a list of points, this solutions does not seem suitable. Or at least I don't know how to adapt it.

I could build it as a string, but I'd like to do it in a smarter way. Any idea?

Question author Roman-rdgz | Source

Answer


1


If you can get the libraries installed, django has some good tools for dealing with geometry objects, and these objects have a geojson attribute, giving you access to the GeoJSON representation of the object:

https://docs.djangoproject.com/en/1.5/ref/contrib/gis/install/#installation

>>> from django.contrib.gis.geos import Polygon, Point, MultiPoint, GeometryCollection
>>>
>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
>>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly)
>>> gc.geojson
u'{ "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [ 0.0, 0.0 ] }, { "type": "MultiPoint", "coordinates": [ [ 0.0, 0.0 ], [ 1.0, 1.0 ] ] }, { "type": "Polygon", "coordinates": [ [ [ 0.0, 0.0 ], [ 0.0, 1.0 ], [ 1.0, 1.0 ], [ 0.0, 0.0 ] ] ] } ] }'

GeometryCollection can also accept a list of geometry objects:

>>> polys = []
>>> for i in range(5):
...     poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
...     polys.append(poly)
...
>>> gc = GeometryCollection(polys)
Answer author Monkut

Tickanswer.com is providing the only single recommended solution of the question Building a GeoJSON with Python under the categories i.e python , json , dictionary , geojson , . Our team of experts filter the best solution for you.

Related Search Queries:


You may also add your answer

Thanks for contributing an answer to Tick Answer!