正しい用語を使用しているかどうかはわかりませんが、これが私がやろうとしていることです...Googleマップをロードし、作成されたJSONデータからマーカーを追加するasp.netページがありますコード ビハインド ページのメソッド。最初にロードされたときはすべて正常に動作します。ただし、ボタンをクリックして関数 refreshTheMarkers() を呼び出すと、populateTheMap 関数 (コードの 3 行目) の「トラック」変数は更新された JSON 文字列を取得せず、ページが表示されたときと同じ JSON 文字列のままです。最初にロードされます。ConvertDataTabletoString メソッドを「強制的に」更新する方法はありますか?
<script type="text/javascript">
var map;
var infoWindow;
var markersArray = [];
var sbarDiv;
var trucks;
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(50.08, -82.8),
zoom: 11,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
infoWindow = new google.maps.InfoWindow();
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
sbarDiv = document.getElementById('sbDivMain');
populateTheMap(true);
}
function populateTheMap(onStartup) {
clearExistingMarkers();
var sbarhtml = '';
trucks = JSON.parse('<%=ConvertDataTabletoString() %>');
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < trucks.length; i++) {
var truck = trucks[i];
var point = new google.maps.LatLng(parseFloat(truck.Latitude), parseFloat(truck.Longitude));
bounds.extend(point);
var marker = createMarker(point, truck);
var sidebarEntry = createSidebarEntry(marker, truck);
sbarDiv.appendChild(sidebarEntry);
}
// Center the map only on startup
if (onStartup) {
var pointCenter = bounds.getCenter();
var iZoomLevel = map.fitBounds(bounds);
if (iZoomLevel > 15) { iZoomLevel = 15; }
map.setCenter(pointCenter, iZoomLevel);
}
}
function refreshTheMarkers() {
clearExistingMarkers();
populateTheMap(false);
}
function clearExistingMarkers() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
//clear side bar entries
sbarDiv.innerHTML = '';
}
// plus some additional code...
これがコードビハインドページです...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
namespace LiveCadWebApp
{
public partial class GPSTracking : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// Convert the DataTable to a JSON string
public string ConvertDataTabletoString()
{
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(@"Server=.\SQLExpress;Database=MyDatabase;Trusted_Connection=True;"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM vwTruckGPSStatusInformation", con))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
return GetJSONFromDataTable(dt);
}
}
}
基本的に私がやりたいことは、Googleマップをリロードせずに数秒ごとにマーカーをリロードすることです...