PostGIS2
postgis 是postgresql数据库一个支持管理、存储、操作地理对象一个插件,具有三个明显性特征空间类型、空间索引、空间函数。
1.简单查询
示例数据:美国纽约街道人口普查数据
1.1查询人口大于5000普查区域
SELECT * FROM nyc_census_blocks_2000
WHERE popn_total > 5000 ;
1.2计算总人口
SELECT sum(popn_total)as population FROM nyc_census_blocks_2000
1.3计算平均值
SELECT avg(popn_total)as population FROM nyc_census_blocks_2000
1.4计算白人占总人口的百分比
SELECT
boroname,100*SUM(popn_total)/sum(popn_total) as white
FROM
nyc_census_blocks_2000
GROUP BY
boroname;
2.几何计算
示例数据 某城市数据
2.1使用st_area函数计算某行政区面积
SELECT
st_area(geom) as Area
FROM
wuhan
WHERE
NAME = '江夏区';
2.2使用st_length函数计算道路长度
SELECT
st_length(geom) as le
FROM
street
WHERE
NAME = '红旗大道';
2.3查看地理对象的结构
SELECT
NAME,
st_geometrytype (geom),
st_ndims (geom),
st_srid (geom)
FROM
bank
WHERE
NAME LIKE '%邮政%'
2.4返回wkt文本
select st_astext(geom)
from hotel
3.空间连接
示例数据 某城市数据
3.1.全外连接:查询两个表全部数据
SELECT
*
FROM
bank
FULL JOIN enping ON bank.gid = enping.gid
3.2 内连接:查询两个表的字段名称相同的数据
SELECT
*
FROM
bank
INNER JOIN enping ON bank.gid = enping.gid
3.3 左外连接:查询左表加上右表字段名称相同数据
SELECT
*
FROM
bank
LEFT OUTER JOIN enping ON bank.gid = enping.gid
3.4右外连接:查询右表加上左表字段名称相同数据
SELECT
*
FROM
bank
RIGHT OUTER JOIN enping ON bank.gid = enping.gid
3.5 左链接:只查询左表存在的数据
SELECT
*
FROM
bank
LEFT JOIN enping ON bank.gid = enping.gid
3.6右连接:只查询右表存在的数据
SELECT
*
FROM
bank
RIGHT JOIN enping ON bank.gid = enping.gid
4.空间关系
示例数据 某城市数据 设置好srid
空间关系相交、相等、包含、距离(相邻)
4.1查询两个对象相等:st_equals()测试两个几何的空间相等性
SELECT
*
FROM
bank
JOIN enping ON st_equals( bank.geom, enping.geom)
4.2查询两个对象相交:st_intersects,st_crosses,st_overlaps测试两个几何内部相交,st_disjoint()反之两个几何不相交
SELECT
*
FROM
sub
JOIN enping
ON st_intersects(sub.geom, enping.geom)
select *
from school
JOIN enping
on st_disjoint(school.geom,enping.geom)
4.3查询对象之间存在是否包含关系st_contains()
select * FROM enping
JOIN school on st_contains(enping.geom,school.geom)
4.4计算两个点之间的距离st_dwithin()
SELECT
*
FROM
sub
JOIN school ON st_dwithin (sub.geom, school.geom, 100)
5.空间索引
空间索引是在空间数据量非常之大的时候体现出来的优势,如果没有空间索引去查找每个记录的话去只能按顺序查找。r-tree是用于空间访问方法的树数据结构,即用于索引地理坐标、矩形或多边的多维信息。
CREATE INDEX sp ON supermarket USING GIST(geom);
R-Tree将数据分解成矩形,子矩形和子子矩形等。它是自动调整索引结构,可自动处理可变数据密度和对象大小,
具体了解原理请google!
6.空间投影
前面我们计算两个点之间距离是对数据进行过投影,不然话是计算不出来实际距离。使用st_transfrom()函数
select st_transform(geom, 4326) from wuhan
参考资料
http://workshops.boundlessgeo.com/postgis-intro/
http://postgis.net/docs/manual-2.3/
转载自:https://blog.csdn.net/wywywywywywy123456/article/details/72639291