Daha çox

NetworkX: OpenStreetMap məlumatlarının ən qısa yolunu bir OGR dostluq formatı olaraq saxlamaq

NetworkX: OpenStreetMap məlumatlarının ən qısa yolunu bir OGR dostluq formatı olaraq saxlamaq


OSM məlumatlarını CBS əsaslı bir modelə idxal etmək üçün bu skriptdən istifadə edirəm.

Bunun QGIS, PostGIS və ya ArcGIS kimi hər hansı bir proqram paketindən müstəqil şəkildə işləməsi lazımdır.

Sonra aşağıdakı kimi iki qovşaq arasında ən qısa yol yaradıram:

short_path = nx.shortest_path (G, source = u'879835512 ', target = u'879912131') result_graph = G.subgraph (short_path)

Ən qısa yolun nəticələrini (kml?) Təsəvvür etmək və onları saxlamaq istərdim (shp?).

Məndən istifadə etməli olduğum bir hiss varyazmaq_shpancaq düşünürəm ki, yalnız istifadə etmiş olsanız işləyiroxu_shpbirbaşa OSM-dən idxal etdiyimdən bəri yox.

Düzəliş 1:

@Gene şərhinə əsasən aşağıdakı kodu əlavə etdim:

e in result_graph.edges () üçün: p0x = result_graph.node [e [0]] ['lat'] p0y = result_graph.node [e [0]] ['lon'] p1x = result_graph.node [e [1 ]] ['lat'] p1y = result_graph.node [e [1]] ['lon'] edge.append (LineString ([(p0x, p0y), (p1x, p1y)])) nodes = [] for n result_graph.nodes (): px = result_graph.node [e [0]] ['lat'] py = result_graph.node [e [0]] ['lon'] nodes.append ((px, py)) G2 = nx.DiGraph () G2.add_nodes_from (qovşaqlar)

Hələ doğru yolda olduğumu düşünmürəm. Göründüyü kimi koordinatları qovşaqlarım / əlaqələrimlə bir şəkildə saxlamalıyam


Bunu sınadım:

highway_cat = 'otoyol | magistral | birincil | ikincil | üçüncül | yol | yaşayış | xidmət | avtomobil yolu_bağı | magistral_link | birincil_link | ikincil_link | teriary_link' G = oxu_osm (yükləmə_osm (-122.33,47.60, -122.31,47.61, otoyol_cat)) qısa_yol = networkx.shortest_path (G, mənbə = u'1810752839 ', hədəf = u'3393331431') hissələri = [] i üçün qısa yolda: node = G.node [i] parts.append ([float (node ​​['lon']) ), float (node ​​['lat'])]) w = shapefile.Writer (shapefile.POLYLINE) w.line (parts = [parts]) w.field ('FIRST_FLD', 'C', '40') w .field ('SECOND_FLD', 'C', '40') w.record (FIRST_FLD = 'First', SECOND_FLD = "Line") w.save ('C: / rubbish / line')

NƏTİCƏ:


Sadəcə NetworkX-ə baxın: write_shp

Bir şəbəkə x.DiGraph yazaraq iki formaya, kənarlara və qovşaqlara. Düyünlər və kənarların həndəsələr yaratmaq üçün yaxşı bilinən ikili (Wkb) və ya yaxşı bilinən mətn (wkt) düyməsinə sahib olması gözlənilir. Rəqəmsal bir düyməli düymə (x, y) olan qovşaqlar da məqbuldur.

İstifadə etmək lazım deyiloxu_shpəvvəl, lakin digrafın qovşaqlarını və kənarlarını WKT formatına çevirməlisiniz.

Bunun üçün Shapely-dən istifadə edə bilərsiniz


Videoya baxın: Extracting Data from OpenStreetMap using QGIS u0026 QuickOSM