Androidアプリにルート表示する(その3)

apiから取得したpolylineをデコードする。


googleからエンコード化ポリライン アルゴリズム方式が公開されているので、この記述に従ってエンコーダを書いてみたが結果が同じにならず、デバッガで追い掛けながら、あーだこーだと相当苦労した。
結論としては、この文書の記述は不正確な部分や端折ってある部分のある事が判明。
以下コードは、色々な経緯度で試してみましたが、完全である保障は無いので注意ください。
private static StringBuffer encoderPosi(int num)
{
 ArrayList<Byte> bit =new ArrayList<Byte>();
 StringBuffer ret = new StringBuffer();

 num=num<<1;
 if(num <0)                   //負値の場合はビット反転

 {
  num=~num;
 }
 for(int i=0;i<6;i++)               //5bit毎に分割
 { 

   bit.add((byte)(num&0x1f));
   num=num>>>5;
 }
 for(int i=bit.size()-1;i>=0;i--)         //不要な0データ削除
 {
   byte n=bit.get(i);
   if(n==0){
    bit.remove(i);
   }else{
   break;
   }
 }
 for(int i=0;i<bit.size()-1;i++)         //0x20論理和(最終データは除く)
 {
   bit.set(i, (byte) (bit.get(i)|0x20));
 }
 for(int i=0;i<bit.size();i++)                      //63加算
 {
  bit.set(i, (byte) (bit.get(i)+63));
  if(bit.get(i)=='\\')                  //バックスラッシュ時の処理
{
bit.add(i+1, (byte) '\\'); 
i++;
}
}
for(int i=0;i<bit.size();i++)
{
ret.append((char)(bit.get(i).byteValue()));
}
return ret;
}

これを逆に辿れば、polylineデータから経緯度へのデコードができるので、道路に沿ったルート表示が可能になるはずだが、はてさて思惑通りに行くか?
 続く

コメント

このブログの人気の投稿

ARM用クロスコンパイラのビルド(Windows8+Cygwin)

Raspberry Pi のsleep時間測定

Quartus2 V13.1 ~エントリー編 HDL回路から回路図用シンボルを作成する~