LoginSignup
0

posted at

updated at

GeoNode への データ登録とデータアクセスを確認する

1. はじめに

国連オープンGISイニシアチブではオープンソースソフトと商用ソフトをうまく利用してハイブリッドなGISシステムを構築し、地理空間情報を効果的・効率的に活用しようと考えています。

この中で、ウェブベースのプラットフォームで地理空間データのコンテンツ管理システムである GeoNode がハイブリッドGISの構成要素になっています。

今回、GeoNodeでどんなことができるのか、特にデータの登録とアクセスを観察して少しメモしてみました。私自身はこれまでにGeoNodeを構築・利用したことがなく、ほぼ初心者といってもいいと思いますが、初心者目線での発見をメモ・共有したいと思います。(ダッシュボードやストーリーマップの機能はまだ触れません)

2. 環境

  • GeoNode version 4

3. GeoNode について

まず、 https://geonode.org/ のページから、概要を調べてみました。

<GeoNode のポイント(と私が思うもの)>

  • オープンソースの地理空間情報コンテンツ管理システム
  • ウェブベースのアプリケーション
  • GISの開発やSDIの実装のためのツール
  • 最新の安定バージョンは4.0.2(2022年12月21日現在)
  • ドキュメンテーションはこちら: https://docs.geonode.org/en/master/
  • ユーザーインターフェースにはOpenLayersを使っていて、アプリケーションサービスの中ではGeoServerとGeoWebCacheを使っている。SQL/JDBCでPostGIS/PostSQL, Oracle Spatial, ArcGIS Server/ArcSDE, Microsoft SQL serverなどにアクセスしている。
  • PythonのWebフレームワークであるDjangoをベースにしている。

4. 観察結果

4-1. Data (Datasets と Documents) の登録

Dataとして、データセットと文書の2種類に分かれていました。ログインしないとコンテンツの追加ができないが、ログインするとコンテンツが追加できるようになります。(GeoNodeの設定にもよるのかもしれません。)
image.png

image.png

発見したこと:

  • リソースの追加メニューにはいろいろあって素晴らしい。
    image.png

  • datasetとしてアップロードできるのは、シェープファイル、GeoTiff、CSV、ZIPファイル、XMLメタデータファイル、SLD(Styled Kayer Descriptor)だけ。

  • documentとしては、かなりたくさんの種類のファイルがアップロードできる:txt, .log, .doc, .docx, .ods, .odt, .sld, .qml, .xls, .xlsx, .xml, .bm, .bmp, .dwg, .dxf, .fif, .gif, .jpg, .jpe, .jpeg, .png, .tif, .tiff, .pbm, .odp, .ppt, .pptx, .pdf, .tar, .tgz, .rar, .gz, .7z, .zip, .aif, .aifc, .aiff, .au, .mp3, .mpga, .wav, .afl, .avi, .avs, .fli, .mp2, .mp4, .mpg, .ogg, .webm, .3gp, .flv, .vdo, .glb, .pcd, .gltf

  • (create XX シリーズでのコンテンツ追加は省略)

  • Remote servicesでは、Web Map Service, GeoNodeに加え、ArcGISの MapServerとImageServerが追加できる。(注:wmsは追加できても、ラスタタイルサービスはコンテンツとしては追加できないようです。ArcGISの対応も、FeatureServiceとかVectorTileServiceとかは対応していなさそうです。) 
    image.png

実験0:テキストの追加

そんなに難しくなく追加できました。コンテンツを登録するとメタデータができてくる。登録したデータの共有範囲の設定も可能(shareから)
image.png

実験1:Shape fileの追加

ログインして、Add resourceからデータを追加できます。NaturalEarthからダウンロードした30度のグリッドデータをアップロードします。
image.png

追加できたました。ブルーの線で見られます。せっかくなのでshare(共有)範囲の設定などもします。作っておいたグループなども追加します。
image.png

実験2: ArcGISサーバーのMapService(ArcGIS REST APIに準じた Map Server)をRemote servicesとして追加してみる。

ここから、少しマニアックな方向に進みます。EsriのマップサーバーのコンテンツをGeoNodeでも消費したいので、少し試してみます。

Remote services に Esri Map Serviceを追加してみます。今回の実験では内部のArcGIS Onlineポータルサイトにあるデータのうち、 Access Tokenでコンテンツが保護されていないデータで実験しました。
image.png
とサービスのURLを指定すると、GeoNodeがEsriサーバーにアクセスしてレイヤを調べるようで、そのあとに追加レイヤ選択の画面に行きます。Esri Map Serverを指定しても、データの登録は実質的にレイヤごとにGeoNodeに追加するということになるようです。
image.png

試しにいくつか追加してみました。レイヤごとに登録されているほか、ArcGIS REST MapServerとしても登録されていました。
image.png

レイヤとしても読み込めています。(背景図は小縮尺しかないのですが、飛行場マークが登録したレイヤです)
image.png

(参考)ArcGIS REST API の Map Serviceについて

ここで、少し復習ですが、ArcGIS REST APIについては、以下のページを確認しておきましょう。

各コンテンツへは以下のような感じでアクセスできるはずです。

  • Map service over view: (サーバーの場所)/arcgis/rest/services/(マップサービス名)/MapServer?f=pjson
  • All layers and tables: (サーバーの場所)/arcgis/rest/services/(マップサービス名)/MapServer/layers?f=pjson
  • Layer overview (e.g. layer 6): (サーバーの場所)/arcgis/rest/services/(マップサービス名)/MapServer/6?f=pjson
  • Raster tile: (サーバーの場所)/arcgis/rest/services/(マップサービス名)/MapServer/tile/{z}/{y}/{x}

4-2. GeoNodeにおけるタイルの利用について

GeoNode の ユーザーインターフェースはOpenLayersだと書いてありましたが、Datasetとしてラスタタイルやベクトルタイルを登録できませんでした。
ただし、ラスタタイルについては、どこかで調整すればベースマップの一つとして利用できるようです(私の同僚が作業をしていました)。以下はArcRESTのMap Serviceのタイルではないですが、zxyラスタタイルを背景図にした例です。
image.png
ベクトルタイルはまだベースマップとしても使えないという話でしたが、OpenLayersがインターフェースならベクトルタイルも使える可能性はあるかもしれませんね。ただし、MapLibre GL JSやMapbox GL JSなどのスタイル表現は、OpenLayersではそのまま使えないので、まずはOpenLayersでのベクトルタイルの表示(MapLibre/Mapbox用スタイルの利用)について検討を進める必要がありそうです。

4-3. GeoNodeにあるデータを使う

今度はGeoNodeに登録されたデータを使うケースについて見てきます。

テスト1: GeoNodeに登録したシェープファイル

レイヤを開くとデータを見られます。WMSリクエストでデータを読み込んでいることがわかります。
image.png

GeoNodeに登録したシェープファイルのデータダウンロードのURLは以下の通りでした。登録したシェープファイルのダウンロードはうまくいきます。
https://(サーバー名)/datasets/geonode:ne_50m_graticules_30/dataset_download

しかし、GeoNodeに登録したシェープファイルからのGeoJSON出力は失敗しました。何かどこか設定がおかしいのかもしれません。今後、要チェックです。
image.png

テスト2: GeoServerに登録されているデータを使う

過去に同僚がデータベースからGeoServerに入れて、そのあとGeoNodeからアクセスしているというデータベースがあるので、これについて見てみます。

レイヤとしてGeoNode上で閲覧することができます。こちらもWMSのリクエストを通してレイヤにアクセスしていることがわかります。プロトコルはhttp1.1ですね。
image.png

データアクセスの詳細を見てみます。サインインすると消えてしまうときがあるのですが、データをみるとViewというタブがでています。ここからView Metadataを選んで、Referenceあたりを観察します。
image.png
image.png

各ファイルへのアクセス

このGeoServerに登録していたレイヤをチェックしたところ、各データへのURLは以下の通りでした。GeoServerのAPIでデータを返しているということが何となくわかります。

  • Original Dataset (zip): https://(サーバー名)/download/80
  • JPEG: http://(サーバー名)/geoserver/ows?service=WMS&request=GetMap&layers=krihs_ws%3Abndp&format=image%2Fjpeg&height=550&width=1209&srs=EPSG%3A4326&bbox=-181.78106689453125%2C-81.13282775878906%2C181.755615234375%2C84.1603775024414
  • PDF: http://(サーバー名)/geoserver/ows?service=WMS&request=GetMap&layers=krihs_ws%3Abndp&format=application%2Fpdf&height=550&width=1209&srs=EPSG%3A4326&bbox=-181.78106689453125%2C-81.13282775878906%2C181.755615234375%2C84.1603775024414
  • PNG: http://(サーバー名)/geoserver/ows?service=WMS&request=GetMap&layers=krihs_ws%3Abndp&format=image%2Fpng&height=550&width=1209&srs=EPSG%3A4326&bbox=-181.78106689453125%2C-81.13282775878906%2C181.755615234375%2C84.1603775024414
  • Zipped Shapefile: http://(サーバー名)/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typename=krihs_ws%3Abndp&outputFormat=SHAPE-ZIP&srs=EPSG%3A4326&format_options=charset%3AUTF-8
  • GML 2.0: http://(サーバー名)/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typename=krihs_ws%3Abndp&outputFormat=gml2&srs=EPSG%3A4326
  • GML 3.1.1: http://(サーバー名)/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typename=krihs_ws%3Abndp&outputFormat=text%2Fxml%3B+subtype%3Dgml%2F3.1.1&srs=EPSG%3A4326
  • CSV: http://(サーバー名)/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typename=krihs_ws%3Abndp&outputFormat=csv&srs=EPSG%3A4326
  • Excell: http://(サーバー名)/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typename=krihs_ws%3Abndp&outputFormat=excel&srs=EPSG%3A4326
  • GeoJSON: http://(サーバー名)/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typename=krihs_ws%3Abndp&outputFormat=json&srs=EPSG%3A4326&srsName=EPSG%3A4326
  • Legend: https://(サーバー名)/geoserver/ows?service=WMS&request=GetLegendGraphic&format=image/png&WIDTH=20&HEIGHT=20&LAYER=krihs_ws:bndp&STYLE=default_point&version=1.3.0&sld_version=1.1.0&legend_options=fontAntiAliasing:true;fontSize:12;forceLabels:on
  • Thumbnail: https://(サーバー名)/uploaded/thumbs/dataset-d1c3c168-fde2-4122-bde6-80d2494c7c69-thumb-3ecf4ef2-f9c2-4116-a546-5f19998163e4.jpg

httpプロトコルでリクエストしているところと、httpsでリクエストとするところが混在するのは不思議です。

各ファイルへのアクセスとAccessTokenの関係

GeoNodeでは、レイヤを閲覧する際に、リクエストURLの中にaccess_tokenを入れてデータへのアクセスをコントロールしようとしているようです(共有設定(share)への対応のためか??)。
image.png

しかし、この前の章で、geoserverが持っているデータへのアクセスURLを確認しました。なので、例えば、上図のURLの中からaccess_tokenの部分を消してみたのですが、それでもデータが見られました。GeoServer側でデータを登録したときには、GeoNodeのAccessTokenでのアクセスコントロールは難しいのでしょうか。ここはもう少し調べないといけない課題です。
image.png

テスト3: Remote resourceで登録したEsriのMapService

レイヤとしては普通にみられていました。ただし、登録したEsri の Map Serviceでは、GeoJSONなどが取れないものもありそうです。(png以降のAPIリクエストがそもそもうまくいっていない様子)。こちらももう少し研究します。
image.png

まとめ

ということで、初めてGeoNodeを見てみてみました。少し独特な切り口からデータの登録やアクセスを試してみました。

謝辞

GeoNodeパイロットシステムを構築してくれた同僚に感謝します。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0