-
Notifications
You must be signed in to change notification settings - Fork 1
/
y2fastOverlay.js
93 lines (79 loc) · 2.79 KB
/
y2fastOverlay.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
var Y2FastOverlay = function (geometry, data, options) {
//вообще-то считается что сюда входит пиксельная геометрия
//но в данном случае - это не так
this._GEOmetry = geometry;
this._GEOmetry.events.add('pixelgeometrychange', this._readPosition, this);
this._geometry = 0;
this._data = data;
//создадим опции на основе обычного хэша
this.options = options;
};
Y2FastOverlay.prototype = {
setMap: function (map) {
if (this._map != map) {
var oldMap = this._map;
if (oldMap) {
this.onRemoveFromMap(oldMap);
}
this._map = map;
if (this._map) {
this.onAddToMap();
}
}
},
getMap: function () {
return this._map;
},
onAddToMap: function () {
this._div = document.createElement('div');
this._div.style.cssText = 'position:absolute;border:1px solid #000;border-radius:5px;width:12px;height:12px;background-color:#0F0';
this._pane = this._map.panes.get('overlays');
this._pane.getElement().appendChild(this._div);
this._pane.events.add('actionend', this._reposite, this);
//свяжем геометрию напрямую с картой
this._GEOmetry.options.setParent(this._map.options)
this._GEOmetry.setMap(this._map);
this._readPosition();
},
onRemoveFromMap: function () {
this._div.parentElement.removeChild(this._div);
this._pane.events.remove('actionend', this._reposite, this)
this._div = null;
},
setGeometry: function (geometry) {
var oldGeometry = this._geometry;
this._geometry = geometry;
if (this._map) {
this.applyGeometry();
}
},
getGeometry: function () {
return this._geometry;
},
_readPosition: function () {
this._geometry = this._GEOmetry.getPixelGeometry();
this._reposite();
},
_reposite: function () {
var point = this._pane.toClientPixels(this._geometry.getCoordinates()),
viewport = this._pane.getViewport();
//но мы не обратим внимание на viewport
//эмулируем objectManager
if(Math.abs(point[0])>200 || Math.abs(point[1])>200){
this._div.style.display='none';
}
else{
this._div.style.cssText+=';display:block;left:'+Math.round(point[0]) + 'px;top:'+Math.round(point[1]) + 'px';
}
},
setData: function (data) {
var oldData = this._data;
this._data = data;
},
getData: function () {
return this._data;
},
isEmpty: function () {
return false;
}
};