如何用Python将UTM坐标转换为SHAPEFILE点以适配ArcGIS Pro/谷歌地球?
导出UTM 17S坐标为Shapefile/KML/KMZ点要素
方法一:用Geopandas(通用Python方案)
这是最便捷的处理方式,直接基于你已有的Pandas DataFrame操作:
- 先安装依赖(未安装的话执行):
pip install geopandas fiona
- 转换并导出代码:
import pandas as pd import geopandas as gpd from shapely.geometry import Point # 你的原始数据 data = [['ROO01', 558635, 9303470], ['ROO02', 559203, 9303470]] columns = ['ID', 'Easting', 'Northing'] df = pd.DataFrame(data=data, columns=columns) # 将坐标转为Shapely点对象 df['geometry'] = df.apply(lambda row: Point(row['Easting'], row['Northing']), axis=1) # 创建GeoDataFrame,指定坐标系为UTM 17S(EPSG编码32717) gdf = gpd.GeoDataFrame(df, crs="EPSG:32717") # 导出为Shapefile gdf.to_file("utm_points.shp", driver="ESRI Shapefile") # 导出为KML(需先转成谷歌地球兼容的WGS84坐标系) gdf_wgs84 = gdf.to_crs("EPSG:4326") gdf_wgs84.to_file("utm_points.kml", driver="KML") # 如需KMZ,把生成的KML文件压缩为.zip后改后缀为.kmz即可
方法二:用ArcPy(ArcGIS Pro专属方案)
如果已经在ArcGIS Pro环境中工作,直接用ArcPy创建点要素类:
import arcpy import pandas as pd # 你的原始数据 data = [['ROO01', 558635, 9303470], ['ROO02', 559203, 9303470]] columns = ['ID', 'Easting', 'Northing'] df = pd.DataFrame(data=data, columns=columns) # 设置工作空间(替换为你的项目地理数据库路径) arcpy.env.workspace = r"C:\YourProject\YourGDB.gdb" # 创建点要素类,指定UTM 17S坐标系(WKID为32717) out_fc = arcpy.CreateFeatureclass_management( out_name="UTM_Points", geometry_type="POINT", spatial_reference=arcpy.SpatialReference(32717) )[0] # 添加ID字段 arcpy.AddField_management(out_fc, "ID", "TEXT") # 插入数据到要素类 with arcpy.da.InsertCursor(out_fc, ["ID", "SHAPE@XY"]) as cursor: for index, row in df.iterrows(): cursor.insertRow([row['ID'], (row['Easting'], row['Northing'])]) # 导出KML/KMZ可直接在ArcGIS Pro中右键要素类 → 共享 → 导出为KML
关键注意点
- UTM 17S对应的EPSG编码是32717,坐标系选择错误会导致坐标偏移
- KML/KMZ仅支持WGS84经纬度坐标系,转格式前必须做坐标转换
- Shapefile导出后会生成.shp/.shx/.dbf等配套文件,需完整保存才能正常使用
内容的提问来源于stack exchange,提问作者Maria Fernanda
相关产品推荐
相关产品推荐

