ST_MakeLine renvoie les géométries non prises en charge non rendues dans la visionneuse de géométrie

Aug 20 2020

J'essaie d'exécuter une requête ST_MakeLine qui renverra la distance la plus courte entre les coordonnées données Le code est le suivant:

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

Le résultat ressemble à ceci:

il est clair que le résultat ne montre pas null. Mais lorsque je le visualise dans la visionneuse de géométrie, il donne le message suivant:

Quelqu'un peut-il me dire ce que signifie ce message et comment puis-je trouver une solution à ce problème? Le type de géométrie de mon fichier de formes de routes est MULTILINESTRING.

St_AsText (route.geom) montre le résultat suivant:

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

L'utilisation d'un simple Select from pgr_fromAtoB donne:

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

Le Roads2_noded est le fichier de formes de routes sur lequel je travaille illustré ci-dessous:

Réponses

1 Mohid Aug 22 2020 at 07:28

Les fonctions pg_Routing ne peuvent pas être utilisées pour les MultiLineStrings. Par conséquent, créez d'abord une nouvelle table avec toutes les entrées de données de la table routes2. Ajoutez ensuite les colonnes de routes2 à la nouvelle table. Par exemple id, sub_id, name, distance, geom etc. Utilisez ensuite la requête suivante pour convertir la géométrie MultiLineString de routes2 en LineString.

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

Après cela, ajoutez la colonne geom de routes2 à la nouvelle table. Ensuite, appliquez les requêtes de réseau routier et de topologie, c'est-à-dire pgr_nodeNetwork et pgr_createTopology et créez la fonction pgr_fromAtoB Ensuite, exécutez la requête 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

Le résultat affichera la géométrie: