如何在 Google 地图中跟踪用户全天的位置?

2023-12-10

您如何跟踪用户一整天的位置,就像 Google 地图中的时间线一样?

我有两个想法

  1. 例如,如果我有 200LatLng每天的价值,我如何通过所有这些LatLng值到谷歌地图作为点?我得到了一个谷歌文档参考因为我最多只能跟踪 10 个位置点。

  2. 是否有任何 Google API 可以全天跟踪用户并为其制定时间表?

    enter image description here


如果你有 200 个 LatLng 点,你总是可以将它们绘制为polyline:

...
final List<LatLng> polylinePoints = new ArrayList<>();
polylinePoints.add(new LatLng(<Point1_Lat>, <Point1_Lng>));
polylinePoints.add(new LatLng(<Point2_Lat>, <Point2_Lng>));
...

final Polyline polyline = mGoogleMap.addPolyline(new PolylineOptions()
        .addAll(polylinePoints)
        .color(Color.BLUE)
        .width(20));

并且,如果需要,将它们固定在道路上捕捉到道路部分Google 地图道路 API:

...
List<LatLng> snappedPoints = new ArrayList<>();
new GetSnappedPointsAsyncTask().execute(polylinePoints, null, snappedPoints);
...

private class GetSnappedPointsAsyncTask extends AsyncTask<List<LatLng>, Void, List<LatLng>> {

    protected void onPreExecute() {
        super.onPreExecute();
    }

    protected List<LatLng> doInBackground(List<LatLng>... params) {

        List<LatLng> snappedPoints = new ArrayList<>();

        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try {
            URL url = new URL(buildRequestUrl(params[0]));
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();

            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));
            StringBuilder jsonStringBuilder = new StringBuilder();

            StringBuffer buffer = new StringBuffer();
            String line = "";

            while ((line = reader.readLine()) != null) {
                buffer.append(line+"\n");
                jsonStringBuilder.append(line);
                jsonStringBuilder.append("\n");
            }

            JSONObject jsonObject = new JSONObject(jsonStringBuilder.toString());
            JSONArray snappedPointsArr = jsonObject.getJSONArray("snappedPoints");

            for (int i = 0; i < snappedPointsArr.length(); i++) {
                JSONObject snappedPointLocation = ((JSONObject) (snappedPointsArr.get(i))).getJSONObject("location");
                double lattitude = snappedPointLocation.getDouble("latitude");
                double longitude = snappedPointLocation.getDouble("longitude");
                snappedPoints.add(new LatLng(lattitude, longitude));
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return snappedPoints;
    }

    @Override
    protected void onPostExecute(List<LatLng> result) {
        super.onPostExecute(result);

        PolylineOptions polyLineOptions = new PolylineOptions();
        polyLineOptions.addAll(result);
        polyLineOptions.width(5);
        polyLineOptions.color(Color.RED);
        mGoogleMap.addPolyline(polyLineOptions);

        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(result.get(0));
        builder.include(result.get(result.size()-1));
        LatLngBounds bounds = builder.build();
        mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10));

    }
}


private String buildRequestUrl(List<LatLng> trackPoints) {
    StringBuilder url = new StringBuilder();
    url.append("https://roads.googleapis.com/v1/snapToRoads?path=");

    for (LatLng trackPoint : trackPoints) {
        url.append(String.format("%8.5f", trackPoint.latitude));
        url.append(",");
        url.append(String.format("%8.5f", trackPoint.longitude));
        url.append("|");
    }
    url.delete(url.length() - 1, url.length());
    url.append("&interpolate=true");
    url.append(String.format("&key=%s", <your_Google_Maps_API_key>);

    return url.toString();
}

如果相邻点之间的距离太大,可以使用航点部分路线API获取这些点之间的方向并使用航路点请求的结果绘制折线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Google 地图中跟踪用户全天的位置? 的相关文章

  • APK META-INF/library_release.kotlin_module 中复制的重复文件

    我最近通过 JitPack 添加了两个 Android 库 但出现以下错误 Duplicate files copied in APK META INF library release kotlin module 我已经清除了缓存 并尝试使
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • 如何在 Android 中创建刮刮卡?

    我需要为我在学校的期末项目创建一个 刮刮卡 应用程序 但找不到如何实现刮刮事件的方法 如何创建背景图像并在其上放置灰色矩形 所以当我刮刮这些矩形时我会看到他们下面的图片 实现必须在 Android 中 因为我还不知道如何在 Objectiv
  • 如何从静态快捷方式启动活动的现有实例

    我的应用程序中有一个活动 MainActivity 并且有一个静态快捷方式 指向 TempActivity 由于静态快捷方式将始终设置 FLAG ACTIVITY NEW TASK 和 FLAG ACTIVITY CLEAR TASK 因此
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • 将 ArrayList 保存在捆绑包 savingInstanceState 中

    ArrayList 是在类级别定义的 这些是我保存的实例方法 Override protected void onSaveInstanceState Bundle outState super onSaveInstanceState out
  • 如何知道点击的widget id?

    我已经实施了一个widget与ImageButton and a TextView That ImageButton启动一个activity当它被点击时 这activity使用用户在活动上写入的内容更新小部件文本EditText 现在的问题
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • Android 依赖项:apklib 与 aar 文件

    据我了解 apklib包含代码 共享资源Maven aar文件由以下人员分发Gradle The aar与 apklib 的主要区别在于 类被编译并包含在 aar 根目录下的classes jar 中 然而apklib不能包含已编译的类文件
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • Android框架结构与MFC/Win32结构的比较?

    我为 Android 和 Windows 进行开发 使用 MFC 有时使用 win32 昨天我随意比较了这两个框架 它们显然非常非常不同 因此 Windows 开发与 Android 开发有很大不同 我想知道人们认为 Android 这样的
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • Android 将菜单项在操作栏中向左对齐

    我的应用程序中有一个操作栏 它显示我定义的菜单项res menu activity main xml 我的菜单项在操作栏上向右对齐 我希望它们左对齐 我为此找到的唯一解决方案使用了自定义操作栏 如下所示 将菜单项放置在 Honeycomb
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 使用 eclipse 配置mockito 时出现问题。给出错误:java.lang.verifyError

    当我将我的mockito库添加到类路径中 并使用一个简单的mockito示例进行测试时 我尝试使用模拟对象为函数add返回错误的值 我得到java lang verifyerror 以下是用于测试的代码 后面是 logcat Test pu
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct

随机推荐

  • 滚动时粘性导航栏?

    我目前正在为自己构建一个网站 我发现在多个网站上都有这种非常棒的效果 其中导航栏位于图像下方 但当您滚动经过它时 它会粘在顶部 Example 我怎样才能实现这个目标 另外 如何才能达到类似的效果该网站具有类似的导航栏样式 这是 Matth
  • 为什么设置断点可以让我的代码工作?

    我很新C所以我确信我做错了很多事情 但这让我感到困惑 我的代码应该从用户那里获取标题 并在路由目录中创建一个具有该名称的文件夹 仅当我在上面设置断点时它才有效makeFolder 执行 由于某种原因 在我点击之前稍作休息continue让它
  • Perl + POO 和 Mysql 错误

    我刚刚学了 poo 我开始使用 perl 实现了这一点 但我没有得到预期的输出 mysql 有问题吗 还是坏代码 另外 相同的查询在控制台和工作台上运行 并且此模块添加 chmod x module pm usr bin perl use
  • 如何从外部链接导航到 Bootstrap 4 的特定选项卡

    我想从外部页面链接打开 bootstrap 4 的特定选项卡 第 1 页 nav html 我想从这一页转到第二页 a href index html tab 1 tab 1 a a href index html tab 2 tab 2
  • 调整 QWidget 大小时忽略最小尺寸

    有没有办法让 QWidget 及其任何子类 完全忽略其最小大小 我想要的是 QPushButton 在尺寸太小时时被切断 而不是阻止窗口调整大小 默认行为 您可以使用 button setSizePolicy QSizePolicy Ign
  • 使用 selenium python 使用复合类解析 HTML 内容

    我的 GUI 中有一个显示按钮 用于显示连接状态 带有绿色勾号的按钮表示已建立连接 带有红色叉号的按钮表示没有连接 我必须使用我的代码检查状态 我正在解析该特定标题栏类名 容器流体 的内容 由此 我正在解析该显示按钮的显式内容 elem d
  • 如何从 SQLite 数据库中检索用户位置特定范围内的一组位置

    我有一些位置坐标存储在我的SQLite数据库表 我想检索距用户当前位置 1 公里范围内的位置 现在我正在从数据库中获取所有值 并编写了一个方法来检索我范围内的值 这给我带来了巨大的开销 因为我的表可能包含超过 1000 个坐标 所以我正在寻
  • EF 6:另一个复杂类型中的嵌套复杂类型

    假设我有一个名为 car 的实体 我使用复杂类型来定义 引擎 部分 TableName T CAR public sealed class Car IEngine public EngineType EngineType get set C
  • 使用 Angular js 进行应用程序设计

    一直致力于使用 Angular JS 构建一个巨大的应用程序 在同一主题上看到了太多关于如何最好地设计应用程序的问题 但仍然感到困惑 一个基本的应用程序通常有一个 1 登录页面 索引页面 2 主页 带页眉和页脚 身体是partial com
  • 将两个数据框导出为一个 Excel 文件,并在指定位置的 pandas 中包含两张表

    我有两个数据框 如下所示 df1 Date t factor plan plan score 0 2020 02 01 5 NaN 0 1 2020 02 02 23 NaN 0 2 2020 02 03 14 start 0 3 2020
  • Javascript如何获取所选项目的ID

    我正在使用 Web2Py 将值列表发送到我的视图 我的 HTML 是这样的
  • Excel VBA 计算另一张工作表中的公式

    已解决 问题出在我的公式中 我使用 INDIRECT 引用单元格 当工作表不同时 该单元格不起作用 查看答案 我在一张纸上有一个公式 我想要做的是使用另一张纸上的公式 使用 eval 来评估该公式 然而 结果并不如预期 该公式似乎使用工作表
  • 使用 Chrome 查找 JavaScript 内存泄漏

    我创建了一个非常简单的测试用例 它创建一个 Backbone 视图 将处理程序附加到事件 并实例化一个用户定义的类 我相信 通过单击此示例中的 删除 按钮 所有内容都会被清理 并且不会出现内存泄漏 代码的 jsfiddle 在这里 http
  • 使用单例进行单元测试

    我已经使用 Visual Studio Team Edition 测试框架准备了一些自动测试 我希望其中一项测试按照程序中完成的正常方式连接到数据库 string r providerName ConfigurationManager Co
  • Delphi 字典和排序数据

    我的代码是 procedure TfrmSettings btnFillDictClick Sender TObject var Dict TDictionary
  • 在 Node.js 中复制 Java 密码哈希代码 (PBKDF2WithHmacSHA1)

    编辑 我的问题已更新 请查看这篇文章的底部以了解最新一期 我把剩下的留给那些想阅读整个故事的人 我一直致力于将一个小型 Java 应用程序转换为 Node js 大部分进展顺利 我必须查找大量 Java 函数来弄清楚它们的作用以及如何在 N
  • 获取mysql查询中一行的排名

    我使用此查询根据每个名字获得的票数为他们分配排名 但它返回错误 1248 每个派生表必须有自己的别名 这是我的代码 SELECT rownum rownum 1 AS rank name vote FROM table SELECT row
  • getJSON 不支持 async:false

    我下面有这段代码 它应该返回调用的结果 我需要同步执行此操作 以便我知道一切都很好 但它似乎不起作用 我究竟做错了什么 jQuery library http code jquery com jquery 1 9 1 min js func
  • Apache Beam -> BigQuery - 用于重复数据删除的 insertId 不起作用

    我使用 apache beam 和 google dataflow runner 将数据从 kafka 流式传输到 BigQuery 我想利用 insertId 进行重复数据删除 我在谷歌文档中找到了描述 但即使插入是在几秒钟之内发生的 我
  • 如何在 Google 地图中跟踪用户全天的位置?

    您如何跟踪用户一整天的位置 就像 Google 地图中的时间线一样 我有两个想法 例如 如果我有 200LatLng每天的价值 我如何通过所有这些LatLng值到谷歌地图作为点 我得到了一个谷歌文档参考因为我最多只能跟踪 10 个位置点 是