将相机限制在地面覆盖层上?谷歌地图 Android API v2

2023-12-07

我正在尝试向我的用户显示带有标记的地面覆盖层。我试图将视图限制为仅显示地图上的此图像。我希望用户只能将图像视为放置在地图上的地面叠加层,而无法转到周围的地图。如果他们越过边缘,手势就会被阻止。

我想要这样的东西:

enter image description here

我不想要这个:仅显示地面覆盖地图 android或这个:

enter image description here

我尝试设置我的map.setLatLngBoundsForCameraTarget()到我的图像范围,但结果类似于上一张图像......

我尝试的下一件事是设置一堆LatLng地面覆盖物周围的物体并检查curScreen.contains(customMapDetectionPoints.get(LatLng Object))查看它们是否出现在视口上。它确实有效,但我无法阻止相机越过边缘......

这是我到目前为止的测试代码:

private GroundOverlay groundOverlay;
private GoogleMap globalMap;
private final int DETECTION_POINTS_CUSTOM_MAP = 20;
private List<LatLng>  customMapDetectionPoints = new ArrayList<>();

//Fully Working as suppose to
@Override
public void onMapReady(GoogleMap map) {
           //Other Stuff...
            LatLngBounds mapBounds = groundOverlay.getBounds();
            map.setLatLngBoundsForCameraTarget(mapBounds);
            globalMap = map;

            LatLng northwest = new LatLng( mapBounds.northeast.latitude,  mapBounds.southwest.longitude);
            LatLng northeast = mapBounds.northeast;
            LatLng southeast = new LatLng( mapBounds.southwest.latitude,  mapBounds.northeast.longitude);
            LatLng southwest = mapBounds.southwest;

            //My ground overlay is rectangle so I don't need to follow a path or something like that
            setDetectionPoints(northwest, southwest);
            setDetectionPoints(northeast, southeast);
            setDetectionPoints(northwest, northeast);
            setDetectionPoints(southwest, southeast);

            map.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() {
        @Override
        public void onCameraMoveStarted(int i) {
            LatLngBounds curScreen = globalMap.getProjection().getVisibleRegion().latLngBounds;

            CameraPosition cameraPosition = globalMap.getCameraPosition();

            for (int x =0;x<customMapDetectionPoints.size();x++) {
                if (curScreen.contains(customMapDetectionPoints.get(x))) {
                    cancelMapMovement(cameraPosition);
                     Log.d("OUT", "Ground Overlay is outside viewport");
                    return;
                } else {
                    globalMap.getUiSettings().setAllGesturesEnabled(true);
                    Log.d("IN", "Ground Overlay is inside viewport");
                }
            }

        }
    });

 //Add 20 new location between two location
 //Fully Working as suppose to
 public void setDetectionPoints(LatLng fromPos, LatLng toPos) {

    double pointLatitude = fromPos.latitude;
    double pointLongitude = fromPos.longitude;
    double addingValue;
    if (fromPos.latitude == toPos.latitude) {

        addingValue = (toPos.longitude - fromPos.longitude)/DETECTION_POINTS_CUSTOM_MAP;

        for (int i = 0; i < DETECTION_POINTS_CUSTOM_MAP; i++) {
            pointLongitude += addingValue;
            LatLng pointsPos = new LatLng(pointLatitude, pointLongitude);
            customMapDetectionPoints.add(pointsPos);
        }


    } else if (fromPos.longitude == toPos.longitude) {
        addingValue = (toPos.latitude - fromPos.latitude)/DETECTION_POINTS_CUSTOM_MAP;
        for (int i = 0; i < DETECTION_POINTS_CUSTOM_MAP; i++) {

            pointLatitude += addingValue;
            LatLng pointsPos = new LatLng(pointLatitude, pointLongitude);
            customMapDetectionPoints.add(pointsPos);
        }


    }
}
 //The problem is here! 
 public void cancelMapMovement(CameraPosition camPos ) {
    //HOW CAN I STOP THE MOVEMENT OVER THE GROUND OVERLAY EDGE
    //And make sure that the user dosen't see over the edge
    globalMap.getUiSettings().setAllGesturesEnabled(false);
    globalMap.moveCamera(CameraUpdateFactory.newCameraPosition(camPos));

}

此时我认为我有两种可能的解决方案:

1-仅使用setLatLngBoundsForCameraTarget()函数并设置相机的偏移或边距。但这是否可能并且适用于我的用例?

2-用已经写的代码解决我的相机限制问题

感谢您的帮助!如果找到其他解决方案,请提出建议!

如果需要,我会提供更多信息。


None

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

将相机限制在地面覆盖层上?谷歌地图 Android API v2 的相关文章

随机推荐

  • 从其他程序集实例化 ResourceDictionary xaml

    我在包含颜色和画笔的 WPF 类库中定义了一个资源字典 称为 Brush Resources xaml
  • 事务标记为仅回滚:如何查找原因

    我在 Transactional 方法中提交事务时遇到问题 methodA methodB Transactional methodB em persist em flush log OK 当我从 method 调用 method 时 该方
  • POST 请求上的 GAE Soft 私有内存限制错误

    我正在开发一个使用 Google 应用程序引擎付费服务的应用程序 在应用程序中 我正在解析一个大型 xml 文件并尝试将数据提取到数据存储区 但是在执行此任务时 GAE 向我抛出如下错误 我还尝试通过将前端实例类从 F1 增加到 F2 来更
  • 使用 VBA 从 Excel 2010 查找并替换 Powerpoint 2010 中的文本

    我成功地在 powerpoint odule 中使用了这段代码 但是当我将其移动到我的 excel 模块中时 它给我带来了几个问题 我在 Excel 的第 1 页上嵌入了 Powerpoint 应用程序 目标是从 Excel 生成 Powe
  • 如何在 Node.js / EJS 中单击按钮时触发 Firebase POST 请求

    EDIT 实际上仍然存在一些问题 真正的问题实际上是 Firebase 安全规则 一切都在这里解决了 如何将 Node js 变量放入我的 中 问题 单击 Downvote Button 的 Upvote Button 时如何触发Fireb
  • Laravel (HasMany) 不检索值

    我有以下型号 namespace App use Illuminate Database Eloquent Model class forum category extends Model protected table forum cat
  • 通过Delphi传递SQL Server存储过程参数名称

    我是 Delphi 的新手 正在尝试找到调用 SQL Server 中的一些存储过程的方法 这是我目前正在使用的代码 它有效 FConnection TADOConnection Create nil FMetaDataSP TADOSto
  • 加密脚本中的 MySQL 流量

    我需要能够加密从 Web 服务器到数据库服务器的 MySQL 流量 我知道如何根据 my cnf 中的服务器和客户端设置将 MySQL 设置为使用 SSL 但是 这需要使用 PHP 中的 mysql connect 来完成 这可能是一个由两
  • python 字节数组中的“&”代表什么

    符号是什么意思 意思是在Python的末尾bytearray e g x w bytearray b x00 x00 x04 x12 xaa x12 x12 当将其转换为整数时 int from bytes x w little Out 1
  • 如何增加长时间运行的查询的执行超时?

    在我的应用程序中 执行一个查询需要 3 分钟 我找到默认 ExecutionTimeout 值为 110 秒 我尝试将其更改为 500 秒 但它没有解决我的问题 我在某个地方找到了这个设置
  • 如何从 PHAsset 获取原始图像和媒体类型?

    My GMImagePickerController 返回从照片应用程序中选择的图像的列表 代码如下 void assetsPickerController GMImagePickerController picker didFinishP
  • Pyspark:在 UDF 中传递多列

    我正在编写一个用户定义函数 它将获取数据框中除第一列之外的所有列并进行求和 或任何其他操作 现在 数据框有时可以有 3 列 4 列或更多 它会有所不同 我知道我可以硬编码 4 个列名称作为 UDF 中的传递 但在这种情况下它会有所不同 所以
  • Rails 3.0.3 - Oracle_enhanced 不起作用

    我一直在使用 Ruby 1 8 Rails 2 3 5 和 oracle enhanced 效果很好 现在我最近在另一个文件夹中安装了 Ruby 1 9 2 和 Rails 3 0 3 但无法让它工作 当我创建一个简单的应用程序并访问它时
  • WPF DataGrid 单列中的不同编辑控件

    我正在开发一个 WPF 4 0 应用程序 我需要创建一个网格 其中包含一个带有文本框或下拉列表的列 具体取决于行 例子 Name Value Help PROP1A textbox Description of prop1a Prop2A
  • Android Studio 0.2.6 和 ZBar 项目设置

    我使用的是最新的Android Studio 0 2 6和最新的ZBar Android SDK 到目前为止我所做的 创建了一个名为 QRTest 的全新项目 在我的项目中创建了一个名为 libs 的文件夹 将Zbar libs目录的内容放
  • 如何在不看到权限屏幕的情况下登录 OneDrive(首次登录后)

    我刚刚开始使用 OneDrive API 及其附带的示例程序 OneDriveApiBrowser 正如预期的那样 我第一次登录时 使用 登录到 MSA 系统要求我提供凭据 我的 2 因素代码 最后出现一个权限屏幕 询问我是否批准应用程序想
  • iOS - Google AdMob v6.12.0 - “idfa 类丢失,不会收集 idfa”

    我在 iOS 8 目标 iOS 7 中的一个项目中使用 Google AdMob DFP 和中介插页式广告 尽管我已经包含了我认为 AdMob v6 12 0 所需的所有框架 根据 AdMob 网站 但我在 Xcode 中看到以下警告消息
  • 构建配置特定资源(调试与发布)

    有谁知道一种聪明的方法 最好使用 Eclipse ADT 工作流程 根据项目是调试还是发布构建 即在 Eclipse 中应用程序是运行还是导出 将特定资源应用于项目 我们经常遇到的常见用例是 API 密钥 如地图 最好建立一个项目 专门为所
  • 将多行分组并连接为一行

    我想将所有 文本 行 连接 成一行并得到一行作为结果 这可能吗 我使用 MSSQL Server 2005 使用 FOR XML 路径 SELECT Text AS text FROM table FOR XML PATH 另一种选择 使用
  • 将相机限制在地面覆盖层上?谷歌地图 Android API v2

    我正在尝试向我的用户显示带有标记的地面覆盖层 我试图将视图限制为仅显示地图上的此图像 我希望用户只能将图像视为放置在地图上的地面叠加层 而无法转到周围的地图 如果他们越过边缘 手势就会被阻止 我想要这样的东西 我不想要这个 仅显示地面覆盖地