Есть карта в формате bmp. К ней идёт map файлик в котором описаны 9 точек привязки пикселей и глобальных координат. Подскажите как вычислить координаты в любой точке картинки(тоесть необходимо знать какой координате соответствует каждый пиксель картинки).
Привязка координат
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
|
||
Re: Привязка координат
В общем случае - решение системы линейных или нелинейных уравнений. Если линейных, то, например, так: http://www-ec.njit.edu/surveying/Docume ... Только для этого метода (линейного) надо, чтобы географические координаты были линейными. То есть, если привязка (то бишь, проекция) в Lat/Lon - то должны использоваться градусные координаты, а если Transverse Mercator, то метрические (блин, забыл как они по научному называются).
Re: Привязка координат
Используется привязка Lat/Lon. Вот часть map файла:
Point01,xy,13725, 7921,in, deg, 53,19.4708333,N, 83, 48.0195,E...
Point02,xy,13994, 4253,in, deg, 53,22.4111667,N, 83,48.5966667,E...
Point03,xy,10025, 3367,in, deg, 53,23.2373333,N, 83, 43.274,E...
Point04,xy, 8344, 3431,in, deg, 53,23.2343333,N, 83, 41.0115,E...
Point05,xy, 7476, 3326,in, deg, 53, 23.35,N, 83,39.8491667,E...
Point06,xy, 2625, 6152,in, deg, 53,21.2133333,N, 83, 33.178,E...
Point07,xy, 7663, 7730,in, deg, 53,19.8008333,N, 83,39.8958333,E...
Point08,xy, 7900, 6640,in, deg, 53,20.6673333,N, 83,40.2483333,E...
Point09,xy,10492, 6020,in, deg, 53,21.0886667,N, 83,43.7663333,E...
тоесть видно, что привязка осуществляется по 9 точкам. Очень желательно мне в моей программе использовать такой же тип привязки. Где можно прочитать хоть название метода апроксимирования используемого при 9 точках.
Point01,xy,13725, 7921,in, deg, 53,19.4708333,N, 83, 48.0195,E...
Point02,xy,13994, 4253,in, deg, 53,22.4111667,N, 83,48.5966667,E...
Point03,xy,10025, 3367,in, deg, 53,23.2373333,N, 83, 43.274,E...
Point04,xy, 8344, 3431,in, deg, 53,23.2343333,N, 83, 41.0115,E...
Point05,xy, 7476, 3326,in, deg, 53, 23.35,N, 83,39.8491667,E...
Point06,xy, 2625, 6152,in, deg, 53,21.2133333,N, 83, 33.178,E...
Point07,xy, 7663, 7730,in, deg, 53,19.8008333,N, 83,39.8958333,E...
Point08,xy, 7900, 6640,in, deg, 53,20.6673333,N, 83,40.2483333,E...
Point09,xy,10492, 6020,in, deg, 53,21.0886667,N, 83,43.7663333,E...
тоесть видно, что привязка осуществляется по 9 точкам. Очень желательно мне в моей программе использовать такой же тип привязки. Где можно прочитать хоть название метода апроксимирования используемого при 9 точках.
Re: Привязка координат
Файл внимательно прочитали? Там все написано. Если отбросить всякие нелинейности, то Вам надо аффинное преобразование, т.е.:
X = a0 + a1*x + a2*y
Y = b0 + b1*x + b2*y
X,Y - координаты в пикселях, x,y - географические (ну или наоборот)
Для определения коэффициентов a0, a1, a2, b0, b1, b2 для всего поля карты достаточно 3-х точек. 9 точек можно использовать для уточнения/усреднения коэффициентов по всему полю карты, при этом привязка немного разбежится от точек, если они были кривые, но равномерно по полю. Имхо по умолчанию ozi привязывает именно так.
Если Вы хотите получить точное соответствие для всех 9 точек, то надо либо проводить триангуляцию и привязывать по треугольникам, либо использовать формулы с 9 параметрами и искать для них корни.
По поводу Вашей привязки Lat/Lon - уверены ли Вы, что проекция карты может быть привязана так? В Lat/Lon привязывают все, что ни попадя, я раньше и генштаб привязывал в Lat/Lon, но к добру это не приведет. Все-таки, карты в пределах одного градуса имхо гораздо чаще бывают в Transverse Mercator с линейной километровой сеткой, а не в Lat/Lon с линейной градусной сеткой.
X = a0 + a1*x + a2*y
Y = b0 + b1*x + b2*y
X,Y - координаты в пикселях, x,y - географические (ну или наоборот)
Для определения коэффициентов a0, a1, a2, b0, b1, b2 для всего поля карты достаточно 3-х точек. 9 точек можно использовать для уточнения/усреднения коэффициентов по всему полю карты, при этом привязка немного разбежится от точек, если они были кривые, но равномерно по полю. Имхо по умолчанию ozi привязывает именно так.
Если Вы хотите получить точное соответствие для всех 9 точек, то надо либо проводить триангуляцию и привязывать по треугольникам, либо использовать формулы с 9 параметрами и искать для них корни.
По поводу Вашей привязки Lat/Lon - уверены ли Вы, что проекция карты может быть привязана так? В Lat/Lon привязывают все, что ни попадя, я раньше и генштаб привязывал в Lat/Lon, но к добру это не приведет. Все-таки, карты в пределах одного градуса имхо гораздо чаще бывают в Transverse Mercator с линейной километровой сеткой, а не в Lat/Lon с линейной градусной сеткой.
Re: Привязка координат
Тут, конешно, умные люди тусуются...
А открыть "энто дело" в ОЗИ и он покажет координаты в любой точке? Такой способ не катит?
А открыть "энто дело" в ОЗИ и он покажет координаты в любой точке? Такой способ не катит?
|
||
Re: Привязка координат
формулы пересчета зависят от того, в какой проекции сделана карта. Для каждой проекции своя.
А не проще воспользоваться CALL интерфейсом под Озик и попросить его посчитать это все безобразие? По-моему там такие вызовы там были.
Михаил.
А не проще воспользоваться CALL интерфейсом под Озик и попросить его посчитать это все безобразие? По-моему там такие вызовы там были.
Михаил.
Re: Привязка координат
А есть каке нить примеры этих вызовов. А то как делать немного непонятно
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 82 гостя