Не удается получить EPSG из шейп-файла с помощью OGR / GDAL

В данный момент я работаю в шейп-файле в 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]]

5

Решение

Примерно так должно работать:

OGRLayer  * layer = dataset->GetLayer(0);
layer->ResetReading();
OGRFeature * feat= layer->GetNextFeature();
OGRGeometry * geom = feat->GetGeometryRef();
OGRSpatialReference * spatRef = geom->getSpatialReference();
int EPSG =  spatRef->GetEPSGGeogCS();

Надеюсь, поможет!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]