【问题标题】:lat and long gps locations inside a rectangle矩形内的经纬度 GPS 位置
【发布时间】:2012-01-24 15:12:53
【问题描述】:

这是我的代码目标:我希望一个 android 应用程序开始触发连接到服务器并仅在手机(在汽车中使用)在道路区域内(比如 1km x 30m 的区域)时发送纬度和经度)。它一直在监听它的位置,但是一旦它进入区域就会开始发送到服务器,并且会持续发送并且只有在它离开区域时才会停止。

我收到了一个很好的答案: “创建两个位置,一个西北位置和一个东南位置,代表您的盒子。在您的 onLocationChanged 方法中,将新位置与角进行比较,例如 (l.lat > se.lat && l.lat nw.lon) 其中“l”是回调中的最新位置,“se”是边界的东南角,“nw”是边界的西北角你的bounder。如果它满足以上4个条件,那么你发送到你的服务器"

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

【问题讨论】:

标签: android gps location


【解决方案1】:
// 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);

添加广播接收器以接收您的意图。

【讨论】:

  • 谢谢纳文。那会变成一个矩形还是一个圆形?根据我读到的内容,如果我没记错的话,那将是一个圆圈。
  • 是的,半径将形成一个圆形区域。有没有更好的方法来满足矩形区域的目标?感谢 Navin 的时间。
【解决方案2】:

我正在阅读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");

        }
    }

请评论指正和建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 2023-03-15
    • 1970-01-01
    • 2013-03-13
    • 2017-08-08
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多