Изображение карты SHP и текущие координаты в QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 26 мар 2015, 11:48

trir писал(а):MapWinGIS сам умеет пересчитывать!
Вам это может показаться смешным, но я сварганил огромный проект на MapWinGIS, не имея ни его описания, ни нормального Help'а ( точнее - имел Help устаревшей версии, весьма, кстати, примитивный и малоинформативный ). Разбирался методом тыка, используя также весьма примитивные примеры исходных текстов из кое-каких источников. Поэтому, душевно вас прошу - поясните, пожалуйста, чуть более подробно вашу цитату. За ваше сообщение с примерами кода - большое спасибо, буду разбираться, это займет какое-то время, возможно, немаленькое.

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение trir » 26 мар 2015, 12:07

Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах
В MapWinGIS система координат хранится в объекте GeoProjection, у карты есть свой экземпляр
Вам надо пересчитать в СК, которая создаётся так

Код: Выделить всё

 GeoProjection proj = new GeoProjection(); 
 // EPSG code
 proj.ImportFromEPSG(4326);  // WGS84
GeoProjection умеет пересчитывать координаты в любую СК, только надо указть какую
методом StartTransform указыаем нужную СК
и методом Transform пересчитываем
полученый результат отабражаем - где хотим

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 26 мар 2015, 12:14

trir писал(а):Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах...
Большое спасибо, буду разбираться.

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 09:22

trir писал(а):Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах
В MapWinGIS система координат хранится в объекте GeoProjection, у карты есть свой экземпляр
Вам надо пересчитать в СК, которая создаётся так

Код: Выделить всё

 GeoProjection proj = new GeoProjection(); 
 // EPSG code
 proj.ImportFromEPSG(4326);  // WGS84
GeoProjection умеет пересчитывать координаты в любую СК, только надо указть какую
методом 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
Вид окна при вводе слоя в исходной проекции
Исходный.jpg (40.39 КБ) 9212 просмотров
Преобразованный.jpg
Вид окна при вводе слоя в проекции Albers-Siberia
Преобразованный.jpg (70.42 КБ) 9212 просмотров

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение trir » 31 мар 2015, 10:01

Смотрю код, думаю
1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
2. А если делать
Map1.GeoProjection.StartTransform( Proj );
В обработчике MouseMove?
3. AxMap.ProjToDegrees

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 10:49

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

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение trir » 31 мар 2015, 10:58

Что с п.1?

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 11:12

trir писал(а): ........
3. AxMap.ProjToDegrees
.........
Сделал такой код :

Код: Выделить всё

// Ввод файла 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".

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 11:15

trir писал(а): 1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
..........
Камрад, извините, но я в географии не специалист и в этом вашем вопросе ничего не понял.
Поясните поподробнее, пожалуйста.

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение trir » 31 мар 2015, 11:17

Чему равно Map1.GeoProjection?

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 11:44

trir писал(а):Чему равно Map1.GeoProjection?
Поле Map1.GeoProjection является структурой и отладчик выдает для него список из множества полей.
Я не понимаю, какое именно поле вам нужно.

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение trir » 31 мар 2015, 11:54

Map1.Projection

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 12:06

trir писал(а):Map1.Projection
Для кода, приведенного мною в сообщении от 10:22, после завершения ввода файла при первом заходе
в обработчик мыши отладчик показывает для этого поля значение '65535' ( по всей видимости - неинициализированное ).

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение trir » 31 мар 2015, 12:34

Я что, зря код привёл? Там же подробно расписана загрузка shp'а
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК

Foma
Участник
Сообщения: 83
Зарегистрирован: 15 апр 2014, 13:31
Репутация: -1

Re: Изображение карты SHP и текущие координаты в QGIS

Сообщение Foma » 31 мар 2015, 12:47

trir писал(а):Я что, зря код привёл? Там же подробно расписана загрузка shp'а
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК
Простите, не понял - какой код вы имеете в виду ?

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя