ドローンの航空写真からタイル画像を作成するサーバーを作りたい
OpenArerial Mapで十分利用可能だが、自分専用のタイルサーバが欲しくなったので、DRONEBIRD専用のタイルサーバを作ってみようと思う。
他にも、オープンデータで公開された自治体の航空写真を取り込むことによりWebでの二次利用ができればと思っています。
タイル画像とは
ズームレベルごとに地球を分割。各タイルを256x256pixcelに分割しブラウザで地図を見るときの通信量を絞る機能
詳しい内容は、説明URLを参考に 正方形タイルによる地図の表現:TrailNote
どうやって作るのか
QGISを使う場合
QGISのプラグインのQMetaTileツールを使って作成
GDALツールを使う場合
GDALのgdal2tilesを使って作成 gdal2tiles
gdal2tiles.py [-p profile] [-r resampling] [-s srs] [-z zoom]
[-e] [-a nodata] [-v] [-q] [-h] [-k] [-n] [-u url]
[-w webviewer] [-t title] [-c copyright]
[--processes=NB_PROCESSES]
[-g googlekey] [-b bingkey] input_file [output_dir]
なんちゃってOpenAerialMapを目指して
いままで作った作品
毎年2月に実際される杉戸町の防災訓練にてドローンを飛ばしてQGISでタイルを作ってからディレクトリごとSFTPにてサーバーにアップしてました。この手業にて作成したのが下記のサイトです。
どういう機能が必要なのか
h
まず作るもの
-
GeoTIFFのアップロード
- GeoTIFFから情報を取得(測地系、投影、緯度経度情報等)
- タイル画像にタイトルを付与
- 切り出すタイルのズーム指定
- タイルのライセンスを指定
-
タイルの切り出し
- タイルの切り出しディレクトリを作成
- タイルの切り出し処理
- タイルのURLを作成
-
タイルのURLを表示し閲覧可能にする
- タイル外の画像に対する処理
- mod_rewriteによる処理
- タイルURLを外部から使えるようにする
- OSMでの編集リンクの作成 iDのみ
- もとのGeoTIFFをダウンロードできるようにする
- タイル外の画像に対する処理
-
LeafletもしくはMapboxにてタイルのレイヤーを閲覧できるようにする
現時点で作らない機能
- アカウント処理(一律で公開します。個別対応しません)
- 削除機能(消したかったら僕が連絡後、直接サーバーで対処します。)
使用する言語やサーバー環境など
開発環境
-
Virtualbox(CentOS 7系)
-
インフラ側
- apache (リバースプロキシーとして)
- Django + Geo拡張
- Postgresql + PostGIS (GdalはPostGISに同梱されるものを使用)
-
フロント側
- Python 3.7
- Leaflet
- Javascript
など
geotiffの情報取得
gdalinfo ~/openev/utm.tif
Driver: GTiff/GeoTIFF
Size is 512, 512
Coordinate System is:
PROJCS["NAD27 / UTM zone 11N",
GEOGCS["NAD27",
DATUM["North_American_Datum_1927",
SPHEROID["Clarke 1866",6378206.4,294.978698213901]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1]]
Origin = (440720.000000,3751320.000000)
Pixel Size = (60.000000,-60.000000)
Corner Coordinates:
Upper Left ( 440720.000, 3751320.000) (117d38'28.21"W, 33d54'8.47"N)
Lower Left ( 440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N)
Upper Right ( 471440.000, 3751320.000) (117d18'32.07"W, 33d54'13.08"N)
Lower Right ( 471440.000, 3720600.000) (117d18'28.50"W, 33d37'35.61"N)
Center ( 456080.000, 3735960.000) (117d28'27.39"W, 33d45'52.46"N)
Band 1 Block=512x16 Type=Byte, ColorInterp=Gray
取得して必要なのは、測地系、中心位置、地図の範囲です
iDでのリンクの作り方
http://www.openstreetmap.org/edit?editor=id#map={zoom}/{中心緯度}/{中心経度}&background=custom:https://example.com/path/to/{z}/{x}/{y}.png
のリンクを作成
作ったものをGitHubにて公開
今後やりたいこと
- 大容量ファイルのアップロードの工夫
- アプリのDocker版の作成
- DB連携