这些GPS数据的含义是什么?如何正确地将其转换为十进制度数?

这些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坐标数据,excel表中的格式如下(出于保密原因编辑):


我的问题是:这是什么样的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])