deuxième partie de la série <\/A>porte sur les résultats incohérents qui surviennent lorsqu'on mélange différentes implémentations des opérateurs spatiaux.<\/EM><\/P><\/P>
Neuf mois après mon dernier billet de blog, je ne peux pas dire que c'était le rythme que je visais lorsque GeoNet a été lancé (au moins je ne donne pas plus de poids aux résolutions GeoNet qu'à celles du Nouvel An<\/EM>). Je ne sais pas si ma sécheresse est terminée, mais un nerf à vif a été suffisamment touché par Esri pour faire pleuvoir, du moins pour le moment. Parmi tous les tréteaux qui encombrent mes placards, la mauvaise documentation et ses conséquences est l'un des plus usés. Aussi honnête qu'Abraham Lincoln dise qu'on ne peut pas tout croire sur internet, je pense que les utilisateurs de logiciels devraient pouvoir faire confiance à l'aide en ligne et à la documentation d'une entreprise.<\/P><\/P>On ne peut pas passer trop de temps dans le monde des relations spatiales sans rencontrer le Modèle d'Intersection Étendue Dimensionnellement 9 (DE-9IM). Le DE-9IM a été développé par Clementini et d'autres au milieu des années 90 comme une évolution du Modèle des 4 Intersections (4IM) et du Modèle des 9 Intersections (9IM). Bien que le DE-9IM ne soit pas la seule définition des relations spatiales, il est devenu la définition 2D dominante après son inclusion dans la
outil Sélectionner une couche par emplacement <\/A> en utilisant les deux définitions d'À l'intérieur :<\/P><\/P>
>>> arcpy.SelectLayerByLocation_management("line", "WITHIN", "polygon")
<Result 'line'>
>>> arcpy.GetCount_management("line")
<Result '1'>
>>> arcpy.SelectLayerByLocation_management("line", "WITHIN_CLEMENTINI", "polygon")
<Result 'line'>
>>> arcpy.GetCount_management("line")
<Result '0'><\/PRE><\/P>Jusqu'ici tout va bien. Au-delà du fait que les définitions par défaut d'Esri pour Contient et À l'intérieur diffèrent de la plupart des autres bibliothèques de géométrie et applications géospatiales, y compris les normes OGC pour les entités simples, au moins les résultats correspondent à la documentation rare disponible en ligne.<\/P><\/P>À ce stade, il est vraiment important de souligner quelque chose qui est facilement négligé. Les fonctions ST_Geometry d'Esri sont<\/> conformes aux normes OGC pour l'accès aux entités simples et SQL, ce qui signifie que ST_Within adhère à la définition de Clementini et non à celle d'Esri.<\/> P >< P ><\/>SQL> ; SELECT sde.st_within(sde.st_geomfromtext('LINESTRING(1 0, 2 0)', 0),
  ; 2 & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; sde.st_geomfromtext('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))', 0))
  ; 3 & nbsp ; FROM dual;
SDE.ST_WITHIN(SDE.ST_GEOMFROMTEXT('LINESTRING(10 ,20)',0),SDE.ST_GEOMFROMTEXT('PO
--------------------------------------------------------------------------------
  ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... < P ><\/>< P >Jusqu'à présent , je soutiendrais que la documentation Esri relative aux relations spatiales a été faible car elle repose fortement sur l'inférence . L'utilisateur attentif pourrait remarquer qu'il existe plusieurs types de recouvrement À l'intérieur dans le menu déroulant pour l'< A href = "http : \/ \/ desktop.arcgis.com \/ en \/ desktop \/ latest \/ tools \/ data-management-toolbox \/ select-layer-by-location.htm " rel = "nofollow noopener noreferrer " target = "_blank" > outil Sélectionner une couche par emplacement <\/> A > , et l'utilisateur curieux pourrait aller plus loin pour lire sur les types de recouvrement afin de comprendre leurs différences . L'utilisateur vraiment attentif et connaisseur pourrait comprendre qu'une seule ligne dans la documentation < A href = "http : \/ \/ desktop.arcgis.com \/ en \/ desktop \/ latest \/ manage-data \/ using-sql-with-gdbs \/ what-is-the-st-geometry-storage-type.htm " rel = "nofollow noopener noreferrer " target = "_blank" > Qu'est-ce que le type de stockage ST_Geometry ? <\/> A > indiquant que ST_Geometry implémente la spécification SQL 3 signifie que la fonction ST_Within adhère à la définition de Clementini plutôt qu'à celle d'Esri issue de l'< A href = "http : \/ \/ desktop.arcgis.com \/ en \/ desktop \/ latest \/ tools \/ data-management-toolbox \/ select-layer-by-location.htm " rel = "nofollow noopener noreferrer " target = "_blank" > outil Sélectionner une couche par emplacement <\/> A > . En résumé , il n'existe aucune documentation reconnaissant explicitement qu'il existe différentes définitions de certaines relations spatiales dans diverses parties du logiciel Esri lui-même .<\/> P >< P ><\/>< P >Déjà confus ? Attendez , le vrai plaisir commence lorsque nous plongeons dans les < A href = "http : \/ \/ desktop.arcgis.com \/ en \/ desktop \/ latest \/ analyze \/ arcpy-classes \/ geometry.htm " rel = "nofollow noopener noreferrer " target = "_blank" > Classes ArcPy Geometry <\/> A > car la documentation passe de faible à vraiment faible . Les seules références à OGC dans la documentation des < A href = "http : \/ \/ desktop.arcgis.com \/ en \/ desktop \/ latest \/ analyze \/ arcpy-classes \/ geometry.htm " rel = "nofollow noopener noreferrer " target = "_blank" > Classes ArcPy Geometry <\/> A > concernent les propriétés WKB et WKT , et il n'y a aucune référence au DE-9IM ou à Clementini . Regardons la documentation pour la méthode within :<\/> P >< P style = "padding-left: 60px;" >< IMG __jive_id = "99920" alt = "arcgis_103_geometry_class_within_documentation.PNG" class="image-3 jive-image" src="https:\/\/us.v-cdn.net\/6038851\/uploads\/legacyfs\/online\/99920_arcgis_103_geometry_class_within_documentation.PNG" \/><\/P>Donc, la géométrie est à l'intérieur d'une autre géométrie si elle est à l'intérieur de cette géométrie. Compris. Oh attendez, me demandent-ils si une géométrie est à l'intérieur d'une autre géométrie ? Bien qu'aucune des illustrations ne capture une situation qui différencie les définitions Esri et Clementini, l'absence de toute référence à OGC, DE-9IM ou Clementini fait penser que c'est la définition d'Esri qui est utilisée. Vérifions :<\/P>
<\/P>
>>> line.within(polygon)
False<\/PRE><\/P>Aïe, ça fait mal. Il est assez clair qu'il y a un manque de cohérence dans la façon dont certains opérateurs spatiaux sont implémentés dans différentes parties du logiciel Esri, mais le pire c'est que la documentation ne le signale même pas. Les utilisateurs doivent en déduire, et probablement de manière incorrecte parfois, comment le logiciel fonctionne au lieu d'être informés sur son fonctionnement. Caveat utilitor<\/EM>.<\/P><\/BODY><\/HTML>