手机信令数据怎么获得_基于手机信令的大数据分析教程(二)—— 数据库中职住数据汇总...
本节重点:数据库中利用SQL语句对职住数据进行分组汇总,shapefile文件导入数据库的两种方法,并在数据库中进行点层与面层的空间连接,然后基于行政区汇总数据一、基于基站汇总打开Navigat,连接数据库xian,找到之前导入的原始职住数据如下图我们需要得到每个基站的居住和就业数据在“查询”界面中执行以下语句,即可创建新表hsum,利用group by,将xian_homework2基于home
本节重点:数据库中利用SQL语句对职住数据进行分组汇总,shapefile文件导入数据库的两种方法,并在数据库中进行点层与面层的空间连接,然后基于行政区汇总数据
一、基于基站汇总
打开Navigat,连接数据库xian,找到之前导入的原始职住数据如下图
我们需要得到每个基站的居住和就业数据
在“查询”界面中执行以下语句,即可创建新表hsum,利用group by,将xian_homework2基于home字段分组汇总,其中SUM表示结果是同类数值的相加总和。同理,再次基于work汇总,得到表wsum。
CREATE TABLE jizhan_h AS
SELECT home, SUM(sum) AS hsum
FROM xian_homework2
GROUP BY home
CREATE TABLE jizhan_w AS
SELECT work, SUM(sum) AS hsum
FROM xian_homework2
GROUP BY work
成功后得到两个新表如下图
二、shapefile导入数据库
方法一:PostGis
1、扩展template_postgis模版
template_postgis模版是创建空间数据库的必要手段,没有这个模版没办法导入shp文件,对于每个数据库执行一次即可
在Navicat的查询面板中执行以下代码(官网可找到这几条扩展语句)
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
2、shapefile文件导入数据库
从电脑程序中找到postgis插件并打开(若安装postgre时没有顺带安装,则需单独安装postgis)
连接数据库
连接成功后如下图
点击Add File,选择西安的基站点、区县面和街道面这三个shapefile注意shapefile的存储路径不能出现中文,否则导入失败
注意
坐标系SRID将0改为与原shp文件的地理坐标系一致(坐标系编号可在GIS目录列表中该shp上右键属性查看,这里的4326代表地理坐标GCS_WGS_1984),否则计算结果可能不对
在Schema中设置导入的模式
点击Import,成功后如下图
在数据库中选择的模式下的表右键刷新后,可以找到这三个shp的属性表
方法二:Qgis
该方法导入的结果不易出错,因此更推荐使用
1、软件下载安装
在Qgis官网上下载适合版本的软件并安装,注意过程中要全部勾选扩展选项https://www.qgis.org/en/site/forusers/download.html
2、Qgis连接数据库
先扩展postgis模板,在程序中打开Qgis,在PostGIS上右键New Connection,依次输入连接的信息
连接成功后可在下拉中找到该连接
3、shapefile文件导入数据库
在菜单栏中选择Database——DB Manager
再次连接数据库
点击Import Layer/File,选择基站的shp文件
选择要导入的模式,输入表的名称,其他设置如下图所示:
导入成功后,打开Navicat,在该数据库和模式的表上右键刷新,即可找到导入的shp表
同理,将区县、街道面层的shp导入
三、基于区县、街道层面汇总数据
1、点与面层的空间连接
在查询界面执行该语句,
其中jizhan为手机基站分布点层, xian_qx为区县分区面层,xzqmc为区县名称字段,该语句判断点是在哪个面上,并将所在面层的字段赋值在点层
成功后刷新得到下表
SELECT jizhan.*, xian_qx.xzqmc
into jizhan1
FROM jizhan, xian_qx
WHERE st_intersects ( jizhan.geom, xian_qx.geom ) = 'True';
同理,可联结街道的面层信息
2、职住数据联结后分组汇总
将表hsum和wsum中的职住数据联结到带有区县信息的基站表,方法如下:
依次执行以下语句,运用LEFT JOIN(左联结),即可将之前汇总的职住人数表的数据连接上去,其中jzbm = home表示两个表中进行连接的字段
CREATE TABLE jizhan_hw1 AS
SELECT jzbm,xzqmc AS qx,hsum
FROM jizhan1 LEFT JOIN jizhan_h on jzbm = home
CREATE TABLE jizhan_hw2 AS
SELECT "jizhan_hw1".*,wsum
FROM jizhan_hw1 LEFT JOIN jizhan_w on jzbm = work
于是可以得到带有职住数据的基站属性表如下图
接着运用group by语句基于区县字段分组汇总,得到每个区县居住和就业岗位的总数:
CREATE TABLE qx_hsumwsum AS
SELECT qx, SUM(hsum) AS qx_hsum,SUM(wsum) AS qx_wsum
FROM jizhan_hw2
GROUP BY qx
同理,可以将职住数据连接到带有街道信息的基站表中,基于街道名称分组汇总后,就能得到每个街道居住和就业岗位的总数
更多推荐
所有评论(0)