Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   GoogleAPI-v3 и OVER_QUERY_LIMIT (https://javascript.ru/forum/css-html/63252-googleapi-v3-i-over_query_limit.html)

DDanser 26.05.2016 16:12

GoogleAPI-v3 и OVER_QUERY_LIMIT
 
Добрый день. Подскажите пожалуйста. Есть такой JS:

var geocoder;
var map;
var query = new Array('Москва, Измайловский Вал, 20с1', 'Тула, площадь Крестовоздвижненская', 'Смоленск, ул. Глинки, 7', 'Калуга, ул. Кирова, 21А', 'Санкт-Петербург, Невский проспект, 38/4', 'Псков, Октябрьский проспект, 29/25', 'Калининград, Московский проспект, 24', 'Архангельск, Ломоносова проспект, 137/19', 'Ярославль, Ленина проспект, 25', 'Вологда, ул. Предтеченская, 33', 'Иваново, ул. Лежневская, 157', '');


var idArr = new Array('mp0', 'mp1', 'mp2', 'mp3', 'mp4', 'mp5', 'mp6', 'mp7', 'mp8', 'mp9', 'mp10');

function initialize() {
  geocoder = new google.maps.Geocoder();
  var mapOptions = {
    zoom: 15
  }
  
  
  
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
  codeAddress();
}

function codeAddress() {
  for (var i = 0; i < query.length; i++) {
    var address = query[i];
    geocoder.geocode({
      'address': address
    }, function(k) {
      return function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          var a = document.getElementById(idArr[k]);
          a.onclick = function() {
            map.setZoom(17);
            map.setCenter(results[0].geometry.location);
          }
          map.setCenter(results[0].geometry.location);
          var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
          });
        } else {
          alert('Geocode was not successful for the following reason: ' + status);
        }
      }
    }(i));
  }
}

google.maps.event.addDomListener(window, 'load', initialize);


Данный скрипт переводит камеру, на изначально созданные маркеры. Меня это вполне бы устроило, но почему то при попытке добавить новый объект, возникает ошибка "OVER_QUERY_LIMIT". Побродив по американским форумам, понял что это изза того что одновременно очень много запросов идет, и гугл ругается. Можно ли как то реализовать такую возможность, чтобы при каждом новом клике создавался новый маркер, а старый стирался?

Так же прикладываю ссылку на CodePen.

Dilettante_Pro 26.05.2016 17:04

DDanser,
Цитата:

Сообщение от DDanser
одновременно очень много запросов идет

Пожалуй, не одновременно:
Цитата:

Веб-службы
СТАНДАРТНЫЙ
Google Maps Directions API
Google Maps Distance Matrix API 3
Google Maps Elevation API
Google Maps Geocoding API
Google Maps Geolocation API
Google Maps Roads API
Google Maps Time Zone API
До 2 500 бесплатных запросов в день
0,50 долларов США за каждую дополнительную 1000 запросов, до 100 000 в день
Источник - https://developers.google.com/maps/p...d-plans/?hl=ru

DDanser 26.05.2016 17:07

Цитата:

Сообщение от Dilettante_Pro (Сообщение 417682)
DDanser,

Пожалуй, не одновременно:

Источник - https://developers.google.com/maps/p...d-plans/?hl=ru

Читал) но не очень понял, что это значит :)

Dilettante_Pro 26.05.2016 17:31

DDanser,
Если превысили 2500 в день - бесплатность кончается

DDanser 26.05.2016 17:48

Цитата:

Сообщение от Dilettante_Pro (Сообщение 417686)
DDanser,
Если превысили 2500 в день - бесплатность кончается

Т.е. примерно так > http://www.sberleasing.ru/ru/contacts/ сделать невозможно?

Dilettante_Pro 26.05.2016 18:22

DDanser,
Ну, я думаю, Сбербанк платит за использование АПИ

DDanser 27.05.2016 09:08

Цитата:

Сообщение от Dilettante_Pro (Сообщение 417701)
DDanser,
Ну, я думаю, Сбербанк платит за использование АПИ

Что то я в сомнениях наверное.
Давайте зайдем с другой стороны.
Можете подсказать какой код использовать чтобы по клику ставить маркер в определенной точке? Я только начинаю изучать JS в силу возникших потребностей. Насколько я понял делается это через указание широты и долготы через click (). Прочитал мануалы Гугла но либо моих познаний не хватает, либо и правда такой информации нету, и надо написать самому.

Dilettante_Pro 27.05.2016 10:32

DDanser,
<!DOCTYPE html>
<html>
<head>
    <title>Sample Map</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <script src="http://maps.google.com/maps/api/js"> </script>
    <script>
       
            function e() {
                var centerLatLng = { lat: 41.881576, lng: 12.495232 };
                var e = document.getElementById("map"),
                t = {
                   center: centerLatLng,
                   zoom: 10,
                   mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                var map = new google.maps.Map(e, t);
                google.maps.event.addListener(map, "click", function (ev) {
                     var location = ev.latLng;
                     marker = new google.maps.Marker({
                         position: location,
                                 map: map,
                                  title: 'Новый маркер'
                             });
                     marker.setMap(map);
                });
            };
            google.maps.event.addDomListener(window, 'load', e);


    </script>
</head>
<body>
    <div id="map" style="width: 600px; height: 400px;">
    </div>
</body>
</html>

DDanser 27.05.2016 11:20

Dilettante_Pro,
Прошу прощения. Вы мне и так помогаете, я еще неправильно объясняю суть. Можно ли, снизу карты написать, допустим, Москва. Сделать "Москву" ссылкой, при нажатии на которую будет ставиться маркер на "Москве"?

Dilettante_Pro 27.05.2016 13:00

Цитата:

Сообщение от DDanser (Сообщение 417776)
Dilettante_Pro,
Прошу прощения. Вы мне и так помогаете, я еще неправильно объясняю суть. Можно ли, снизу карты написать, допустим, Москва. Сделать "Москву" ссылкой, при нажатии на которую будет ставиться маркер на "Москве"?

Для работы в таком режиме уже нужно геокодирование со всеми вытекающими....
https://developers.google.com/maps/d...ntro?hl=ru#BYB


Часовой пояс GMT +3, время: 15:12.