none
Sharepoint форма

    Вопрос

  • Добрый день!

    Подскажите, пожалуйста, как можно реализовать форму заявки на автомашину со вложенной картой, чтобы человек выбирал на карте место куда подать автомашину. Непосредственно в форму карта вставляется, но, не получается сохранить отмеченное место на карте при сохранении формы заявки.

    11 августа 2017 г. 7:08

Ответы

  • На мой взгляд это должно выглядеть как-то так (за синтаксис не ручаюсь, но идея такая):

    1. Например берём размещаем карту на форме вот такую: https://yandex.kz/maps/162/almaty/?ll=76.983264%2C43.248239&z=17

    2. Тыкаем мышкой на карту и видим, что в месте клика появляется надпись с координатами;

    3. Заходим в консоль разработчика в браузере и ищем надпись в текущем коде. Видим, что надпись появляется в элементе <div class="whats-here-preview__title">, а координаты в <div class="whats-here-preview__coords"; (если есть id, то лучше конечно id искать)

    4. Ищем в коде элемент выводящий карту. Для этого перемещаем мышку по коду и смотрим подсвеченные элементы на странице, при этом не забывая разворачивать тэги, чтобы искать конечный дочерний элемент. <ymaps class="ymaps-2-1-53-events-pane ymaps-2-1-53-user-selection-none">;

    5. На страницу sharepoint с формой добавляем код javascript 

    <script> window.onload = function () { document.getElementsByClassName( "ymaps-2-1-53-events-pane ymaps-2-1-53-user-selection-none" ).forEach( function(element, index, array)

    { element.mouseup = function ()

    {

    document.getElementsByClassName( "whats-here-preview__coords" ).forEach( function(element2, index2, array2)

    {

    var coord=element2.value;

    element2 - парсим значение координат и сохраняем в полях формы.

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

    }

    } } } </script>


    • Помечено в качестве ответа Aislamku 11 августа 2017 г. 12:09
    • Снята пометка об ответе Aislamku 13 августа 2017 г. 14:22
    • Помечено в качестве ответа Aislamku 13 августа 2017 г. 14:30
    • Снята пометка об ответе Aislamku 13 августа 2017 г. 14:30
    • Помечено в качестве ответа Антонов АнтонModerator 13 августа 2017 г. 15:35
    11 августа 2017 г. 11:32

Все ответы

  • На мой взгляд это должно выглядеть как-то так (за синтаксис не ручаюсь, но идея такая):

    1. Например берём размещаем карту на форме вот такую: https://yandex.kz/maps/162/almaty/?ll=76.983264%2C43.248239&z=17

    2. Тыкаем мышкой на карту и видим, что в месте клика появляется надпись с координатами;

    3. Заходим в консоль разработчика в браузере и ищем надпись в текущем коде. Видим, что надпись появляется в элементе <div class="whats-here-preview__title">, а координаты в <div class="whats-here-preview__coords"; (если есть id, то лучше конечно id искать)

    4. Ищем в коде элемент выводящий карту. Для этого перемещаем мышку по коду и смотрим подсвеченные элементы на странице, при этом не забывая разворачивать тэги, чтобы искать конечный дочерний элемент. <ymaps class="ymaps-2-1-53-events-pane ymaps-2-1-53-user-selection-none">;

    5. На страницу sharepoint с формой добавляем код javascript 

    <script> window.onload = function () { document.getElementsByClassName( "ymaps-2-1-53-events-pane ymaps-2-1-53-user-selection-none" ).forEach( function(element, index, array)

    { element.mouseup = function ()

    {

    document.getElementsByClassName( "whats-here-preview__coords" ).forEach( function(element2, index2, array2)

    {

    var coord=element2.value;

    element2 - парсим значение координат и сохраняем в полях формы.

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

    }

    } } } </script>


    • Помечено в качестве ответа Aislamku 11 августа 2017 г. 12:09
    • Снята пометка об ответе Aislamku 13 августа 2017 г. 14:22
    • Помечено в качестве ответа Aislamku 13 августа 2017 г. 14:30
    • Снята пометка об ответе Aislamku 13 августа 2017 г. 14:30
    • Помечено в качестве ответа Антонов АнтонModerator 13 августа 2017 г. 15:35
    11 августа 2017 г. 11:32
  • Спасибо за ответ! Прошу прощения, разъясните пожалуйста, как парсить значения?
    то
    • Изменено Aislamku 13 августа 2017 г. 14:38
    13 августа 2017 г. 14:32
  • Спасибо за ответ! Прошу прощения, разъясните пожалуйста, как парсить значения?
    то

    Добрый День.

    Как вариант цикл


    Я не волшебник, я только учусь MCP CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Пометить как ответ" или проголосовать "полезное сообщение". Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть без каких-либо гарантий. Блог IT Инженера, Twitter.


    13 августа 2017 г. 15:40
    Модератор
  • Можно это сделать при помощи регулярных выражений.

    Например мы имеем:

    <div class="whats-here-preview__coords"><!-- react-text: 8 -->43.248176<!-- /react-text --><!-- react-text: 9 -->, <!-- /react-text --><!-- react-text: 10 -->76.983918<!-- /react-text --></div>

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

    var coords=element2.value; //В value по идее хранятся только значения координат, без комментариев. 
    
    var regex = /(.*?),(.*?)/;
    var coord1 = coords.match(regex)[1];
    var coord2 = coords.match(regex)[2];

     

    14 августа 2017 г. 3:10
  • <!DOCTYPE html>
    
    <head>
        <title>Примеры. Определение адреса клика на карте с помощью обратного геокодирования</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
        <script type="text/javascript">
    ymaps.ready(init);
    
    function init() {
        var myPlacemark,
            myMap = new ymaps.Map('map', {
                center: [43.253986, 76.925740],
                zoom: 10
            }, {
                searchControlProvider: 'yandex#search'
            });
    
        // Слушаем клик на карте.
        myMap.events.add('click', function (e) {
            var coords = e.get('coords');
    
            // Если метка уже создана – просто передвигаем ее.
            if (myPlacemark) {
                myPlacemark.geometry.setCoordinates(coords);
            }
            // Если нет – создаем.
            else {
                myPlacemark = createPlacemark(coords);
                myMap.geoObjects.add(myPlacemark);
                // Слушаем событие окончания перетаскивания на метке.
                myPlacemark.events.add('dragend', function () {
                    getAddress(myPlacemark.geometry.getCoordinates());
                });
            }
            getAddress(coords);
        });
    
        // Создание метки.
        function createPlacemark(coords) {
            return new ymaps.Placemark(coords, {
                iconCaption: 'поиск...'
            }, {
                preset: 'islands#violetDotIconWithCaption',
                draggable: true
            });
        }
    
        // Определяем адрес по координатам (обратное геокодирование).
        function getAddress(coords) {
            myPlacemark.properties.set('iconCaption', 'поиск...');
            ymaps.geocode(coords).then(function (res) {
                var firstGeoObject = res.geoObjects.get(0);
    
                myPlacemark.properties
                    .set({
                        // Формируем строку с данными об объекте.
                        iconCaption: [
                            // Название населенного пункта или вышестоящее административно-территориальное образование.
                            firstGeoObject.getLocalities().length ? firstGeoObject.getLocalities() : firstGeoObject.getAdministrativeAreas(),
                            // Получаем путь до топонима, если метод вернул null, запрашиваем наименование здания.
                            firstGeoObject.getThoroughfare() || firstGeoObject.getPremise()
                        ].filter(Boolean).join(', '),
                        // В качестве контента балуна задаем строку с адресом объекта.
                        balloonContent: firstGeoObject.getAddressLine()
                    });
            });
        }
    }
    </script>
    </head>
    <body>
    <p class="header">Кликните по карте, чтобы узнать адрес</p>
    <div id="map" style="width: 600px; height: 400px"></div>
    </body>
    </html>

    14 августа 2017 г. 5:57
  • Карта реализована через Content Editor в самой форме.

    И тут тупик, не знаю куда ваш код вставить, как реализовать

    14 августа 2017 г. 6:00
  • Карта в конечном счёте в HTML как представлена? Если после вызова формы нажать в Chrome F12 (либо в другом браузере включить консоль разработчика), то там вы можете найти свою карту (как я и писал выше, перемещая мышку по коду и смотря какие элементы подсвечиваются).

    Чтобы добавить код, зайдите в свой список, где добавляете заявку, в верхнем меню выберите вкладку "Список", далее найдите иконку подсказка к которой звучит "Изменить веб-часть формы". Выберите форму "Форма создания по умолчанию". Далее добавить Веб-часть, находим "Редактор сценариев" и добавляем. В добавленной веб-части делаем Изменить фрагмент и туда добавляем весь javascript код. Естественно в вашем случае классы или id элементов будут отличаться от моего примера.

    По коду видно, что координаты у вас уже готовы (coords). Или это не гео-координаты? В любом случае, можно получить, поскольку, как мне показалось, используется Yandex map API https://tech.yandex.ru/maps/ 



    • Изменено agemlex77 14 августа 2017 г. 8:26 Дополнение
    14 августа 2017 г. 8:03
  • Да, используется Яндекс API "event_reverse_geocode.js" 

    Определение адреса клика на карте с помощью обратного геокодирования.

    Сейчас структура страницы такая:

    Данные адреса на карте выводятся:

    ymaps > ymaps.ymaps-2-1-53-balloon-pane > ymaps > ymaps.ymaps-2-1-53-balloon__layout > ymaps#id_150270183857023383374

    получается, данные отсюда надо автоматически перенаправлять сюда:

    <input type="text" value="" maxlength="255" id="Title_fa564e0f-0c70-4ab9-b863-0177e6ddd247_$TextField" title="Title" class="ms-long ms-spellcheck-true">




    • Изменено Aislamku 14 августа 2017 г. 9:48
    14 августа 2017 г. 9:32
  • Главное, чтобы ID элемента, где содержится адрес не менялся. Да, нужно значение из элемента id="150270183857023383374" записать в элемент id="Title_fa564e0f-0c70-4ab9-b863-0177e6ddd247_$TextField". Запись должна происходить по событию на странице. Например, при отжатии клавиши мыши на карте "mouseup" или, если получается так, что данные ещё не появились в элементе, а мы их уже пробуем читать, то или какой то асинхронный вызов события с паузой делать, или (но это костыль на мой взгляд) делать по таймеру.

    document.getElementsById( "Title_fa564e0f-0c70-4ab9-b863-0177e6ddd247_$TextField" ).value=document.getElementsById( "150270183857023383374" ).value;

    Событие "отжатия" клавиши естественно нужно присвоить элементу содержащему карту, как я показывал в более ранних постах (там где mouseup).

    Возможно лучшим вариантом будет - разобраться с яндекс API и работать через него, реализовав весь код обработки с использованием объектов карты. Так будет как минимум надёжней.

    Например, в этой функции производить запись в ваше поле:

     // Слушаем клик на карте.
        myMap.events.add('click', function (e) {
            var coords = e.get('coords');
    ...
    }





    • Изменено agemlex77 14 августа 2017 г. 11:05 Дополнение
    14 августа 2017 г. 10:21
  • Доброе утро! 

    Пришлось полностью свернуться и загружать API Google maps вместо Yandex.

    Идея реализовалась!

    Только ввиду неграмотности в кодах, столкнулся с проблемой заполнения строк.

    <script type="text/javascript" src=http://maps.google.ru/maps?file=api&amp;v=2&amp;key=XXX></script>
    <script type="text/javascript" src="/jquery.js"></script>
    
    <script type="text/javascript">
    
       var map;
        var geocoder;
        var address;
     
        function initialize() {
          map = new GMap2(document.getElementById("map_canvas"));
          map.setCenter(new GLatLng(40.730885,-73.997383), 15);
          map.setUIToDefault();
          GEvent.addListener(map, "click", getAddress);
          geocoder = new GClientGeocoder();
        }
        
        function getAddress(overlay, latlng) {
          if (latlng != null) {
            address = latlng;
            geocoder.getLocations(latlng, showAddress);
          }
        }
     
        function showAddress(response) {
          map.clearOverlays();
          if (!response || response.Status.code != 200) {
            alert("Status Code:" + response.Status.code);
          } else {
            place = response.Placemark[0];
            point = new GLatLng(place.Point.coordinates[1],
                                place.Point.coordinates[0]);
            marker = new GMarker(point);
            map.addOverlay(marker);
            
            var values = place.address.split(",");
            var address = values[0];
            var city = values[1];
            var state = values[2].split(" ")[1];
            var zip = values[2].split(" ")[2];
            var country = values[3]
            
            $("input[title='Country']").val(country);    
            $("input[title='Zip']").val(zip);    
            $("input[title='State']").val(state);    
            $("input[title='City']").val(city);    
            $("input[title='Address']").val(address);    
            
          }
        }
     
    
    jQuery(document).ready(function($){
            initialize();
        });
    
    </script>
    
     <div id="map_canvas" style="width: 500px; height: 400px"></div> 


    Здесь код разделяет Город, Адрес, Страна в каждую строку отдельно.

    В идеале, чтобы не размножать лишние столбцы, хотелось бы иметь одну строку с полным адресом, в формате:

    Город, Адрес

    Как правильно переписать вышеуказанный код для желаемого результата? 

    Так же, трудности возникли с картой, локализация, названия улиц на латинице, как изменить на Русское отображение улиц? 


    17 августа 2017 г. 4:50
  • То что касается названий https://support.google.com/maps/answer/63471?hl=ru 

    Скорее всего у вас в системе выбрана страна (я имею ввиду в операционной системе), где принята латиница. Выберите например, Россию.

    То что касается адреса одной строкой, то я вас не понял. Кто мешает взять нужные части и записать в то поле из формы которое предназначено для адреса. Можно даже создать новое поле во время выполнения, но его не обработает Sharepoint при сохранении, поскольку не будет знать о его существовании. В любом случае ниже примеры :

    function showAddress(response) {

    ...

    document.getElementById('*ID формы(смотрите комментарии)').innerHTML+="<br><input type=hidden id='myHiddenAddress'>";// Id формы, которая должна быть родителем нового скрытого поля для хранения адреса. Вместо этой строки можно тем же манером писать данные в существующее поле.

    document.getElementById('myHiddenAddress или Id уже существующего поля').value = city+', '+address;// Поскольку поля адреса уже созданы и вы возможно, не можете их убрать, то предлагаю добавить скрытое поле или использовать уже существующее поле в вашей форме, чтобы просто сложить частицы адресе в нужную единую строку



    • Изменено agemlex77 17 августа 2017 г. 8:24 Дополнение
    17 августа 2017 г. 8:21
  • Локализацию получилось изменить с помощью атрибута в конце ссылки API:

    <script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=***p;hl=ru"></script>

    В данный момент у меня имеется несколько строк, куда разбивается адрес в формате: 

    Страна

    Город

    Улица, дом

    Почтовый индекс

    Следующим кодом:

    var values = place.address.split(",");
            var address = values[0];
            var city = values[1];
            var state = values[2].split(" ")[1];
            var zip = values[2].split(" ")[2];
            var country = values[3]
            
            $("input[title='Country']").val(country);    
            $("input[title='Zip']").val(zip);    
            $("input[title='State']").val(state);    
            $("input[title='City']").val(city);    
            $("input[title='Address']").val(address);    

    Так как это лишнее, необходимо соединить эти строки следующим образом:

    Город, улица, дом.

    Думаю необходимо править существующий код, в чем у меня не получается разобраться.



    17 августа 2017 г. 10:01
  • Город лежит в city, это понятно, но примера address нет. Можно пример address? Например улица такая то, дом такой то... в общем, если нужно что то из строки вырезать, то нужен её формат.
    • Изменено agemlex77 17 августа 2017 г. 12:19 дополнение
    17 августа 2017 г. 12:18
  • Я просто удалил следующие строки кода:

     $("input[title='Country']").val(country);    
            $("input[title='Zip']").val(zip);    
            $("input[title='State']").val(state);    
            $("input[title='City']").val(city);    

    Так же из формы удалил ненужные мне эти строки. 

    Сейчас так:

    И все работает. 

    Только одна проблема в этой карте, детализация хромает, геокодер иногда некорректно отображает, ну и не дает вставлять маркер куда нужно.

    Сейчас пробую API 2GIS, 

    там очень интересно, подробно, вплоть до этажей в зданиях, 

    код во многом очень похожий с моим:

    <!DOCTYPE html>
    <html>
    <head>
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script type="text/javascript" src="http://maps.api.2gis.ru/1.0?loadByRequire=1"></script>
        <title>Тестовая карта с объектами</title>
    </head>
    <body>
        <div id="DGMap" style="width:100%; height:600px"></div>
    
        <script type="text/javascript">
    
            $(DG.load(function() {
    
                // Создаем карту
                var map = new DG.Map('DGMap');
                map.setCenter(new DG.GeoPoint(40.95,57.76),12);
                map.controls.add(new DG.Controls.Zoom());
    
                // Получаем данные
                $.get('getMapData.php', function (data) {
                    var objects = JSON.parse(data);
                    for ( i in objects ) {
                        var marker = new DG.Markers.MarkerWithBalloon({
                            geoPoint: new DG.GeoPoint(objects[i].coords[0], objects[i].coords[1]),
                            balloonOptions: {
                                headerContentHtml: '<b>Участок №'+objects[i].zone+'</b>',
                                contentHtml: 'Адрес:'+objects[i].address+'<br />Число квартир:'+objects[i].data
                            }
                        });
                        map.markers.add(marker);
                    }
                    // Получаем границы добавленных на карту маркеров:
                    var markersBounds = map.markers.getBounds();
                    // Устанавливаем карте новые границы по маркерам:
                    map.setBounds(markersBounds);
                });
    
            }));
    
        </script>
    
    </body>
    </html>

    Вот как можно отсюда так же реализовать вставку адреса? 

    Можно ли реализовать эту часть кода на API 2GIS:

    function showAddress(response) {
          map.clearOverlays();
          if (!response || response.Status.code != 200) {
            alert("Status Code:" + response.Status.code);
          } else {
            place = response.Placemark[0];
            point = new GLatLng(place.Point.coordinates[1],
                                place.Point.coordinates[0]);
            marker = new GMarker(point);
            map.addOverlay(marker);
            
            var values = place.address.split(",");
            var address = values[0];
            var city = values[1];
            var state = values[2].split(" ")[1];
            var zip = values[2].split(" ")[2];
            var country = values[3]
            
            $("input[title='Country']").val(country);    
            $("input[title='Zip']").val(zip);    
            $("input[title='State']").val(state);    
            $("input[title='City']").val(city);    
            $("input[title='Address']").val(address);    
            
          }
        }
     
    
    jQuery(document).ready(function($){
            initialize();

    С уважением.


    • Изменено Aislamku 17 августа 2017 г. 13:17
    17 августа 2017 г. 13:15
  • Визуально не вижу как на экране выглядит установка маркера, поэтому не понимаю, зачем перебираем объекты. Что это за участки? Какой из адресов нужен, какого участка?

    for ( i in objects ) {
                        var marker = new DG.Markers.MarkerWithBalloon({
                            geoPoint: new DG.GeoPoint(objects[i].coords[0], objects[i].coords[1]),
                            balloonOptions: {
                                headerContentHtml: '<b>Участок №'+objects[i].zone+'</b>',
                                contentHtml: 'Адрес:'+objects[i].address+'<br />Число квартир:'+objects[i].data
                            }
                        });
    Понятно, что адрес здесь 
    objects[i].address

    Но здесь перебор нескольких объектов, а значт несколько адресов

    17 августа 2017 г. 16:19
  • Визуально:

    При клике на карту c уровнем масштабирования "Страна"-выдает следующий результат:

    При машстабировании "Город" выдает следующее:

    А при выборе конкретного объекта:

    Интересует вывод значения object[i]address в строку "Address" в форме как это реализовано в коде google maps


    • Изменено Aislamku 18 августа 2017 г. 6:53
    18 августа 2017 г. 6:41
  • Всё, понял в чём дело :) , что это за участки такие...

    Вы использовали пример отсюда: https://habrahabr.ru/post/204228/ и в этом примере как раз есть Участки, а в вашем случае вы просто тыкаете на карту и она вам показывает стандартный pop up. Адрес в этом стандартном pop up лежит в элементе document.getElementsById("dg-map-geoclicker-address").value , но это костыль...

    2GIS API достаточно хорошо расписан:

    Перебор адресов происходит вот по какой причине:

    Первоначально при клике мышкой по карте вы получаете Гео-координаты (Вот пример)

    ...
    map.on('click', function(e) {
                        clickedElement.innerHTML = 'карту, координаты ' + e.latlng.lat + ', ' + e.latlng.lng;
    ...

    Тут же можно по этим координатам найти объекты. Не объект, а именно объекты, поскольку поиск происходит с заданием радиуса поиска (вот почему много адресов).

    Вот пример

    Нас интересует вот этот метод:

    ...
    map.geocoder.get(new DG.GeoPoint(e.latlng.lat, e.latlng.lng), {
         types: ['house'],
         radius: 200,
         limit: 10,
         // Обработка успешного поиска
         success: function(geocoderObjects) {
             // Обходим циклом все полученные геообъекты
             for(var i = 0, len = geocoderObjects.length; i < len; i++) {
                 var geocoderObject = geo...
    ...

    В функции  success: Вы перебираете адреса (но если лимит 1 и радиус маленький, то только адрес) и складываете адрес из переменной objects[i].address

    Остальные части адреса, а именно страна, город, если поискать, тоже можно найти в других переменных типа city, country...Например для поиска города вызываем повторно поиск по координатам, но вместо house пишем city - получим объект город, откуда, как я подозреваю можно вытащить страну...

    • Изменено agemlex77 18 августа 2017 г. 9:07 Дополнение
    18 августа 2017 г. 8:40
  • agemlex77, я ценю Ваше терпение, старание помочь, но, мной Ваши ответы воспринимаются размыто, я не силен в коде, поэтому тяжело дается склеить их, что, куда, как писать.

    Этот код полностью работоспособен и вставляет данные адреса из карты в мою строку в форме:

    <script type="text/javascript" src=http://maps.google.ru/maps?file=api&amp;v=2&amp;key=XXX></script>
    <script type="text/javascript" src="/jquery.js"></script>
    
    <script type="text/javascript">
    
       var map;
        var geocoder;
        var address;
     
        function initialize() {
          map = new GMap2(document.getElementById("map_canvas"));
          map.setCenter(new GLatLng(40.730885,-73.997383), 15);
          map.setUIToDefault();
          GEvent.addListener(map, "click", getAddress);
          geocoder = new GClientGeocoder();
        }
        
        function getAddress(overlay, latlng) {
          if (latlng != null) {
            address = latlng;
            geocoder.getLocations(latlng, showAddress);
          }
        }
     
        function showAddress(response) {
          map.clearOverlays();
          if (!response || response.Status.code != 200) {
            alert("Status Code:" + response.Status.code);
          } else {
            place = response.Placemark[0];
            point = new GLatLng(place.Point.coordinates[1],
                                place.Point.coordinates[0]);
            marker = new GMarker(point);
            map.addOverlay(marker);
            
            var values = place.address.split(",");
            var address = values[0];
            var city = values[1];
            var state = values[2].split(" ")[1];
            var zip = values[2].split(" ")[2];
            var country = values[3]
            
            $("input[title='Country']").val(country);    
            $("input[title='Zip']").val(zip);    
            $("input[title='State']").val(state);    
            $("input[title='City']").val(city);    
            $("input[title='Address']").val(address);    
            
          }
        }
     
    
    jQuery(document).ready(function($){
            initialize();
        });
    
    </script>
    
     <div id="map_canvas" style="width: 500px; height: 400px"></div> 

    Пример этого кода:

    Проблемы этого решения:

    Отсутствие многих объектов, наличие пустот, и маркер не вставляется в них, соответственно- адрес в некоторых случаях может стать не точным.

    2GIS карты очень информативные, в этой связи, хочется реализовать идею выше на карте 2GIS.

    Буду очень рад, если Вы сможете откорректировать вышеуказанный код под API 2GIS. 



    • Изменено Aislamku 18 августа 2017 г. 9:18
    18 августа 2017 г. 9:15
  • То, что объекты отсутствуют - это проблема не кода, а базы данных самого 2GIS. Когда ни будь они опишут эти не достающие объекты и они тоже будут доступны. Если решать самостоятельно эту проблему, то нужно создавать собственную базу данных объектов и наносить не достающие объекты на пользовательский слой 2GIS. Как вы понимаете это очень большая работа, причём ручная.

    Боюсь вам придётся либо проделать эту работу по дополнению объектов, либо искать другую карту с другим API и базой объектов. Либо писать какую то систему, которая квадрат за квадратом обследует все базы данных и сделает консолидированную базу объектов...

    Я к сожалению не имею столько времени (думаю, как и остальные участники форума), чтобы эксперементировать с разными вариантами, поэтому могу только направлять (и ещё не факт, что правильно :)).

    Так что как то так...

    Как вариант, сохраняйте Геокоординаты - они всегда есть, а адрес (Назовите "Примерный адрес" :)) показывайте только в случае наличия. Или в случае отсутствия адреса инициируйте другой API (google или яндекс или ещё что) и по координатам запрашивайте адрес. Так до первого полученного.

    Кроме того, данный форум посвящен Sharepoint, а тема уже далеко ушла от контекста. Может лучше спросить в форуме 2GIS или другого картографического сервиса? Это будет рациональнее с точки зрения траты вашего времени...


    • Изменено agemlex77 18 августа 2017 г. 10:41 Дополнение
    18 августа 2017 г. 10:02