0

我想创建一个谷歌地图绘图仪,它从数据库中获取 GPS 值并使用标记将位置放在谷歌地图上。我已经有一张基本地图,它在指定位置显示了一个标记。这很好用,并获取显示在地图上的初始位置。

我遍历数据库并获取最新条目。我也以这种方式刷新地图:

function keepAlive()
{
    <%
        gps = new Gps();

        coordinates = gps.getCoordinates();

//                        out.print(
//                            String.format(
//                                    "alert(%s, %s);",
//                                    new Object[]
//                                    {
//                                        gps.getLatitude(coordinates),
//                                        gps.getLongitude(coordinates)
//                                    }));

        out.print(
            String.format(
                    "var newLatlng = new google.maps.LatLng(%s, %s);",
                    new Object[]
                    {
                        gps.getLatitude(coordinates),
                        gps.getLongitude(coordinates)
                    }));
    %>

    map.setCenter(newLatLng);
    marker.push(newLatLng);
}

setInterval(keepAlive, 10000);

Gps 是一个 Java 类,负责完成繁重的工作,并返回数据库中的最新记录

刷新工作,因为如果我取消注释警报,它会在每 10 秒后不断弹出对话框。问题是没有新数据被获取并且它不断弹出旧数据。问题可能是什么?

4

1 回答 1

0

我解决了这个问题。这个想法不是在 JavaScript 中动态设置变量,而是让其他 JSP 页面获取数据,调用 JSP 页面并使用 JQuery 加载值

这是现在的功能:

function refreshMap()
                {
                    $.ajax({
                        async: false,
                        type: 'GET',
                        url: 'lat.jsp',
                        success: function(data) {
                            newLat = data;
                        }
                    });

                    $.ajax({
                        async: false,
                        type: 'GET',
                        url: 'long.jsp',
                        success: function(data) {
                            newLong = data;
                        }
                    });

                    $.ajax({
                        async: false,
                        type: 'GET',
                        url: 'oldlat.jsp',
                        success: function(data) {
                            oldLat = data;
                        }
                    });

                    $.ajax({
                        async: false,
                        type: 'GET',
                        url: 'oldlong.jsp',
                        success: function(data) {
                            oldLong = data;
                        }
                    });


                    var lineCoordinates = [
                        new google.maps.LatLng(oldLat, oldLong),
                        new google.maps.LatLng(newLat, newLong),
                    ];

                    lineSymbol = null;

                    // Define the symbol, using one of the predefined paths ('CIRCLE')
                    lineSymbol = {
                        path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
                        scale: 4,
                        strokeColor: '#0000FF',
                        fillColor: '#0000FF',
                        fillOpacity: 1,
                    };

                    // Create the polyline and add the symbol to it via the 'icons' property.
                    line = new google.maps.Polyline({
                        path: lineCoordinates,
                        icons: [{
                                icon: lineSymbol,
                                offset: '100%'
                            }],
                        strokeOpacity: 0,
                        map: map
                    });

                    map.setCenter(new google.maps.LatLng(newLat, newLong));
                }

lat.jsp/long.jsp 从数据库中返回新的 GPS 坐标。循环使用with函数setInterval(refreshMap, 5000);使地图动态刷新地图而不刷新整个页面

于 2013-11-12T11:35:53.703 回答