تو یه پروژّه باید از گوگل مپ استفاده کنم. به خاطر محدودیتهایی که دارم مجبورم از سرویس نقشه استاتیک استفاده کنم. این سرویس مختصات مرکز نقشه، درجه زوم و سایز نقشه خروجی رو میگیره و تصویر نقشه رو بر میگردونه. حالا سوال اینه: یه نقطه مشخص روی زمین، کدوم پیکسل از نقشه است؟ و بر عکس: یه پیکسل مشخص از این نقشه چه طول و عرضی داره؟
برای سوال اول:
۱- مختصات مرکز نقشه رو به رادیان تبدیل میکنم.
[c]pi = 3.1415;
lat = lat * pi / 180;
lon = lat * pi / 180;[/c]
۲- با توجه به سیستم مختصاتی که گوگل استفاده میکنه (Mercator/WGS84) مختصات کروی رو به مختصات مسطح تبدیل میکنم. (+ و +)
[c]r = 6378137; //earth radious
x = r * lon;
y = r * log( tan( pi/4 + lat/2 ) );[/c]
البته میشد برای دقت بیشتر بیضی بودن زمین رو هم تو محاسبات دخالت داد که تو کار من این دقت لزومی نداشت.
۳- گوگل به صورت داخلی مختصات مسطح نقشه رو به صورت اعدادی بین صفر تا ۲۵۵ نگه میداره. برای تبدیل مختصات مسطح به مختصات گوگل از این فرمولها استفاده میکنم:
[c]x = x / 40075016.69 * 256;
y = y / 40000000 * 256;[/c]
اون دو تا عدد ثابت از اینجا اومده که مقدار x کلا چقدر میتونه تغییر کنه؟ یعنی مقدار x برای عرض ۱۸۰ تا ۱۸۰- چقدر تغییرات داره. در باره تغییرات y هم گوگل میگه y حداقل و حداکثر تقریبا معادل ۸۵ درجه شمالی تا ۸۵ درجه جنوبیه. و البته چون میگه تقریبا، من بازه تقریبا مساویش رو اینجا اعمال کردم.
۴- مختصات پیکسل روی نفشه بر اساس داکیومنتهای گوگل از این رابطه به دست میاد:
[c]x = x * 2 ^ zoom;
y = y * 2 ^ zoom;[/c]
۵. حالا اگر همین مراحل رو هم برای مختصات پیکسلی مرکز نقشه انجام بدیم، میتونیم ببینیم پیکسلی که دنبالشیم چقدر از مرکز نقشه فاصله داره.
و سوال دوم؟ کافیه همین مراحل رو وارونه انجام بدیم.
مثلا تو این نقشه در میاد مارکر پایینی ۱۸۲ پیکسل پایینتر از مرکز نقشه است.