标签: google-maps-sdk-ios

AndroidRuntime:致命异常:androidmapsapi-ZoomTableManager

我使用 Google Maps SDK (v2) 的应用程序刚刚开始崩溃,出现以下异常:

Process: com.currentlocation.android, PID: 7328
    java.lang.ArrayIndexOutOfBoundsException: length=1; index=12
        at com.google.maps.api.android.lib6.gmm6.vector.ct.<init>(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):9)
        at com.google.maps.api.android.lib6.gmm6.vector.cv.a(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):23)
        at com.google.maps.api.android.lib6.gmm6.util.m.run(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):14)
        at java.lang.Thread.run(Thread.java:919)
Run Code Online (Sandbox Code Playgroud)

在 v3 beta SDK 中,堆栈跟踪是:

2020-04-23 15:59:06.064 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example, PID: 22717
    java.lang.ArrayIndexOutOfBoundsException: length=1; index=12
        at com.google.android.libraries.maps.bv.zzbs.<init>(ZoomTable.java:24)
        at com.google.android.libraries.maps.bv.zzbv.zza(ZoomTableQuadTree.java:57)
        at com.google.android.libraries.maps.br.zzd.zza(Unknown Source:4)
        at com.google.android.libraries.maps.hi.zzas.zza(Suppliers.java:7)
        at com.google.android.libraries.maps.br.zza.zzh(SharedMapComponentImpl.java:58)
        at com.google.android.libraries.maps.gu.zzat.zza(RendererFactoryImpl.java:88)
        at com.google.android.libraries.maps.it.zzav.zza(GoogleMapImpl.java:59)
        at com.google.android.libraries.maps.it.zzci.zza(MapFragmentDelegateImpl.java:3)
        at com.google.android.libraries.maps.it.zzcg.zza(MapFragmentDelegateImpl.java:15)
        at com.google.android.libraries.maps.SupportMapFragment$zza.onCreateView(SupportMapFragment.java:15)
        at com.google.android.gms.dynamic.zae.zaa(com.google.android.gms:play-services-base@@17.1.0:4)
        at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaa(com.google.android.gms:play-services-base@@17.1.0:9)
        at com.google.android.gms.dynamic.DeferredLifecycleHelper.onCreateView(com.google.android.gms:play-services-base@@17.1.0:25)
        at com.google.android.libraries.maps.SupportMapFragment.onCreateView(SupportMapFragment.java:34)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
        at …
Run Code Online (Sandbox Code Playgroud)

android ios google-maps-android-api-2 google-maps-sdk-ios google-maps-android-api-3

158
推荐指数
7
解决办法
1万
查看次数

GMSGroundOverlay动画 - 我应该使用CATiledLayer吗?

我正在尝试使用Google Maps for iOS SDK最新版本1.2.1.2944来动画a GMSGroundOverlay.用户可以控制图像序列,因此使用动画UIImage不是一种可能的遗憾,所以我在动态加载UIImage.将GMSGroundOverlay.icon被设置为UIImage正在更新.

除了高内存使用情况,我似乎在已经达成的限制每当我试图覆盖一个UIImage使用GMSGroundOverlay.icon是超过1000像素X 1000像素,它崩溃.引用UIImage1000px x 1000px可以解决崩溃问题.

虽然我可能会利用CATiledLayer处理图像只加载到内存中,然后进入图标属性GMSGroundOverlay,但是有没有人有任何使用CATiledLayerGoogle Maps for iOS SDK和将图像排序为动画的经验GMSGroundOverlay

crash overlay catiledlayer ios google-maps-sdk-ios

100
推荐指数
1
解决办法
1976
查看次数

Google Maps SDK for iOS要求GoogleMaps.bundle成为"复制捆绑资源"下目标的一部分

当我为iOS构建GoogleMaps SDK时,发生了这些错误.

*** Terminating app due to uncaught exception 'GMSException', reason: 'Google Maps SDK for iOS requires GoogleMaps.bundle to be part of your target under 'Copy Bundle Resources''
Run Code Online (Sandbox Code Playgroud)

但是,GoogleMaps.framework在拷贝包资源中.所以,我很困惑.请告诉我这个问题的原因.

iphone xcode google-maps ios google-maps-sdk-ios

63
推荐指数
4
解决办法
4万
查看次数

GMSPolyline内存峰值非常大

在GPS应用程序中,允许用户显示我们称为各种不同类型地图上的轨道的复杂位置点列表,每个轨道可以包含2k到10k的位置点.当在非Google地图类型上渲染轨道时,轨道会被大量剪裁,修剪和路径简化.这是为了降低内存使用率并提高性能.我们通常最终只会向OpenGL管道提交远远少于一千(聚合)转换的位置点,即使在最坏的情况下也是如此.

在整合Google Maps SDK for iOS时,我们最初尝试继续利用我们自己的OpenGL轨道渲染系统,但遇到了与OpenGL上下文冲突相关的问题(渲染工作正常,但我们无法获得GMSMapView和我们自己的内部OpenGL资源在没有人触摸已删除的内存的情况下释放.

因此,我们正在尝试利用GMSPolyline构造并让Google SDK执行轨道渲染,但我们遇到了主要的内存使用问题,并正在寻找解决它们的指导.

使用Xcode Instruments,我们在创建大约25条多线路时监控内存使用情况,总线位置总数约为23k(不是每个).在创建多线路的过程中,应用内存使用量从大约14 MB增加到大约172 MB,净峰值大约为158 MB.在创建所有多边形线之后不久,内存使用率最终下降到大约19 MB并且看起来稳定,累积净值大约为5 MB,所以看起来每个位置点需要大约220个字节(5 MB/23k点)到商店.

令我们伤心的是峰值内存使用率.虽然我们的实验室测试只用23K的位置点,在现实世界中往往有更多的人,和iOS似乎要抛弃我们的应用程序后,谷歌地图有大约450 MB消耗上的iPhone 5(而我们内部的多线大约渲染系统峰12 MB用于相同的测试用例).

显然,该GMSPolyLine结构不适用于我们需要的重量级使用.

我们尝试使用单独的自动释放池包装一些多边形线创建循环,然后在适当的位置排出这些循环,但这对内存使用没有影响.在创建多边形线并且控制返回到主运行循环之后的峰值内存使用根本没有改变.后来很明显为什么; 在创建多边形线之后,第一个DisplayLink回调之前,Google Map系统不会释放资源.

我们接下来的努力将是手动限制我们在GMSPolyline上推送的数据量,可能使用我们自己的边界测试,裁剪,修剪和最小化,而不是依靠Google Maps来有效地执行此操作.

这里的缺点是,当用户在地图上平移/缩放时,可能会分配和释放更多GMSPolyline对象.这些对象中的每一个都将具有更少的位置点,但是,我们仍然担心这种方法的无法预料的后果,许多GMSPolyline分配和解除分配的隐藏开销.

所以问题是,处理这种情况的最佳方法是什么,谷歌的某些人是否可以对任何GMSPolyline最佳实践,上限,瓶颈等有所了解?

optimization gps memory-management google-maps-sdk-ios

54
推荐指数
1
解决办法
1790
查看次数

Google地图的自定义信息窗口

我想为Google Maps for iOS制作一个自定义信息窗口,如下图所示.是否有可能像GMSMarker,GMSPolyline和GMSPolygon那样扩展GMSOverlay以创建自定义图形?

在此输入图像描述

google-maps-sdk-ios

54
推荐指数
2
解决办法
4万
查看次数

iOS,如何使用GMSCoordinateBounds显示地图的所有标记?

我想显示我地图上的所有标记,经过一些搜索我发现它应该用GMSCoordinateBounds(Google Maps SDK)完成我已经阅读了有关它的官方文档,但我还不明白如何使用它并在我的代码中实现它.

https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_camera_update#aa5b05606808272f9054c54af6830df3e

这是我的代码

GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] init];   
CLLocationCoordinate2D location;

for (NSDictionary *dictionary in array) {
    location.latitude = [dictionary[@"latitude"] floatValue];
    location.longitude = [dictionary[@"longitude"] floatValue];

    // Creates a marker in the center of the map.
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.icon = [UIImage imageNamed:(@"marker.png")];
    marker.position = CLLocationCoordinate2DMake(location.latitude, location.longitude);
    bounds = [bounds includingCoordinate:marker.position];
    marker.title = dictionary[@"type"];
    marker.map = mapView_;
}   

[mapView_ animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:30.0f]];
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

google-maps ios google-maps-sdk-ios

47
推荐指数
8
解决办法
4万
查看次数

无法将google地图GMSMapView放在主要主视图的子视图中?

我正在努力解决这个问题!我想将谷歌地图添加GMSMapView到我UIView的主要部分中.UIViewViewController

它应该很简单......我用故事板创建了一个UIView我想要的尺寸,并把它放在主要部分UIView.

接口文件的片段:

@interface MapViewController : UIViewController <CLLocationManagerDelegate>

@property(nonatomic) IBOutlet GMSMapView *mapView;
Run Code Online (Sandbox Code Playgroud)

用mapView链接到这UIView里面UIView.

我在实施中做了什么:

@synthesize mapView = _mapView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                            longitude:151.2086
                                                                 zoom:10];
    _mapView = [GMSMapView mapWithFrame:_mapView.bounds camera:camera];
    _mapView.myLocationEnabled = YES;

}
Run Code Online (Sandbox Code Playgroud)

这应该工作,不应该吗?我得到的是我的内部UIView是空的.

如果我在谷歌的起始指南谷歌地图集成文档后实例化地图,它可以工作,但它将地图分配给MAIN UIView,这是另一回事.

我甚至尝试将故事板中mapView的类更改UIViewGMSMapView.地图显示在内部视图中,但它以奇怪的方式进行初始化

  1. 系统抛出错误说

"无法制作完整的帧缓冲区"

并减慢了很多视图的加载(在模拟器上需要2-3秒)

  1. 地图在viewDidLoad方法中完成的任何相机更改中都没有响应.

有什么建议?

我在StackOverflow上阅读了一些帖子,但找不到有效的解决方案:(

subview uiview ios google-maps-sdk-ios

41
推荐指数
7
解决办法
3万
查看次数

使用google maps SDK for iOS进行标记聚类?

我在我的iOS应用程序中使用Google Maps SDK,我需要对彼此非常接近的标记进行分组 - 基本上需要使用标记聚类,如附加网址中所示.我能够在Android地图SDK中获得此功能,但我找不到iOS Google Maps SDK的任何库.

你可以为此建议任何图书馆吗?或者建议一种为此实现自定义库的方法?

Marker_Clusterer_Full.png

(此图片来源)

google-maps google-maps-sdk-ios

37
推荐指数
2
解决办法
2万
查看次数

如何在Google地图上添加3d对象作为标记,就像Uber一样

我想在Uber上添加一个用于在地图上显示汽车的3D标记,但我无法找到有关在Google Maps SDK for iOS上添加3d对象的任何信息.

非常感谢任何帮助.

显然没有人看到OP和我看到的是什么,所以这里有一部Uber汽车转向90度的视频.逐帧播放,你会发现它不是一个简单的图像旋转.要么优步经历了每辆车的360度角度的麻烦,要么它真的是一个3D模型.对每辆车做360度图像对我来说都是愚蠢的.

google-maps ios google-maps-sdk-ios swift

33
推荐指数
3
解决办法
6836
查看次数

Google Maps iOS SDK,获取2个地点之间的路线

当我使用谷歌地图SDK时,我正试图在iOS上的两个位置之间获得驾驶方向.我知道我们可以用两种方法做到这一点: -

1.)使用URL方案,您的设备上必须安装Google Maps App.

2.)使用Directions API,通过Request-Response然后解析JSON.显示标记以显示方向.

现在,我的问题是,我可以通过其他任何方式在iOS上执行此操作吗?我需要显示从当前位置到我有Lat/Long的特定位置的方向.

我的意思是,真的不可能简单地传递2个位置作为参数和谷歌地图SDK,会给我指示吗?

谢谢,

google-maps ios google-maps-sdk-ios

29
推荐指数
6
解决办法
5万
查看次数