SIMA を GeoJSON に変換する npm パッケージを更新しました

これの更新です。 バージョンが 0.2.2 → 0.2.3 になりました。

k-side.hatenablog.jp

変更箇所は以下の通り。

空白埋めデータへの対応

一部の測量計算ソフトが出力する SIMA データはカンマの位置が揃うように半角スペースで桁が揃えられています。
0.2.2 で変換すると半角スペースを持ったまま変換されてしまうので処理方法によって問題が出てしまいました。 0.2.3 では trim() によって前後の不要な半角スペースを取り除く処理を入れています。

new Buffer() → Buffer.from()

今頃対応しました。

iD エディタで複数の GPS トラックを表示する

時期的にちょうどいい(?)ので OpenStreetMap Advent Calendar 2019の1日目の記事にします()。

正攻法でいくなら GPS の軌跡を osm.org にアップロードしてからエディタの GPS トラックを表示するか、JOSM にドロップするなどの方法がありますが、多くのトラックに自宅付近が記録されているといった理由でアップロードしにくい場合の次善の手を考えました。

長いので要点だけを簡潔に

次のどちらかでできると思います。

  • GDAL ツールか QGIS などで GPX ファイルをマージしてから読み込む
  • GPX ファイルを地図画像タイルに変換してカスタム背景を設定する

QGIS をインストールしておくとどちらの作業できます。

続きを読む

SIMA をシェープファイルに変換する Python スクリプトを書いた

測量データ共通フォーマット SIMA の通称 JPGIS 版をシェープファイルに変換できるスクリプトを書きました。

jsima2shp.py

使い方

git で取ってきて python スクリプトを走らせれば変換できますが、シェープファイルを書き込むために別のリポジトリを参照しているので、git submodule init して git submodule update しないとダメかもしれないです。

このフォーマット変換では平面直角座標系を緯度経度に変換しません。

能書き

GeoJSON の RFCで座標参照系を指定する項目が削除され、 座標は緯度経度を使って WGS 84 で表現することになったため、Proj などを利用して緯度経度に変換して GeoJSON 化するスクリプトを書いたりしましたが、平面直角座標系を緯度経度に変換する際に精度の劣化が起こるため、劣化の少ないフォーマット変換を行うために書きました。

とはいえシェープファイルで保存しても少しですが精度の劣化が起こります。

今回は初めて Python で書いてみました。今まで Hallo World くらいしか書いたこと無かったんですけどね。

パースして地物を作って登録する流れは一緒なので QGIS プラグインとかに応用できたらいいなと思っています。

SIMA をシェープファイルに変換する Python スクリプトを書いた

測量データ共通フォーマット SIMA の通称 JPGIS 版をシェープファイルに変換できるスクリプトを書きました。

jsima2shp.py

使い方

git で取ってきて python スクリプトを走らせれば変換できますが、シェープファイルを書き込むために別のリポジトリを参照しているので、git submodule init して git submodule update しないとダメかもしれないです。

このフォーマット変換では平面直角座標系を緯度経度に変換しません。

能書き

GeoJSON の RFCで座標参照系を指定する項目が削除され、 座標は緯度経度を使って WGS 84 で表現することになったため、Proj などを利用して緯度経度に変換して GeoJSON 化するスクリプトを書いたりしましたが、平面直角座標系を緯度経度に変換する際に精度の劣化が起こるため、劣化の少ないフォーマット変換を行うために書きました。

とはいえシェープファイルで保存しても少しですが精度の劣化が起こります。

今回は初めて Python で書いてみました。今まで Hallo World くらいしか書いたこと無かったんですけどね。

パースして地物を作って登録する流れは一緒なので QGIS プラグインとかに応用できたらいいなと思っています。

OQ_Analysis で建物の品質チェックを行うテスト

OQ_AnalysisOSM にある建物データの品質解析を行うスクリプトで、PostGIS を組み込んだ PostgreSQL 上で動作します。

今回はジオメトリエラーの除去を行う作業のための準備としてある建物とその建物以外のオブジェクトが交差している部分を抽出するテスト行いました。なお、実験中に OQ_Analysis のリポジトリが更新され、機能が増えたみたいです。

実行した環境は VirtualBox 上の Ubuntu 19.04 でメモリは 2GB 割り当ててあります。

テストに使うためのデータは Geofabrik 社のダウンロードサービスから四国のデータをダウンロードしました。同サービスにある日本の中では最も小さいデータサイズになっていることが決め手です。

流れとしては - PBF を PostgreSQL にインポート - OQ_Analysis で交差地物の抽出 - PostGIS で交差をポイントまたはラインに変換 - ogr2ogr で結果を GeoJSON 化 みたいな感じです。

とりあえずできたのですが、課題は残っています。

続きを読む

Leaflet で GeoJSON タイルレイヤを表示するいくつかある方法のうちの一つ

GitHub Gist の pkorac/leafletGeoJsonTileLayer.js に書かれています。

このまま使おうとしたら自分の環境ではいくつか問題があったのでカスタマイズしました。
Leaflet.js 1.4.0 で試しています。

大きな変更点は2つです。

  • タイルパスの取得方法を変更
    Gist ではイベントのURLをevent.url で取得していますが、今回試した環境ではイベントから URL を直接取得できませんでした。
    代わりに event.coords を使うとポイントオブジェクトとして XYZ タイル座標を取得できるため、この情報を使って GeoJSON タイルの URL にしています。

  • jQuery を使いたくない
    JSON をダウンロードするために jQuery を使っていますが jQuery には使わない機能も多く搭載されていて 85kB あるため、13kB 程度にある axios を使っています。
    とはいえ axio では Promise が使われているので IE なんかで使おうとすると Polyfill とかが必要になるのでアレ。

どっちにしろ Webpack とか Babel な環境で使う事が多いので Promise ならなんとかなるんですよね。

さくらの VPS にウェブサービスを集約する

運用していたウェブサービスが別々のサービス上に点在していたのでさくらの VPS に集約することにしました。 とはいえ一番の動機は VPN サーバーをホストさせていた IDCF クラウドが個人向けサービスを終了させるということでした。集約したいサービスは次のようなものです。

新しくドメインを取得してさくらの VPS に紐付けます。今回取得したのは tk ドメインatlasseed.tk というものです。

Tasking Manager も Softether も Docker で動かしてホスト環境はあまりいじらないことを目標にしています。契約した VPS はメモリ1GB、SSD 30GBのもので、1年間で約1万円です。ロリポップと ConoHa と IDCF クラウドで1年あたり1.3万円くらいしてたので若干安くなる計算です。

以下 VPS の設定メモが無限に続きます。

続きを読む