C# 如何刷新谷歌标记的纬度和经度?

C# 如何刷新谷歌标记的纬度和经度?,c#,javascript,google-maps,google-maps-api-3,C#,Javascript,Google Maps,Google Maps Api 3,我的卡车每10秒向SQL发送一次Lat和Lng,如下表所示 dbo.Trucks ID readTime TruckID Lat Lng 1 2014-01-24 18:02:47.983 78 36,785 35,4672 2 2014-01-24 18:03:11.983 78 34

我的卡车每10秒向SQL发送一次Lat和Lng,如下表所示

 dbo.Trucks

ID    readTime                      TruckID          Lat             Lng

1     2014-01-24  18:02:47.983        78             36,785          35,4672

2     2014-01-24  18:03:11.983        78             34,785          37,341

3     2014-01-24  18:03:45.541        78             31,785          34,242

.  

.

780   2014-01-24  22:42:45.541         .                .               .
我通过使用JSON.Parse从SQL获取数据在google地图上创建了标记。但我想刷新标记并在地图上移动它们。不像按F5。带有计时器或超时。我不知道如何在这些代码中使用计时器或超时

源代码:

C


这里的典型方法是让JavaScript每隔N秒在服务器上定期轮询一些JSON API以获取更新的位置。简单的方法是在每次投票时下载完整的标记集。从这里,您可以优化到只发送已移动卡车的新位置。还可以发送地图的东北角/西南角边界,以将查询向下过滤到当前地图视口中可见的卡车

JavaScript轮询通常通过XHR XMLHttpRequest(又名AJAX)完成

JavaScript代码大致类似于:

var delay = 10 * 1000 /* milliseconds per second */;
var markers = [];  // an array of google.maps.Marker instances

function poll() {
  var req = new XMLHttpRequest();
  req.open('GET', 'http://www.mozilla.org/', true);
  req.onreadystatechange = function (aEvt) {
  if (req.readyState == 4) {
    if(req.status == 200)
      redraw(req.responseText);
    else
      alert("Error loading data\n");
    }
    // queue the next polling request
    window.setTimeout(poll, delay);
  };
  req.send(null);
}

// start the polling queue
poll();

// handles updating any changed markers in the global markers array
function redraw(response) {
   var data = JSON.parse(response); 

   // assume data looks something like `[ {id: 1, latitude: 10, longitude: 20 } ]`
   data.forEach(function(item) {
     markers.some(function(marker) {
       if (marker.id === item.id) {
          marker.setPosition(new google.maps.LatLng(item.latitude, item.longitude));
          return true;
       }
     });
   });
 }
这段代码与完整的解决方案相去甚远,但希望它能触及主要概念。请注意,Google Maps API v3没有查询地图画布上标记的方法。您必须通过一些变量(最好不是上面提到的全局变量)自己维护标记的集合。您可以使用window.setTimeout每N毫秒调用一个函数。与递归类似,setTimeout调用的函数在完成时将一个新的超时排队返回给自己


一种更复杂的方法是使用WebSocket将位置上的更改事件推送到浏览器,尽管这需要更高级的技能。您需要Windows Server 2012来支持WebSocket。

可能重复谢谢,但我不清楚。可能重复我正在使用asp.net和sql,先生
public string OnlineTrucks() {

DataTable dt = new DataTable();

    using (SqlConnection con = new SqlConnection("Data 
Source=localhost;Initial Catalog=MyDB;Integrated Security=true"))
{   
    using (SqlCommand cmd = new SqlCommand("select 
title=TruckID,lat=Lat,lng=Lat from Trucks", con))
{

con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);

    System.Web.Script.Serialization.JavaScriptSerializer serializer = new 
System.Web.Script.Serialization.JavaScriptSerializer();
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row;

    foreach (DataRow dr in dt.Rows)
    {

    row = new Dictionary<string, object>();

    foreach (DataColumn col in dt.Columns)

    {

    row.Add(col.ColumnName, dr[col]);

    }

    rows.Add(row);

    }

    return serializer.Serialize(rows);

    }

    }

    }
var delay = 10 * 1000 /* milliseconds per second */;
var markers = [];  // an array of google.maps.Marker instances

function poll() {
  var req = new XMLHttpRequest();
  req.open('GET', 'http://www.mozilla.org/', true);
  req.onreadystatechange = function (aEvt) {
  if (req.readyState == 4) {
    if(req.status == 200)
      redraw(req.responseText);
    else
      alert("Error loading data\n");
    }
    // queue the next polling request
    window.setTimeout(poll, delay);
  };
  req.send(null);
}

// start the polling queue
poll();

// handles updating any changed markers in the global markers array
function redraw(response) {
   var data = JSON.parse(response); 

   // assume data looks something like `[ {id: 1, latitude: 10, longitude: 20 } ]`
   data.forEach(function(item) {
     markers.some(function(marker) {
       if (marker.id === item.id) {
          marker.setPosition(new google.maps.LatLng(item.latitude, item.longitude));
          return true;
       }
     });
   });
 }