我想做一个 iPhone 地图应用程序。我知道iPhone可以给出用户具体位置的详细经纬度坐标。谷歌地图和其他地图应用程序如何将用户的位置转换为地图上的位置?似乎有很多事情要考虑。例如,如果地图是旋转的,在我看来,它有很多缩放和需要考虑的东西。谷歌地图如何将用户的当前位置翻译成地图上的特定点,并使其如此准确(在 2 到 3 米内)。我真的很感激答案或任何帮助。谢谢!
3 回答
Google 地图应用程序知道:
- Google Maps 服务将地图划分为图块的方式
- 每个地图图块的大小和位置(纬度/经度)
- 用户选择的缩放级别
- 设备屏幕的大小
- 设备上报的位置经纬度
有了这些信息,地图应用程序可以做一些简单的线性算法来找出哪些图块需要显示在屏幕上,以便用户的位置显示在屏幕中间(或任何需要的地方)。
谷歌地图使用几种不同的方法来获取用户的位置,包括用户连接到的移动网络塔的位置(有时谷歌使用 2 个或更多塔的三角测量来使这个更准确http://techcrunch.com/ 2007/11/28/google-mobile-maps-pinpoints-your-location-without-gps/),如果用户连接到 WiFi 和 GPS,则为 ISP 的位置。
最准确的是 GPS,它为 Google 提供精确到(如果我没记错的话)10 米以内的纬度和经度坐标。Google 地图系统中的所有图像都存储了 GPS 坐标,因此 Google 所要做的就是检索正确的地图图像并在图像上绘制用户的位置。
我认为这就是您所追求的,但是如果您需要有关某事的更多详细信息,或者我误解了,请发表评论,我将修改此答案。
编辑
请参阅此页面,它很好地介绍了在 iPhone 上使用 Google 地图https://developers.google.com/maps/articles/tutorial-iphone
您无需编写用于在地图上放置标记以显示用户位置的算法,只需在 Google Maps API 中调用函数/方法即可,它会为您完成所有工作。我建议彻底查看 Google Maps API 文档以找到您需要的内容(也可以在上一个链接中找到)。
我认为这可能是您所追求的精确代码片段: https ://developers.google.com/maps/documentation/javascript/overlays#Markers
在确定您的位置时,您的航向/旋转是无关紧要的。您的位置基于从 GPS 卫星接收到的数据。有多个卫星,根据您与每个卫星的距离,您的位置会缩小到一个点。这个点有一对非常详细的坐标(想想小数点后 10 位)。Google 提供的地图上的每个点都与一对坐标相关联。因此,当您的手机计算出您的坐标时,它会检查它在地图上对应的位置,并将您放置在地图上。所有其他位置也基于坐标。
现在,地图还有一个设置,地图会根据您的航向旋转。该功能使用手机内置的指南针。我相信,自 3GS 以来,iPhone 就有内置指南针。
简而言之,将谷歌提供的地图想象成谷歌提供的一张巨大的、分辨率极高的图像,该图像上的每个像素(或更少)都对应一对坐标。确定坐标后,无论缩放级别如何,都将放置在该图像上的相应点上。