Хороший способ загрузить несколько длинных / длинных точек из базы данных в маркеры карты Google? - PullRequest
3 голосов
/ 16 июля 2010

У меня есть таблица, содержащая несколько адресов, включая их координаты широты и долготы, и я хочу разместить многие из этих маркеров одновременно на карте Google, используя веб-формы asp.net и Google Maps Javascript API V3.

В руководствах показано, как добавить один маркер:
http://code.google.com/apis/maps/documentation/javascript/overlays.html#Markers

 var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
  var myOptions = {
    zoom: 4,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  var marker = new google.maps.Marker({
      position: myLatlng, 
      map: map, 
      title:"Hello World!"
  });

У меня вопрос: после того, как я загрузил набор нескольких адресов на стороне сервера (codebehind), каков хороший способ вывести этот набор в html так, чтобы на стороне клиента javascript мог повторять коллекцию и поместите маркеры на карту.

Обновление

Если бы я уже создал свой сет, что было бы достойным способом вставить это в html страницы во время рендеринга, не вызывая внешний скрипт? (Передача сложных параметров фильтра в сценарий будет сложной, поэтому я бы предпочел этого избежать.) Должен ли я буквально просто использовать строитель строк для создания функции javascript, содержащей правильный массив json, а затем добавить эту функцию на страницу? Это бы сработало, но это не совсем правильно.

Ответы [ 4 ]

6 голосов
/ 16 июля 2010

Вы можете использовать подход, который вы предлагаете.

Это очень простой пример, показывающий, как легко построить несколько маркеров с помощью API v3:

<!DOCTYPE html>
<html> 
<head> 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
  <title>Google Maps Multiple Markers</title> 
  <script src="http://maps.google.com/maps/api/js?sensor=false" 
          type="text/javascript"></script>

  <script type="text/javascript">

    var map;

    // Cretes the map
    function initialize() {
      map = new google.maps.Map(document.getElementById('map'), {
        zoom: 10,
        center: new google.maps.LatLng(-33.92, 151.25),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });
    }

    // This function takes an array argument containing a list of marker data
    function generateMarkers(locations) {
      for (var i = 0; i < locations.length; i++) {  
        new google.maps.Marker({
          position: new google.maps.LatLng(locations[i][1], locations[i][2]),
          map: map,
          title: locations[i][0]
        });
      }
    }
  </script>

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

Затем, чтобы сгенерировать маркеры, вы можете создать следующий скрипт в любом месте внутри ваших <body> тегов.

<body> 
  <div id="map" style="width: 500px; height: 400px;"></div>

  <script type="text/javascript">
    window.onload = function () {
      initialize();
      generateMarkers(
        ['Bondi Beach', -33.890542, 151.274856],
        ['Coogee Beach', -33.923036, 151.259052],
        ['Cronulla Beach', -34.028249, 151.157507],
        ['Manly Beach', -33.800101, 151.287478],
        ['Maroubra Beach', -33.950198, 151.259302]
      );
    };
  </script>
</body>

Вам просто нужно сгенерировать литерал массива ['Bondi Beach', -33.890542, 151.274856] ... из вашего набора данных на стороне сервера, поскольку остальное является статическим. Убедитесь, что последний элемент не заканчивается запятой.

1 голос
/ 16 июля 2010

Вот что мне удалось получить от Google Maps API v3 Group некоторое время назад, для работы с десятками тысяч баллов - в частности, посмотрите, что бросил вместе Павел Кульченко.Это довольно круто.

http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/59a52aecec860e75?pli=1

0 голосов
/ 15 апреля 2018

Я думаю, что функция generateMarkers должна вызываться следующим образом.потому что, если я вызову location [i] [1] в функции generateMarkers, он даст мне только первый символ переданного аргумента.Итак, мне пришлось конвертировать мой обычный массив в JSON.У меня это сработало.

generateMarkers([
 {'0':'Bondi Beach', '1':-33.890542, '2':151.274856},
 {'0':'Coogee Beach', '1':-33.923036, '2':151.259052},
 {'0':'Cronulla Beach', '1':-34.028249, '2':151.157507},
 {'0':'Manly Beach', '1':-33.800101, '2':151.287478},
 {'0':'Maroubra Beach', '1':-33.950198, '2':151.259302}
]);
0 голосов
/ 16 июля 2010

Я думаю, что очевидный подход будет работать нормально.После инициализации карты вы можете сделать асинхронный запрос к сценарию, который создает массив JSON с широтными координатами.Выполните итерацию по этому списку, поместив маркер по каждой координате, или передайте каждый маркер менеджеру маркеров, как предложено Стивом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...