أكثر

ST_ClosestPoint (خط ، نقطة) لا يتقاطع مع الخط


في قاعدة بيانات PostGIS الخاصة بي (PostGIS 1.5 على Postgres 8.4.1) ، لدي جدولين: الطرق (تتكون من زنبركات خطية) وحوادث (تتكون من نقاط). كنت أحاول ربط كل حادث اصطدام بطريق ، لكنني أواجه مشكلات في جعل ما يلي يعمل:

حدد ST_ClosestPoint (الطريق_الجمعة ، التحطم ._الحالة) ، ST_Intersects (ST_ClosestPoint (الطريق_الجمعة ، التحطم. the_geom) ، road.the_om) ST_Distance (ST_ClosestPoint (الطريق ._geom ، تحطم. the_geom) ، تحطم. - تعطل الجدول موجود بالفعل في SRID 4326 (حدد the_geom من الأعطال حيث gid = 360) كما تحطم ، (حدد ST_SetSrid (the_geom ، 4326) كـ the_geom من الطرق) كطريق ترتيب حسب المسافة ؛

يجب أن تعيد قائمة الانتظار هذه أقرب نقطة إلى الاصطدام مع gid 360 على كل طريق ، لكن وظيفة ST_Intersects ترجع خطأً للنتيجة الأولى (أقرب نقطة حقيقية على جميع الطرق). أفعل شيئا خاطئا؟ هل هناك طريقة أخرى لربط الاصطدام بأقرب طريق؟


هذه مشكلة قادمة من أن ST_Intersects لا تتسامح معها. حتى إذا كانت إحداثيات الدقة المزدوجة تحتوي على الكثير من الكسور العشرية ، فإنها تشكل شبكة حيث تكون الأماكن الوحيدة للنقاط في التقاطعات. في كثير من الأحيان لا يتقاطع الخط مع أي من هذه التقاطعات ولا توجد طريقة لتقاطع أي نقطة مع الخط تمامًا. الحل هو استخدام st_dwithin بدلاً من ذلك بتفاوت صغير.

/ نيكلاس


شاهد الفيديو: How to plot coordinate point in 3d plane in matlab? scatter3, and pcshow function (شهر اكتوبر 2021).