国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一篇文章帶你玩轉PostGIS空間數(shù)據(jù)庫

這篇具有很好參考價值的文章主要介紹了一篇文章帶你玩轉PostGIS空間數(shù)據(jù)庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、空間數(shù)據(jù)庫介紹

1.什么是空間數(shù)據(jù)庫

人類理解世界其實是按照三維的角度,而傳統(tǒng)的關系型數(shù)據(jù)庫是二維的,要想描述空間地理位置,點、線、面,我們就需要一個三維數(shù)據(jù)庫,即所謂空間數(shù)據(jù)庫。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
postGIS就是一個空間數(shù)據(jù)庫。

2.空間數(shù)據(jù)庫是怎么存儲的

除了普通數(shù)據(jù)庫所具備的字符串、數(shù)值、日期等,空間數(shù)據(jù)庫增加了空間數(shù)據(jù)類型。

這些空間數(shù)據(jù)類型抽象并封裝了諸如邊界(boundary)和維度(dimension)等空間結構。

可以這么理解,空間數(shù)據(jù)庫內置了許多屬性,這些屬性用于描述空間結構信息。

以點(Point)數(shù)據(jù)類型為例,一個點可以由它在某一坐標參考系下的X、Y坐標值來表示,如“POINT(116.4074 39.9042)”表示了一個位于北京市中心的點。

并且,空間數(shù)據(jù)類型按類型層次結構組織。每個子類型繼承其父類型的結構(屬性)和行為(方法或函數(shù))。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

3.空間數(shù)據(jù)庫有索引嗎

普通數(shù)據(jù)庫有索引??臻g數(shù)據(jù)庫也有空間索引,它有什么作用呢?

舉個應用的栗子幫助理解。查找你附近100m以內的所有商場。如果沒有空間索引,你需要苦逼的按照坐標取平方根窮舉計算,然后保留所有距離小于100的商場數(shù)據(jù)。

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

但是空間數(shù)據(jù)庫的索引設計有難點:如何組織數(shù)據(jù)的結構。普通數(shù)據(jù)庫用B+樹等就可以。空間索引有很多種,網(wǎng)格索引、四叉樹索引、金字塔索引…

其原理:過于先進,暫不展示

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

4.空間函數(shù)是什么東東

二維的蟲子可想不到三維的世界有多復雜:分析幾何信息、確定空間關系…

空間數(shù)據(jù)庫當然需要專業(yè)的解決這些問題,因此,它內置空間函數(shù)。

空間函數(shù)主要分為五類:

轉換 —— 在geometry(PostGIS中存儲空間信息的格式)和外部數(shù)據(jù)格式之間進行轉換的函數(shù)
管理 —— 管理關于空間表和PostGIS組織的信息的函數(shù)
檢索 —— 檢索幾何圖形的屬性和空間信息測量的函數(shù)
比較 —— 比較兩種幾何圖形的空間關系的函數(shù)
生成 —— 基于其他幾何圖形生成新圖形的函數(shù)

二、PostGIS快速入門

1.postGIS是什么

其實您應該猜到了,他就是在postgreSQL上的一個插件,但是因為有它,postgreSQL搖身一變,成了一個強大的空間數(shù)據(jù)庫。

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

這就意味著,這哥們兒開源啊。

2.postGIS怎么用啊

這個教程主要是幫助快速理解什么是postGIS,因此不會太細致。

自行下載安裝postGreSQL、postGIS

導入數(shù)據(jù)文件shape file

一個shapfile必須有的文件:

.shp —— 存儲地理要素的幾何信息
.shx —— 存儲要素幾何圖形的索引信息
.dbf —— 存儲地理要素的屬性信息(非幾何信息)
可選文件包括:

.prj —— 存儲空間參考信息,即地理坐標系統(tǒng)信息和投影坐標系統(tǒng)信息。使用well-known文本格式進行描述。

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
Soga!原來就是導文件給你可視化展示啊。這題咱會!

操作數(shù)據(jù),用SQL
哦,原來還是熟悉的配方,還是原來的味道。

SELECT name
FROM nyc_neighborhoods
WHERE boroname = 'Brooklyn';

元數(shù)據(jù)管理
PostGIS提供了兩張表用于追蹤和報告數(shù)據(jù)庫中的幾何圖形(這兩張表中的內容相當于元數(shù)據(jù))

第一張表spatial_ref_sys —— 定義了數(shù)據(jù)庫已知的所有空間參照系統(tǒng),稍后將對其進行更詳細的說明。
第二張表(實際上是視圖-view)geometry_columns —— 提供了數(shù)據(jù)庫中所有空間數(shù)據(jù)表的描述信息

通過查詢該表,GIS客戶端和數(shù)據(jù)庫可以確定檢索數(shù)據(jù)時的預期內容,并可以執(zhí)行任何必要的投影、處理、渲染而無需檢查每個幾何圖形(geometry)—— 這些就是元數(shù)據(jù)所帶來的作用。

表示真實世界的對象
Simple Features for SQL(SFSQL)規(guī)范是PostGIS開發(fā)的原始指導標準,它定義了如何表示真實世界的對象。但是這個哥們只表示了二維,而PostGIS擴展了3維、4維的表示。

說人話,就是可以表示:點、線串、多邊形、圖形集合(Collection)。

舉一個圖形集合的例子。

SELECT name, ST_AsText(geom)
FROM geometries
WHERE name = 'Collection';

返回結果就是一個點和一個多邊形的集合。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
基本操作而已,你是不是也學會了。

幾何圖形的存儲
PostGIS支持以多種格式進行幾何圖形的輸入和輸出:

  • Well-known text(WKT)
  • Well-known binary(WKB)
  • Geographic Mark-up Language(GML)
  • Keyhole Mark-up Language(KML)
  • GeoJson
  • Scalable Vector Graphics(SVG)

使用方法就是調用encode函數(shù),以下SQL查詢展示了一個WKB表示形式的示例

SELECT encode(
  ST_AsBinary(ST_GeometryFromText('LINESTRING(0 0,1 0)')),
  'hex');

由于WKT和WKB是在SFSQL規(guī)范中定義的,因此它們不能處理3維或4維的幾何圖形。對于這些情況,PostGIS定義了Extended Well Known Text(EWKT)和Extended Well Known Binary(EWKB)格式以用于處理3維或4維的幾何圖形。

數(shù)據(jù)類型轉換
PostgreSQL包含一個簡短形式的語法,允許數(shù)據(jù)從一種類型轉換到另一種類型,即類型轉換語法:

olddata::newtype

例如,將double類型轉換為文本字符串類型:

SELECT 0.9::text;

搞半天,原來這玩意有手(冊)就行,不用太費勁學。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

內置函數(shù)

這里介紹下它有哪些功能函數(shù),同志們心里有個底,需要時查查手冊。

sum(expression) aggregate to return a sum for a set of records
count(expression) aggregate to return the size of a set of records
ST_GeometryType(geometry) returns the type of the geometry
ST_NDims(geometry) returns the number of dimensions of the geometry
ST_SRID(geometry) returns the spatial reference identifier number of the geometry
ST_X(point) returns the X ordinate
ST_Y(point) returns the Y ordinate
ST_Length(linestring) returns the length of the linestring
ST_StartPoint(geometry) returns the first coordinate as a point
ST_EndPoint(geometry) returns the last coordinate as a point
ST_NPoints(geometry) returns the number of coordinates in the linestring
ST_Area(geometry) returns the area of the polygons
ST_NRings(geometry) returns the number of rings (usually 1, more if there are holes)
ST_ExteriorRing(polygon) returns the outer ring as a linestring
ST_InteriorRingN(polygon, integer) returns a specified interior ring as a linestring
ST_Perimeter(geometry) returns the length of all the rings
ST_NumGeometries(multi/geomcollection) returns the number of parts in the collection
ST_GeometryN(geometry, integer) returns the specified part of the collection
ST_GeomFromText(text) returns geometry
ST_AsText(geometry) returns WKT text
ST_AsEWKT(geometry) returns EWKT text
ST_GeomFromWKB(bytea) returns geometry
ST_AsBinary(geometry) returns WKB bytea
ST_AsEWKB(geometry) returns EWKB bytea
ST_GeomFromGML(text) returns geometry
ST_AsGML(geometry) returns GML text
ST_GeomFromKML(text) returns geometry
ST_AsKML(geometry) returns KML text
ST_AsGeoJSON(geometry) returns JSON text
ST_AsSVG(geometry) returns SVG text

總的來說,就是可以:求面積、求邊界、求大邊形里有多少小多邊形…在多維的世界里為所欲為。

空間關系

目前為止,我們一次只能處理一個幾何圖形。

空間數(shù)據(jù)庫之所以強大,是因為它們不僅能存儲幾何圖形,而且還能夠分析幾何圖形之間的關系。

諸如"哪一個是離公園最近的自行車位?"或者"地鐵線路和街道的交叉路口在哪里?"這樣的問題,只能通過比較、分析表示自行車位、街道和地鐵線路的幾何圖形來回答。

OGC標準定義了以下一組用于比較幾何圖形的方法。

  • ST_Equals(geometry A, geometry B)用于測試兩個圖形的空間相等性。
  • ST_Intersects、ST_Crosses和ST_Overlaps都用于測試幾何圖形內部是否相交。
  • ST_Touches()測試兩個幾何圖形是否在它們的邊界上接觸,但在它們的內部不相交
  • ST_Within()和ST_Contains()測試一個幾何圖形是否完全包含于另一個幾何圖形內
  • ST_Distance(geometry A, geometry B)計算兩個幾何圖形之間的最短距離

空間連接
空間連接(spatial joins)是空間數(shù)據(jù)庫的主要組成部分,它們允許你使用空間關系作為連接鍵(join key)來連接來自不同數(shù)據(jù)表的信息

還支持匯總。JOIN和GROUP BY的組合支持通常在GIS系統(tǒng)中的某些分析。這個和普通的關系型數(shù)據(jù)庫幾乎一樣。不多介紹了。

隨便舉個栗子,感受下。

SELECT
  n.name,
  Sum(c.popn_total) / (ST_Area(n.geom) / 1000000.0) AS popn_per_sqkm
FROM nyc_census_blocks AS c
JOIN nyc_neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)
WHERE n.name = 'Upper West Side'
OR n.name = 'Upper East Side'
GROUP BY n.name, n.geom;

上面sql計算了:"'Upper West Side’和’Upper East Side’的人口密度(人/平方千米 )是多少?

三、PostGIS進階玩法

到目前為止,都平平無奇,接下來介紹進階玩法。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

1.空間索引

空間索引是PostGIS的最大價值之一。在前面的示例中,構建空間連接需要對整個表進行相互比較。這樣做的代價很高:連接兩個各包含10000條記錄的表(每個表都沒有索引)將需要進行100000000次比較;如果使用空間索引,則比較次數(shù)可能低至20000次

創(chuàng)建索引、刪除索引就不多BB了。你們都會。

CREATE INDEX nyc_census_blocks_geom_idx
ON nyc_census_blocks
USING GIST (geom);

注意:USING GIST子句告訴PostgreSQL在構建索引時使用generic index structure(GIST-通用索引結構)。

原理

先回答一個問題,空間索引干了啥?

提高查詢效率。

那空間索引是怎么做到提高查詢效率的?

標準的數(shù)據(jù)庫索引,是根據(jù)被索引的列的值去創(chuàng)建樹結構的??臻g索引略不同,因為數(shù)據(jù)庫并不能索引幾何字段的值 —— 也就是幾何對象本身,我們改索引要素的范圍邊界框。

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

上圖中,和黃色星星相交的線的數(shù)量是 1,即紅色那條線。但是與黃色框相交的范圍框有紅色和藍色,共 2 個。

數(shù)據(jù)庫求解 “什么線與黃色星相交” 這個問題,是先用空間索引求解 “什么范圍框與黃色范圍框相交” 這個問題的(速度非常快),然后才是 “什么線與黃色的星星相交”。上述過程僅對于第一次測試的空間要素而言。

對于數(shù)量龐大的數(shù)據(jù)表,這種索引先行,然后局部精確計算的 “兩遍法” 可以在根本上減少查詢計算量。

簡單來說就是,規(guī)則的幾何圖形的計算比不規(guī)則的圖形計算簡單,利用這一點做為優(yōu)化的基本思想。

PostGIS中最常用的函數(shù)(ST_Contains、ST_Intersects、ST_DWithin等)都包含自動索引過濾器。但有些函數(shù)(如ST_Relate)不包括索引過濾器。

要使用索引執(zhí)行邊界框搜索(即純索引查詢-Index only Query-沒有過濾器),需要使用"&&"運算符

查詢規(guī)劃器:用不用索引?
PostgreSQL查詢規(guī)劃器(query planner)智能地選擇何時使用或不使用空間索引來計算查詢。與直覺相反,執(zhí)行空間索引搜索并不總是更快。

默認情況下,PostgreSQL定期收集數(shù)據(jù)統(tǒng)計信息,共查詢規(guī)劃器使用。但是,如果你在短時間內更改了表的構成,則統(tǒng)計數(shù)據(jù)將不會是最新的。因此,為確保統(tǒng)計信息與表內容匹配,明智的做法是在表中加載和刪除大容量數(shù)據(jù)后手動運行ANALYZE命令。

ANALYZE nyc_census_blocks;

清理:回收空間
每當創(chuàng)建新索引或對表大量更新、插入或刪除后,都必須執(zhí)行清理(VACUUMing)。VACUUM命令要求PostgreSQL回收表頁面中因記錄的更新或刪除而留下的任何未使用的空間。

VACUUM ANALYZE nyc_census_blocks;

2.數(shù)據(jù)投影

2.1 數(shù)據(jù)投影簡介

地球不是平的,也沒有簡單的方法把它放在一張平面紙地圖上(或電腦屏幕上),所以人們想出了各種巧妙的解決方案(投影)。

每種投影方案都有優(yōu)點和缺點,一些投影保留面積特征;一些投影保留角度特征,如墨卡托投影(Mercator);一些投影試圖找到一個很好的中間混合狀態(tài),在幾個參數(shù)上只有很小的失真。所有投影的共同之處在于,它們將(地球)轉換為平面笛卡爾坐標系。

使用投影特別簡單,PostGIS提供了ST_SRID(geometry)和ST_SetSRID(geometry,SRID)函數(shù)。

比較數(shù)據(jù)
比較坐標需要基于他的SRID(嚴謹?shù)恼f應該是空間參考系統(tǒng)),如果不是同一個參考系統(tǒng),比較沒有意義,會返回錯誤,比如如下實例。

SELECT ST_Equals(
         ST_GeomFromText('POINT(0 0)', 4326),
         ST_GeomFromText('POINT(0 0)', 26918)
         );

轉換數(shù)據(jù)
數(shù)據(jù)可以在不同SRID的進行轉換。

SELECT ST_AsText(
 ST_Transform(
   ST_SetSRID(geom,26918),
 4326)
)
FROM geometries;
2.2 地理坐標

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

坐標為"地理(geographics)“形式,即” 緯度(latitude)/經度(longitude)"形式的數(shù)據(jù)非常常見。地理坐標不是笛卡爾平面坐標。

如果你的數(shù)據(jù)在地理范圍上是緊湊的(包含在州、縣或市內),請使用基于笛卡爾坐標的geometry類型。否則,請使用使用基于球體坐標的Geography。而其中的原因,純粹是數(shù)學上的精確度與性能問題,這里不解釋。

坐標數(shù)據(jù)類型準換前面介紹過,這里復習下。

SELECT code, ST_X(geog::geometry) AS longitude FROM airports;

3.幾何圖形創(chuàng)建函數(shù)

目前我們看到的所有函數(shù)都可以處理已有的幾何圖形并返回結果。"幾何圖形創(chuàng)建函數(shù)"以幾何圖形作為輸入并輸出新的圖形。

3.1 以點代形

組成空間查詢時的一個常見需求是將多邊形要素替換為要素的點表示。這對于空間連接(spatial join)非常有用,因為在兩個多邊形圖層上使用St_Intersects(geometry, geometry)通常會導致重復計算:位于兩個多邊形的邊界上的多邊形將與兩側的多邊形都相交,將其替換為點將強制它位于一側或另一側,而不是與兩側的多邊形都相交

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

  • ST_Centroid(geometry) —— 返回大約位于輸入幾何圖形的質心上的點。這種簡單的計算速度非???,但有時并不可取,因為返回點不一定在要素本身上。如果輸入的幾何圖形具有凹性(形如字母’C’的幾何圖形),則返回的質心可能不在圖形的內部。
    postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

  • ST_PointOnSurface(geometry) —— 返回保證在輸入多邊形內的點。從計算上講,它比centroid操作代價要大得多。

3.2 緩沖區(qū)

緩沖區(qū)操作在GIS工作流中很常見,在PostGIS中也可以進行緩沖區(qū)操作。 ST_Buffer(geometry, distance)接受幾何圖形和緩沖區(qū)距離作為參數(shù),并輸出一個多邊形,這個多邊形的邊界與輸入的幾何圖形之間的距離與輸入的緩沖區(qū)距離相等。使用ST_Buffer函數(shù)即可。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

3.3 重疊、相并

另一個經典的GIS操作 - 疊置(overlay)- 通過計算兩個重疊多邊形的交集來創(chuàng)建新的幾何圖形。

使用ST_Intersection(geometry A, geometry B)函數(shù)。

ST_Union將兩個幾何圖形合并起來

4.幾何圖形的有效性

多邊形不一定有效,如果無效會報錯TopologyException錯誤。下面是一些有效性規(guī)則。

多邊形的環(huán)必須閉合
內環(huán)必須位于外環(huán)的內部
環(huán)不能自相交(它們不能相互接觸,也不能交叉)
除了在某個點接觸,環(huán)不能與其他環(huán)接觸

前兩條是必須的。后面兩條則是非必須設置的。您還可以自定義自洽規(guī)則。

ST_IsValid(geometry)函數(shù)可以用于檢測幾何圖形的有效性。

可以修復無效的圖形,壞消息是:沒有100%確定的方法來修復無效的幾何圖形。

在視覺上修復無效幾何圖形的一個好工具是OpenJump(http://openjump.org),它在Tools->QA->Validate Selected Layers.下包含一個驗證程序。

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

現(xiàn)在好消息是:可以使用以下任何一種方法在數(shù)據(jù)庫中修復很大一部分的缺陷:

ST_MakeValid函數(shù)
ST_Buffer函數(shù)

5.幾何圖形的相等

在處理幾何圖形時確定相等可能很困難。PostGIS支持三種不同的函數(shù)與操作符,可以用來確定不同級別的相等。

精確相等(ST_OrderingEquals)
精確相等是通過按順序逐個比較兩個幾何圖形的頂點來確定的,以確保它們在位置上是相同的。如果頂點定義順序不同,即使是相等也會被認作不相等。

空間相等(ST_Equals)
ST_Equals的函數(shù),可用于測試幾何圖形的空間相等性或等價性。無論是繪制多邊形的方向、定義多邊形的起點,還是包含的點的個數(shù)的差異在這里都不重要。重要的是多邊形包含相同的空間區(qū)域,它們就相等。

包圍框相等(~=)
為了更快地進行比較,提供了包圍框(bounding box)相等運算符 ’ ~= ’ 。這僅在包圍框(矩形)上操作,確保幾何圖形占用相同的二維范圍,但不一定占用相同的空間。它不一定精確,但是可以先用它粗篩,再結合其他方法細選。先粗后細。

6.線性參考

線性參考是一種表示要素的方法,這些要素可以通過引用一個基本的線性要素來描述。使用線性參照建模的常見示例包括:

公路資產,這些資產使用公路網(wǎng)絡沿線的英里來表示。
道路養(yǎng)護作業(yè),指在一對英里測量之間沿著公路網(wǎng)發(fā)生的作業(yè)。
水產庫存,其中魚的存在位置被記錄為距離上游的一段位置之間。
河流的水文特征,以河流的某一個點到另一個點作為參考。

線性參考到底是個啥?

線性參考是使用沿測量的線狀要素的相對位置存儲地理位置的方法。

聽不懂?

輔助線你總知道吧。其實線性參考就可以理解成一個輔助線,其他位置的計算就算和輔助線的相對位置。比如你以你大哥的身高為參考,計算你比他高了多少,判斷你有沒有長高(前提是你哥不長個了,誤~)

具體可以看如下例子。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
下圖是線性參考在交通網(wǎng)中實際的應用,紅色的就是線性參考。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

用下列的語法可以創(chuàng)建一個一個線性參考。

SELECT ST_LineLocatePoint('LINESTRING(0 0, 2 2)', 'POINT(1 1)');

7.DE9IM模型

“維數(shù)擴展的9交集模型-Dimensionally Extended 9-Intersection Model”(DE9IM)是一個用于建模兩個空間對象如何交互的框架。

首先,每個空間對象都具有:

內部(interior)
邊界(boundary)
外部(exterior)

即使是線段、點也有內部、外部和邊界。

對線段:內部是以端點為界限的線的那一部分;邊界是線性要素的端點;外部是平面中除內部和邊界外的所有其他部分。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

對于點來說,更奇怪:內部是點,邊界是空集,外部是平面上除點以外的所有其他部分。

使用這些內部、外部和邊界的定義,任何一對空間要素之間的關系都可以用一對要素的內部/邊界/外部/之間九個可能的交集的維數(shù)來表征。

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
注意上面有一個dim參數(shù),規(guī)則是:對于上例中的多邊形,內部的交集是二維區(qū)域,因此矩陣的對應部分用"2"填充。邊界僅在零維點處相交,因此對應矩陣部分用"0"填充。

再舉一個栗子。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
關于它們的交集的DE9IM矩陣如下:

postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
請注意,以上兩個要素的邊界實際上根本不相交(線的端點與多邊形的內部相交,而不是與多邊形的邊界相交,反之亦然),因此B/B單元用"F"填充。

生成DE9IM模型矩陣的SQL如下。

SELECT ST_Relate(
         'LINESTRING(0 0, 2 0)',
         'POLYGON((1 -1, 1 1, 3 1, 3 -1, 1 -1))'
);

DE9IM矩陣的強大之處不在于生成它們,而在于使用它們作為匹配參數(shù)來查找彼此之間具有特定關系的幾何圖形。

假設我們有一個湖泊(Lakes)和碼頭(Docks)的數(shù)據(jù)模型,進一步假設碼頭必須位于湖泊內部,并且必須在一端接觸到湖泊的邊界。我們能在數(shù)據(jù)庫中找到所有符合這一規(guī)則的碼頭嗎?

用下面sql就可以做到,推導過程就不展開了。

SELECT docks.*
FROM docks JOIN lakes ON ST_Intersects(docks.geom, lakes.geom)
WHERE ST_Relate(docks.geom, lakes.geom, '1FF00F212');

8.索引集群

加速數(shù)據(jù)訪問的一種方法是確保可能在同一結果集中一起被檢索的記錄位于硬盤上的相近物理位置。這就是所謂的"聚簇(clustering)"。

基于空間索引的聚簇對于將通過空間查詢訪問的空間數(shù)據(jù)是有意義的:相似的事物往往具有相似的位置(地理學第一定律)。

寫個sql,創(chuàng)建一個索引集群。

-- Cluster the blocks based on their spatial index
CLUSTER nyc_census_blocks USING nyc_census_blocks_geom_idx;

分為兩類:

  • 基于R-Tree的聚簇
  • GeoHash上的集群
    postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
    可自行深入理解兩種算法。

9. 3-D

到目前為止,我們一直在處理2-D幾何圖形(二維幾何圖形),只有X和Y坐標。但是PostGIS支持所有幾何圖形類型額外的維度,對于每個坐標,另外還能支持用于表示高度信息的"Z"維度以及用于添加額外附加信息的"M"維度(通常為時間、道路英里或距離信息)。

有許多函數(shù)可用于計算三維對象之間的關系
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫
如果你愿意,甚至可以擴展到N-D。

10.最近領域搜索

KNN是一種基于純空間索引的近鄰搜索方法。這里不展開,你知道有這樣的算法就行。
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫

11.使用觸發(fā)器追蹤歷史編輯操作

生產環(huán)境下數(shù)據(jù)庫的一個常見要求是能夠跟蹤用戶編輯數(shù)據(jù)的歷史:數(shù)據(jù)在兩個日期之間是如何變化的,是誰操作的,以及它們哪些內容變化了?一些GIS系統(tǒng)通過在客戶端接口中包含更改管理功能來跟蹤用戶的編輯數(shù)據(jù)操作,但這增加了客戶端編輯工具的復雜性。

使用數(shù)據(jù)庫和數(shù)據(jù)庫的觸發(fā)器機制,可以對任何表進行編輯歷史跟蹤,從而讓客戶端保持對編輯表的簡單“直接編輯”(客戶端不用負責追蹤編輯歷史的功能,只負責CRUD)。

12.用于創(chuàng)建空柵格的ST_MakeEmptyRaster函數(shù)

ST_MakeEmptyRaster用于創(chuàng)建一個空的沒有像元值的柵格(沒有波段),各個參數(shù)用于定義這個空柵格的元數(shù)據(jù):

width、height —— 柵格的列數(shù)和行數(shù)
upperleftx、upperlefty —— 對應空間坐標系中柵格左上角的坐標
scalex、scaley —— 單個像元的寬度和長度(單位等同于空間參考坐標系的單位)。
skewx、skewy —— 旋轉角度,如果柵格數(shù)據(jù)北方朝上,該值為0。默認值為0。
srid —— 空間參考坐標系,默認被設置為0。
pixelsize —— 單個像元的寬度和長度。當scalex和scaley相等時,就可以直接使用這個參數(shù)設置像元大小。

效果如下
postgis,數(shù)據(jù)庫,java,PostGIS,postgresql,空間數(shù)據(jù)庫文章來源地址http://www.zghlxwxcb.cn/news/detail-846224.html

到了這里,關于一篇文章帶你玩轉PostGIS空間數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 一篇文章,帶你徹底掌握接口測試!

    一、什么是接口測試? 所謂接口,是指同一個系統(tǒng)中模塊與模塊間的數(shù)據(jù)傳遞接口、前后端交互、跨系統(tǒng)跨平臺跨數(shù)據(jù)庫的對接。而接口測試,則是通過接口的不同情況下的輸入,去對比輸出,看看是否滿足接口規(guī)范所規(guī)定的功能、安全以及性能方面的要求。 二、為什么要

    2024年02月10日
    瀏覽(33)
  • 一篇文章帶你搞懂前端Cookie

    一篇文章帶你搞懂前端Cookie

    瀏覽器Cookie相信各位點進這篇文章的小伙伴應該不陌生了,它是前端領域中一個非常重要的內容,當然也是面試的一個考點,不知道各位小伙伴是否真正掌握了Cookie呢?當然沒有掌握也是沒有關系的,可以跟著小編的腳步一起來學習一下前端Cookie,沒有熟練掌握的小伙伴看完這

    2024年02月04日
    瀏覽(30)
  • 一篇文章帶你了解SpringBoot目錄結構

    一篇文章帶你了解SpringBoot目錄結構

    前言 SpringBoot是整合Spring技術棧的一站式框架,是簡化Spring技術棧的快速開發(fā)腳手架,是一個能夠快速構建生產級別的Spring應用的工具。SpringBoot是目前流行的微服務框架,倡導“約定優(yōu)于配置”,簡化Spring項目搭建及開發(fā)過程。springboot提供了很多核心的功能,比如自動化配置

    2024年03月25日
    瀏覽(89)
  • 一篇文章帶你實現(xiàn)棧的接口

    一篇文章帶你實現(xiàn)棧的接口

    棧(Stacks)是限定在一端插入和刪除的線性表。允許插入和刪除的一端稱為棧頂(Top),另一端稱為棧底(Bottom)。棧中的數(shù)據(jù)元素遵守后進先出(Last In First Out)的原則。因此,棧又稱為后進先出(先進后出)線性表。 壓棧:棧的插入操作叫做進棧、壓棧、入棧,入數(shù)據(jù)在

    2024年02月13日
    瀏覽(21)
  • 一篇文章帶你走進Java(保姆級)

    一篇文章帶你走進Java(保姆級)

    手打不易,希望對各位還在徘徊學什么語言的有幫助??!java不會讓你失望??! Java是一種優(yōu)秀的程序設計語言,它具有令人賞心悅目的語法和易于理解的語義。 Java還是有一系列計算機軟件和規(guī)范形成的技術體系,這個技術體系提供了完整的用于軟件開發(fā)和跨平臺部署的支持

    2024年02月15日
    瀏覽(26)
  • 一篇文章帶你了解什么是圖靈完備

    圖靈完備(Turing-complete)是一個計算機科學中的概念,它指的是一種計算模型能夠模擬任何其他計算模型的能力。這意味著,只要一種計算模型是圖靈完備的,那么它就能夠完成任何可計算的任務。 圖靈完備是指一種計算機語言或計算模型具有足夠的能力來模擬圖靈機的所有

    2024年02月15日
    瀏覽(32)
  • 一篇文章帶你了解什么是JDK

    JDK(Java Development Kit)是Java開發(fā)工具包,它提供了開發(fā)和運行Java應用程序所需的工具、庫和資源。下面是JDK的一些重點介紹: Java編譯器(javac):JDK包含了Java編譯器,可以將Java源代碼編譯為Java字節(jié)碼。通過編譯器,開發(fā)人員可以將Java源代碼轉換為可在JVM上運行的字節(jié)碼文

    2024年03月19日
    瀏覽(32)
  • 一篇文章帶你快速認識區(qū)塊鏈(必看)

    一篇文章帶你快速認識區(qū)塊鏈(必看)

    ? ? ? ?區(qū)塊鏈技術,這一劃時代的分布式賬本技術,正在全球范圍內掀起一場深度的信任與協(xié)作模式變革。區(qū)塊鏈如同一部由多方共同維護的公開而又安全的大賬本,每一筆交易都被打包成一個區(qū)塊,通過高級密碼學手段確保傳輸和訪問安全,并按照時間順序串聯(lián)起來,形

    2024年04月25日
    瀏覽(33)
  • 一篇文章帶你了解-selenium工作原理詳解

    一篇文章帶你了解-selenium工作原理詳解

    前言 Selenium是一個用于Web應用程序自動化測試工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否能夠很好得

    2024年02月10日
    瀏覽(26)
  • 【C++】一篇文章帶你深入了解list

    【C++】一篇文章帶你深入了解list

    list是可以在常數(shù)范圍內在任意位置進行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 list的底層是雙向鏈表結構,雙向鏈表中每個元素存儲在互不相關的獨立節(jié)點中,在節(jié)點中通過指針指向其前一個元素和后一個元素。 list與forward_list非常相似:最主要的不同在

    2024年04月23日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包