05 Nov 2018
postgresql 查询距离某点几千米的所有点
环境: postgres9.4
安装 postGIS 扩展
PostGIS 是 PostgreSQL 关系数据库的空间操作扩展。它为 PostgreSQL 提供了存储、查询和修改空间关系的能力。本文中 ‘PostgreSQL’ 指代基本的关系 数据库功能,而 ‘PostGIS’ 指代扩展的空间操作特性。
-- 创建geometry字段。 通过经纬度更新数据
update building set geom = ST_GeomFromText('POINT(' || lon ||' ' || lat || ')', 4326)
-- 需要获得一组几何坐标,然后进行更新即可:
update building set geom = ST_GeomFromText(
'POLYGON((121.415703 31.172893,121.415805 31.172664,121.416127
31.172751,121.41603 31.172976,121.415703 31.172893))',4326)
where objectid = 81
--多层6
-- 创建查询距离的方法
create function st_distance3857(geom1 geometry, geom2 geometry) returns float as $$
select
st_distance(
st_transform (geom1, 3857),
st_transform (geom2, 3857)
) :: float;
$$ language sql immutable strict;
-- 查询
select * from (select id,name, lat, lon,
st_distance3857(st_geomfromtext('POINT(127.45 50.25)', 4326),geom) as dis
from building order by dis) a where dis < 50000
-- 查询两点的距离
-- 单位: 千米
select st_distance(ST_GeomFromText('POINT(120.451737 36.520975)',900913),
ST_GeomFromText('POINT(120.455636 36.520885)',900913))*60*1.852;
-- 单位: 米
select ST_Length(Geography(ST_GeomFromText('LINESTRING(120.451737 36.520975,120.455636 36.520885)')));
业精于勤,荒于嬉; 行成于思,毁于随。
pnunu
at 17:37