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

Ответить
slavkin
Новоприбывший
Сообщения: 4
Зарегистрирован: 30 июн 2017, 18:29
Репутация: 1

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

Сообщение slavkin » 19 окт 2017, 15:34

Добрый день!

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

Необходимо вычислить площадь векторного полигона.
Соответственно, результат тестирую в 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

Буду очень благодарен!
Последний раз редактировалось slavkin 19 окт 2017, 16:01, всего редактировалось 1 раз.

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

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

Сообщение freeExec » 19 окт 2017, 15:45

В единицах СК, для ESPG:4326 - это градус.

slavkin
Новоприбывший
Сообщения: 4
Зарегистрирован: 30 июн 2017, 18:29
Репутация: 1

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

Сообщение slavkin » 19 окт 2017, 15:56

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

slavkin
Новоприбывший
Сообщения: 4
Зарегистрирован: 30 июн 2017, 18:29
Репутация: 1

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

Сообщение slavkin » 20 окт 2017, 11:37

Эх, я сам разобрался с проблемой :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);

Ответить

Вернуться в «GDAL/OGR»

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

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