Android:如何加载 KML

问题描述 投票:0回答:4

有人可以告诉我是否有一种方法可以将kml文件加载到android中的谷歌地图中。

谢谢

android google-maps google-maps-api-3 kml
4个回答
8
投票

请在此处找到一个代码示例,该示例从 google 获取 kml 数据并将其绘制到地图上:

如何使用kml文件在地图上绘制路径?


3
投票

几个月前,我一直在寻找类似的功能,但找不到从 SDCard 加载文件的方法,甚至找不到使用内容提供程序的方法。 从那以后我就没看过。

但是我发现了一种方法,事实证明它很有用,因为我已经在与网络服务器进行通信了

让地图接受动态生成的 KML 文件?

这允许我将 KML 从我的应用程序分派到服务器(通信已经就位),服务器存储 KML,分配一个随机字符串,并将其返回到应用程序,然后应用程序将链接传递到服务器风格:

final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://website.com/kml_gen.php?id=1kj312"));
startActivity(myIntent);

服务器返回一个 KML 列表供地图应用程序使用。

以下评论后的更新:

final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://code.google.com/apis/kml/documentation/KML_Samples.kml"));
startActivity(myIntent);

尝试运行上面的代码 - 当你运行它时,你会看到谷歌地图应用程序被打开,并且它将请求 kml 文件,在本例中是来自谷歌的示例文件。这是一个带有叠加层的地图,但它现在是谷歌地图应用程序,不再在您的应用程序内运行。

对于此解决方案,您需要将 KML 文件存储在 Web 服务器上的某个位置 - 这有一个小问题,因为用户需要数据连接(地图无论如何都需要 - 但如果 kml 文件很大并且连接速度很慢可能会有延迟)。

您提到您有一台服务器生成一些动态数据和一些静态数据。如果每个人的静态内容都是相同的,并且每次服务器生成一些数据时,我都会想让网络服务器生成一个格式良好的 KML 文档,包括两组数据 - 谷歌地图应用程序,据我所知只会从网络服务器加载一个 KML 文件。

我使用的另一种解决方案已在上面发布 - 如果您手机上有静态数据(我会使用带有数据的数据库),请创建一个覆盖层来绘制项目,并请求动态数据来自服务器的结果,将它们添加到自定义叠加层中。此选项意味着您必须编写您想要的任何额外功能 - 即在地图上搜索位置、卫星视图...... 请务必在单独的线程而不是 UI 线程中执行该操作,特别是在构建大型覆盖时,否则您可能会收到强制关闭/等待对话框。


0
投票

我在地图(Android 1.5)上使用了 GPX 文件,但没有任何东西可以加载 KML 或 GPX。如果新版本的Android中没有添加它,我想你必须自己阅读该文件。这就是我10个月前所做的...


0
投票

我知道这是一个老问题,但以防万一有人仍然遇到问题,那么以下代码对我有用。

干杯,祝编程愉快。

尝试 {

File   trackFile;
Uri    trackUri;

trackFile = new File (<the full path to file containing KML commands>);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
{
    trackUri = Uri.fromFile (trackFile);
}
else
{
    trackUri = FileProvider.getUriForFile (context,
                    context.getPackageName() + ".fileprovider",
                        trackFile);
}

if (trackUri != null)
{
  
    Intent trackIntent = new Intent(Intent.ACTION_VIEW,trackUri);
    trackIntent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
    trackIntent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION);
  
    trackIntent.setPackage (“com.google.earth”)
  
    context.startActivity (trackIntent);
  
}

} 捕获(ActivityNotFoundException theException) { }

© www.soinside.com 2019 - 2024. All rights reserved.