יותר

כיצד לבדוק אם צומת נמצא במסלול המחושב עם pgRouting?

כיצד לבדוק אם צומת נמצא במסלול המחושב עם pgRouting?


אני חדש במערכת GIS ואני עוקב אחר סדנת pgRouting.

ייבאתי את מיקומי הצמתים (נקודות, כביש = רחוב_נורה) באמצעות osm2pgsql.

עכשיו אני מחשב כמה נתיבים בין שתי נקודות באמצעות pgr_ksp (נתיב הקצר ביותר K) לחישוב נתיבים הקצרים ביותר ב- K.

כיצד אוכל לספור כמה פנסי רחוב יש לכל שביל?

יש פונקציה שבהנתן נתיב מחזיר את כל הצמתים בנתיב זה?


יש לך שני נושאים מעורבים.

ראשית: pgRoute, משתמש בטופולוגיה מוכנה מראש המבוססת עלLineStringגֵאוֹמֶטרִיָה. לגיאומטריה כזו אין קישורים ישירים ב- osmצמתים. אתה יכול לקבל נקודות גיאו -מרחביות עבור מסלול בנוי, לא osmצמתים.

להשיגצמתים, תוכל לבנות אינדקס בין גיאומטריות של צמתים osm ולבצע בדיקת מרחק. במילים אחרות, בחר את כל הצמתים שהם לא רחוקים אזגבולסביב צמתים של מסלול בנוי.

בכל אופן, עליך להשתמש בגישה זו כגורם לבעיה שנייה.

שְׁנִיָה:כביש מהיר = מנורת רחובהם לא תמיד חלק מהכבישים המהירים. זה אפשרי, אם כןכביש מהיר = ראשיללכת לאורך מרכז רחוב, וכביש מהיר = מנורת רחובמסמן מנורות sideroad המותקנות על המוטות.

אז אתה צריך

  1. חשב מסלול
  2. צור חיץ של מרחק כלשהו סביב גיאומטריה של מסלול ראה:ST_Buffer
  3. הצטרף למנורות רחוב באמצעות שאילתה כך:

    בחר * מתוך planet_osm_point AS sl שבו ST_Intersects (ST_Buffer ((SELECT the_geom כ- route_geom FROM pgr_dijkstra ('SELECT gid as id, source :: int, target :: int, length :: float AS cost FROM way', 157543, 236829, false , false), דרכים WHERE id2 = gid ORDER BY seq), 100), sl.way)

    כפי שהבנתי אותך, route_geom מחזיר לך לא שורה אחת, אלא קבוצה של שורות. במקרה כזה, אתה יכול להשתמשST_ אסוףעםקבוצה לפי(אם אתה צריך) כדי ליצור גיאומטריה של 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 cost FROM דרכים', 157543, 236829, שקר, שקר), דרכים WHERE id2 = gid ORDER BY seq)) כמסלול, 100) ...

    אני לא בטוח לגביST_Buffer (your_route.geometry, 100)כי אני לא יודע הקרנה של הנתונים שלך, ואני לא יכול להגיד שזה יהיה 100 מטר או 100 מעלות. עיין בתיעוד ST_Buffer, או נסה לפתוח גיאומטריה של מסלול שנאגר ביישום GIS כלשהו, ​​להבהרה.


צפו בסרטון: pgRouting #1; SampleData