如何按纬度和经度设置谷歌地图标记并提供信息泡泡

时间:2011-03-16 00:00:13

标签: javascript html google-maps

以下示例代码由google maps api

提供
          var geocoder;
          var map;
          function initialize() {
            geocoder = new google.maps.Geocoder();
            var latlng = new google.maps.LatLng(40.77627, -73.910965);
            var myOptions = {
              zoom: 8,
              center: latlng,
              mapTypeId: google.maps.MapTypeId.ROADMAP
            }
            map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
          }

以下仅显示没有标记的位置的谷歌地图。 我想知道如何通过给出纬度/经度参数来放置标记? 如何在数据库中存储我自己的信息?

1 个答案:

答案 0 :(得分:31)

以下是JSFiddle Demo,其中介绍了如何通过Lat Lng设置Google地图标记,以及点击时会为您提供信息窗口(气泡):

这是我们带有3个超链接的基本HTML,点击时会在地图上添加标记:

<div id="map_canvas"></div>

<a href='javascript:addMarker("usa")'>Click to Add U.S.A</a><br/>
<a href='javascript:addMarker("brasil")'>Click to Add Brasil</a><br/>
<a href='javascript:addMarker("argentina")'>Click to Add Argentina</a><br/>

首先我们设置2个全局变量。一个用于地图,另一个用于保存我们的标记:

var map;
var markers = [];

这是我们创建谷歌地图的初始化:

function initialize() {
    var latlng = new google.maps.LatLng(40.77627, -73.910965);
    var myOptions = {
        zoom: 1,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

然后我们创建3个lat lng位置,我们想要放置标记:

var usa = new google.maps.LatLng(37.09024, -95.712891);
var brasil = new google.maps.LatLng(-14.235004, -51.92528);
var argentina = new google.maps.LatLng(-38.416097, -63.616672);

这里我们创建一个函数来根据传递给它的任何东西添加我们的标记。 myloc将是美国,巴西或阿根廷,然后我们根据传递的参数创建标记。在addMarker函数中,我们检查并确保我们不通过调用for循环在地图上创建重复标记,如果我们已经创建了传递的param,那么我们返回函数并且什么都不做,否则我们创建标记并将其推送到全局标记数组。创建标记之后,我们通过执行markers[markers.length-1]['infowin'] markers来附加信息窗口及其相关标记.length-1基本上是在数组上获取新推送的标记。在信息窗口中,我们使用html设置内容。这基本上是您放入气泡或信息窗口的信息(它可以是您可以使用天气API等填充的天气信息)。在附加信息窗口后,我们使用Google Map API的addListener附加一个onclick事件监听器,当点击标记时,我们想通过调用this['infowin'].open(map, this)打开与之关联的信息窗口,其中地图是我们的全球地图这是我们目前将onclick事件与。

关联的标记
function addMarker(myloc) {
    var current;
    if (myloc == 'usa') current = usa;
    else if (myloc == 'brasil') current = brasil;
    else if (myloc == 'argentina') current = argentina;
    for (var i = 0; i < markers.length; i++)
    if (current.lat() === markers[i].position.lat() && current.lng() === markers[i].position.lng()) return;

    markers.push(new google.maps.Marker({
        map: map,
        position: current,
        title: myloc
    }));

    markers[markers.length - 1]['infowin'] = new google.maps.InfoWindow({
        content: '<div>This is a marker in ' + myloc + '</div>'
    });

    google.maps.event.addListener(markers[markers.length - 1], 'click', function() {
        this['infowin'].open(map, this);
    });
}

当一切完成后,我们基本上附加window.onload事件并调用初始化函数:

window.onload = initialize;