В данный момент я работаю в шейп-файле в C ++ и QT и использую библиотеку GDAL / OGR. У меня есть этот метод, чтобы получить EPSG моих шейп-файлов:
OGRLayer layer = dataset->GetLayer(0);
OGRSpatialReference *spatialRef = layer->GetSpatialRef();
С этим я получаю номер EPSG с:
atoi(spatialRef->GetAuthorityCode(NULL));
Это прекрасно работает во всех моих файлах формы, кроме одного. В этом случае метод всегда возвращает нуль.
Я пытаюсь использовать:
spatialRef->GetAuthorityCode("PROJCS");
spatialRef->GetAuthorityCode("GEOGCS");
spatialRef->GetAuthorityName("GEOGCS");
И весь этот метод возврата ""
,
Я проверяю этот шейп-файл в ГИС-программе, так как QGIS и QGIS автоматически обнаружили, что его EPSG — 25830.
У меня такой вопрос: может ли информация о проекции быть прочитана другим способом, чем то, что я делаю?
Я жду твоих предложений.
Большое спасибо.
РЕДАКТИРОВАТЬ
Это содержимое файла .prj:
PROJCS [ «ETRS89_UTM_zone_30N», GEOGCS [ «GCS_ETRS_1989», DATUM [ «D_ETRS_1989», сфероид [ «GRS_1980», 6378137,298.257222101]], PRIMEM [ «Гринвич», 0], БЛОК [ «Степень», 0,017453292519943295]], ПРОЕКТИРОВАНИЕ [ «Transverse_Mercator»], параметр [ «latitude_of_origin», 0], параметр [ «central_meridian», — 3], параметр [ «scale_factor», 0,9996], параметр [ «false_easting», 500000], параметр [ «false_northing», 0 ], блок [ «Измеритель», 1]]
Примерно так должно работать:
OGRLayer * layer = dataset->GetLayer(0);
layer->ResetReading();
OGRFeature * feat= layer->GetNextFeature();
OGRGeometry * geom = feat->GetGeometryRef();
OGRSpatialReference * spatRef = geom->getSpatialReference();
int EPSG = spatRef->GetEPSGGeogCS();
Надеюсь, поможет!
Других решений пока нет …