2015-10-05 17 views
1

我有一组家庭GPS坐标数据,并在Excel工作表的格式如下所示(编辑机密的原因):什么是这些GPS数据的意思,以及如何正确地将它们转换成十进制度?

ID GPSN GPSS GPSE GPSW 
    1 211234 -9 89-9 
    2 211255 -9 890155 -9 
    ... 

我的问题是:什么样的GPS坐标,这是(看起来像UTM数据)?我如何准确地将它们转换成只包含经度和纬度(或X,Y数据)的十进制度?我需要某种分区信息才能正确执行此操作吗?谢谢

回答

1

我怀疑GPS接收机会输出UTM坐标。它看起来像经度和纬度(度/分/秒)(DDMMSS)。如果是这样,那么一种方法是使用简单的Python。 ArcGIS中的Convert Coordinate Notation tool可能很有用,但您必须先重新格式化数据,可能使用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]) 

为了确保你得到它的权利,你要确认GPS被扑灭的经度和纬度,并找出哪些数据是使用(可能是WGS 1984)。

+0

谢谢@Gary S.,我查看了我的数据源,它是UTM GPS数据。 -9表示缺少数据。他们只是缺乏分区信息。不管怎么说,还是要谢谢你。 – Chen

相关问题