Android 我有一个巨大的图形文件,想创建一个覆盖到谷歌地图,我必须创建瓷砖?

Android 我有一个巨大的图形文件,想创建一个覆盖到谷歌地图,我必须创建瓷砖?,android,google-maps,bitmap,overlay,android-mapview,Android,Google Maps,Bitmap,Overlay,Android Mapview,我目前正在开发一个显示自定义地图的应用程序(我所在城市的一些艺术家这样做了),并希望在谷歌地图中为该城市创建覆盖图 因此,用户可以使用此覆盖打开地图视图 由于图形文件非常庞大(12km*7km在中/低清晰度下约为75Mb),我成功地做到了这一点(以下是代码): MapView地图=(MapView)findViewById(R.id.MapView); MapController MapController=map.getController(); List overlays=map.getO

我目前正在开发一个显示自定义地图的应用程序(我所在城市的一些艺术家这样做了),并希望在谷歌地图中为该城市创建覆盖图

因此,用户可以使用此覆盖打开地图视图

由于图形文件非常庞大(12km*7km在中/低清晰度下约为75Mb),我成功地做到了这一点(以下是代码):

MapView地图=(MapView)findViewById(R.id.MapView);
MapController MapController=map.getController();
List overlays=map.getOverlays();
添加(新的DrawableMapOverlay(this,point,R.drawable.my_drawable);
map.invalidate();
由于文件很重,所以应用程序速度很慢

我该如何改进这一点,我是否必须将地图分块


有什么想法/项目可以帮助我吗?

你需要实现某种“懒散负载”解决方案…现在我没有太多的使用它,但这可能只能加载用户正在查看的图像的一部分,而不是一次加载整个内容。当用户移动时,它将渲染新区域…我知道你可以使用一组地图标记来完成此操作…你可以使用它来懒散地加载和图像。检查此选项ut:


您可以修改lazyloading方法来为您工作…

您需要实现某种“lazyload”解决方案…现在我没有太多的使用它,但这可能只能加载用户正在查看的图像的一部分,而不是一次加载整个内容。当用户移动时,它将渲染新区域…我知道你可以使用一组地图标记来完成此操作…你可以使用它来懒散地加载和图像。检查此选项ut:


您可以修改lazyloading方法来为您工作…

不确定您是否仍在寻找答案,但这是您所需要的。

不确定您是否仍在寻找答案,但这是您所需要的。

如果您无法在本地加载文件,则需要使用开源解决方案,如mapserver(mapserver.org)或地理服务器

我两者都有经验,但倾向于选择mapserver

您可以在那里加载图形图像,并在服务器上进行渲染,然后在设备上使用它

此解决方案的优点在于,您不必将整个图形文件发送给用户。您还可以让用户缓存您的“分幅”(256x256像素的小块,代表大图像文件的一部分),这样他们就不必一次又一次地获取感兴趣的内容


如果地图数据太大,本地加载图像不是一个好主意。您必须使用maptiler(如我前面的回答中所述)将其拆分,然后保存分幅(可能在zip文件中)然后使用像osmdroid这样的客户端来导航。

如果无法在本地加载文件,则需要使用开源解决方案,如mapserver(mapserver.org)或geoserver

我两者都有经验,但倾向于选择mapserver

您可以在那里加载图形图像,并在服务器上进行渲染,然后在设备上使用它

此解决方案的优点在于,您不必将整个图形文件发送给用户。您还可以让用户缓存您的“分幅”(256x256像素的小块,代表大图像文件的一部分),这样他们就不必一次又一次地获取感兴趣的内容


如果地图数据太大,本地加载图像不是一个好主意。您必须使用maptiler(如我前面的回答中所述)将其拆分,然后保存分幅(可能在zip文件中)然后使用osmdroid这样的客户端来导航。

您想自己编写一个平铺程序,并使用空间索引或空间填充曲线来自动平铺。si将2d复杂度降低为1d复杂度。它看起来像四叉树和分形。有一些si像z曲线、peano曲线或hilbert曲线。我认为您可以自由选择自己的si,但例如,Google与大多数其他地图应用程序一样使用z曲线。si用于许多其他问题,如热图、树形图、增强现实、图像比较、图像压缩。尤其是希尔伯特曲线非常有用,因为它以递归代码(也称为格雷码)的形式遍历2d空间这使得每个相邻的磁贴地址仅相差一位,而且它很好地填充了空间(http://en.wikipedia.org/wiki/List_of_fractals_by_Hausdorff_dimension)。您想查找Nick的hilbert curve空间索引四叉树博客。hilbert curve的缺点是实现起来有点困难,并且平铺总是2次方。

您想自己编写一个平铺程序,并使用空间索引或空间填充曲线进行自动平铺过程。si将2d复杂性降低到1d复杂度。它看起来像四叉树和分形。有一些si像z曲线、peano曲线或hilbert曲线。我想你可以自由选择自己的si,但谷歌(Google)像大多数其他地图应用程序一样使用z曲线。si用于许多其他问题,如热图、树形图、增强现实、图像比较、图像压缩尤其是希尔伯特曲线非常有用,因为它以递归代码(也称为格雷码)的形式穿越2d空间,使每个相邻的磁贴地址仅相差一位,而且它很好地填充了空间(http://en.wikipedia.org/wiki/List_of_fractals_by_Hausdorff_dimension)。你想看看Nick的hilbert curve空间索引四叉树博客。hilbert curve的缺点是有点难以实现,并且一个图块总是2的幂。

因此,我将不得不在你的解决方案中使用图块似乎是很合乎逻辑的。看起来是目前为止最好的,但仍然不是我想要的。他正在寻找一个四叉树或一个空间索引。请参阅我的
   MapView map = (MapView) findViewById(R.id.mapview);
    MapController mapController = map.getController();
    List<Overlay> overlays = map.getOverlays();
    overlays.add(new DrawableMapOverlay(this, point, R.drawable.my_drawable);
    map.invalidate();