Вам это может показаться смешным, но я сварганил огромный проект на MapWinGIS, не имея ни его описания, ни нормального Help'а ( точнее - имел Help устаревшей версии, весьма, кстати, примитивный и малоинформативный ). Разбирался методом тыка, используя также весьма примитивные примеры исходных текстов из кое-каких источников. Поэтому, душевно вас прошу - поясните, пожалуйста, чуть более подробно вашу цитату. За ваше сообщение с примерами кода - большое спасибо, буду разбираться, это займет какое-то время, возможно, немаленькое.trir писал(а):MapWinGIS сам умеет пересчитывать!
Изображение карты SHP и текущие координаты в QGIS
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Изображение карты SHP и текущие координаты в QGIS
Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах
В MapWinGIS система координат хранится в объекте GeoProjection, у карты есть свой экземпляр
Вам надо пересчитать в СК, которая создаётся так
GeoProjection умеет пересчитывать координаты в любую СК, только надо указть какую
методом StartTransform указыаем нужную СК
и методом Transform пересчитываем
полученый результат отабражаем - где хотим
Тут попробую объяснить на пальцах
В MapWinGIS система координат хранится в объекте GeoProjection, у карты есть свой экземпляр
Вам надо пересчитать в СК, которая создаётся так
Код: Выделить всё
GeoProjection proj = new GeoProjection();
// EPSG code
proj.ImportFromEPSG(4326); // WGS84
методом StartTransform указыаем нужную СК
и методом Transform пересчитываем
полученый результат отабражаем - где хотим
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Большое спасибо, буду разбираться.trir писал(а):Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах...
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Камрад, вы уверены в правильности приведенной вами логики преобразования ?trir писал(а):Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах
В MapWinGIS система координат хранится в объекте GeoProjection, у карты есть свой экземпляр
Вам надо пересчитать в СК, которая создаётся такGeoProjection умеет пересчитывать координаты в любую СК, только надо указть какуюКод: Выделить всё
GeoProjection proj = new GeoProjection(); // EPSG code proj.ImportFromEPSG(4326); // WGS84
методом StartTransform указыаем нужную СК
и методом Transform пересчитываем
полученый результат отабражаем - где хотим
Как я понимаю, вы приводите пример кода на C#, который приведен, в-частности, на
http://www.mapwindow.org/documentation/ ... le.html#a7 .
Я поставил себе в Delphi последнюю версию компонентов MapWinGIS - 4.9, и состряпал
простейший пример в Дельфи ( вводим файл SHP и делаем предложенное вами преобразование ).
При нажатии на кнопку вводим слой и делаем предложенное вами преобразование :
Код: Выделить всё
// Ввод файла SHP
procedure TForm1.BtnReadMapClick(Sender: TObject);
var
shp:Shapefile;
begin
if ( OpenDialog1.Execute ) then
begin
// Создаем и вводим слой карты из файла :
shp:=CoShapefile.Create;
shp.Open(OpenDialog1.FileName,nil);
Map1.AddLayer(shp,true);
// создаем объект класса GeoProjection :
Proj := CoGeoProjection.Create();
// устанавливаем объект в WGS84 :
Proj.ImportFromEPSG( 4326 );
// устанавливаем созданную систему координат в нашу карту :
Map1.GeoProjection.StartTransform( Proj );
end;
end;
Код: Выделить всё
// Обработчик события - перемещение курсора мыши
procedure TForm1.Map1MouseMove( ASender: TObject; Button, Shift: Smallint;
x, y: Integer);
var
XX, YY : double;
begin
// пиксельные координаты мыши преобразуем в координаты карты :
Map1.PixelToProj(x,y,YY,XX);
// Преобразуем координаты нашей карты в WGS84 :
Map1.GeoProjection.Transform( YY, XX );
// преобразованные координаты рисуем в статусной строке :
StatusBar1.Panels[0].Text := 'Lat='+FloatTostr(XX);
StatusBar1.Panels[1].Text := 'Long='+FloatTostr(YY);
end;
Как видите, для исходной проекции координаты преобразуются сами в себя, то есть, не меняются,
а для преобразованной, похоже, остаются в метрах.
Что бы тут еще можно было придумать ? Или я, может, неправильно делаю ?
- Вложения
-
- Вид окна при вводе слоя в исходной проекции
- Исходный.jpg (40.39 КБ) 9204 просмотра
-
- Вид окна при вводе слоя в проекции Albers-Siberia
- Преобразованный.jpg (70.42 КБ) 9204 просмотра
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Изображение карты SHP и текущие координаты в QGIS
Смотрю код, думаю
1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
2. А если делать
Map1.GeoProjection.StartTransform( Proj );
В обработчике MouseMove?
3. AxMap.ProjToDegrees
1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
2. А если делать
Map1.GeoProjection.StartTransform( Proj );
В обработчике MouseMove?
3. AxMap.ProjToDegrees
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Попрбовал в таком виде :trir писал(а): .......
2. А если делать
Map1.GeoProjection.StartTransform( Proj );
В обработчике MouseMove?
......
Код: Выделить всё
// Ввод файла SHP
procedure TForm1.BtnReadMapClick(Sender: TObject);
var
shp:Shapefile;
begin
if ( OpenDialog1.Execute ) then
begin
// Создаем и вводим слой карты из файла :
shp:=CoShapefile.Create;
shp.Open(OpenDialog1.FileName,nil);
Map1.AddLayer(shp,true);
// создаем объект класса GeoProjection :
Proj := CoGeoProjection.Create();
// устанавливаем объект в WGS84 :
Proj.ImportFromEPSG( 4326 );
end;
end;
// Обработчик события - перемещение курсора мыши
procedure TForm1.Map1MouseMove( ASender: TObject; Button, Shift: Smallint;
x, y: Integer);
var
XX, YY : double;
begin
// пиксельные координаты мыши преобразуем в координаты карты :
Map1.PixelToProj(x,y,YY,XX);
// устанавливаем созданную систему координат в нашу карту :
Map1.GeoProjection.StartTransform( Proj );
// Преобразуем координаты нашей карты в WGS84 :
Map1.GeoProjection.Transform( YY, XX );
// преобразованные координаты рисуем в статусной строке :
StatusBar1.Panels[0].Text := 'Lat='+FloatTostr(XX);
StatusBar1.Panels[1].Text := 'Long='+FloatTostr(YY);
// останавливаем преобразование :
Map1.GeoProjection.StopTransform();
end;
Теперь попробуем п. 3
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Сделал такой код :
Код: Выделить всё
// Ввод файла SHP
procedure TForm1.BtnReadMapClick(Sender: TObject);
var
shp:Shapefile;
begin
if ( OpenDialog1.Execute ) then
begin
// Создаем и вводим слой карты из файла :
shp:=CoShapefile.Create;
shp.Open(OpenDialog1.FileName,nil);
Map1.AddLayer(shp,true);
end;
end;
// Обработчик события - перемещение курсора мыши
procedure TForm1.Map1MouseMove( ASender: TObject; Button, Shift: Smallint;
x, y: Integer);
var
XX, YY : double;
Xdeg, Ydeg : double;
begin
// пиксельные координаты мыши преобразуем в координаты карты :
Map1.PixelToProj(x,y,YY,XX);
Map1.ProjToDegrees( XX, YY, Xdeg, Ydeg );
// преобразованные координаты рисуем в статусной строке :
StatusBar1.Panels[0].Text := 'Lat='+FloatTostr(Xdeg);
StatusBar1.Panels[1].Text := 'Long='+FloatTostr(Ydeg);
end;
Для исходной проекции - то же, что и на приведенной выше мною картинке;
Для проекции Albers-Siberia - в верхней строке координат - то же самое, в нижней статусной строке -
постоянно и независимо от положения мыши : "Lat = 0 Long = 0".
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Камрад, извините, но я в географии не специалист и в этом вашем вопросе ничего не понял.trir писал(а): 1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
..........
Поясните поподробнее, пожалуйста.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Изображение карты SHP и текущие координаты в QGIS
Чему равно Map1.GeoProjection?
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Поле Map1.GeoProjection является структурой и отладчик выдает для него список из множества полей.trir писал(а):Чему равно Map1.GeoProjection?
Я не понимаю, какое именно поле вам нужно.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Изображение карты SHP и текущие координаты в QGIS
Map1.Projection
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Для кода, приведенного мною в сообщении от 10:22, после завершения ввода файла при первом заходеtrir писал(а):Map1.Projection
в обработчик мыши отладчик показывает для этого поля значение '65535' ( по всей видимости - неинициализированное ).
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Изображение карты SHP и текущие координаты в QGIS
Я что, зря код привёл? Там же подробно расписана загрузка shp'а
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК
-
- Участник
- Сообщения: 83
- Зарегистрирован: 15 апр 2014, 13:31
- Репутация: -1
Re: Изображение карты SHP и текущие координаты в QGIS
Простите, не понял - какой код вы имеете в виду ?trir писал(а):Я что, зря код привёл? Там же подробно расписана загрузка shp'а
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 3 гостя