क्या गर्ड के पायथन बाइंडिंग का उपयोग करके एक रेखापुंज फ़ाइल से कोने निर्देशांक (डिग्री अक्षांश / लंबे समय में) प्राप्त करने का एक तरीका है?
ऑनलाइन कुछ खोजों ने मुझे आश्वस्त किया है कि ऐसा नहीं है, इसलिए मैंने gdalinfo आउटपुट को पार्स करके चारों ओर एक काम विकसित किया है, यह कुछ हद तक बुनियादी है लेकिन मैंने सोचा कि यह उन लोगों के लिए कुछ समय बचा सकता है जो अजगर के साथ कम आरामदायक हो सकते हैं। यह केवल तभी काम करता है यदि gdalinfo में कोने निर्देशांक के साथ भौगोलिक निर्देशांक शामिल हैं, जो मुझे नहीं लगता कि हमेशा मामला है।
यहाँ मेरा समाधान है, क्या किसी के पास कोई बेहतर उपाय है?
एक उचित रेखापुंज पर gdalinfo इस उत्पादन के माध्यम से इस तरह से कुछ के रूप में परिणाम:
Corner Coordinates:
Upper Left ( -18449.521, -256913.934) (137d 7'21.93"E, 4d20'3.46"S)
Lower Left ( -18449.521, -345509.683) (137d 7'19.32"E, 5d49'44.25"S)
Upper Right ( 18407.241, -256913.934) (137d44'46.82"E, 4d20'3.46"S)
Lower Right ( 18407.241, -345509.683) (137d44'49.42"E, 5d49'44.25"S)
Center ( -21.140, -301211.809) (137d26'4.37"E, 5d 4'53.85"S)
यह कोड उन फाइलों पर काम करेगा जो गदलिनफो की तरह दिखती हैं। मेरा मानना है कि कभी-कभी निर्देशांक डिग्री और मिनट के बजाय डिग्री और दशमलव में होंगे; यह उस स्थिति के लिए कोड को समायोजित करने के लिए तुच्छ होना चाहिए।
import numpy as np
import subprocess
def GetCornerCoordinates(FileName):
GdalInfo = subprocess.check_output('gdalinfo {}'.format(FileName), shell=True)
GdalInfo = GdalInfo.split('/n') # Creates a line by line list.
CornerLats, CornerLons = np.zeros(5), np.zeros(5)
GotUL, GotUR, GotLL, GotLR, GotC = False, False, False, False, False
for line in GdalInfo:
if line[:10] == 'Upper Left':
CornerLats[0], CornerLons[0] = GetLatLon(line)
GotUL = True
if line[:10] == 'Lower Left':
CornerLats[1], CornerLons[1] = GetLatLon(line)
GotLL = True
if line[:11] == 'Upper Right':
CornerLats[2], CornerLons[2] = GetLatLon(line)
GotUR = True
if line[:11] == 'Lower Right':
CornerLats[3], CornerLons[3] = GetLatLon(line)
GotLR = True
if line[:6] == 'Center':
CornerLats[4], CornerLons[4] = GetLatLon(line)
GotC = True
if GotUL and GotUR and GotLL and GotLR and GotC:
break
return CornerLats, CornerLons
def GetLatLon(line):
coords = line.split(') (')[1]
coords = coords[:-1]
LonStr, LatStr = coords.split(',')
# Longitude
LonStr = LonStr.split('d') # Get the degrees, and the rest
LonD = int(LonStr[0])
LonStr = LonStr[1].split('\'')# Get the arc-m, and the rest
LonM = int(LonStr[0])
LonStr = LonStr[1].split('"') # Get the arc-s, and the rest
LonS = float(LonStr[0])
Lon = LonD + LonM/60. + LonS/3600.
if LonStr[1] in ['W', 'w']:
Lon = -1*Lon
# Same for Latitude
LatStr = LatStr.split('d')
LatD = int(LatStr[0])
LatStr = LatStr[1].split('\'')
LatM = int(LatStr[0])
LatStr = LatStr[1].split('"')
LatS = float(LatStr[0])
Lat = LatD + LatM/60. + LatS/3600.
if LatStr[1] in ['S', 's']:
Lat = -1*Lat
return Lat, Lon
FileName = Image.cub
# Mine's an ISIS3 cube file.
CornerLats, CornerLons = GetCornerCoordinates(FileName)
# UpperLeft, LowerLeft, UpperRight, LowerRight, Centre
print CornerLats
print CornerLons
और वह मुझे देता है:
[-4.33429444 -5.82895833 -4.33429444 -5.82895833 -5.081625 ]
[ 137.12275833 137.12203333 137.74633889 137.74706111 137.43454722]