【问题标题】:Show all markers placed at 5km distance from route显示距离路线 5 公里处的所有标记
【发布时间】:2019-11-17 23:01:35
【问题描述】:

在我的应用程序中,我显示了点 A 到点 B 之间的路线。

final PolylineOptions polyOptions = new PolylineOptions();
polyOptions.color(ContextCompat.getColor(mContext, R.color.accent_color));
polyOptions.width(20);
polyOptions.addAll(currentRoute.getPoints());

在 currentRoute.getPoints 中,我拥有所有用于在地图上绘制路线的 LatLng。我将它们之间距离为 5 公里的所有点提取到一个名为 points 的 ListArray 中。

现在我想用我的数据库中的位置填充这条路线。我需要显示我的数据库中所有在路线上或在 5 公里范围内(路线两侧)附近的位置。

为此,我需要转到数据库并过滤记录以查找 5 公里范围内的所有位置。我不知道如何实现 location_latitude 和 location_longitude 的 WHERE 请求,以获取 5 公里范围内的所有记录到参考位置。

我当前的 SQL 是:

query = "SELECT location_id, location_name, " +
                "location_address, location_image, " +
                "location_latitude, location_longitude, " +
                "c.category_marker, l.category_id " +
                "FROM tbl_categories c, tbl_locations l " +
                "WHERE l.category_id " + " = " + categ + " AND l.category_id = c.category_id AND " +
                "location_county " + " =  \"" + county + "\"";

有什么建议可以更快地过滤我的数据库(sql 查询)以查找路线附近的所有位置吗?

【问题讨论】:

  • 关于您的数据库的很多(全部?)信息都丢失了。有人会如何建议一个过滤器,它会比什么更快,更快?
  • 在 currentRoute.getPoints 中,我拥有所有用于在地图上绘制路线的 LatLng。我提取了所有相距 5 公里的点。然后我需要去数据库并过滤记录以查找 5 公里范围内的所有位置。我不知道如何实现 WHERE 请求以获取 5 公里范围内的所有记录到参考位置。
  • 计算距离,比较一下,见dbfiddle

标签: sql database android-studio filter google-maps-markers


【解决方案1】:

我走了这条路:

 where_query = new StringBuilder();
        for (i = 0; i <= points.size()-1 ; i ++) {
            if (i == 0) {
                where_query.append(" AND ((location_latitude between ").append(points.get(i).latitude - 0.1).append(" AND ").append(points.get(i).latitude + 0.1).append(" AND location_longitude between ").append(points.get(i).longitude - 0.1).append(" AND ").append(points.get(i).longitude + 0.1).append(")");
            } else {
                if (i < points.size() - 1) {
                    where_query.append(" OR (location_latitude between ").append(points.get(i).latitude - 0.1).append(" AND ").append(points.get(i).latitude + 0.1).append(" AND location_longitude between ").append(points.get(i).longitude - 0.1).append(" AND ").append(points.get(i).longitude + 0.1).append(")");
                } else {
                    where_query.append(" OR (location_latitude between ").append(points.get(i).latitude - 0.1).append(" AND ").append(points.get(i).latitude + 0.1).append(" AND location_longitude between ").append(points.get(i).longitude - 0.1).append(" AND ").append(points.get(i).longitude + 0.1).append("))");
                }
            }
        }

等待建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多