GIS拓扑讲解点线面几何体的拓扑关系判断及运算分析_turf案例
Turf.js简介
Turf.js是JavaScript 空间分析库,由Mapbox 提供,Turf 实现了
空间分析操作,例如生成缓冲区、计算等高线,建立 TIN 等;
空间几何对象关系的计算,点、线、面之间包含、相交等
Turf.js使用 JavaScript 编写,通过 npm 进行包管理。良好的模块化设计使得 Turf 不仅可用于浏览器端(以往只属于桌面 GIS 的分析功能,已经可以在浏览器中使用),还可以通过 Node.js 在服务器端使用(过往一般只能找到java或者C++分析包)。当然也支持其它预研版本
Turf 原生支持 GeoJSON 矢量数据。GeoJSON 的优点是结构简单,并且得到了所有网页地图API的支持;但 GeoJSON 不支持空间索引,这个缺点可能会限制 Turf 处理大型文件的能力效率。
Turf 可以非方便地集成到 Leaflet.js 地图控件中,Mapbox 也为其提供了相应的 Mapbox.js 插件。
Turf的数据标准是WGS84经度、纬度坐标,大多数Turf函数使用GeoJSON功能,如点Point、线LineString、面Polygon
TurfTurf.js库应用:点线面几何体的拓扑关系判断及运算分析
Turf功能简介
Turf功能列表:
MEASUREMENT:计算工具,测量,计算面积area、长度length、中心点midpoint。点到线的长度:pointToLineDistance,点到线上最近的投影点nearestPointOnLine
COORDINATE MUTATION:坐标变换,坐标翻转flip、倒置rewind、截取truncate
TRANSFORMATIONL:拓扑运算、图形变换生成,主要用于,比如:合并图形、给出点与半径生成圆形、缓冲区buffer
HELPER:坐标数组,生成GeoJSON feature,
RANDOM:随机图形生成
MISC:杂项目
JOINS:坐标筛选,pointsWithinPolygon筛查出在多边形内的坐标、
GRIDS:网格,生成各种网格
classification:分类,nearestPoint,寻找最靠近目标的点
BOOLEANS:拓扑关系判断
UNIT CONVERSION: 单位换算,转换面积、长度等度量单位,toWgs84 toMercator(麦卡托/WGS84互转)
一般要到最多的是BOOLEANS 拓扑关系判断、JOINS筛选、COORDINATE MUTATION坐标变换,像MEASUREMENT计算工具(百度、高德都自带数学工具),其中最常用的一概是拓扑关系了。
Turf拓扑关系判断
在数学上,拓扑关系有
Turf提供的拓扑关系判断,Geometry之间的关系有如下几种:
关系类型 | 描述 |
---|---|
包含:Contains | 几何形状B的线都在几何形状A内部 :B⊂A,检查几何对象A是否包含几何对象B。 |
内含:Within | 几何形状A的线都在几何形状B内部。B⊃A |
相交:Crosses | 几何形状至少有一个共有点 A∩B≠∅ , 检查两个几何对象是否交叉相交。
只能在不同维度使用:如点和线,线和面等。不能在线与线之间,和点与点之间,也不能在面与面之间使用。 |
脱节:Disjoint | 几何形状没有共有的点 A∩B=∅, 检查两个几何对象是否相交。 |
相等:Equals: |
判断两个图形是否是同一个类型并且在平面上的点是否是相同的位置。如果返回值为真,则它们应该包含(Contains)另外一个图形同时也被另外一个图形所包含(Within)。A≡B,B⊆A且B⊇A |
重叠:Overlaps |
几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。 判断两个图形的交集是否和其中的一个图形拥有相同的维数,并且他们交集不能和其中任何一个图形相等。 该方法只使用与两个Polyline之间或者两个Polygon 之间。 |
接触:Touch |
几何形状有至少一个公共的边界点,但是没有内部点。检查两个几何对象是否相连 判断两个图形的边界是否相交,如果两个图形的交集不为空,但两个图形内部的交集为空,则返回值为真。 |
拓扑关系判断需要注意点是:
overlaps 重叠
这里的重叠跟平时我们理解的不太一样,这里的重叠,必须是A与B有交集,且A与B的交集不能和A,B一样,其实就是我们平时理解的相交。
该方法只使用与两个Polyline之间或者两个Polygon 之间。
crosses 穿过(相交)
这里的拓扑关系比较特殊,使用crosses,不能在同纬度使用,但可以在不同的维度使用,如:点和线,线和面等。
不能在线与线之间,和点与点之间,也不能在面与面之间使用。
insertect 相交(交叠)
这里的相交就容易理解了,只要满足上面任意一种情况,都能成为insertect。
对于需要交叉裁剪的(如:相交的,这里的相交是,overlaps,而不是insertect),再进行逻辑分析
contains 包含
必须完全在范围之内的。
Turf.js拓扑判断函数
完全包含:booleanContains(feature1,feature2) //feature2是否完全包含在feature1中
全被包含:booleanWithin(feature1,feature2) //feature1是否完全在feature2中
相交判断:booleanCrosses(feature1,feature2) //feature1,feature2是否相交
相离判断:booleanDisjoint(feature1,feature2) //feature1,feature2是否相离
重合判断:booleanEqual(feature1,feature2) //feature1,feature2是否重合
重叠判断:booleanOverlap(feature1,feature2) //feature1,feature2是否重叠,判断线面
闭合判断:booleanClockwise(line) //线是否闭合
平行判断:booleanParallel(line,line) //两条线是否平行
点在线上:booleanPointOnLine(point,line) //点是否在线上
点在面上:booleanPointInPolygon(point,polygon) //点是否在面中
官方文档已经讲的非常详细,不必多说
拓扑运算分析
拓扑关系及运算分析:
关系 | 描述 |
---|---|
缓冲区分析(Buffer) |
包含所有的点在一个指定距离内的多边形和多多边形。如辐射范围,使用该方法 |
凸壳分析(ConvexHull) |
包含几何形体的所有点的最小凸壳多边形(外包多边形)登高先 |
交叉分析(Intersection) |
A∩B 交叉操作就是多边形AB中所有共同点的集合 |
联合分析(Union) |
AUB AB的联合操作就是AB所有点的集合 |
差异分析(Difference) |
(A-A∩B) AB形状的差异分析就是A里有B里没有的所有点的集合 |
对称差异分析(SymDifference) |
(AUB-A∩B) AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合 |
推荐阅读《代数拓扑\集合拓扑\代数拓扑\拓扑关系\拓扑结构_笔记》
拓扑示意图
turf关系分析函数
turf.js关系分析函数主要在TRANSFORMATION下,api参考:http://turfjs.org/docs/#buffer
这方面,觉得没有必要多谢,还是看api吧
Turf.js代码引入
git:https://github.com/Turfjs/turf
turf安装:
npm install@turf/turf
单独安装某个模块
npm install@turf/point @turf/buffer
TypeScript 版本使用
npm install--save @types/turf
现在的打包工具,直接第一条
项目导入
import * as turf from '@turf/turf' var point = turf.point([-75.343, 39.984]);
var linestring = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' }); var collection = turf.featureCollection([point,linestring,polygon]); var geometry = { "type": "Point", "coordinates": [110, 50]};
var feature = turf.feature(geometry);
使用方面,就没有啥好说的,网上搜到了一些案例,可以看一下。
Turf.js应用案列
Openlayers + Turf.js 实现云朵标注
这里用Turf.js 只是为了用union方法, 将多个圆拼凑起来.
OL4结合turf.js实现等值线
使用leafletjs、turfjs前端绘制点线面缓冲区
参考资料:
利用Turf.js实现点线面几何体的拓扑关系判断 https://blog.csdn.net/u013240519/article/details/84144336
JTS Geometry关系判断和分析 https://www.cnblogs.com/duanxingxing/p/5150487.html
arcgis js 几种拓扑关系详解 https://www.cnblogs.com/sguozeng/p/10250135.html
转载本站文章《GIS拓扑讲解点线面几何体的拓扑关系判断及运算分析_turf案例》,
请注明出处:https://www.zhoulujun.cn/html/GIS/WebGIS/8177.html
GIS拓扑讲解点线面几何体的拓扑关系判断及运算分析_turf案例的更多相关文章
- js !!条件判断或运算的作用
今天看到一个判断语句非常奇怪: if(!!selected){} //为什么是双'!'号呢? 自己查了下资料终于明白了这其中的原理: 原来'!!'会将表达式转为Boolean类型的数据. 如果'!un ...
- Java基础知识强化46:StringBuffer类之判断一个字符串是否对称案例
1. 分析:判断一个字符串是否是一个对称的字符串,我们只需要把字符串的第1个字符和最后1个字符,第2个字符和倒数第2个字符,…… 比较的次数是长度除以2. 方法1:通过取取索引对应值来进行一一比对 ...
- 10_bash_变量_条件判断及运算_sed_循环
shell编程: 编译器.解释器编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量):变量在使用前,必须事先声明,甚至还需要初始化 事先转换成可执行格式 C/C++.C#.Ja ...
- Javascript--运算符判断成绩运算
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java实现 LeetCode 785 判断二分图(分析题)
785. 判断二分图 给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我 ...
- 定位、判断、cookie的脚本案例
Action(){ lr_think_time(20); lr_start_transaction("µã»÷ÊÂÏî°ìÀíÇé¿ö°´Å¥"); web_url("L ...
- GIS 基础知识简介
前言 前一段时间,在公司进行了分析 GIS 基础信息的介绍.之所以会有这个介绍以及为什么是我?这个个中缘由说下. 公司不是一个GIS方面的公司,但是由于业务的需要,经常需要用到地图(要和地图打交道), ...
- 2012高校GIS论坛
江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办 ...
- 聊聊GIS数据的四个分层与GIS服务
本篇不讨论矢量栅格数据的结构,也不讨论矢量与栅格的区别(即设定读者有这方面的基础). 版权声明:原创.博客园/B站/小专栏/知乎/CSDN @秋意正寒 转载请标注原地址并声明转载: https://w ...
- GIS平台结构设计
前言: WebGIS由于技术发展和功能定位的原因,一般在进行架构设计的时候更多地考虑是否容易实现.用户交互.数据传输方便.渲染效果等方面,对强GIS的应用考虑得少,所以架构上与桌面的GIS平台很不一样 ...
随机推荐
- 关于长链剖分的数组实现 | CF1009F Dominant Indices
请容许我不理解一下为什么这题题解几乎全都是指针实现/kk 其实长链剖分是可以直接用数组来写的. 考虑朴素 DP.设 \(f_{u,i}\) 表示以点 \(u\) 为根的子树中与点 \(u\) 距离为 ...
- 从零开始搭建antd4.x + react16 + redux4 + webpack4 + react-router5基础框架解析
以上是2020年10月份的版本,后来,我将xmind进行了完善,文档也写的差不多了,可是,电脑坏了,硬盘换了,文件都没有了.这已经是第三次写这个文档了,思维导图就不更新了,按照几个重点进行说明. 这个 ...
- DOM级别
DOM1 DOM1级由两个模块组成:DOM核心(DOM CORE)和DOM HTML.其中,DOM核心规定的是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作.DOM HTML模块则 ...
- Util应用框架基础(六) - 日志记录(一) - 正文
本文介绍Util应用框架如何记录日志. 日志记录共分4篇,本文是正文,后续还有3篇分别介绍写入不同日志接收器的安装和配置方法. 概述 日志记录对于了解系统执行情况非常重要. Asp.Net Core ...
- testre
f5看到关键代码判断 猜测这是flag或者是加密后的结果,直接将其当作flag答案不对,所以猜测为加密后的结果,然后再通过其他函数了解 跟进第一个函数发现编码表 本来想试试base解密,可是当时只试了 ...
- 30. 干货系列从零用Rust编写正反向代理,HTTP的组装之旅(中间件)
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- 🔥🔥Java开发者的Python快速进修指南:面向对象进阶
在上一期中,我们对Python中的对象声明进行了初步介绍.这一期,我们将深入探讨对象继承.组合以及多态这三个核心概念.不过,这里不打算赘述太多理论,因为我们都知道,Python与Java在这些方面的主 ...
- [AI]人工智能早就可以拥有有大量的初级意识
引子 意识是人类最基本而神秘的经验之一.在探索意识的本质时,我们需要建立清晰的概念分类体系,以免将它混同于其他概念而无法深入研究. 本文旨在阐述人类意识可能包含的两个层面:初级意识和高级意识,并明确区 ...
- JAVA学习week2
这周:根据老师在群里面推荐的JAV学习路线,初步规划了一下学习方案 并找到了相关的视频,目前来说在学习SE.学习内容:环境变量的配置和简单的hello world程序书写的注意点 下周:打算进行简单的 ...
- JavaWeb项目练习(学生选课管理系统)一
打算做一个选课管理系统,作为期末的复习. 上需求 2.1 页面要求 (1)系统可以通过浏览器直接访问:(1分) (2)各个功能页面整体风格统一:(2分) (3)首页为用户登录页面,管理员.教师.学生三 ...