গুগল স্ট্যাটিক মানচিত্র টাইলের কর্নার স্থানাঙ্ক


12

কোনও স্থির গুগল ম্যাপ চিত্রের কোণার স্থানাঙ্ক (সীমানা বাক্স) কীভাবে গণনা করতে হয়, যেমন: http://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&sensor=false ?


আপনি কেন প্রতিটি চিত্রের কোণার স্থানাঙ্কের প্রয়োজন তা ব্যাখ্যা করতে পারেন?
ম্যাপের্জ

আমি ওপি নই, তবে একই ধরনের প্রয়োজন আছে। আমার জিপিএস কর্ড রয়েছে যা আমি প্লট করতে চাই এবং ডেটা প্লট করার জন্য একটি পটভূমি চিত্র দরকার। প্লটগুলি কাজ করার জন্য আমার এটি নিশ্চিত করতে হবে যে আমার কাছে গুগল ম্যাপ চিত্র থেকে বাউন্ডিং বক্সের সঠিক কর্ড রয়েছে।
জুন

উত্তর:


9

আমি মনে করি সমস্যাটি সমাধান করা এত কঠিন নয় তবে নির্ভুলতা একেবারে সঠিক কিনা তা নিয়ে আমার সন্দেহ রয়েছে। প্রথমত, আপনাকে জিডাল টাইলস কোডগুলি সহ আপনার কেন্দ্রকে ল্যাট / লম্বকে পিক্সেলে রূপান্তর করতে হবে। যদি আমি কিছু সময় পাই এবং আপনি যদি চান তবে আমি কোণার স্থানাঙ্কগুলি সন্ধানের জন্য এটি স্থিতিশীল কোডে রূপান্তর করতে পারি।

এটি পাইথন কোড:

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

অথবা আপনি বি পয়েন্টটি সন্ধান করতে চান:

x = pixel_x + 200
y = pixel_y + 200

এবং শেষটি হচ্ছে আপনাকে যা করতে হবে তা হল আপনার পিক্সেলগুলিকে ল্যাট / লম্বায় রূপান্তর করা।

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)? এটি ওএসএম এর জন্য পরিচিত, তবে আমি এটি Google মানচিত্রের জন্য খুঁজে পাচ্ছি না।
বুকো

ব্যবহার করার চেষ্টা করুন initialResolution / (2**zoom)
অ্যারাগন

আমি শেষ অংশটি নিয়ে সন্দেহ করেছি, আপনি কীভাবে আপনার প্রক্ষেপণ (-73.998672, 40.714728) কে ইপিএসজি: 900913 (-8237494.4864285, 4970354.7325767) এ রূপান্তর করবেন?
norman784

এখানে ইঙ্গিত দেওয়া হয়েছে যে রেজোলিউশন (জুম) অক্ষাংশের উপর নির্ভর করে: gis.stackexchange.com/questions/108373/…
আরিভেরো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.