美文网首页开源
PostGIS实现附近的定位和电子围栏功能

PostGIS实现附近的定位和电子围栏功能

作者: hemny | 来源:发表于2019-07-08 13:21 被阅读21次

    安装postgis

    安装postgresql-11

    yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
    
    yum install -y postgresql11.x86_64 postgresql11-libs.x86_64 postgresql11-server.x86_64 postgresql11-contrib.x86_64 postgresql11-devel.x86_64
    

    初始化数据库

    mkdir -p /data/pgdata  
    chmod 700 /data/pgdata
    chown postgres:postgres /data/pgdata
    vi /usr/lib/systemd/system/postgresql-11.service
    把Environment=PGDATA=/var/lib/pgsql/11/data/修改为Environment=PGDATA=/data/pgdata/
    
    /usr/pgsql-11/bin/postgresql-11-setup initdb   #初始化
    
    # centos7 的开机启动
    systemctl start postgresql-11                  #启动postgresql服务
    systemctl enable postgresql-11                 #设置开机启动
    
    # centos6 的开机启动
    service postgresql-11 start #启动postgresql服务
    chkconfig postgresql-11 on   #设置开机启动
    

    安装PostGIS

    yum install -y wget
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum install -y postgis25_11.x86_64 postgis25_11-utils.x86_64 
    

    针对数据库启用PostGIS插件

    # 添加空间插件
    CREATE EXTENSION postgis;
    CREATE EXTENSION postgis_topology;
    

    安装之后,public下会新增一个表spatial_ref_sys。

    存储经纬度

    点POINT类型的数据结构为POINT(0 0),正好可以用作存储经纬度。
    两个重要的坐标体系

    4326 GCS_WGS_1984 World Geodetic System (WGS)
    26986 美国马萨诸塞州地方坐标系(区域坐标系) 投影坐标, 平面坐标

    添加点字段

    SELECT AddGeometryColumn ('t_point', 'geom_point', 4326, 'POINT', 2);
    SELECT AddGeometryColumn ('t_point', 'geom_point_26986', 26986, 'POINT', 2);
    ALTER TABLE t_point ADD COLUMN geom_p_alter geometry(POINT,4326);
    

    添加空间索引

    CREATE INDEX idx_t_point
    ON t_point
    USING gist(geom_point);
    
    广州 23.124999, 113.250478
    
    清远 23.678114, 113.055371
    
    韶关 24.815976, 113.614100
    
    郴州 25.773645, 113.022818
    
    株洲 27.817057, 113.110819
    
    岳阳 29.338286, 113.129162
    
    咸宁 29.843173, 114.324432
    
    黄石 30.186407, 115.040655
    
    武汉 30.538355, 114.298878
    
    
    INSERT INTO t_point (id,name,geom_point ) VALUES (1,'广州',ST_GeomFromText('POINT(113.250478 23.124999)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (2,'清远',ST_GeomFromText('POINT(113.055371 23.678114)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (3,'韶关',ST_GeomFromText('POINT(113.614100 24.815976)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (4,'郴州',ST_GeomFromText('POINT(113.022818 25.773645)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (5,'株洲',ST_GeomFromText('POINT(113.110819 27.817057)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (6,'岳阳',ST_GeomFromText('POINT(113.129162 29.338286)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (7,'咸宁',ST_GeomFromText('POINT(114.324432 29.843173)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (8,'黄石',ST_GeomFromText('POINT(115.040655 30.186407)', 4326));
    INSERT INTO t_point (id,name,geom_point ) VALUES (9,'武汉',ST_GeomFromText('POINT(114.298878 30.538355)', 4326));
    
    
    SELECT ST_AsText(ST_Transform(ST_Transform(st_geometryfromtext('POINT(113.250478 23.124999)',4326),26986),4326));
    
    update t_point set geom_point_26986=ST_Transform(geom_point,26986),geom_p_alter=geom_point;
    

    相关文章

      网友评论

        本文标题:PostGIS实现附近的定位和电子围栏功能

        本文链接:https://www.haomeiwen.com/subject/geeajqtx.html