PostGIS特殊函式 ☞ 根據BOX3D查詢某一空間範圍內的物件
一、geotools依賴的maven包
<properties>
<geotools.version>17.0</geotools.version>
</properties>
<!-- 新增GeoTools依賴 -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>${geotools.version}</version>
</dependency>
二、demo模擬查詢條件 == 按bbox查詢
Junit單元測試依賴的Maven包
<!-- JUnit單元測試 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
import org.junit.Test;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
public class QueryByBboxTest {
@Test
public void query(){
//幾何構建工廠
GeometryFactory factory = new GeometryFactory();
//矩形框
Envelope envelope = null;
//座標集合1
Coordinate coordinate1 = new Coordinate(113.565619, 113.565619);
//工廠建立一個點1
Point point1 = factory.createPoint(coordinate1);
if(point1!=null){
//拿到幾何Point的外界矩形
envelope = point1.getEnvelopeInternal();
}
//座標集合2
Coordinate coordinate2 = new Coordinate(113.565550, 113.565721);
//工廠再建立一個點2
Point point2 = factory.createPoint(coordinate2);
if(point2!=null){
if(envelope == null){
//如果等於null,拿到Point2的範圍(矩形框)
envelope = point2.getEnvelopeInternal();
}else{
//疊加envelope
envelope.expandToInclude(point2.getEnvelopeInternal());
}
}
String bboxStr = String.format("st_3dmakebox(st_makepoint(%f, %f, 0),st_makepoint(%f, %f, 0))",
envelope.getMaxX(), envelope.getMaxY(), envelope.getMinX(), envelope.getMinY());
System.out.println("select*from object where bbox &&& "+bboxStr);
}
}
效果:
select*from object where bbox &&& st_3dmakebox(st_makepoint(113.565619, 113.565619, 0),st_makepoint(113.565619, 113.565619, 0))
三、bbox欄位在PostGreSql資料庫中的型別
注意:先裝PostGis外掛,才能使PostGreSql資料庫支援空間物件資料型別
四、BOX3D用法
PostGIS函式目錄官網地址:Chapter 14. PostGIS Special Functions Index
BOX3D用法連結:ST_3DMakeBox — Creates a BOX3D defined by the given 3d point geometries.
構建一個BOX3D
五、&&&用算符的用法
&&& — Returns TRUE if A's n-D bounding box intersects B's n-D bounding box.
當幾何A的n-D邊界框與幾何B的n-D邊界框相交時,&&&運算子返回TRUE。
六、查詢示例演示
相關文章
- 根據時間範圍呼叫gitLab介面查詢Gitlab
- 根據某個查詢條件的前50條資料來決定UPDATE語句的更新範圍
- Oracle日期時間範圍查詢Oracle
- 基於Geomesa服務查詢軌跡資料無法根據空間和時間範圍進行查詢的問題解決辦法
- 指定快照時間內根據等待類查詢消耗較高的sqlSQL
- UPDATE查詢結果範圍內的資料
- vue+element-ui根據時間查詢VueUI
- JS實現檢查給定時間範圍是否在每天的某個時間段內JS
- SQL根據分組求連續範圍SQL
- JS判定一個給定的時間在某個時間範圍內JS
- 根據表查詢索引資訊索引
- 根據父表查詢子表
- 根據PID查詢 sqlSQL
- js記一個根據欄位排序物件函式JS排序物件函式
- MongoDB範圍查詢的索引優化MongoDB索引優化
- 微博根據手機號查詢
- 巧用trunc函式,獲取某日期範圍內的資料函式
- MySQL自定義函式 根據一級部門查詢所有子部門 記錄貼MySql函式
- mysql like查詢 - 根據多個條件的模糊匹配查詢MySql
- linux根據字尾查詢文字Linux
- 根據欄位名查詢所有表
- 根據Tcode查詢Menu Path的Tcode
- java判斷集合是否包含某個範圍內的值Java
- pid,sid相互查詢,根據PID查詢sqlSQL
- 【索引】反向索引--條件 範圍查詢索引
- 計算某個範圍內的質數和的辦法
- 總結Oracle根據時間查詢的一些常見情況Oracle
- Oracle根據表名查詢表空間及資料檔案的地址Oracle
- arcgis api for javascript學習-使用FeatureLayer結合FeatureTable實現查詢並能根據查詢結果將檢視縮放至結果的範圍APIJavaScript
- 根據關鍵字查詢車輛資訊
- Oracle根據主鍵查詢外來鍵Oracle
- windows根據程式號查詢程式目錄Windows
- 根據TCode查詢User Exit and BADI
- 根據稅碼取得稅率函式函式
- 根據Alert日誌查詢資料庫啟動、關閉時間資料庫
- 一個改進後的根據STATSPACK來查詢哪段時間內的事務量最大的指令碼指令碼
- MongoDB之資料查詢(範圍運算)MongoDB
- 【索引】反向索引--條件 範圍查詢(二)索引