Клуб API Карт

январь 2017
Перемещение Placemark на другие координаты(Плавно)
em@statuscom.ru
2 января 2017, 20:36

Всем привет, возникла проблема. Прочитал я тут множество постов про перемещение маркера по заданым координатам. Суть такова:

Имеется маркер :

    var Gea;
    myMap.geoObjects.add(Gea = new ymaps.Placemark([9.76170, -9.96540], {
           balloonContent: 'цвет <strong>воды пляжа бонди</strong>'
    },{
        preset: 'islands#blackCircleDotIconWithCaption',
        id:9999
    }));

По клику в произвольное место на карту, этот маркер должен плавно принять другие координаты. То-есть хочется реализовать плавное  движение.

var coords = e.get('coords');
        CoordLng = coords[0].toPrecision(6);
        CoordLat = coords[1].toPrecision(

Gea.geometry.setCoordinates([CoordLng , CoordLat ]);

Заранее спасибо.

2 комментария
Placemark,Animade,плавное  движение,setCoordinates
нужна возмездная помощь в реализации задачи
Сергей Катков
4 января 2017, 10:19

Есть задача:

Надо показывать в какую сторону едет автомобиль (в других системах показывается треугольник с направлением). Если он стоит, то значок остановки. 

Координаты передаются на карту из стороннего приложения.

Кому интересно, пишите на почту sv_katkov@mail.ru

1 комментарий
Задать толщину линии (используется LoadingObjectManager)
Андрей
5 января 2017, 04:00

Создал карту. Загружаю данные в неё так:

        myMap = new ymaps.Map("map", {
            center: lastPosition(),
            zoom: 7,
            controls: ["zoomControl", "fullscreenControl"]
        });


        var objectManager = new ymaps.LoadingObjectManager(apiBase + '/tile?bbox=%b', {
            clusterHasBalloon: false,
            geoObjectOpenBalloonOnClick: false,
            splitRequests: true
        });

        myMap.geoObjects.add(objectManager);

В ответе сервера отправляются кроме точек ещё и линии.

my_callback({"features":[{"type":"Feature","id":28,"geometry":{"type":"LineString","coordinates":[[54.90854,38.078039],......,[54.887524,37.943616]]},"properties":{}}]);

Есть ли способ задать толщину линии?

1 комментарий
Список geocode(request[, OPTIONS])
car3g
6 января 2017, 01:11
Доброе.

Цель:  Получив координаты по адресу фирмы отрисовать метку с названием фирмы(название получаю в массиве).

В доке https://tech.yandex../#geocode-param-options
есть  опции для геокодирования могу ли я добавить в options вот тут:
{util.Promise} geocode(request[, options])

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

И если можно ткните в список всех возможных опций  geocode

1 комментарий
Где хранятся координаты объектов, нарисованных polygonEditor
nadya-ssh
6 января 2017, 16:37

Прошу помощи! Создаю, как в примере, полигон. myPolygon.editor.startDrawing();

На карте включается режим редактирования. Рисую полигон. А как теперь до него добраться, в каком свойстве хрантся его координаты?

5 комментариев
Как в редакторе полигона вызвать диалог свойств?
nadya-ssh
7 января 2017, 09:19

Чтобы удобно было менять цвет заливки и обводки. 

В Моих Картах такой здоровский няшный диалог. Жаль что, он через API недоступен...

В документации не нашел этого диалога, видимо его придется самому реализовывать. 

1 комментарий
Добавить кнопку
q-44
7 января 2017, 11:50

Добрый день,

не могу добавить обычную кнопку из  примера https://tech.yandex.ru/maps/jsbox/2.1/button

в пример https://tech.yandex.ru/maps/jsbox/2.1/object_manager

вроде требуется добавить пару строк, а не получается.

4 комментария
Как считать координаты тайлов?
Андрей
7 января 2017, 18:52

Я пытаюсь сделать http-метод, выдающий данные для активных областей. Вот как тут https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/hotspots/hotspot-area-docpage/ . Всё моё приложение работает в координатах (широта/долгота), и мне нужно перевести их в номер тайла в соответствующем масштабе.

Я нигде не нашёл алгоритма перевода координат в номера тайлов и позицию на тайле. Вот тут написано только то, как карта режется на тайлы https://tech.yandex.ru/maps/doc/theory/concepts/coordinates-docpage/ , но не дано ничего более конкретного.

Я попробовал посчитать наиболее простым способом (например, для Москвы 55,546875 сш - это (90-55,546875)=34,453125 градусов от полюса, от верха карты. Если взять z=8, то есть 256 тайлов, и 34,453125÷180×256 = 49 - номер тайла по вертикали). Но оказалось, что реальный номер тайла - 80. Кажется, это связано с проекцией. Нужно проецировать точки на цилиндр и счиать тайлы уже на нём? Или как-то ещё?

7 комментариев
Нарисовать полигон и добавить панель
Станислав Рябцев
7 января 2017, 19:23

Добрый день. Нужно сделать вот такое http://joxi.ru/brRlDd0SJ70wB2 и без понятия как реализовать такую панель при нажатии на объект. Полигоны нарисовать смог, это просто, в яндекс песочнице есть пример балун панель https://tech.yandex.ru/maps/jsbox/2.1/placemark_balloon но не полигон, кто может подсказать как реализовать такое ?

3 комментария
Установка ссылки яндекс карт в Run.GPS Trainer (XML)
podvig2
9 января 2017, 01:49

Здравствуйте уважаемые кодостроители! 

Прошу мне помочь в добавлении yandex-карт (спутника или гибрида) в нижеприведённый код файла MAPS.XML,
что от gps-программы Run.GPS Trainer (для Android). 
Сам файл несёт в себе список слоёв (карт) доступных для загрузки в программе. 
Кто-то удачно добавил в него гибрид гугла и т.п, но "по-яндексу" я не первые сутки неудачно над
вариациями кода сижу. :(
Видно, что для каждого ресурса в коде прописаны параметры загрузки осей, директории хранения тайлов
карты, формат изображений для сохранения, а также минимальный Zoom при загрузке выбранной карты.

Вопрос: Какой мне код добавить в этот xml-файл и какие необходимые параметры подставить для
отображения yandex-карты (спутника или гибрида)?

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mapSources>
<mapSource>
<name>Google Hybrid</name><dirName>GoogleHyb</dirName><copyright>Google</copyright>
<minZoom>6</minZoom><maxZoom>18</maxZoom>
<urlPattern>http://mt1.google.com/vt/lyrs=s,m&amp;hl=iw&amp;x=$x&amp;y=$y&amp;z=$z</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
<mapSource>
<name>IGN Sat</name><dirName>Ign</dirName><copyright>IGN</copyright>
<minZoom>6</minZoom><maxZoom>17</maxZoom>
<urlPattern>http://www.ign.es/wmts/pnoa-ma?request=getTile&amp;layer=OI.OrthoimageCoverage&amp;TileMatrixSet=GoogleMapsCompatible&amp;TileMatrix=$z&amp;TileCol=$x&amp;TileRow=$y&amp;format=image/jpeg</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
<mapSource>
<name>IGN Raster</name><dirName>IgnRaster</dirName><copyright>IGN</copyright>
<minZoom>6</minZoom><maxZoom>16</maxZoom>
<urlPattern>http://www.ign.es/wmts/mapa-raster?request=getTile&amp;layer=MTN&amp;TileMatrixSet=GoogleMapsCompatible&amp;TileMatrix=$z&amp;TileCol=$x&amp;TileRow=$y&amp;format=image/jpeg</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
<mapSource>
<name>OpenCycleMap</name><dirName>cycleMap</dirName><copyright>OpenCycleMap.org</copyright>
<minZoom>6</minZoom><maxZoom>17</maxZoom>
<urlPattern>http://tile.opencyclemap.org/cycle/$z/$x/$y.png</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
<mapSource>
<name>OpenTopoMap EU</name><dirName>openTopoMap</dirName><copyright>OSM/OpenTopoMap.org</copyright>
<minZoom>6</minZoom><maxZoom>17</maxZoom>
<urlPattern>http://opentopomap.org/tiles/$z/$x/$y.png</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
<mapSource>
<name>OpenStreetMap</name><dirName>osm</dirName><copyright>OpenStreetMap.org</copyright>
<minZoom>6</minZoom><maxZoom>17</maxZoom>
<urlPattern>http://tile.openstreetmap.org/$z/$x/$y.png</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
<mapSource>
<name>Google Maps</name><dirName>GoogleMaps</dirName><copyright>Google</copyright>
<minZoom>6</minZoom><maxZoom>17</maxZoom>
<urlPattern>http://mt0.google.cn/vt/lyrs=m@121&amp;hl=iw&amp;x=$x&amp;y=$y&amp;z=$z</urlPattern>
<hillShadeUrlPattern/>
</mapSource>
</mapSources>

*********************************************
Я добавлял "по аналогу" :) следующий код:

<name>Satellite (Yandex.Maps)</name>
<dirName>maps.yandex.com.Hybrid</dirName><copyright>Yandex</copyright>
<minZoom>7</minZoom><maxZoom>18</maxZoom>
<urlPattern>http://maps.yandex.ru/export/usermaps/HNQ5uTUgbjy6L0dW2uReUjSoXb1Ad7jw/</urlPattern>
<hillShadeUrlPattern/>
</mapSource>

Ошибок в отличии от подставления источника "sat0." и т.п нет, но саму карту не грузит (белое поле).

В программе сайта sasgis (SAS.Планета) запускается yandex-спутник при след. 2-х файлах:


//-Файл Params.txt-//

[PARAMS]
pnum=5
GUID={5E04039A-331E-4D2C-B051-B00F8871BB39}
name_ru=Спутник (Яндекс.Карты)
name=Satellite (Yandex.Maps)
name_uk=Супутник (Яндекс.Карты)
ParentSubMenu_ru=Яндекс
ParentSubMenu=Yandex
ParentSubMenu_uk=Яндекс
DefURLBase=http://sat01.maps.yandex.net/tiles?l=sat&x=
projection=2
sradiusa=6378137
sradiusb=6356752
NameInCache=yasat
Ext=.jpg
DefHotKey=89
ContentType=image/jpeg

//-Файл GetUrlScripts.txt-//

var
  sat: string;
begin 
 sat := RegExprReplaceMatchSubStr(GetURLBase, 'sat(\d+)\.', 'sat0'+inttostr(1 + Random(3)) + '.' );
 ResultURL := sat +inttostr(GetX)+'&y='+inttostr(GetY)+'&z='+inttostr(GetZ-1)+'&g='+copy('Gagarin', 1,
Random(8)); 
end.

Но это в этой проге... 

Помогите пожалуйста.

1 комментарий
Неполнота документации?
tamirovru
9 января 2017, 02:22

Здравствуйте.
Вот, разбираюсь с созданием шаблонов.
Смотрю пример из песочницы
https://tech.yandex.ru/maps/jsbox/2.1/balloon_autopan
Что-то не могу нигде найти документации по методам типа onSublayoutSizeChange, и выражения типа "_isElement: function (element).." просто смущают, разве имена, начинающиеся с подчеркивания вообще трогать пользователям можно? Где я что не дочитал в документации?

2 комментария
Изменение координат метки поиском
single1709
9 января 2017, 14:05

Добрый день,

Подскажите пожалуйста.

Имеется метка на карте. Карта создается с параметром  

searchControlProvider: 'yandex#search'

Необходимо при использовании панели поиска, чтобы не появлялась новая метка (еще одна), а изменялись координаты старой. Как это реализовать? Как обработать события стандартного поиска?

4 комментария
Не работают активные области
Андрей
9 января 2017, 23:46

Есть вот такой  тайл

https://vec03.maps.yandex.net/tiles?l=map&v=16.12.26-0&x=618&y=321&z=10&scale=1&lang=tr_TR

Есть слой активных областей (видно, что cursor=help)

        var tileUrlTemplate = apiBase + '/track-points-to-click?x=%x&y=%y&z=%z&id=' + id;
        var objSource = new ymaps.hotspot.ObjectSource(tileUrlTemplate);
        var hotspotLayer = new ymaps.hotspot.Layer(objSource, {
            hasBalloon: false,
            cursor: 'help',
            zIndex: 650
        });
        myMap.layers.add(hotspotLayer);

Есть ручка localhost:7007/track-points-to-click?x=618&y=321&z=10&id=26&callback=id_148380783842367394070 . Она возвращает (endline добавлены для наглядности)

id_148380783842367394070(
{
  "data": {
    "features": [
      {
        "type": "Feature",
        "properties": {
          "HotspotMetaData": {
            "id": 10,
            "RenderedGeometry": {
              "type": "Polygon",
              "coordinates": [
                [
                  [
                    225,
                    193
                  ],
                  [
                    255,
                    193
                  ],
                  [
                    255,
                    223
                  ],
                  [
                    225,
                    223
                  ],
                  [
                    225,
                    193
                  ]
                ]
              ]
            }
          }
        }
      },

      {
        "type": "Feature",
        "properties": {
          "HotspotMetaData": {
            "id": 460,
            "RenderedGeometry": {
              "type": "Polygon",
              "coordinates": [
                [
                  [
                    119,
                    25
                  ],
                  [
                    149,
                    25
                  ],
                  [
                    149,
                    55
                  ],
                  [
                    119,
                    55
                  ],
                  [
                    119,
                    25
                  ]
                ]
              ]
            }
          }
        }
      }
    ],
    "type": "FeatureCollection"
  }
}
);

На заданном тайле карты в нужном масштабе курсор нигде не меняется на help. То ли области не появились, то ли не работают. Добавил event click к слою - тоже не срабатывает. В консоли браузера ошибок нет. Все ресурсы подгружаются без ошибок.

Как можно диагностировать проблему? Есть способы увидеть для отладки активные области, кроме как добавить слой изображений? Можно ли вообще использовать localhost для загрузки активных областей (понятно, что только для разработки)?

1 комментарий
Возможность реализации серверной части LoadingObjectManager или RemoteObjectManager на PHP
Александр Копосов
10 января 2017, 15:19

Приветствую всех! 

Столкнулся с проблемой реализации серверной части LoadingObjectManager или RemoteObjectManager.

Общая картина: на сайте есть карта; на неё из базы загружаются десятки тысяч меток; используется ObjectManager и PieChartClusterer. Алгоритм такой: Пользователь задаёт фильтр, какие метки ему нужны; из базы загружаются соответствующие данные и формируется JSON; этот JSON скармливается ObjectManager'у; ObjectManager загружается на карту.

И всё бы хорошо, но первоначальная загрузка огромного числа меток занимает 100500 лет (т.е. загрузка довольно долгая).

Как я понимаю, лучше бы использовать LoadingObjectManager или RemoteObjectManager, которые бы позволяли подгружать метки, так скажем, по мере их появляемости в зоне видимости, а не сразу все, но отображать видимые (как делает ObjectManager). Про активные области я пока даже не заикаюсь.

Собственно, сама проблема:

Я читал документацию по "Работе с большим числом объектов", а также статью на Хабре и видел там Проект на гитхабе с примером реализации серверной части для RemoteObjectManager.

Может быть (скорее всего) я чего-то не так понял (ну или вообще не понял), но возможна вообще серверная сторона не на Node.js (как в примере), а на PHP?

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

2 комментария
RemoteObjectManager,LoadingObjectManager,objectManager,множество объектов,PHP
Более 1000 точек вызывают ошибку Яндекс.Карт
Имя
10 января 2017, 16:35

https://jsfiddle.net/frontenddeveloping/936drznz/

Выскакивают ошибки:

Uncaught TypeError: this.builders[s] is not a function
Uncaught TypeError: Cannot read property 'setPosition' of null

Ничего не понимаю. Это для 2000 точек. Если количество уменьшить, то оно отработает как надо.

2 комментария
clusterer,cluster
Кастомизация вершин редактора
Швалёв Дмитрий
10 января 2017, 16:45

Очень хочется разобраться с кастомизацией вершин редактора полигона. В документации geometryEditor.Polygon-docpage описаны параметры options.edgeLayout и options.vertexLayout, которые принимают класс макета.

Есть 2 похожие темы:
https://yandex.ru/blog/mapsapi/46436https://yandex.ru/blog/mapsapi/39780, но они не дают ответа, точнее не получается повторить решения описанные там.

Пробовал передавать созданный templateLayoutFactory:

  var myPolyline = new ymaps.Polyline([
    [55.80, 37.50],
    [55.80, 37.40],
    [55.70, 37.50],
    [55.70, 37.40]
  ], {}, {
    strokeColor: "#00000088",
    strokeWidth: 4,
    editorVertexLayout: ymaps.templateLayoutFactory.createClass('<div class="map-editor-vertex"></div>'),
    editorEdgeLayout: ymaps.templateLayoutFactory.createClass('<div class="map-editor-edge"></div>'),
  });

 или изменять параметр  options:
 

myPolyline.editor.options.set('edgeLayout', ymaps.templateLayoutFactory.createClass('<div class="map-editor-vertex"></div>'));

myPolyline.editor.options.set('vertexLayout', ymaps.templateLayoutFactory.createClass('<div class="map-editor-vertex"></div>'));

Но никакой реакции. Версия API 2.1

Наброски в песочнице: https://jsfiddle.net/dmitry_shvalyov/jfoehhtL/7/

4 комментария
редактор геометрии,geometryEditor.Polygon,editor
Скрытие маркеров из кластера
single1709
11 января 2017, 10:39

Добрый день,

Помогите пожалуйста разобраться.

Необходимо скрывать маркеры не попадающие в круг, а попадающие выводить на карту в кластере.

Я не могу понять как совместить скрытие и кластеризацию.

Если закомментировать строку: "myMap.geoObjects.add(clusterer);", то маркеры попадающие в круг появляются, а не попадающие нет (как и должно быть). Но мне необходимо, чтобы отображаемые маркеры были в кластере.

var myMap = new ymaps.Map("map", {
            center: [xx, yy],
            zoom: 10,
             behaviors: ['default', 'scrollZoom'],
            controls:[]
        });
        
 var  circle = new ymaps.Circle([[55.43, 37.7], 30000], null, 
     { draggable: false,
    fillColor: "#DB709377",
fillOpacity:0.5,
strokeColor: "#990066",
strokeOpacity: 0.5,    }
);
        
        
        clusterer = new ymaps.Clusterer({
            preset: 'islands#invertedVioletClusterIcons',
            groupByCoordinates: false,
            clusterDisableClickZoom: true,
            clusterHideIconOnBalloonOpen: false,
            geoObjectHideIconOnBalloonOpen: false
        });

getPointData = function (index) {
            return {
                balloonContentBody: 'балун <strong>метки ' + index + '</strong>',
                clusterCaption: 'метка <strong>' + index + '</strong>'
            };
        };
        
        
        
        getPointOptions = function () {
            return {
                preset: 'islands#violetIcon'
            };
        },
        points = [
            [55.831903,37.411961], [55.763338,37.565466], [55.763338,37.565466], [55.744522,37.616378], [55.780898,37.642889], [55.793559,37.435983], [55.800584,37.675638], [55.716733,37.589988], [55.775724,37.560840], [55.822144,37.433781], [55.874170,37.669838], [55.716770,37.482338], [55.780850,37.750210], [55.810906,37.654142], [55.865386,37.713329], [55.847121,37.525797], [55.778655,37.710743], [55.623415,37.717934], [55.863193,37.737000], [55.866770,37.760113], [55.698261,37.730838], [55.633800,37.564769], [55.639996,37.539400], [55.690230,37.405853], [55.775970,37.512900], [55.775777,37.442180], [55.811814,37.440448], [55.751841,37.404853], [55.627303,37.728976], [55.816515,37.597163], [55.664352,37.689397], [55.679195,37.600961], [55.673873,37.658425], [55.681006,37.605126], [55.876327,37.431744], [55.843363,37.778445], [55.875445,37.549348], [55.662903,37.702087], [55.746099,37.434113], [55.838660,37.712326], [55.774838,37.415725], [55.871539,37.630223], [55.657037,37.571271], [55.691046,37.711026], [55.803972,37.659610], [55.616448,37.452759], [55.781329,37.442781], [55.844708,37.748870], [55.723123,37.406067], [55.858585,37.484980]
        ],
        geoObjects = [];
        for(var i = 0, len = points.length; i < len; i++) {
        geoObjects[i] = new ymaps.Placemark(points[i], getPointData(i), getPointOptions());
    };

clusterer.add(geoObjects);
    myMap.geoObjects.add(clusterer);

result = ymaps.geoQuery(geoObjects);

result
   
        .addToMap(myMap)
        .setOptions('preset', 'islands#violetIcon')
        .setOptions('visible', false)
        .applyBoundsToMap(myMap);


    myMap.geoObjects.add(circle);

        result
            .setOptions('visible', false)

.searchInside(circle)
            .unsetOptions('visible')
     myMap.setBounds(clusterer.getBounds(), {
        checkZoomRange: true
    });

1 комментарий
кластеризация
iOS Safari. Высота ymaps некорректно пересчитывается при открытии нативного селекта (карта находится в попапе).
rerajter
11 января 2017, 12:34

При открытии селекта в iOS Safari 10.x высота контейнера (<ymaps>) устанавливается равной высоте всего документа (карта находится в попапе).

Изначально:

После открытия селекта:

Протестировано на iPhone 4s и iPhone 6s.

С чем это может быть связано? Есть ли вероятность, что к этому причастны стили родительских элементов?

1 комментарий
автоцентрирование карты,высота,баг
preventDefault(), stopPropagation() - как заблокировать исходное DOM-событие?
B2Cmaps
12 января 2017, 10:59

Здравствуйте!

Добавили свою кнопку на карту. При обработке клика показываем некий div с разметкой на нем. В разметке присутствуют ссылки. При некоторых условиях (определенное смещение) ссылка на показываемом div оказывается точно под нашей кнопкой. И на ней срабатывает уже не click кнопки, а стандартный DOM click, который кнопка, получается, не очистила и пустила дальше по DOM-дереву.
В описании preventDefault(), stopPropagation() объектов Event и DomEvent сказано, что "Вызов этого метода никак не влияет на распространение исходного DOM-события ."
А как в таком случае можно заблокировать исходное DOM-событие?

2 комментария
Строгое ограничение поиска для ymaps.suggest/SuggestView
v.fast
16 января 2017, 14:39

Здравствуйте. Есть ли возможность строго ограничить получаемые результаты suggest/SuggestView ? 

Необходимо задав область получать от автокомплитера только варианты входящие в эту область.

Попробовал: 
ymaps.suggest('Коломна', { useMapBounds: false, boundedBy: [[55.70, 37.80],[55.75, 38.00]] }).then(function (items) {
        var a = items[0];
        console.log(a);
        console.log(items);
    });

Находит Коломну которой в заданной области нет.  Есть ли возможность реализовать строгое ограничение и если есть то как это будет выглядеть?

3 комментария