أكثر

كيف تتحقق مما إذا كانت العقدة في طريقها محسوبة باستخدام pgRouting؟

كيف تتحقق مما إذا كانت العقدة في طريقها محسوبة باستخدام pgRouting؟


أنا جديد على نظام GIS وأتابع ورشة عمل pgRouting.

لقد قمت باستيراد مواقع العقد (النقاط ، الطريق السريع = street_lamp) باستخدام osm2pgsql.

أقوم الآن بحساب عدد قليل من المسارات بين نقطتين باستخدام pgr_ksp (K-Shortest Path) لحساب أقصر مسارات K.

كيف يمكنني حساب عدد مصابيح الشوارع لكل مسار؟

هل هناك وظيفة تعطى مسارًا ترجع جميع العقد في هذا المسار؟


لديك مشكلتان مختلطة.

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

تحصلالعقد، يمكنك إنشاء فهرس بين الأشكال الهندسية لعقد osm وإجراء بحث عن بعد. بمعنى آخر ، حدد جميع العقد التي ليست بعيدة بعد ذلكعتبةحول عقد الطريق المبنية.

على أي حال ، يجب عليك استخدام هذا الأسلوب ليكون سبب المشكلة الثانية.

ثانية:الطريق السريع = مصباح الشارعليست دائمًا جزءًا من الطرق السريعة. من الممكن إذنطريق سريع = أساسيالذهاب على طول وسط الشارع ، والطريق السريع = مصباح الشارععلامات المصابيح الجانبية المركبة على الأعمدة.

لذلك أنت بحاجة إلى

  1. احسب الطريق
  2. قم بإنشاء منطقة عازلة لبعض المسافة حول هندسة المسار ، انظر:ST_Buffer
  3. انضم إلى مصابيح الشوارع عبر استعلام مثل هذا:

    حدد * من planet_osm_point AS sl حيث ST_Intersects (ST_Buffer ((حدد the_geom as route_geom FROM pgr_dijkstra ('SELECT gid as id، source :: int، target :: int، length :: float AS cost from way'، 157543، 236829، false ، false)، way WHERE id2 = gid ORDER BY seq)، 100)، sl.way)

    كما فهمت ، لا يعيد route_geom صفًا واحدًا ، بل مجموعة من الصفوف. في هذه الحالة ، يمكنك استخدامST_Collectمعمجموعة من(إذا احتجت) لتكوين هندسة MultiLineString لاستعلامك الفرعي.

    شيء من هذا القبيل:

    ... ST_Buffer (ST_Multi (ST_Collect (route.route_geom)) من ((SELECT the_geom as route_geom FROM pgr_dijkstra ('SELECT gid as id، source :: int، target :: int، length :: float AS تكلفة من الطرق'، 157543، 236829 ، false ، false) ، الطرق حيث id2 = gid ORDER BY seq)) كمسار ، 100) ...

    لست متأكداST_Buffer (your_route.geometry ، 100)لأنني لا أعرف إسقاط بياناتك ، ولا يمكنني القول هل ستكون 100 متر أم 100 درجة. ارجع إلى وثائق ST_Buffer ، أو حاول فتح هندسة الطريق المخزنة مؤقتًا في بعض تطبيقات نظم المعلومات الجغرافية ، للتوضيح.


شاهد الفيديو: pmapper pgrouting