搭建自己的反地理查询系统

想知道某个经纬度属于哪个城市,通常可以通过地图API的接口实现。但是地图服务商的API通常会有配额限制。问题来了,能否搭建自己的经纬度反查系统呢?

GADM

GADM主页:https://gadm.org/

GADM,全称Database of Global Administrative Areas,是一个高精度的全球行政区划数据库。其包含了全球所有国家和地区的国界、省界、市界、区界等多个级别的行政区划边界数据。

警告:GADM提供的中国国界数据不符合中国的领土主张,省界、市界、区界等数据也不一定是最新的版本。在正式刊物中发表使用此类数据的图件时需格外谨慎。

GADM提供了两种下载方式:

由于全球数据量巨大,建议根据需要按照国家下载数据。需要说明的是,GADM 中对country 的定义为“any entity with an ISO country code”。因而如果想要下载完整的中国数据,实际上需要下载China、Hong Kong、Macao和Taiwan 四个数据。

对于每个数据,GADM提供了5种不同的格式:

  • Geopackage:文件后缀是gpkg,矢量格式,官网对其评价是非常好的空间地理存储格式的文件。可以被GDAL/OGR、ArcGIS、QGIS等软件读取。但是在国内用的很少,网上介绍处理文件的方法,大多数是使用shp文件。
  • Shapefile:可直接用于ArcGIS等软件,把官网的文件下载后解压后,得到 (.shp, .shx, .dbf, .prj)组成的文件。
  • KMZ:可直接在Google Earth中打开
  • R (sp):可直接用于R语言绘图
  • R (sf):可直接用于R语言绘图

PostGIS

PostGIS 是 PostgreSQL 关系数据库的空间操作扩展。它为 PostgreSQL 提供了存储、查询和修改空间关系的能力。空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。

PostGIS特性与功能:

  • PostGIS支持所有的空间数据类型。这些类型包括:点(POINT)、线(LINESTRING)、多边形(POLYGON)、多点 (MULTIPOINT)、多线(MULTILINESTRING)、多多边形(MULTIPOLYGON)和集合对象集 (GEOMETRYCOLLECTION)等。
  • PostGIS支持所有的对象表达方法。比如WKT和WKB。
  • PostGIS支持所有的数据存取和构造方法。如GeomFromText()、AsBinary(),以及GeometryN()等。
  • PostGIS提供简单的空间分析函数。如Area和Length,同时也提供其他一些具有复杂分析功能的函数。比如Distance。
  • PostGIS提供了对于元数据的支持。如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同时,PostGIS也提供了相应的支持函数,如AddGeometryColumn和DropGeometryColumn。
  • PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。
  • PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。

相关链接:

项目实战

1、下载GADM数据,这里下载的是Shapefile文件gadm36_shp.zip。解压后获得如下文件:

  • gadm36.cpg
  • gadm36.dbf
  • gadm36.prj
  • gadm36.shp
  • gadm36.shx

2、创建数据库

3、将shapefile格式数据导入到PostgreSQL中

PostgreSQL中自带了shp2pgsql.exe可帮忙完成此操作。shp2pgsql.exe的使用方法如下:

参考链接:https://www.bostongis.com/pgsql2shp_shp2pgsql_quickguide.bqg

具体命令:

其中SRID 4326可通过http://prj2epsg.org/查询获得。

执行后报如下错误:

尝试进行修改:

报错内容变为:

修改为:

报错内容消失,数据可正常导入.

尝试通过经纬度获取所在城市:

SQL能正常执行,但数据库中的一些字段由于先前选择了LATIN1编码而导致了乱码:

尝试了很多方法,无法解决上面的编码问题,PostgreSQL在建立数据库时也无法选择GBK和GB13080。最终方案:

更换方式,使用ogr2ogr导入Geopackage数据:

报如下错误:

解决方案,不使用PostgreSQL下的ogr2ogr,更换QGIS下能顺利执行:

执行完后会生成一张gadm表。再次进行查询:

可得:

微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

分层时间记忆HTM学习笔记

分层时间记忆算法(Hierarchical Temporal Memory),全称HTM Cortical L

Expedia异常检测项目Adaptive Alerting

Adaptive Alerting(AA)是Expedia开源的异常检测项目,整个项目也是完整一套监控体系,包

格兰杰因果关系检验学习笔记

格兰杰因果关系检验简介 格兰杰因果关系检验(英语:Granger causality test)是一种假设检定

发表评论

电子邮件地址不会被公开。 必填项已用*标注