gpt4 book ai didi

javascript - 使用谷歌地图 .loadGeoJson、markerclusterer 和 infowindow 中断

转载 作者:行者123 更新时间:2023-12-03 01:38:34 25 4
gpt4 key购买 nike

尝试使用 loadGeoJson 和 MarkerClusterers 点击打开信息窗口。我使用下面的代码是因为我希望能够添加到信息窗口的链接。

https://codepen.io/cbrady97/pen/qKoERJ

<!DOCTYPE html>
<html>
<body>
<div id="map" style="height: 2000px;width: 100%;"></div>

<script>
var infowindow = new google.maps.InfoWindow();
var markers;
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 7,
center: { lat: 42.25, lng: -109.05 },
mapTypeId: 'terrain'
});
map.data.loadGeoJson('https://cors.io/?https://solveatlas.com/s/map-easj.geojson', null, function (features){
markers = features.map(function(feature) {
return new google.maps.Marker({
position: feature.getGeometry().get(0)
});
});
// When the user clicks, open an infowindow
map.data.addListener('click', function(event) {
var feat = event.feature;
var html = "<b>"+feat.getProperty('name')+"</b><br>"+feat.getProperty('description');
html += "<br><a class='normal_link' target='_blank' href='"+feat.getProperty('link')+"'>link</a>";
infowindow.setContent(html);
infowindow.setPosition(event.latLng);
infowindow.setOptions({pixelOffset: new google.maps.Size(0,-34)});
infowindow.open(map);
});
var markerCluster = new MarkerClusterer(map, markers,
{imagePath: 'https://solveatlas.com/s/m'});
});

map.data.setMap(null);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<script src="https://solveatlas.com/s/markerclusterer.js">
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBty3z-bpSUEgG54LF34eu7Sz_4zv7aiss&callback=initMap">
</script>
</body>
</html>

最佳答案

您的代码中存在许多问题:

  1. google.maps.event.addDomListener(window, 'load',initialize); 您的代码中没有 initialize 函数。此外,您正在异步加载 API,并且这不在回调函数内。
  2. 您在加载 API 之前实例化 infowindow(在回调函数之外):var infowindow = new google.maps.InfoWindow();
  3. 您正在从 GeoJson 创建标记,但没有添加点击监听器来向其显示数据,您正在使用 map.data.addListener,但数据层已从 map 中删除(map.data.setMap(null);)。

要使信息窗口出现在标记上,请单击:

  1. InfoWindow 的实例化移至 initMap 函数内。
  2. 为标记创建点击监听器:
map.data.loadGeoJson('https://cors.io/?https://solveatlas.com/s/map-easj.geojson', null, function(features) {
markers = features.map(function(feature) {
var marker = new google.maps.Marker({
position: feature.getGeometry().get(0)
});
// When the user clicks, open an infowindow
marker.addListener('click', function(event) {
var feat = feature;
var html = "<b>" + feat.getProperty('name') + "</b><br>" + feat.getProperty('description');
html += "<br><a class='normal_link' target='_blank' href='" + feat.getProperty('link') + "'>link</a>";
infowindow.setContent(html);
infowindow.open(map, marker);
});
return marker;
});
  • 删除数据层上的点击监听器(不起作用):
  •   // When the user clicks, open an infowindow
    map.data.addListener('click', function(event) {
    var feat = event.feature;
    var html = "<b>"+feat.getProperty('name')+"</b><br>"+feat.getProperty('description');
    html += "<br><a class='normal_link' target='_blank' href='"+feat.getProperty('link')+"'>link</a>";
    infowindow.setContent(html);
    infowindow.setPosition(event.latLng);
    infowindow.setOptions({pixelOffset: new google.maps.Size(0,-34)});
    infowindow.open(map);
    });

    proof of concept fiddle

    enter image description here

    代码片段:

    var infowindow;
    var markers;

    function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 7,
    center: {
    lat: 42.25,
    lng: -109.05
    },
    mapTypeId: 'terrain'
    });
    infowindow = new google.maps.InfoWindow();
    map.data.loadGeoJson('https://cors.io/?https://solveatlas.com/s/map-easj.geojson', null, function(features) {
    markers = features.map(function(feature) {
    var marker = new google.maps.Marker({
    position: feature.getGeometry().get(0)
    });
    // When the user clicks, open an infowindow

    marker.addListener('click', function(event) {
    var feat = feature;
    var html = "<b>" + feat.getProperty('name') + "</b><br>" + feat.getProperty('description');
    html += "<br><a class='normal_link' target='_blank' href='" + feat.getProperty('link') + "'>link</a>";
    infowindow.setContent(html);
    infowindow.open(map, marker);
    });
    return marker;
    });

    var markerCluster = new MarkerClusterer(map, markers, {
    imagePath: 'https://solveatlas.com/s/m'
    });
    });

    map.data.setMap(null);
    }
    html,
    body,
    #map {
    height: 100%;
    width: 100%;
    margin: 0px;
    padding: 0px
    }
    <script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script>
    <script src="https://cdn.rawgit.com/googlemaps/v3-utility-library/master/markerclustererplus/src/markerclusterer.js"></script>
    <div id="map"></div>

    关于javascript - 使用谷歌地图 .loadGeoJson、markerclusterer 和 infowindow 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958559/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com