RomanDillerNsk
@RomanDillerNsk
JavaScript

Как посчитать площадь прямоугольника на карте?

Коллеги доброго времени суток. Немного лирики:

Есть приложение с картой. Карта сделана на Leaflet. На карте есть кейс, нарисовать полигон и получить его данные. Так вот, полигон рисуется с помощью leaflet.editable. Все норм, но дальше получается какая-то муть. Нужно получить площадь прямоугольника данного, вот код:

polygonSize(polygon) { 

        return new Promise((resolve, reject) => {

            let coords = polygon.getBounds();
            let data = {};

            data.conners = {

                ne: [coords._northEast.lat, coords._northEast.lng], // северо-восток
                sw: [coords._southWest.lat, coords._southWest.lng], // юго-запад
                nw: [coords._northEast.lat, coords._southWest.lng], // северо-запад
                se: [coords._southWest.lat, coords._northEast.lng] // юго-восток

            };

            let points = {

                sw: new L.LatLng(data.conners.sw[0], data.conners.sw[1]), // юго-запад
                se: new L.LatLng(data.conners.se[0], data.conners.se[1]), // юго-восток
                ne: new L.LatLng(data.conners.ne[0], data.conners.ne[1]) // серверо-восток

            };

            data.width = +(points.sw.distanceTo(points.se)).toFixed(0);
            data.height = +(points.se.distanceTo(points.ne)).toFixed(0);

            resolve(data);

        });

    }


Формулу площади все я думаю знают (ширина * высота). Что бы получить ширину и высоту, я беру три точки прямоугольника (юго-запад, юго-восток и северо восток) и получаю расстояние между ними (см. код выше), делает это стандартный метод leaflet -> point.distanceTo(point2); вроде все логично. Вопросы начинаются тогда когда я начинаю двигать данный прямоугольник по карте. Каждый раз площадь его меняется. Не на много но тем не менее.

Собственно вопрос, может у кого-то есть идеи почему так происходит? Заранее благодарю
  • Вопрос задан
  • 312 просмотров
Решения вопроса 1
Moskus
@Moskus
Потому что карта - проекция поверхности Земли, которая не плоская, а потому площадь реальной фигуры на этой поверхности будет разной при разном значении центральной широты одной и той же фигуры на карте.
https://en.m.wikipedia.org/wiki/Tissot%27s_indicatrix
Кроме того, если фигура достаточно велика, то длина верхней и нижней стороны будет разная, так что ваш способ вычисления - груб и приблизителен. Если вам нужно точнее, то нужно использовать другие методы (если нужно, я могу пояснить, какие).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы