从数据库接收多个ID以在Google地图中创建多条折线

时间:2012-01-27 06:09:04

标签: php javascript ajax google-maps

我正在制作一个Android应用程序,将GPS坐标发送到显示用户位置(和移动)的Web应用程序,并每秒更新一次。我需要允许地图同时显示和更新多个用户的位置,但我不确定如何执行此操作。当用户按下按钮时,生成随机数以识别该人。坐标连同ID一起连续发送到数据库。地图程序每秒使用AJAX拉取位置并更新地图上的位置。一切正常。

我需要做的是让程序检查新的ID,如果找到新的ID,为该用户创建一个新的折线,并不断实时更新所有用户的位置。我知道JavaScript没有类,但可以用函数创建。下面是我的代码,如果有人可以指出我的方向,主要是在哪里以及如何制作这个“课程”。

     function initialize() {
    var myLatlng = new google.maps.LatLng(latitude, longitude);
    var myOptions = {
        zoom: 6,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    }


    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    var points = [];//new google.maps.LatLng(35, -75)];           
      $(function () {
        $(document).ready(function(){
            setInterval(function(){
                $.ajax({                                      
                    url: 'api.php',                  //the script to call to get data          
                    data: "",                        //you can insert url arguments here to pass to api.php for example "id=5&parent=6"
                    dataType: 'json',                //data format      
                    success: function(data){          //on recieve of reply                          
                        lati = data[1];              //get id
                        longi = data[2];           //get name
                        var myLatlngt = new google.maps.LatLng(lati, longi);

                        points.push(new google.maps.LatLng(lati, longi));

                        var polyline = new google.maps.Polyline({
                            map: map,
                            path: points,
                            strokeColor: "#FF0000",
                            strokeOpacity: 1.0,
                            strokeWeight: 2
                            });
                        polyline.setMap(map);

                        //var image = 'icon.png';
                        var marker = new google.maps.Marker({
                            position: myLatlngt,
                            title:"Hello World!",
                            //icon: image
                        });
                        marker.setMap(map);

                    } 
                });
            }, 1000);
        });
    });

'api,php'是从数据库中提取元组的文件,lati = data[1]是从返回的数组中提取的纬度。

1 个答案:

答案 0 :(得分:1)

您的示例每秒只会绘制一条折线。您应该能够发送当前地图边界的所有新折线,删除旧折线,并填充新折线。

删除折线:

polyline.setMap(null);

接收当前地图边界的折线:

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var coord_xpos = northEast.lng();
var coord_xneg = southWest.lng();
var coord_ypos = northEast.lat();
var coord_yneg = southWest.lat();

ajax应该发送“data”变量,如:

$.ajax({
data: {coord_xpos: coord_xpos, coord_xneg: coord_xneg, coord_ypos: coord_ypos, coord_yneg: coord_yneg}