Maps SDK برای Android از سیستم های مختصات زیر استفاده می کند:
- مقادیر طول و عرض جغرافیایی، که به یک نقطه از جهان به طور منحصر به فرد اشاره می کنند. (گوگل از استاندارد سیستم ژئودتیک جهانی WGS84 استفاده می کند.)
- مختصات جهان، که به یک نقطه روی نقشه به طور منحصر به فرد اشاره می کنند.
- مختصات پیکسل، که به یک پیکسل خاص روی نقشه در یک سطح بزرگنمایی خاص اشاره می کنند.
- مختصات کاشی، که به یک کاشی خاص روی نقشه در سطح بزرگنمایی خاص اشاره می کنند.
مختصات جهانی
هر زمان که API نیاز به ترجمه مکانی در جهان به مکانی روی نقشه داشته باشد، ابتدا مقادیر طول و عرض جغرافیایی را به مختصات جهانی ترجمه می کند. API از پروجکشن Mercator برای انجام این ترجمه استفاده می کند.
برای سهولت در محاسبه مختصات پیکسل (به زیر مراجعه کنید) فرض می کنیم نقشه در سطح زوم 0 یک کاشی منفرد با اندازه کاشی پایه است. سپس مختصات جهان را نسبت به مختصات پیکسل در سطح زوم 0 تعریف می کنیم، با استفاده از طرح ریزی برای تبدیل طول و عرض جغرافیایی به موقعیت پیکسل در این کاشی پایه. این مختصات جهانی یک مقدار ممیز شناور است که از مبدا طرح ریزی نقشه تا مکان خاص اندازه گیری می شود. توجه داشته باشید که از آنجایی که این مقدار یک مقدار ممیز شناور است، ممکن است بسیار دقیق تر از وضوح فعلی تصویر نقشه نشان داده شده باشد. به عبارت دیگر، یک مختصات جهانی مستقل از سطح زوم فعلی است.
مختصات جهان در نقشه های گوگل از مبدأ طرح مرکاتور (گوشه شمال غربی نقشه در 180 درجه طول جغرافیایی و تقریباً 85 درجه عرض جغرافیایی) اندازه گیری می شود و در جهت x
به سمت شرق (راست) افزایش می یابد و در جهت y
به سمت جنوب افزایش می یابد. (پایین). از آنجایی که کاشی اصلی Mercator Google Maps 256 x 256 پیکسل است، فضای مختصات جهان قابل استفاده {0-256}, {0-256}
است.
توجه داشته باشید که یک برجستگی مرکاتور از نظر طولی دارای عرض محدود اما از نظر عرضی یک ارتفاع نامحدود است. ما تصاویر نقشه پایه را با استفاده از طرح مرکاتور در حدود +/- 85 درجه قطع کردیم تا نقشه حاصل را مربع شکل کنیم، که امکان منطق آسانتر را برای انتخاب کاشی فراهم میکند. توجه داشته باشید که اگر به عنوان مثال خیلی نزدیک به قطب ها رسم کنید، یک طرح ممکن است مختصات جهانی خارج از فضای مختصات قابل استفاده نقشه پایه ایجاد کند.
مختصات پیکسل
مختصات پیکسل به یک پیکسل خاص روی نقشه در یک سطح بزرگنمایی خاص اشاره دارد، در حالی که مختصات جهانی مکانهای مطلق را در یک طرح مشخص منعکس میکنند. مختصات پیکسل با استفاده از فرمول زیر محاسبه می شود:
pixelCoordinate = worldCoordinate * 2zoomLevel
از معادله بالا، توجه داشته باشید که هر سطح بزرگنمایی در حال افزایش در هر دو جهت x
و y
دو برابر بزرگتر است. بنابراین، هر سطح زوم بالاتر منجر به وضوح چهار برابر بیشتر از سطح قبلی می شود. به عنوان مثال، در سطح زوم 1، نقشه از 4 کاشی 256x256 پیکسل تشکیل شده است که در نتیجه یک فضای پیکسلی از 512x512 ایجاد می شود. در سطح زوم 19، هر پیکسل x
و y
روی نقشه را می توان با استفاده از مقداری بین 0 و 256 * 2 19 ارجاع داد.
از آنجایی که ما مختصات جهان را بر اساس اندازه کاشی نقشه قرار دادیم، قسمت صحیح مختصات پیکسلی تأثیری بر شناسایی پیکسل دقیق در آن مکان در سطح زوم فعلی دارد. توجه داشته باشید که برای سطح زوم 0، مختصات پیکسل با مختصات جهان برابر است.
ما اکنون راهی برای مشخص کردن دقیق هر مکان روی نقشه، در هر سطح بزرگنمایی داریم. Maps SDK برای Android با توجه به مرکز سطح زوم نقشه (به عنوان LatLng
) و اندازه عنصر DOM حاوی یک درگاه دید ایجاد می کند و این کادر محدود را به مختصات پیکسلی ترجمه می کند. سپس API به طور منطقی تمام کاشی های نقشه را که در محدوده پیکسل های داده شده قرار دارند، تعیین می کند. هر یک از این کاشی های نقشه با استفاده از مختصات کاشی ارجاع داده می شوند که نمایش تصاویر نقشه را بسیار ساده می کند.
مختصات کاشی
API نمیتواند همه تصاویر نقشه را برای سطوح بزرگنمایی بالاتر به طور همزمان بارگیری کند. در عوض، API تصاویر را در هر سطح زوم به مجموعهای از کاشیهای نقشه تقسیم میکند، که بهطور منطقی به ترتیبی که برنامه درک میکند مرتب شدهاند. هنگامی که یک نقشه به یک مکان جدید یا به یک سطح بزرگنمایی جدید پیمایش میکند، API تعیین میکند که کدام کاشیها با استفاده از مختصات پیکسل مورد نیاز هستند و آن مقادیر را به مجموعهای از کاشیها برای بازیابی ترجمه میکند. این مختصات کاشی با استفاده از طرحی تخصیص داده می شوند که به طور منطقی تشخیص اینکه کدام کاشی حاوی تصاویر برای هر نقطه معین است را آسان می کند.
کاشیهای موجود در Google Maps از همان مبدأ شمارهگذاری شدهاند که برای پیکسلها. برای اجرای پیشبینی Mercator توسط Google، کاشی مبدا همیشه در گوشه شمال غربی نقشه قرار دارد، با مقادیر x
از غرب به شرق و مقادیر y
از شمال به جنوب افزایش مییابد. کاشی ها با استفاده از مختصات x,y
از آن مبدا نمایه می شوند. به عنوان مثال، در سطح زوم 2، زمانی که زمین به 16 کاشی تقسیم می شود، هر کاشی را می توان با یک جفت x,y
منحصر به فرد ارجاع داد:
توجه داشته باشید که با تقسیم مختصات پیکسل بر اندازه کاشی (256) و گرفتن قسمت های صحیح نتیجه، مختصات کاشی را در سطح زوم فعلی به عنوان محصول فرعی تولید می کنید.
مثال
مثال زیر مختصات شیکاگو، IL را نشان می دهد: مقادیر طول و عرض جغرافیایی، مختصات جهان، مختصات پیکسل و مختصات کاشی. از کنترل زوم برای مشاهده مقادیر مختصات در سطوح مختلف بزرگنمایی استفاده کنید.
برای مشاهده نحوه محاسبه مختصات، کد را مشاهده کنید .