Več

Nx_spatial ne bere vseh funkcij shapefile

Nx_spatial ne bere vseh funkcij shapefile


Imam datoteko oblike premice za cestno omrežje. Ceste so razdeljene na vsakem križišču (vozlišču), npr. če se dve cesti sekata na eni točki, sta razdeljeni na štiri člene (robove). Torej z uporabo tabele atributov shapefile vem, da ima shapefile 600 robov. Ko pa se prebere shapefilenx_spatial, skupno število najdenih robov je le 497. Zanima me, zakaj manjka drugih 103 cestnih povezav (robov). Hvala

uvozi nx_spatial kot ns cesta = ns.read_shp (pot) #path = pot do poligline shapefile roads.number_of_edges () #output = 497

Upam, da te informacije pomagajo: Windows7, Python 2.7 Anaconda 64bit, Eclipse. Težava je povezana z nx_spatial. Toda take oznake nisem mogel ustvariti za slab ugled.


To nima nobene zveze z vašo različico Pythona ali vašim operacijskim sistemom.

Modul Python Networkx (nx_spatial je zelo star, uporabite neposredno NetworkX: read_shp) ne reže črt v vsakem križišču in poenostavlja geometrije črt v začetno in končno koordinato.

Ustvari networkx.DiGraph iz oblik datotek. Točkaste geometrije se pretvorijo v vozlišča, črte v robove. Kot ključi se uporabljajo koordinatni nabori. Atributi so ohranjeni, geometrije črt poenostavljene v začetno in končno koordinato. Sprejema eno datoteko oblike ali imenik številnih datotek oblike.

Primer:

število lastnosti:

uvoz fiona features = fiona.open ('test.shp') print len ​​(features) 5 za podvig v lastnostih: print feat ['geometry'] {'type': 'LineString', 'koordinate': [(3.0, 2.0 ), (2.0, 3.0), (2.0, 4.0)]} {'type': 'LineString', 'koordinate': [(1.0, 2.0), (2.0, 3.0), (3.0, 4.0)]} {' vrsta ':' LineString ',' koordinate ': [(2.0, 1.0), (3.0, 2.0), (4.0, 2.0), (4.0, 4.0)]} {' tip ':' LineString ',' koordinate ': [(1.0, 1.0), (2.0, 1.0), (3.0, 1.0)]} {'type': 'LineString', 'koordinate': [(0.0, 0.0), (1.0, 1.0), (1.0, 2.0 ), (1.0, 4.0)]}

število vozlišč in robov:

uvozi networkx kot nx G = nx.read_shp ('test.shp') print G.nodes () [(1.0, 2.0), (3.0, 2.0), (3.0, 1.0), (4.0, 4.0), (2.0, 1.0), (1.0, 1.0), (0.0, 0.0), (1.0, 4.0), (3.0, 4.0), (2.0, 4.0)] leča tiskanja (G.nodes ()) 10 tiskanje G.edges () [ ((1.0, 2.0), (3.0, 4.0)), ((3.0, 2.0), (2.0, 4.0)), ((2.0, 1.0), (4.0, 4.0)), ((1.0, 1.0), ( 3.0, 1.0)), ((0.0, 0.0), (1.0, 4.0))] leča tiskanja (G.edges ()) 5

Robovi grafa G:

Kar želite, je ravninski graf:

V teoriji grafov je ravninski graf graf, ki ga je mogoče vgraditi v ravnino, torej ga je mogoče narisati na ravnino tako, da se njegovi robovi sekajo le na njihovih končnih točkah. Z drugimi besedami, narišemo ga lahko tako, da se noben rob ne prekriža.

Rezultat z algoritmom Planar Graph (žal modul NetworkX ne podpira Planar Graph)

features = fiona.open ('test_Arc.shp') len (features) 11 za podvig v lastnostih: print feat ['geometry'] {'type': 'LineString', 'koordinate': [(0.0, 0.0), ( 1.0, 1.0)]} {'type': 'LineString', 'koordinate': [(1.0, 1.0), (2.0, 1.0)]} {'type': 'LineString', 'koordinate': [(1.0, 1.0), (1.0, 2.0)]} {'type': 'LineString', 'koordinate': [(1.0, 2.0), (2.0, 3.0)]} {'type': 'LineString', 'koordinate': [(1.0, 2.0), (1.0, 4.0)]} {'type': 'LineString', 'koordinate': [(2.0, 1.0), (3.0, 1.0)]} {'type': 'LineString', 'koordinate': [(2.0, 1.0), (3.0, 2.0)]} {'tip': 'LineString', 'koordinate': [(2.0, 3.0), (3.0, 4.0)]} {'tip': 'LineString', 'koordinate': [(2.0, 3.0), (2.0, 4.0)]} {'vrsta': 'LineString', 'koordinate': [(3.0, 2.0), (2.0, 3.0)]} { 'type': 'LineString', 'koordinate': [(3.0, 2.0), (4.0, 2.0), (4.0, 4.0)]}

Poglej si posnetek: QGIS 3 - 3. Создание SHP-файлов.