GIS算法

news2024/11/14 19:37:57

目录

简介

GIS标准简介

空间数据模型

3.1 WKT与GeoJSON

3.2 WKB格式

GIS算法三方包


简介

地理信息系统(简称GIS),以数字化的形式反映人类社会赖以生存的地球空间的现势和变迁的各种空间数据以及描述这些空间数据特征的属性,支持空间数据及其属性数据的输入/输出,存储,显示以及进行地理空间信息的查询,综合分析和辅助决策.

GIS标准简介

        WKT与WKB是OGC中的简单服务标准SFS(Simple Features Interface Standard),但是GeoJSON并不是OGC中的标准。

  1. WKT(Well-known text)是开放地理空间联盟OGC(Open GIS Consortium )制定的一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。
  2. WKB(well-known binary) 是WKT的二进制表示形式,解决了WKT表达方式冗余的问题,便于传输和在数据库中存储相同的信息
  3. GeoJSON 一种JSON格式的Feature信息输出格式,它便于被JavaScript等脚本语言处理,OpenLayers等地理库便是采用GeoJSON格式。此外,TopoJSON等更精简的扩展格式

No, GeoJSON is not an OGC standard:
 
IETF Geographic JSON Working Group
 
The Internet Engineering Task Force, in conjunction with the original specification authors, has formed the Geographic JSON WG to standardize the format. Work continues on GitHub at https://github.com/geojson/draft-geojson.

空间数据模型

3.1 WKT与GeoJSON

WKT与geojson分为点、线、面、几何集合四种:

  • 点:Point, MultiPoint
  • 线:LineString, MultiLineString
  • 面:Polygon, MultiPolygon
  • 几何结合:GeometryCollection可以由多种Geometry组成,如:GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)

Type

Shape

WKT

GeoJSON

Point

 

POINT (30 10)

{ "type": "Point", "coordinates": [30, 10] }

LineString

 

LINESTRING (30 10, 10 30, 40 40)

{ "type": "LineString", "coordinates": [ [30, 10], [10, 30], [40, 40] ] }

Polygon

POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))

{ "type": "Polygon", "coordinates": [ [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]] ] }

 POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30))
{ "type": "Polygon", "coordinates": [ [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]] ] }
MultiPointMULTIPOINT ((10 40), (40 30), (20 20), (30 10)){ "type": "MultiPoint", "coordinates": [ [10, 40], [40, 30], [20, 20], [30, 10] ] }
MULTIPOINT (10 40, 40 30, 20 20, 30 10)
MultiLineStringMULTILINESTRING ((10 10, 20 20, 10 40),
(40 40, 30 30, 40 20, 30 10))
{ "type": "MultiLineString", "coordinates": [ [[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]] ] }
MultiPolygonMULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),
((15 5, 40 10, 10 20, 5 10, 15 5)))

{ "type": "MultiPolygon", "coordinates": [ [ [[30, 20], [45, 40], [10, 40], [30, 20]] ], [ [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]] ] ] }

MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),
((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),
(30 20, 20 15, 20 25, 30 20)))
{ "type": "MultiPolygon", "coordinates": [ [ [[40, 40], [20, 45], [45, 30], [40, 40]] ], [ [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]] ] ] }

 

WKT与geojson的主要区别是wkt是单独用来表示空间点线面数据的,而geojson还可以用来表示空间数据和属性数据的集合,下面是shp面数据转geojson,其中还包含图层信息等,而wkt并不能表示这个。

{
"type": "FeatureCollection",
"name": "a",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::3857" } },
"features": [
{ "type": "Feature", "properties": { "AREA": 0.0, "PERIMETER": 0.016, "BOU2_4M_": 914, "BOU2_4M_ID": 3089, "ADCODE93": 810000, "ADCODE99": 810000, "NAME": "棣欐腐鐗瑰埆琛屾斂鍖" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12720007.326881121844053, 2544771.959127825684845 ], [ 12720092.256912549957633, 2545226.735669989138842 ], [ 12720510.112667175009847, 2545228.571321710944176 ], [ 12720666.383925, 2544938.081929029431194 ], [ 12720007.326881121844053, 2544771.959127825684845 ] ] ] } },
{ "type": "Feature", "properties": { "AREA": 0.0, "PERIMETER": 0.013, "BOU2_4M_": 915, "BOU2_4M_ID": 3090, "ADCODE93": 810000, "ADCODE99": 810000, "NAME": "棣欐腐鐗瑰埆琛屾斂鍖" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12730249.039371021091938, 2544414.938326342497021 ], [ 12730198.930652478709817, 2544711.384370831772685 ], [ 12730315.28479553386569, 2544832.534102902282029 ], [ 12730576.019992018118501, 2544807.065052719321102 ], [ 12730715.30524355918169, 2544607.902998786885291 ], [ 12730353.503309676423669, 2544404.842732572928071 ], [ 12730249.039371021091938, 2544414.938326342497021 ] ] ] } }
]
}

3.2 WKB格式

     WKB采用二进制进行存储,更方便于计算机处理,因此广泛运用于数据的传输与存储,以二位点Point(1 1)为例,

     其WKB表达如下:

         01  0100 0020 E6100000  000000000000F03F 000000000000F03F

        

    

  1. byteOrder
    • 表示编码方式,00为使用big-endian编码(XDR),01为使用little-endian编码(NDR)。他们的不同仅限于在内存中放置字节的顺序,比如我们将0x1234abcd写入到以0×0000开始的内存中,则结果如下表:

    • Address

      big-endian

      little-endian

      0×0000

      0x12

      0xcd

      0×0001

      0x34

      0xab

      0×0002

      0xab

      0x34

      0×0003

      0xcd

      0x12

  2. webTypd
    • 第二到第九字节对矢量数据基本信息进行了定义
      • 第二与第三个字节规定了矢量数据的类型,如例子中的0100代表Point;

      • 第三与第四个字节规定了矢量数据的维数,如例子中的0020代表该点是二位的;

      • 第五到第九个字节规定了矢量数据的空间参考SRID,如例子中的E6100000是4326的整数十六位进制表达
  3. srid
    • 第五到第九个字节规定了矢量数据的空间参考SRID,如例子中的E6100000是4326的整数十六位进制表达
  4. structPoint
    • 第十个字节开始,每16个字节就代表一个坐标对,如例子中的000000000000F03F是浮点型1的十六进制表达

     

GIS算法三方包

    java是jts,python是shapely,js是turf

参考文献:

1. Java JTS & 空间数据模型 - jihite - 博客园

2. GIS算法:可视化工具JTS TestBuilder_Archie_java的博客-CSDN博客_jts testbuilder

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgresql数据库主备安装,备份还原

一.postgresql数据库安装 1.下载软件包 地址:PostgreSQL: File Browser 2.解压安装 [rootpostgresql u01]# tar -zxf postgresql-14.2.tar.gz安装环境 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel op…

小说阅读 (支持txt文本文件浏览)

小说阅读2022 - 界面 2023年1月2日 更新 1、修复BUG。。。 2、优化运行。。。 3、添加了 【[阅读笔记] - 可以在章节处填写阅读笔记保存,程序会自动记录位置坐标,每次在读到本章节保存位置坐标时右上角会自动跳出提示图标,点击提示图标即可…

SAP FICO付款及清账

付款及清账 在SAP中,处理付款要达到两个效果: 实现会计凭证的处理; 实现清账(将付款与应付账款对应核销); 可以边付边清,也可以先付后清。 一、付款并清账 企业的付款一般有现金付款、银行存款…

Gem5模拟器,全流程运行Chiplet-Gem5-SharedMemory-main(十)

小白入门,跑着个代码头都给我跑秃了,文档说不详细吧似乎啥都和你说了,说它详细吧,看了几遍也跑不出来。记录一下我遇到的问题: 目录 一、确定待执行的程序 (1)那些年的undefined reference &…

(3分钟速通)Visual Odometry的特征点法和直接法

光流法:(https://zhuanlan.zhihu.com/p/537113460) ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑切换为居中 添加图…

【免费开放源码】审批类小程序项目实战(预约历史页面)

第一节:什么构成了微信小程序、创建一个自己的小程序 第二节:微信开发者工具使用教程 第三节:深入了解并掌握小程序核心组件 第四节:初始化云函数和数据库 第五节:云数据库的增删改查 第六节:项目大纲以及制…

Vue与React分别实现登录拦截【详细例子+讲解】

文章标题一、Vue实现登录拦截1-1、 效果展示1-2 代码展示1-2-1 router.js1-2-2 store文件夹下1-2-2-1 state.js1-2-2-2 index.js1-2-2-3 mutation.js1-2-3 main.js【实现登录拦截的关键---全局路由守卫】1-2-4 pages下的login.vue1-3 总结二、 Vue项目功能简介2-1 功能2-2 查看…

基于RBAC模型的权限控制的一整套基础开发平台,前后端分离,后端django,前端 vue+ElementUI

Django-Vue-Admin 完整代码下载地址:基于RBAC模型的权限控制的一整套基础开发平台 💡 「关于」 我们是一群热爱代码的青年,在这个炙热的时代下,我们希望静下心来通过Code带来一点我们的色彩和颜色。 因为热爱,所以…

TensorFlow之过拟合与欠拟合-1

1 基本概念 过度拟合(overfit) 创建的模型与用于该模型的训练数据之间发生过于密切的关系,从而引起该模型无法对新数据进行准确的预测。正则化(Regularization)策略可以减少过度拟合,或者使用大数据量、多…

考研数学660刷题记录

🐢🐢 基本概念-基本理论-基本方法 🐢🐢 660刷题记录 二轮复刷标志 ⭐:掌握不熟练 ⭐⭐:是基本方法的组合,但没解出来 ⭐⭐⭐:很难想到这种破局的手段 序号①、②:表示多…

【阶段一】Python快速入门02篇:数据结构-列表

本篇的思维导图: 数据结构-列表 列表的概念 列表(list)是用来存储一组有序数据元素的数据结构,元素之间用逗号分隔。列表中的数据元素应该包括在方括号中,而且列表是可变的数据类型,一旦创建了一个列表,你可以添加、删除或者搜索列表中的元素。在方括号中的数据可以是 i…

小程序:会议OA其他页面

目录 会议管理 一,自定义tabs组件 二,会议管理 父子组件传参演示 个人中心 会议管理 一,自定义tabs组件 文档参考:自定义组件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framework/custom-co…

MacBook 与其他设备的低成本高性能数据传输方案

本篇文章分享在不使用路由器的情况下,使用“数据线或网线”将 MacBook 与其他设备连接在一起,获得更高效率的数据交换性能。 写在前面 最近考虑将 Mac 设备和其他的设备连在一起使用,比如之前在“廉价的家用工作站方案:前篇”或…

利用Python实现酒店评论的中文情感分析,含数据集

利用Python实现酒店评论的情感分析 完整代码下载地址:利用Python实现酒店评论的中文情感分析 情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学…

抽象类和接口1

目录 🌤️抽象类概念 🌤️抽象类语法 🌤️抽象类的作用 ⛅接口的概念 ⛅接口的语法 ⛅接口的使用 ⛅接口的特性 ....... 🌤️抽象类概念 在面向对象的概念中,所有对象都是通过类来描述的,但并不是所有的…

上手华为鸿蒙手表gt系列从准备到发布

文章目录1、前期准备2、证书&签名3、编码&发布FQA:问题1:The graphic card OpenGL version is too old for Previewer to work. It must be 3.2 or later. Update the OpenGL driver based on the graphics card model.问题2:编译成HAp,报错 ent…

[UE笔记]延迟与延迟补偿

Lag即延迟,是多人游戏中常会出现的一个现象。lag compensation即延迟补偿,是一种减少延迟对游戏造成影响的技术。 Ping 多个含义 一种指令(用于验证ip地址是否存在或者主机是否正在运行)描述服务器需要多长时间响应客户端的输入…

OpenCV实战——使用邻居访问扫描图像

OpenCV实战——使用邻居访问扫描图像0. 前言1. 图像锐化2. 邻居访问扫描图像3. 锐化滤波器4. 完整代码相关链接0. 前言 在图像处理中,有时需要根据某个像素的相邻像素的值计算该像素位置的值。当这个邻域包括上一行和下一行的像素时,就需要同时扫描图像…

JavaScript高级 浏览器的渲染原理与JavaScript代码执行原理

浏览器的渲染原理1. 网页的解析过程2. 浏览器内核1. V8引擎3. 浏览器渲染过程1. HTML解析2. 生成CSS规则3. 构建Render Tree4. 布局(layout)5. 绘制(Paint)4. 回流和重绘解析1. 回流2. 重绘3. web 性能优化4. 合成和性能优化5. 浏…

剑指offer----C语言版----第六天

目录 1. 用栈实现队列 1.1 题目描述 1.2 栈和队列的基础知识 1.3 思路分析 2. 扩展题目——用队列实现栈 2.1 题目描述 2.2 思路分析 1. 用栈实现队列 原题链接: 剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode)https://leetcode.cn/…