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
- 查詢某欄位有特殊字元(PATINDEX函式)字元Index函式
- 根據某個查詢條件的前50條資料來決定UPDATE語句的更新範圍
- Oracle日期時間範圍查詢Oracle
- 基於Geomesa服務查詢軌跡資料無法根據空間和時間範圍進行查詢的問題解決辦法
- vue+element-ui根據時間查詢VueUI
- JS實現檢查給定時間範圍是否在每天的某個時間段內JS
- JS判定一個給定的時間在某個時間範圍內JS
- pid,sid相互查詢,根據PID查詢sqlSQL
- linux根據字尾查詢文字Linux
- MySQL自定義函式 根據一級部門查詢所有子部門 記錄貼MySql函式
- mysql like查詢 - 根據多個條件的模糊匹配查詢MySql
- arcgis api for javascript學習-使用FeatureLayer結合FeatureTable實現查詢並能根據查詢結果將檢視縮放至結果的範圍APIJavaScript
- 微博根據手機號查詢
- C語言——使用函式輸出指定範圍內的Fibonacci數C語言函式
- 總結Oracle根據時間查詢的一些常見情況Oracle
- java判斷集合是否包含某個範圍內的值Java
- 一個改進後的根據STATSPACK來查詢哪段時間內的事務量最大的指令碼指令碼
- js物件陣列(JSON) 根據某個共同欄位 分組物件陣列JSON
- dcat-admin 統計修改時間選擇器 日期範圍查詢
- Laravel ORM 中,根據關聯查詢的欄位值,對主查詢排名LaravelORM
- JAVA裡List集合中的物件根據物件的某個屬性值降序或者升序排序Java物件排序
- 關於聯合索引,範圍查詢,時間列索引的幾個問題索引
- mysql根據節點查詢所有葉節點MySql
- SQL server根據表名查詢表主鍵SQLServer
- 根據查詢條件批量修改表資料
- MyBatis-maven-User例子-根據id查詢UserMyBatisMaven
- 歡迎使用CSDlambda表示式不同物件根據物件某個屬性去重N-markdown編輯器物件
- 根據經緯度座標查詢最近的門店
- 6-1 使用函式輸出指定範圍內Fibonacci數的個數函式
- 6-3 使用函式輸出指定範圍內的完數 (20分)函式
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- 生成某個範圍的隨機數隨機
- MySQL8 根據某屬性查詢欄位排名由自定義變數到rank()的變動MySql變數
- mongodb異機做時間點恢復(基於時間範圍查詢匯出oplog)MongoDB
- 查詢某表最近5天內最後一次dml的時間
- redis~有序集合處理ip範圍的查詢問題Redis
- day14--【Mybatis】動態代理--根據id查詢MyBatis