2015-10-05 2 views
1

J'ai un ensemble de GPS des ménages les coordonnées données, et le format dans la feuille Excel se présente comme suit (sous la direction pour des raisons confidentielles):Que signifient ces données GPS et comment les convertir correctement en degrés décimaux?

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

Mes questions sont les suivantes: quel genre de coordonnées GPS c'est (qui ressemble à Données UTM)? Comment les convertir avec précision en degrés décimaux contenant uniquement une longitude et une latitude (ou des données X, Y)? Ai-je besoin d'une information de zonage pour le faire correctement? Merci

Répondre

1

Je doute qu'un récepteur GPS mettrait des coordonnées UTM. Il me semble que la latitude et la longitude sont en degrés/minutes/secondes (DDMMSS). Si oui, alors une façon de le faire est la suivante, en simple Python. Le Convert Coordinate Notation tool dans ArcGIS peut être utile, mais vous devrez d'abord reformater les données, probablement en utilisant 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]) 

Pour vous assurer d'obtenir ce droit, vous aurez envie de confirmer que le GPS éteignait latitude et la longitude et savoir quelle donnée il utilisé (probablement 1984 WGS).

+0

Merci @Gary S., J'ai vérifié avec ma source de données, et ce sont des données GPS UTM. -9 indique les données manquantes. Ils manquent juste l'information de zonage. Merci quand même. – Chen