高德可视化Loca.PolygonLayer不显示顶面
按照示例和官方配置文档写,最终效果很奇怪
代码如下
const geo = formatGeo(data, 'polygon')
var pl = new Loca.PolygonLayer({
loca: myLoca,
zIndex: 100,
opacity: 0.8,
visible: true,
// cullface: 'none',
// shininess: 10,
hasSide: true,
hasBottom: true,
});
pl.setSource(geo);
pl.setStyle({
topColor: 'rgba(255,255,255,0.7)',
sideTopColor: '#f99',
sideBottomColor: '#66f',
bottomColor: '#fff',
height: 200000,
altitude: 0,
// 文字标注配置
label: {
text: {
content: (index, feat) => feat.properties.areaName
}
},
})
高德数据接口获取的边界点位无法直接转换为geo
目前通过高德内置的方法获取的行政区边界只能用于高德地图map的方法中的path(二重数组,需要多次遍历create边界形成边界数组才能使用),不能用于高德可视化loca中,尤其是loca 2.x版本
推荐使用:阿里云数据可视化的geojson源 目前是免费的,以后就不知道了
补充后记:
阿里云数据可视化的geojson源 有并发限制,暂未查到限制并发的时间和并发量具体是多少。但项目后端是遇到了调用接口返回403的状况,连带前端通过网页请求也出现403,被限流5-10分钟后恢复。
商用项目还是不能太依赖这个接口,实在要使用,则必须做缓存。
我们的做法是,一方面后端第一次请求后把数据存到数据库,后续接口直接从自己的数据库获取;另一方面,前端同时在终端缓存同一参数的geo数据,再次降低请求远程geo接口的次数。
前端方面框架使用的Vue3+pinia,持久化使用插件pinia-plugin-persistedstate,但该插件并不是最优解,因为LocalStorage内存有限,而geo数据量巨大,很容易有溢出的风险。
目前主流方案是使用IndexedDB作为储存空间,同样有轮子:插件传送门localForage
pinia-plugin-persistedstate 插件不支持 localForage 因为 localForage 是异步的,它只支持同步方法