接书,使用波纹墙重点展示一个区域,在实际项目中,如果这种东西一般是针对块状区域的,那么点元素是否和我们需要重点展示坐标类似?(威廉莎士比亚(温斯顿)。)我提出的方案是用三维图标表示的这个坐标点。也就是说,与普通二维坐标点不同,三维坐标可以产生高度变化,产生动态效果。(大卫亚设)。

说一下我们这个功能的需求,首先把西湖十景打点到地图上,是一个三维立体图标,然后给图标点击事件,点击冒泡展示该景点的信息。

1、普通打点

这里我们借助maptalks中的ma类实例化多个图标,然后把图标加载到VectorLayer图层上去。

new ma( latlng, { 'symbol': { 'markerFile': markerFile, 'markerWidth': 40, 'markerHeight': 40, 'markerDx': 0, 'markerDy': 0, 'markerOpacity': 1 } } ).addTo(layer);

普通的打点大概是这样,这个时候,我们想让图标上下运动的效果就不好实现了。只有先清除掉图层,再重新添加有高度值的图层。

const layer = (ID); if (!layer) { return; } layer.clear(); beau(beautyOfWestLakeData => { const { title, latlng, describe, url } = beautyOfWestLakeData || {}; const markerFile = getBackgroundImg(title) new ma( latlng, { 'symbol': { 'markerFile': markerFile, 'markerWidth': 40, 'markerHeight': 40, 'markerDx': 0, 'markerDy': 0, 'markerOpacity': 1 }, properties: { Altitude: } } ).addTo(layer); }) requestAnimationFrame(e => { (); })

这里有一个问题,图标上升的节奏不好把握,这种带高度的图标实现起来还是挺麻烦。

2、三维立体打点

1、新建一个three图层

const threeLayer = new ThreeLayer(ID, { forceRenderOnMoving: true, forceRenderOnRotating: true });

2、场景添加方向光

const light = new THREE.DirectionalLight(0xffffff); lig(0, -10, 10).normalize(); (light);

3、生成材质

const material = new THREE.PointsMaterial({ sizeAttenuation: false, color: 0xffffff, size: 30, transparent: true, //使材质透明 blending: THREE.AdditiveBlending, depthTest: true, //深度测试关闭,不消去场景的不可见面 depthWrite: false, map: new THREE.TextureLoader().load(getBackgroundImg(title)) });

4、遍历生成图标

const point = (latlng, { height: 0 }, material);

3、事件

当点击图标的时候,我们弹出景点的介绍面板。

('click ', e => { ({ title: title, content: describe, url }); })

当鼠标移动到图标的时候,我们让图标变大。

('mouseover', e => { (_material); }) ('mouseout ', e => { (material); })

4、动态效果

最后,我们给图标加上标注,再演示一下。

1.《地图开发之六:三维动态图标》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《地图开发之六:三维动态图标》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3043022.html