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