ST_MakeLine restituisce le geometrie non supportate non renderizzate nel visualizzatore di geometrie

Aug 20 2020

Sto cercando di eseguire una query ST_MakeLine che restituirà la distanza più breve tra le coordinate fornite Il codice è il seguente:

SELECT ST_MakeLine(route.geom)  as test
FROM (SELECT *
      FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

Il risultato è simile a questo:

è chiaro che il risultato non è nullo. Ma quando lo visualizzo nel visualizzatore di geometria, viene visualizzato il seguente messaggio:

Qualcuno può dirmi cosa significa questo messaggio e come posso trovare una soluzione a questo problema? Il tipo di geometria dello shapefile delle mie strade è MULTILINESTRING.

St_AsText (route.geom) mostra il seguente risultato:

SELECT ST_AsText( ST_MakeLine(route.geom)) FROM (SELECT *FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

Utilizzando la semplice selezione da pgr_fromAtoB si ottiene:

SELECT * FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191) ORDER BY seq

Roads2_noded è lo shapefile di strade su cui sto lavorando mostrato di seguito:

Risposte

1 Mohid Aug 22 2020 at 07:28

Le funzioni pg_Routing non possono essere utilizzate per MultiLineStrings. Pertanto, creare prima una nuova tabella con tutte le voci di dati della tabella strade2. Quindi aggiungi le colonne di strade2 alla nuova tabella. Ad esempio id, sub_id, name, distance, geom ecc. Quindi utilizzare la seguente query per convertire la geometria MultiLineString di road2 in LineString.

ALTER TABLE my_table
ALTER COLUMN geom TYPE geometry(linestring,4326) USING ST_GeometryN(geom, 1);

Dopodiché aggiungi la colonna geom di strade2 alla nuova tabella. Successivamente, applica le query di rete stradale e topologia, ad esempio pgr_nodeNetwork e pgr_createTopology e crea la funzione pgr_fromAtoB Quindi esegui la query ST_MakeLine:

SELECT ST_MakeLine(route.geom)  as test
FROM (SELECT *
      FROM pgr_fromAtoB('my_table_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

Il risultato mostrerà la geometria: