openlayers實現可拖拽的節點(類似知識圖譜)

/**

?* 本文介紹了實現知識圖譜可視化的技術方案,主要分為兩個圖層實現:

?* 1、線圖層 ?不拖動

?* 2、點圖層 需要拖動

?*/

  • ?線圖層 - 負責繪制靜態連接線,使用LineString創建線要素并添加到矢量圖層;

// 線圖層
export function addKnowledgeGraphLinePoint(id) {const layers = map.getLayers().getArray();let layer = layers.find((item) => item.values_.id === id);if (layer) {layer.getSource().clear();} else {layer = new LayerVector({source: new SourceVector({features: "",}),properties: {id: id,},zIndex: 15,});map.addLayer(layer);// 創建矢量對象var lineString = new LineString(data);var lineFeature = new Feature({ geometry: lineString });// 添加到之前的創建的layer中去layer.getSource().addFeature(lineFeature);}addKnowledgeGrapPoint("KnowledgeGrapPoint", lineString);
}
  • 點圖層 - 實現可拖拽的節點功能,通過Translate交互實現拖動,每個節點使用Point創建要素。兩個圖層通過坐標數據關聯,線圖層的坐標由點圖層拖動時動態更新。代碼展示了圖層創建、要素添加和交互綁定的具體實現,使用OpenLayers庫完成地圖可視化功能。

// 點圖層
function addKnowledgeGrapPoint(id, lineString) {const layers = map.getLayers().getArray();let layer = layers.find((item) => item.values_.id === id);let translate;if (layer) {layer.getSource().clear();} else {layer = new LayerVector({source: new SourceVector(),properties: {id: id,},});translate = new Translate({layers: [layer],});map.addLayer(layer);map.addInteraction(translate);}for (let index = 0; index < data.length; index++) {const element = data[index];// 創建矢量對象let feature = new Feature({geometry: new Point(element),properties: { id: "points" + index },});// 添加到之前的創建的layer中去layer.getSource().addFeature(feature);_bindMapEvents(layer, translate, lineString);}
}

?

可拖拽的節點

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85955.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

酷黑NBA足球賽事直播源碼體育直播M39模板賽事源碼

源碼名稱&#xff1a;NBA足球賽事直播源碼酷黑體育直播M39模板賽事源碼 開發環境&#xff1a;帝國cms7.5 空間支持&#xff1a;phpmysql 帶軟件采集&#xff0c;可以掛著自動采集發布&#xff0c;無需人工操作&#xff01; 演示地址&#xff1a;https://www.52muban.com/shop…

Verilog編程技巧01——如何編寫三段式狀態機

前言 Verilog編程技巧系列文章將聚焦于介紹Verilog的各種編程范式或者說技巧&#xff0c;編程技巧和編程規范有部分重合&#xff0c;但并非完全一樣。規范更注重編碼的格式&#xff0c;像變量命名、縮進、注釋風格等&#xff0c;而編程技巧則更偏重更直觀易讀、更便于維護、綜合…

豆包和deepseek 元寶 百度ai區別是什么

豆包、DeepSeek、元寶和百度 AI 有以下區別&#xff1a; 開發公司 豆包5&#xff1a;由字節跳動公司基于云雀模型開發。DeepSeek4&#xff1a;是深度求索打造的開源多模態大模型。元寶1&#xff1a;是騰訊混元模型的落地產品&#xff0c;整合了 DeepSeek - R1 與混元模型。百…

網頁端 js 讀取發票里的二維碼信息(圖片和PDF格式)

起因 為了實現在報銷流程中&#xff0c;發票不能重用的限制&#xff0c;發票上傳后&#xff0c;希望能讀出發票號&#xff0c;并記錄發票號已用&#xff0c;下次不再可用于報銷。 基于上面的需求&#xff0c;研究了OCR 的方式和讀PDF的方式&#xff0c;實際是可行的&#xff…

讀文獻先讀圖:GO弦圖怎么看?

GO弦圖&#xff08;Gene Ontology Chord Diagram&#xff09;是一種用于展示基因功能富集結果的可視化工具&#xff0c;通過弦狀連接可以更直觀的展示基因與GO term&#xff08;如生物過程、分子功能等&#xff09;之間的關聯。 GO弦圖解讀 ①內圈連線表示基因和生物過程之間的…

pandas隨筆

主要操作兩個對象&#xff1a;一維帶標簽數組 和 二維表格DataFrame 一維帶標簽數組Series pd.Series([1, 3, 5, np.nan, 6, 8]) &#xff0c;結果如下&#xff1a; 可指定索引&#xff0c;pd.Series([1, 3, 5], index[a, b, c]) 二維表格DataFrame 創建時需要指定列名&a…

java教程筆記(十一)-泛型

Java 泛型&#xff08;Generics&#xff09;是 Java 5 引入的重要特性之一&#xff0c;它允許在定義類、接口和方法時使用類型參數。泛型的核心思想是將類型由具體的數據類型推遲到使用時再確定&#xff0c;從而提升代碼的復用性和類型安全性。 1.泛型的基本概念 1. 什么是泛…

力扣刷題(第四十九天)

靈感來源 - 保持更新&#xff0c;努力學習 - python腳本學習 反轉鏈表 解題思路 迭代法&#xff1a;通過遍歷鏈表&#xff0c;逐個改變節點的指針方向。具體步驟如下&#xff1a; 使用三個指針&#xff1a;prev&#xff08;初始為None&#xff09;、curr&#xff08;初始為…

設置應用程序圖標

(1)找一張圖片 (2)然后轉ico圖片 在線生成透明ICO圖標——ICO圖標制作 驗證16x16就可以 降低exe大小 (3) 在xxx.pro修改 添加 &#xff08;4&#xff09; 刪除 build 和 xxxpro_user文件 (5)編譯project 和運行xx.exe (6)右鍵 設置快捷方式

免費wordpress模板下載

西瓜紅色的免費wordpress模板&#xff0c;簡潔實用又容易上手&#xff0c;適合新手使用。 下載 https://www.waimaoyes.com/moban/2231.html

【React】React 18 并發特性

React 18 引入了 并發特性&#xff08;Concurrent Features&#xff09;&#xff0c;這是一次對 React 渲染機制的重大升級&#xff0c;讓 React 更加智能、響應更流暢、資源更節省。 我們來詳細講解一下它的原理、特性、API 以及實際應用。 &#x1f9e0; 一、什么是并發特性…

FFMPEG 提取視頻中指定起始時間及結束時間的視頻,給出ffmpeg 命令

以下是提取視頻中指定起始時間及結束時間的 ffmpeg 命令示例: bash 復制 ffmpeg -i input.mp4 -ss 00:01:30.00 -to 00:05:00.00 -c copy output.mp4 其中,-i input.mp4 是指定要處理的輸入視頻文件為 “input.mp4”。 -ss 00:01:30.00 表示指定視頻的起始時間為 1 分 30 …

mybatis的if判斷==‘1‘不生效,改成‘1‘.toString()才生效的原因

mybatis的xml文件中的if判斷‘1’不生效&#xff0c;改成’1’.toString()才生效 Mapper接口傳入的參數 List<Table> queryList(Param("state") String state);xml內容 <where><if test"state ! null and state 1">AND EXISTS(select…

AI 模型分類全解:特性與選擇指南

人工智能&#xff08;AI&#xff09;技術正以前所未有的速度改變著我們的生活和工作方式。AI 模型作為實現人工智能的核心組件&#xff0c;種類繁多&#xff0c;功能各異。從簡單的線性回歸模型到復雜的深度學習網絡&#xff0c;從文本生成到圖像識別&#xff0c;AI 模型的應用…

01-python爬蟲-第一個爬蟲程序

開始學習 python 爬蟲 第一個獲取使用最多的網站-百度 源代碼 并將源代碼保存到文件中 from urllib.request import urlopenurl https://www.baidu.com resp urlopen(url)with open(baidu.html, w, encodingutf-8) as f:f.write(resp.read().decode(utf-8))知識點&#xf…

四六級監考《培訓學習》+《培訓考試》

1 線上注冊 &#xff08;網址&#xff1a; https://passport.neea.edu.cn 2 登錄培訓平臺參加線上必修課程學習和考核 &#xff08;平臺網址&#xff1a; https://kwstudy.neea.edu.cn 注意選擇學員入口&#xff09; 3 考試要求&#xff1a;考試成績須達應到80分以上&#xf…

回顧Java與數據庫的30年歷程

當 Java 1.0 于 1996 年推出時&#xff0c;語言和互聯網都與今天大不相同。當時&#xff0c;網絡主要是靜態的&#xff0c;而 Java 承諾通過注入交互式游戲和動畫來為網絡注入活力&#xff0c;這一承諾極具前景。根據 1995 年寫給《連線》雜志的 David Banks 的說法&#xff0c…

simulink有無現成模塊可以實現將三個分開的輸入合并為一個[1*3]的行向量輸出?

提問 simulink有無現成模塊可以實現將三個分開的輸入合并為一個[1*3]的行向量輸出&#xff1f; 回答 Simulink 本身沒有一個單獨的模塊能夠直接將三個分開的輸入合并成一個 [13] 行向量輸出&#xff0c;但是可以通過 組合模塊實現你要的效果。 ? 推薦方式&#xff1a;Mux …

代碼訓練LeetCode(24)數組乘積

代碼訓練(24)LeetCode之數組乘積 Author: Once Day Date: 2025年6月5日 漫漫長路&#xff0c;才剛剛開始… 全系列文章可參考專欄: 十年代碼訓練_Once-Day的博客-CSDN博客 參考文章: 238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09;力扣 (LeetCode) 全…

NLP學習路線圖(十七):主題模型(LDA)

在浩瀚的文本海洋中航行&#xff0c;人類大腦天然具備發現主題的能力——翻閱幾份報紙&#xff0c;我們迅速辨別出"政治"、"體育"、"科技"等板塊&#xff1b;瀏覽社交媒體&#xff0c;我們下意識區分出美食分享、旅行見聞或科技測評。但機器如何…