圖數據庫實踐系列 (三)--Neo4j Spatial的REST集成


上講回顧:主要講述Neo4j Spatial項目以及空間數據(矢量)的存儲。本文主要介紹Neo4j Spatial與Neo4j Server的集成,以及與GeoServer 的集成。

Noted:與Geoserver的集成方法可行,但是geoserver無法顯示發布數據庫內的圖層。(系統環境:Ubuntu 12.04,Spatial 0.9,Neo4j 1.8M6,Geoserver 2.1.1)

1.Neo4j Server安裝與配置

1.1Neo4j Server 安裝

Neo4j可以安裝成數據庫服務器,能夠已應用或者系統服務兩種形式運行在操作系統中。它內置了jetty 和REST接口,來實現使用瀏覽器對數據庫操作[17,18]。

  1. 在neo4j官網http://neo4j.org/download下載你喜歡的版本(需要選擇你的操作系統)
  2. 解壓到特定位置,解壓路徑表述為$NEO4J_HOME(如/home/dev/neo4j/)
  3. 啟動腳本在$NEO4J_HOME/bin 文件夾下,在Linux/MacOS下,運行 $NEO4J_HOME/bin/neo4j start 在Window 只要雙擊%NEO4J_HOME%\bin\Neo4j.bat文件即可

我們也可以按照第一講所述,進入源碼安裝的Neo4j的的bin文件夾($NEO4J_HOME/bin)命令啟動,

cd $NEO4J_HOME/bin/
$NEO4J_HOME/bin/neo4j start

我們只需要訪問 http://localhost:7474/webadmin/  會出現Neo4j 的web 管理界面,如圖1所示:

圖1 Neo4j Server管理界面

在Web 管理界面,我們可以查看數據庫的節點,屬性,關系信息。還可以通過Http ,Shell 和Germlin三種方式來對圖數據庫做CRUD。如果需要將Neo4j Server 以系統服務的方式運行,可以查閱參考文獻[17]

1.2Neo4j Server 配置參數

如果我們需要對服務器的后端數據庫性能調優等,可以通過Server的配置文件來了解圖數據庫的具體參數。這些重要的參數都存儲在$NEO4J_HOME/conf/neo4j-server.properties文件內,包括服務器數據庫在磁盤上的路徑:

org.neo4j.server.database.location=data/graph.db

http 服務器接口:

org.neo4j.server.database.location=data/graph.db

設置REST數據接口所能夠操縱的數據庫的相對路徑

org.neo4j.server.webadmin.data.uri=/db/data/

等。至於Neo4j的性能參數和日志參數分別參看$NEO4J_HOME/conf/neo4j.properties,$NEO4J_HOME/conf/logging.properties兩個文件

2.Neo4j Server與Spatial集成

2.1 Neo4j  Server的Spatail插件安裝

  上講我們通過利用源碼安裝了neo4j spatial ,在/target目錄下會有一個neo4j-spatial-0.9-SNAPSHOT-server-plugin.zip文件。如果沒有,可以運行以下命令來獲得該文件:

git clone https://github.com/neo4j/spatial.git
cd ./spatial
mvn clean package -DskipTests

將該文件解壓到,復制所有的jar包到neo4j 的lib文件夾內,然后重啟neo4j server即可。

2.2 Neo4j  Server的空間操作

  利用curl[20]工具能夠在命令行中對Neo4j實現空間數據讀寫,包括查詢,圖層創建,點創建等。這些都是以JSON格式以http協議對圖數據庫的操作。

curl http://localhost:7474/db/data/

會返回數據庫的整體信息,如圖2所示:

 

圖2 查詢圖數據庫

我們可以看到返回的JSON數據中有"SpatialPlugin"對象,它的屬性包括addEditableLayer,getLayer,addNodeToLayer等。我們通過curl命令來創建名字為'test'等簡單點圖層。

curl -d "layer=test" http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer

如圖3所示:

 圖3 添加點圖層

可以從圖中看到數據隊形的屬性,包括圖層的類,圖層名稱,幾何編碼類型,創建時間。然后添加三個Well-Konw text 格式的點

# Creating three points from Well-known text format
curl -v http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addGeometryWKTToLayer -H "Content-Type: application/json" -d '{"geometry":"POINT(10 10)", "layer":"test"}'
curl -v http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addGeometryWKTToLayer -H "Content-Type: application/json" -d '{"geometry":"POINT(10 11)", "layer":"test"}'
curl -v http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addGeometryWKTToLayer -H "Content-Type: application/json" -d '{"geometry":"POINT(9 10)", "layer":"test"}'

然后執行一個范圍查詢

curl -v http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesInBBox -H "Content-Type: application/json" -d '{"minx":9.0,"maxx":11.0,"miny":9.0,"maxy":12.0,"layer":"test"}'

返回在邊界內的點為兩個,如圖4所示:

 圖4 范圍查詢

  3.與GeoServer集成

       GeoServer是一款基於java的開源的地圖服務器,支持包括shapefile,postgis等多種數據源。neo4j spatial能夠以插件的形式與GeoServer集成。集成方法如下:

  1.  解壓neo4j-spatial-0.9-SNAPSHOT-server-plugin.zip,將里面除了gt-*_8.0的jar包 拷進geoserver/WEB-INF/lib 文件夾
  2. 復制neo4j/lib 里面所有jar 進入geoserver/WEB-INF/lib 文件夾
  3. 重啟geoserver

      通過訪問GeoServer地址http://localhost:8080/geoserver/web/,我們可以看到如圖-5所示,neo4j可以作為geoserver的后端,提供地圖服務。

 

圖5 neo4j與geoserver集成

但是geoserver無法顯示,發布數據庫內的圖層。(系統環境:Ubuntu 12.04,Spatial 0.9,Neo4j 1.8M6,Geoserver 2.1.1)

據說是geoserver的一個bug,會在不久后修復。https://github.com/neo4j/spatial/issues/57

下一講會主要講述一個基於HBase的圖數據庫Titan。

參考文獻

[17]Server Installation http://docs.neo4j.org/chunked/stable/server-installation.html

[18]Jetty http://jetty.codehaus.org/jetty/

[19]Server Configuration http://docs.neo4j.org/chunked/stable/server-configuration.html

[20]cURL http://curl.haxx.se/

[21]Well-known text  http://en.wikipedia.org/wiki/Well-known_text

知識共享許可協議
本作品由VentLam創作,采用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協議進行許可。


免責聲明!

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



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