超圖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);
        }
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM