ArcGIS中使用PostGIS数据源

以下测试场景为ArcGIS 10.4.1。

PostGIS Geometry vs SDE st_geometry

ArcGIS 10.4.x开始直接支持PostGIS Geometry,而无需再单独拷贝st_geometry,以及使用sde账户等等繁琐的事情(一如当年支持Oracle Spaitial和SQL Server Spatial)。这无疑是很大利好,PostGIS的功能、函数和增长性、活跃程度上,也不是sde所能媲美的。sde的方式可查看之前写的这篇博文

继续阅读ArcGIS中使用PostGIS数据源

椭球体的重要参数和公式

基准和椭球体

地球表面非常的不规则,如果按照大地水准面来定义地球表面,别说是球体了,估计连一个椭球体都得不到。假想一个扁率极小的椭圆,绕大地球体短轴旋转所形成的规则椭球体称之为地球椭球体。地球椭球体表面是一个规则的数学表面,可以用数学公式表达,所以在测量和制图中就用它替代地球的自然表面。椭球体是通过长半轴和短半轴(或长半轴和扁率)来定义或控制。椭球通过基准来定义,一般包括中心和方向。大地基准是大地测量计算时的参考依据和尺度。大地基准面(Geodetic Datum),由椭球体本身及椭球体和地表上一组点视为原点间之关系来定义。一般认为此关系能以6个量来定义,通常是大地纬度、大地经度、原点高度、原点垂线偏差之两分量及原点至某点的大地方位角。这些概念并不是特别容易理清,暂时不理会。

国际上使用最广泛的World Geodetic System 1984 (WGS84),是一种地心坐标系,坐标原点为地球质心。包括了一个基准和一个坐标系统。至于为什么总是用年份来标识基准,主要因为大陆漂移等原因,用来定义基准的那些点位,总是在变化的。所以通常使用定义基准的年份来命名,所以在84之前,还有WGS72,WGS66和WGS60。GPS的广播星历是以WGS84坐标系为依据的,而据说当年定义这个基准的时候,有人忘记加入欧洲的控制点,所以欧洲又有了一套ETRS89(…懵逼)。

在我国,北京54采用的是克拉索夫斯基椭球,在该坐标系内进行了许多地区的局部平差,其成果得到了广泛的应用。1978年4月在西安召开全国天文大地网平差会议,确定重新定位,即建立西安80坐标系,此后西安80坐标系取代北京54坐标系成为新的国家坐标系。西安80采用的是1975国际椭球。

常用椭球

坐标系 椭球 长半轴 短半轴 扁率
WGS84大地坐标系 WGS84地球椭球 6378137 6356752.314 1/298.257223563
北京54坐标系 克拉索夫斯基椭球 6738245 6356863 1/298.3
西安80坐标系 IAG75地球椭球 6378140 6356755 1/298.257
国家2000大地坐标系 CGCS2000地球椭球 6378137 6356752.31414 1/298.257222101

重要公式

椭球体(或称旋转椭球体)有两个半径,即长半轴(a)和短半轴(b)。椭球体可以由a和b定义,也可以由a和扁率定义,扁率f(Flattening)的定义为:
\[f={{a-b}\over a}\]

在坐标系中除了长半轴、短半轴和扁率这三个直观数字外,偏心率的平方,也可以用来描述椭球体形状,加上其余的一些参数,汇总如下:

参数 公式
第一偏心率 \(e_1=\sqrt{a^2-b^2\over a^2} \)
第二偏心率 \(e_2=\sqrt{a^2-b^2\over b^2} \)
第一辅助参数 \(W=\sqrt {1-e^2 \sin^2B}\)
卯酉圈曲率半径 \(N ={ a \over W } = {a \over \sqrt {1-e^2 \sin^2B}}\)
子午线曲率半径 \(M = {a(1-e^2) \over W^3} = { a(1-e^2) \over (1-e^2 \sin^2B)^{3 \over 2} }\)

Mapbox矢量切片源码分析

为了了解矢量切片的更多技术细节,轻微挖一挖Mapbox-gl-js的前端结构。比较关键的内容是矢量切片如何在前端如何被定义、加载和绘制,下面结合源码稍微介绍下。

概念

矢量切片规范

Mapbox矢量切片规范定义的内容:文件格式(后缀名、MIME)、投影和范围、内部结构(图层、要素、几何图形编码、要素属性)。切片文件里不在是地理坐标(例如经度和纬度),而是屏幕坐标,也并不包含任何地理信息。在切片文件里,原点坐标是左上角,x轴向右递增,y轴向下递增。

绘制

Mapbox-gl-js使用客户端绘制,这是vector tiles在前端最核心的部分,也因为此,在前端运行时修改地图样式变得轻而易举。大多数地图前端SDK或api(如arcgis、openlayers、leaflet),决定mapview的通常就是center point + zoom level(或 center point + extent),在矢量绘制情况下,zoom level可以是任意的,包括小数(例如6.5),应该基本上算是无极缩放了。除此之外,还有两个很重要的参数:
1. bearing:地图旋转参数,单位是度数。
2. pitch:地图倾斜角度(3d才cool嘛)。

在图层方面,Mapbox gl中定义了渲染数据的方式,这些数据即可以是栅格,也可以是矢量。但由于前端渲染,所以实际上底图和专题图在技术实现上,并没有实质的区别。这样的好处是,所有的要素都可以如同arcgis下的GraphicLayer,或者Javascript中的div一般可拥有较可控的交互能力。

camera和Map

Mapboxgl.camera控制目标位置的中心点位置、缩放级别、旋转角度和倾斜角度。Mapboxgl.Map对象是提供开发接口的最基本对象,继承自camera,并在初始化的时候通过container的设置(HTML元素)来告知Mapboxgl渲染出对应的Map对象。

继续阅读Mapbox矢量切片源码分析

矢量地图切片技术分析

1. 什么是矢量切片

传统的栅格地图切片,是预先在Server端绘制好固定的PNG和JPG切片集合。而矢量切片是很早就已经出现,并已通过各种不同的技术手段在应用中表现出来,大多以json或二进制文件将矢量地图数据传输至前端进行绘制。例如百度地图、Google地图等都较早实现了栅格和矢量两种模式。

矢量地图切片将矢量数据通过不同的描述文件来组织和定义,通常通过自定义文件或json文件进行传输,在前端按需请求不同的矢量瓦片数据文件,并利用类似canvas等技术进行绘制。使用这种技术有不少好处,例如不再需要为不同的样式而反复进行制图、渲染、切片、更新service等过程,并且在当前各种高分屏、视网膜屏大肆发展的阶段,避开按照特定DPI和分辨率渲染的栅格图片在不同的显示设备上无法以统一清晰的效果呈现,等等。

当前,矢量切片已经广泛应用开了,现在的在OSM数据中得到了广泛的使用,例如这个站点提供了OSM Planet和分国家区域的daily下载包,并且以MBTiles文件的形式提供。

 

1.1 矢量切片规范

Mapbox提出了Vector Tile的开放规范,并遵守Creative Commons Attribution 3.0 United States License:Mapbox Vector Tile Specification,该规范用到了Google的Protocol Buffers作为数据编码规范。同样被Mapbox列入规范的还有MBTiles is a specification,作为在SQLite中存储切片数据的规范。在两者的github页面上,都可以找到对应规范的实现清单,这些实现大多是开源工具,也包含一些闭源软件,而这些所有,足以支撑起矢量切片的数据转换、数据存储、数据服务的全技术架构的基本骨架。

继续阅读矢量地图切片技术分析

说一说新出的ArcGIS Runtime SDK v100.0

11月21日,ESRI在官博上发布了题为“ArcGIS Runtime SDK 100.0 has arrived!”的博文,这个100.0足够吸引了眼球,其实回头算算,quartz beta已经太久太久了,而这个100.0,本质上就是quartz release。

以下只是一些吐槽,以及从地图结构的变化角度,来看看ESRI的思路。

关于Desktop Development

ESRI的Runtime产品线在不断壮大,其中单个开发语言中的具体选型,也看出了跨平台的思路。Android、iOS、macOS三者不说,都是运行在特定平台之上,而似乎有不能被忽略的。而Java(Windows/Linux/macOS)、.NET(Windows/iOS/Android)、Qt(Windows/Linux/Android/iOS)三者,无一不是看起来牛气冲天。但是冷静思考下来,其核心竞争力还是很难讲,毕竟在跨平台这个层面,Qt受众较小;.NET独大,但app开发者中,没有足够多的Xamarin用户;Java本该是一枝独秀,无奈Oracle强取豪夺之下,发展堪忧,其客户端开发技术更是令人无所适从,在这种情况下,ESRI此次的v100居然选择了JavaFX这个看似时髦(2008年才推出)却又实际上后劲不足的语言实现。按我建议,更倾向于继续使用swing来保留住传统意义的Java开发者。不过值得推崇的是,此次的Java SDK已经扩展到了macOS(除了Local Server之类无法支持)。相比之下,macOS在ArcGIS的用户(尤其是中国用户)中也属于相对小众,但是单看Swift和Objc的双重策略,也该为ESRI点赞。毕竟在“语系”上,macOS的开发技术与iOS/watchOS系出同门。

继续阅读说一说新出的ArcGIS Runtime SDK v100.0

Ubuntu下ArcGIS Server 10.4与PostgreSQL 9.4的完美CP

稍微说几句,为什么要折腾这个:(1)不希望再用Windows Server,理由都懂;(2)对SQL Server在应用中的各种保守表现不太满意,希望在GIS上有更激进些的工作,例如对空间数据的处理能力;(3)有些应用要有更灵活的架构,而PG在一定程度上迎合了这种需求,例如支持JSON和JSONB,成为关系和非关系混合的一种选择(据说MySQL5.7开始也支持了JSON);(4)ArcGIS Server在linux下的表现,希望用实践来验证;(5)搞技术的人面对互联网的热闹,实在无法完全抵御尝试和改变的欲望。

继续阅读Ubuntu下ArcGIS Server 10.4与PostgreSQL 9.4的完美CP

时空平稳性的概念与STARMA模型

时空相关性

时空相关性反映了序列对时空的依赖,一般会讨论到时空自相关性和时空偏相关性两个概念。

时空平稳性

时空平稳性(Space-time Stationarity)的概念,是说如果是平稳的,那意味着在时空范畴内不存在任何趋势或者模式。在统计上,表现为均值、方差、协方差等不随时间和空间的变化而变化。在实际应用中,很少能够满足统计上绝对的不变值,因此只要求近似为常数即可认为时空序列平稳。

因此,对于时空平稳的时空变量来说,

时空非平稳性,可能是大尺度的趋势,也可能是局部效应。

  1. 大尺度的非平稳:描述均值的总体变化。通常称为“一阶”效应。
  2. 局部的非平稳:是对时时空相关局部特征的描述。通常称为“二阶”效应。对于时间序列分析,一般用自相关移动平均描述因时间依赖造成的局部效应;对于空间数据分析,一般用空间自相关描述其局部效应。

STARMA模型

严格说来,STARMA模型是由时间序列模型模型ARMA(自回归-移动平均)向空间层面扩展而来。该模型在时间序列的基础上,增加考虑了空间相邻位置的影响,因此从时空结合角度讲,更为准确。模型有两个基本假设:

  1. 序列是平稳的
  2. 随机误差符合正态分布

因此,随之而来的处理方式中,首先要解决序列的平稳化问题,过程中需要通过观察空间自相关系数来发现非平稳的存在,并可能会用到各种手段来实现平稳化,例如进行周期性差分处理。

空间权重矩阵(SWM)

基本原理

如何利用数学(如用面积、距离等)建立空间数据和非空间数据之间的关系?对于空间统计而言,空间权重矩阵是一种有效的表达空间关系的方式。因此,它是用量化的方法表示了数据之间的“空间结构”。

关于如何进行要素间实际交互方式的概念化,ESRI举出的例子:

如果要测量森林中某种特定种类的种子繁殖树种的聚类,使用某种形式的反距离可能最适合。但是,如果要评估某一地区通勤者的地理分布,行程时间和行程成本可能是更好的选择。

空间权重矩阵是N*N的表,N为数据集中的要素数量。因此给定行列组合后,其对应的值即为权重。这种空间关系的权重矩阵在许多空间统计工具里都有用,比如空间自相关、热点分析、聚类和异常值分析等。

创建策略

  1. 二进制策略:某个要素要么是邻域-1,要么不是-0。例如:固定距离、K 最近邻域、Delaunay 三角测量、邻接或空间 – 时间窗口。
  2. 权重策略:邻近要素有不同量级的影响,并通过计算权重来反映该变化。例如:反距离或无差别的区域。

工具使用

arcgis中的SWM使用稀疏矩阵存储,因此只存非零部分。实际情况,每个要素一般只跟其他某几个要素发生关系。

工具名字:Generate Spatial Weights Matrix (Spatial Statistics),工具界面如图:

SWM的使用:以热点分析为例

具体权重的使用,以热点分析为例,几个主要的步骤如下:

integrate与collect event

collect event的结果数据

重点是需要生成feature class,并且确保这个feature class有一个唯一id字段。

Generate Spatial Weights Matrix

Hot Spot Analysis (Getis-Ord Gi*)