获取 CLPlacemark 的正确缩放区域

2024-02-28

我在用着MKLocalSearch搜索某些地方,例如城市或城市中的街道,并将其显示在MKMapView

我像这样显示地标

let loc = placemark.location! //CLLocation of CLPlacemark
var mapRegion = MKCoordinateRegion()
mapRegion.center.longitude = loc.coordinate.longitude
mapRegion.center.latitude = loc.coordinate.latitude
mapRegion.span.latitudeDelta = 0.03 // I choose 0.03 by trying
mapRegion.span.longitudeDelta = 0.03
mapView.setRegion(mapRegion, animated: true)

当地标是城市时,这种方法效果很好,因为它以合理的缩放级别显示更大的区域。但是当我想显示一条特定的街道(即CLPlacemarks位置)在城市里太远了。

现在我正在寻找一种方法来根据您的“详细信息”计算正确的跨度CLPlacemark(请注意,您不知道该类型CLPlacemark预付)

有没有办法做到这一点?


让我完整地解释一下。

首先,您需要检索正确的CLPlacemark对象。

如果您想搜索CLPlacemarks 在某些特定的CLLocationCoordinate2D,然后使用这种方法:

CLLocationCoordinate2D theCoordinate = CLLocationCoordinate2DMake(37.382640, -122.151780);
CLGeocoder *theGeocoder = [CLGeocoder new];
[theGeocoder reverseGeocodeLocation:[[CLLocation alloc] initWithLatitude:theCoordinate.latitude longitude:theCoordinate.longitude]
                  completionHandler:^(NSArray *placemarks, NSError *error)
 {
      CLPlacemark *thePlacemark = placemarks.firstObject;
 }];

现在你已经得到了一些适当的CLPlacemark,你可以使用它的.region财产。请注意,文档说.region is CLRegion,但实际上是CLCircularRegion.

CLCircularRegion *theRegion = (id)thePlacemark.region;

然而,MKMapView不适用于CLCircularRegion,同时它与MKMapRect。您可以使用以下解决方案:

如何将 CLCircularRegion 转换为 MKMapRect https://stackoverflow.com/a/27284833/5165668

MKMapRect theMapRect = [self rectForCLRegion:theRegion];

现在我们得到了我们的MKMapRect,我们可以将它传递给我们的MKMapView像这样:

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect]
                     animated:YES];

或者,如果您想进一步调整屏幕偏移,您可以使用:

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect]
                  edgePadding:UIEdgeInsetsMake(50, 50, 50, 50)
                     animated:YES];

结论:

代码似乎工作正常,并使用通过提供的信息自动调整跨度CLCircularRegion .radius财产。

下图显示了如果通过(37.382640,-122.151780)的结果

为了比较,这是如果你通过(37.382640,-12.151780)的图片

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

获取 CLPlacemark 的正确缩放区域 的相关文章

随机推荐

  • 图像缩放类型在颤动上居中裁剪?

    我正在尝试做一些类似于 android ImageView 的 centerCrop 属性的事情 设置imageview的高度 并使其裁剪并对齐到中心 就像centerCrop在android上的工作一样 Widget bindItem B
  • C 中的暂定定义和链接

    考虑由两个文件组成的 C 程序 f1 c int x f2 c int x 2 我对第6 9 2段的阅读C99标准 http www open std org JTC1 SC22 wg14 www docs n1124 pdf是这个计划应该
  • 是什么导致不可变对象在没有安全发布技术的情况下被发布?

    即使不诉诸安全发布习惯用法 也可以发布不可变对象 这是什么意思 我读过了Java 并发实践 第3章 共享对象 但仍然无法理解该声明 不可变对象可以通过任何机制发布 V S 应该安全地发布有效的不可变对象 编辑 我经历过SO类似的问题 htt
  • 在 Java 中,/(即正斜杠)在 $Lambda$15/0x00000008000a9440@32e6e9c3 等对象引用中意味着什么?

    在 JShell 中 如果我这样做 interface Foo String foo Foo gt hi I get created interface Foo 2 gt Lambda 15 0x00000008000a9440 32e6e
  • 如何在 Java 中使用 Blender 模型?

    真的只是一个一般性问题吗 假设我正在制作一款游戏 并在 Blender 中制作了一个角色模型 我将如何在 Java 中使用这个模型 我会以某种方式导入它吗 Thanks 通常 在搅拌机中制作模型时 您可以以某种格式导出模型 以便稍后将其导入
  • Django 重写模型 Clean() 与 Save()

    保存模型时 我需要执行一些操作 尤其是从管理员那里执行 我将几个字段大写并检查以确保其中一个字段或另一个字段已填充 我还创建了场蛞蝓 现在 这些功能被分为覆盖清理和保存功能 它现在可以使用 但我很好奇何时使用它们 我浏览了文档 但找不到具体
  • 如何从 .js 文件中的 jQuery 函数访问 PHP 会话变量?

    如何从 js 文件中的 jQuery 函数访问 PHP 会话变量 在此代码中 我想从会话变量中获取 值 function progressbar progressbar value 37 您可以通过 PHP 生成 javascript 文件
  • 自定义 UITableView 动态单元格高度

    我搜索了无数博客和文章 了解如何确定自定义 UITableViewCell 的动态高度及其详细文本 我真的很难找到任何关于这方面的好的文档 我需要做的是让单元格根据里面的文本生长 但高度永远不要低于 70 我已经在 StackOverflo
  • c++ 传递数组而不是可变长度参数列表

    所以我有一个采用可变长度参数列表的函数 例如 int avg int count stuff 我可以用它来称呼它avg 4 2 3 9 4 而且效果很好 它需要维护这个功能 有没有办法让我也用数组来调用它而不是列出变量 例如 avg 4 m
  • Django 模型中没有此类列错误

    我正在向 Django 模型添加一个新字段 但无论新字段是什么 当我尝试运行 makemigrations 时都会收到 no such column 错误 File Users hugokitano canopy lib python2 7
  • 找到二维直方图的峰值

    我做了一些二维直方图 x y 数据 我得到一张像这样的图像 我想要一种方法来获得 x y 存储最大值的点的坐标H 例如 在上图的情况下 它将是具有近似坐标的两个点 1090 1040 and 1110 1090 这是我的代码 import
  • 剃刀 - 单选按钮的绑定问题

    我正在努力为单选按钮绑定 ans 我正在做一个小项目 我有两个模型问题和答案 我想要实现的目的是提取问题列表并根据设置用户将有多种选择或在文本框中输入答案 使用单选按钮 我似乎无法绑定 ans 它得到一个空对象 有人可以指出我正确的方向吗
  • Azure DevOps 添加自定义选项卡以生成摘要

    我想将自定义选项卡添加到我的构建摘要中 在这些选项卡中我想显示结果PowerShell 测试代码覆盖率任务 结果大约是50 200 htm生成的报告报告生成器 https github com danielpalme ReportGener
  • 在 .NET 中表示不可变列表的最佳方式是什么?

    我最近开始使用 F 进行 实际工作 并重新发现了不可变数据结构的美妙之处 例如 F 中的可区分联合和记录 我还发现它们在 C 中使用起来非常简单 特别是因为它们不需要对 F 运行时有任何直接依赖 然而 当涉及到在这些结构中表示列表时 我还没
  • 正则表达式替换 sublime 中替换中包含部分匹配的值?

    我想出了这个正则表达式来查找所有以 并包含 下划线 w w 我基本上是在寻找变量 比如 var foo etc 如何使用正则表达式组替换内容 例如 如何删除下划线并使下一个字母大写 例如 varFoo 替换表达式为 1 u 2 1 2是捕获
  • 如何使用 Raphael.JS 根据鼠标移动绘制一条线

    我试图随着鼠标在纸上移动画一条线 我只知道如何使用画线path 但想知道是否有人有想法来画一条线mousemove 请帮我解决这个问题 这是使用 raphael 的此类示例的链接 与拉斐尔一起绘画 图片来源 Jonas http irunm
  • 本地域与本地主机的性能

    TCP 连接之间是否存在性能差异 本地主机 127 0 0 1 解析到本地计算机的域 或者更具体地说 后面的连接是通过环回设备还是通过实际网络 我问的原因是我正在考虑更改许多 PHP 应用程序中的数据库设置 以便它们使用完整的域而不是本地主
  • 如何在telnet客户端实现tab补全

    我有一个为 telnet 客户端打开连接的服务器 例如 例如 我运行服务器 server在另一个窗口中 我将 telnet 客户端作为 telnet localhost 9999 运行 当我运行 telnet 客户端时 我将收到新的 CLI
  • 转到 mod 供应商而不更新到最新版本

    我试图弄清楚是否可以在没有 go 工具更新我的 go mod 文件的情况下运行 go modvendor 我特别go get package subpackage commit并提交我的go mod使用正确的版本 然后我跑go mod ve
  • 获取 CLPlacemark 的正确缩放区域

    我在用着MKLocalSearch搜索某些地方 例如城市或城市中的街道 并将其显示在MKMapView 我像这样显示地标 let loc placemark location CLLocation of CLPlacemark var ma