我正在調查使用OpenLayers的Web應用程序。基本上OpenStreetMap或谷歌地圖沒有足夠的放大,所以我想實現的是,當你放大到最大的水平,再次點擊縮放自定義地圖圖像加載。Openlayers放大到自定義地圖
如果這是不可能的,那麼替代方法是做一個覆蓋圖,它只會出現在最大縮放級別上,一旦點擊它們就會轉到另一個地圖,可能是基於SVG的。
哪一個更可行?任何反饋歡迎!
我正在調查使用OpenLayers的Web應用程序。基本上OpenStreetMap或谷歌地圖沒有足夠的放大,所以我想實現的是,當你放大到最大的水平,再次點擊縮放自定義地圖圖像加載。Openlayers放大到自定義地圖
如果這是不可能的,那麼替代方法是做一個覆蓋圖,它只會出現在最大縮放級別上,一旦點擊它們就會轉到另一個地圖,可能是基於SVG的。
哪一個更可行?任何反饋歡迎!
我確信它可以完成,但配置起來很棘手。
您可以使用Mapnik渲染自己的openstreetmap圖塊。由於它基於矢量源,因此可以進一步放大。
或者,您可以添加矢量圖層(這將成爲SVG或VML)或靜態圖像圖層,並且只能在足夠高的縮放級別上顯示此圖層。但是,因爲您的基礎層是OSM或Google地圖,所以地圖無法進一步縮放基礎圖層的最大縮放級別。
你可以做的是覆蓋默認的OpenLayers.Layer.OSM層,設置最大縮放級別更高(although this is not good practice)並停止在更高縮放級別獲取OSM瓦片圖像,並添加自定義行爲(從你自己的加載瓦片服務器,或使用矢量圖層選項)。你必須從某個地方覆蓋的類層次結構的正確方法(OpenLayers.Layer.OSM
延伸OpenLayers.Layer.XYZ
延伸OpenLayers.Layer.Grid
等)
OpenLayers.Layer.MyOSMLayer = OpenLayers.Class(OpenLayers.Layer.OSM, {
initialize: function(name, options) {
options = OpenLayers.Util.extend({
numZoomLevels: 19 + 4,
}, options);
var newArguments = [name, url, options];
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
},
// @override from XYZ
getURL: function (bounds) {
var xyz = this.getXYZ(bounds);
if (xyz.z > 19) { // override url on higher zoomlevel
return "http://myserver/white.png";
}
// else default behaviour: super.getUrl()
return OpenLayers.Layer.OSM.prototype.getURL.apply(this, [bounds]);
},
CLASS_NAME: "OpenLayers.Layer.MyOSMLayer"
})