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

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)';
};
};