2012-01-24 19 views
0

これは私のコード目的です:車に使用されている電話機が道路内にある場合にのみアンドロイドアプリケーションがサーバーに接続して緯度と経度を送信するようにしますエリア(例えば、1km×30mのエリア)。継続的にその位置を聞いていますが、エリアに入るとサーバーに送信を開始し、エリアを出ると一度だけ送信し、停止します。 ""あなたのonLocationChangedメソッドでは、新しい場所と角を比較して、(l.lat> & & l.lat < nw.lat)及び "L" は、コールバックから最新の位置である(l.lon < se.lon & & l.lon> nw.lon)se.lat、 "SE" は南であります上記の4つの条件を満たす場合は、サーバーに送信します。矩形内の緯度と経度のGPS位置

これは、矩形領域の辺は緯度(赤道)に平行であり、他の対は経線(経線)に平行な辺である。矩形領域の辺が緯度と経線に平行でない場合はどうなりますか?私の目的をどのように満たすことができますか?

+0

のためにコメントしてください! –

+0

はいここでオプションを確認してください。http://paulbourke.net/geometry/insidepoly/ – coollearner

答えて

0
// Create a pending intent for proximity alert. 
PendingIntent broadcastPendingIntent = PendingIntent.getBroadcast(context, ID, 
    associatedIntent, PendingIntent.FLAG_ONE_SHOT); 
// Add the proximity alert. 
mLocationManager.addProximityAlert(Latitude, Longitude, ProximityAlertRadius, 
    TimeOut, broadcastPendingIntent); 

あなたの意向を受け取るために放送受信機を追加してください。

私はJavaコードにこれを翻訳しようとした:私はこのwebsiteで溶液の一部を読んでいた

+0

Thanks Navin。その代わりに矩形または円を作るでしょうか?私が間違っていないなら、私が読んだことによって、円を描くでしょう。 – coollearner

+0

ProximityAlertRadiusはあなたの質問に答えます.... –

+0

正しいのは、半径が円の領域を形成するでしょう。長方形のエリアの目的を満たすための良い方法はありますか?時間を感謝Navin。 – coollearner

0

iが選択可能な解決策は、溶液3(2D)です。これまでに以下の私のコード(まだテストされ、研磨ない - 基本的なエラーがあると経度と緯度の値は本物ではない場合があります)であるuは解決策を持ってなかった

private class MyLocationListener implements LocationListener {      
    @Override 
    public void onLocationChanged(Location loc) { 
     String txt = "Latitude:" + loc.getLatitude() + "/nLongitude:" + loc.getLongitude(); 
     Log.i("GeoLocation", "My current location is:\n " + txt); 
     tv.setText("My current location is:\n" + txt); 
     String msg = loc.getLongitude() + "\n" + loc.getLatitude() + "\n" 
      + loc.getTime(); 

     double lat0 = 0.2; 
     double long0 = 0.3; 
     double lat1 = 1.2; 
     double long1 = 1.3; 
     double lat2 = 1.2; 
     double long2 = 1.3; 
     double lat3 = 1.2; 
     double long3 = 1.3; 
     double rel1 = (loc.getLongitude()- long0)*(lat1 - lat0)- ((loc.getLatitude()-lat0)*(long1-long0)); 
     double rel2 = (loc.getLongitude()- long1)*(lat2 - lat1)- ((loc.getLatitude()-lat1)*(long2-long1)); 
     double rel3 = (loc.getLongitude()- long2)*(lat3 - lat2)- ((loc.getLatitude()-lat2)*(long3-long2)); 
     double rel4 = (loc.getLongitude()- long3)*(lat0 - lat3)- ((loc.getLatitude()-lat3)*(long0-long3)); 

     if (rel1 <= 0 && rel2 <= 0 && rel3 <= 0 && rel4 <= 0) 
     { 
      try 
      { 
      connect("IP address", 27960); 
      send("CMD_HELLO"); 
      send(msg); 
      send("CMD_QUIT"); 
      } catch (UnknownHostException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      } 
     else 
     { 
      tv.setText("Current location is outside the road network"); 

     } 
    } 

訂正と提案

関連する問題