Клуб API Карт

Пример из песочницы

m.medok
20 октября 2014, 14:37

GeoQuery/Пересечение маршрута с многоугольником на примере МКАД
подскажите пожалуйста, почему этот пример у меня не работает???

как сделать, чтобы заработал?

 

<!DOCTYPE html>

 

<html>

 

<head>

    <title>Примеры. Пересечение маршрута с многоугольником на примере МКАД.</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <script src="//api-maps.yandex.ru/2.0.31/?load=package.standard,package.geoObjects,package.geoQuery,package.route&lang=ru-RU" type="text/javascript"></script>

    <script type="text/javascript" src="http://yandex.st/jquery/1.9.0/jquery.js"></script>

 

<script type="text/javascript">

ymaps.ready(init);

 

function init() {

    var myMap = new ymaps.Map("map", {

            center: [55.73, 37.75],

            zoom: 9

        }),

        moscowPolygon;

    

    function onPolygonLoad (json) {

        moscowPolygon = new ymaps.Polygon(json.coordinates);

        // Если мы не хотим, чтобы контур был виден, зададим соответствующую опцию.

        moscowPolygon.options.set('visible', false);

        // Чтобы корректно осуществлялись геометрические операции

        // над спроецированным многоугольником, его нужно добавить на карту.

        myMap.geoObjects.add(moscowPolygon);

        

        ymaps.route([[55.654884,37.527034], [55.767305,37.976100]]).then(

            function (res) {

                // Объединим в выборку все сегменты маршрута.

                var pathsObjects = ymaps.geoQuery(res.getPaths()),

                    edges = [];

                    

                // Переберем все сегменты и разобьем их на отрезки.

                pathsObjects.each(function (path) {

                    var coordinates = path.geometry.getCoordinates();

                    for (var i = 1, l = coordinates.length; i < l; i++) {

                        edges.push({

                            type: 'LineString',

                            coordinates: [coordinates[i], coordinates[i - 1]]

                        });

                    }

                });

                

                // Создадим новую выборку, содержащую:

                // - отрезки, описываюшие маршрут;

                // - начальную и конечную точки;

                // - промежуточные точки.

                var routeObjects = ymaps.geoQuery(edges)

                        .add(res.getWayPoints())

                        .add(res.getViaPoints())

                        .setOptions('strokeWidth', 3)

                        .addToMap(myMap),

                    // Найдем все объекты, попадающие внутрь МКАД.

                    objectsInMoscow = routeObjects.searchInside(moscowPolygon),

                    // Найдем объекты, пересекающие МКАД.

                    boundaryObjects = routeObjects.searchIntersect(moscowPolygon);

                // Раскрасим в разные цвета объекты внутри, снаружи и пересекающие МКАД.

                boundaryObjects.setOptions({

                    strokeColor: '#06ff00',

                    preset: 'twirl#greenIcon'

                });

                objectsInMoscow.setOptions({

                    strokeColor: '#ff0005',

                    preset: 'twirl#redIcon'

                });

                // Объекты за пределами МКАД получим исключением полученных выборок из

                // исходной.

                routeObjects.remove(objectsInMoscow).remove(boundaryObjects).setOptions({

                    strokeColor: '#0010ff',

                    preset: 'twirl#blueIcon'

                });

            }

        );

    }

    

    $.ajax({

        url: 'examples/maps/ru/route_inside_polygon/moscow.json',

        dataType: 'json',

        success: $.proxy(onPolygonLoad)

    });

}

 

</script>

</head>

 

<style>

    body {

        font-family: "Arial";

        font-size: 11pt;

    }

</style>

<body>

    <p>Маршрут внутри МКАД помечен красным, снаружи - синим</p>

    <div id="map" style="width:400px; height:300px"></div>

</body>

 

</html>

 

4 комментария
Подписаться на комментарии к посту

 

   $.ajax({

        url: 'examples/maps/ru/route_inside_polygon/moscow.json',

Это надо забирать со своего домена.

 

а где взять файл moscow.json ??? Понял, что это многоугольник.

Как его можно быстро нарисоват, снять координаты и сохранить в json???