繁体   English   中英

Google Map API无法正确刷新标记

[英]Google Map API doesn't refresh markers correctly

我正在尝试使用Ajax在Google地图上实时显示多个标记。 Ajax从Web服务函数中获取标记数组,如下所示。 当数组具有1或2个坐标索引时,刷新工作正常。 但是,如果数组具有两个以上的坐标,则问题开始。

例如,如果我要在数组中标记3个点,例如[[23,32],[45,34],[34,34]],那么我的代码将这些点显示在地图上。 然后,如果我更改显示选项,则数组函数将删除其中之一,例如[[23,32],[34,34]],因此,地图上应仅显示两个标记,但地图上仍显示三个标记。 我真的不知道是什么原因导致了问题。 有谁知道如何解决这个问题?

function initMap() {
                var center1 = { lat: 33.9636, lng: -84.1191 };
                var bounds = new google.maps.LatLngBounds();
                var map = new google.maps.Map(document.getElementById('map'), {
                    zoom: 10,
                    center: center1
                });


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

                setInterval(function () {
                    $.ajax({
                        type: "POST",
                        url: "WebService.asmx/read_marker_array",
                        data: '{}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (data) {

                            if (test !== null && test !== '') {
                                if (JSON.stringify(test) !== JSON.stringify(data)) {
                                  alert('UPDATED!!!!!!')
                                    test = data;
                                                                }
                            }
                            else {
                                //alert('LOADED FIRST TIME!!!')
                                test = data;
                            }
                            marker.setMap(null);


                            for (i = 0; i < data.d.length; i++) {



                                var position = new google.maps.LatLng(data.d[i].o_lat, data.d[i].o_lng);

                                bounds.extend(position);

                                marker = new google.maps.Marker({
                                    position: position,
                                    map: map,
                                    title: data.d[i].transNo
                                });
                                var infowindow = new google.maps.InfoWindow();


                                google.maps.event.addListener(marker, 'click', (function (marker, i) {
                                    return function () {
                                        infowindow.setContent(data.d[i].content);
                                        infowindow.open(map, marker);
                                    }
                                })(marker, i));

                            }
                        },
                        error: function () {
                            alert('Connection error111, please retry');
                        }


                    }); //end of ajax
                }, 3000)

遍历并删除标记,然后再使用新数据构建标记,例如。

marker.setMap(null);

//Loop through all the markers and remove
        for (var i = 0; i < map.markers.length; i++) {
            map.markers[i].setMap(null);
        }

for (i = 0; i < data.d.length; i++) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM