آماگ

متخصصین برتر

۲۷ خرداد ۱۴۰۵، ۰۷:۵۳

اندازه‌گیری‌های دقیق‌تر فاصله در تصویر مرکاتور وب (Web Mercator)

من با استک ESRI کار می‌کنم و لایه‌های خود را در یک ژئودیتابیس SDE با قابلیت sql-spatial ذخیره می‌کنم (نوع Geometry، وب مرکاتور-3857). من یک برنامه نقشه‌برداری وب می‌سازم، بنابراین به‌طور پیش‌فرض تایل‌ها نیز در وب مرکاتور 3857 هستند. از طریق پروسیجرهای ذخیره‌شده، از STDistance برای پرس‌وجوی فاصله از مکان کاربر (مختصات نیز در وب مرکاتور) تا لایه‌های مختلف استفاده می‌کنم. مشکل این است که به دلیل اعوجاج وب مرکاتور، محاسبات فاصله من هر چه دورتر از خط استوا انجام شوند، بیشتر نادرست می‌شوند. به فکر ذخیره لایه‌های خود به نوع sql-spatial-geography (به جای geometry) افتاده‌ام، اما: تصور می‌کنم پرس‌وجوهای فاصله من بسیار طولانی‌تر شوند (محاسبات فاصله روی سطح کروی) باید حجم زیادی از داده‌ها را دوباره وارد کنم سرویس‌های arcgis به سرعت قبلی نخواهند بود، زیرا باید در لحظه پروجکت کنند اگر به نقشه گوگل بروم و یک محاسبه فاصله انجام دهم، فاصله بازگشتی حتی در مناطق شمالی/جنوبی بسیار دقیق‌تر است، بنابراین فرض می‌کنم گوگل باید اعوجاج ناشی از پروجکشن وب مرکاتور را اصلاح کند. سؤال من پس این است: آیا یک مقدار فاکتور ساده وجود دارد که بتوان آن را روی محاسبات فاصله‌ای که در پروجکشن وب مرکاتور انجام می‌شود اعمال کرد تا فاصله «صحیح» به دست آید؟

پاسخ‌ها (2)

۲۷ خرداد ۱۴۰۵، ۰۸:۵۳
برای فاصله‌های کوتاه، می‌توانید فاصله محاسبه‌شده را در cos(lat) ضرب کنید، زیرا مقیاس پروجکشن مرکاتور متناسب با سکانت عرض جغرافیایی است (سکانت معادل 1/cos است). همچنین ببینید: http://en.wikipedia.org/wiki/Mercator_projection#Mathematics_of_the_projection
۲۷ خرداد ۱۴۰۵، ۰۹:۵۳
افزودنی به لطف @jeremiah-england: اگرچه تصحیح فوق در مورد پروجکشن‌های مرکاتور واقعی صحیح خواهد بود، اما وب مرکاتور (EPSG:3857) یک مرکاتور نیست. EPSG آن را «شبه-مرکاتور» می‌نامد. مشکل این است که از WGS84، یک مدل بیضوی، استفاده می‌کند و آن را با محاسبات مرکاتور کروی پروجکت می‌کند (که گوگل استفاده می‌کرد چون سریع‌تر هستند). اگر فاصله‌های خود را با 1/cos(phi) در وب مرکاتور مقیاس کنید، در خط استوا حدود 0.6٪ خطا خواهید داشت. برای جزئیات بیشتر به ارائه Noel Zinn درباره وب مرکاتور مراجعه کنید.