4x/irrigation-monitoring-platf.../public/static/js/D3SvgOverlay.js

116 lines
3.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* T.D3Overlay借助D3.js强大的可视化功能扩展天地图已有的覆盖物类 T.Overlay
* 使天地图表达的可视化信息,不仅仅只有地理数据展示,也可以结合更丰富的图形(柱图,饼图)来描述、展现数据。
* 注chrome、safari、IE9及以上浏览器。
*/
const d3= window.d3
T.D3Overlay = T.Overlay.extend({
initialize: function (init, redraw, options) {
this.uid = new Date().getTime();
this.init = init;
this.redraw = redraw;
if (options)
this.options = options;
try {
d3.select("head") .append("style").attr("type", "text/css")
} catch (error) {
console.log(error);
}
},
/**
* 地图缩放触发的函数
* @private
*/
_zoomChange: function () {
if (!this.redraw)
this.init(this.selection, this.transform);
else
this.redraw(this.selection, this.transform);
},
onAdd: function (map) {
this.map = map;
var self = this;
//增加svg容器
this._svg = new T.SVG();
map.addLayer(this._svg);
//根节点
this._rootGroup = d3.select(this._svg._rootGroup).classed("d3-overlay", true);
this.selection = this._rootGroup;
//一些转换参数
this.transform = {
//坐标转容器像素坐标。
LngLatToD3Point: function (a, b) {
var _lnglat = a instanceof T.LngLat ? a : new T.LngLat(a, b);
var point = self.map.lngLatToLayerPoint(_lnglat);
this.stream.point(point.x, point.y);
},
//换算一米转多少像素
unitsPerMeter: function () {
return 256 * Math.pow(2, map.getZoom()) / 40075017
},
map: self.map,
layer: self
};
this.transform.pathFromGeojson =
// d3.geo.path().projection(d3.geo.transform({
// point: this.transform.LngLatToD3Point
// }));
//D3绘制
this.init(this.selection, this.transform);
//用于确定坐标的
if (this.redraw)
this.redraw(this.selection, this.transform);
map.addEventListener("zoomend", this._zoomChange, this);
},
onRemove: function (map) {
map.removeEventListener("zoomend", this._zoomChange, this);
this._rootGroup.remove();
map.removeOverLay(this._svg)
},
/**
* 图层移动到最上层
* @returns {T.D3Overlay}
*/
bringToFront: function () {
if (this._svg && this._svg._rootGroup) {
var el = this._svg._rootGroup.parentNode;
el.parentNode.appendChild(el);
}
return this;
},
/**
* 图层移动到最底层。
* @returns {T.D3Overlay}
*/
bringToBack: function () {
if (this._svg && this._svg._rootGroup) {
var el = this._svg._rootGroup.parentNode;
var parent = el.parentNode;
parent.insertBefore(el, parent.firstChild);
}
return this;
},
})
;