【问题标题】:Android - How to open google maps with Intent and KML?Android - 如何使用 Intent 和 KML 打开谷歌地图?
【发布时间】:2011-12-19 10:15:18
【问题描述】:

我需要使用 sdcard 上已经存在的 kml 文件打开谷歌地图。 (/sdcard/example.kml)

我试过了:

这个答案是错误的,当点击链接时,地图打开,但搜索位置“file:///sdcard/example.kml”

  • 使用意图:

这段代码抛出ActivityNotFoundException:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
        Uri.parse("file:///sdcard/example.kml"));
startActivity(intent);
  • 我尝试使用 setDataAndType 方法,但不起作用:

另一个ActivityNotFoundException

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
         Uri.parse("file:///sdcard/example.kml"),
                   "application/kml");
startActivity(intent);
  • 关于此问题的其他两个未解决的主题:

Open local KML File in Google Maps on Android

Does the Android API support KML files?

知道如何打开这个 kml 吗?

谢谢!!!

【问题讨论】:

标签: android android-intent


【解决方案1】:

我正在使用 Locus Free(来自市场),它是一个地图遮阳板,能够打开 .kml 文件,例如从谷歌地图捕获的文件,但也能够从谷歌导入 .kml 文件,它不会让您看到卫星视图,只能看到您添加到其中的标记和一些地形特征,例如道路和地名。

【讨论】:

    【解决方案2】:

    由于您的应用可能或可能无法访问 sdcard(例如,它可能可用或不可用),因此最可靠的解决方案是将 KML 文件发布到网络并收取费用(我假设您有网络访问,因为谷歌地图在离线时不会有太大用处,即使是预取瓷砖)。

    即使您必须支付罚款(googlemaps 在解析和嵌入 kml 功能方面很慢),这也是值得的,IMO。

    例如,如果您使用示例 kml 文件(如下所示):

    String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
    String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
    startActivity(intent);
    

    经过测试和工作。只需将您的 kml 文件发布到文件服务器并以这种方式访问​​它。

    注意:如果您计划实时更新地图,googlemaps 往往会通过缓存文件一段时间(未确定)来避免这种情况。如果您在 kml 字符串的末尾使用随机化器,例如 ?randomizer=[RandomNumber],您可能能够摆脱实时更新。

    【讨论】:

    • 我知道这是事实发生 7 年后,但这个答案对我来说不起作用。谷歌地图显示“未找到任何结果...”。我按照上面的描述和我自己的 kmlWebAddress 测试了一个我知道存在并且有效的文件。
    【解决方案3】:

    您需要对 Intent 数据使用地理 URI 方案语法:

    Uri.parse("geo:0,0?q=file:///sdcard/example.kml")
    

    此答案中的代码对我有用: How to plot a pre-build map from google maps on a MapView

    【讨论】:

    • 这不起作用,地图搜索本地名称为file:///sdcard/example.kml
    • 这里相同.. 没有文件.. 如果我删除 geo:0,0?q=.. Google 地球只打开.. 奇怪...
    【解决方案4】:

    我对上述方法对我不起作用(在 Android v2.1 上)并不感到惊讶,因为我认为 Maps 所做的只是将查询字符串发送到服务器进行处理。服务器可以处理 http:// 因为(通常的互联网警告!)文件可以从任何地方获取。但它不能处理 file:// 因为这仅意味着原始设备上的某些东西,服务器对此无能为力。我不相信谷歌地图可以处理本地 KML 文件,至少是这样。 Windows Mobile 5.0 上的谷歌地图可以这样做,但是,如果它以传统的 DOS 命令行方式被赋予本地文件名。当然,这也一定是在 Android 中,以一种有意的方式!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 2018-07-19
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多