Вопрос по gps, polygon, map, google-maps, google-maps-api-3 – Расчет площади многоугольника, нарисованного на карте Google

18

Я ищу точный алгоритм или сервис для расчета площади поверхности на земле, где точки рассчитываются на основе GPS-координат.

Я использую Google Map Api версии 3 и рисую полигоны на основе записанных координат, но я не думаю, что стандартные способы расчета площади полигона будут учитывать склоны (холмы). Нужно ли работать над контурами для такой вещи?

Существуют ли какие-либо сторонние сервисы, например, ArcGis или другие, которые также учитывают уклоны.

Ваш Ответ

2   ответа
37

это определенно возможно. Здесь есть краткое руководство с примером кода:

https://web.archive.org/web/20130301120148/http://geojason.info/demos/line-length-polygon-area-google-maps-v3

Соответствующая часть это:

google.maps.geometry.spherical.computeArea(yourPolygon.getPath());

Официальная документация:

http://code.google.com/apis/maps/documentation/javascript/reference.html#spherical

Нет, это предполагает совершенно гладкую сферическую землю. Похоже, что вы действительно хотите, это площадь поверхности цифровой модели рельефа. Это можно вычислить с помощью функции r.surf.area в GRASS GIS, но если вы хотите узнать больше, вам, вероятно, следует обратиться по адресу gis.stackexchange.com. Spacedman
@Spacedman: Может ли Grass GIS интегрироваться с Google Maps? Kunal Uppal
@ Google Ты Google, ты не можешь его найти? :-D Извините, я не знаю ссылку для замены. Я оставлю ссылку на тот случай, если кто-нибудь захочет найти ее на archive.org. В любом случае, эта строка - то, что вы ищете, и вы можете прочитать больше об этом в документации. Brad
будет ли этот API учитывать высоту земли ?. Я буду получать координаты от устройства GPS. Kunal Uppal
@Brad Эй, я открыл первую ссылку, но мы получили страницу не найдена. Можете ли вы отправить мне другую ссылку? Google
10

Ответ Брэда

google.maps.geometry.spherical.computeArea(yourPolygon.getPath());

это правильно, но будьте осторожны, это относится только к полигонам, которые не пересекаются. Когда многоугольник начинает самопересекающимися, все идет ужасно неправильно. Вы можете попробовать это со ссылкой, которую дал Брэдhttp://geojason.info/demos/line-length-polygon-area-google-maps-v3/ , Просто нарисуйте 4-5 пересекающихся линий и начните играть с вершинами. Расчет площади определенно покажется неправильным.

Если вы не уверены, вот пример:

   var map;

    google.maps.visualRefresh = true;

    google.maps.event.addDomListener(window, 'load', initialize);

    function initialize() {
        var mapOptions = {
            center : new google.maps.LatLng(55.874, -4.287),
            zoom : 16,
            mapTypeId : google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions)

        drawExample();
    }

    function drawExample() {
        var pathLeft = [new google.maps.LatLng(55.874, -4.292),
            new google.maps.LatLng(55.875, -4.292),
            new google.maps.LatLng(55.875, -4.290),
            new google.maps.LatLng(55.876, -4.290),
            new google.maps.LatLng(55.876, -4.291),
            new google.maps.LatLng(55.874, -4.291)]

        var polygonLeft = new google.maps.Polygon({
            path : pathLeft,
            map: map
        });

        var areaLeft = google.maps.geometry.spherical.computeArea(polygonLeft.getPath());

        var pathRight = [new google.maps.LatLng(55.874, -4.282),
            new google.maps.LatLng(55.875, -4.282),
            new google.maps.LatLng(55.875, -4.280),
            new google.maps.LatLng(55.8753, -4.2807),
            new google.maps.LatLng(55.876, -4.281),
            new google.maps.LatLng(55.874, -4.281)]

        var polygonRight = new google.maps.Polygon({
            path : pathRight,
            map: map
        });

        var areaRight = google.maps.geometry.spherical.computeArea(polygonRight.getPath());

        console.log("areaLeft: " + areaLeft + "\nareaRight: " + areaRight);
    }

Отчет об ошибкеhttp://code.google.com/p/gmaps-api-issues/issues/detail?id=5624&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Stars%20ApiType%20Internal&start=700#makechanges

Похожие вопросы