Ответы пользователя по тегу Яндекс.Карты
  • Как сделать переключатель между несколькими картами Яндекс?

    deepblack
    @deepblack
    Создаешь нужное количество ListBoxItem, навешиваешь обработчики на каждый из них,
    в обработчике используй метод setCenter.
    Всё просто.

    Ответ написан
    Комментировать
  • Как в ymaps.control.ListBoxItem добавить событие при выборе пункта меню?

    deepblack
    @deepblack
    Код (спойлер)
    const cityList = new ymaps.control.ListBox({
        data: {
            content: 'Select a city'
        },
        items: [
          new ymaps.control.ListBoxItem('Moscow'), 
          new ymaps.control.ListBoxItem('Novosibirsk'), 
          new ymaps.control.ListBoxItem({
            options: {
              type: 'separator'
            }
          }), 
          new ymaps.control.ListBoxItem('New York'), ]
      });
      cityList.get(0)
        .events.add('click', function () {
        myMap.setCenter([55.752736, 37.606815]);
      });
      cityList.get(1)
        .events.add('click', function () {
        myMap.setCenter([55.026366, 82.907803]);
      });
      cityList.get(3)
        .events.add('click', function () {
        myMap.setCenter([40.695537, -73.97552]);
      });
      myMap.controls.add(cityList, {
        floatIndex: 0
      });


    Нажми Select a city, выбери город из списка
    Ответ написан
    Комментировать
  • Как в python работать с Api Яндекса?

    deepblack
    @deepblack Куратор тега Python
    Вот либа с помощью которой это можно сделать, но на самом деле лучше обойтись без неё.
    пример того как это можно использовать:
    spoiler
    import typing
    
    import requests
    
    from yandex_geocoder.exceptions import (
        YandexGeocoderAddressNotFound,
        YandexGeocoderHttpException,
    )
    
    
    class Client:
        """Yandex geocoder API client.
    
        :Example:
            >>> from yandex_geocoder import Client
            >>> Client.coordinates('Хабаровск 60 октября 150')
            ('135.114326', '48.47839')
    
        """
    
        API_URL = "https://geocode-maps.yandex.ru/1.x/"
        PARAMS = {"format": "json"}
    
        @classmethod
        def request(cls, address: str) -> dict:
            """Requests passed address and returns content of `response` key.
    
            Raises `YandexGeocoderHttpException` if response's status code is
            different from `200`.
    
            """
            response = requests.get(
                cls.API_URL, params=dict(geocode=address, **cls.PARAMS)
            )
    
            if response.status_code != 200:
                raise YandexGeocoderHttpException(
                    "Non-200 response from yandex geocoder"
                )
    
            return response.json()["response"]
    
        @classmethod
        def coordinates(cls, address: str) -> typing.Tuple[str, str]:
            """Returns a tuple of ccordinates (longtitude, latitude) for
            passed address.
    
            Raises `YandexGeocoderAddressNotFound` if nothing found.
    
            """
            data = cls.request(address)["GeoObjectCollection"]["featureMember"]
    
            if not data:
                raise YandexGeocoderAddressNotFound(
                    '"{}" not found'.format(address)
                )
    
            coordinates = data[0]["GeoObject"]["Point"]["pos"]  # type: str
            return tuple(coordinates.split(" "))


    По большому счету это весь её код.
    Ответ написан
    Комментировать
  • Как исправить ошибку яндекс карты апи?

    deepblack
    @deepblack
    Выложите пример скрипта который воспроизводит ошибку на codepen.io
    Тогда можно будет что-то сказать конкретное.
    Ответ написан
    1 комментарий
  • Лучший стек для парсинга excel файла с адресами группированными по листам и отображение этих адресов на карте?

    deepblack
    @deepblack
    Тут как минимум две задачи.
    Первая это парсинг excel файла, удобно реализовать на Питоне.
    Вторая это собственно вывод, тут лучше отталкиваться от того, какой стек вам лучше знаком.
    Хотите на js, хотите на Python.
    Ответ написан
  • Как назначить события точке на яндекс карте?

    deepblack
    @deepblack
    Я ответил на ваш предыдущий вопрос, с рабочим примером на CodePen
    Где дал наглядный пример для событий mouseenter и mouseleave. (Да, вопрос сформулирован по другому, но в коде ответ на оба вопроса. Такое впечатление что в код вы даже не смотрели)

    Что вас не устроило в том ответе, зачем вы создаете новый вопрос?

    Как этой точке назначить события мыши?

    myPlacemark.events
      .add('mouseenter', function (e) { // mouseenter, mouseleave etc...
        \\ you code here
      })
    Ответ написан
    Комментировать
  • Как из конструктора карт Яндекс разместить одну карту в разных местах с разными центрами?

    deepblack
    @deepblack
    Без конструктора:
    Создаёте несколько разных экземплятор класса ymaps.Map с нужными вам настройками (center, zoom)
    Используя objectManager добавляете Гео-обьекты на нужную карту(ы)

    UPD:
    Экспорт объектов карты
    Ответ написан
    6 комментариев
  • Как нанести на карту метки и строить между ними произвольные маршруты?

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


    Например на Яндекс.Картах
    spoiler
    5d1dc31c5fcee273650778.png


    Если надо промежуточную точку, то просто добавьте её в интерфейсе, и таскайте мышкой куда угодно.
    spoiler
    5d1dc3f3ea365038159910.png


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

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

    из заданного набора

    Если всё дело в этом, то вы можете написать свой интерфейс с нужными вам точками на JavaScript используя API Яндекс.Карт

    spoiler
    // Строим маршрут из Королева в Красногорск через Химки и Мытищи, где Мытищи - транзитная точка.
    // Красногорск зададим координатами.
    ymaps.route([
         'Королев',
         { type: 'viaPoint', point: 'Мытищи' },
         'Химки',
         { type: 'wayPoint', point: [55.811511, 37.312518] }
     ], {
         mapStateAutoApply: true
     }).then(function (route) {
         route.getPaths().options.set({
             // в балуне выводим только информацию о времени движения с учетом пробок
             balloonContentBodyLayout: ymaps.templateLayoutFactory.createClass('$[properties.humanJamsTime]'),
             // можно выставить настройки графики маршруту
             strokeColor: '0000ffff',
             opacity: 0.9
         });
         // добавляем маршрут на карту
         map.geoObjects.add(route);
     });
    Ответ написан
  • Как изменить размер яндекс карт?

    deepblack
    @deepblack
    Используйте метод fitToViewport()
    https://tech.yandex.ru/maps/jsbox/2.1/fillcontainer
    jsfiddle.net/Zb48K/4
    Ответ написан
    Комментировать
  • Как сделать чтобы метки маршрута были поверх обычных меток Яндекс Карты?

    deepblack
    @deepblack
    Для задания начальной, конечной и промежуточных точек используется YMaps.WayPoint
    • wayPointStart - опции отображения начальной путевой точки;
    • wayPointFinish - опции отображения конечной путевой точки;

    WayPoint наследуется от Placemark, у которого есть свойство zindex

    Вот его и используйте.
    Ответ написан
    Комментировать
  • Как поставить такой маркер + текст, Yandex Maps APi?

    deepblack
    @deepblack
    Например так:
    spoiler
    <!DOCTYPE html>
    <html>
    <head>
        <title>Добавление метки на карту</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <!--
            Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
            Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
        -->
        <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>" type="text/javascript"></script>
        <script src="placemark.js" type="text/javascript"></script>
    	<style>
            html, body, #map {
                width: 100%; height: 100%; padding: 0; margin: 0;
            }
        </style>
    </head>
    <body>
        <div id="map"></div>
    </body>
    </html>


    ymaps.ready(init);
    
    function init() {
        var myMap = new ymaps.Map("map", {
                center: [55.76, 37.64],
                zoom: 10
            }, {
                searchControlProvider: 'yandex#search'
            });
    
    
        myMap.geoObjects
    
            .add(new ymaps.Placemark([55.694843, 37.435023], {
                iconCaption: 'Очень длиннный, но невероятно интересный текст'
            }, {
                preset: 'islands#redDotIconWithCaption'
            }));
    
    }


    https://tech.yandex.ru/maps/jsapi/doc/2.1/quick-st...
    Ответ написан
    Комментировать
  • Может кто помочь с яндекс картой и JS?

    deepblack
    @deepblack
    1.
    $(window).resize(function () {
      if ($(window).width() < 576) {
        myMap.setCenter([57.767265, 40.925358]);
      }
    });


    2.
    function myFunction(x) {
      if (x.matches) { // If media query matches
        myMap.setCenter([57.767265, 40.925358]);
      } 
    }
    
    var x = window.matchMedia("(max-width: 576px)")
    myFunction(x) // Call listener function at run time
    x.addListener(myFunction) // Attach listener function on state changes
    Ответ написан
    2 комментария
  • Как добавить подсказку при щелчку мыши на точку на Яндекс Картах?

    deepblack
    @deepblack
    Например вот так:
    ymaps.ready(init);
    
    function init () {
        var myMap = new ymaps.Map("map", {
                center: [55.75985606898725,37.61054750000002],
                zoom: 12
            }, {
                searchControlProvider: 'yandex#search'
            }),
            myPlacemark = new ymaps.Placemark([55.75985606898725,37.61054750000002], {
                // Чтобы балун и хинт открывались на метке, необходимо задать ей определенные свойства.
                balloonContentHeader: "Балун метки",
                balloonContentBody: "Содержимое <em>балуна</em> метки",
                balloonContentFooter: "Подвал",
                hintContent: "Хинт метки"
            });
    
        myMap.geoObjects.add(myPlacemark);
    
        // Открываем балун на карте (без привязки к геообъекту).
        myMap.balloon.open([55.7591,37.61053], "Содержимое балуна", {
            // Опция: не показываем кнопку закрытия.
            closeButton: false
        });
    
        // Показываем хинт на карте (без привязки к геообъекту).
        myMap.hint.open(myMap.getCenter(), "Одинокий хинт без метки", {
            // Опция: задержка перед открытием.
            openTimeout: 1500
        });
    }


    Для большого количества объектов:
    ymaps.ready(init);
    
    function init() {
      let myMap = new ymaps.Map('map', {
        center: [55.755814, 37.617635],
        zoom: 14,
        controls: ['routeButtonControl', 'typeSelector', 'fullscreenControl'],
      }, {
        searchControlProvider: 'yandex#search'
      }),
          objectManager = new ymaps.ObjectManager({
            clusterize: true,
            gridSize: 64,
            clusterIconLayout: "default#pieChart"
          });
      myMap.geoObjects.add(objectManager);
      
      let listBoxItems = ['2G', '3G', '4G'].map(function(title) {
        return new ymaps.control.ListBoxItem({
          data: {
            content: title
          },
          state: {
            selected: true
          }
        })
      }),
          listBoxControl = new ymaps.control.ListBox({
            data: {
              content: 'Filter',
              title: 'Filter'
            },
            items: listBoxItems,
            state: {
              expanded: true,
              filters: listBoxItems.reduce(function(filters, filter) {
                filters[filter.data.get('content')] = filter.isSelected();
                return filters;
              }, {})
            }
          });
      myMap.controls.add(listBoxControl);
      
      listBoxControl.events.add(['select', 'deselect'], function(e) {
        let listBoxItem = e.get('target');
        let filters = ymaps.util.extend({}, listBoxControl.state.get('filters'));
        filters[listBoxItem.data.get('content')] = listBoxItem.isSelected();
        listBoxControl.state.set('filters', filters);
      });
      
      let filterMonitor = new ymaps.Monitor(listBoxControl.state);
      filterMonitor.add('filters', function(filters) {
        objectManager.setFilter(getFilterFunction(filters));
      });
    
      function getBand(e, i, a){
        let Band = this.valueOf();
        return e === Band;
      }
      
      function getFilterFunction(categories){
        return function(obj){
          let bsBands = obj.has_bands;
          let has2G = bsBands.find(getBand, '2G');
          let has3G = bsBands.find(getBand, '3G');
          let has4G = bsBands.find(getBand, '4G');
          return (categories['2G'] && has2G) || (categories['3G'] && has3G) || (categories['4G'] && has4G);
        }
      }
      
      let data = {
        "count": 4,
        "next": null,
        "previous": null,
        "type": "FeatureCollection",
        "features": [
            {
                "id": 1,
                "region_prefix": "97",
                "cell_site_number": 1,
                "description": "",
                "address": "",
                "commissioning": "",
                "bs_id": "",
                "height_asl": 0,
                "bands": [
                    {
                        "name": "2G",
                        "frequency": "900"
                    },
                    {
                        "name": "2G",
                        "frequency": "1800"
                    }
                ],
                "status": true,
                "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [55.755815, 37.613]
                },
                "properties": {
                    "balloonContentHeader": "balloonContentHeader",
                    "balloonContentBody": "balloonContentBody",
                    "balloonContentFooter": "balloonContentFooter",
                    "clusterCaption": "clusterCaption",
                    "hintContent": "hintContent",
                    "iconCaption": "2G"
                },
                "has_bands": [
                    "2G"
                ]
            },
            {
                "id": 2,
                "region_prefix": "97",
                "cell_site_number": 2,
                "description": "",
                "address": "",
                "commissioning": "",
                "bs_id": "",
                "height_asl": 0,
                "bands": [
                    {
                        "name": "2G",
                        "frequency": "900"
                    },
                    {
                        "name": "2G",
                        "frequency": "1800"
                    },
                    {
                        "name": "3G",
                        "frequency": "2100"
                    },
                    {
                        "name": "4G",
                        "frequency": "1800"
                    },
                    {
                        "name": "4G TDD",
                        "frequency": "2600"
                    }
                ],
                "status": true,
                "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [55.759, 37.613]
                },
                "properties": {
                    "balloonContentHeader": "balloonContentHeader",
                    "balloonContentBody": "balloonContentBody",
                    "balloonContentFooter": "balloonContentFooter",
                    "clusterCaption": "clusterCaption",
                    "hintContent": "hintContent",
                    "iconCaption": "2G 3G 4G"
                },
                "has_bands": [
                    "3G",
                    "2G",
                    "4G"
                ]
            },
            {
                "id": 3,
                "region_prefix": "97",
                "cell_site_number": 3,
                "description": "",
                "address": "",
                "commissioning": "",
                "bs_id": "",
                "height_asl": 0,
                "bands": [
                    {
                        "name": "3G",
                        "frequency": "2100"
                    }
                ],
                "status": true,
                "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [55.7204, 37.6167]
                },
                "properties": {
                    "balloonContentHeader": "balloonContentHeader",
                    "balloonContentBody": "balloonContentBody",
                    "balloonContentFooter": "balloonContentFooter",
                    "clusterCaption": "clusterCaption",
                    "hintContent": "hintContent",
                    "iconCaption": "3G"
                },
                "has_bands": [
                    "3G",
                ]
            },
            {
                "id": 4,
                "region_prefix": "97",
                "cell_site_number": 4,
                "description": "",
                "address": "",
                "commissioning": "",
                "bs_id": "",
                "height_asl": 0,
                "bands": [
                    {
                        "name": "4G",
                        "frequency": "1800"
                    },
                    {
                        "name": "4G TDD",
                        "frequency": "2600"
                    }
                ],
                "status": true,
                "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [55.7704, 37.6119]
                },
                "properties": {
                    "balloonContentHeader": "balloonContentHeader",
                    "balloonContentBody": "balloonContentBody",
                    "balloonContentFooter": "balloonContentFooter",
                    "clusterCaption": "clusterCaption",
                    "hintContent": "hintContent",
                    "iconCaption": "4G"
                },
                "has_bands": [
                    "4G"
                ]
            }]}
            objectManager.add(data);
    }


    Во втором случае пример сразу с фильтром.
    Ответ написан