スタイル付きGeoJSON規約に合わせて作成したGeoJSONファイルを,Leafletで表示したときの話
拙作のAndroidアプリ「地図ロイド」には,
簡易作図機能
があり,アプリ上で作図してその結果をGeoJSONファイルとして出力できます.
これを拙作の クラウドサービス と連動させて,
作図したGeoJSONファイルを,Web画面でも表示できるようにしようとしたときの話です.
Webでの地図表示には,Leafletを使っています.
スタイル付きGeoJSON規約の扱い
この機能が生成するGeoJSONファイルは,
-国土地理院の スタイル付きGeoJSON規約
に合わせて描画スタイルを保持しています.このスタイルをどうやってLeafletで解釈するかですが,
こちらのサンプルがまさにそのものです.
スタイル付きGeoJSONの読み込みサンプル
このサンプルのソースを拝見して,実装すればできます.
注意点としては,ヘッダ部にあるstyle宣言のうち,
<style>
.leaflet-div-icon {background: none;white-space: nowrap;border:none;}
</style>
は必須です.これがないと,「テキスト」が縦書きになってしまいます.
テキスト(DivIcon)の位置調整
その「テキスト」ですが,テキストが描画される位置とgeojson属性の緯度経度の関係が明確ではなく,
Leafletでの挙動によりけりというところがあります.
そのためアプリの地図ロイドでは,geojsonで与えられた緯度経度をテキスト中心点とする仕様にして,
描画しています.
地図ロイド GeoJSONへのスタイル設定
今回は,Webでも地図ロイドと同じ画面を再現したかったため,
Leafletでも同じように緯度経度をテキスト中心点とするように,
CSSを設定しました.
先ほどの leaflet-div-icon クラスのスタイルも含みますが,こんな感じです.
<style>
.leaflet-div-icon {
background:none;
white-space:nowrap;
border:none;
width:600px !important;
margin-left:-300px !important;
margin-top:-12px !important;
}
.leaflet-div-icon div, .leaflet-div-icon span {
display:block;
text-align:center;
line-height:1rem;
margin-top:-.5rem;
}
</style>
親div(leaflet-div-iconクラス)の左上が,緯度経度の位置になっている様子ですので,
ここがテキスト部(子のdivまたはspan)の中心になるように調整しています.
600pxおよびその半分の300pxという数値が出てしまっていますが,
これはテキスト部が収まる幅であれば何でもいいです.
CSS力が足りないので数値で記述せざるを得なくなっており,ここはいまいちです...
地図ロイド(Android)の画面
大釜温泉と重なっている「初日2」というのがテキストです.両者でほぼ同じ見え方になりました.
Webの画面