Http://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998252&zoom=12&size=400x400&sensor=false उदाहरण के साथ, स्थिर Google मानचित्र छवि के कोने निर्देशांक (बाउंडिंग बॉक्स) की गणना कैसे करें ?
Http://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998252&zoom=12&size=400x400&sensor=false उदाहरण के साथ, स्थिर Google मानचित्र छवि के कोने निर्देशांक (बाउंडिंग बॉक्स) की गणना कैसे करें ?
जवाबों:
मुझे लगता है कि इसे हल करना इतना कठिन नहीं है लेकिन मुझे इस बारे में संदेह है कि क्या सटीकता बिल्कुल सही है। सबसे पहले, आपको अपने केंद्र lat / lon को gdal2tiles कोड के साथ पिक्सेल में बदलना होगा। अगर मुझे कुछ समय मिलता है और यदि आप चाहें, तो मैं इसे कोने के निर्देशांक खोजने के लिए स्थिर कोड में बदल सकता हूं।
यह एक पायथन कोड है:
tileSize = 256
initialResolution = 2 * math.pi * 6378137 / tileSize
# 156543.03392804062 for tileSize 256 pixels
originShift = 2 * math.pi * 6378137 / 2.0
# 20037508.342789244
def LatLonToMeters( lat, lon ):
"Converts given lat/lon in WGS84 Datum to XY in Spherical Mercator EPSG:900913"
mx = lon * originShift / 180.0
my = math.log( math.tan((90 + lat) * math.pi / 360.0 )) / (math.pi / 180.0)
my = my * originShift / 180.0
return mx, my
def MetersToPixels( mx, my, zoom):
"Converts EPSG:900913 to pyramid pixel coordinates in given zoom level"
res = Resolution( zoom )
px = (mx + originShift) / res
py = (my + originShift) / res
return px, py
# Dont forget you have to convert your projection to EPSG:900913
mx = -8237494.4864285 #-73.998672
my = 4970354.7325767 # 40.714728
zoom = 12
pixel_x, pixel_y = LatLonToMeters(MetersToPixels( mx, my, zoom))
तो आप निम्न छवि को देखकर इसके अलावा या घटाव का उपयोग कर सकते हैं:
यदि आप बिंदु A खोजना चाहते हैं:
x = pixel_x - 200
y = pixel_y + 200
या आप बिंदु B खोजना चाहते हैं:
x = pixel_x + 200
y = pixel_y + 200
और आखिरी बात यह है कि आपको अपने पिक्सल को lat / lon में बदलना है।
def PixelsToMeters( px, py, zoom):
"Converts pixel coordinates in given zoom level of pyramid to EPSG:900913"
res = Resolution(zoom)
mx = px * res - originShift
my = py * res - originShift
return mx, my
def MetersToLatLon( mx, my ):
"Converts XY point from Spherical Mercator EPSG:900913 to lat/lon in WGS84 Datum"
lon = (mx / originShift) * 180.0
lat = (my / originShift) * 180.0
lat = 180 / math.pi * (2 * math.atan(math.exp(lat * math.pi / 180.0)) - math.pi / 2.0)
return lat, lon
#Result
llx, lly = MetersToLatLon( PixelsToMeters( x, y, zoom) )
इसलिए परिणाम मेरे पास है:
point A - UpperLeftLatLon = 40.7667530977 -74.0673365509
point B - UpperRightLatLon = 40.7667530977 -73.9300074493
point C - LowerRightLatLon = 40.6626622172 -73.9300074493
point D - LowerLeftLatLon = 40.6626622172 -74.0673365509
मुझे उम्मीद है इससे आपको मदद मिली होगी....
Resolution(zoom)
? यह OSM के लिए जाना जाता है, लेकिन मैं इसे Google मानचित्र के लिए नहीं खोज सकता।
initialResolution / (2**zoom)
।