Openlayer add mark及新增hover效果例項
導讀 | 這篇文章主要為大家介紹了Openlayer add mark及新增hover效果例項詳解,有需要的朋友可以借鑑參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪 |
add mark
方法一
如果有多個點的話,可以生成多個 feature(迴圈呼叫 addFeature)
const iconStyle = () => new Style({ image: new Icon({ scale: 0.2, src: image }) }); const addFeature = (point: Coordinate) => new Feature({ geometry: new Point(Proj.fromLonLat(point)), properties, name: "當前位置", population: 4000, rainfall: 500, }); const pointSource = new VectorSource({ features: [addFeature(point)], }); const clusterSourceForLayer = new Cluster({ source: pointSource, distance: 50, }); const pointLayer = new VectorLayer({ source: clusterSourceForLayer, zIndex: 3, style: iconStyle, }); map.addLayer(pointLayer); pointLayer.set("baseMap", "iconLayer");
方法二
用 geojson 去渲染 mark
const iconStyle = () => new Style({ image: new Icon({ scale: 0.2, src: image }) }); const pointSource = new VectorSource({ features: new GeoJSON().readFeatures(geojson, { dataProjection: "EPSG:4326", featureProjection: "EPSG:3857", }), }); const clusterSourceForLayer = new Cluster({ source: pointSource, distance: 50, }); const pointLayer = new VectorLayer({ source: clusterSourceForLayer, zIndex: 3, style: iconStyle, }); map?.addLayer(pointLayer); pointLayer.set("baseMap", "iconLayer");
geojson 格式
生成 geojson 的方式:
- 自己手動構建
- 使用 @turf/helpers,它提供了 point、featureCollection 等方法
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "id": "customer002", "name": "c2" }, "geometry": { "type": "Point", "coordinates": [119.777738303153, 32.91324329434815] } }, { "type": "Feature", "properties": { "id": "customerId007", "name": "張三" }, "geometry": { "type": "Point", "coordinates": [109.54393448864997, 35.7427088696462] } } ] }
hover mark
popover
overlay 需要一個 dom 元素,這裡是用過 ref 獲取的
const o = new Overlay({ element: ref.current }); map?.addOverlay(o); setOverlay(o);
方法一
用 select 去做,它有個 select 事件
它事件引數中,有個 selected,如果不是空陣列,說明你滑鼠正在 hover mark,就可以彈出 popover,顯示你想要顯示的內容
const select = new Select({ condition: pointerMove, hitTolerance: 1, layers: [iconLayer], style: iconStyle, }); select.on("select", (e) => { const { selected } = e; if (selected.length) { const [feature] = selected; const _feature = feature.get("features")[0]; const id = _feature.get("id"); const name = _feature.get("name"); setContent({ name, id }); const coordinate = feature.get("geometry").flatCoordinates; overlay.setPosition(coordinate); } else { overlay.setPosition(undefined); } }); map?.addInteraction(select);
方法二
用 select 去做,本質也是透過 pointerMove 事件,所以可以直接在 map 上監聽 pointerMove 事件
具體的實現方式我沒有去嘗試,透過上面的推斷,我覺得是可行的
map.on("pointerMove", (e) => {});
clear mark
透過 useEffect 返回的函式清理地圖中的 mark
useEffect(() => { return () => { // 解除安裝頁面中的 mark iconSource?.getFeatures().forEach((feature) => { iconSource?.removeFeature(feature); }); }; }, [points, iconSource]);
方法 addInteraction、addOverlay、addLayer 區別
我沒有搞清楚他們之間的區別,目前瞭解的是:
- 柵格:Tile(圖片)
- 向量:Vector(geojson、lerc)
- 向量柵格:VectorTile(pbf)
- Popover 可以用 Overlay 去做
以上就是Openlayer add mark及新增hover效果例項詳解的詳細內容
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2929359/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 圓形放大的hover效果
- jQuery tab選項卡效果程式碼例項jQuery
- canvas載入效果程式碼例項Canvas
- CSS橢圓效果程式碼例項CSS
- NIO原理及例項
- 美化滾動條效果程式碼例項
- canvas原型鐘錶效果程式碼例項Canvas原型
- css3水滴效果程式碼例項CSSS3
- css背景虛化效果程式碼例項CSS
- canvas氣泡上浮效果程式碼例項Canvas
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- SpringCloud——Feign例項及原理SpringGCCloud
- PHP7 新增功能詳解(例項)PHP
- WPF 模仿前端大佬寫一個Hover效果前端
- 日常總結 --- hover圖片變化效果
- 用js(hover )+css實現下拉框效果(有效果圖)JSCSS
- jQuery點選滑出層效果程式碼例項jQuery
- css3晃動效果程式碼例項CSSS3
- CSS3心形效果程式碼例項CSSS3
- div前後翻轉效果程式碼例項
- 當前文字框高亮效果程式碼例項
- CSS3旋轉效果程式碼例項CSSS3
- 淡入淡出效果簡單程式碼例項
- canvas繪製箭頭效果程式碼例項Canvas
- Vue例項及生命週期Vue
- Exchanger的工作原理及例項
- 小例項: 用vue實現手風琴效果Vue
- CSS3滑過光束效果程式碼例項CSSS3
- CSS3小黃人效果程式碼例項CSSS3
- css3折角效果程式碼例項CSSS3
- CSS3梯形效果程式碼例項CSSS3
- CSS3背景漸變效果程式碼例項CSSS3
- CSS3星系運動效果程式碼例項CSSS3
- redis應用場景及例項Redis
- EventBus詳解及簡單例項單例
- WebSocket 簡介及應用例項Web
- vuejs實現新增tag標籤程式碼例項VueJS
- 一個有意思的CSS圖片hover效果CSS