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

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

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

этот: http://www.mapwindow.org/documentation/ ... le.html#a7
проблема в том, что у карты нет СК. А это всеравно как умножать на 0
Нельзя пересчитать из ничего!

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

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

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

trir писал(а):этот: http://www.mapwindow.org/documentation/ ... le.html#a7
проблема в том, что у карты нет СК. А это всеравно как умножать на 0
Нельзя пересчитать из ничего!
Спасибо, я нашел выше вашу ссылку на этот код. Ранее уже смотрел по ней - и ... забыл про нее ... Бывает.
Посмотрел в отладчике значение поля Map1.Projection. До ввода из файла оно равно нулю, после ввода - равно
65535. Вы именно по этому значению определяете, что у карты нет СК ?

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

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

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

Из исходников 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

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

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

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

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 нет возможности для преобразованного слоя создать соответствующую СК. Так ?

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

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

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

у shp'а есть .prj-файл?

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

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

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

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]]

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

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

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

Какое значение у Map1.GrabProjectionFromData?

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

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

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

trir писал(а):Какое значение у Map1.GrabProjectionFromData?
Для исходной и преобразованной проекций - True.

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

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

Сообщение trir » 01 апр 2015, 04:45

Сам назначь СК карте

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

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

Сообщение Foma » 01 апр 2015, 08:38

trir писал(а):Сам назначь СК карте
Камрад, простите, не понял - что значит "самому назначить" ? Нужно самому писать процедуру преобразования координат ?

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

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

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

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

GeoProjection mapproj = new GeoProjection(); 
mapproj.ImportFromESRI(<сюда вставить орисание из .prj>);
Map1.GeoProjection = mapproj;

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

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

Сообщение Foma » 01 апр 2015, 11:22

trir писал(а):

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

GeoProjection mapproj = new GeoProjection(); 
mapproj.ImportFromESRI(<сюда вставить орисание из .prj>);
Map1.GeoProjection = mapproj;
Вставить в ImportFromESRI надо весь текст из файла .prj или только какую-то его часть ?
После этого в обработчике перемещения мыши надо использовать функцию
Map1.GeoProjection.Transform( YY, XX ) ( как в коде, приведенном мною выше ) ?

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

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

Сообщение trir » 01 апр 2015, 11:25

1. весь текст
2. можно использовать ProjToDegrees

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

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

Сообщение Foma » 01 апр 2015, 11:41

trir писал(а):

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

GeoProjection mapproj = new GeoProjection(); 
mapproj.ImportFromESRI(<сюда вставить орисание из .prj>);
Map1.GeoProjection = mapproj;
Еще одно маленькое уточнение : Имею первую слой - в исходной проекции, и второй, преобразованный из первого в QGIS в проекцию Albers-Siberia. При вводе второго в функцию mapproj.ImportFromESRI вставлять содержимое из файла .prj для первого слоя или для второго ?

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

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

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

ProjToDegrees заработал?
По идее, надо устанавливать ту СК, в которой надо отображать карту. Но возникает вопрос - читается ли СК слоя из shp'а?

Ответить

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

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

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