Shapely: تحويل من قائمة النقاط إلى مضلع

تم إنشاؤها على ٢٤ أغسطس ٢٠١٢  ·  3تعليقات  ·  مصدر: Toblerity/Shapely

تحية للجميع،

لم أجد قائمة بريدية للمنتدى ، لذلك سأطلب هنا. هل هناك نموذج "أساسي" للتحويل من قائمة نقاط إلى مضلع؟ على سبيل المثال،

list_points = []
vertices = [Point(1,1), Point(2,2), Point(3,3)]
for i in xrange(len(vertices)):
    list_points.append(vertices[i])
polygon = Polygon(list_points)

هذا الرمز لا يعمل. اضطررت إلى استخدام convex_hull:

poly = MultiPoint(list_points).convex_hull

ما ليس بالضبط ما أبحث عنه.

شكرا على الصبر والعمل الجيد!

التعليق الأكثر فائدة

من أي وقت مضى أسرع قليلاً مرة أخرى:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area

ال 3 كومينتر

إليكم الأمر: حلقات المضلع (مثيلات الحلقة الخطية) لا يتم تعريفها بالنقاط ، بل يتم تحديدها من خلال تسلسل مجموعات الإحداثيات. النقاط والإحداثيات أشياء مختلفة لشابلي. تحتاج إلى تمرير إحداثيات النقاط إلى مُنشئ Polygon. مثله:

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = sum(map(list, (p.coords for p in points)), [])
>>> poly = Polygon(coords)
>>> poly.area
2.0

بينما أستمر في البحث على Google عن هذا بين الحين والآخر ، فإليك الطريقة التي أفضل القيام بها (أجدها أكثر قابلية للقراءة مثل هذا):

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = [(p.x, p.y) for p in points]
>>> poly = Polygon(coords)
>>> poly.area
2.0

timeit يقول أنه قد يتم تخزين الأشياء مؤقتًا ، لكن نهج sgillies يبدو دائمًا أسرع بمقدار 2/3 (~ 65 لي مقابل 45 ~ له) لذا إذا كنت بحاجة إلى أداء فائق فائق لمجموعات من النقاط أو polys ، ضع في اعتبارك ذلك.

من أي وقت مضى أسرع قليلاً مرة أخرى:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات