与Google的“我的地图”

时间:2016-07-26 14:14:35

标签: javascript google-maps google-maps-api-3 google-maps-markers

我使用Google's My Maps创建了自己的地图。我做了一个新图层,并在上面放了一些标记 是否可以与这些标记进行交互?

我想做什么"迭代"按时间顺序排列这些标记 请考虑以下地图:Remote Islands of the World 我会按一下按钮" Next"在我的网站上。每当用户点击按钮时,地图就会从" Bouvet Island"到了" St Helena",再次点击它跳到" Izu Islands - Miyakejima"等

我甚至不知道它是否可能或在何处找到有关如何实现它的更多信息。

1 个答案:

答案 0 :(得分:0)

一种选择是创建Google Maps Javascript API v3地图,并通过代理使用第三方KML解析器(如geoxml3)从MyMaps访问KML数据。

example(使用geoxml3在侧边栏中显示KML点名称,但可以修改它以添加按顺序排列的“下一个”按钮)。

example with "next"/"previous" links in infowindow and next button above the map

useTheData函数中添加了此代码(以及多边形和折线的等价物):

if (placemark.marker) {
  google.maps.event.addListener(placemark.marker, 'click', function(i) {

    return function(evt) {
    // add next and previous links to infowindow when the placemark is clicked
    infowindow.setContent(infowindow.getContent()+"<br><a href='javascript:next("+i+");'>next</a>&nbsp;-&nbsp;<a href='javascript:prev("+i+");'>previous</a>");
    // track the last opened placemark 
    openInfoWindow = i;
  }}(i));

然后这些函数打开下一个infowindow:

function next(i) {
  var next = (i+1) % geoXmlDoc.placemarks.length;
  if (geoXmlDoc.placemarks[next].marker) {
   google.maps.event.trigger(geoXmlDoc.placemarks[next].marker, "click");
  } else if (geoXmlDoc.placemarks[next].polyline) {
   google.maps.event.trigger(geoXmlDoc.placemarks[next].polyline, "click");
  } else if (geoXmlDoc.placemarks[next].polygon) {
   google.maps.event.trigger(geoXmlDoc.placemarks[next].polygon, "click");
  }
}
function nextBtn() {
  // handle case where button is clicked before any placemarks on the map
  if (!openInfoWindow) openInfoWindow = 0;
  next(openInfoWindow);     
}

请注意,由于geoxml3使用XmlHttpRequest来访问数据,因此必须在显示页面的域上使用代理,以克服对XmlHttpRequest的相同域限制。