【问题标题】:kml layer infowindowkml 图层信息窗口
【发布时间】:2013-02-05 20:56:21
【问题描述】:

我正在努力寻找一种方法来设置此地图上的信息窗口的样式。我尝试通过设置 suppressInfoWindows: true 来抑制信息窗口,但这似乎不起作用。任何想法将不胜感激。我已经阅读了很多谷歌文档和这里的很多其他帖子,但找不到解决方案。

     <script>

var geocoder;
var map; 
var marker;
var layers = [];

function initialize() {
geocoder = new google.maps.Geocoder ();
var latlng = new google.maps.LatLng (51.505288, -0.191544);
var myOptions = {
  zoom: 15,
  disableDefaultUI: true,
  styles: [
        {
           stylers: [

  ]
},

{
  featureType: "poi.park",
  stylers: [
      { color: "#aecfae" },
    { saturation: 0 },
    { lightness: 0 },
    { visibility: "simplified" }



  ]
  },

  {
  featureType: "landscape",
  stylers: [
      { color: "#ffffff" },
    { saturation: 0 },
    { lightness: 0 },
    { visibility: "simplified" }
  ]
},

{
  featureType: "road.highway",
  elementType: "labels",
  stylers: [
    { color: "transparent" },
    { visibility: "off" },

  ]
},

{
  featureType: "water",
  elementType: "geometry.fill",
  stylers: [
    { color: "#a5bfdd" },
    { visibility: "on" },

  ]
},

{
  featureType: "road",
  elementType: "labels",
  stylers: [
    { color: "transparent" },
    { visibility: "off" },

  ]
},

  {
  featureType: "road",
  elementType: "geometry",
  stylers: [
      { color: "#e0e0e0" },
    { saturation: 0 },
    { lightness: 0 },
    { visibility: "simplified" }
  ]
}],
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
    }
  map = new google.maps.Map(document.getElementById("map_canvas"),
    myOptions);

  marker = new google.maps.Marker({map:map});

     layers[0] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/VicarageGate.kml', {preserveViewport: true});

    for (var i = 0; i < layers.length; i++) {
    layers[i].setMap(map);


  }

  layers[1] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/PrimarySchools-1.kml',
         {preserveViewport: true});
  layers[2] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/SecondarySchools-1.kml', {preserveViewport: true});
  layers[3] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/Culture-6.kml', {preserveViewport: true});
  layers[4] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/Hotels-2.kml', {preserveViewport: false});
   layers[5] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/Shopping.kml', {preserveViewport: false});
   layers[6] = new google.maps.KmlLayer('http://www.cid-dev.co.uk/vicarage-phase-2/kml/Restaurants.kml', {preserveViewport: false});
  for (var i = 1; i < layers.length; i++) {
    layers[i].setMap(null);


  }
    }
function codeAddress () {
    var address = document.getElementById ("address").value;
    geocoder.geocode ( { 'address': address}, function(results, status)  {
    if (status == google.maps.GeocoderStatus.OK)  {
        map.setCenter(results [0].geometry.location);
        marker.setPosition(results [0].geometry.location);
        map.setZoom(15);
        } 
    else {
        alert("Geocode was not successful for the following reason: " + status);
            }
}); 
}

function toggleLayer(i) {
  if(layers[i].getMap() === null) {
    layers[i].setMap(map);
  }
  else {
    layers[i].setMap(null);
  }






}


  google.maps.event.addDomListener(window, 'load', initialize);






    </script>



    <div id="map_canvas" style="position:absolute; width:100%; height:100%; top:0px; left:0px; right:0px; bottom:0px; z-index:100; background-color:#000;"></div>

【问题讨论】:

  • 你是如何使用suppressInfoWindows的?我在您发布的代码中没有看到它。
  • 抱歉 geocodezip,我从这段代码中取出了它,我只是使用 {suppressInfoWindows: true}。当我不抑制它们但我想抑制它们以显示样式化的信息窗口时,信息窗口会起作用,如果这有意义的话?而不是 Google 的 API 提供的带有样式的信息窗口
  • 所以您的问题不是“如何抑制现有的 infoWindows”,而是“如何添加自定义 infowindows”?

标签: google-maps-api-3 kml infowindow


【解决方案1】:

禁止自动生成信息窗口,并使用点击事件手动处理数据。

这是一个从信息窗口链接中删除 target="_blank" 属性的示例:http://people.missouristate.edu/chadkillingsworth/mapsexamples/removekmllinktargets.js

【讨论】:

  • 嗨,乍得,感谢您的辛勤工作。我专攻 HTML 和 PHP,我的 Jquery/Javascript 知识还处于起步阶段。我将如何将您的代码集成到我的代码中以提供所需的切换效果,但显示自定义 css 信息窗口? - 亲切的问候,Rob。
  • 相同的概念,您只需在“点击”事件侦听器代码(而不是我的 CommonInfoWindow)中替换您的自定义信息窗口代码。你可以试试 Google Maps Utility Library 的 InfoBubble 类:google-maps-utility-library-v3.googlecode.com/svn/trunk/…
【解决方案2】:

您可以尝试将这样的方法添加到所有标记中。

// generalized click handler
function addClickHandler(item, content, position) {
  google.maps.event.addListener(item, 'click', function () {
    infoWindow.close();
    infoWindow.setContent(content);
    infoWindow.setPosition(position);
    infoWindow.open(map);
  });
}

当我使用 KML 进行样式设置时,

还有一个来自 GOOGLE 的例子

http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobubble/examples/example.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多