أكثر

أقرب نقطة لـ PostGIS مع LATERAL JOIN في PostgreSQL 9.3+

أقرب نقطة لـ PostGIS مع LATERAL JOIN في PostgreSQL 9.3+


أحتاج إلى الحصول على أقرب نقطة من جدول آخر في كل عنصر في جدول واحد. الجدول الأول يحتوي على إشارات المرور والثاني يحتوي على مداخل المدينة. الشيء هو أنه لا يمكنني استخدام وظيفة ST_ClosestPoint ولا بد لي من استخدام وظيفة ST_Distance والحصول على سجل min (ST_distance) لكنني عالق تمامًا في بناء الاستعلام.

إنشاء TABLE traffic_signs (معرف رقمي (8،0)) ، هندسة "GEOMETRY" ، CONSTRAINT traffic_signs_pkey PRIMARY KEY (id) ، CONSTRAINT traffic_signs_id_key UNIQUE (id)) WITH (OIDS = TRUE) ؛ إنشاء جدول المدخلات (رقم التعريف (8،0)) ، الهندسة "GEOMETRY" ، CONSTRAINT Entry_halls_pkey PRIMARY KEY (id) ، CONSTRAINT Entry_halls_id_key UNIQUE (id)) WITH (OIDS = TRUE) ؛

أحتاج إلى الحصول على معرف أقرب مدخل إلى كل إشارة مرور.

أنا أعرف بالفعل كيفية القيام بذلك من خلال الانضمام إلى الجدولين كاملين. انظر الأسئلة والأجوبة هنا: PostGIS أقرب نقطة مع ST_Distance

يُقال في هذا الموضوع المذكور أن هناك ميزة جديدة رائعة في PostgreSQL 9.3+. أرغب في استخدام هذه الميزة الرائعة في PostgreSQL 9.3+ والتي تسمى LATERAL JOIN لتحقيق نفس الشيء ، ولكن لا يوجد الكثير من المعلومات حول هذه الميزة ولا أعرف كيف سيكون في هذه الحالة الحصول على أقرب نقطة من طاولة أخرى.

آمل أن يتمكن أحدهم من مسح هذا.


إنشاء جدول p (المفتاح الأساسي التسلسلي للمعرف ، الهندسة الهندسية (النقطة ، 2100)) ؛

يحتوي الجدول على 250 ألف نقطة تقريبًا ، وباستخدام الاستعلام التالي ، يمكنك العثور على أقرب نقطة في نفس مجموعة البيانات (هذه ليست نفس النقطة).

حدد a.id ، b.id target ، المسافة bd من p كوصلة عرضية جانبية (حدد مميز على (a.id) b.id ، a.geom <-> b.geom d من p as b حيث a.id ! = b.id و st_dwithin (a.geom، b.geom، 400) بترتيب a.id، d asc) كـ b ؛

كما ترى فإن الكلمة الأساسية الجانبية تسمح لي بالإشارة إلى الأعمدة من العناصر السابقة في قائمة FROM.
قبل ذلك ، بدون البند الجانبي كنت سأحصل على الخطأ
مرجع غير صالح لإدخال من جملة للجدول "أ"
وإشارة من
يوجد إدخال للجدول "أ" ، ولكن لا يمكن الرجوع إليه من هذا الجزء من الاستعلام.