أكثر

كيفية تحويل db.ListProperty (GeoPt) إلى GeoJSON Polygon

كيفية تحويل db.ListProperty (GeoPt) إلى GeoJSON Polygon


يحتوي تطبيق Python Google App Engine (بدون علامة؟) على نموذج مخزن بيانات لمنطقة اهتمام ، مبسط مثل

استيراد فئة geojson AreaOfInterest (db.Model): الاسم = db.StringProperty (مطلوب = صحيح) # قياس إحداثيات حدود المنطقة = db.ListProperty (db.GeoPt ، افتراضي = لا شيء) #convex polygon بدون ثقوب

أرغب في تصدير هذا كـ GeoJSON ، لكني لست متأكدًا من طريقة (يفضل Pythonic) لتحويل قائمة GeoPt إلى كائن geojson.Polygon. على الرغم من أنني أستطيع التحويل إلى مجموعة من النقاط باستخدام

coords = [] لـ c في self.coordinates: p = geojson.Point ((c.lat، c.lon)) coords.append (p)

أرغب في تضمين مضلع في مجموعة ميزات GeoJson بالتالي:

def geojsonArea (self): polygon = geojson.Polygon ((self.coordinates)) #ValueError: توقع __geo_interface__ 'أو تعيين ، حصلت على datastore_types.GeoPt geojson_obj = {"type": "FeatureCollection"، "area_name": self. ، "الميزات": [{"النوع": "الميزة" ، "الهندسة": {"النوع": "المضلع" ، "الإحداثيات": المضلع} ، "الخصائص": {"الاسم": "الحدود"}}] } إرجاع geojson.dumps (geojson_obj)

لكن استدعاء geojson.Polygon يتوقع شيئًا مثل Polygon ([[(2.38، 57.322)، (23.194، -20.28)، (-120.43، 19.15)، (2.38، 57.322)]])

ما هي أنظف طريقة لإجراء هذا التحويل؟ هل من الممكن بدون تكرار القائمة أثناء إنشاء سلسلة لتمريرها إلى Polygon ()؟


قد لا يكون هذا هو الحل الأكثر Pythonic ولكنه يعمل. السلسلة الناتجة تتوافق مع http://geojsonlint.com/.

def geojsonArea (self): coords = [] لـ c في self.coordinates: p = {'lat': c.lat، 'lng': c.lon} coords.append (p) geojson_obj = {"type": " FeatureCollection "،" area_name ": self.name ،" features ": [{" type ":" Feature "،" الهندسة ": {" type ":" Polygon "،" الإحداثيات ": coords} ،" الخصائص ": { "الاسم": "الحدود"}}] يعرض geojson.dumps (geojson_obj)

تحويل db.GeoPt إلى نقطة له بناء جملة مختلف عن المضلع.

map_center = db.GeoPtProperty () def geojsonArea (self): center = [] center.append (geojson.Point ({'lat': self.map_center.lat، 'lng': self.map_center.lon})) #… {"النوع": "منفذ العرض" ، "الهندسة": المركز ،}