# Calculating centroids in decimal degrees using ArcPy without reprojecting vector data?

I have vector data not in geographical coordinate system (i.e. not in WGS 1984).

How to calculate object's centroids using `arcpy` without reprojecting the data itself?

I have tried to do this but it doesn't work (centroids are in meters):

``````arcpy.CalculateField_management(feature, fieldName, "!SHAPE.CENTROID.X!","PYTHON_9.3")
arcpy.CalculateField_management(feature, fieldName, "!SHAPE.CENTROID.Y!","PYTHON_9.3")

arcpy.CalculateField_management(feature, fieldName, "!SHAPE.CENTROID@DECIMALDEGREES!.split()[0]", "PYTHON")
arcpy.CalculateField_management(feature, fieldName, "!SHAPE.CENTROID@DECIMALDEGREES!.split()[1]", "PYTHON")
``````
• Why ask and then answer your own question 1 min later – BERA Feb 14 '17 at 12:27
• I just wasted a lot of time to find the answer (about 2 hours). This can save a lot of time to the other people. Besides 3 years ago i resolve this problem and forgot how i did that. – Mr. Che Feb 14 '17 at 13:06

Use `arcpy.CalculateField_management`with following expressions:

For x coordinates:

``````expression = 'arcpy.PointGeometry(!Shape!.centroid,!Shape!.spatialReference).projectAs(arcpy.SpatialReference(4326)).centroid.X'
arcpy.CalculateField_management(feature, fieldName, expression,"PYTHON_9.3")
``````

For y coordinates:

``````expression = 'arcpy.PointGeometry(!Shape!.centroid,!Shape!.spatialReference).projectAs(arcpy.SpatialReference(4326)).centroid.Y'
arcpy.CalculateField_management(feature, fieldName, expression, "PYTHON_9.3")
``````