使用Google Maps JavaScript API v3和Geocoding API映射多个位置

编码器

我正在使用Google Maps JavaScript API v3生成具有多个位置/标记的地图。我只有这些位置的地址,而没有坐标,因此我正在使用Geocoding API获取坐标。

我终于可以使用Google的地理编码,因此位置标记会显示在原先的位置。但是,每个InfoWindow中都显示相同的内容我似乎无法将位置数组传递到地址解析功能中。(顺便说一句,我也尝试过为地址解析结果创建一个变量,并将infoWindow函数移至地址解析功能之外,但我也无法做到这一点。)

我已经尝试了一百种不同的方法。我希望别人能看到我以前看不到的东西。

    var locations = [
        ['Location 1 Name', 'Location 1 Address', 'Location 1 URL'],
        ['Location 2 Name', 'Location 2 Address', 'Location 2 URL'],
        ['Location 3 Name', 'Location 3 Address', 'Location 3 URL']
    ];

    geocoder = new google.maps.Geocoder();

    for (i = 0; i < locations.length; i++) {

        title = locations[i][0];
        address = locations[i][1];
        url = locations[i][2];

        geocoder.geocode({ 'address' : locations[i][1] }, function(results, status) {
          marker = new google.maps.Marker({
              icon: 'marker_blue.png',
              map: map,
              position: results[0].geometry.location,
              title: title,
              animation: google.maps.Animation.DROP,
              address: address,
              url: url
          })
          infoWindow(marker, map, title, address, url);
        })

    }

    function infoWindow(marker, map, title, address, url) {
        google.maps.event.addListener(marker, 'click', function() {
            var html = "<div><h3>" + title + "</h3><p>" + address + "<br></div><a href='" + url + "'>View location</a></p></div>";
            iw = new google.maps.InfoWindow({ content : html, maxWidth : 350});
            iw.open(map,marker);
        });
    }
地理编码

这是google map信息窗口通过xml的多个地址的重复,只是不完全相同。地址解析器是异步的,因此当地址解析器回调运行时,地址的值是所有调用从循环结束起的值。

答案是相同的:最简单的解决方案是使用函数闭包将对地理编码器的调用与返回的结果相关联:

function geocodeAddress(locations, i) {
    var title = locations[i][0];
    var address = locations[i][1];
    var url = locations[i][2];
    geocoder.geocode({
        'address': locations[i][1]
    },

    function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
                icon: 'http://maps.google.com/mapfiles/ms/icons/blue.png',
                map: map,
                position: results[0].geometry.location,
                title: title,
                animation: google.maps.Animation.DROP,
                address: address,
                url: url
            })
            infoWindow(marker, map, title, address, url);
            bounds.extend(marker.getPosition());
            map.fitBounds(bounds);
        } else {
            alert("geocode of " + address + " failed:" + status);
        }
    });
}

工作提琴

代码段:

var locations = [
  ['Location 1 Name', 'New York, NY', 'Location 1 URL'],
  ['Location 2 Name', 'Newark, NJ', 'Location 2 URL'],
  ['Location 3 Name', 'Philadelphia, PA', 'Location 3 URL']
];

var geocoder;
var map;
var bounds = new google.maps.LatLngBounds();

function initialize() {
  map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  geocoder = new google.maps.Geocoder();

  for (i = 0; i < locations.length; i++) {


    geocodeAddress(locations, i);
  }
}
google.maps.event.addDomListener(window, "load", initialize);

function geocodeAddress(locations, i) {
  var title = locations[i][0];
  var address = locations[i][1];
  var url = locations[i][2];
  geocoder.geocode({
      'address': locations[i][1]
    },

    function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var marker = new google.maps.Marker({
          icon: 'http://maps.google.com/mapfiles/ms/icons/blue.png',
          map: map,
          position: results[0].geometry.location,
          title: title,
          animation: google.maps.Animation.DROP,
          address: address,
          url: url
        })
        infoWindow(marker, map, title, address, url);
        bounds.extend(marker.getPosition());
        map.fitBounds(bounds);
      } else {
        alert("geocode of " + address + " failed:" + status);
      }
    });
}

function infoWindow(marker, map, title, address, url) {
  google.maps.event.addListener(marker, 'click', function() {
    var html = "<div><h3>" + title + "</h3><p>" + address + "<br></div><a href='" + url + "'>View location</a></p></div>";
    iw = new google.maps.InfoWindow({
      content: html,
      maxWidth: 350
    });
    iw.open(map, marker);
  });
}

function createMarker(results) {
  var marker = new google.maps.Marker({
    icon: 'http://maps.google.com/mapfiles/ms/icons/blue.png',
    map: map,
    position: results[0].geometry.location,
    title: title,
    animation: google.maps.Animation.DROP,
    address: address,
    url: url
  })
  bounds.extend(marker.getPosition());
  map.fitBounds(bounds);
  infoWindow(marker, map, title, address, url);
  return marker;
}
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas" style="border: 2px solid #3872ac;"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Google Maps Javascript API v3数据层设置多个GeoJson文件的样式

来自分类Dev

带有Rhomobile的Google Maps Javascript V3 API

来自分类Dev

Google Maps Javascript API V3中的旋转标记

来自分类Dev

Google Maps JavaScript API v3 /数据层/ MarkerClusterer

来自分类Dev

Google Maps Javascript API v3的标记

来自分类Dev

Google Maps Javascript API V3中的旋转标记

来自分类Dev

Esri功能服务和Google Maps API v3

来自分类Dev

如何使用Google Maps Javascript API V3在加载时设置infoWindow内容

来自分类Dev

Google Maps使用自定义Panaromas Javascript API v3阻止街景

来自分类Dev

如何使用Google Maps Javascript API V3在加载时设置infoWindow内容

来自分类Dev

Google Maps API对多个位置进行地理编码

来自分类Dev

在Google Maps API中插入从文件读取的多个位置

来自分类Dev

如何使用Google Maps API V3显示多边形和多边形

来自分类Dev

使用Google Maps API v3相交多边形和折线

来自分类Dev

标记位置未获取-Google Maps API v3

来自分类Dev

Google Maps API v3:为什么Google Maps API V3和Google Maps的搜索结果不一致?

来自分类Dev

在Google Maps API v3中绘制多个圆圈

来自分类Dev

多个图块问题Google Maps API v3 JS

来自分类Dev

Google Maps v3 API和WordPress ACF:多个自定义标记

来自分类Dev

带有信息窗口和图钉的 Google Maps API v3 多个标记

来自分类Dev

更改Google Maps JavaScript API v3以外的地图不透明度

来自分类Dev

更改Google Maps JavaScript API v3以外的地图不透明度

来自分类Dev

Google Maps Javascript API V3:标记具有相同的标题

来自分类Dev

Google Maps JavaScript API v3更改标记并添加卫星视图

来自分类Dev

地图标记无法呈现-Phonegap中的Google Maps Javascript API v3

来自分类Dev

Google Maps Javascript Api V3 data.remove没有删除功能

来自分类Dev

Google Maps Javascript API v3路由迭代

来自分类Dev

使地图元素空白,消失(Google Maps JavaScript API,v3)

来自分类Dev

在Google Maps Javascript API v3中一次拖动多个多边形

Related 相关文章

  1. 1

    使用Google Maps Javascript API v3数据层设置多个GeoJson文件的样式

  2. 2

    带有Rhomobile的Google Maps Javascript V3 API

  3. 3

    Google Maps Javascript API V3中的旋转标记

  4. 4

    Google Maps JavaScript API v3 /数据层/ MarkerClusterer

  5. 5

    Google Maps Javascript API v3的标记

  6. 6

    Google Maps Javascript API V3中的旋转标记

  7. 7

    Esri功能服务和Google Maps API v3

  8. 8

    如何使用Google Maps Javascript API V3在加载时设置infoWindow内容

  9. 9

    Google Maps使用自定义Panaromas Javascript API v3阻止街景

  10. 10

    如何使用Google Maps Javascript API V3在加载时设置infoWindow内容

  11. 11

    Google Maps API对多个位置进行地理编码

  12. 12

    在Google Maps API中插入从文件读取的多个位置

  13. 13

    如何使用Google Maps API V3显示多边形和多边形

  14. 14

    使用Google Maps API v3相交多边形和折线

  15. 15

    标记位置未获取-Google Maps API v3

  16. 16

    Google Maps API v3:为什么Google Maps API V3和Google Maps的搜索结果不一致?

  17. 17

    在Google Maps API v3中绘制多个圆圈

  18. 18

    多个图块问题Google Maps API v3 JS

  19. 19

    Google Maps v3 API和WordPress ACF:多个自定义标记

  20. 20

    带有信息窗口和图钉的 Google Maps API v3 多个标记

  21. 21

    更改Google Maps JavaScript API v3以外的地图不透明度

  22. 22

    更改Google Maps JavaScript API v3以外的地图不透明度

  23. 23

    Google Maps Javascript API V3:标记具有相同的标题

  24. 24

    Google Maps JavaScript API v3更改标记并添加卫星视图

  25. 25

    地图标记无法呈现-Phonegap中的Google Maps Javascript API v3

  26. 26

    Google Maps Javascript Api V3 data.remove没有删除功能

  27. 27

    Google Maps Javascript API v3路由迭代

  28. 28

    使地图元素空白,消失(Google Maps JavaScript API,v3)

  29. 29

    在Google Maps Javascript API v3中一次拖动多个多边形

热门标签

归档