Using arcpy, how do you check if two feature classes have the same spatial reference?
Just checking if the two are equal doesn't work:
>>> 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 doesn't work, because custom projections don't have them.
>>> fc2 = r"C:\Users\e1b8\Desktop\E1B8\GIS_Stackexchange\data.gdb\customproj" >>> sr2 = arcpy.Describe (fc2).spatialReference >>> sr2.factoryCode 0
name, but names can be the same, but have different units:
>>> 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
So it gets a bit complicated. The best I've come up with is:
>>> 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
And I'm still not sure the above code is air tight. Is there a better way?