从零开始,构建电子地图网站:0_2_数据处理postgis

软件安装完,开始数据处理。

从China Historical GIS下载一份数据。

 

一、数据下载

数据来源:

China Historical GIS:

https://sites.fas.harvard.edu/~chgis/data/chgis/v6/

先下载一份时间序列数据:

Download CHGIS V6 TIME SERIES Data

https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/Q9VOF5

V6 Time Series Prefecture Points

https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/WW1PD6

V6 Time Series Prefecture Polygons

https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/I0Q7SM

 

二、数据查看

这份数据是shp格式的。打开QGIS看一眼数据。

QGIS教程参看:https://blog.****.net/u014397092/article/details/89403468

因为只是看一眼,所以XYZ Tiles加载一下OpenStreetMap就可以了。

把下载好的数据v6_time_cnty_pts_utf_wgs84.shp加载进去,utf是编码格式,wgs84是坐标系。

v6_time_cnty_pts_gbk_wgs84.shp和v6_time_cnty_pts_utf_wgs84.shp内容一样,就是编码不一样。

Layers——Open Attribute Table,打开属性表,查看一下,如果是乱码,可能编码不兼容,换utf的shp或gbk的shp。

下图是点。

从零开始,构建电子地图网站:0_2_数据处理postgis

把其他数据都加载进来,保持坐标系与编码统一。

其中:

v6_time_cnty_pts_gbk_wgs84.shp

历史行政区划点,到县一级。

v6_time_pref_pts_gbk_wgs84.shp

历史行政区划点,到州一级。

v6_time_pref_pgn_gbk_wgs84.shp

历史政区面。

从零开始,构建电子地图网站:0_2_数据处理postgis

 

 

三、数据入库

  1. 初始化数据库

先下载安装navicat用来连接pg库。

安装教程参见:https://blog.****.net/tqs314/article/details/80760401

Navicat连接pg库参见:https://jingyan.baidu.com/article/642c9d34ea3ada644a46f7ad.html

因为我之前装postgresql和postGIS的时候,忘了端口号,也忘了初始化数据库,所以……

没关系,卸载,重新安装一下就好了。

如果数据库初始化失败,打开cmd。

Cd 到安装目录下,C:\PostgreSQL\10\bin。

initdb -D 数据库保存路径。

安装postGIS的时候,确保路径是在postgresql下:C:\PostgreSQL\10。

Win10安装postgresql和postgis的时候,确保安装路径下没有空格,既没有这样的program files。

 

  1. 空间扩展

用navicat打开数据库postgres,就是初始化的数据库。

新建查询,执行CREATE EXTENSION postgis,为数据库添加空间扩展。

会发现数据库中多了一个表spatial_ref_sys。

 

 

  1. 用PostGIS工具上传shp

用PostGIS Shapefile Import/Export Manager工具上传shp。

我们把utf8编码格式、wgs84坐标系的文件上传数据库,因为数据库一般都是utf-8编码的。

v6_time_cnty_pts_utf_wgs84.shp

v6_time_pref_pts_utf_wgs84.shp

v6_time_pref_pgn_utf_wgs84.shp

首先打开PostGIS Shapefile Import/Export Manager,点击View connection details,打开PostGIS connection,输入账号密码,连接数据库。

从零开始,构建电子地图网站:0_2_数据处理postgis

Import——Add File,选择3个shp文件,然后点击Import。数据就导入pg库了。

 

从零开始,构建电子地图网站:0_2_数据处理postgis

就此,数据入库就结束了。

  1. 用QGIS看pg库中的数据

可以用QGIS连接一下数据库,看看效果。

先给QGIS加一个地图瓦片。

Browser——XYZ Tiles——右键——New Connection,打开 XYZ Connection。

把瓦片url粘贴进去。

http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8

从零开始,构建电子地图网站:0_2_数据处理postgis

 

QGIS连接postgresql。

打开Data Source Manger,选择Vector,选择Database,下拉选择PostgreSQL,选择new,输入Connection Information,输入User name和Password,勾选store,Test Connection,显示连接成功,ok,ok,add。

 

从零开始,构建电子地图网站:0_2_数据处理postgis

 

从零开始,构建电子地图网站:0_2_数据处理postgis

看效果还可以。

 

5.用sql查看数据

 

Navicat打开一个表,看geom列,都是这样的内容:0101000000A265DD3F16C55B4088963C9E96814340,geometry对象是geohash编码的。

写个sql看看:SELECT st_astext(geom) FROM v6_time_cnty_pts_utf_wgs84 LIMIT 1

至少知道坐标了:POINT(111.079483 39.012409)

其他表再看看。

SELECT st_astext(geom) FROM v6_time_pref_pgn_utf_wgs84 LIMIT 1

MULTIPOLYGON(((113.549411712145 36.7545434898289,113.543285553768 36.7521524539279,113.560044728209 36.7134634435762,113.55651873219 36.7287158304727,113.552914744172 36.7456842597138,113.549411712145 36.7545434898289)))

SELECT st_astext(geom) FROM v6_time_pref_pts_utf_wgs84 LIMIT 1

POINT(111.076347 39.017826)

 

 

用postgis就能把数据都导入postgresql里面,也不用写程序了。

但这样就无处显示我会写python了。

接下来看看,怎么用python写个脚本导入数据。