矩形内的lat和long gps位置

时间:2012-01-24 15:12:54

标签: android gps location

这是我的代码目标:我希望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个条件,那么你发送到你的服务器“

我认为这适用于矩形区域的一对边与纬度(赤道)平行而另一对边与经线(子午线)平行的情况。如果矩形区域的边与纬度和经度线不平行怎么办?我怎样才能实现目标?

2 个答案:

答案 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");

        }
    }

请评论更正和建议