PostgreSQL9.6+PostGIS2.3学习笔记(二)常用函数以及JDBC连接


一、PostGIS常用函数

/* 基础查询函数 */
– 查询PostGIS版本
select PostGIS_Full_Version();

– 获取几何对象的WKT描述
select ST_AsText(geom) from public.tra_ln where gid =1;

– 获取几何对象的WKB描述
select ST_AsBinary(geom) from public.tra_ln where gid =1;

– 获取几何对象的SRID
select ST_SRID(geom) from public.tra_ln where gid =1;

– 获取当前几何对象类型
select GeometryType(geom) from public.res_py where gid =1;

/* 几何空间数据关系函数 */

– 判断两个几何对象是否一样 一样返回true
select ST_Equals((select geom from public.res_py where gid =1 ),(select geom from public.res_py where gid =2 )) ;

– 判断两个几何对象是否相连 不相连返回true
select ST_Disjoint((select geom from public.tra_ln where gid =1 ),(select geom from public.tra_ln where gid =2 ));

– 判断两个几何对象是否相交 相交返回true
select ST_Intersects((select geom from public.tra_ln where gid =1 ),(select geom from public.tra_ln where gid =2 ));

– 判断两个几何对象是否交叉 交叉返回true
select ST_Crosses((select geom from public.res_py where gid =1 ),(select geom from public.res_py where gid =2 ));

– 判断两个几何对象是否接触 接触返回true
select ST_Touches((select geom from public.res_py where gid =1 ),(select geom from public.res_py where gid =2 ));

– 判断一个几何对象A是否存在另一个几何对象B中 ST_Within(A,B) 存在返回true
– 判断一个几何对象A是否包含另一个几何对象B中 ST_Contains(A,B) 与上面的ST_Withinleisi
select ST_Within((select geom from public.res_py where gid =1 ),(select geom from public.res_py where gid =2 ));

– 如果几何对象B的所有点都在几何对象A中 ST_Covers(A,B) 则返回true
– 如果几何对象A的所有点都在几何对象B中 ST_CoveredBy(A,B) 则返回true
select ST_Covers((select geom from public.res_py where gid =1 ),(select geom from public.res_py where gid =1 ));

/* 几何空间数据处理函数 */

/* 单位的换算关系如下:
1英里= 63360 米
1米=1/1852 海里
1海里= 1/60度
对于geometry类型的测量函数返回的是笛卡尔距离,这种计算方式是无意义的,
因为它计算的是两者之间的平面距离。实际上这两者之间的距离的单位也许叫做“度“,但这个结果并不对应两个点之间的
真实角度差,所以称为”度”甚至是不准确的。
对GEOGRAPHY类型的查询和测量函数使用的单位都是米,因此距离参数应该用米表示,返回值也应该是米(对于面积来说
是平方米)
*/
– 返回该几何对象的中心点 返回值为point
select ST_AsText(ST_Centroid( geom ))from public.tra_ln where gid = 1 ;

– 计算两个几何对象的距离
select ST_Distance(Geography((select geom from public.tra_ln where gid =1)),Geography((select geom from public.tra_ln where gid = 100)) );

– 计算一个几何对象长度
select ST_Length(Geography(geom)) from public.tra_ln where gid =1;

– 计算几何对象面积
select ST_Area(Geography(geom)) from public.res_py where gid = 1;

– 一定在几何空间线数据上的点,返回一个数据点
select ST_AsText(ST_PointOnSurface(geom)) from public.tra_ln where gid = 1;

– 根据原有几何对象以及参数形成一个新的几何对象数据,获取缓冲后的几何对象,第二个参数单位为度
select ST_AsText(ST_Buffer(geom,0.0044996400287977,7)) from public.tra_ln where gid = 1;

– 可以返回mbr(空间最小外包矩形),传入参数可以是point line polygon
select ST_AsText(ST_Envelope(geom)) from public.tra_ln where gid = 1;

– 返回一个合并的几何空间数据,将两个几何空间数据合并为一个几何空间数据
select ST_AsText(ST_Union((select geom from public.tra_ln where gid =1),(select geom from public.tra_ln where gid = 100)));

– 获取一个几何对象边界(传入参数为线返回端点,传入面返回边界线)
select ST_AsText(ST_Boundary(geom)) from public.res_py where gid =1 ;

– 创建表
create table public.test_table (
gid int4,
geom geometry
);

– ST_BdPolyFromText — 根据一个任意的封闭的WKT描述的MultiLineString几何类型对象创建一个Polygon对象
– ST_BdPolyFromText(text WKT, integer srid);
insert into public.test_table(gid,geom) values(1,ST_BdPolyFromText(‘MULTILINESTRING((120.239152589 30.3085777040001,120.239191934 30.3082752960001))’,4326));

– ST_BdMPolyFromText — 根据一个任意的封闭的WKT描述的MultiLineString几何类型对象创建一个MultiPolygon对象.
– ST_BdMPolyFromText(text WKT, integer srid);

– ST_GeogFromText /ST_GeographyFromText 从一个WKT规范描述的对象返回一个具体的geography对象
– ST_GeogFromText/ST_GeographyFromText (text EWKT);
select ST_GeogFromText(‘MULTILINESTRING((120.239152589 30.3085777040001,120.239191934 30.3082752960001))’)

– ST_GeogFromWKB —从一个WKB或EWKB规范描述的对象返回一个具体的geography对象
– ST_GeogFromWKB(bytea geom);

– ST_GeomFromEWKB —从一个EWKB描述的几何对象返回一个具体的ST_Geometry值.
– ST_GeomFromEWKB(bytea EWKB);

– ST_GeomFromEWKT — 从一个EWKT描述的几何对象返回一个具体的ST_Geometry值.
– ST_GeomFromEWKT(text EWKT);

– ST_GeometryFromText 根据WKT描述的对象返回一个具体的ST_Geometry 函数值(也是一个geometry对象),该函数是
– ST_GeomFromText的别名,即两者等价

– ST_GeomFromGeoJSON —该函数根据一个geojson描述的几何对象,生成一个PostGIS 的geometry对象
– ST_GeomFromGeoJSON(text geomjson);

– ST_GeomFromKML —该函数根据一个KML描述的几何对象,生成一个PostGIS 的geometry对象
– ST_GeomFromKML(text geomkml);

– ST_GeomFromText — 根据WKT描述返回一个具体的ST_Geometry 值
– ST_GeomFromText(text WKT);/ST_GeomFromText(text WKT, integer srid);

– ST_LineFromMultiPoint —从一个MultiPoint几何类型中返回一个LineString类型对象
– ST_LineFromMultiPoint(geometry aMultiPoint)

– ST_MakeLine — 根据point或line几何类型创建Linestring类型对象
– ST_MakeLine(geometry set geoms); 一种是聚集函数,它用一排point或line几何类型生成一个linestring几何对象
– ST_MakeLine(geometry geom1, geometry geom2); 一种是用一个数组的point或line生成一个linestring对象
– ST_MakeLine(geometry[] geoms_array); 一种函数是用两个point或linestring类型生成一个linestring几何类型对象

– ST_MakeEnvelope 根据给定的最小值范围和最大值范围生成一个矩形,输入值必须是SRS(spatial_reference_system表)规定的SRID值
– ST_MakeEnvelope(double precision xmin, double precision ymin, double precision xmax, double precision ymax,integer srid=unknown);

– ST_MakePolygon 根据给定的闭合的LineString类型生成一个多边形,输入的几何类型必须是封闭的曲线

– ST_MakePoint — 创建一个2D,3DZ or 4D point 几何类型. 注意x是经度,而y是维度
– 2D ST_MakePoint(double precision x, double precision y);
– 3D ST_MakePoint(double precision x, double precision y, double precision z);
– 4D ST_MakePoint(double precision x, double precision y, double precision z, double precision m);

– ST_MakePointM — 使用x,y,m坐标创建一个point 几何类型对象.
– ST_MakePointM(float x, float y, float m);

– ST_MLineFromText — 根据WKT表述的几何对象返回ST_MultiLineString值
– ST_MLineFromText(text WKT, integer srid);

– ST_Point — 根据给定的坐标值,返回ST_Point值对应的几何类型对象,这个函数是OGC 函数ST_MakePoint 的别名
– ST_Point(float x_lon, float y_lat);

– ST_PointFromText —根据WKT表述和给定的SRID创建一个geometry几何类型对象,如果SRID没有给定默认设置为0,即未知
– ST_PointFromText(text WKT, integer srid);

– ST_Polygon — 根据具体的linestring类型对象和SRID创建一个polygon对象
– ST_Polygon(geometry aLineString, integer srid);

– ST_ExteriorRing — 返回一个POLYGON 几何类型的外环,如果输入类型不是POLYGON类型,返回NULL值,该函数不支持MULTIPOLYGON
– ST_ExteriorRing(geometry a_polygon);

– ST_IsRing —如果LINESTRING是简单、闭合的,则返回TRUE
– ST_IsRing(geometry g);

– ST_NPoints — 返回geometry的顶点个数.
– ST_NPoints(geometry g1);

– ST_Summary —返回geometry对象的文本概要
– ST_Summary(geometry/geography g);

– ST_X — 返回点的X坐标,如果输入参数不是一个点,返回NULL,输入必须是一个点类型 ST_X(geometry a_point);
– ST_Y — 返回输入点的Y坐标,如果输入不是点,返回NULL,输入必须是点类型 ST_Y(geometry a_point);

– ST_AddPoint — 在LINESTRING对象的某个点的位置之前添加一个点(点的位置计数从0开始)

– ST_LineMerge — 把一些LineString对象组合在一起,形成一个MULTILINESTRING对象
– ST_LineMerge(geometry amultilinestring);

– ST_RemovePoint — 从一个LINESTRING对象中移除一个Point点,下标从0开始
– ST_RemovePoint(geometry linestring, integer offset);

– ST_Rotate — 返回一个几何对象以某个点为中心点,逆时针旋转指定弧度后的对象.

以上只是一部分比较常用分析的函数,不是很全。官方文档地址:
PostGIS官方文档

二、JDBC连接数据库

废话不多说,先上代码:
1.ConnUtil.java :获取数据库连接类

package com.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnUtil  {
    final private static  String driverClass="org.postgresql.Driver";// 驱动类
    final private static String url="jdbc:postgresql://localhost:5432/onlyTest";// 数据库地址
    final private static String username="postgres";// 用户名
    final private static String password="postgre";// 密码
    public String getDriverClass() {
        return driverClass;
    }
    public String getUrl() {
        return url;
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public static Connection getConn() {
         Connection conn = null ;
         try {
            Class.forName(driverClass);
            try {
                conn = DriverManager.getConnection(url, username, password);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        return conn;
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args) {
        Connection conn = ConnUtil.getConn();
        if(conn!=null){
            System.out.println("数据库连接成功!");
        }
    }
}

2.TestJdbc.java :写SQL查询数据等操作

package com.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.postgresql.geometric.*;
public class TestJdbc {

    /** 根据gid获取对应表中的geom 的WKT信息
     * @param gid  主键
     * @param tablename 表名
     * @return WKT描述的几何对象
     */
    public String getWKTByGid(int gid,String tablename){
        Connection conn = ConnUtil.getConn();
        Statement stmt = null;
        ResultSet rs = null;
        String wktString = null;
        String sql = "select ST_AsText(geom) from public.res_ln where gid=1 ";
        if(conn!=null){
            try {
                stmt = conn.createStatement();  
                rs = stmt.executeQuery(sql);  
                if(rs.next()){
                    wktString =  rs.getString(1);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    if(rs!=null){
                        rs.close();
                    }
                    if(stmt!=null){
                        stmt.close();
                    }
                    if(conn!=null){
                        conn.close();
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return wktString ;
    }
    public static void main(String[] args) {
        TestJdbc tj = new TestJdbc();
        System.out.println(tj.getWKTByGid(1, "public.res_ln"));
    }
}

注意:目前官方最新的驱动是9.4版本的,目前连接9.6版本也是可以的。下载方式有两种:

  1. 官网下载:下载页面地址
    下载页面
    根据自己对应JDK版本下载对应版本的驱动。
  2. 通过安装的Postgresql中的 “Application Stack Bulider ”进行下载:(以9.6版本为例)
    2.1. 开始菜单的所有程序中找到Postgresql,展开后点击 Application Stack Bulider
    Application Stack Bulider
    2.2.
    数据库地址
    2.3.
    选择版本
    2.4.
    下载
    点击下一个后就会进入下载,等待下载完成后到对应文件夹中找到文件,即可。

转载自:https://blog.csdn.net/u013420816/article/details/53727960

You may also like...