ラインデータのコーディング

 ポリラインなどのデータは座標データが大きくなるので「エンコード」して、利用するのが便利です。  参考
 先ずは、具体例を見てみます。↓ 別窓表示  staticmapの場合
【HTML タグの説明】  参考
  1. Google Maps API のジオメトリ ライブラリーを利用します
  2. 利用するにはブートストラップ リクエストで次のように libraries パラメータを指定します
    <script src="https://maps.googleapis.com/maps/api/js?key=【API キー】&callback=initMap&libraries=geometry" async defer></script>
  3. 表示するポリラインデータをデコードし、
  4. ポリラインの設定をします
 次に、座標データの「エンコード」について見てみます。
  1. 兎に角コーディングしたいなら Google Maps API の Interactive Polyline Encoder Utility 等が利用できます。 参考
  2. コーディングのアルゴリズムはこちらに記述がありますが、以下のようになります  参考
     1.符合付きの(緯度又は経度)値を取得します
     2.その 10 進数に 1e5 を乗算して、値を丸めます
     3.この 10 進数を 2 進数(32ビット)で考えます
     4.その 2 進数を 1 ビットを左にシフトします
     5.元の 10 進数が負の場合は、このエンコーディング値を反転します
     6.その 2 進数を下から 5 ビット毎の集合に分割します
     7.その 5 ビット毎の集合を逆順に並べ替え、
     8.各集合に 0x20 の論理和演算を行います(下 30ビット分を利用)
     9.各値を 10 進数に戻し、
    10.その各値に 63 を加算し、
    11.それを対応する ASCII コードに変換します
      例として -179.9832104 は `~oia@ に変換されます
    12.入力値が続く場合は、後続(の各緯度,経度)値は差分値を使います
      例えば (38.5, -120.2), (40.7, -120.95), (43.252, -126.453) には
            (38.5,-120.2), ( 2.2, -0.75), ( 2.252, -5.503)     が対応し
            _p~iF ~ps|U _ulL nnqC _mqN vxq`@       に変換されて、
      結果   _p~iF~ps|U_ulLnnqC_mqNvxq`@            になります
    13.なお、出力内のバックラッシュ(\)はエスケープ記号となるので(\\)にします
    注. 地球の周長は約4万kmなので、緯度(,経度)の小数点以下 5桁目が 1m程度の分解能になります
  3. 具体的なプログラムリストは、例えば以下のようになります。参考
  4. これを使った具体的なページは、例えば以下のようになります。 別窓表示
 map top  Gmap3  page top