这是我的代码目标:我希望Android应用程序开始触发连接到服务器并仅在手机(在汽车中使用)位于道路区域(例如1km x 30m范围内)时发送纬度和经度)。它会不断地听到它的位置,但一旦进入该区域就会开始发送到服务器,并且会一直发送,只有在它离开该区域后才会停止。
我收到了一个很好的答案: “创建两个位置,一个NorthWest位置和一个代表你的盒子的SouthEast位置。在你的onLocationChanged方法中,将新位置与角落进行比较,以便(l.lat> se.lat&& l.lat< nw.lat)和(l.lon< se.lon& l.lon> nw.lon)其中“l”是回调的最新位置,“se”是你边界的东南角并且“nw”是你的bounder的西北角。如果它满足上述4个条件,那么你发送到你的服务器“
我认为这适用于矩形区域的一对边与纬度(赤道)平行而另一对边与经线(子午线)平行的情况。如果矩形区域的边与纬度和经度线不平行怎么办?我怎样才能实现目标?
答案 0 :(得分: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);
添加广播接收器以接收您的意图。
答案 1 :(得分:0)
我正在阅读此website中解决方案的一部分,我选择的可能解决方案是解决方案3(2D):
我试图将其转换为java代码。到目前为止,下面是我的代码(尚未测试和打磨 - 可能有基本错误,经度和纬度的值不是真实的)
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");
}
}
请评论更正和建议