• 超图supermap sdx数据库用sql实现空间查询


    在此介绍用sql对超图的空间数据库(sdx)进行空间查询,优点如下:

    1。超图推荐的方式是用iobject,此方法要引入iobject

    2。超图另一个推荐的方式是用iserver的REST接口,但web接口缺点在于性能一般,尤其是返回数据比较多以及并发频繁的情况下性能不好

    超图空间数据库支持多种数据库产品(DBMS),可这种方式只支持PostGIS,也即是下图的

    PS:注意在超图sdx的体系,Postgresql和PostGIS是两种数据库,而开源空间数据库PostGIS依赖于postgresql,可以说空间数据库PostGIS也是postgresql,注意区别

    PS:超图idesktop部分版本不支持PostGIS,例如我只在idesktop 9D java 2019(9.1.0)能成功使用

    当超图PostGIS数据库建好后,建立好jdbc连接(本文略,总之按postgresql建连接就行),然后就可以用sql做空间查询,以及输出几何对象

    sql中使用空间查询的“接口”跟开源空间数据库PostGIS是一样的,原理是超图PostGIS也兼容开源PostGIS的功能

    开源PostGIS的空间查询接口遵循OpenGIS标准,以下是开源PostGIS的官方文档,有接口的详细说明:https://postgis.net/docs/manual-dev/reference.html

    另外个人也可以baidu关键词:postgis查询,来找到相关文章

    以下贴一些代码

        /**
         * 属性查询
         *
         * @throws Exception
         */
        private void attrQuery() throws Exception {
            //属性查询
            //例子:查询名称为f1的字段,值等于 面1 的要素(数据/行)
    
            //图层名
            //sde数据库带空间属性的表叫图层,因此图层跟表类似
            String layerName = "polygon1";
    
            //获取默认数据库连接
            Connection conn = JdbcConnConfigUtil.getDefaultConn();
            //查询使用的是sql,就是普通的sql
            //select至from之间是输出的字段,其中ST_AsText(smgeometry)是输出几何对象并转成wkt格式,smgeometry代表几何对象,ST_AsText是一个函数可以把几何对象转成wkt格式的字符串
            //ST_开头的函数属于开源空间数据库PostGIS的功能,可以理解为写在sql语句里的一些函数,详细api在这https://postgis.net/docs/manual-dev/reference.html
            String sql = "select f1,ST_AsText(smgeometry) as wkt" +
                    " from " + layerName + " t " +
                    //查询条件,本demo是属性查询因此跟一般sql一样
                    "where t.f1='面1'";
    
            //查询代码,跟jdbc一样的用法
            PreparedStatement pst = null;
            ResultSet rs = null;
            try {
                pst = conn.prepareStatement(sql);
                //执行查询
                rs = pst.executeQuery();
                //while循环变量查询结果
                while (rs.next()) {
                    //通过字段索引获取字段值,注意:索引从1开始!!!!
                    //获取几何对象,wkt格式
                    //wkt格式既可以构建几何对象(如何构建后面有说),也可以输出到前端供前端使用
                    String wkt = rs.getString(2);
                    //获取普通字段的值
                    Long f1 = DataConvertUtil.strToLong(rs.getString(1));
                }
            } finally {
                //关闭连接,清除各种对象
                DbUtils.closeQuietly(conn, pst, rs);
            }
        }
     
  • 相关阅读:
    nginx配置反向代理
    hyperchain HVM使用java编写智能合约的编译、部署流程
    leetcode 140单词拆分Ⅱ
    bomblab phase5
    bomb lab 二三阶段
    2021暑假算法学习笔记(基础复习)#2
    2021暑假算法学习笔记(基础复习)#1
    O(logn)最长上升子序列并输出
    A Daily Topic # 7 阶乘的和(二进制/枚举)
    A Daily Topic # 6 星期几(模拟)
  • 原文地址:https://www.cnblogs.com/cannel/p/11078042.html
Copyright © 2020-2023  润新知