如何在 Android 应用程序中使用自己的自定义图像而不是谷歌地图

Posted

技术标签:

【中文标题】如何在 Android 应用程序中使用自己的自定义图像而不是谷歌地图【英文标题】:How to use own custom imagery instead of google map in Android app 【发布时间】:2016-01-29 16:43:34 【问题描述】:

我在 android 中开发了一个应用程序,我在其中使用 Google Map 来捕获位置。我有一张大卫星图片(大于 500 mb),这张图片是地理编码的。我们需要将其显示为地图中的图层之一,例如谷歌地图可以选择卫星图像。如何做呢。 提前谢谢你。

【问题讨论】:

“想象”是什么意思?是否要更改地图图块或标记图标? 是的,我想使用自定义地图图像而不是谷歌地图。 【参考方案1】:

要将自定义想象添加到您的地图中,您可以使用TileOverlay

来自TileOverlay的the documentation

TileOverlay 定义了一组添加到基本地图图块之上的图像。您还可以通过提供透明的平铺图像来使用平铺叠加层向地图添加额外的功能。您需要为要支持的每个缩放级别提供图块。如果您有足够多的多个缩放级别的图块,则可以为整个地图补充 Google 的地图数据。

当您想要向地图添加广泛的图像(通常覆盖较大的地理区域)时,图块叠加非常有用。相比之下,当您希望在地图上的某个区域修复单个图像时,地面叠加层非常有用。

要使用TileOverlay,您需要实现一个TileProvider,它为地图请求的每个图块返回正确的Tile 对象。

考虑到您的数据(您的图像)需要进行地理参考才能返回要在地图上绘制的正确图块。

显示您的数据后,您可能需要通过map.setMapType(GoogleMap.MAP_TYPE_NONE); 停止询问 Google 磁贴。

根据 cmets 更新:

正如您所说,您希望为不同的图像格式自动平铺,您需要为您希望能够加载的每种图像格式实现TileProvider

要返回正确的Tile,您需要在平铺 x、y 和缩放(TileProvider 接口的public Tile getTile(int x, int y, int zoom) 函数的参数)和地理参考坐标(和像素)之间进行转换图片。您可以查看http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/ 以了解有关平铺系统的更多信息。

此外,如果图像的 srid 不是 WGS84,您将需要对数据进行地理转换。

请注意,如果您的图像很大并且您显示的区域很大,您可能会发现 OutOfMemory 错误,您可能需要查看Loading Large Bitmaps Efficiently 以加载图像的缩小版本以返回为瓷砖。

【讨论】:

我只有一个大区域的地理参考图像,但我没有每个缩放级别的图块 你的图片是什么格式,什么尺寸,什么srid? 我需要在应用程序本身中自动平铺,即用户可以选择从服务器或本地内存中选择图像,应用程序将进行平铺然后加载图像。现在我拥有的图像是地理参考 JPEG 文件,但它可以是任何支持地理参考的格式。 我希望我的应用程序将图像切割成各种图块以实现各种缩放级别。就像当我浏览图像或下载图像时,它会渲染并将图像切割成图块并通知用户图像已准备好查看。

以上是关于如何在 Android 应用程序中使用自己的自定义图像而不是谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章

如何将最新数据附加到android中的自定义基本适配器列表视图?

如何在 Android 中显示自定义地图?

无论如何要为Android中的来电和去电制作我的自定义用户界面吗?

自己的自定义图标未显示在底部导航栏android studio中

如何在android的自定义视图中访问按钮的setOnClickListener?

Appium 自动化测试:如何从 android [android.view.View] 中的自定义 UI 中获取元素或文本