シェープファイル形式の地図データを読んでJavaFXで描画する
電子地図データの形式としてよく使われるシェープファイル形式(ベクターデータ)の地図データを読み込んで、投影変換をしてJavaFXで描画するという流れを確認するサンプルプログラムを作成しました。
JavaFXとベクター地図表示 - ソフトウェアエンジニアリング - Torutk
サンプルプログラムは、Java SE 8、NetBeans IDE 8.0、SceneBuilder 2.0 b14で作成しました。ビルドスクリプトはNetBeans IDEの生成したAntです。使用するライブラリは、NetBeansのAntライブラリ管理機能で登録したものを参照する設定です。
このサンプルで取り組んだ課題は
です。
現時点の制約は、
- シェープファイルはポリラインにのみ対応(ポリゴン、ポイント未対応)
- 1種類のシェープファイルしか表示できない(複数のシェープファイルを読みレイヤ表示に未対応)
- 投影法は正距方位図法でハードコーディングした中心位置を基準としたもののみ
- 色、線種線幅はハードコーディング
とおおよそ地図表示アプリには程遠いものです。
地図データ(シェープファイル)の読み込み
地理情報システム(GIS)の分野では、いろいろなGISツールで使用する地図データ(ベクター形式)のファイルフォーマットとしてシェープファイルがわりと使われます。フォーマットは仕様化され公開されています。
シェープファイルについて | ESRIジャパン
ただ、一から読み込み処理を作るのは大変なので、Java用のオープンソースライブラリを使うのがよさそうです。
GeoTools、OpenMapは表示機能まで持つ大きなライブラリです。Java Esri Shapefile Readerは、シェープファイル(のうち.shpファイル)を読むだけに特化したライブラリです。今回はシェープファイルだけ読むJava Esri Shapefile Readerを使うことにしました。
地図投影変換
地図は、回転楕円体である地球表面の地理的情報を平面に写したものです。
一般に地図データは地球表面上の場所を示す地理座標系で緯度経度で表現されています。これを、地図使用目的に応じた投影法(メルカトルとかランベルト正角円錐とか)によって平面XY座標系に写します。
先に紹介したGeoToolsには投影変換の機能も含まれていますが、たまたま使用したかった正距方位図法がサポートされておらず、他を探してみたところ、投影変換では昔から定番のオープンソースライブラリ(C言語用)Proj4のJava移植版がありました。