Home

NUNU

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

Flag Counter