Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Привязка растра к координатам Добавлено: 11.07.10 21:35  

Автор вопроса:  Павел | Web-сайт: www.vbnet.ru | ICQ: 326066673 
Задача такая. Есть растровое изображение (скажем, скриншот карты). На нём отображен достаточно маленький кусочек местности (небольше 50 км в каждом измерении), так что эту местность можно считать плоскостью.
Его нужно привязать к координатам (градусы широты/долготы).
Для этого у юзера спрашиваются координаты нескольких характерных точек (выбираются юзером произвольно). В изначальной постановке задачи это были 2 точки, возможно потребуется больше.
Т.е. юзер тыкает в какую-то точку картинки и вводит соответствующие ей широту/долготу.
Таким образом, для каждой из этих 2+ точек у нас есть 4 числа:

X экранное (в пикселях)
Y экранное (в пикселях)
Широта (в градусах)
Долгота (в градусах)

Исходя из этих данных нужно:
1. Довернуть на экране картинку так, чтоыб север был сверху. И отмасштабировать её до нужного масштаба.
2. Уметь расчитывать соответствие координат в обе стороны (по заданным координатам экранным находить широту/долготу и наоборот)

Как это сделать?

Просто отобразить широту/долготу в X/Y с поворотом на угол не выйдет, потому что масштабы по осям разные (одинаковые они только на экваторе, а вдали от него уже один градус широты - это совсем не то же самое, что и один градус долготы, если в километрах считать).
Пробовал сконвертировать широту/долготу в UTM и считать там нужные параметры таким образом:

1. Найти проекции отрезка между двумя точками на обе оси (X/Y) в экранных координатах
2. Найти проекции отрезка между теми же точками на обе оси в координатах UTM
3. Найти угол, который составляет эьтот отрезок к горизонтали (или вертикали, хрен его знает) с помощью Atan2 для экранных координат
4. Такой же угол находу для координат UTM
5. Вычисляю разность между углами. По идее - это и есть то, на что нужно довернуть картинку.

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

Как еще можно сделать?
МОжно наверное 3 точки задать, и как-то интерполировать координаты. Но как интерполировать? И как вычислить угол, на который картинку довернуть?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 11.07.10 23:21
Скачай исходники движка карт GMap.NET с codeplex .. Там все это есть применительно к тайлам.. включая пересчет координат в пикселы и обратно, расчет расстояния между точками по широте и долготе и много других фич.. Я уже год юзаю этот движок для своей софтины.

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 11.07.10 23:26
А если картинка считается плоской, то почему масштабы по осям разные?

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 11.07.10 23:26
Что касается привязки растра.. то я пошел другим путем.. я свой слой(раст) с помощью MapTailer привязал к координатам, порезал на тайлы и прикрутил к движку карт.. Теперь у меня поверх основного слоя карты выводится мой дополнительный растровый слой..

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 11.07.10 23:28
А если картинка считается плоской, то почему масштабы по осям разные?

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

Ответить

Номер ответа: 5
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #5
Добавлено: 11.07.10 23:36
ну тогда наверное можно посчитать разницу углов на севере и на юге и интерполировать координаты. Это не совсем точно, то думаю достаточно.

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 12.07.10 07:28
Я тут подумал... Если мы далеко от полюса и смотрим небольшой кусок карты, то можно считать, что он плоский и параллели/меридианы составляют прямоугольную сетку.
Тогда остаётся только посчитать, сколько километров в градусе по обеим координатам. Если считать землю шариком, то длина параллели - это 2*pi*Rземли*cosшироты, длина меридиана 2*pi*Rземли километров. Если делим длину параллели на длину меридиана - остается косинус широты.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам