Openlayers繪制聚合標(biāo)注
本文實例為大家分享了Openlayers實現(xiàn)聚合標(biāo)注的具體代碼,供大家參考,具體內(nèi)容如下
1、聚合標(biāo)注
聚合標(biāo)注是指在不同的地圖分辨率下,通過聚合的方式來展示標(biāo)注點的一種方法,其目的就是為了減少當(dāng)前視窗中加載的標(biāo)注點的數(shù)量,從而提高客戶端的渲染速度,有點類似于ArcGIS的點抽稀。
2、代碼實現(xiàn)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="../lib/ol/ol.js"></script>
<script type="text/javascript">
window.onload = function () {
//初始化地圖
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: new ol.proj.fromLonLat([116.28, 39.54]),
zoom: 8
})
});
//創(chuàng)建要素的數(shù)量
//10000個點沒有任何壓力,50000個點稍微有些卡了,100000個點可以把瀏覽器卡崩潰
var count = 10000;
//創(chuàng)建一個要素數(shù)組
var features = new Array(count);
//坐標(biāo)偏移量
var e = 8500000;
for (var i = 0; i < count; i++) {
//要素坐標(biāo)
var coordinates = [3 * e * Math.random() - e, 2 * e * Math.random() - e];
//新建點要素
features[i] = new ol.Feature(new ol.geom.Point(coordinates));
}
//初始化矢量數(shù)據(jù)源
var source = new ol.source.Vector({
//要素
features:features
});
//初始化聚合標(biāo)注數(shù)據(jù)源
var clusterSource = new ol.source.Cluster({
//標(biāo)注元素之間的間距
distance: 40,
//數(shù)據(jù)源
source:source
});
//樣式緩存
var styleCache = {};
//初始化矢量圖層
var clusters = new ol.layer.Vector({
//數(shù)據(jù)源
source: clusterSource,
//樣式
style: function (feature, resolution) {
//當(dāng)前聚合標(biāo)注數(shù)據(jù)源的要素大小
var size = feature.get('features').length;
//定義樣式
var style = styleCache[size];
//如果當(dāng)前樣式不存在則創(chuàng)建
if (!style) {
style = [
//初始化樣式
new ol.style.Style({
//點樣式
image: new ol.style.Circle({
//點的半徑
radius: 10,
//筆觸
stroke: new ol.style.Stroke({
color: '#fff'
}),
//填充
fill: new ol.style.Fill({
color: '#3399cc'
})
}),
//文本樣式
text: new ol.style.Text({
//文本內(nèi)容
text: size.toString(),
//填充
fill: new ol.style.Fill({
color: '#fff'
})
})
})
];
styleCache[size] = style;
}
return style;
}
});
//將聚合標(biāo)注圖層添加到map中
map.addLayer(clusters);
//獲取添加聚合標(biāo)注按鈕
document.getElementById('addFeatures').onclick = function () {
//獲取聚合標(biāo)注數(shù)據(jù)源中的要素
var currentFeatures = clusterSource.getSource().getFeatures();
//如果當(dāng)前數(shù)據(jù)源中沒有任何要素則添加
if (currentFeatures.length == 0) {
clusterSource.getSource().addFeatures(features);
clusters.setSource(clusterSource);
map.addLayer(clusters);
}
};
//獲取移除聚合標(biāo)注的按鈕
document.getElementById('removeFeatures').onclick = function () {
//清除聚合標(biāo)注數(shù)據(jù)源中的所有元素
clusterSource.getSource().clear();
//從map中移除聚合標(biāo)注圖層
map.removeLayer(clusters);
};
};
</script>
</head>
<body>
<input type="button" name="name" value="添加聚合標(biāo)簽" id="addFeatures" />
<input type="button" name="name" value="移除聚合標(biāo)簽" id="removeFeatures" />
<div id="map"></div>
</body>
</html>
3、結(jié)果展示
初始化界面

隨意更改地圖的分辨率(進(jìn)行縮放操作),標(biāo)注點的數(shù)量也會跟著改變

單擊左上角的移除聚合標(biāo)簽按鈕,則會清空界面上的所有標(biāo)注

單擊左上角的添加聚合標(biāo)簽按鈕,則會在界面上重新添加聚合標(biāo)注

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ES6中Array.find()和findIndex()函數(shù)的用法詳解
ES6為Array增加了find(),findIndex函數(shù)。find()函數(shù)用來查找目標(biāo)元素,找到就返回該元素,找不到返回undefined,而findIndex()函數(shù)也是查找目標(biāo)元素,找到就返回元素的位置,找不到就返回-1。下面通過實例詳解,需要的朋友參考下吧2017-09-09
微信小程序--onShareAppMessage分享參數(shù)用處(頁面分享)
本篇文章主要介紹了微信小程序的頁面分享onShareAppMessage分享參數(shù)用處的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
d3.js實現(xiàn)簡單的網(wǎng)絡(luò)拓?fù)鋱D實例代碼
最近一直在學(xué)習(xí)d3.js,大家都知道d3.js是一個非常不錯的數(shù)據(jù)可視化庫,我們可以用它來做一些比較酷的東西,比如可以來顯示一些簡單的網(wǎng)絡(luò)拓?fù)鋱D,這篇文中就通過實例代碼給大家介紹了如何利用d3.js實現(xiàn)簡單的網(wǎng)絡(luò)拓?fù)鋱D,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-11-11
javascript實現(xiàn)前端input密碼輸入強度驗證
這篇文章主要為大家詳細(xì)介紹了javascript實現(xiàn)前端input密碼輸入強度驗證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06
js 靜態(tài)動態(tài)成員 and 信息的封裝和隱藏
一下用面向?qū)ο蟮南嚓P(guān)概念來解釋js中的仿面向?qū)ο螅驗閖s中不像其他語言,不存在面向?qū)ο笳Z言的相關(guān)特性2011-05-05

