谷歌地图V3将中心设置为特定标记

问题描述 投票:0回答:7

我正在使用 Google Map V3 显示从数据库中提取的标记列表,使用 MYsql 和 PHP。 我的标记是使用完整地址(来自数据库,包括邮政编码)在地图上设置的,因为我没有长、纬度信息 一切正常,我的循环如下所示

while...
Addmarker(map,'MY ADdress','Title');
end while;

现在我想将地图设置为循环中包含的特定标记,该标记将与之前输入的邮政编码相匹配。 如何将地图设置为以该标记为中心并打开信息窗口?

google-maps google-maps-api-3
7个回答
67
投票

地图上有标记后,您可以通过 API 检索纬度/经度坐标,并使用它来设置地图的中心。您首先需要确定您希望以哪个标记为中心 - 我将把它留给您。

// "marker" refers to the Marker object you wish to center on

var latLng = marker.getPosition(); // returns LatLng object
map.setCenter(latLng); // setCenter takes a LatLng object

信息窗口是单独的对象,通常绑定到标记,因此要打开信息窗口,您可以执行以下操作(但这取决于您的代码):

var infoWindow = marker.infoWindow; // retrieve the InfoWindow object
infoWindow.open(map); // Trigger the "open()" method

希望这有帮助。


42
投票

以@6twenty的答案为基础...我更喜欢panTo(LatLng)而不是setCenter(LatLng),因为panTo动画可以更平滑地过渡到中心“如果变化小于地图的宽度和高度”。 https://developers.google.com/maps/documentation/javascript/reference#Map

以下使用 Google Maps API v3。

var marker = new google.maps.Marker({
    position: new google.maps.LatLng(latitude, longitude),
    title: markerTitle,
    map: map,
});
google.maps.event.addListener(marker, 'click', function () {
    map.panTo(marker.getPosition());
    //map.setCenter(marker.getPosition()); // sets center without animation
});

21
投票

这应该可以解决问题!

google.maps.event.trigger(map, "resize");
map.panTo(marker.getPosition());
map.setZoom(14);

您需要让您的地图全球化


3
投票

也许这会有所帮助:

map.setCenter(window.markersArray[2].getPosition());

所有标记信息都在markersArray数组中,并且是全局的。因此您可以使用 window.variablename 从任何地方访问它。每个标记都有一个唯一的 id,您可以将该 id 放入数组的键中。所以你创建这样的标记:

window.markersArray[2] = new google.maps.Marker({
            position: new google.maps.LatLng(23.81927, 90.362349),          
            map: map,
            title: 'your info '  
        });

希望这会有所帮助。


1
投票
geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      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);
    }
  });

1
投票

如果您想将地图居中到标记上并且您有坐标,例如单击列表项并且地图应以该坐标为中心,则以下代码将起作用:

HTML 中:

<ul class="locationList" ng-repeat="LocationDetail in coordinateArray| orderBy:'LocationName'">
   <li>
      <div ng-click="focusMarker(LocationDetail)">
          <strong><div ng-bind="locationDetail.LocationName"></div></strong>
          <div ng-bind="locationDetail.AddressLine"></div>
          <div ng-bind="locationDetail.State"></div>
          <div ng-bind="locationDetail.City"></div>
      <div>
   </li>
</ul>

在控制器中:

$scope.focusMarker = function (coords) {
    map.setCenter(new google.maps.LatLng(coords.Latitude, coords.Longitude));
    map.setZoom(14);
}

位置对象:

{
    "Name": "Taj Mahal",
    "AddressLine": "Tajganj",
    "City": "Agra",
    "State": "Uttar Pradesh",
    "PhoneNumber": "1234 12344",
    "Latitude": "27.173891",
    "Longitude": "78.042068"
}

0
投票

自 API 3.5x 起,使用 AdvancedMakerElement(或 PinElement) 锚点属性不再可用,锚点默认位于图像标记的底部中心。添加 img 'style' 允许在标记的中心设置锚点。

// Request needed libraries.
const { Map } = await google.maps.importLibrary("maps");
const { AdvancedMarkerElement } = await google.maps.importLibrary(
    "marker");
const map = new Map(document.getElementById("map"), {
    center: { lat: 37.42475, lng: -122.0845 },
    zoom: 13,
    mapId: "4504f8b37365c3d0",
});
const mapPin = document.createElement("img");
mapPin.src = "mymarker.png";
mapPin.style.transform = "translateY(50%)";
const marker = new AdvancedMarkerElement({
  position: { lat: 37.42475, lng: -122.0845 },
  map: map,
  content: mapPin,
  title: "my marker"
  });

注意:我不知道这是否会影响碰撞行为。

© www.soinside.com 2019 - 2024. All rights reserved.