簡體   English   中英

靜態圖像層性能問題 - 打開第 3 層

[英]Static Image Layer Performance Issues - Open Layers 3

我正在接收緯度/經度的數據點。 我需要在 OpenLayers 3 中的靜態圖像上繪制所有這些。我沒有使用 OSM 或其他任何東西,我的圖像應該是基礎層,頂部有一個矢量圖層(點)。 我通過添加靜態圖像層,將范圍設置為緯度/經度中的四個角,然后在其上繪制我的特征來使其工作。 然而,這在瀏覽器中運行非常緩慢,在移動設備上它會在幾秒鍾后使瀏覽器崩潰。 這樣做的正確方法是什么? 我應該使用不同的圖層類型嗎? 我需要將我的緯度/經度坐標轉換為像素嗎? 如果是這樣,我將如何實現它?

我將崩潰范圍縮小到靜態圖像層,因為當我將其設置為我需要的投影時,它會在移動設備(我的目標平台)上崩潰:

var ovProj = ol.proj.get('EPSG:4326');
var myStaticImageLayer = new ol.layer.Image({
    source: new ol.source.ImageStatic({
        url: '../_images/mallSitePlan.png',
        imageExtent: [-121.90320739419553, 37.409945396290674, -121.89234011506653, 37.41962634032544],
        projection: ovProj
    })
});

var view = new ol.View({
    center: ol.proj.transform([-121.90320739419553, 37.409945396290674], 'EPSG:4326', 'EPSG:3857'),
    zoom: 18,
    enableRotation: false
});

var map = new ol.Map({
    target: 'map',
    layers: [myStaticImageLayer],
    view: view
})

如果我在這個投影中運行它,它不會崩潰,但我無法在正確的位置繪制我的點,因為我在 EPSG:4326 中收到它們。

var extent = [0, 0, 1024, 968];
var projection = new ol.proj.Projection({
    code: 'xkcd-image',
    units: 'pixels',
    extent: extent
});

var imageLayer = new ol.layer.Image({
    source: new ol.source.ImageStatic({
        attributions: '© <a href="http://xkcd.com/license.html">xkcd</a>',
        url: '../_images/mallSitePlan.png',
        projection: projection,
        imageExtent: extent
    })
});

var map = new ol.Map({
    layers: [imageLayer, myVectorLayer],
    target: 'mymap',
    view: new ol.View({
        projection: projection,
        center: ol.extent.getCenter(extent)
    })
});

所以,我以某種方式想通了這一點。 我不完全確定為什么它會以這種方式工作,而不是我的方式。 如果有人可以提供進一步的解釋,將不勝感激。 首先創建地圖是最佳做法嗎? 無論如何,這是允許我擁有一個靜態圖像層而不會出現性能問題/在 chrome 上崩潰的代碼,它在我需要的投影中。

// Create map
var map = new ol.Map({
    target: 'map', // The DOM element that will contains the map
    view: new ol.View({
        center: ol.proj.transform([-121.897329, 37.415616], 'EPSG:4326', 'EPSG:3857'),
        zoom: 16,
        minZoom: 16,
        enableRotation: false,
        extent: ol.extent.applyTransform([-121.90320739419553, 37.409945396290674, -121.89234011506653, 37.41962634032544], ol.proj.getTransform("EPSG:4326", "EPSG:3857"))
    })
});

// Create an image layer
var imageLayer = new ol.layer.Image({
    source: new ol.source.ImageStatic({
        url: '../_images/mallSitePlan.png',
        projection: map.getView().getProjection(),
        imageExtent: ol.extent.applyTransform([-121.90320739419553, 37.409945396290674, -121.89234011506653, 37.41962634032544], ol.proj.getTransform("EPSG:4326", "EPSG:3857"))
    })
});
//add image layer to map
map.addLayer(imageLayer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM