Страница 4 из 7
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 13:07
trir
этот:
http://www.mapwindow.org/documentation/ ... le.html#a7
проблема в том, что у карты нет СК. А это всеравно как умножать на 0
Нельзя пересчитать из ничего!
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 13:22
Foma
Спасибо, я нашел выше вашу ссылку на этот код. Ранее уже смотрел по ней - и ... забыл про нее ... Бывает.
Посмотрел в отладчике значение поля Map1.Projection. До ввода из файла оно равно нулю, после ввода - равно
65535. Вы именно по этому значению определяете, что у карты нет СК ?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 13:49
trir
Из исходников ProjToDegrees
Код: Выделить всё
VARIANT_BOOL CMapView::ProjToDegrees(double projX, double projY, double* degreesLngX, double * degreesLatY)
{
*degreesLngX = 0.0;
*degreesLatY = 0.0;
switch(_transformationMode)
{
case tmNotDefined:
return VARIANT_FALSE;
case tmWgs84Complied:
*degreesLngX = projX;
*degreesLatY = projY;
return VARIANT_TRUE;
case tmDoTransformation:
IGeoProjection* gp = GetMapToWgs84Transform();
VARIANT_BOOL vb;
gp->Transform(&projX, &projY, &vb);
*degreesLngX = projX;
*degreesLatY = projY;
return vb;
}
return VARIANT_FALSE;
}
case tmNotDefined
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 14:31
Foma
trir писал(а):Из исходников ProjToDegrees
Код: Выделить всё
VARIANT_BOOL CMapView::ProjToDegrees(double projX, double projY, double* degreesLngX, double * degreesLatY)
{
*degreesLngX = 0.0;
*degreesLatY = 0.0;
switch(_transformationMode)
{
case tmNotDefined:
return VARIANT_FALSE;
case tmWgs84Complied:
*degreesLngX = projX;
*degreesLatY = projY;
return VARIANT_TRUE;
case tmDoTransformation:
IGeoProjection* gp = GetMapToWgs84Transform();
VARIANT_BOOL vb;
gp->Transform(&projX, &projY, &vb);
*degreesLngX = projX;
*degreesLatY = projY;
return vb;
}
return VARIANT_FALSE;
}
case tmNotDefined
Я вас понял. Согласно коду процедуры, изначально выходным координатам присваиваются нули, и, из-за того, что заходим в ветку case tmNotDefined, они возвращаются нулевыми. В слое система координат отсутствует начисто. То есть, как я понял, когда я в QGIS преобразовывал слой в другую проекцию, то сами шейпы преобразовались к новому виду, а СК не перенеслась и не создалась заново. И в QGIS нет возможности для преобразованного слоя создать соответствующую СК. Так ?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 14:43
trir
у shp'а есть .prj-файл?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 14:52
Foma
trir писал(а):у shp'а есть .prj-файл?
Такие файлы есть. Исходная проекция содержит в этом файле :
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
Проекция, полученная в результате преобразования в Albers-Siberia, содержит в этом файле :
PROJCS["Albers",GEOGCS["GCS_Krassovsky, 1942",DATUM["D_unknown",SPHEROID["krass",6378245,298.3]],PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],PROJECTION["Albers"],PARAMETER["standard_parallel_1",52],
PARAMETER["standard_parallel_2",64],PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",105],PARAMETER["false_easting",18500000],
PARAMETER["false_northing",0],UNIT["Meter",1]]
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 15:19
trir
Какое значение у Map1.GrabProjectionFromData?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 31 мар 2015, 15:26
Foma
trir писал(а):Какое значение у Map1.GrabProjectionFromData?
Для исходной и преобразованной проекций - True.
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 04:45
trir
Сам назначь СК карте
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 08:38
Foma
trir писал(а):Сам назначь СК карте
Камрад, простите, не понял - что значит "самому назначить" ? Нужно самому писать процедуру преобразования координат ?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 10:36
trir
Код: Выделить всё
GeoProjection mapproj = new GeoProjection();
mapproj.ImportFromESRI(<сюда вставить орисание из .prj>);
Map1.GeoProjection = mapproj;
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 11:22
Foma
trir писал(а):Код: Выделить всё
GeoProjection mapproj = new GeoProjection();
mapproj.ImportFromESRI(<сюда вставить орисание из .prj>);
Map1.GeoProjection = mapproj;
Вставить в ImportFromESRI надо весь текст из файла .prj или только какую-то его часть ?
После этого в обработчике перемещения мыши надо использовать функцию
Map1.GeoProjection.Transform( YY, XX ) ( как в коде, приведенном мною выше ) ?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 11:25
trir
1. весь текст
2. можно использовать ProjToDegrees
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 11:41
Foma
trir писал(а):Код: Выделить всё
GeoProjection mapproj = new GeoProjection();
mapproj.ImportFromESRI(<сюда вставить орисание из .prj>);
Map1.GeoProjection = mapproj;
Еще одно маленькое уточнение : Имею первую слой - в исходной проекции, и второй, преобразованный из первого в QGIS в проекцию Albers-Siberia. При вводе второго в функцию mapproj.ImportFromESRI вставлять содержимое из файла .prj для первого слоя или для второго ?
Re: Изображение карты SHP и текущие координаты в QGIS
Добавлено: 01 апр 2015, 11:54
trir
ProjToDegrees заработал?
По идее, надо устанавливать ту СК, в которой надо отображать карту. Но возникает вопрос - читается ли СК слоя из shp'а?