متخصصین برتر
۱۲ آذر ۱۴۰۴، ۱۰:۱۸
تبدیل مختصات GPS به وب مرکاتور EPSG:3857 با استفاده از python/pyproj
من چند تابع با استفاده از بسته math پایتون ۳.۵ ایجاد کردهام تا مختصات GPS را به مختصات x/y وب مرکاتور (شبه مرکاتور) تبدیل کنم همانطور که در اینجا توضیح داده شده است: http://wiki.openstreetmap.org/wiki/Mercator#Java
نسخه جاوا را گرفتم و به پایتون منتقل کردم:
import math
# مشتق شده از نسخه جاوا که در اینجا توضیح داده شده است: http://wiki.openstreetmap.org/wiki/Mercator
RADIUS = 6378137.0 # در متر در استوا
def lat2y(a):
return math.log(math.tan(math.pi / 4 + math.radians(a) / 2)) * RADIUS
def lon2x(a):
return math.radians(a) * RADIUS
سپس میتوانم از آنها برای به دست آوردن مثلاً تصویر طرح ریزی شده میدان ترافالگار استفاده کنم (با گرفتن مختصات GPS از آدرس URL گوگل مپس):
ts_gm = [51.50809,-0.1285907]
print('طول جغرافیایی وب مرکاتور y: {} طول جغرافیایی وب مرکاتور x: {}'.format(lat2y(ts_gm[0]), lon2x(ts_gm[1])))
که نتیجه میدهد:
طول جغرافیایی وب مرکاتور y: 6711665.883938471 طول جغرافیایی وب مرکاتور x: -14314.651244750603
با این حال دوست دارم این کار را با نحو pyproj انجام دهم، اما در جزئیات رشتهای که باید برای ساخت یک طرح ریزی با استفاده از وب مرکاتور EPSG:3857 پاس بدهم، سردرگم هستم.
گمان میکنم فرمولهای بالا نوعی مشکل دقت داشته باشند و دوست دارم به کتابخانهای مانند pyproj تکیه کنم به امید به حداقل رساندن خطاهای طرح ریزی.
آیا مثال حداقلیِ کارکردهای وجود دارد که بتوانم برای انجام این نگاشت در پایتون با استفاده از pyproj ببینم؟
پاسخها (2)
۱۲ آذر ۱۴۰۴، ۱۱:۱۸
from pyproj import Proj, transform
print(transform(Proj(init='epsg:4326'), Proj(init='epsg:3857'), -0.1285907, 51.50809))
۱۲ آذر ۱۴۰۴، ۱۲:۱۸
# ابتدا طول جغرافیایی، سپس عرض جغرافیایی.
# خروجی (متر شرق صفر، متر شمال صفر): (-14314.651244750548, 6711665.883938471)




