Suite

Quelle commande utiliser dans PostGIS pour obtenir le même résultat qu'ArcGIS ?

Quelle commande utiliser dans PostGIS pour obtenir le même résultat qu'ArcGIS ?


J'ai deux fichiers de formes et j'essaie de faire une analyse spatiale simple. Quand je veux savoir quel polygone appartient à un autre polygone dans un autre fichier de formes, j'utilise toujours sélectionner par emplacement et en Méthode de sélection spatiale je choisis contenir l'entité de la couche source.

Maintenant, j'ai ces deux fichiers de formes dans postgis et j'essaie de faire la même chose en utilisant SQL Query mais j'ai obtenu ces résultats :

Sélectionnez * dans l'état où ST_Contains(geom, (sélectionnez geom dans la région où REGION_N="CAPITAL_REGION"));

= 0 résultats, dans ArcMap j'ai obtenu 1 résultat.

j'ai aussi essayé

ST_contient correctement

=0 résultats

Quand j'ai essayé

ST_Intersects

= 3 résultats, les mêmes dans ArcMap. Il semble donc que les intersections fonctionnent mais "ST_Contains" ne fonctionne pas pour une raison quelconque.

Où pourrait être le problème SQL?


Je pourrais reproduire le problème avec vos données de fichier de formes. J'ai utilisé ogr2ogr pour convertir les fichiers de formes en tables PostGIS et votre requête ne trouve rien.

Sélectionnez * dans l'état où ST_Contains(geom, (sélectionnez geom dans la région où REGION_N="CAPITAL_REGION"));

Ensuite, j'ai ouvert vos fichiers de formes avec OpenJUMP et j'ai fait quelques tests. Les deux couches ont des erreurs de topologie (auto-intersections d'anneaux) qui peuvent gêner les fonctions spatiales, mais dans ce cas, je pense que le problème vient de très peu de différences dans les coordonnées des sommets correspondants dans ces deux fichiers de formes. Voici un exemple:

Couche : région ID de la fonction : 50 [ 0:44] POINT (103.86042442121341 1.343437997354843) [ 0:45] POINT (103.86043696024463 1.3434034315038) Couche : État ID de la fonction : 48 [ 7:0:45] POINT (103.86042442121337 1.3434379973548598) [ 7:0 :46] POINT (103.86043696024463 1.3434034315038228)

Les coordonnées diffèrent à la 12e place des coordonnées environ, ce qui est très très peu, mais elles diffèrent toujours. Lorsque PostGIS effectue des calculs, je pense qu'il constate que certains sommets de CAPITAL_REGION sont en dehors du polygone de STATE_1 et donc ST_Contains si "false".

Ce que je fais habituellement dans des cas comme celui-ci, c'est de réduire d'abord la précision des sommets à une mesure raisonnable. Six ou sept décimales pourraient être un bon début (voir https://en.wikipedia.org/wiki/Decimal_degrees).

La principale raison du problème est peut-être que les sommets qui ont les mêmes coordonnées dans ArcMap sont écrits avec des valeurs légèrement différentes dans les fichiers de formes "État" et "régions". Ou peut-être qu'ArcMap gère les coordonnées internes avec une certaine tolérance, mais PostGIS utilise toute la précision de l'analyse.


Voir la vidéo: QGIS Tutorial: Connect to PostGIS database EN