تحية للجميع،
لم أجد قائمة بريدية للمنتدى ، لذلك سأطلب هنا. هل هناك نموذج "أساسي" للتحويل من قائمة نقاط إلى مضلع؟ على سبيل المثال،
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
ما ليس بالضبط ما أبحث عنه.
شكرا على الصبر والعمل الجيد!
إليكم الأمر: حلقات المضلع (مثيلات الحلقة الخطية) لا يتم تعريفها بالنقاط ، بل يتم تحديدها من خلال تسلسل مجموعات الإحداثيات. النقاط والإحداثيات أشياء مختلفة لشابلي. تحتاج إلى تمرير إحداثيات النقاط إلى مُنشئ 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
التعليق الأكثر فائدة
من أي وقت مضى أسرع قليلاً مرة أخرى: