RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 584828
Accepted
rololo
rololo
Asked:2020-10-31 12:10:57 +0000 UTC2020-10-31 12:10:57 +0000 UTC 2020-10-31 12:10:57 +0000 UTC

将 OSM 多边形拆分为 Yandex 的单独多边形。卡丁车

  • 772

在 Yandex. Kart 询问是否可以使用 Yandex API 绘制从 nominatim.openstreetmap.org 中提取的 GeoJSON 多面体。卡丁车。他们说你需要将多边形分解成单独的多边形,然后绘制。

我究竟做错了什么?这是我试图完成的@tutankhamun 的代码:

ymaps.ready(function() {
    // 0. Создаем карту, например так:
    var map,
        regionName = "Московская область, Одинцовский район",
        center = [37.6174976, 55.6506828],
        zoom = 7;

    map = new ymaps.Map('karta', {
        center: center,
        zoom: zoom,
        controls: []
    });
    // 1. Запрашиваем через геокодер район (у Яндекса этой возможности пока нет, придется пользоваться OSM)
    var url = "https://nominatim.openstreetmap.org/search";
    var jsondata = $.getJSON(url, {
            q: regionName,
            format: "json",
            polygon_geojson: 1
        })
        .then(function(data) {
            $.each(data, function(ix, place) {
                // 2. Разбиваем мультиполигон на полигоны.
                if ("MultiPolygon" == place.geojson.type) {
                    place.geojson.coordinates.forEach(function(coords) {
                        var feat = {
                            'type': 'Polygon',
                            'coordinates': coords
                        };
                        var p = new ymaps.Polygon(feat.coordinates, {
                            hintContent: "Одинцовский район"
                        }, {
                            fillColor: '#6699ff',
                            // Делаем полигон прозрачным для событий карты.
                            interactivityModel: 'default#transparent',
                            strokeWidth: 2,
                            opacity: 0.3
                        });
                        console.log(JSON.stringify(feat));
                    });
                } else if ("relation" == place.osm_type) {
                    // 3. Создаем полигон с нужными координатами
                    var p = new ymaps.Polygon(place.geojson.coordinates, {
                        hintContent: "Одинцовский район"
                    }, {
                        fillColor: '#6699ff',
                        // Делаем полигон прозрачным для событий карты.
                        interactivityModel: 'default#transparent',
                        strokeWidth: 2,
                        opacity: 0.3
                    });
                    // 4. Добавляем полигон(ы) на карту
                    map.geoObjects.add(p);
                    map.setBounds(map.geoObjects.getBounds())
                }
            });
        }, function(err) {
            console.log(err);
        });
});
yandex-maps-api
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    rololo
    2020-11-01T19:55:11Z2020-11-01T19:55:11Z

    发现我的错误。在第二段中,我忘记开始向地图添加多边形。以下是使用 OpenStreetMap 在 Yandex.Maps 上绘制区域和地区(多边形和多边形)的完整工作代码:

    <div id="karta" class="karta-def"></div>
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&coordorder=longlat" type="text/javascript"></script>
    <script>
    ymaps.ready(function() {
        // 0. Создаем карту
        var map,
            regionName = "Московская область, Одинцовский район",
            center = [37.6174976, 55.6506828],
            zoom = 7;
    
        map = new ymaps.Map('karta', {
            center: center,
            zoom: zoom,
            controls: []
        });
        // 1. Запрашиваем через геокодер район (у Яндекса этой возможности пока нет, придется пользоваться OSM)
        var url = "https://nominatim.openstreetmap.org/search";
        var jsondata = $.getJSON(url, {
                q: regionName,
                format: "json",
                polygon_geojson: 1
            })
            .then(function(data) {
                $.each(data, function(ix, place) {
                    // 2. Если район состоит из нескольких полигонов - разбиваем мультиполигон на отдельные полигоны (API Яндекс.Карт не умеет рисовать мультиполигоны GeoJSON).
                    if ("MultiPolygon" == place.geojson.type) {
                        place.geojson.coordinates.forEach(function(coords) {
                            var feat = {
                                'type': 'Polygon',
                                'coordinates': coords
                            };
                            var p = new ymaps.Polygon(feat.coordinates, {
                                hintContent: regionName
                            }, {
                                fillColor: '#6699ff',
                                interactivityModel: 'default#transparent',
                                strokeWidth: 2,
                                opacity: 0.3
                            });
                            // 2.1 Добавляем полигоны на карту
                            map.geoObjects.add(p);
                            map.setBounds(map.geoObjects.getBounds())
                        });
                    // 3. В другом случае создаем полигон с нужными координатами
                    } else if ("relation" == place.osm_type) {
                        var p = new ymaps.Polygon(place.geojson.coordinates, {
                            hintContent: regionName
                        }, {
                            fillColor: '#6699ff',
                            interactivityModel: 'default#transparent',
                            strokeWidth: 2,
                            opacity: 0.3
                        });
                        // 3.1 Добавляем полигон на карту
                        map.geoObjects.add(p);
                        map.setBounds(map.geoObjects.getBounds())
                    }
                });
            }, function(err) {
                console.log(err);
            });
    });
    </script>
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5