我是openlayers的新手,我想了解如何添加pan缩放栏像http://maps.cloudmade.com/ zoombar。它显示了一些标记作为建筑,国家等等,当你在这个泛...openlayers pan缩放栏修改
3
A
回答
5
您可以覆盖OpenLayers.Control.PanZoom,例如:
idecan.PanZoom = OpenLayers.Class(OpenLayers.Control.PanZoom, {
bounds: null,
initialize: function(options) {
this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X,
OpenLayers.Control.PanZoom.Y);
if (arguments[0].bounds)
this.bounds = arguments[0].bounds;
OpenLayers.Control.prototype.initialize.apply(this, arguments);
},
includeButtons: {
"zoomin": {
outImageSrc: "zoom-plus-mini.png",
overImageSrc: "zoom-plus-mini-over.png"
},
"zoomout": {
outImageSrc: "zoom-minus-mini.png",
overImageSrc: "zoom-minus-mini-over.png"
},
"zoomworld": {
outImageSrc: "zoom-world-mini.png",
overImageSrc: "zoom-world-mini-over.png"
}
},
makeMouseCallback: function(id, state) {
var selector = state + "ImageSrc";
var src = OpenLayers.Util.getImagesLocation() + this.includeButtons[id][selector];
return function(evt) {
var img = this.firstChild;
if (img.src != src) {
img.src = src;
}
};
},
_addButton: function(id, img, xy, sz) {
if (id in this.includeButtons) {
var src = this.includeButtons[id].outImageSrc;
var size = new OpenLayers.Size(18,18);
var btn = OpenLayers.Control.PanZoom.prototype._addButton.call(this, id, src, xy, size);
if (this.bounds) {
var bounds = this.bounds;
var getBounds = function() {
return bounds;
};
btn.getBounds = getBounds;
}
btn.className = this.displayClass + id.capitalize();
btn._btnId = id;
OpenLayers.Event.observe(btn, "mouseover", OpenLayers.Function.bindAsEventListener(this.makeMouseCallback(id, "over"), btn));
OpenLayers.Event.observe(btn, "mouseout", OpenLayers.Function.bindAsEventListener(this.makeMouseCallback(id, "out"), btn));
return btn;
}
},
buttonDown: function (evt) {
if (!OpenLayers.Event.isLeftClick(evt)) {
return;
}
switch (this.action) {
case "panup":
this.map.pan(0, -this.getSlideFactor("h"));
break;
case "pandown":
this.map.pan(0, this.getSlideFactor("h"));
break;
case "panleft":
this.map.pan(-this.getSlideFactor("w"), 0);
break;
case "panright":
this.map.pan(this.getSlideFactor("w"), 0);
break;
case "zoomin":
this.map.zoomIn();
break;
case "zoomout":
this.map.zoomOut();
break;
case "zoomworld":
if (map.center)
map.setCenter(idecan.center, idecan.zoom);
//this.map.zoomToExtent(this.getBounds());
else
this.map.zoomToMaxExtent();
break;
}
OpenLayers.Event.stop(evt);
},
CLASS_NAME: "idecan.PanZoom"
});
3
我也目前正在实施一个定制的衍生物的OpenLayer的PanZoom控件。不幸的是,PanZoom控件包含了大量的cruft代码,许多行只是致力于一些硬编码控件样式,可以在CSS中更容易完成(例如,为什么每个控件按钮都必须是18x18像素?)
Felix'答案是一个很好的起点,但如果你不需要实现你的PanZoom控件超级紧急,我会等到OpenLayers 2.11或更新的版本。 OpenLayers开发人员目前正在将许多硬编码格式重构为CSS,使得控制代码更加简单易懂。
相关问题
- 1. angular - openLayers:几何缩放
- 2. OpenLayers缩放样式GoogleMaps
- 3. OpenLayers:禁用缩放双击
- 4. OpenLayers 4缩放到集群
- 5. Openlayers 3:当缩放级别改变时更改向量图层
- 6. OpenLayers选择修改功能
- 7. Openlayers zoomtoextent缩放到另一个位置
- 8. Angular OpenLayers - 缩放到框的边界
- 9. 高级栏缩放
- 10. MapKit修复缩放
- 11. 使用svg-pan-zoom进行缩放后的光标位置
- 12. 使用PNG或JPEG与OpenLayers进行地图(缩放/缩放问题)
- 13. Openlayers:缩放WFS有时会返回到第一个缩放级别
- 14. 在Chrome中缩放更改时滚动条未被修改
- 15. 如何修改achartengine中的pan敏感度?
- 16. java标题栏修改
- 17. 修改UITableView的侧边栏?
- 18. 混合放大OpenLayers?
- 19. 的OpenLayers删除/缩小
- 20. 如何动态缩放和修改ImageButton的位置?
- 21. 修改嵌入式Google地图的缩放级别
- 22. 我可以修改Kubernetes放大缩小等待时间吗
- 23. 如何修改TouchImageView双击放大和缩小?
- 24. 如何修改CardBuilder的图像缩放类型?
- 25. 如何修改用于Flot缩放选择的颜色?
- 26. 为gwt-openlayers和openstreetmap设置缩放级别
- 27. 如何获得动画缩放和平铺与openlayers?
- 28. openlayers标记moveTo只在特定的缩放级别准确
- 29. 在OpenLayers中捕获鼠标滚轮缩放
- 30. OpenLayers - KML矢量图层zIndexing反转,但打开放大/缩小