Страница 1 из 1

Вычисление площади в GDAL с привязкой к эллипсоиду

Добавлено: 19 окт 2017, 15:34
slavkin
Добрый день!

Помогите разобраться в проблеме.

Необходимо вычислить площадь векторного полигона.
Соответственно, результат тестирую в QGIS в калькуляторе полей используя функции
$AREA и Area( ), как я понял $AREA вычисляет площадь в ед. изм. проекта и на эллипсоиде который задан в тех же настройках.
Area(геометрия) - вычисляет площадь без учета эллипса
Calculations are always planimetric in the Spatial Reference System (SRS) of this geometry, and the units of the returned area will match the units for the SRS.
// Расчеты всегда являются контурными в пространственной системе отсчета (SRS) этой геометрии, а единицы возвращенной области будут соответствовать единицам для SRS.

SRS моего полигона:

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

GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]] 
И код которым считаю площадь GDAL (на NodeJS)

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

   dataset = gdal.open(FILE_NAME);  
    console.log("  Количество слоёв: " + dataset.layers.count());
    dataset.layers.forEach(function(layer) {
        var feature = new gdal.Feature(layer);
        while (feature = layer.features.next()) {
           var test_geometry = feature.getGeometry();
            console.log(" Геометрия: " + test_geometry);
            console.log(" **  Площадь: " + test_geometry.getArea());
            console.log("\n     WKT: \n" + test_geometry.srs.toPrettyWKT());
        }
    });
    dataset.close();
    console.log("\nФайл \"" + FILE_NAME + "\" закрыт\n");
Настройки проекта QGIS:
Эллипсоид для вычислений: WGS84
Большая полуось: 6 378 137,000
Малая полуось: 6 356 752,314
Система координат проекта: WGS84 / ESPG:4326

Полигон так же создан в СК: WGS84 / ESPG:4326


Объясните мне в каких ед. измерения возвращается мне площадь полигона функцией getArea().
Как посчитать площадь полигона на нужном мне эллипсоиде, что бы получить тоже значение что и в QGIS c использованием $AREA

Буду очень благодарен!

Re: Вычисление площади в GDAL с привязкой к эллипсоиду

Добавлено: 19 окт 2017, 15:45
freeExec
В единицах СК, для ESPG:4326 - это градус.

Re: Вычисление площади в GDAL с привязкой к эллипсоиду

Добавлено: 19 окт 2017, 15:56
slavkin
freeExec писал(а):
19 окт 2017, 15:45
В единицах СК, для ESPG:4326 - это градус.
Отлично, а что нужно сделать, чтобы получить площадь в квадратных метрах/километрах/гектарах, на соответствующей сфере WGS84 ?

Re: Вычисление площади в GDAL с привязкой к эллипсоиду

Добавлено: 20 окт 2017, 11:37
slavkin
Эх, я сам разобрался с проблемой :roll:

Для получения площади в привычных единицах измерения (кв. м) было необходимо перепроецировать геометрию слоя в прямоугольную систему координат, например ESPG 32637 или ESPG 102017.

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

var srs_ESPG_32637 = gdal.SpatialReference.fromEPSGA(32637);
var transform = new gdal.CoordinateTransformation(test_geometry.srs, srs_ESPG_6933);
test_geometry.transform(transform);