Как отобразить широту / долготу искаженной карты?

голоса
22

У меня есть куча пар широты / долготы, которые сопоставляются с известной х / у координаты на (географически искаженное) карте.

Тогда у меня есть пара еще одна широты / долготы. Я хочу, чтобы построить его на карте, как лучше всего можно. Как я могу идти об этом?

Сначала я решил создать систему линейных уравнений для трех ближайших Широв / точек и вычислить преобразование из них, но это не очень хорошо работает на всех. Поскольку это линейная система, я не могу использовать более близкие точки либо.

Вы не можете предположить, Север вверх: все у вас есть существующие LAT / долго-> х / у отображения.

EDIT: это не проекция Меркатора, или что-нибудь подобное. Это произвольно искажается для удобства чтения (думает карту метро). Я хочу использовать только ближайшие 5 до 10 отображения, так что искажения в других частях карты не влияет на отображение Я пытаюсь вычислить.

Кроме того, вся карта находится в очень небольшом географическом районе, так что нет необходимости беспокоиться о земном шаре - предположения плоской Земли достаточно хорошо.

Задан 05/08/2008 в 05:55
источник пользователем
На других языках...                            


4 ответов

голоса
8

Существуют ли какие - либо более конкретные детали по виду искажений? Если, например, ваши широты и долготы «искаженные» на 2D - карту с помощью проекции Меркатора, математика преобразования легко доступна .

Если карта искажается действительно произвольно, есть много вещей , которые вы могли бы попробовать, но самый простой, вероятно , будет вычислить среднее взвешенное из существующих точечных отображений. Ваш вес может быть квадрат обратным к й / у расстояния от новой точки к каждому из существующих точек.

Некоторые псевдокод:

estimate-latitude-longitude (x, y)

    numerator-latitude := 0
    numerator-longitude := 0
    denominator := 0

    for each point,
        deltaX := x - point.x
        deltaY := y - point.y
        distSq := deltaX * deltaX + deltaY * deltaY
        weight := 1 / distSq

        numerator-latitude += weight * point.latitude
        numerator-longitude += weight * point.longitude
        denominator += weight

    return (numerator-latitude / denominator, numerator-longitude / denominator)

Этот код даст относительно простого приближения. Если вы можете быть более точными о том, как проекция искажает географические координаты, вы, вероятно, можете сделать гораздо лучше.

Ответил 05/08/2008 в 06:48
источник пользователем

голоса
2

Хорошо. С теоретической точки зрения, учитывая, что искажение «произвольное», и любое решение требует, чтобы смоделировать это произвольное искажение, вы, очевидно, не можете получить «ответ». Тем не менее, любое решение будет включать в себя введение (обычно неявно) некоторые модели искажения, которые могут или не могут отражать реальную ситуацию.

Так как вы, кажется, больше всего заинтересованы в моделях, которые могут себе позволить какой-то локальной непрерывности отображения искажений, самый очевидный выбор, который вы уже пробовали: линейная interpolaton между ближайшими точками. Выход за рамки, что будет требовать более сложного математического и численного анализа знаний.

Вы, однако, неправильно в предполагая, что вы не можете расширить это больше очков. Вы можете с помощью наименее квадратичный подходом ошибок. Найти линейный ответ, что сводит к минимуму ошибки других точек. Это, вероятно, наиболее прямолинейное расширение. Другими слова, возьмите 5 ближайшие точки и попытаться придумать линейное приближение, что сводит к минимуму погрешности этих точек. И использовать это. Я хотел бы попробовать это рядом.

Если это не сработает, то предположение о линейности по площади N точек нарушается. На этом этапе вам необходимо обновить либо квадратичной или кубической модели. Математика собирается получить беспокойные в этой точке.

Ответил 05/08/2008 в 16:47
источник пользователем

голоса
0

Мммм. Может быть, я что-то о вопросе здесь не хватаю, но если у вас есть длинная / широчайшая информация, у вас также есть направление на севере?

Кажется, что вам нужно отобразить геодезические координаты в проектируемой системе координат. Например osgb в WGS84.

В математике , участвующая нетривиальна, но код выходит лишь несколько строк. Если у меня было больше времени , я бы разместить больше , но мне нужен душ поэтому я буду скучный и ссылка на википедии запись , которая является довольно хорошим.

Примечание: Сообщение душ отредактирован.

Ответил 05/08/2008 в 06:21
источник пользователем

голоса
0

проблема заключается в том, что сфера может быть искажена ряд способов, и иметь все те точки, известные на экваторе, позволяет сказать, не поможет вам карту точек дальше.

Вам нужно лучше «закрыть» точек, то можно предположить, эти три точки на плоскости с четвертой и сделать интерполяцию --knowing, что расстояние долгот является функцией, не является постоянной.

Ответил 05/08/2008 в 06:20
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more