OpenLayers 快速入門(七)矢量數據

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二
作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路!
OpenLayers、Leaflet 快速入門 ,每周保持更新 2 個案例
Cesium 快速入門,每周保持更新 4 個案例

OpenLayers 快速入門(一)Map對象
OpenLayers 快速入門(二)Layer 對象
OpenLayers 快速入門(三)Source 對象補充
OpenLayers 快速入門(四)View 對象
OpenLayers 快速入門(五)Controls 對象
OpenLayers 快速入門(六)Interaction 對象
OpenLayers 快速入門(七)矢量數據
OpenLayers 快速入門(八)事件系統
OpenLayers 快速入門(九)Extent 介紹
OpenLayers 快速入門(十)常用 API 補充

矢量圖形

OpenLayers 中的矢量圖形,Feature(要素)和 Geometry(幾何)類構成了矢量圖形系統的基礎

在這里插入圖片描述

Geometry 類詳解

Geometry 類表示地理空間中的形狀,是所有幾何圖形的基類。

類型一覽

幾何類型描述創建示例
Point單點位置new Point([x, y])
LineString線(有序點序列)new LineString([[x1,y1], [x2,y2]])
Polygon多邊形(外環+內環)new Polygon([[[x1,y1], [x2,y2], …]])
Circle圓形new Circle(center, radius)
MultiPoint多點集合new MultiPoint([[x1,y1], [x2,y2]])
MultiLineString多線集合new MultiLineString([[…], […]])
MultiPolygon多面集合new MultiPolygon([[…], […]])
GeometryCollection混合幾何集合new GeometryCollection([point, line])

公共方法

所有幾何類型都繼承自 ol/geom/Geometry 基類,具有以下公共方法

方法描述參數
clone()創建幾何的深拷貝-
getExtent()獲取空間范圍extent(可選)
getType()獲取幾何類型-
transform(source, destination)轉換坐標系sourceProj, destProj
applyTransform(transformFn)應用自定義坐標變換transformFn
simplify(tolerance)簡化幾何tolerance
rotate(angle, anchor)旋轉幾何angle(弧度), anchor(中心點)
scale(factorX, factorY, anchor)縮放幾何factorX, factorY, anchor
translate(deltaX, deltaY)平移幾何deltaX, deltaY
intersectsCoordinate(coordinate)判斷坐標是否在幾何內[x, y]
intersectsExtent(extent)判斷是否與范圍相交[minX, minY, maxX, maxY]
getCoordinates()獲取坐標-
setCoordinates(coordinates)設置坐標坐標數組

點(Point)

點幾何表示地球上的一個單一位置。

import Point from "ol/geom/Point";const point = new Point([116.4074, 39.9042]);
point.getCoordinates(); // [116.4074, 39.9042]point.transform("EPSG:4326", "EPSG:3857"); // [12245410.74511129, 3844357.763493687]

線(LineString)

線幾何表示由有序點序列組成的路徑。

特有方法:

  • getLength():返回線要素在投影平面上的長度
  • getCoordinateAt(fraction):根據參數 fraction(取值范圍 0 到 1)返回線要素上的坐標
import LineString from "ol/geom/LineString";const line = new LineString([[0, 0],[10, 10],
]);
line.getLength(); // 14.142135623730951
line.getCoordinateAt(0.5); // [5, 5]

面(Polygon)

面幾何表示由有序點序列組成的閉合區域。

特有方法:

  • getArea():返回面要素在投影平面上的面積
  • getInteriorPoint():返回面要素內部的一個點
import Polygon from "ol/geom/Polygon";const polygon = new Polygon([[[0, 0],[10, 0],[10, 10],[0, 10],[0, 0],],
]);
polygon.getArea(); // 100
polygon.getInteriorPoint().getCoordinates(); // [5, 5, 10]

圓(Circle)

圓形幾何,Circle 類表示一個圓形區域。

new Circle(center, radius)

  • center:圓的中心點坐標,格式為 [x, y]
  • radius:圓的半徑,單位與地圖投影單位相同

特有方法:

  • getRadius():返回圓要素的半徑
  • getCenter():返回圓要素的中心點
  • setRadius(radius):設置圓要素的半徑
  • setCenter(center):設置圓要素的中心點
  • setCenterAndRadius(center, radius):同時設置中心點和半徑
import Circle from "ol/geom/Circle";const circle = new Circle([0, 0], 5);circle.getRadius();circle.getCenter();circle.setRadius(10);circle.setCenter([1, 1]);circle.setCenterAndRadius([2, 2], 15);

多點(MultiPoint)

MultiPoint 類表示多個點的集合。

特有方法:

  • getPoints():返回多點要素的點數組
  • getPoint(index):返回指定索引的點
  • appendPoint(point):添加一個點到多點要素中
import MultiPoint from "ol/geom/MultiPoint";const multiPoint = new MultiPoint([[0, 0],[10, 10],
]);multiPoint.getPoints(); // [Point, Point]multiPoint.getPoint(0); // PointmultiPoint.appendPoint(new Point([20, 20]));

多線(MultiLineString)

MultiLineString 類表示多個線的集合。

特有方法:

  • getLineStrings():返回多線要素的線數組
  • getLineString(index):返回指定索引的線
  • appendLineString(lineString):添加一條線到多線要素中
  • getLength():返回多線要素的總長度
import MultiLineString from "ol/geom/MultiLineString";const multiLine = new MultiLineString([[[0, 0],[10, 10],],[[20, 20],[30, 30],],
]);multiLine.getLineStrings(); // [LineString, LineString]multiLine.getLineString(0); // LineStringmultiLine.appendLineString(new LineString([[40, 40],[50, 50],])
);

多面(MultiPolygon)

MultiPolygon 類表示多個面的集合。

特有方法:

  • getPolygons():返回多面要素的面數組
  • getPolygon(index):返回指定索引的面
  • appendPolygon(polygon):添加一個面到多面要素中
  • getArea():返回多面要素的總面積
import MultiPolygon from "ol/geom/MultiPolygon";const multiPoly = new MultiPolygon([[[[0, 0],[10, 0],[10, 10],[0, 10],[0, 0],],],[[[20, 20],[30, 20],[30, 30],[20, 30],[20, 20],],],
]);
multiPoly.getArea(); // 200
multiPoly.appendPolygon(new Polygon([[[5, 5],[15, 5],[15, 15],[5, 15],[5, 5],],])
);

集合(GeometryCollection)

GeometryCollection 類表示多個幾何要素的集合。

特有方法:

  • getGeometries():返回集合中的幾何要素數組
  • setGeometries(geometries):設置集合中的幾何要素數組
  • getExtent():返回集合中所有幾何要素的范圍
import GeometryCollection from "ol/geom/GeometryCollection";const collection = new GeometryCollection([new Point([0, 0]),new LineString([[0, 0],[10, 10],]),
]);
collection.getGeometries().length; // 2

Feature 類詳解

在 OpenLayers 中,一個 Feature 對象就表示一個地理要素。

核心概念

  • Feature = Geometry + Attributes + Style
  • 每個 Feature 代表地圖上的獨立實體(如建筑物、道路)
  • 通過 Vector Layer 渲染到地圖

屬性

  • 直接傳遞一個 Geometry 對象,或者傳入一個對象,存在geometry鍵,Geometry 會和這個鍵相關聯
// 示例1:直接傳入一個 Geometry 對象
const feature = new Feature(new Point([116.4074, 39.9042]));// 示例2:傳入一個對象,存在 geometry 鍵,Geometry 會和這個鍵相關聯
const feature = new Feature({geometry: new Point([0, 0]),name: "YGYong",
});

方法

  • getGeometry():獲取要素的幾何對象
  • setGeometry(geometry):設置要素的幾何對象
  • get(key):獲取要素的屬性值
  • set(key, value):設置要素的屬性值
  • getProperties():獲取要素的所有屬性
  • setProperties(properties):設置要素的所有屬性
  • getGeometryName():獲取要素的幾何類型名稱
  • setGeometryName(name):設置要素的幾何類型名稱
  • getKeys():獲取要素的所有屬性鍵
  • getStyle():獲取要素的樣式
  • setStyle(style):設置要素的樣式
  • getId():獲取要素的唯一標識符
  • setId(id):設置要素的唯一標識符,要素 ID 可以與 getFeatureById 方法一起使用
// 創建要素
const feature = new Feature({geometry: new Point([0, 0]),name: "YGYong",
});// 獲取name屬性
const name = feature.get("name");
// 設置ID
feature.setId("feature_001");// 獲取ID
const featureId = feature.getId();// 通過source獲取ID
const featureById = source.getFeatureById("feature_001");
// 設置幾何
feature.setGeometry(new Point([10, 20]));// 獲取幾何
const geom = feature.getGeometry();
// 設置屬性集合
feature.setProperties({name: "重要設施",type: "醫院",capacity: 500,contact: {phone: "123-456-7890",email: "contact@example.com",},
});// 獲取屬性集合
const properties = feature.getProperties();
// 設置固定樣式
feature.setStyle(new Style({image: new CircleStyle({radius: 10,fill: new Fill({ color: "red" }),}),})
);// 設置動態樣式函數
feature.setStyle((feature, resolution) => {const size = resolution < 100 ? 10 : 5;return new Style({image: new CircleStyle({radius: size,fill: new Fill({ color: "blue" }),}),});
});

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

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

相關文章

【PTA數據結構 | C語言版】關于堆的判斷

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 將一系列給定數字順序插入一個初始為空的最小堆。隨后判斷一系列相關命題是否為真。命題分下列幾種&#xff1a; x is the root&#xff1a;x是根結點&#xff1b;x and y are siblings&#xff1a…

[CH582M入門第十步]藍牙從機

前言 學習目標: 1、初步了解BLE協議 2、BLE從機代碼解析 3、使用手機藍牙軟件控制CH582M從機LED亮滅一、藍牙介紹 藍牙(Bluetooth)是一種短距離無線通信技術,主要用于設備之間的數據傳輸和通信。它由愛立信(Ericsson)于1994年提出,現由藍牙技術聯盟(Bluetooth SIG)維…

力扣(LeetCode) ——輪轉數組(C語言)

題目&#xff1a;輪轉數組 給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例1&#xff1a; 輸入&#xff1a; nums [1,2,3,4,5,6,7]&#xff0c;k 3 輸出&#xff1a; [5,6,7,1,2,3,4] 解釋&#xff1a; 向右輪轉 1 步:…

Rocky9部署Zabbix7(小白的“升級打怪”成長之路)

目錄 一、關閉防火墻和SElinux和配置安裝源 二、zabbxi服務器配置 1、安裝Zabbix server&#xff0c;Web前端&#xff0c;agent &#xff0c;mysql-server 2、配置mysql數據庫 3、為Zabbix server配置數據庫 4、啟動對應服務 三、登錄zabbix 四、客戶端部署 五、解決中…

python安裝package和pycharm更改環境變量

安裝numpy包 1、找到對應python版本的numpy包的版本 NumPy - News確認適配python版本的numpy&#xff0c;我安裝 的python是3.11所以安裝的numpy是2.2.0 2、修改pip安裝的鏡像源 1、全局修改&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.c…

Redis中的setnx命令為什么是原子性的

Redis的SETNX命令是一個原子性操作&#xff0c;這得益于其單線程架構的特性。Redis采用單線程模型&#xff0c;所有命令都在主線程中順序執行&#xff0c;確保每個操作都具有原子性。執行SETNX時&#xff0c;Redis會首先檢查指定key是否存在&#xff1a;若不存在則設置值并返回…

深入解析Hadoop中的EditLog與FsImage持久化設計及Checkpoint機制

HDFS元數據管理概述在HDFS&#xff08;Hadoop Distributed File System&#xff09;的架構中&#xff0c;元數據管理是保證系統可靠性和性能的核心環節。NameNode作為HDFS的主節點&#xff0c;負責維護整個文件系統的命名空間和文件到數據塊的映射關系。這些元數據的高效管理直…

MFC類Qt的自動布局框架

由于作者習慣使用Qt&#xff0c;習慣了其框架下的水平和垂直布局。但在使用MFC時&#xff0c;卻發現并沒有十分好用的布局框架&#xff0c;檢索了部分資料&#xff0c;發現要么不提供源碼&#xff0c;要么方案不理想。搜索了很多資料&#xff0c;最終發現一個可用方案&#xff…

認識Transformer架構

一.前言前面我們介紹了RNN相關系列的模型&#xff0c;在當今大模型時代大家認識一下就好了&#xff0c;而本章節我們是要來介紹一下重中之重的Transformer模型&#xff0c;本章節就來介紹一下他的架構&#xff0c;了解Transformer模型的作?以及了解Transformer總體架構圖中各個…

Python學習之存數據

在得到了對應的數據之后可以考慮用文件或者數據庫的方式把內容持久化下來方便之后的分析&#xff0c;此時可以使用pymongo庫&#xff0c;寥寥幾行代碼&#xff0c;數據就已經很好地存儲下來。&#xff08;此處可參考我們之前發的文章)在 Python 中引入&#xff1a;import pymon…

PointLLM - ECCV 2024 Best Paper Candidate

https://github.com/OpenRobotLab/PointLLM PointLLM: Empowering Large Language Models to Understand Point Clouds 核心問題 對比兩種讓大型語言模型&#xff08;LLM&#xff09;“看懂”三維世界的方法 間接方法&#xff1a;通過2D圖像進行猜測。 這是目前比較常見但充…

前端-CSS-day6

目錄 1、相對定位 2、絕對定位 3、絕對定位-居中 4、固定定位 5、堆疊順序 6、CSS精靈-基本使用 7、案例-京東服務 8、字體圖標-體驗 9、使用字體圖標 10、垂直對齊方式 11、過渡 12、透明度 13、光標類型 14、綜合案例-輪播圖 1、相對定位 <!DOCTYPE html>…

在離線 Ubuntu 22.04機器上運行 ddkj_portainer-cn 鏡像 其他相關操作也可以復刻 docker

以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作 地址&#xff1a;星宇科技 | GPU服務器 高性能云主機 云服務器-登錄 相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客 兌換碼要是過期了&#xff0c;可以私信我獲取最新兌換碼&#xff01;&a…

數據結構系列之二叉搜索樹

前言 這是我數據結構系列的第一篇&#xff0c;其余C語言模擬的數據結構均會在開學之后跟隨老師上課而更新&#xff08;雖然我已經寫完了&#xff09;&#xff0c;更新這塊主要是因為要由二叉搜索樹講到AVL樹再講到紅黑樹&#xff0c;因為map和set的底層是紅黑樹&#xff0c;就…

系統架構師:軟件工程-思維導圖

軟件工程的定義??軟件工程??是一門系統性、規范化的工程學科&#xff0c;它將工程化的方法、工具和技術應用于軟件的開發、運行與維護全生命周期&#xff0c;旨在解決軟件復雜度帶來的質量、成本和效率問題。其核心目標是通過結構化方法與技術實踐&#xff0c;確保軟件系統…

Django 入門詳解:從零開始構建你的第一個 Web 應用

Django 是一個高級的 Python Web 框架&#xff0c;鼓勵快速開發和干凈、實用的設計。它遵循“不要重復造輪子&#xff08;Dont Repeat Yourself, DRY&#xff09;”的原則&#xff0c;內置了諸如用戶認證、內容管理、表單處理等常見功能&#xff0c;非常適合構建內容驅動的網站…

[3-02-02].第04節:開發應用 - RequestMapping注解的屬性2

SpringMVC學習大綱 注解的源碼&#xff1a; 三、注解的params屬性 3.1.params屬性的理解&#xff1a; params屬性用來通過設置請求參數來映射請求。對于RequestMapping注解來說&#xff1a; params屬性也是一個數組&#xff0c;不過要求請求參數必須和params數組中要求的所有…

layui表格多選及選中

多選獲取選中數據//獲取選中行數據 var tbData table.cache["tablist2"]; var chkDatas tbData.filter(s > s.LAY_CHECKED true); if (vm.isEmpty(chkDatas) || chkDatas.length 0) {os.error("未選中數據&#xff01;");return; }單選選中樣式及數…

卡爾曼濾波數據融合

狀態向量&#xff1a;位置和速度 [x, y, vx, vy]預測階段&#xff1a;用加速度估算速度和位置&#xff08;IMU數據&#xff09;更新階段&#xff1a;用 GPS 位置修正漂移&#xff08;每隔一定時間才來一次&#xff09;import numpy as np# 時間步長&#xff08;秒&#xff09; …

Qwen3-8B 的 TTFT 性能分析:16K 與 32K 輸入 Prompt 的推算公式與底層原理詳解

一、模型概述與上下文支持能力Qwen3-8B 是通義實驗室推出的 80 億參數大語言模型&#xff0c;支持 32,768 token 的上下文長度 。其核心優化點包括&#xff1a;FP8 量化技術&#xff1a;通過將權重從 32-bit 壓縮至 8-bit&#xff0c;顯著降低顯存占用并提升推理效率&#xff0…