zoukankan      html  css  js  c++  java
  • PostGis 根据经纬度查询两点之间距离

    -- 创建几何表
    CREATE table geometry_table(
      gid serial primary key,
      name varchar,
      geom geometry(geometry,4326)
    );
    
    -- 查询当前数据库中所有空间数据表的描述信息
    select * from geometry_columns
    
    -- 查询几何表
    select * from geometry_table;
    
    -- 插入测试数据
    INSERT INTO geometry_table(name,geom) VALUES ('万兴大厦','SRID=4326;POINT(101.75882888992 36.62314533104)');
    INSERT INTO geometry_table(name,geom) VALUES ('水电大厦-停车场','SRID=4326;POINT(101.75228040708 36.628532886857)');
    INSERT INTO geometry_table(name,geom) VALUES ('南山电影院','SRID=4326;POINT(101.77041344989 36.604966696412)');
    INSERT INTO geometry_table(name,geom) VALUES ('西宁相逢居公寓','SRID=4326;POINT(101.75069496423 36.60689423054)');
    INSERT INTO geometry_table(name,geom) VALUES ('青海省能源局','SRID=4326;POINT(101.75286993103 36.63663989707)');
    INSERT INTO geometry_table(name,geom) VALUES ('黄河路3号院','SRID=4326;POINT(101.77662983858 36.630259065492)');
    
    
    -- 使用标准的PostGIS笛卡尔平面坐标系空间函数ST_Distance(geometry, geometry)计算洛杉矶和巴黎之间的距离。请注意,SRID 4326声明了地理空间参考系统。
    -- 查询结果:121!但那是什么意思?
    -- 空间参考4326的单位是度,所以我们的答案是121度。但是,这表示什么呢?
    -- 在地球球体上,1度对应的地球实际距离的大小是变化的。当远离赤道时,它会变得更小,当越接近两极时,地球上的经线相互之间越来越接近。因此,121度的距离并不意味着什么,这是一个没有意义的数字。
    -- 为了计算出真实的距离,我们不能把地理坐标近似的看成笛卡尔平面坐标,而应该把它们看成是球坐标。我们必须把点之间的距离作为球面上的真实路径来测量——大圆的一部分。
    select ST_Distance(st_geomFromText('POINT(-118.4079 33.9434)',4326),st_geomFromText('POINT(2.3490 48.8533)',4326)) 
    
    -- 关于上面的测量应该使用geography而不是geometry类型,让我们再次尝试测量洛杉矶和巴黎之间的距离,我们将使用ST_GeographyFromText(text)函数,而不是ST_GeometryFromText(text)。
    -- 查询结果:9125.75237394223 千米
    select ST_Distance(ST_GeographyFromText('POINT(-118.4079 33.9434)'),ST_GeographyFromText('POINT(2.3490 48.8533)')) / 1000
    
    -- 查询两点之间距离,单位是米。(万兴大厦 和 南山电影院之间距离)
    select ST_Distance(ST_GeographyFromText('POINT(101.75882888992 36.62314533104)'),ST_GeographyFromText('POINT(101.77041344989 36.604966696412)')) 
    
    -- 以【万兴大厦】为中心,查询其它地点距离。
    select *, ST_Distance(ST_GeographyFromText('POINT(101.75882888992 36.62314533104)'),ST_GeographyFromText(ST_AsText(geom))) from geometry_table;
    
    -- 查询距离【万兴大厦】小于1800米的数据。
    select
        *,
        ST_Distance(ST_GeographyFromText('POINT(101.75882888992 36.62314533104)'),
        ST_GeographyFromText(ST_AsText(geom))) as distance
    from
        geometry_table
    where
        ST_Distance(ST_GeographyFromText('POINT(101.75882888992 36.62314533104)'),
        ST_GeographyFromText(ST_AsText(geom))) < 1800;
  • 相关阅读:
    SQlServer 从系统表 sysobjects 中获取数据库中所有表或存储过程等对象
    Win7 Print Spooler服務自动关闭
    C# 数据流操作 Stream 相关
    GRUB引导故障解决
    RAID配置层+配额
    磁盘一
    权限管理及归属
    cenos7关闭防火墙 安全机制
    linux用户管理-----账号管理和权限归属设置
    yum 仓构建,源代码安装
  • 原文地址:https://www.cnblogs.com/haolb123/p/15667580.html
Copyright © 2011-2022 走看看