4

这是我在这里的第一个问题,所以让我们直奔主题

我有一张高分辨率 png 格式的地图,带有角落的地理坐标,我想在我的 Android 应用程序中与 Google Maps Api 集成。

到目前为止我做了什么:

  • 我已将地图切割成 256x256 像素的图块并编写了一个 URITileProvider。事实证明,地图有偏移,倾斜并且必须重新调整大小

  • 我找到了 MapTiler并尝试了一下。它允许设置角坐标并生成图块。当前的免费版本会产生水印,因此我还检查了以前的 beta 版本 - 但是“y”平铺坐标放置在另一个半球上。当然我可以尝试映射它们,但这并不能解决我的倾斜问题

  • 我还发现了 Android 应用CustomMaps。太棒了!它几乎完全符合我的要求,只是它不生成图块。可以选择获取图像文件,通过从图像中选择点并将它们链接到谷歌地图将其放在地图上。它还提供了一个很好的概述。

所以这是我的问题:

是否有一个免费工具结合了 MapTiler 和 CustomMaps 的功能,我可以使用它来对齐我的图像以映射并将其拆分为有效的图块?

我考虑过编辑源图像并通过反复试验的方法,但这绝对不是这里的方法。目前我正在考虑创建自己的工具,但从逻辑上讲,必须已经有了解决方案。

4

1 回答 1

5

我已经设法解决了这个问题,我想我会与你分享。我写了自己的瓷砖生成器。该解决方案肯定不是理想的,可能需要更多的工作。欢迎任何贡献。

以下是使其工作的步骤:

  1. 使用谷歌地图,放大所需区域,粘贴到图形编辑程序中作为背景层。
  2. 将您的叠加地图粘贴到另一层的图形程序中,并将其转换为与背景中的地图相匹配
  3. 使用谷歌地图尽可能精确地读取最大/最小纬度和经度
  4. 使用我的 MapTileGenerator生成瓦片。
  5. 在 Android 中使用URITileProvider

    @Override
    public URL getTileUrl(int x, int y, int zoom) {
    
        String url = MAP_FILES_URL + x + "-" + y + "-" + zoom + ".png";
        try {
            return new URL(url);
        } catch (MalformedURLException e) {
            // ignore
        }
        return null;
    }
    

我为这个过程录制了一个简短的视频。可在 youtube 上找到:地图图块生成器说明。不幸的是,它是波兰语,但在阅读以上几点后,信息应该很清楚。

我很清楚我编写的脚本存在内存管理问题,应该使用引入多线程。我希望我能很快回到它。

于 2013-12-12T16:43:59.917 回答