在“如何在 Yandex 地图上显示城市区域? ”问题的后续部分,并非所有区域都以这种方式显示。例如,该区域未显示在地图上:
<script>
ymaps.ready(function() {
// 0. Создаем карту, например так:
var map,
regionName = "Bryansk Oblast",
center = [52.8873315,33.415853],
zoom = 5;
map = new ymaps.Map('reviewsmap', {
center: center,
zoom: zoom,
controls: []
});
// 1. Запрашиваем через геокодер район (у Яндекса этой возможности пока нет, придется пользоваться OSM)
var url = "http://nominatim.openstreetmap.org/search";
$.getJSON(url, {q: regionName, format: "json", polygon_geojson: 1})
.then(function (data) {
$.each(data, function(ix, place) {
if ("relation" == place.osm_type) {
// 2. Создаем полигон с нужными координатами
var p = new ymaps.Polygon(place.geojson.coordinates);
p.options.set('fillColor', 'rgba(255, 0, 0, 0.4)');
p.options.set('strokeColor', '#F8DA19');
// 3. Добавляем полигон на карту
map.geoObjects.add(p);
}
});
}, function (err) {
console.log(err);
});
});
</script>
我可以举几个这样的例子。它取决于什么尚不清楚。
我以 areas 为例
Volgograd Oblast
,Bryansk Oblast
查看了 的响应中的数据http://nominatim.openstreetmap.org/search
。要绘制一个区域,您可以为地图提供一个从 中获取的点数组
geojson.coordinates
。第一个区域
geojson.type == "Polygon"
里面有geojson.coordinates
一个数组。该区域通常绘制在地图上。“布良斯克州”
geojson.type == "MultiPolygon"
内部有geojson.coordinates
两个阵列。该区域未绘制在地图上。我不熟悉openstreetmap api,但是在这里我们看到搜索既可以返回一个渲染区域的坐标,也可以返回多个渲染区域的坐标。并且地图只需要给出其中一个(或全部,但依次)的坐标。
因此,我建议您进行编辑以检查
type
是否MultiPolygon
是 - 仅绘制第一个点数组:再一次:我不熟悉api,也不知道布良斯克的第二个地区是什么。我把它们都画在了地图上,没有发现任何区别,这就是为什么我建议只画第一个。无论如何,如果您研究了 api docks 并了解您需要绘制所有区域,那么这很容易做到。现在你知道在哪里挖了。