diadia

興味があることをやってみる。自分のメモを残しておきます。

GeoJsonデータをGoogle Mapにレンダリングする

コンテンツ

  1. GeoJsonを有効利用したいけど解決策はあるか?
  2. インストール
  3. 具体的な使用イメージ
  4. 色を変える

1. GeoJsonを有効利用したいけど解決策はあるか?

GeoDjangoを使う場合にgeometry型のデータをGeoJsonとして出力できる。
以下のように簡単に。。。

from django.core.serializers import serialize
#前提としてDRFを利用する

cityObjects = City.objects.filter(id=3)
geojson = serialize('geojson', cityObjects)

return Response({"geojson": geojson})

問題はそのGeoJsonデータをAndroidが受け取ってデータをレンダリングできるかってことだ。 せっかくgeojsonとして送信しているのに中身を解析してマップにレンダリングするのでは寂しい。
GoogleMapsPlatformにはその解決がある。GeoJsonLayerクラスを利用することだ。

val layer = GeoJsonLayer(googleMap, geoJsonData);
layer.addLayerToMap()

上記を使えばgeodjangoが生成したgeojsonをAndroid側でそのままマッピングすることができる。

2. インストール

googlemapsplatformを使う場合にgradleにモジュールをインストールしたと思うが、そのモジュールではGeoJsonLayerクラスを利用することができない。

gradleに以下を追加する。

dependencies {
    implementation 'com.google.maps.android:android-maps-utils:1.0.2'
}
GeoJsonLayerクラスを使うためのモジュールインストール方法を示す資料

Maps SDK for Android Utility Setup  |  Google Developers

3. 具体的な使用イメージ

  1. まずdjangojsonAndroid端末に送信する。
  2. Androidがデータを受け取る
  3. GoogleMapsPlatformのマップをフラグメントとして起動する。
  4. geojsonをonMapReadyメソッド内で使いレンダリングする。

4. 色を変える

val depLayer = GeoJsonLayer(googleMap, geoJsonData);
depLayer.defaultPolygonStyle.fillColor = Color.GREEN
depLayer.addLayerToMap()

Maps SDK for Android Utility Setup  |  Google Developers

Render a GeoJson layer with Google Maps, OSM or Mapbox on Android

Google Maps Android GeoJSON Utility  |  Maps SDK for Android

関連記事

JSON形式のStringデータをJSONObjectに変更する - diadia