Страница 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
trir писал(а):этот: http://www.mapwindow.org/documentation/ ... le.html#a7
проблема в том, что у карты нет СК. А это всеравно как умножать на 0
Нельзя пересчитать из ничего!
Спасибо, я нашел выше вашу ссылку на этот код. Ранее уже смотрел по ней - и ... забыл про нее ... Бывает.
Посмотрел в отладчике значение поля 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'а?