Bagaimana cara menghitung koordinat sudut (kotak pembatas) dari gambar Google Map statis, diambil dengan mis. Http://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&sensor=false ?
Bagaimana cara menghitung koordinat sudut (kotak pembatas) dari gambar Google Map statis, diambil dengan mis. Http://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&sensor=false ?
Jawaban:
Saya pikir ini bukan masalah yang sulit untuk dipecahkan, tetapi saya ragu apakah akurasinya benar-benar benar. Pertama-tama, Anda harus mengubah lat / lon pusat Anda menjadi piksel dengan kode gdal2tiles. Jika saya menemukan waktu dan jika Anda mau, saya dapat mengubahnya menjadi kode stabil untuk menemukan koordinat sudut.
Ini adalah kode Python:
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))
Kemudian Anda dapat menggunakan penjumlahan atau substraksi dengan melihat gambar berikut:
Jika Anda ingin menemukan titik A:
x = pixel_x - 200
y = pixel_y + 200
atau Anda ingin menemukan titik B:
x = pixel_x + 200
y = pixel_y + 200
dan hal terakhir yang harus Anda lakukan adalah mengonversi piksel Anda ke 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) )
jadi hasilnya saya punya:
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
Saya harap ini membantu Anda ....
Resolution(zoom)
? Ini dikenal untuk OSM, tetapi saya tidak dapat menemukannya untuk Google maps.
initialResolution / (2**zoom)
.