---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.1
alternate:
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/en/v2-1/examples/cases/route_inside_polygon.md
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/examples/cases/route_inside_polygon.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/llms.txt

# Пересечение маршрута с многоугольником на примере МКАД

<iframe id="LIVE-EXAMPLE" style="width:100%;height: 400px;border-radius: 8px;border: 1px solid rgba(92, 94, 102, 0.14);" frameBorder="0" src="https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/examples/2/out/s3-cases/ru/route_inside_polygon/index.html" allow="fullscreen"></iframe>

<a target="_blank" rel="noopener noreferrer" style="display: inline-block;margin-top: 10px;cursor: pointer;border-radius: 4px;padding: 9px 12px;background: #151515;color: white;text-decoration: none;font-weight: 500" href="https://codesandbox.io/p/sandbox/syn82q?file=index.html">Open in CodeSandbox</a>

<div id="references">
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ready">ready</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Map">Map</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Polygon">Polygon</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/route">route</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/geoQuery">geoQuery</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoQueryResult">GeoQueryResult</a>
</div>
<p>
    Часто возникает задача проложить маршрут между заданными точками, а затем проанализировать, в какие области или города попадают сегменты этого маршрута. В данном примере по заранее подготовленным данным создается многоугольник, описывающий МКАД. После получения маршрута делается проверка на попадание его сегментов в этот многоугольник с помощью метода <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoQueryResult#searchInside">searchInside</a>.
</p>
<p>
    С помощью объекта <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoQueryResult">GeoQueryResult</a> можно задавать опции или данные сразу группе геообъектов. Здесь показано, как сегменты маршрута, лежащие внутри и снаружи кольцевой автодороги, раскрашиваются в разные цвета.
</p>

{% list tabs %}

-   index.html

    ```html
    <!DOCTYPE html>

    <html>
        <head>
            <title>
                Пересечение маршрута с многоугольником на примере МКАД
            </title>
            <meta
                http-equiv="Content-Type"
                content="text/html; charset=utf-8"
            />
            <!--
            Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
            Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
        -->
            
            
            
            
        </head>
        <body>
            <p>Маршрут внутри МКАД помечен красным, снаружи - синим</p>
            <div id="map"></div>
        </body>
    </html>
    ```

-   route_inside_polygon.js

    ```js
    ymaps.ready(init);

    function init() {
        var myMap = new ymaps.Map(
                "map",
                {
                    center: [55.73, 37.75],
                    zoom: 9,
                },
                {
                    searchControlProvider: "yandex#search",
                }
            ),
            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.9761],
                ])
                .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: "islands#greenIcon",
                    });
                    objectsInMoscow.setOptions({
                        strokeColor: "#ff0005",
                        preset: "islands#redIcon",
                    });
                    // Объекты за пределами МКАД получим исключением полученных выборок из
                    // исходной.
                    routeObjects
                        .remove(objectsInMoscow)
                        .remove(boundaryObjects)
                        .setOptions({
                            strokeColor: "#0010ff",
                            preset: "islands#blueIcon",
                        });
                });
        }

        $.ajax({
            url: "moscow.json",
            dataType: "json",
            success: onPolygonLoad,
        });
    }
    ```

{% endlist %}
