我正在做一个项目,我需要在一段时间内(可能跨越 n 天)跟踪销售人员的移动路线。我从移动设备获取存储的位置,我使用 Web 服务将其保存在数据库中。
现在我有一个用于选择销售人员的多选下拉菜单。我将销售人员 ID 作为逗号分隔值传递,并从数据库中获取选定销售人员的纬度和经度。
代码如下。
IList<RadComboBoxItem> Values = rcbSalesPersons.CheckedItems;
string Ids = String.Join(",", rcbSalesPersons.Items.Where(i => i.Checked).Select(i => i.Value).ToList());
List<SalespersonSpatialInfo> lstSpatialInfo = SalespersonSpatialInfo.getSpatialInfo(Ids, Session["StoreID"].ToString(),RadDatePickerFrom.SelectedDate.Value, RadDatePickerTo.SelectedDate.Value);
string jsonString;
if (lstSpatialInfo.Count > 0)
{
jsonString = JsonSerializer<List<SalespersonSpatialInfo>>(lstSpatialInfo);
ScriptManager.RegisterArrayDeclaration(Page, "markers", jsonString);
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "GoogleMap();", true);
}
当我在页面的源代码中注册了 javascript Markers 数组时,现在我使用以下 javascript 函数在地图上绘制点并加入它们
function GoogleMap() {
var mapOptions = {
center: new google.maps.LatLng(markers[0][0].Latitude, markers[0][0].Longitude),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var infoWindow = new google.maps.InfoWindow();
var lat_lng = new Array();
var latlngbounds = new google.maps.LatLngBounds();
for (i = 0; i < markers[0].length; i++) {
var data = markers[0][i];
var myLatlng = new google.maps.LatLng(data.Latitude, data.Longitude);
lat_lng.push(myLatlng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
latlngbounds.extend(marker.position);
(function (marker, data) {
google.maps.event.addListener(marker, "click", function (e) {
infoWindow.setContent(data.description);
infoWindow.open(map, marker);
});
})(marker, data);
}
map.setCenter(latlngbounds.getCenter());
map.fitBounds(latlngbounds);
//***********ROUTING****************//
//Initialize the Path Array
var path = new google.maps.MVCArray();
debugger;
//Initialize the Direction Service
var service = new google.maps.DirectionsService();
//Set the Path Stroke Color
var poly = new google.maps.Polyline({ map: map, strokeColor: '#489615' });
//Loop and Draw Path Route between the Points on MAP
for (var i = 0; i < lat_lng.length; i++) {
if ((i + 1) <= lat_lng.length) {
var src = lat_lng[i];
var des = lat_lng[i + 1];
path.push(src);
poly.setPath(path);
service.route({
origin: src,
destination: des,
travelMode: google.maps.DirectionsTravelMode.TRANSIT
}, function (result, status) {
if (status == google.maps.DirectionsStatus.OK) {
for (var i = 0, len = result.routes[0].overview_path.length; i < len; i++) {
path.push(result.routes[0].overview_path[i]);
}
}
});
}
}
}
我得到以下json
[
{
"DeviceID": null,
"ID_SalesRep": 58,
"Latitude": 22.693519,
"LocationID": 1,
"Longitude": 75.919796,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 58,
"Latitude": 22.701211,
"LocationID": 2,
"Longitude": 75.926846,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 59,
"Latitude": 22.750948,
"LocationID": 3,
"Longitude": 75.895411,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 58,
"Latitude": 22.705804,
"LocationID": 4,
"Longitude": 75.905024,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 58,
"Latitude": 22.711267,
"LocationID": 5,
"Longitude": 75.883073,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 58,
"Latitude": 22.718155,
"LocationID": 6,
"Longitude": 75.883802,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 59,
"Latitude": 22.747032,
"LocationID": 7,
"Longitude": 75.883727,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 58,
"Latitude": 22.726512,
"LocationID": 8,
"Longitude": 75.880881,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
},
{
"DeviceID": null,
"ID_SalesRep": 59,
"Latitude": 22.718927,
"LocationID": 9,
"Longitude": 75.856036,
"StoreID": "xyz",
"TrackingTime": "/Date(1418246100000+0530)/"
}
]
完成后,我还需要为不同的销售人员更改标记和折线的颜色。
现在的问题是,我需要为不同的销售人员显示不同的路线,但它显示了连接两个销售人员位置的单一路线。如果需要,请要求澄清。