空間資料 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

空間資料

Amazon Neptune 現在支援空間查詢,可讓您在圖形中存放和分析幾何資料。雖然 通常用於地理位置 (例如地圖上的座標),但空間特徵適用於位置和鄰近程度重要的任何二維資料。使用此功能來回答以下問題:「哪些商店在此客戶 5 英里內?」、「尋找與此服務區域相交的所有交付路由」或「此平面圖中的哪些元件與 HVAC 區域重疊?」 Neptune 使用業界標準的空間類型函數實作空間支援,該函數可與點、多邊形和其他幾何形狀搭配使用。您可以將空間資料儲存為節點和邊緣上的屬性,然後使用空間函數來計算距離、檢查點是否落在邊界內,或尋找重疊區域,全都在您的 openCypher 查詢內。

常見使用案例

  • 地理應用程式:以位置為基礎的建議、地理圍欄、路由規劃和區域分析

  • 設施和空間管理:平面圖配置、設備配置和區域涵蓋範圍

  • 網路拓撲:實體基礎設施映射、涵蓋區域和服務界限

  • 設計和 CAD:2D 設計中的元件定位、碰撞偵測和空間關係

  • 遊戲開發:角色定位、碰撞偵測和area-of-effect計算

Amazon Neptune 中的空間類型實作遵循 ISO/IEC 13249-3:2016 指令,例如其他資料庫。空間函數 以 openCypher 查詢語言提供。

座標系統

Neptune 在整個資料庫中有一個空間參考識別符 (SRID)。座標系統的同質性可減少查詢中的使用者錯誤,並改善資料庫效能。第一個版本 (1.4.7.0) 支援笛卡爾座標系統,也稱為 SRID 0。

SRID 0 的 Neptune 實作與經度和緯度值相容。使用 根據 WGS84/SRID 4326 ST_DistanceSpheroid計算距離。

目前的實作支援儲存 3D 座標。空間函數目前僅支援使用 x 軸和 y 軸 (2 維) 座標。可用的空間函數目前不支援 z 軸座標。

儲存位置資料

使用幾何屬性類型將位置資料存放在節點和邊緣上。從 Well-Known Text (WKT) 格式建立幾何值,這是將地理形狀表示為文字的標準方式。例如,若要存放點位置:

CREATE (n:airport {code: 'ATL', location: ST_GeomFromText('POINT (-84.4281 33.6367)')})

使用地理座標時,第一個引數 (x) 代表經度,第二個引數 (y) 代表經度。這遵循空間資料庫中使用的標準座標順序和 ISO 19125 標準。

注意

Neptune 現在支援稱為「幾何」的新資料類型。節點或邊緣的幾何屬性可以使用 ST_GeomFromText函數從 WKT 字串建立。

Neptune 會自動將點資料存放在專門的空間索引中,以改善空間類型函數的效能。例如,ST_Contains用來尋找多邊形內的點是由特殊空間索引加速。

幾何之 Well-Known Text 表示法的 Wikipedia 頁面

大量載入空間資料

大量載入資料時,請在 CSV 標頭中指定幾何類型。Neptune 會剖析 WKT 字串並建立適當的幾何屬性:

:ID,:LABEL,code:String,city:String,location:Geometry 21,airport,ATL,Atlanta,POINT (-84.42810059 33.63669968) 32,airport,ANC,Anchorage,POINT (-149.9960022 61.17440033) 43,airport,AUS,Austin,POINT (-97.66989899 30.19449997)

如需完整的 CSV 格式詳細資訊,請參閱 openCypher 大量載入格式

查詢空間資料

下列查詢範例使用 air-routes 資料集,示範如何在 Neptune 中使用空間函數。

如果您的資料具有單獨的經緯度屬性,而不是幾何屬性,您可以在查詢時將其轉換為點。尋找距離指定位置最近的 10 個機場:

MATCH (a:airport) WITH a, ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')') AS airportLocation WITH a, airportLocation, ST_Distance(ST_GeomFromText('POINT (-84.4281 33.6367)'), airportLocation) AS distance WHERE distance IS NOT NULL RETURN a.code, a.city, distance ORDER BY distance ASC LIMIT 10

如果您已將位置儲存為 ST_Point,則可以直接使用這些位置值:

  1. 設定 屬性

    MATCH (a:airport) SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')')
  2. 使用 ST_Distance 查詢:

    MATCH (a:airport) WHERE a.location IS NOT NULL WITH a, ST_Distance(ST_GeomFromText('POINT (-84.4281 33.6367)'), a.location) AS distance RETURN a.code, a.city, distance ORDER BY distance ASC LIMIT 10

使用 Bolt 驅動程式

大多數查詢方法將幾何值傳回為 WKT 字串,這些字串可供人類讀取。如果您使用的是 Bolt 驅動程式,幾何值會以 WKB (Well-Known Binary) 格式傳回以提高效率。將 WKB 轉換為應用程式中的幾何物件:

try (Session session = driver.session()) { Result result = session.run("MATCH (n:airport {code: 'ATL'}) RETURN n.location as geom"); Record record = result.single(); byte[] wkbBytes = record.get("geom").asByteArray(); // Convert WKB to Geometry object using JTS library WKBReader wkbReader = new WKBReader(); Geometry geom = wkbReader.read(wkbBytes); }