根据服务器数据(纬度和经度)移动MKMapView中的注释

2023-12-13

在我的应用程序中,我通过以特定时间间隔从服务器获取其他人的位置(纬度和经度)来显示其他人的位置。

获取后,我必须删除所有注释并根据服务器数据删除新注释。

但它看起来效率很低,因为当我们先前存在同一用户的注释时,即使我删除并添加相同的用户注释。

所以我想知道我们可以将 MKAnnotation 从一个坐标移动到另一个坐标吗?我尝试过“setCooperative”属性,但无法成功实现它。

而且它不是“触摸和拖动”类型。当应用程序从服务器获取数据(纬度和经度)时,注释会自行移动。


要更改注释的坐标而不删除、重新创建并再次添加它,请创建一个注释类,其中coordinate属性是可设置的。执行此操作的一个简单方法是定义coordinate像这样的属性:

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

或者,您也可以使用内置的类,而不是定义自己的类MKPointAnnotation具有可设置的类coordinate.

您最初像往常一样创建并添加注释。例如:

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = someCoordinate;
pa.title = @"User1";
[mapView addAnnotation:pa];
[pa release];

稍后,当您从服务器获得更新并且“User1”的坐标发生更改时,您可以在地图视图的annotations数组或将注释的引用存储在其他结构中,允许使用键(如NSMutableDictionary.

找到注释后,只需设置注释的coordinate属性更改为新值,地图视图将自动将注释的视图移动到新位置。

此示例搜索annotations array:

for (id<MKAnnotation> ann in mapView.annotations)
{
    if ([ann.title isEqualToString:@"User1"])
    {
        ann.coordinate = theNewCoordinate;
        break;
    }
}

如果您想使用注释类的不同自定义属性(例如某个名为 userIdNumber 的 int)来查找注释:

for (id<MKAnnotation> ann in mapView.annotations)
{
    if ([ann isKindOfClass:[YourAnnotationClass class]])
    {
        YourAnnotationClass *yacAnn = (YourAnnotationClass *)ann;
        if (yacAnn.userIdNumber == user1Id)
        {
            yacAnn.coordinate = theNewCoordinate;
            break;
        }
    }
}

上面只是一个如何改变坐标的例子。如果您有大量坐标不断变化的注释,我不建议一次搜索它们。相反,您可以将引用存储在字典中,并使用键值快速查找它们。

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

根据服务器数据(纬度和经度)移动MKMapView中的注释 的相关文章

随机推荐

  • 如何为 Tomcat servlet 配置 user.dir?

    在我的 Tomcat servlet 中 我使用一个 jar 库来查找某些 properties文件在System getProperty user dir 问题是 当我在不同的服务器上部署 servlet 时 user dir 是不同的
  • 为什么 gnu 链接器的“--oformat binary”选项将“.data”段放置在 0x0200000

    我一直在为 i386 实模式编写一些 独立 代码 并在 PXE 网络引导我的代码时遇到一些奇怪的错误 PXE E79 NBP is too big to fit in free base memory PXE M0F Exiting Int
  • 如何理解这个 dmesg 错误信息?

    我编写了这个简单的模块来处理设备并调用其一些电源管理方法 例如 suspend and resume 在初始化时 模块简单地查找特定设备并尝试调用其方法 include
  • 如何实现条件字符串格式化? [复制]

    这个问题在这里已经有答案了 我一直在用 Python 开发一个基于文本的游戏 我遇到过一个实例 我想根据一组条件以不同的方式格式化字符串 具体来说 我想显示描述房间中物品的文本 当且仅当相关项目对象位于房间对象的项目列表中时 我希望在房间的
  • 流星 $pull 从数组中删除

    我的数据库中有以下对象 id fTgR2YtHiZBzzqF6J following user id S4dLHRJiuHoyAp26q fb id 100006681067911 name Helen Amffhajfgiaa Laube
  • 我需要使用 FileStream.Flush() 或 FileStream.Flush(true) 吗?

    在我的程序中 我编写一个文件 然后调用读取该文件的外部程序 我需要Flush true 确保数据完全写入磁盘 或者Flush 充足的 class ExampleClass IDisposable private FileStream str
  • 检查启动条件

    我想测试 ASP Net Core 2 0 应用程序启动时的某些条件 例如 如果我的数据库服务器或其他服务器运行正常 这对于仅在请求后才会实例化的事物 例如我的存储库 特别有用 目前我必须手动执行此请求 但我希望我的应用程序尽早失败 建议在
  • GotW #101“解决方案”真的能解决任何问题吗?

    首先阅读 Herb 的 Sutters GotW 帖子 内容涉及 C 11 中的 pimpl GotW 100 编译防火墙 难度 6 10 GotW 101 编译防火墙 第 2 部分 难度 8 10 我在理解 GotW 101 中提出的解决
  • 有没有办法在 JavaScript 对象文字中使用变量键?

    我有这样的代码 var key anything var object key key attribute 我想知道是否有办法替代key与 任何东西 like var object anything key attribute 在 ES6
  • 使用 pygame.mixer.music.get_endevent()

    我想要一个tkinter声音效果完成后不显示任何内容的标签 我一直在研究如何创建 初始化 捕捉音乐事件的结束 但没有运气 def play btn if mixer music get busy mixer music fadeout 10
  • Pandas 向量化函数 cumsum 与 numpy

    回答问题的同时Pandas Dataframe 的向量化计算 我注意到一个关于性能的有趣问题 我的印象是诸如df min df mean df cumsum 等被矢量化 然而 我发现两者之间的性能存在巨大差异df cumsum and a
  • Python 3 mySQL.connector 冻结导入库

    我是 Python 3 的新手 仍在学习 但我需要帮助 脚本的第一部分是 import mysql connector this is failing as a py but works in the shell cnx mysql con
  • 按运输方式在感谢页面上添加自定义消息

    仅当订单使用免费送货时 我才尝试向已收到订单 谢谢 页面添加一条消息 该消息可以替换标准的 谢谢 消息 也可以作为补充 这是我正在使用的代码 它基于这里的答案 根据 WooCommerce 中的运输方式自定义订单接收页面 add messa
  • 如何在java中改变new Date()的值

    在我的应用程序中 当测试人员测试应用程序时 需要经常更改日期和时间 目前 我们必须使用系统命令 date s 来更改系统时间 但这会导致服务器上的其他应用程序也受到影响 我只想更改此应用程序的 Date 但我不想想要改变应用程序本身 因为有
  • Inno Setup 获取目录大小(包括子目录)

    我正在尝试编写一个返回目录大小的函数 我编写了以下代码 但它没有返回正确的大小 例如 当我在 pf 它返回 174 字节的目录 这显然是错误的 因为该目录的大小有多个千兆字节 这是我的代码 function GetDirSize DirNa
  • 如何从Python中的请求获取响应SSL证书?

    尝试从响应中获取 SSL 证书requests 有什么好的方法可以做到这一点 requests故意包装这样的低级内容 通常 您唯一想做的就是验证证书是否有效 为此 只需通过verify True 如果您想使用非标准 cacert 包 您也可
  • 根在函数中不起作用[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想在函数中使用matlab函数根 但这不起作用 我不知道如何解决这个问题 这是函数 f
  • 在 PyCharm 中使用 Matplotlib 时如何修复“无法找到或加载 Qt 平台插件窗口”

    在 PyCharm 中使用 matplotlib 时收到错误 无法找到或加载 Qt 平台插件窗口 我该如何解决这个问题 我在 Anaconda3 4 2 0 和 4 3 0 1 64 位 上遇到了同样的问题 当我尝试运行一个使用 matpl
  • 我想捕获一个异常并将其捆绑在我自己的异常中并向上抛出

    我有一个管理资源的类 它需要一个可以从路径检索资源的 Loader 类 Loader 是一个抽象基类 因此任何人都可以创建新的加载器 如果请求的资源不在缓存中 则资源管理器将从加载器请求该资源 如果加载器失败 资源管理器会抛出一个我创建的名
  • 根据服务器数据(纬度和经度)移动MKMapView中的注释

    在我的应用程序中 我通过以特定时间间隔从服务器获取其他人的位置 纬度和经度 来显示其他人的位置 获取后 我必须删除所有注释并根据服务器数据删除新注释 但它看起来效率很低 因为当我们先前存在同一用户的注释时 即使我删除并添加相同的用户注释 所