Страница 3 из 7
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 26 мар 2015, 11:48
Foma
trir писал(а):MapWinGIS сам умеет пересчитывать!
Вам это может показаться смешным, но я сварганил огромный проект на MapWinGIS, не имея ни его описания, ни нормального Help'а ( точнее - имел Help устаревшей версии, весьма, кстати, примитивный и малоинформативный ). Разбирался методом тыка, используя также весьма примитивные примеры исходных текстов из кое-каких источников. Поэтому, душевно вас прошу - поясните, пожалуйста, чуть более подробно вашу цитату. За ваше сообщение с примерами кода - большое спасибо, буду разбираться, это займет какое-то время, возможно, немаленькое.
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 26 мар 2015, 12:07
trir
Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах
В MapWinGIS система координат хранится в объекте GeoProjection, у карты есть свой экземпляр
Вам надо пересчитать в СК, которая создаётся так
Код: Выделить всё
GeoProjection proj = new GeoProjection();
// EPSG code
proj.ImportFromEPSG(4326); // WGS84
GeoProjection умеет пересчитывать координаты в любую СК, только надо указть какую
методом StartTransform указыаем нужную СК
и методом Transform пересчитываем
полученый результат отабражаем - где хотим
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 26 мар 2015, 12:14
Foma
trir писал(а):Я уже привёл примерный алгоритм, пару сообщений назад
Тут попробую объяснить на пальцах...
Большое спасибо, буду разбираться.
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 09:22
Foma
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;
Привожу виды окна при вводе слоев
Как видите, для исходной проекции координаты преобразуются сами в себя, то есть, не меняются,
а для преобразованной, похоже, остаются в метрах.
Что бы тут еще можно было придумать ? Или я, может, неправильно делаю ?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 10:01
trir
Смотрю
код, думаю
1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
2. А если делать
Map1.GeoProjection.StartTransform( Proj );
В обработчике MouseMove?
3.
AxMap.ProjToDegrees
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 10:49
Foma
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
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 10:58
trir
Что с п.1?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 11:12
Foma
Сделал такой код :
Код: Выделить всё
// Ввод файла 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".
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 11:15
Foma
trir писал(а):
1. Какая у вас текущая проекция? tkMapProjection.PROJECTION_NONE?
Если tkMapProjection.PROJECTION_NONE - то всё понятно...
..........
Камрад, извините, но я в географии не специалист и в этом вашем вопросе ничего не понял.
Поясните поподробнее, пожалуйста.
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 11:17
trir
Чему равно Map1.GeoProjection?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 11:44
Foma
trir писал(а):Чему равно Map1.GeoProjection?
Поле Map1.GeoProjection является структурой и отладчик выдает для него список из множества полей.
Я не понимаю, какое именно поле вам нужно.
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 11:54
trir
Map1.Projection
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 12:06
Foma
trir писал(а):Map1.Projection
Для кода, приведенного мною в сообщении от 10:22, после завершения ввода файла при первом заходе
в обработчик мыши отладчик показывает для этого поля значение '65535' ( по всей видимости - неинициализированное ).
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 12:34
trir
Я что, зря код привёл? Там же подробно расписана загрузка shp'а
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 12:47
Foma
trir писал(а):Я что, зря код привёл? Там же подробно расписана загрузка shp'а
axMap1.GrabProjectionFromData = true;
Либо карта не читает СК из shp'а либо у shp'а нет СК
Простите, не понял - какой код вы имеете в виду ?