我通过互联网上的各种脚本和渲染算法开发了 OpenStreetMaps 的画布可视化。最重要的是,我有一个 Kinetic Stage,它可以绘制无法通过 Openlayers 的功能绘制的自定义对象。
Openlayers 提供了许多我想使用的功能,因此我正在尝试切换到这个框架。我目前坚持事件传播,因为我不知道如何将事件传播到 Openlayers。
索引.html
<div id="canvasdiv">
<div id="KineticDiv"> </div>
<div id="OLMapDiv"> </div>
</div>
样式.css
#KineticDiv {
position: absolute;
z-index: 1000;
}
#OLMapDiv {
position: absolute;
width: 1000px;
height: 600px;
z-index: 0;
}
ol.js
function OpenLayersMap(divname) {
var osmLayer = new OpenLayers.Layer.OSM("Open Street Maps",
["http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",
"http://b.tile.openstreetmap.org/${z}/${x}/${y}.png",
"http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"]);
]);
var gmLayer = new OpenLayers.Layer.Google("Google Maps");
var proj = new OpenLayers.Projection("EPSG:4326");
OpenLayers.ImgPath = "/static/img/";
this.map = new OpenLayers.Map({
div: divname,
allOverlays: false,
theme: null,
controls: [
new OpenLayers.Control.Attribution(),
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.MousePosition({
displayProjection: proj
}),
new OpenLayers.Control.KeyboardDefaults()
]
});
this.map.addLayers([osmLayer, gmLayer]);
this.map.setCenter(
new OpenLayers.LonLat(8.56, 50).transform(proj, this.map.getProjectionObject()), 10
);
}
OpenLayersMap.prototype = {
constructor: OpenLayersMap
}
main.js
function main() {
var self = this;
this.olmap = new OpenLayersMap("OLMapDiv");
this.kinetic = new KineticStage("KineticDiv");
$("div#canvasdiv").bind("mouseout", function(event){
// TODO self.olmap.mouseOut(event);
}).bind("mouseup", function(event){
// TODO self.olmap.mouseUp(event);
}).bind("mousedown", function(event){
// TODO self.olmap.mouseDown(event);
}).bind("mousewheel", function(event, delta){
// TODO self.olmap.mouseWheel(event, delta);
}).bind("touchmove", function(event){
// TODO self.olmap.touchMove(event);
}).bind("touchstart", function(event){
// TODO self.olmap.touchStart(event);
}).bind("touchend", function(event){
// TODO self.olmap.touchEnd(event);
});
}
由于 Kinetic Stage 的 z-index 较高,该事件在此处被识别。仅当命中 Kinetic Shape 时事件传播才会停止!
Openlayers 中是否有任何合适的方法可以接受事件?(我找到了OpenLayers.Events.triggerEvent,但没有成功)