سؤال

أنا العبث مع Geodjango، وأريد فقط إضافة حقل مضلع بسيط إلى قاعدة بيانات، ثم قم بتشغيل نقطة مضللة في ذلك للتأكد من أن كل شيء يعمل بخير.

إليك التعليمات البرمجية الخاصة بي في Views.py:

    #adding a polygon
    pe = PolygonExample.objects.create(name="uk_polygon", poly="POLYGON((58.768200159239576, -12.12890625, 58.49369382056807 1.1865234375, 49.18170338770662 -12.9638671875, 50.2612538275847 5.537109375))" )
    #doing the point-in-polygon check
    result = PolygonExample.objects.filter(poly__contains='POINT(52.696361078274485 -0.87890625)') 

وهنا ما لدي في Models.py:

    class PolygonExample(models.Model):
      name = models.CharField(max_length=16, db_index=True)
      poly = models.PolygonField()
      objects = models.GeoManager()

ولكن عندما أحاول إضافة المضلع (polygonexample.objects.create)، أحصل على خطأ: "خطأ واجه التحقق من الهندسة التي تم إرجاعها من وظيفة GEOS C" Geoswktreader_read ".

هل الرمز الخاص بي لإضافة خطأ المضلع؟ لست متأكدا من أنني أفهم كيفية فتحة في إحداثيات Lat / Lat مباشرة.

أو هل هذا خطأ في تثبيت GEOS؟

شكرًا.

هل كانت مفيدة؟

المحلول

لك Wkt. لديه بعض المشاكل:

  1. يتم فصل الأبعاد الإحداثية بالمسافات
  2. تنسيق أزواج (أو tuples) مفصولة بفواصل
  3. تنسيق الطلب هو (X، Y) - أي (LON، LAT)

يجب أن يبدو اختبار مضلع حول المملكة المتحدة مثل هذا:

>>> wkt = "POLYGON((-12.12890625 58.768200159239576, 1.1865234375 58.49369382056807, 5.537109375 50.2612538275847, -12.9638671875 49.18170338770662, -12.12890625 58.768200159239576))"
>>> pe = PolygonExample.objects.create(name="uk_polygon", poly=wkt)
>>> result = PolygonExample.objects.filter(poly__contains='POINT(-0.87890625 52.696361078274485)')  # note x,y order here, too
>>> result[0].name
u'uk_polygon'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top