2016-11-29 8 views
4

ユーザーがフォレスト内にいるかどうかを判断できるアプリケーションを作成したいと思います。 アンドロイドを使ってそれを行う方法はありますか?ユーザーがフォレスト内にいるかどうかを確認する

私が試した何を:Googleの場所APIを使用し、ユーザーが森の中にある時はいつでも場所タイプ「natural_feature」を取得することを望んだ

  1. 。残念ながら私はほとんどの時間が「ゼロ」です

  2. WMSレイヤーについては、森林面積を表示し、GoogleMapの上に置くことを試みました。それが動作するように取得し、また、私が最も可能性の高いユーザーだけが層のエリアの一つにある場合にマップは確認されませ示すことができるということに気づいていなかった...

はする方法はあります現在の位置がGoogleマップの緑色の領域にあるかどうかを確認しますか?他のすべてが失敗した場合でもそれで十分かもしれません。

ありがとうございます!

+2

可能であれば、ちょっとしたアイデアがあります。Googleマップは「緑色の領域」(私は森がある地図の色を意味します)という森林を持っています。ユーザーの位置でマップの色を調べることはできますか? –

+0

私は間違いなくそれをチェックアウトするでしょう! – MikeB

答えて

1

これを行うには簡単に方法があるかどうか私は現在、知りませんが、あなたは次のことを試みることができる:

  1. マップ
  2. からスナップショットを取得するスナップショット
  3. の平均色を取得します。平均色と既定のフォレストカラーを比較してください
  4. その差が許容誤差よりも小さい場合、 マップの緑色の領域にあります

地図がズームインされておらず、緑色の領域が小さすぎると結果は正確ではないかもしれません。この場合、特定のズームレベルでのみ計算できます。

 final int forestR = 214; 
     final int forestG = 233; 
     final int forestB = 215; 
     final int tolerance = 60; 

     Button button = (Button) findViewById(R.id.check_forest_btn); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       GoogleMap.SnapshotReadyCallback callback = new GoogleMap.SnapshotReadyCallback() { 


        @Override 
        public void onSnapshotReady(Bitmap snapshot) { 
         int pixelCount = 0; 
         int redColors = 0; 
         int greenColors = 0; 
         int blueColors = 0; 
         for (int y = 0; y < snapshot.getHeight(); y++) { 
          for (int x = 0; x < snapshot.getWidth(); x++) { 
           int c = snapshot.getPixel(x, y); 
           pixelCount++; 
           redColors += Color.red(c); 
           greenColors += Color.green(c); 
           blueColors += Color.blue(c); 
          } 
         } 
         // calculate average of bitmap r,g,b values 
         int red = (redColors/pixelCount); 
         int green = (greenColors/pixelCount); 
         int blue = (blueColors/pixelCount); 

         int difference = Math.abs(red - forestR) + Math.abs(green - forestG) + Math.abs(blue - forestB); 

         boolean isForest = difference < tolerance;//use this to display your information 
        } 
       }; 

       map.snapshot(callback); 
      } 
     }); 
+0

私はそれを試してみましょう、ありがとう! – MikeB

関連する問題