14

可変数のポリゴンで geoJSON を動的に生成したいと考えています。2 つのポリゴンの例:

{
    "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": {}}
    ]
}

各ポリゴンの座標のリストを提供する関数があるため、ポリゴンのリストを作成できるため、for ループで反復する geoJSON を構築できます。

問題は、それを簡単に行う方法がわからないことです (たとえば、リストを文字列として返すことを考えましたが、geoJSON を文字列として構築するのは悪い考えのように見えます)。

私はこの非常にパイソン的なアイデアを提案されました:

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

しかし、ポイントのリストではなく可変数のポリゴンを追加しているため、このソリューションは適切ではないようです。または、少なくとも私はそれを適応させる方法がわかりません。

文字列として作成することもできますが、よりスマートな方法で作成したいと考えています。何か案が?

4

3 に答える 3

11

ライブラリをインストールできる場合、django にはジオメトリ オブジェクトを処理するための優れたツールがいくつかあり、これらのオブジェクトにはgeojson属性があり、オブジェクトの GeoJSON 表現にアクセスできます。

https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/

>>> 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 は、ジオメトリ オブジェクトのリストも受け入れることができます。

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

2019年更新

shapely with shapely-geojsonが利用可能になりました。これは、django を必要としないため、より簡単に導入できる可能性があります。

于 2013-06-04T15:26:37.470 に答える
10
  1. を構築する方法は既に知っているので、オブジェクトpointを構築するのと非常によく似ていpolygonます。
  2. json.dumpsPythonオブジェクトを文字列に変換するために使用できます

何かのようなもの:

geos = []
for longs,lats in LongLatList
    poly = {
        'type': 'Polygon',
        'coordinates': [[lon,lat] for lon,lat in zip(longs,lats) ]
    }
    geos.append(poly)

geometries = {
    'type': 'FeatureCollection',
    'features': geos,
}

geo_str = json.dumps(geometries) // import json
于 2013-06-04T15:12:16.537 に答える