在iOS Maps URL中提供lat / long AND title似乎会导致忽略缩放级别

时间:2012-06-30 06:23:22

标签: iphone ios google-maps ios4

我正在编写一个iOS应用,可以根据用户操作在地图中显示位置。我想放一个带描述的图钉并放大以显示地图细节。

如果我使用网址http://maps.google.com/maps?q=-33.895851,151.18483+(Some+Description)&z=19调用地图,我会获得一个带有“部分描述”的图钉,但会忽略缩放级别。此 可在Google地图网站上运行。

如果我使用http://maps.google.com/maps?q=-33.895851,151.18483&z=19缩放功能,但我没有引脚。

我尝试了?q=?ll=?sll=的几种组合,但到目前为止,没有任何内容会更改缩放显示说明。< / p>

任何线索?


我们真的清楚,这里有一些截图。我希望这可以在真实设备上工作(即使用iOS地图)。模拟器通过Safari使用谷歌地图。

以下是我在网址1([[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=-33.895851,151.18483+(Some+Description)&z=19"]];

中看到的内容

SS 1

这是网址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)"]];):

enter image description here

我想要在屏幕截图2中看到的图像,但是有一个引脚和描述。


感谢phix23,看起来&z=总是被忽略了,我很幸运,我的&z=19示例恰好放大了很多。所以,我会改写:我怎么能'鼓励'iOS地图放大?

4 个答案:

答案 0 :(得分:1)

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

  

q =查询参数。此参数被视为已经过   用户在maps.google.com页面上输入查询框。 Q = *   不支持

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

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

答案 1 :(得分:1)

Google Maps for iOS使用光栅图块(我认为是.png文件),因此它会捕捉到屏幕上具有谨慎数量的图块的大小。 Google这样做是为了给用户提供最佳图像。你将无法放大;只有用户才能进行精确的缩放调整。

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

(如果您对栅格向量的了解不多,请参阅What's the Difference Between Raster and Vector?

最后,iOS 6 maps page on Apple.com表示新的iOS 6地图服务将是矢量。如果你想为此编码,你应该在developer.apple.com注册iOS开发者计划(每年99美元),这样你的应用程序就会在今年秋季推出时准备就绪。

答案 2 :(得分:1)

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

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

该协议是二进制的,因此最好使用官方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地图而不是谷歌地图。

好消息:

在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] }];

答案 3 :(得分:0)

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