Для начала, я думаю, у вас есть широта и долгота в обратном порядке. Долгота измеряет X, а широта - Y.
Широту легко превратить в расстояние с севера на юг. Мы знаем, что 360 градусов - это полный круг вокруг Земли через полюса, и это расстояние составляет 40008000 метров. Если вам не нужно учитывать ошибки из-за того, что Земля не является идеально сферической, формула будет deltaLatitude * 40008000 / 360
.
Как вы и подозревали, самая сложная часть - это преобразование долготы в X. Поскольку это зависит от широты, вам нужно решить, какую широту вы собираетесь использовать - вы можете выбрать широту своего происхождения, широту вашего пункта назначения или какую-то произвольную точку между ними. Окружность на экваторе (0 широты) составляет 40075160 метров. Длина окружности на заданной широте будет пропорциональна косинусу, поэтому формула будет deltaLongitude * 40075160 * cos(latitude) / 360
.
Изменить: ваш комментарий указывает на то, что у вас возникли проблемы с формулой долготы; Вы могли использовать градусы вместо радианов при вызове cos
, это частая ошибка новичков. Чтобы убедиться в отсутствии двусмысленности, вот рабочий код на Python.
def asRadians(degrees):
return degrees * pi / 180
def getXYpos(relativeNullPoint, p):
""" Calculates X and Y distances in meters.
"""
deltaLatitude = p.latitude - relativeNullPoint.latitude
deltaLongitude = p.longitude - relativeNullPoint.longitude
latitudeCircumference = 40075160 * cos(asRadians(relativeNullPoint.latitude))
resultX = deltaLongitude * latitudeCircumference / 360
resultY = deltaLatitude * 40008000 / 360
return resultX, resultY
Я решил использовать широту relativeNullPoint для вычисления X. Это имеет то преимущество, что если вы конвертируете несколько точек с одинаковой долготой, они будут иметь одинаковый X; линии север-юг будут вертикальными.
Еще раз отредактируйте: Я должен был указать, что это очень простая формула, и вы должны знать ее ограничения. Очевидно, что Земля не плоская, поэтому любая попытка сопоставить ее с координатами XY потребует некоторых компромиссов. Формула, которую я вывел выше, работает лучше всего, когда область, которую вы конвертируете, достаточно мала, чтобы считать ее плоской, и где небольшую кривизну и непараллельность линий север-юг можно игнорировать. Есть целая наука, чтобы составить карту проекций; если вы хотите увидеть какие-то возможности, лучше всего начать с Википедии. Эта конкретная проекция известна как равнопрямоугольная проекция с некоторым добавленным масштабированием.
person
Mark Ransom
schedule
11.06.2010