我需要使用已存在于SD卡上的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);
另一个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 :(得分:1)
我正在使用Locus Free(来自市场),这是一个地图遮阳板,能够打开.kml文件,如从谷歌地图捕获的那些文件,但也能够从谷歌导入.kml文件,它不会让你看到卫星视图,只有你添加到它的标记和一些地形特征,如道路和地名。
答案 1 :(得分:1)
由于您的应用可能会或可能无法访问SD卡(例如,它可能也可能不可用),最可靠的解决方案是将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]
,您可以通过实时更新来逃脱。
答案 2 :(得分:0)
您需要为Intent数据使用geo URI方案语法:
Uri.parse("geo:0,0?q=file:///sdcard/example.kml")
这个答案中的代码对我有用: How to plot a pre-build map from google maps on a MapView
答案 3 :(得分:0)
上述对我不起作用(在Android v2.1上)我并不感到惊讶,因为我认为所有的地图都是将查询字符串发送到服务器来处理。服务器可以处理http://因为(通常的互联网警告!)文件可以从任何地方获取。但它无法处理file://因为这只意味着原始设备上的某些东西,服务器无法做任何事情。我不相信谷歌地图可以处理本地KML文件,至少这样。但是,如果以传统的DOS命令行方式为本地文件命名,则Windows Mobile 5.0上的Google Maps可以这样做。当然,这也必须在Android中,以一种意志的方式!