2016-04-29 6 views
5

私はアプリが動作を拒否する地理的境界を定義したいと思います。私はすでに2緯度/経度のペアに拘束される四角でこれを行う方法を知っている:私はまた、ジオフェンシングについて知っ特定の地域へのアプリの使いやすさを制限する方法ANDROID

if ((dLAT.doubleValue() > 35.309171) || (dLAT.doubleValue() < 35.226442) || (dLON.doubleValue() < -92.790165) || (dLON.doubleValue() > -92.707081)) 
    { 
     LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 

     localBroadcastManager.sendBroadcast(new Intent("killapp")); 
    } 

...またはジオフェンシングで、領域はからの半径の円として定義されていることを知っているのに十分単一の点。

しかし、私は、私は現実と一致する境界を定義したいと述べたように:ユーザーはカンザス州の国境外にある場合は動作しないように設計されたアプリがあった場合、それはないだろう、例えば

をカンザスの州は円形ではなく、その国境はぎこちないので、RADIUSを定義するのに満足できます。

私はこのためにAndroidを使用していますが、この疑問は本当に問題です。

ありがとうございました!

答えて

3

これは、1つが考えるよりもはるかに簡単である:

は経度、緯度座標でN点を有する、ポリゴンとしての領域(複数可)を定義します。

するポリゴン方法でポイントを使用:上記のコード 、現在の点が多角形の私達の外側内部にあるかどうかをテストするために

Point in Polygon Algorithm

をX、Y座標を使用しています。 xの代わりに経度を、yに緯度を使用します。
リージョンが北極または南極を横切っているとき、およびデータの限界(経度の境界= -180〜180)を超えたときにコードが機能しない可能性があります。

x、y(デカルト)平面で作業することを望む式を使用することはできませんが、球面緯度、経度、座標についてもここで動作します。

+0

ありがとうございます...私はこれを完全には確認できませんが、非常に有望であり、はるかに良い答えです。感謝します。 –

1

ここでは、デバイスの現在位置を取得し、新しい位置情報の更新のために登録することができます方法については公式ドキュメントです:あなたは現在の場所を持っていたら、デバイスをチェックし、かどうかを確認するためにLocation.distanceTo(Location)またはLocation.distanceBetween(double, double, double, double, float[])を使用することができますhttp://developer.android.com/training/location/receive-location-updates.html

指定された半径内にある。

-1

位置の半径を定義し、onLocationChangeListenerの現在の位置の距離を計算します。距離が半径よりも小さい場合は、ブールフラグを設定します。フラグがfalseの場合は、アクションを実行します。

1

おそらくGeocoderを使用して、現在の場所に基づいて都市名/州名を抽出すると、this答えが表示されます。

市/都道府県名が許可されていない場合は、アプリケーションを閉じてメッセージを表示します。

ただし、Geocoderにはインターネットアクセスが必要であることに注意してください。

関連する問題