如何解决在openlayer 6.4.3中创建集群-捕获到TypeError:this.source.loadFeatures不是函数
我正在尝试使用OL 6.4.3创建集群。我的脚本是
var cluster_data = {
"type": "Feature",'features': [
{
'type': 'Feature','geometry': {
'type': 'Point','coordinates': [686213.47091037,1093486.3776117],},{
'type': 'Feature','coordinates': [687067.04391223,1094462.7275206],'coordinates': [687214.60645801,1094362.868384],}
],};
var features = new Array(3);
var source = new ol.layer.Vector({
features: new ol.format.GeoJSON().readFeatures(cluster_data),});
var clusterSource = new ol.source.Cluster({
distance: 40,source: source,});
var styleCache = {};
var clusters = new ol.layer.Vector({
source: clusterSource,style: function (feature) {
var size = feature.get('features').length;
var style = styleCache[size];
if (!style) {
style = new Style({
image: new CircleStyle({
radius: 10,stroke: new Stroke({
color: '#fff',}),fill: new Fill({
color: '#3399CC',text: new Text({
text: size.toString(),fill: new Fill({
color: '#fff',});
styleCache[size] = style;
}
return style;
},});
map.addLayer(clusters);
我添加了其他3个Tile层 map.getLayers()。extend([bm,road,landmark]); 并尝试在此之上添加集群。但是在添加群集时出现错误 Uncaught TypeError:this.source.loadFeatures不是函数。
解决方法
错误是因为
var source = new ol.layer.Vector({
应该是
var source = new ol.source.Vector({
同样,数据应该是要素之前的第一种类型
"type": "FeatureCollection",
如果您使用的是OpenLayers完整版
new Style
new CircleStyle
new Stroke
new Fill
和new Text
应该
new ol.style.Style
new ol.style.Circle
new ol.style.Stroke
new ol.style.Fill
和new ol.style.Text
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://openlayers.org/en/v6.4.3/css/ol.css" type="text/css">
<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
<script src="https://openlayers.org/en/v6.4.3/build/ol.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.1/proj4.js"></script>
<style>
html,body,.map {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
proj4.defs("EPSG:32643","+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs");
ol.proj.proj4.register(proj4);
var cluster_data = {
"type": "FeatureCollection",'features': [
{
'type': 'Feature','geometry': {
'type': 'Point','coordinates': [686213.47091037,1093486.3776117],},{
'type': 'Feature','coordinates': [687067.04391223,1094462.7275206],'coordinates': [687214.60645801,1094362.868384],}
],};
var source = new ol.source.Vector({
features: new ol.format.GeoJSON().readFeatures(cluster_data),});
var clusterSource = new ol.source.Cluster({
distance: 40,source: source,});
var styleCache = {};
var clusters = new ol.layer.Vector({
source: clusterSource,style: function (feature) {
var size = feature.get('features').length;
var style = styleCache[size];
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({
text: size.toString(),fill: new ol.style.Fill({
color: '#fff',});
styleCache[size] = style;
}
return style;
},});
var map = new ol.Map({
target: 'map',layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],view: new ol.View({
projection: "EPSG:32643"
})
});
map.addLayer(clusters);
map.getView().fit(source.getExtent());
map.getView().setZoom(map.getView().getZoom() - 6);
</script>
</body>
</html>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。