热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

了解CLLocation是代表陆地还是海洋

如何解决《了解CLLocation是代表陆地还是海洋》经验,为你挑选了2个好方法。

我正在尝试构建一个API,以便了解是否CLLocation代表土地.我需要这个离线工作,因为我希望我的大多数用户都没有连接.我使用MapBox作为tile服务器,但这仍然是一个MapKit问题,因为我没有使用MapBox SDK.

我已经尝试了几种方法来确定给定坐标是代表陆地还是海洋位置:

离线数据库的坐标大致构成了世界的海岸线.确定给定点是否在轮廓内部或外部仍然是一个问题.

png tile资源的颜色分析(必须有更好的方法!还需要大量的离线数据才能成为一种有效的方法)

另外(在上面的处理之后)是否有一种有效的方法来决定给定一个瓦片坐标(x,y,z)是否是陆地/海洋/海岸瓦片?

如果有人一直在努力解决这个问题,我会在此提出一些建议.



1> 小智..:

别担心,似乎Apple已经考虑过这个问题了!

如果你看一下CLGeocoder类(CoreLocation),有一个reverseGeocodeLocation:completionHandler:方法.

在完成处理程序中,您可以检索CLPlacemark对象数组

CLPlacemark 有两个有趣的属性:

[placemark inlandWater]

对于位于内陆水域的坐标,此属性包含该水体的名称 - 湖泊,溪流,河流或其他水道的名称.

[placemark ocean]

坐落在海洋上的坐标,此属性包含海洋的名称.

因此,您只需对您的位置进行反向地理编码,并检查是否ocean在结果CLPlacemark对象上设置了属性.



2> Benjohn..:

我花了一段时间寻找一个强大的算法在球体上进行时区查找,甚至没有找到好的伪代码,更不用说c/c ++ 我完全满意.我要经历我发现的事情.我将完成可用于将这些放在一起的资源.

这很容易......在飞机上

该问题被称为"多边形点".

经常使用且简单的POP算法是"Ray Casting".2D平面上的POP依赖于无穷远处的点.在飞机上这很容易.无穷远处有无数个点.挑选任何一个!但球体上没有这样的观点.

如果在任何给定查询多边形的内部或外部都有已知点,则可以使用此方法.根据您的使用情况,这不是一个繁重的要求:您可以轻松地选择海中的任何一个点,这将在所有陆地多边形之外.

在"卷数" POP算法也失败了(据我可以看到),因为在球上,你可以接近或者在两个方向上的任何边缘.

算法

我想要一种没有辅助点而没有启发式(用于从边缘数据生成辅助点)的方法.如果我是诚实的,我想要这个,因为我确信它应该是可能的,不,因为我真的需要它.

对于您的用例,您可以使用通常的光线投射算法和已知在海洋中的单个点,因此您不需要依赖启发式算法,尽管它们可能仍然可以很好地工作.

我提出的方法是这样的......

您需要自己遍历多边形.对于每个多边形......

通过查询点和多边形的至少一条找到一个很棒的圆(两个角之间的中点就可以了).

将大圆与多边形的边相交.

当您按顺序行走其边缘时,多边形的内部就在您的右侧(如果您愿意,则向左移动).这为每个交叉点提供了足够的信息,以了解哪一侧是内部或外部.

从最近的交叉点,您可以确定您的查询点是在内部还是外部.

实施技巧

如果您计划实现此(或任何其他POP算法),请不要尝试使用正弦或余弦.

将您的点(多边形角和查询点)表示为单位矢量.将您的大圆(多边形边和查询点所在的圆)表示为垂直于大平面所在平面的单位向量.使用点积和交叉积.不要在角度思考.在向量中思考.

它应该不会太难 - 我不需要它足以实现它.如果您喜欢自由撰稿,请与我们联系!

您可以构建解决方案的链接

c ++ boost库有一个POP实现,我也不喜欢,但这很大程度上是因为我是一个完美主义者 - 我想它几乎在所有情况下都能达到目的.

该tz_world数据库包含土地大量多边形,并有一个GeoJSON的变型的吧.您可以使用内置NSJSONSerialization类很好地解析它.

以下是NASA针对点和球体的一些算法(虽然我不喜欢它们的POP).


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • iOS 系统架构 && 常用 framework
    整理自互联网,感谢原文作者!1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多2.iOS的系统架构分为四层,由上到下一次为:可触摸层(CocoaTo ... [详细]
  • 在iOS6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化。开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法。因此本节介绍的内容也同样适用于iOS5 ... [详细]
  • IOS笔记汇总为了方便开发者开发出强大的功能,苹果提供了各种各样的框架IOS属性IOS基础属性导入依赖propertyNSStringNSDictionaryNSAr ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS核心笔记—CoreLocation框架-基础相关的知识,希望对你有一定的参考价值。1、 ... [详细]
  • 高德IOS真机调试LMAMapKit出错问题的解决方法(directory not found for option)
    1最近项目到了收尾阶段,所以开始了在真机部署调试,之前的模拟器环境下测试项目,一切都没问题,今天真机调试过程中, ... [详细]
  • IOS开发之百度地图API环境搭建 ... [详细]
  • iPhoneSDK提供了三个类来管理位置信息:CLLocationCLLocationManager和CLLHeading(不常用)。除了使用GPS来获取当前的位置信息外,iPho ... [详细]
  • iOS 百度地图开发集成使用 ... [详细]
author-avatar
cc_lzx_530
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有