Suite

Comment convertir db.ListProperty (GeoPt) en polygone GeoJSON

Comment convertir db.ListProperty (GeoPt) en polygone GeoJSON


Mon application Python Google App Engine (pas de balise ?) a un modèle de magasin de données d'une zone d'intérêt, simplifié comme

import geojson class AreaOfInterest(db.Model): name = db.StringProperty(required=True) #Géométrie des coordonnées de la limite de la zone = db.ListProperty(db.GeoPt, default=None) #polygone convexe sans trous

Je souhaite l'exporter en tant que GeoJSON, mais je ne suis pas sûr d'un moyen (de préférence Pythonic) de convertir la liste de GeoPt en un objet geojson.Polygon. Bien que je puisse convertir en un tableau de points avec

coords = [] pour c dans self.coordinates : p = geojson.Point((c.lat, c.lon)) coords.append(p)

Je souhaite intégrer un polygone dans une FeatureCollection GeoJson ainsi :

def geojsonArea(self): polygone = geojson.Polygon((self.coordinates)) #ValueError: Expect __geo_interface__' ou une cartographie, got datastore_types.GeoPt geojson_obj = { "type": "FeatureCollection", "area_name" :self.name , "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": polygon }, "properties": { "name": "boundary" } } ] } renvoie geojson.dumps(geojson_obj)

Mais l'appel à geojson.Polygon attend quelque chose comme Polygon([[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)]])

Quelle est la façon la plus propre de faire cette conversion ? Est-ce possible sans parcourir la liste pendant la construction d'une chaîne à transmettre à Polygon() ?


Ce n'est peut-être pas la solution la plus Pythonic mais cela fonctionne. La chaîne résultante est conforme à http://geojsonlint.com/.

def geojsonArea(self): coords = [] pour c dans self.coordinates: p = {'lat': c.lat, 'lng': c.lon} coords.append(p) geojson_obj = { "type": " FeatureCollection", "area_name" :self.name, "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates" : coords }, "properties": { "name": "boundary" } } ] } return geojson.dumps(geojson_obj)

La conversion d'un db.GeoPt en un point a une syntaxe différente de Polygon.

map_center = db.GeoPtProperty() def geojsonArea(self): center = [] center.append(geojson.Point({'lat': self.map_center.lat, 'lng': self.map_center.lon})) #… { "type": "ViewPort", "geometry": center, }

Voir la vidéo: DB Forum 3 Response