Страница 1 из 2
Преобразование координат GPS в X,Y на растре
Добавлено: 12 янв 2009, 13:30
Vladimir
Здраствуйте!
Подскажите как полученные координаты от GPS преобразовать в координаты на карте, которая поставляется в виде ESRI Shape.
Для отображения этих файлов использую SharpMap.
Я так думаю, что в ГИС, преобразование координат - это отдельная тема, поэтому буду благодарен любым ссылкам на освещение темы!
Заранее спасибо!
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 12 янв 2009, 19:33
JEY
Если Вы используете Shape Files, то должно быть известно, какая система координат была задействована при создании этих файлов...
Вообще в SharpMap есть целая иерархия классов, которые используют системы координат от EPSG. Основными функциями преобразования координат в SharpMap являются:
1. Аффинное преобразование
2. Трансформация Гельмерта
В принципе, если координатной системой в Shape Files является WGS-84, то никакой речи о преобразовании быть не может, поскольку GPS использует ту же систему координат...
Ну если Вам необходимо разобраться в преобразовании координат, тогда просмотрите исходный код класса WGS84ConversionInfo, там есть ответы на Ваши вопросы!
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 13 янв 2009, 04:28
Максим Дубинин
JEY, поправка-уточнение, в данном случае, скорее всего речь идет не о трансформации (упомянутые аффинные преобразования и Гельмерт), а о проекционном преобразовании, разумеется, как вы правильно заметили, если известна СК shape-файла.
Vladimir, таким образом прежде чем углубиться в изучение классов, рекомендую четко ответить себе и нам на один вопрос, известна ли СК shape-файла и какая она, в зависимости от ответа решения могут быть разными.
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 13 янв 2009, 07:08
JEY

спасибо! Просто не уловил связи между Shape Files и растром в рамках проекта SharpMap. Дело в том, что SharpMap без специального расширения не поддерживает растры...
Именно поэтому я упомянул все возможные виды преобразования координатных систем, те, которые SharpMap содержит в своих исходных кодах!
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 13 янв 2009, 10:00
Vladimir
Наверное мне поможет это:
Transforming between image coordinates and world coordinates
SharpMap has built-in functions to help you transform between image and world coordinates.
When the user clicks the map at a given pixel (x,y), you can translate this world coordinates using the ImageToWorld method:
SharpMap.Geometries.Point p = myMap.ImageToWorld(new System.Drawing.PointF(x, y));
Please note that the value is calculated based on the current zoom and center-values of the myMap Map object.
If you want to do the opposite transformation, use WorldToImage:
System.Drawing.PointF p = myMap.WorldToImage(new SharpMap.Geometries.Point(34.225, 175.432));
Нашел на сайте шарпмапа в хауту разделе
По сути мне надо координату, полученную от GPS приемника (ну там NMEA 0183), отобразить на карте.
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 13 янв 2009, 11:35
JEY
Ну тогда Ваша задача почти решена. Там же, на сайте SharpMap Вы сможете найти пример в исходном коде, который реализует работу с данными GPS...
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 13 янв 2009, 11:39
Vladimir
Что значит World Coordinates ? Это не то, что я получаю от GPS?
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 14 янв 2009, 22:06
Sanechko
Скорее всего, но необходимо посмотреть в руководстве что есть world cordinate.
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 15 янв 2009, 08:07
JEY
World Coordinates - это система координат, которая используется SharpMap для отображения карты. Она отличается от пользовательской системы координат...
Например: Если WorldCoordinates - это WGS84, то от пользовательской системы координат она отличается и началом отсчета и положением осей и единицами измерения!
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 15 янв 2009, 10:08
Vladimir
World Coordinates - это система координат, которая используется SharpMap для отображения карты. Она отличается от пользовательской системы координат...
Например: Если WorldCoordinates - это WGS84, то от пользовательской системы координат она отличается и началом отсчета и положением осей и единицами измерения!
Честно говоря мало что понял.
У меня с GPS приходят координаты, к примеру это точка
P(4658.1305,N,03157.7097,E)
Функция myMap.ImageToWorld в окрестностях точки P возвращает примерно следующее:
P'(46.XXXXX, 031.XXXXXX)
Логично было предположить, что координаты с GPS надо было делить на 100 чтобы скормить их SharpMap'у. Но к сожалению такой подход дает отклонение порядка сотни километров.
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 15 янв 2009, 12:49
JEY
Тут все ясно! Так с GPS приходят координаты точки P 46°58,1305' с.ш. и 31°57,7097' в.д.
Это координаты в системе WGS-84, вот это и есть World Coordinates! Теперь делаем так:
SharpMap.Geometries.Geometry Geometries = New List(SharpMap.Geometries.Geometry);
Geometries.Add(New SharpMap.Geometries.Point(46.968841,31.961828));
SharpMap.Layers.VectorLayer GPSLayer = New SharpMap.Layers.VectorLayer("GPS");
GPSLayer.DataSource = New SharpMap.Data.Providers.GeometryProvider(Geometries);
GPSLayer.Style.Symbol = Bitmap.FromFile(@"C:\data\car.gif"); //если нужна иконка.
Map.Layers.Add(GPSLayer);
Если все без ошибки, тогда должно работать отлично. Поясню: функция ImageToWorld здесь не нужна. Координаты с GPS приходят верные, только их нужно перевычислять.
В сообщениях от GPS 4658.1305 = 46.968841, а 03157.7097 = 31.961828 это NMEA 0183!
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 15 янв 2009, 13:06
Vladimir
JEY, thank's a lot!
НО все же, как Вы делаете такое преобразование:
В сообщениях от GPS 4658.1305 = 46.968841, а 03157.7097 = 31.961828 это NMEA 0183!
???
Как так получается что 4658.1305 = 46.968841

Re: Преобразование координат GPS в X,Y на растре
Добавлено: 15 янв 2009, 13:39
JEY
В сообщении от GPS была такая строка: 4658.1305,N,03157.7097,E. Это часть сообщения протокола NMEA 0183 2.0. Форматирование данных сообщения дает такие результаты:
4658.1305,N - это 46°58,1305' с.ш.
03157.7097,E - это 31°57,7097' в.д.
И дальше все вычисляется достаточно просто:
46°58,1305' = 46 + (58,1305 / 60) = 46.968841
31°57,7097' = 37 + (57,7097 / 60) = 31.961828
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 02 дек 2011, 10:42
Koba
JEY писал(а):46°58,1305' = 46 + (58,1305 / 60) = 46.968841
31°57,7097' = 37 + (57,7097 / 60) = 31.961828
Подскажите, а есть такой перевод в PostGis автоматом ? Не могу никак найти функцию ...
т.е. есть в определенных полях таблицы координаты в виде 4658.1305 , 3157.7097 а в geom поле надо вставить координату POINT(46.968841, 31.961828)
Re: Преобразование координат GPS в X,Y на растре
Добавлено: 02 дек 2011, 13:01
Denis Rykov
Koba писал(а):Подскажите, а есть такой перевод в PostGis автоматом ? Не могу никак найти функцию ...
т.е. есть в определенных полях таблицы координаты в виде 4658.1305 , 3157.7097 а в geom поле надо вставить координату POINT(46.968841, 31.961828)
Для перевода данных в градусы необходимо знать проекцию в которой у вас сейчас находятся данные. Потом просто скомпоновать геометрию на базе выбранных полей и выполнить ST_Transform.