You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
5.7 KiB
181 lines
5.7 KiB
L.TileLayer.GoogleBase = L.TileLayer.extend({
|
|
getTileUrl: function (coords) {
|
|
return '/Beijing/GetMap?type=47626774&zoom={0}&x={1}&y={2}'.format(coords.z, coords.x, coords.y);
|
|
}
|
|
});
|
|
|
|
L.TileLayer.GoogleDetail = L.TileLayer.extend({
|
|
getTileUrl: function (coords) {
|
|
return '/Beijing/GetMap?type=1024577166&zoom={0}&x={1}&y={2}'.format(coords.z, coords.x, coords.y);
|
|
}
|
|
});
|
|
|
|
L.tileLayer.googleBase = function () {
|
|
return new L.TileLayer.GoogleBase();
|
|
};
|
|
|
|
L.tileLayer.googleDetail = function () {
|
|
return new L.TileLayer.GoogleDetail();
|
|
};
|
|
|
|
var Map = function (parent) {
|
|
this.Parent = parent;
|
|
this.PointsLayer = null;
|
|
this.TimePointLayer = null;
|
|
this.TimeTextLayer = null;
|
|
|
|
this.Startup = function () {
|
|
this.CreateMap();
|
|
};
|
|
|
|
this.CreateMap = function () {
|
|
this.map = L.map('map', {
|
|
zoomControl: false,
|
|
minZoom: 4,
|
|
maxZoom: 14,
|
|
zoomDelta: 0.05
|
|
}).setView([39.915, 116.404], 9);
|
|
|
|
L.tileLayer.googleBase().addTo(this.map);
|
|
L.tileLayer.googleDetail().addTo(this.map);
|
|
$('.leaflet-control-attribution').hide();
|
|
|
|
this.icon = L.icon({
|
|
iconSize: [64, 64],
|
|
iconAnchor: [24, 48],
|
|
iconUrl: '../Content/Images/TianAnMen.png'
|
|
});
|
|
L.marker([39.908, 116.396], { icon: this.icon }).addTo(this.map);
|
|
};
|
|
|
|
this.CenterMap = function () {
|
|
this.map.setView([39.915, 116.404], 9);
|
|
};
|
|
|
|
this.ReloadData = function (time) {
|
|
// Create points layer
|
|
if (this.PointsLayer !== null)
|
|
this.map.removeLayer(this.PointsLayer);
|
|
|
|
$.getJSON("http://{0}/bj/getdaily/{1}.json".format(Config.ApiRoot, time)).done(function (data) {
|
|
this.PointsLayer = this.CreatePointsLayer(data);
|
|
this.map.addLayer(this.PointsLayer);
|
|
}.bind(this)).fail(function (jqxhr, status, error) {
|
|
swal({
|
|
title: "",
|
|
text: "Json文件加载失败: Status={0}, Error={1}".format(status, error),
|
|
type: "error",
|
|
icon: "error",
|
|
showCancelButton: false,
|
|
confirmButtonText: "确定",
|
|
closeOnConfirm: true
|
|
});
|
|
}.bind(this));
|
|
|
|
// Create times layer
|
|
if (this.TimePointLayer !== null)
|
|
this.map.removeLayer(this.TimePointLayer);
|
|
|
|
if (this.TimeTextLayer !== null)
|
|
this.map.removeLayer(this.TimeTextLayer);
|
|
|
|
//$.getJSON("/Content/2019092300_traj.json".format(Config.ApiRoot, time)).done(function (data) {
|
|
$.getJSON("http://{0}/bj/getdaily/{1}_traj.json".format(Config.ApiRoot, time)).done(function (data) {
|
|
this.TimePointLayer = this.CreateTimePointLayer(data);
|
|
this.map.addLayer(this.TimePointLayer);
|
|
|
|
this.TimeTextLayer = this.CreateTimeTextLayer(data);
|
|
this.map.addLayer(this.TimeTextLayer);
|
|
}.bind(this)).fail(function (jqxhr, status, error) {
|
|
swal({
|
|
title: "",
|
|
text: "时间点Json文件加载失败: Status={0}, Error={1}".format(status, error),
|
|
type: "error",
|
|
icon: "error",
|
|
showCancelButton: false,
|
|
confirmButtonText: "确定",
|
|
closeOnConfirm: true
|
|
});
|
|
}.bind(this));
|
|
};
|
|
|
|
this.CreateTimePointLayer = function (points) {
|
|
var features = new L.FeatureGroup();
|
|
|
|
$(points).each(function (index, point) {
|
|
var circle = L.circleMarker([point.lat, point.lon], {
|
|
opacity: 1,
|
|
weight: 1,
|
|
color: 'black',
|
|
fillColor: '#fff',
|
|
fillOpacity: 1,
|
|
radius: 3.5
|
|
});
|
|
features.addLayer(circle);
|
|
}.bind(this));
|
|
|
|
return features;
|
|
};
|
|
|
|
this.CreateTimeTextLayer = function (points) {
|
|
var features = new L.FeatureGroup();
|
|
|
|
$(points).each(function (index, point) {
|
|
var text = L.marker([point.lat, point.lon], {
|
|
icon: L.divIcon({
|
|
className: 'forecast-time',
|
|
html: this.NormalizeTime(point.timepoint)
|
|
})
|
|
});
|
|
features.addLayer(text);
|
|
}.bind(this));
|
|
|
|
return features;
|
|
};
|
|
|
|
this.NormalizeTime = function (time) {
|
|
var month = time.substr(4, 2);
|
|
var day = time.substr(6, 2);
|
|
var hour = time.substr(9, 2);
|
|
var minutes = time.substr(11, 2);
|
|
return '{0}/{1} {2}:{3}'.format(month, day, hour, minutes);
|
|
};
|
|
|
|
this.CreatePointsLayer = function (points) {
|
|
var features = new L.FeatureGroup();
|
|
|
|
$(points).each(function (index, point) {
|
|
var color = this.GetPointsColor(point.value);
|
|
var bounds = [[point.lat - 0.005, point.lon - 0.005], [point.lat + 0.005, point.lon + 0.005]];
|
|
|
|
var marker = L.rectangle(bounds, {
|
|
color: color,
|
|
fillColor: color,
|
|
fillOpacity: 0.75,
|
|
weight: 0
|
|
});
|
|
features.addLayer(marker);
|
|
}.bind(this));
|
|
|
|
return features;
|
|
};
|
|
|
|
this.GetPointsColor = function (value) {
|
|
if (value <= 0.0001)
|
|
return 'rgb(255,255,255)';
|
|
if (value <= 0.001)
|
|
return 'rgb(178, 226, 249)';
|
|
if (value <= 0.01)
|
|
return 'rgb(93, 160, 213)';
|
|
if (value <= 0.1)
|
|
return 'rgb(73, 170, 106)';
|
|
if (value <= 1)
|
|
return 'rgb(159, 206, 81)';
|
|
if (value <= 10)
|
|
return 'rgb(248, 171, 67)';
|
|
if (value <= 100)
|
|
return 'rgb(239, 94, 41)';
|
|
if (value <= 1000)
|
|
return 'rgb(192, 28, 36)';
|
|
};
|
|
};
|