2011-11-01 28 views
4

我需要使用已存在于SD卡上的kml文件打开谷歌地图。 (/sdcard/example.kml)Android - 如何使用Intent和KML打开谷歌地图?

我想:

这个答案是错的,当点击链接,地图打开,但搜索位置“文件: ///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?

谢谢!!!

+0

什么是关于http://stackoverflow.com/questions/3109158/how-to-draw-a-path-on-a-map-using-kml-file/3109723#3109723 –

回答

0

您需要使用地理URI方案语法你的意图的数据:

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

在这个答案的代码为我工作:使用轨迹免费(从市场 How to plot a pre-build map from google maps on a MapView

+0

这是行不通的,地图搜索本地名为'file:/// sdcard/example.kml' – Rodrigo

+0

同样在这里..没有文件..如果我删除geo:0,0?q = .. Google earth只能打开..奇怪... –

1

I'm ),这是一个地图遮阳板,可以打开.kml文件,如从谷歌地图中捕获的那些文件,但是也能够从谷歌导入.kml文件,它不会让你看到卫星视图,只有您添加的标记以及道路和地理名称等地形特征。

1

由于您的应用程序可能会或可能无法访问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文件发布到文件服务器并以此方式访问它即可。

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

0

我并不感到惊讶的是,上述不适用于我(在Android v2.1),因为我认为所有的地图都是将查询字符串发送到服务器来处理。服务器可以处理http://,因为(通常的互联网警告!)文件可以从任何地方获取。但它无法处理file://,因为这只意味着始发设备上的某些东西,而服务器却无能为力。我不相信Google地图可以处理本地KML文件,至少这样。但是,如果以传统DOS命令行方式给出本地文件名,Windows Mobile 5.0上的Google地图可以这样做。当然,这也必须在Android中,以意向方式!