转换坐标记法 (Data Management)
用法
输入表可以是一个文本文件或 ArcGIS 所支持的任一表格式。点要素同样有效。
存储在 X 字段(纬度)和 Y 字段(经度)中的值的坐标系通过输入坐标系参数进行指定。默认值为 GCS_WGS_1984,除非输入表为要素类(此时,默认值为输入要素的坐标系)。
输出结果是一个点要素类,每个具有有效记法的输入位置在其中都表示为一个点。具有无效记法的记录将不具有任何几何,且新添加的输出字段中的记录值将为空。
- 具有无效记法的输入记录不会创建任何点几何。运行检查几何查找未转换的记录。
所支持的格式如下:
- 十进制度 (DD)
- 十进制度分 (DDM)
- 度-分-秒 (DMS)
- 全球区域参考系统 (GARS)
- GEOREF(世界地理参考系)
- 通用横轴墨卡托投影 (UTM)
- 美国国家格网 (USNG)
- 军事格网参考系 (MGRS)
对于 DD_1、DDM_1 和 DMS_1,用于表示一个位置的纬度值和经度值将合并成单个字符串并存储在单个字段中。
对于 DD_2、DDM_2 和 DMS_2 格式,纬度值和经度值将由两个单独的字段表示。
对于 DD_NUMERIC,纬度值和经度值存储在两个不同的“双精度”类型字段中。
GARS、GEOREF、UTM_ZONES、UTM_BANDS、USNG 和 MGRS 为单字符串坐标格式,这表示只有一个字段包含坐标。
有关详细信息,请参阅下面的输入坐标格式参数说明。
输入表中的所有非系统字段(包括输入格式字段)将传递到输出点要素类。
输出字段名与输出坐标记法的名称一致;例如,如果输出格式为 MGRS,那么新的输出字段名为 MGRS。
如果在输出中已存在与输入字段同名的字段,则复制字段的名称将附加一个唯一编号。
可利用添加 XY 坐标工具将 POINT_X 和 POINT_Y 两个字段添加到输出点要素类中。这两个字段中所包含的是点要素的坐标,其坐标单位采用的是要素类坐标系的单位。
语法
参数 | 说明 | 数据类型 |
in_table |
包含具有要转换坐标记法的字段的表。 | Table View |
out_featureclass |
点的输出要素类。属性表将包括输入表的所有字段以及以输出格式表示的转换值的字段。 | Feature Class |
x_field |
输入表中包含经度值的字段。对于 DD_2、DD_NUMERIC、DDM_2 和 DMS_2,此字段即为经度字段。 对于 DD_1、DDM_1 和 DMS_1 格式,此字段包含单个字符串中的纬度值和经度值。 对于 GARS、GEOREF、UTM_ZONES、UTM_BANDS、USNG 和 MGRS,此字段包含单个文本字段中的字母数字记法系统。 选择其中一种单字符串格式时,y_field 参数将被忽略。 | Field |
y_field |
输入表中包含经度值的字段。对于 DD_2、DD_NUMERIC、DDM_2 和 DMS_2,此字段即为经度字段。 对于 DD_1、DDM_1 和 DMS_1 格式,此字段包含单个字符串中的纬度值和经度值。 对于 GARS、GEOREF、UTM_ZONES、UTM_BANDS、USNG 和 MGRS,此字段包含单个文本字段中的字母数字记法系统。 选择其中一种单字符串格式时,此参数将被忽略。 | Field |
input_coordinate_format |
输入字段的坐标格式。默认格式为 DD_2。
DD、DDM、DMS 和 UTM 也是有效关键字;可通过(在对话框中)直接输入或在脚本中传递值的方式来使用这些关键字。但是,带下划线和限定符的关键字包含更多有关字段值的信息。 | String |
output_coordinate_format |
输入记法转换后的坐标格式。默认格式为 DD_2。
DD、DDM、DMS 和 UTM 也是有效关键字;可通过(在对话框中)直接输入或在脚本中传递值的方式来使用这些关键字。但是,带下划线和限定符的关键字包含更多有关字段值的信息。 | String |
id_field (可选) |
法律声明: 由于所有的非系统字段都被传输到输出表,因此忽略此参数。 | Field |
output_coordinate_system (可选) |
输出要素类的空间参考。默认值为 GCS_WGS_1984。 此工具将输出投影到指定的空间参考中。如果输入坐标系和输出坐标系具有不同的基准面,则将根据输入坐标系和输出坐标系以及数据范围使用默认转换。 | Spatial Reference |
in_coordinate_system (可选) |
输入数据的空间参考。如果无法从输入表中获取输入空间参考,则使用默认值 GCS_WGS_1984。 | Spatial Reference |
代码实例
使用一个输入格式字段的 ConvertCoordinateNotation 用法。
# import arcpy module
import arcpy
# set locals variables
in_tab = r"c:\data\notation.gdb\loc_mgrs"
out_pts = r"c:\data\notation.gdb\loc_final"
# call Convert Coordinate Notation with MGRS as input field.
# leaving out spatial reference parameter will default to WGS 1984
arcpy.ConvertCoordinateNotation_management(in_tab, out_pts, "m10d", "#", "MGRS", "DD_1")
使用两个输入格式字段的 ConvertCoordinateNotation 用法。
# imports
import arcpy
arcpy.env.workspace = r"c:\data\mtf.gdb"
# set parameter values
input_table = 'rit_up_DD'
output_points = 'ritLOC'
x_field = 'LON'
y_field = 'LAT'
input_format = 'DD_2'
output_format = 'GARS'
id_field = 'CITY_NAME'
spatial_ref = arcpy.SpatialReference('WGS 1984')
try:
arcpy.ConvertCoordinateNotation_management(input_table, output_points, x_field, y_field,
input_format, output_format, id_field, spatial_ref)
print(arcpy.GetMessages(0))
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
except Exception as ex:
print(ex.args[0])
针对 UTM_ZONES 和 UTM_BANDS 格式的 ConvertCoordinateNotation 用法示例。
# imports
import arcpy
arcpy.env.workspace = r"c:\data\ccn.gdb"
# export_utm58 table contains coordinates in UTM_BANDS format
# where N and S indicate latitude bands,
# for example, 58S4144921393176 - here 58S is latitude band
input_table = 'export_utm58'
# the coordinate values in output point table will be in UTM_ZONES format
# for example, 58N4144921393176 - note that it is now 58N because
# the point is in UTM 58 North zone
output_points = 'utm_zone18'
spatial_ref = arcpy.SpatialReference('WGS 1984')
try:
arcpy.ConvertCoordinateNotation_management(input_table, output_points, "LOCS", "",
"UTM_BANDS", "UTM_ZONES", "", spatial_ref)
print(arcpy.GetMessages(0))
except Exception as ex:
print(ex.args[0])
将输出文本十进制度值转换为浮点值的 ConvertCoordinateNotation 示例。注意,要使用负号取代 S 和 W。
# imports
import arcpy
# output from Convert Coordinate Notation tool
# for DD_2 (and also for DD_1) format, the output values are in string format
# for example, for DD_1, the output values may be '43.63872N 116.24135W'
in_table = r"c:\data\ccn.gdb\ccn_dd1"
# add a field of type DOUBLE to store the numeric longitude value
arcpy.AddField_management(in_table, "DDLonDbl", "DOUBLE")
# now call CalculateField tool to convert the values, 'W' is negative
expr = """def convertToDouble(fldval):
val = float(fldval[:-1])
if fldval[-1:] == 'W':
return val * -1.0
else:
return val"""
try:
# DDLon field contains longitudes in a string field
arcpy.CalculateField_management(in_table,"DDLonDbl","convertToDouble(!DDLon!)","PYTHON_9.3",expr)
except:
print arcpy.GetMessages()
# add another field to store the numeric longitude value
arcpy.AddField_management(in_table, "DDLatDbl", "DOUBLE")
# call CalculateField again to convert the values, 'S' is negative
expr = """def convertToDouble(fldval):
val = float(fldval[:-1])
if fldval[-1:] == 'S':
return val * -1.0
else:
return val"""
try:
# DDLat field contains latitudes in a string field
arcpy.CalculateField_management(in_table,"DDLatDbl","convertToDouble(!DDLat!)","PYTHON_9.3",expr)
except:
print arcpy.GetMessages()