En utilisant arcpy, comment vérifiez-vous si deux classes d'entités ont la même référence spatiale?
Vérifier simplement si les deux sont égaux ne fonctionne pas:
>>> import arcpy
>>> fc1 = r"C:\Users\e1b8\Desktop\E1B8\GIS_Stackexchange\data.gdb\test"
>>> sr1 = arcpy.Describe (fc1).spatialReference
>>> sr2 = arcpy.Describe (fc1).spatialReference
>>> sr1 == sr2
False
factoryCode
ne fonctionne pas, car les projections personnalisées n'en ont pas.
>>> fc2 = r"C:\Users\e1b8\Desktop\E1B8\GIS_Stackexchange\data.gdb\customproj"
>>> sr2 = arcpy.Describe (fc2).spatialReference
>>> sr2.factoryCode
0
Il y en a name
, mais les noms peuvent être les mêmes, mais ont des unités différentes:
>>> sr1 = arcpy.Describe (fc1).spatialReference
>>> sr2 = arcpy.Describe (fc2).spatialReference
>>> sr1.name
u'NAD_1983_UTM_Zone_10N'
>>> sr2.name
u'NAD_1983_UTM_Zone_10N'
>>> sr1.linearUnitCode
9003
>>> sr2.linearUnitCode
9001
Cela devient donc un peu compliqué. Le meilleur que j'ai trouvé est:
>>> def CompareSRs (inFc1, inFc2):
sr1 = arcpy.Describe (inFc1).spatialReference
sr2 = arcpy.Describe (inFc2).spatialReference
if not sr1.name != sr2.name:
return False
srType = sr1.type
if srType != sr2.type:
return False
if srType == "Geographic":
return sr1.angularUnitCode == sr2.angularUnitCode
return sr1.linearUnitCode == sr2.linearUnitCode
Et je ne suis toujours pas sûr que le code ci-dessus soit étanche à l'air. Y a-t-il une meilleure façon?
arcpy
arcgis-10.1
coordinate-system
Emil Brundage
la source
la source
exportToString ()
qui renvoie une chaîne du WKT de la référence spatiale, pourrait être le ticket.Réponses:
À en juger par les commentaires, vous l'avez peut-être déjà :)
Vous pouvez comparer les descriptions Well-Known Text (WKT) des références spatiales.
la source
Version arc: 10,3
Au cas où quelqu'un trouverait encore cela en 2019 , j'ai eu des problèmes similaires et je voulais être aussi sûr que possible de savoir si les projections correspondaient. Comme dans les questions / réponses ci-dessus, vous pouvez obtenir la référence spatiale en utilisant
arcpy.Describe(dataset).spatialReference
. Dans ma bibliothèque de fonctions, j'intègre ensuite cela dans un workflow, configuré pour gérer la comparaison de 2 jeux de données.Les attributs individuels d'un objet de référence spatiale de géotraitement sont disponibles ici .
Les fonctions suivantes devraient aider - n'hésitez pas à utiliser / modifier bien sûr. Il vaut la peine de vérifier ce qui est omis - certains attributs des systèmes de référence spatiale seront inoffensifs s'ils ne correspondent pas, mais cela dépend de vous :)
Compte tenu de ce qui précède, vous pouvez les utiliser comme:
Compte tenu de votre cas d'utilisation, espérons que les assertions n'échoueront pas.
J'intègre maintenant ces fonctions dans de nombreux processus, par exemple lorsque j'ai une gamme d'ensembles de données spatiales que je rejoins et je veux éliminer tout doute que les choses étaient mal alignées.
la source