Viac

Nx_spatial nečíta všetky funkcie shapefile


Mám polyline shapefile pre cestnú sieť. Cesty sú rozdelené na každej križovatke (uzle), napr. ak sa v jednom bode pretínajú dve cesty, rozdelia sa na štyri spojenia (hrany). Takže pomocou tabuľky atribútov shapefile viem, že tento shapefile má 600 hrán. Ale keď sa načíta tvarový súbornx_spatial, celkový počet nájdených hrán je iba 497. Chcel by som vedieť, prečo chýba ďalších 103 cestných spojení (hrán). Vďaka

importovať nx_spatial ako ns roads = ns.read_shp (cesta) # cesta = cesta k lomenej tvarovej ceste roads.number_of_edges () #output = 497

Dúfam, že tieto informácie pomôžu: Windows7, Python 2.7 Anaconda 64bit, Eclipse. Problém súvisí s nx_spatial. Ale nemohol som vytvoriť taký štítok pre nízku reputáciu.


To nemá nič spoločné s vašou verziou Pythonu alebo vašim OS.

Modul Python Networkx (nx_spatial je veľmi starý, použite priamo NetworkX: read_shp) nereže čiary na každej križovatke a nezjednodušuje geometriu čiar na začiatočné a koncové súradnice.

Generuje networkx.DiGraph z tvarových súborov. Geometrie bodov sa prekladajú do uzlov, čiary do hrán. Ako kľúče sa používajú n-tice súradníc. Atribúty sú zachované, geometrie čiar sú zjednodušené na začiatočné a koncové súradnice. Prijíma jeden tvarový súbor alebo adresár mnohých tvarových súborov.

Príklad:

počet funkcií:

import fiona features = fiona.open ('test.shp') print len ​​(features) 5 for feat in features: print feat ['geometry'] {'type': 'LineString', 'Coordinates': [(3.0, 2.0 ), (2.0, 3.0), (2.0, 4.0)]} {'type': 'LineString', 'Coordinates': [(1.0, 2.0), (2.0, 3.0), (3.0, 4.0)]} {' typ ':' LineString ',' Coordinates ': [(2.0, 1.0), (3.0, 2.0), (4.0, 2.0), (4.0, 4.0)]} {' type ':' LineString ',' Coordinates ': [(1.0, 1.0), (2.0, 1.0), (3.0, 1.0)]} {'type': 'LineString', 'Coordinates': [(0.0, 0.0), (1.0, 1.0), (1.0, 2.0 ), (1,0; 4,0)]}

počet uzlov a hrán:

importovať networkx ako nx G = nx.read_shp ('test.shp') tlačiť 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)] dĺžka tlače (G.nodes ()) 10 tlač G. hrany () [ ((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))] dĺžka tlače (G.edges ()) 5

Hrany grafu G:

To, čo chcete, je rovinný graf:

V teórii grafov je rovinný graf graf, ktorý je možné vložiť do roviny, to znamená, že ho možno do roviny nakresliť tak, že sa jeho hrany pretínajú iba v koncových bodoch. Inými slovami, dá sa nakresliť tak, aby sa žiadne hrany nekrižovali.

Výsledok s algoritmom rovinného grafu (modul NetworkX bohužiaľ nepodporuje rovinný graf)

features = fiona.open ('test_Arc.shp') len (features) 11 pre výkon vo funkciách: tlačiť výkon ['geometria'] {'typ': 'LineString', 'súradnice': [(0,0, 0,0), ( 1.0, 1.0)]}} {'type': 'LineString', 'Coordinates': [(1.0, 1.0), (2.0, 1.0)]} {'type': 'LineString', 'Coordinates': [(1.0, 1.0), (1.0, 2.0)]} {'type': 'LineString', 'Coordinates': [(1.0, 2.0), (2.0, 3.0)]} {'type': 'LineString', 'Coordinates': [(1.0, 2.0), (1.0, 4.0)]} {'type': 'LineString', 'Coordinates': [(2.0, 1.0), (3.0, 1.0)]} {'type': 'LineString', 'Coordinates': [(2.0, 1.0), (3.0, 2.0)]} {'type': 'LineString', 'Coordinates': [(2.0, 3.0), (3.0, 4.0)]} {'type': 'LineString', 'Coordinates': [(2.0, 3.0), (2.0, 4.0)]} {'type': 'LineString', 'Coordinates': [(3.0, 2.0), (2.0, 3.0)]} { 'type': 'LineString', 'Coordinates': [(3.0, 2.0), (4.0, 2.0), (4.0, 4.0)]}


Pozri si video: QGIS 3 - 3. Создание SHP-файлов. (Október 2021).