Клуб API Карт

Получить координаты конкретного региона в виде массива

AngelOKES
7 июля 2015, 08:14

Есть пример в песочнице, но мне всё равно непонятно как мне вернуть этот массив, я уже нашёл решение как мне показывать только выбранный участок карты, но вот красивее его обрисовать не получается, нужен более точный список координат, вот пример моего кода, подскажите, только кодом, а не ссылкой как в песочнице

ymaps.ready(init);
function init () {
    myMap = new ymaps.Map('map', {center: [52.5,56], zoom: 7.3,
        behaviors: ['default', 'scrollZoom']}
        , {searchControlProvider: 'yandex#search'}
        );
          myMap.controls.add("mapTools");             
          myMap.controls.add("zoomControl");         
          myMap.controls.add("typeSelector");         
var mkad = [
    [0, 0], [80, 0], [80, 170], [0, 170], [0, 0],
    [51.7838,50.7771], [54.3761,52.5349], [52.3795,55.7209], [52.6342,56.0285],
    [51.5926,57.1491], [51.8519,57.6984], [51.7838,58.5773], [52.4600,59.2804],
    [52.3794,60.0934], [51.8791,60.0275], [51.2767,61.6095], [50.7918,61.4557],
    [50.4984,59.5221], [51.0972,58.2916], [50.9864,56.5118], [50.5685,55.6988],
    [50.9726,54.7100], [50.5405,54.5123], [51.3731,53.5455], [51.7838,50.7771]],
mkadPolygon = new ymaps.Polygon([mkad], {}, {fillColor: '#ffffff', opacity: 1});
var mkad2 = [ [50.4708, 50.7670], [54.4278, 50.7670], [54.4278, 61.7972], [50.4708, 61.7972], [50.4708, 50.7670]],
mkadPolygon2 = new ymaps.Polygon([mkad2], {}, {fillColor: '#ffffff', opacity: .0});
myMap.geoObjects.add(mkadPolygon);
myMap.geoObjects.add(mkadPolygon2);
myMap.action.setCorrection(function (tick) {
    var projection = myMap.options.get('projection'),
        tickCenter = projection.fromGlobalPixels(tick.globalPixelCenter, tick.zoom);
    if (!mkadPolygon2.geometry.contains(tickCenter)) {
        tick.globalPixelCenter = projection.toGlobalPixels(
            mkadPolygon2.geometry.getClosest(tickCenter).position,
            tick.zoom
        );
        tick.duration = 0;}
    return tick;});

 

Мне бы вот переменную mkad дополнить бы более точными координатами, приходиться рисовать два многоугольника, чтобы получить то что я хочу, но вот второй многоугольник должен быть более точным границам области, заранее спасибо!

16 комментариев

Точными координатами чего?

Ну мне например нужны координаты границ Оренбургской области и чем их больше будет, тем лучше, в песочнице есть пример работы с регионами и что можно достать координаты любого региона, код моего региона osmId = "77669'. Я не силен в скриптах и не знаю как воспользоваться информацией, поэтому и прошу помочь

Модуль регионов не позволяет сохранять координаты регионов отдельно от себя и своей атрибуции (Yandex+OSM). Координаты, конечно, всегда можно взять из someObject.geometry.getCoordinates, но это не совсем правильно.

А для выборки конкретного региона вы можете пройтись циклом по ответу регионов (.geoObjects), или модулем geoQuery, чтобы найти в ответе только osmId, и только его добавить на карту.

Я вообще "злой полицейский" - готовые скрипты не даю, это как накормить рыбой и научить ловить ее.

Ну хоть маленький кусок кода, я можно сказать совсем ноль в этом, пытаюсь сделать что-то связанное с нанотехнологиями, но обычным топором, если вы видели мой кусок кода, то думаю вы могли бы его сделать в сто раз лучше и производительней

Заметим - я вам уже ДВА решения дал, но вы их или не заметили, или не поняли. С чем и борюсь.

Даю еще раз - http://jsfiddle.net/k0oa73j8/7/

Вот за это спасибо! Хоть немного стал понимать что и как

И я так понимаю наверное проще самому ручками сделать пару сотен измерений координат и записать их вручную, чем пытаться найти какое-то решение

А это зависит от задачи, которой я не знаю.

Я бы изначально хотел бы чтобы отображалась только область, а вся остальная карта была бы закрыта, ну а дальше уже навигация по самой области и по входящим в неё районам + очень бы хоетлось научиться запретить уменьшать zoom карты

Уменьшать зум карты == поставить карте опцию minZoom:скольконадо.

А вот с "закрыть" все остальное (наверное как тут - http://postindex.esosedi.ru/56-orenburgskaya/index.html ) будут проблемы - в текущей версии это "так просто" сделать неполучиться.

function init () {
    var map = new ymaps.Map('map', {center: [52.5,56], zoom: 7.3, minZoom: 7});

        ymaps.regions.load('KZ', {quality: 2}).then(function (res) {
            var regions1 = res.geoObjects;
            regions1.each(function (reg) {reg.options.set('fillColor', '#e6e6e6')});
            map.geoObjects.add(regions1);

        ymaps.regions.load('RU', {quality: 2}).then(function (res) {
            var regions2 = res.geoObjects;
            regions2.each(function (reg) {
        if (reg.properties.get('osmId') != 77669) {reg.options.set('fillColor', '#e6e6e6')}});
            regions2.each(function (reg) {
        if (reg.properties.get('osmId') == 77669) {reg.options.set({fillColor: '#ffffff', opacity: .0})}});
            map.geoObjects.add(regions2);
     });
     });
}

 

Параметр MinZoom поставил, но он не работает, ну то есть ошибок нет, но зум делает любой. И по поводу границ регионов, можно ли их закрасить по другому?

1. zoom:7.3 - "дробные" зумы НЕ РАБОТАЮТ (пока явно не прикажешь)

2. minZoom это ОПЦИЯ. map.options.set, или третий параметер конструктора

3. Обводка == strokeColor/Style/Width

Блин с обводкой я разобрался, а вот с зумом никак, уже всё перепробовал, весь инет перерыл, но ничего не получается

Угу, об этом я и говорил.

http://jsfiddle.net/k0oa73j8/8/

new ymaps.Map('map', {center: [52.5,56], zoom: 3},{minZoom:5});

Кстати как раз нашёл решение, но ваше решение лучше, вот моё:

        myMap.options.set({
        minZoom: 7 })

Кстати дробный зум у меня работает, он на панели не работает, а задать по умолчанию можно... zoom: 7.3

 

Как я Вам благодарен, столько вопросов сегодня успел решить!!!! Огромное Вам спасибо!!!

Дробный зум будет просто округлен :)