这些GPS数据的含义是什么?如何正确地将其转换为十进制度数?
我有一套家庭GPS坐标数据,excel表中的格式如下(出于保密原因编辑):这些GPS数据的含义是什么?如何正确地将其转换为十进制度数?,gps,arcgis,data-conversion,arcmap,Gps,Arcgis,Data Conversion,Arcmap,我有一套家庭GPS坐标数据,excel表中的格式如下(出于保密原因编辑): 我的问题是:这是什么样的GPS坐标(看起来像UTM数据)?如何准确地将它们转换为仅包含经度和纬度(或X,Y数据)的十进制度数?我是否需要某种分区信息才能正确执行此操作?谢谢我怀疑GPS接收器是否能输出UTM坐标。在我看来,它就像以度/分/秒(DDMMSS)为单位的纬度和经度。如果是这样,那么一种方法是使用简单Python执行以下操作。ArcGIS中的可能很有用,但您必须首先重新格式化数据,可能需要使用Python imp
我的问题是:这是什么样的GPS坐标(看起来像UTM数据)?如何准确地将它们转换为仅包含经度和纬度(或X,Y数据)的十进制度数?我是否需要某种分区信息才能正确执行此操作?谢谢我怀疑GPS接收器是否能输出UTM坐标。在我看来,它就像以度/分/秒(DDMMSS)为单位的纬度和经度。如果是这样,那么一种方法是使用简单Python执行以下操作。ArcGIS中的可能很有用,但您必须首先重新格式化数据,可能需要使用Python
import csv
import sys
# A function that takes 211234, treats it as 21°12'34",
# and returns 21.209444.
def convertToDegrees(DMS):
dms = DMS
dms = int(dms)
seconds = dms % 100
if 60 <= seconds:
print "More than 60 seconds! " + str(DMS) + " is not degrees/minutes/seconds!"
dms /= 100
minutes = dms % 100
if 60 <= minutes:
print "More than 60 minutes! " + str(DMS) + " is not degrees/minutes/seconds!"
dms -= minutes
degrees = dms / 100
degrees += (minutes / 60.0)
degrees += (seconds / (60.0 * 60.0))
if 180 < degrees or -180 > degrees:
print "In " + str(DMS) + ", degrees is outside [-180, 180]: " + str(degrees)
return degrees
# Input and output files from command line parameters
inFilename = sys.argv[1]
outFilename = sys.argv[2]
readFirstRow = False
with open(inFilename, "rb") as inFile:
reader = csv.reader(inFile)
with open(outFilename, "wb") as outFile:
writer = csv.writer(outFile)
# Loop through the rows
for row in reader:
if (not readFirstRow):
# Write the header row only once
writer.writerow(["ID", "latitude", "longitude"])
readFirstRow = True
else:
# Convert this row to latitude and longitude
latitude = 0
longitude = 0
if "-9" != row[1]:
latitude = convertToDegrees(row[1])
if "-9" != row[2]:
latitude = -1 * convertToDegrees(row[2])
if "-9" != row[3]:
longitude = convertToDegrees(row[3])
if "-9" != row[4]:
longitude = -1 * convertToDegrees(row[4])
writer.writerow([row[0], latitude, longitude])
导入csv
导入系统
#采用211234的函数,将其视为21°12'34“,
#返回21.209444。
def转换器温度(DMS):
dms=dms
dms=int(dms)
秒=dms%100
如果60 Thank you@Gary S.,我检查了我的数据源,它是UTM GPS数据,-9表示缺少数据。他们只是缺少分区信息。无论如何,谢谢。
import csv
import sys
# A function that takes 211234, treats it as 21°12'34",
# and returns 21.209444.
def convertToDegrees(DMS):
dms = DMS
dms = int(dms)
seconds = dms % 100
if 60 <= seconds:
print "More than 60 seconds! " + str(DMS) + " is not degrees/minutes/seconds!"
dms /= 100
minutes = dms % 100
if 60 <= minutes:
print "More than 60 minutes! " + str(DMS) + " is not degrees/minutes/seconds!"
dms -= minutes
degrees = dms / 100
degrees += (minutes / 60.0)
degrees += (seconds / (60.0 * 60.0))
if 180 < degrees or -180 > degrees:
print "In " + str(DMS) + ", degrees is outside [-180, 180]: " + str(degrees)
return degrees
# Input and output files from command line parameters
inFilename = sys.argv[1]
outFilename = sys.argv[2]
readFirstRow = False
with open(inFilename, "rb") as inFile:
reader = csv.reader(inFile)
with open(outFilename, "wb") as outFile:
writer = csv.writer(outFile)
# Loop through the rows
for row in reader:
if (not readFirstRow):
# Write the header row only once
writer.writerow(["ID", "latitude", "longitude"])
readFirstRow = True
else:
# Convert this row to latitude and longitude
latitude = 0
longitude = 0
if "-9" != row[1]:
latitude = convertToDegrees(row[1])
if "-9" != row[2]:
latitude = -1 * convertToDegrees(row[2])
if "-9" != row[3]:
longitude = convertToDegrees(row[3])
if "-9" != row[4]:
longitude = -1 * convertToDegrees(row[4])
writer.writerow([row[0], latitude, longitude])