仅更新折线而不是整个地图

时间:2015-03-26 12:58:10

标签: javascript c# asp.net-mvc google-maps setinterval

我正在尝试创建一个ASP.NET页面,可以使用Google Maps API跟踪当前用户的路由。问题在于,每当我使用间隔绘制折线时,整个Google地图刷新都会导致页面闪烁。

这是我的代码:

 <script>
    //declare variables
    var interval;
    var coordinates = [];
    var x = document.getElementById("exception");

    //Get current position and loop this
    function getLocation() {
        //Check if the user has a geolocation
        if (navigator.geolocation) {
            interval = setInterval(function () { navigator.geolocation.getCurrentPosition(showPosition); }, 500);
        } else {
            x.innerHTML = "Geolocation is not supported by this browser.";
        }
    }

    //Get the latitude and longitude and draw a polylin
    function showPosition(position) {
        console.log(position.coords.latitude + " " + position.coords.longitude);

        //Map options for the Google map and center the current position
        var mapOptions = {
            zoom: 15,
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude)
        }

        //Add the options to the google map and display it
        var map = new google.maps.Map(document.getElementById("mapDiv"), mapOptions);

        //Create a marker for the current position
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            title: "Current position!"
        });

        // To add the marker to the map, call setMap();
        marker.setMap(map);

        //Add the current coordinates to the array
        coordinates.push(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));

        //Create a polyline with the coordinates array
        var flightPath = new google.maps.Polyline({
            path: coordinates,
            geodesic: true,
            strokeColor: '#FF0000',
            strokeOpacity: 1.0,
            strokeWeight: 2
        });

        //To add the polylin to the map, call setMap();
        flightPath.setMap(map);
    }

    //Stop the interval
    $("#stop").click(function () {
        clearInterval(interval);
        coordinates = [];
    });
</script>

提前致谢, 布伦特

1 个答案:

答案 0 :(得分:1)

地图闪烁,因为每次运行showPosition时都会重新创建它。你应该把你的地图变量设为全局,并且只在页面加载时设置一次。类似地,您应该将您的标记和flightPath变量设置为全局,并确保在使用marker.setMap(null)和flightPath.setMap(null)重新创建它们之前从地图中删除它们,或者甚至更好地使用新位置更新它们信息。