最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Openlayer?add?mark及添加hover效果實(shí)例詳解

 更新時(shí)間:2022年11月17日 10:07:24   作者:uccs  
這篇文章主要為大家介紹了Openlayer?add?mark及添加hover效果實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

add mark

方法一

如果有多個(gè)點(diǎn)的話,可以生成多個(gè) feature(循環(huán)調(diào)用 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: "當(dāng)前位置",
    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 的方式:

  • 自己手動(dòng)構(gòu)建
  • 使用 @turf/helpers,它提供了 pointfeatureCollection 等方法
{
  "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 需要一個(gè) dom 元素,這里是用過(guò) ref 獲取的

const o = new Overlay({ element: ref.current });
map?.addOverlay(o);
setOverlay(o);

方法一

select 去做,它有個(gè) select 事件

它事件參數(shù)中,有個(gè) selected,如果不是空數(shù)組,說(shuō)明你鼠標(biāo)正在 hover mark,就可以彈出 popover,顯示你想要顯示的內(nèi)容

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 去做,本質(zhì)也是通過(guò) pointerMove 事件,所以可以直接在 map 上監(jiān)聽(tīng) pointerMove 事件

具體的實(shí)現(xiàn)方式我沒(méi)有去嘗試,通過(guò)上面的推斷,我覺(jué)得是可行的

map.on("pointerMove", (e) => {});

clear mark

通過(guò) useEffect 返回的函數(shù)清理地圖中的 mark

useEffect(() => {
  return () => {
    // 卸載頁(yè)面中的 mark
    iconSource?.getFeatures().forEach((feature) => {
      iconSource?.removeFeature(feature);
    });
  };
}, [points, iconSource]);

方法 addInteraction、addOverlay、addLayer 區(qū)別

我沒(méi)有搞清楚他們之間的區(qū)別,目前了解的是:

  • addLayer:是添加圖層,圖層分為:
    • 柵格:Tile(圖片)
    • 矢量:Vectorgeojson、lerc
    • 矢量柵格:VectorTilepbf
  • addInteraction:添加 SelectModify
  • addOverlay:添加 OverlayControl
    • Popover 可以用 Overlay 去做

以上就是Openlayer add mark及添加hover效果實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Openlayer添加mark hover效果的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序 傳值取值的幾種方法總結(jié)

    微信小程序 傳值取值的幾種方法總結(jié)

    這篇文章主要介紹了微信小程序 傳值取值的幾種方法總結(jié)的相關(guān)資料,這里對(duì)這幾種方法進(jìn)行了詳解,并附示例代碼,需要的朋友可以參考下
    2017-01-01
  • JS數(shù)組方法some、every和find的使用詳情

    JS數(shù)組方法some、every和find的使用詳情

    這篇文章 要給大家介紹的是JS數(shù)組方法some、every和find的使用的一些相關(guān)資料,感興趣的小伙伴一起來(lái)學(xué)習(xí)吧
    2021-09-09
  • 詳解如何用js實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)版節(jié)拍器

    詳解如何用js實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)版節(jié)拍器

    這篇文章主要為大家介紹了詳解如何用js實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)版節(jié)拍器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 關(guān)于JavaScript輪播圖的實(shí)現(xiàn)

    關(guān)于JavaScript輪播圖的實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于JavaScript輪播圖的實(shí)現(xiàn),下面文章主要是利用利用html 和 css 代碼實(shí)現(xiàn)輪播圖,詳細(xì)內(nèi)容請(qǐng)參考下面詳細(xì)內(nèi)容,希望對(duì)你有所幫助
    2021-11-11
  • Three.js概述和基礎(chǔ)知識(shí)學(xué)習(xí)

    Three.js概述和基礎(chǔ)知識(shí)學(xué)習(xí)

    這篇文章主要為大家介紹了Three.js概述和基礎(chǔ)知識(shí)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • JavaScript中Map與Object應(yīng)用場(chǎng)景

    JavaScript中Map與Object應(yīng)用場(chǎng)景

    這篇文章主要為大家介紹了JavaScript中Map與Object應(yīng)用場(chǎng)景的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 接收鍵盤指令的腳本

    接收鍵盤指令的腳本

    接收鍵盤指令的腳本...
    2006-06-06
  • JavaScript內(nèi)置對(duì)象介紹

    JavaScript內(nèi)置對(duì)象介紹

    這篇文章主要介紹了JavaScript內(nèi)置對(duì)象,內(nèi)置對(duì)象就是指?JS?語(yǔ)言自帶的一些對(duì)象,這些對(duì)象供開(kāi)發(fā)者使用,并提供了一些常用的或是最基本而必要的功能,下面我們一起進(jìn)入文章了解更多詳細(xì)內(nèi)容
    2021-12-12
  • commander腳手架工具使用詳解

    commander腳手架工具使用詳解

    這篇文章主要為大家介紹了commander腳手架工具使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • JS微前端MicroApp基礎(chǔ)使用

    JS微前端MicroApp基礎(chǔ)使用

    這篇文章主要為大家介紹了JS微前端MicroApp基礎(chǔ)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論

冷水江市| 望城县| 惠安县| 宝坻区| 两当县| 济宁市| 平罗县| 灯塔市| 嘉祥县| 建湖县| 岢岚县| 土默特右旗| 武陟县| 新乡市| 云安县| 宁乡县| 静安区| 通辽市| 台中市| 永靖县| 桂东县| 淮滨县| 平和县| 仁布县| 遵义县| 凤凰县| 内丘县| 古田县| 中阳县| 弥勒县| 庆元县| 大埔区| 蒙阴县| 三都| 开阳县| 新田县| 宜兰市| 安吉县| 时尚| 湘阴县| 门头沟区|