2

我正在编写一个 iOS 应用程序,它会根据用户操作在地图中显示位置。我想放置一个带有描述的图钉并放大以显示地图详细信息。

如果我使用 URL http://maps.google.com/maps?q=-33.895851,151.18483+(Some+Description)&z=19调用地图,我会得到一个带有“Some Description”的图钉,但缩放级别被忽略. 这确实适用于谷歌地图网站。

如果我使用http://maps.google.com/maps?q=-33.895851,151.18483&z=19缩放工作,但我没有得到别针。

我已经尝试了 , 和 的几种组合?q=?ll=?sll=到目前为止,没有任何东西会改变缩放显示描述。

有什么线索吗?


只是为了让我们非常清楚,这里有一些截图。我希望它可以在真实设备上运行(即使用 iOS 地图)。模拟器通过 Safari 使用谷歌地图。

这是我在 URL 1 ( [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=-33.895851,151.18483+(Some+Description)&z=19"]];)中看到的内容

SS 1

这是 URL 2 ( [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=-33.895851,151.18483&z=19"]];):

SS 2

这是 relikd 的建议 ( [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?z=19&q=-33.895851,151.18483+(Some+Description)"]];):

在此处输入图像描述

我想要我在屏幕截图 2 中看到的图像,但带有图钉和描述。


多亏了 phix23,它看起来&z=总是被忽略,我很幸运,我的示例&z=19恰好放大了很多。所以,我换个说法:如何“鼓励”iOS 地图放大?

4

4 回答 4

1

它看起来不受支持。在 Apple 文档中,它指出:

q= 查询参数。该参数被视为用户在 maps.google.com 页面上的查询框中输入的。不支持 q=*

按照这一系列逻辑,您无法在搜索输入中指定缩放,因此无法使用“q=”查询字符串参数。

http://developer.apple.com/library/ios/#featuredarticles/iPhoneURLScheme_Reference/Articles/MapLinks.html

于 2012-07-02T19:14:40.167 回答
1

适用于 iOS 的 Google 地图使用光栅图块(我认为是 .png 文件),因此它会捕捉到在屏幕上具有谨慎数量的图块的大小。谷歌这样做是为了给用户最好的图像。您将无法在两者之间放大;只有用户可以进行精确的缩放调整。

如果您需要精确的缩放级别,您将无法使用 Google 地图来显示您的地图。您需要切换到提供矢量图像的映射平台。 OpenStreetMap是一种选择。它具有与您的 iOS 应用程序集成的现有库。例如,参见Route-meCloud-Made

(如果您对rastervector不太了解,请参阅What's the Difference Between Raster and Vector?

最后,Apple.com 上的 iOS 6 地图页面表明新的 iOS 6 地图服务将是矢量的。如果您想为此编写代码,您应该在 developer.apple.com 上注册 iOS 开发者计划(每年 99 美元),这样您的应用程序就可以在今年秋天推出时准备就绪。

于 2012-07-06T03:12:27.880 回答
1

我用不同的查询参数对其进行了测试,得出的结论是地图应用程序根本没有使用 z 参数。相反,只有查询字符串 (q) 用于确定合理的地图区域。示例:如果您搜索“china”,您将得到一个非常大的区域,无论 z 的值是多少,它总是相同的。

对于地理编码,带有查询字符串的 POST 请求被发送到http://www.google.com/glm/mmap. 它基本上返回引脚的位置和区域 + 一些元数据。

该协议是二进制的,因此最好使用官方 API 进行测试:

示例: http://maps.google.com/maps/geo?q= -33.895851,151.18483

这为您提供了一些带有地理编码地址的 JSON 数据,包括由指定的地图区域

"LatLonBox": {
    "north": -33.8944020,
    "south": -33.8971000,
    "east": 151.1860350,
    "west": 151.1833370
  }

然后应用程序使用该区域来显示结果。

但是,当您在查询字符串中设置描述时,您可以获得不同的结果。我建议根本不要设置描述,因为该应用程序试图通过地理编码自行解决。

作为一种解决方法,您还可以使用 MapKit 在您自己的应用程序中显示地图。然后,您可以完全控制缩放因子和引脚注释。还可以考虑在 Safari 中打开地图,也许使用 Bing 地图而不是 google 地图。

好消息:

在 iOS 6 SDK 中有用于打开地图应用的新 API,您现在可以指定描述和地图区域:

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(-33.895851,151.18483);
MKPlacemark* p = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
MKMapItem* item =  [[MKMapItem alloc] initWithPlacemark:p];
item.name = @"Some Description";
MKCoordinateSpan span = MKCoordinateSpanMake(0.05, 0.05);
[item openInMapsWithLaunchOptions:@{ MKLaunchOptionsMapSpanKey : [NSValue valueWithMKCoordinateSpan:span] }];
于 2012-07-08T12:37:30.863 回答
0

一年后,我移植到 iOS 谷歌地图 API,它完全符合我的要求,没有戏剧性。我将缩放级别设置为 18,它就是这样做的。强烈推荐。

于 2013-06-29T07:18:00.257 回答