GIS算法
文章平均质量分 62
才华横溢吴道简
实践出真知。
展开
-
如何计算缓冲区:原理,数学公式,代码
一、缓冲区概念:缓冲区到底是个啥,看ARCGIS的说明就行:缓冲区:https://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analysis-toolbox/buffer.htm缓冲区(分析)的工作原理:https://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analysis-toolbox/how-buffer-analysis-works.htmarcgis的...原创 2021-08-18 18:04:38 · 4162 阅读 · 1 评论 -
如何判断一个多边形的环是逆时针还是顺时针
OGC关于数据格式有规定,多边形的外环应为逆时针,内环应为顺时针。GIS相关的库包,在对数据进行空间操作的时候,也基于这个规定,将数据标准化为外环逆时针,内环顺时针之后,再进行空间计算和分析。这种标准的数据结构,会将计算量减少一半。不过我现在看的大部分面数据,都不是严格执行这个规定的。数据不规范的话,数据量越大,处理时间越长,效率越低。所以我一般拿到数据的时候,都会把数据进行规范化标准化。重点:数据处理中,数据标准化是前置步骤。如何判断多边形是逆时针还是顺时针,比较简..原创 2021-08-18 13:06:27 · 1776 阅读 · 2 评论 -
耳切法多边形三角化与德洛内三角剖分都是什么
写这篇文章的目的是,别把德洛内三角剖分和多边形三角化给弄混了。德洛内三角剖分是德洛内三角剖分;多边形三角化是多边形三角化。在大部分前端框架和桌面软件中,例如游戏引擎unit3d和三维框架cesium,如果我们要渲染一个平面的polygon,或者一个三维的surface,首先要做的是将polygon和surface给三角化,因为这些框架和软件的底层原理是通过渲染三角形,实现polygon和surface的渲染,当然三角化的算法都是内置在程序中的,不过有时候还需要自己去划分三角形。常用的多边原创 2021-06-30 22:08:01 · 1065 阅读 · 2 评论 -
geohash:多维空间点的编码方法和索引算法
可能是专业限制吧,相对于索引算法,我更偏向于geohash是一种编码方式,但编码也是为了方便检索嘛;就像Rtree也算是一种索引算法,但我还是更偏向于它是一种数据组织形式。我们了解geohash的原理就行,因为它毕竟是最常用的空间数据检索算法或编码方法。常用的空间数据库或程序包,很多都内嵌了geohash,例如postgis、jts、shapely等。Postgresql、MySQL等数据库,存储几何数据,用的也是geohash编码。所以不要太纠结,geohash到底是一个索引算法,还是编码方式,它原创 2021-05-25 22:51:07 · 1089 阅读 · 1 评论 -
最小二乘法求解仿射变换参数
以影像数据为例:像素坐标(pixelX,pixelY)与实际地理坐标(geoX,geoY)之间的仿射变换函数为:geoX=a*pixelX+b*pixelY+cgeoY=d*pixelX+e*pixelY+f仿射能实现的效果:平移(Translation)、翻转(Flip)、旋转(Rotation)、缩放(Scale)、错切(Shear),大部分图像变换的效果,都能通过仿射来实现。如果知道一组像素坐标和实际地理坐标,可以通过最小二乘法,计算出abcdef六个参数。最小..原创 2021-04-16 10:56:35 · 2573 阅读 · 0 评论 -
GIS影像数据格式说明
最常用的影像数据格式应该是geotiff,除了一个tif文件外,还有一个tfw文件用以存放坐标信息。如:tiananmen.tiftiananmen.tfw组成一个geotiff文件。(如果数据比较复杂,可能还会有.aux文件存放投影信息,.ovr文件存放金字塔信息。)我们常用的一些真彩色卫星影像数据,就是geotiff格式的。首先,*.tif文件与一般的图像文件无异,可以转为一个数组矩阵,矩阵下标就是像素坐标,每个像素的值可能是RGB,也可能是CMYK,构成图片的色值;或者原创 2021-04-15 18:09:46 · 5034 阅读 · 0 评论 -
Leaflet实现测量功能
效果如下,标签中,In是前进方向的进入角度(方位角),out是出去角度(方位角),加号后面是当前完成的线段长度,黑色的当前完成的折线长度。代码如下:<!DOCTYPE html><html><head> <title>osm-测量</title> <meta charset="utf-8"> <style type="text/css"> body {...原创 2021-04-13 16:36:56 · 1306 阅读 · 0 评论 -
Leaflet加载高德瓦片到WGS84坐标系下
效果如下图,高德矢量底图、影像底图、OSM地图、天地图影像底图,坐标系都统一到WGS84坐标系下,复选框有注记图层和半透明底图图层。对图层进行叠加,能看出,纠正后的高德影像底图与OSM路网是套合的,说明瓦片中心点的平移,就能满足误差小于瓦片层级的像素分辨率,既误差在可见之内,那就够了。代码如下:<!DOCTYPE html><html><head> <title>高德-OSM-天地图瓦片对比</title&g...原创 2021-04-13 16:13:28 · 2940 阅读 · 0 评论 -
Leaflet加载百度瓦片到WGS84坐标系下
Leaflet加载百度瓦片到WGS84坐标系下百度技术真的很好,但还是忍不住吐槽,bd09坐标系、bd09mc投影、百度地图瓦片,真是诡异的存在。下面的代码能实现,将leaflet中加载的百度地图瓦片纠正到WGS84坐标系下。<!DOCTYPE html><html><head> <title>加载百度地图-WGS84坐标系</title> <meta charset="utf-8">...原创 2021-04-13 15:48:26 · 1599 阅读 · 0 评论 -
Leaflet加载百度地图
为了验证一下百度地图的影像、矢量、注记等瓦片数据是否是坐标统一的,写了一个简单的leaflet加载百度影像瓦片、矢量瓦片、注记瓦片的页面,叠加在一起,看了一下,果然坐标系是统一的。<!DOCTYPE html><html><head> <title>加载百度地图</title> <meta charset="utf-8"> <style type="text/css"&...原创 2021-04-13 10:30:51 · 2169 阅读 · 0 评论 -
百度地图瓦片切片规则
谷歌、高德、天地图、OSM、腾讯等的瓦片组织模式参见:https://blog.csdn.net/sinat_41310868/article/details/115561425这篇文章单独说一下百度地图的瓦片组织规则。相对于谷歌等地图的瓦片地图切片规则,百度的瓦片差异主要在如下两个方面:1.瓦片坐标系原点由东经180°,南纬85.05°,变为了东经0°,北纬0°,既赤道与格林尼治经线的交点。2.Y轴由向下,变为向上,既Y由南向北。原点也变了,坐标轴也转向了,百度地图这个瓦片切片模式,的原创 2021-04-11 23:32:11 · 4453 阅读 · 1 评论 -
WMTS服务及地图瓦片原理
WMTS,web map tile service,网络地图瓦片服务;TMS,tile map service,瓦片地图服务。名称虽然不一致,但指的都是地图瓦片服务,TMS形成更早,不过WMTS有官方OGC盖章认可。WMTS的目的是,更高效快速的加载渲染地图数据。如果海量的地图数据以矢量的形式传输到客户端,在客户端渲染,首先需要消耗大量的网络流量,其次对客户端的CPU也是很大的负荷。考虑到这些情况,WMTS提出预渲染图块的模式,在服务端将地图渲染好,并根据比例尺分割不同的栅格图块,根据客户端的请求,传输原创 2021-04-09 23:15:39 · 14200 阅读 · 3 评论 -
常用坐标系及投影:WGS84\GCJ02\CGCS2000\BD09\Pseudo-Mercator\UTM\BD09MC
把地图坐标系和相关投影的知识整理一下。一、简介先分类:WGS84\GCJ02\CGCS2000\BD09是地心坐标系,坐标表现形式为经度、纬度。Pseudo-Mercator\UTM\BD09MC是投影坐标系,坐标表现形式为x、y。WGS84\CGCS2000是原始坐标系,GCJ02\BD09是加密坐标系。目前,谷歌、OSM等地图使用的是WGS84坐标系和Pseudo-Mercator投影坐标系;高德、腾讯等地图使用的是GCJ02坐标系和Pseudo-Mercator投影坐标系;天地原创 2021-04-09 15:16:44 · 10445 阅读 · 1 评论 -
OSM和PBF数据格式说明
从openstreetmap上下载的数据都是*.osm后缀的,虽然后缀是osm,但它的格式其实是xml的,而pbf则是一种xml的压缩格式。一、osm格式复制于:http://wiki.citydatum.com/index.php/OpenStreetMap,这个网页对openstreetmap有一个整体介绍,包括openstreetmap的发展和现状等等,这里只摘抄跟数据格式有关的内容,并补充了点内容。1.数据格式OSM使用拓扑数据结构,包括四类核心要素(aka. data p.原创 2021-04-06 18:54:48 · 18246 阅读 · 1 评论 -
MIF/MID数据格式说明
Mif、mid、tab都是mapinfo定义的数据格式,虽然现在mapinfo已经很少人用了,但mif/mid格式由于其简单易读,还是很常见的数据交换格式。tab是由mif/mid生成的,除了在mapinfo软件中用外,几乎没啥用,只要知道mif和mid的数据格式定义就行了。以下复制于百度百科:https://baike.baidu.com/item/Mif/1416600(额,我把我觉得有问题的做了修改,关于专业名词解释,百度百科的确有问题。)MIF(Memory Initializatio.原创 2021-04-05 23:26:52 · 2901 阅读 · 0 评论 -
Shp数据格式说明
复制于维基百科:https://zh.wikipedia.org/wiki/Shapefile,因为的确经常会把数据格式的一些细节忘记,所以复制过来,以供后续有必要的时候,查缺补漏。一、简介ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的空间数据开放格式。目前,该文件格式已经成为了地理信息软件界的开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是重要的交换格式,能够在ESRI与其他公司的产品之间进行数据互操原创 2021-04-05 22:12:47 · 10502 阅读 · 0 评论 -
Leaflet渲染TopoJSON数据demo
非常简单,就是做一下topoJSON数据的渲染,用的是leaflet。代码如下:Html:<html><head> <title>leaflet TopoJSON</title> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.3/dist/leaflet.css" /> <script src="https:...原创 2021-03-30 22:03:08 · 473 阅读 · 0 评论 -
geojson和topojson数据格式
要对地理要素数据进行传输和渲染,有两种数据格式必须要了解,基于json的地理要素扩展格式geojson,和基于geojson的拓扑扩展格式topojson。一、geojsonGeoJSON是一种基于JSON的地理空间数据交换格式,它定义了几种类型JSON对象以及它们组合在一起的方法,以表示有关地理要素、属性和它们的空间范围的数据。2015年,互联网工程任务组(IETF)与原始规范作者组建了一个GeoJSON工作组,一起规范GeoJSON标准。在2016年8月,推出了最新的GeoJSON数据格式标原创 2021-03-30 21:08:59 · 1173 阅读 · 0 评论 -
前端实现概化算法:Douglas-Peucker和Visvalingam-Whyatt
拿内蒙古自治区的省界线,做道格拉斯-普克算法的概化测试。前端用的是leaflet,大概效果如下,黑色的线是原始的省界线数据,红色的线是概化成101个节点后的效果,参数由url传递,nodes=101。通常情况,我们做数据概化,选用的参数也都是概化后的节点数量,而不是距离容差,这样计算效率和渲染效率会更高。全部代码如下:Leaflet_map.html:<!DOCTYPE html><html><head> <...原创 2021-03-29 00:42:22 · 1184 阅读 · 1 评论 -
常用的地图数据概化算法:Douglas-Peucker与Visvalingam-Whyatt
一、什么是概化简单说一下概化是什么,概化是地图综合中的一个概念,一个几何要素节点越多,渲染效率就会越低,渲染的流畅性就会越弱,为了加快渲染效率,提升渲染流畅性,就要稀释几何要素的节点,但又要保持几何要素的特征,这个过程就是概化,实现这个过程的算法就是概化算法。如下两张图,上图是概化前,下图是概化后,常见的开源地图前端js api在渲染几何面的时候,都使用了概化算法,据我观察,leaflet使用的应该是Douglas-Peucker算法,mapbox使用的应该是Visvalingam-Whyat...原创 2021-03-07 22:00:00 · 3092 阅读 · 2 评论 -
Postgis根据经纬度坐标点和距离使用测地线创建buffer
题目有点绕,大概意思是这样的,我有一个经纬度坐标点为(116.470270,39.873813),我需要用这个坐标点创建一个半径为4000米的缓冲区。如果直接用st_buffer,它不会自动考虑到地球是曲面的,会用笛卡尔平面坐标系的场景,把经纬度坐标直接当成xy,来求buffer,纬度越高,buffer越瘦长,变形越严重,求出来的结果是不准的。(quad_segs=2,参数的意思是四分之一个圆有两条边。)select ST_AsText(ST_Buffer(ST_GeomFromText('P原创 2021-02-21 21:43:42 · 1371 阅读 · 0 评论 -
Python3 Wgs84\gcj02\bd09\mercator\bd09mc坐标系转换与投影
最基础的一组经纬度坐标转换,在网上找到过JavaScript和java版本的,但是没有找到python版本的,把JavaScript版本的改成了python版本的,能凑合用。"""# wgs84\gcj02\bd09坐标系转换# wgs84\Pseudo-Mercator投影转换# bd09\bd09mc投影转换"""import mathx_pi = 3.14159265358979324 * 3000.0 / 180.0pi = 3.1415926535897932384626...原创 2021-02-11 20:54:43 · 2561 阅读 · 6 评论 -
python gdal读gdb文件
Gdb格式的文件,常见于各种比例尺的分幅地图。有需要会对它们进行读取拼接处理。环境配置见:https://blog.csdn.net/sinat_41310868/article/details/112210366安装QGIS,直接使用QGIS带的python解释器,就不用了安装各种环境和配置了,很方便。代码见:注释写的非常详细。# -*- coding: utf-8 -*-try: from osgeo import gdal from osgeo import...原创 2021-01-16 19:27:00 · 2104 阅读 · 0 评论 -
python gdal读写shp文件
环境配置见:https://blog.csdn.net/sinat_41310868/article/details/112210366安装QGIS,直接使用QGIS带的python解释器,就不用了安装各种环境和配置了,很方便。代码见:注释写的非常详细。# -*- coding: utf-8 -*-try: from osgeo import gdal from osgeo import ogr from osgeo import osrexcept Imp...原创 2021-01-16 19:09:29 · 3858 阅读 · 0 评论 -
GIS开发实战图谱
总结了GIS开发的技术栈,罗列了应该了解的内容。算是比较大而全的了,分理论、规范、数据、算法、软件、后端、前端、方向8个专项。不求短期内全部都会,但还是一个比较好的学习框架和实践索引,如果基础好的话,两三年达到入门水平,应该是没有问题的吧,不过凡事,因人而异。内容比较多,一个一个说吧。一、理论学好理论知识非常重要,尤其是GIS还是相对来说比较偏冷门的内容。刚入门看不出来,但时间长了,基础才决定一个人的技术之路能走多远。学理论和基础,手头需要备几本专业书,谁知道网上..原创 2020-06-29 00:11:20 · 9404 阅读 · 4 评论 -
postgresql路径规划插件pgrouting使用
pgrouting是postgresql的路径规划拓展插件。支持用户使用数据库中的路网数据构建拓扑,并基于拓扑路网数据进行最短路径查询或耗费成本计算,并支持矩阵运算。pgrouting的官方文档见:https://docs.pgrouting.org/3.0/en/index.html使用pgrouting构建完路径规划服务后,可以结合geoserver进行展示。Pgrouting官网写得很详细,这里仅仅是整理一下,以作备份。一、插件安装:pgrouting安装详细说明见:.原创 2020-06-22 23:10:11 · 7335 阅读 · 0 评论 -
GIS算法:10_postgresql数据库与postgis
postgresql是对空间数据支持比较好的关系型数据库,postgis是它的空间计算拓展插件。数据库与插件都是开源的。(加拿大是现代地理信息产业的发源地,时至今日,加拿大仍然活跃着许多GIS开源项目的开发者。)postgresql还有一些对GIS有用的拓展插件:pgrouting,用于路径规划;postgis_topology,基于postgis的拓扑套件;fuzzystrmatch,文本模糊匹配;postgis_tiger_geocoder,tiger英文地址编码;...原创 2020-06-16 22:55:46 · 1536 阅读 · 0 评论 -
GIS算法索引目录
GIS算法:0_理论基础https://blog.csdn.net/sinat_41310868/article/details/106629462GIS算法:1_两点线段是否相交https://blog.csdn.net/sinat_41310868/article/details/106629490GIS算法:2_点是否在多边形内https://blog.csdn.net/sinat_41310868/article/details/106629549GIS算法...原创 2020-06-12 00:00:09 · 389 阅读 · 0 评论 -
GIS算法:9_软件实现
大型复杂的地理空间分析,用程序很难实现,即使用程序实现了,效果也不尽如人意。(但这不与学一些矢量、图像处理算法冲突,可以试着用MATLAB、OpenCV处理图像,用GDAL、shapely处理矢量,与软件处理结果进行对比分析。)做地理空间分析,要会用软件,善用软件,如ARCGIS和QGIS等,且ARCGIS和QGIS都支持python工具,通过编写python脚本,可以实现对ARCGIS或QGIS的工具函数进行组合调用、批处理等。ARCGIS的中文教程:https://desktop..原创 2020-06-11 23:55:02 · 503 阅读 · 0 评论 -
GIS算法:8_JavaScript拓扑套件turf
turf.js是隶属于mapbox的开源JavaScript脚本,提供用于前端的先进的地理空间分析工具。turf.js官网:http://turfjs.org/除了turf.js外,还有一个jsts.js也可以用于地理空间分析。以下是github上关于JSTS的说明:JSTS是ECMAScript的空间谓词库,用于处理符合OGC规范发布的SQL简单要素规范的几何图形。JSTS也是完善的Java库JTS的移植。该项目的主要目标是为Web制图应用程序提供一个完整的库,用于处理和分析简单.原创 2020-06-11 23:53:02 · 926 阅读 · 0 评论 -
GIS算法:7_python拓扑套件shapely
可用于GIS数据处理与空间计算的Python包有GDAL和shapely。相对来说,GDAL功能更全面,还可以用于数据转换、瓦片地图发布、栅格影像分析等,shapely只能进行基本的数据处理和空间计算。但大多数情况下shapely就完全够用了。GDAL的官网:https://gdal.org/Shapely的中文文档:https://www.osgeo.cn/shapely/本例只讲shapely的用法。可以通过cmd安装shapely,打开cmd,输入python,回车,查看.原创 2020-06-11 23:44:21 · 1893 阅读 · 2 评论 -
GIS算法:6_JAVA拓扑套件JTS
常用可以用于GIS数据处理和空间计算的java包有geotool和jts。相对来说,geotool功能更全面,还可以用于数据转换、瓦片地图发布、栅格影像分析等,jts只能进行基本的数据处理和空间计算。但大多数情况下jts就完全够用了。geotool的官网:https://www.geotools.org/本例只讲jts的用法:maven依赖:<dependency> <groupId>com.vividsolutions</groupId&g.原创 2020-06-11 23:39:53 · 1169 阅读 · 0 评论 -
GIS算法:5_可视化工具JTS TestBuilder
java、python、js都有可以引用的第三方包,实现GIS的空间算法。java是jts,python是shapely,js是turf。其中jts值得首先拥有,因为jts提供了一个界面工具JTS TestBuilder,可以在上面绘制图形,验证各种算法。jts官网:https://www.tsusiatsoftware.net/jts/main.htmljts下载地址:https://sourceforge.net/projects/jts-topo-suite/jts拓扑套.原创 2020-06-11 23:36:16 · 1126 阅读 · 0 评论 -
GIS算法:3_拓扑空间关系计算模型DE-9IM
DE-9IM全称为Dimensionally Extended nine-Intersection Model,是一种判断对象之间空间关系的拓扑模型,java的拓扑套件jts和python的shapely在空间关系计算上,都使用了这种模型,它把复杂的空间运算降维成逻辑运算,用以提升程序的计算性能。在DE-9IM中,几何对象被分成三个部分,内部(interior)、边界(boundary)和外部(exterior)。模型对这三个部分的规定为:一个点的boundary为空;未封闭的线的boundary是原创 2020-06-08 21:55:45 · 1809 阅读 · 0 评论 -
GIS算法:2_点是否在多边形内
运用射线法计算点是否落在多边形内。红点是要计算的点,通过该点引一条水平线,计算多边形各边与该水平线的交点(蓝点),如果红点两侧的射线与多边形各边的交点数都是奇数,那么红点在多边形内,反之不在。计算红点引出的水平射线与多边形的边有无交点,可以简化为与线段有无交点。如图:计算红点引出的射线与蓝线段是否相交,即红点引出的射线与蓝线段的焦点(A,y)是否在蓝线段上,而非蓝线段两头的引线上。即y值在yi和yi+1之间,并且A值在xi和xi+1之间。根据几何函数关系可知:(yi-y)/(.原创 2020-06-08 21:52:39 · 961 阅读 · 2 评论 -
GIS算法:1_两点线段是否相交
两点线段是否相交,是最经典的计算几何问题之一,它和点是否在多边形内,是所有GIS空间计算的基础。计算两点线段是否相交,要通过两个步骤,首先判断它们的最小外包矩形(MBR)是否相交,如果外包矩形不相交,那么线段也不相交;如果外包矩形相交,那么进行叉积运算。1.MBR快速排斥即判断以两线段为对角线的矩形是否相交,若不相交,则两线段一定不相交。判断两个矩形是否相交,只要任一矩形的最右端都大于另一矩形的最左端且任一矩形最高端大于另一矩形的最低端,则两矩形相交;反之,若其中任一条件不满足,两矩形不相交原创 2020-06-08 21:49:59 · 996 阅读 · 0 评论 -
GIS算法:0_理论基础
GIS算法,主要分两种,一个是矢量相关的,一个是栅格相关的。矢量相关的,归根结底是空间几何;栅格相关的,就是图像处理,线性代数与统计。学习理论一定要看书。推荐:1.科学出版社出版的张康聪《地理信息系统导论》。一本书学完,除了原理之外,GIS经典软件arcGIS也可以算是入门了。2. 科学出版社出版的Stephen Wise写的《GIS数据结构与算法基础》这本书很薄,看完之后,会了解经典的拓扑模型、数据结构、算法等,经典之所以经久不息,是有原因的。只有了解原理,才能更.原创 2020-06-08 21:48:30 · 556 阅读 · 0 评论