Javascript 谷歌地图让搜索标记打开信息窗口

Javascript 谷歌地图让搜索标记打开信息窗口,javascript,google-maps-api-3,Javascript,Google Maps Api 3,下面的地图有一个内置的搜索功能,在提交搜索时会删除pin 地图还有一个GeoJson层,如果单击该层,将打开一个信息窗口 目前,信息窗口只能在用户手动单击多边形时打开 有没有可能这样,当用户搜索一个地址时,比如说“Calgary Canada”,当pin丢失时,它会自动打开信息窗口 如果标记下没有多边形,则不应打开任何对象 //此示例使用Google Place Autocomplete将搜索框添加到地图中 //特色。人们可以进入地理搜索。搜索框将返回一个 //包含位置和预测搜索词组合的拾取列

下面的地图有一个内置的搜索功能,在提交搜索时会删除pin

地图还有一个GeoJson层,如果单击该层,将打开一个信息窗口

目前,信息窗口只能在用户手动单击多边形时打开

有没有可能这样,当用户搜索一个地址时,比如说“Calgary Canada”,当pin丢失时,它会自动打开信息窗口

如果标记下没有多边形,则不应打开任何对象

//此示例使用Google Place Autocomplete将搜索框添加到地图中
//特色。人们可以进入地理搜索。搜索框将返回一个
//包含位置和预测搜索词组合的拾取列表。
//此示例需要Places库。包括图书馆=地方
//第一次加载API时的参数。例如:
// 
函数initAutocomplete(){
var map=new google.maps.map(document.getElementById('map'){
缩放:5,
中心:{lat:49.656963,lng:-112.506664},
mapTypeId:“路线图”,
手势处理:“贪婪”
});
map.data.loadGeoJson('https://api.npoint.io/a5cec0395277a59090e7');
//将每个字母涂成灰色。当isColorful属性
//设置为true。
map.data.setStyle(函数(特性){
var color=feature.getProperty('color');
return/**@type{!google.maps.Data.StyleOptions}*/({
fillColor:color,
strokeColor:'黑色',
冲程重量:2
});
});
//带有健康区域名称和社区归属感得分的弹出窗口
var infoWindow=new google.maps.infoWindow({
zIndex:2
});
map.data.addListener('click',函数(事件){
map.data.revertStyle();
overrideStyle(event.feature,{strokeWeight:2,strokeColor:'black',zIndex:1});
var CDNAME=event.feature.getProperty('CDNAME');
var COLOR=event.feature.getProperty('COLOR');
infoWindow.setPosition(event.latLng);
infoWindow.setOptions({
像素偏移:{宽度:0,高度:-3}
});
infoWindow.setContent(
“CDNAME:”+CDNAME+“
“+ “颜色:”+颜色+“” ); 打开(地图); }); //创建搜索框并将其链接到UI元素。 var input=document.getElementById('pac-input'); var searchBox=newgoogle.maps.places.searchBox(输入); map.controls[google.maps.ControlPosition.TOP_LEFT].push(输入); //将搜索框结果偏向当前地图的视口。 addListener('bounds_changed',function(){ searchBox.setBounds(map.getBounds()); }); var标记=[]; //侦听用户选择预测并检索时激发的事件 //关于那个地方的更多细节。 searchBox.addListener('places\u changed',function(){ var places=searchBox.getPlaces(); 如果(places.length==0){ 回来 } //清除旧的标记。 markers.forEach(函数(marker){ marker.setMap(空); }); 标记=[]; //对于每个位置,获取图标、名称和位置。 var bounds=new google.maps.LatLngBounds(); 地点。forEach(功能(地点){ 如果(!place.geometry){ log(“返回的位置不包含几何图形”); 回来 } 变量图标={ 网址:'http://maps.google.com/mapfiles/ms/icons/blue.png', 尺寸:新谷歌地图尺寸(50,75), 来源:新google.maps.Point(0,0), 主持人:新谷歌地图点(25,75) }; //为每个地方创建一个标记。 markers.push(新的google.maps.Marker)({ 地图:地图, 图标:图标, 标题:place.name, 位置:place.geometry.location, 动画:google.maps.animation.DROP })); if(place.geometry.viewport){ //只有地理代码具有视口。 联合(place.geometry.viewport); }否则{ 扩展(place.geometry.location); } }); 映射边界(bounds); }); }
/*始终明确设置贴图高度以定义div的大小
*包含映射的元素*/
#地图{
身高:100%;
}
/*可选:使示例页面填充窗口*/
html,正文{
身高:100%;
保证金:0;
填充:0;
}
#描述{
字体系列:Roboto;
字体大小:15px;
字体大小:300;
}
#infowindowcontent.title{
字体大小:粗体;
}
#信息窗口内容{
显示:无;
}
#地图#信息窗口内容{
显示:内联;
}
.pac卡{
利润率:10px 10px 0;
边界半径:2px 0 0 2px;
框大小:边框框;
-moz框大小:边框框;
大纲:无;
盒影:0 2px 6px rgba(0,0,0,0.3);
背景色:#fff;
字体系列:Roboto;
}
#pac容器{
垫底:12px;
右边距:12px;
}
.pac控制{
显示:内联块;
填充:5px11px;
}
.pac控制标签{
字体系列:Roboto;
字体大小:13px;
字号:30
  map.data.loadGeoJson('https://api.npoint.io/a5cec0395277a59090e7', null, function(features) {
    jsonFeatures = features;
  });
  // Create a marker for each place.
  var marker = new google.maps.Marker({
    map: map,
    icon: icon,
    title: place.name,
    position: place.geometry.location,
    animation: google.maps.Animation.DROP
  });
  markers.push(marker);
  for (var i = 0; i < jsonFeatures.length; i++) {
    console.log(jsonFeatures[i].getGeometry().getType());
    if (jsonFeatures[i].getGeometry().getType() == "Polygon") {
      console.log("Polygon");
      var polygon = new google.maps.Polygon({
        paths: jsonFeatures[i].getGeometry().getArray()[0].getArray()
      });
      if (google.maps.geometry.poly.containsLocation(place.geometry.location, polygon)) {
        marker.feature = jsonFeatures[i];
        console.log("polygon[" + i + "] contains " + place.geometry.location.toUrlValue(6));
        // openInfoWindow(place.geometry.location, jsonFeatures[i], marker);
        marker.addListener('click', function(evt) {
          openInfoWindow(place.geometry.location, this.feature, this);
        });
        google.maps.event.trigger(marker, 'click');
      }
    }
  }
  map.data.addListener('click', function(event) {

    map.data.revertStyle();
    map.data.overrideStyle(event.feature, {
      strokeWeight: 2,
      strokeColor: 'black',
      zIndex: 1
    });
    openInfoWindow(event.latLng, event.feature);
  });

  function openInfoWindow(latLng, feature, marker) {
    var CDNAME = feature.getProperty('CDNAME');
    var COLOR = feature.getProperty('COLOR');
    if (marker == null) {
      infoWindow.setPosition(latLng);
    } else {
      infoWindow.setOptions({
        pixelOffset: null
      });
    }
    infoWindow.setContent(
      "CDNAME: <b>" + CDNAME + "</b><br />" +
      "COLOR: <b>" + COLOR + "</b>"
    );
    infoWindow.open(map, marker);
  }