Mi aplicación Python Google App Engine (¿sin etiqueta?) tiene un modelo de almacén de datos de un Área de Interés, simplificado como
import geojson
class AreaOfInterest(db.Model):
name = db.StringProperty(required=True)
#Geometry of area boundary
coordinates = db.ListProperty(db.GeoPt, default=None) #convex polygon without holes
Deseo exportar esto como GeoJSON, pero no estoy seguro de una manera (preferiblemente Pythonic) para convertir la Lista de GeoPt a un objeto geojson.Polygon. Aunque puedo convertir a una matriz de puntos con
coords = []
for c in self.coordinates:
p = geojson.Point((c.lat, c.lon))
coords.append(p)
Deseo incrustar un polígono en un GeoJson FeatureCollection así:
def geojsonArea(self):
polygon = geojson.Polygon((self.coordinates))
#ValueError: Expect __geo_interface__' or a mapping, got datastore_types.GeoPt
geojson_obj = {
"type": "FeatureCollection",
"area_name" :self.name,
"features": [
{ "type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": polygon
},
"properties": {
"name": "boundary"
}
}
]
}
return geojson.dumps(geojson_obj)
Pero el llamamiento a geojson.Polygon espera algo como Polígono([[(2,38, 57,322), (23,194, -20,28), (-120,43, 19,15), (2,38, 57,322)]])
¿Cuál es la forma más limpia de hacer esta conversión? ¿Es posible sin recorrer la lista mientras se construye una cadena para pasarla a Polygon()?