【发布时间】:2011-04-28 07:49:18
【问题描述】:
有人可以告诉我是否有办法将 kml 文件加载到 android 中的谷歌地图中。
谢谢
【问题讨论】:
标签: android google-maps google-maps-api-3 kml
有人可以告诉我是否有办法将 kml 文件加载到 android 中的谷歌地图中。
谢谢
【问题讨论】:
标签: android google-maps google-maps-api-3 kml
请在此处找到从 google 获取 kml 数据并将其绘制到地图上的代码示例:
【讨论】:
几个月前,我一直在寻找类似的功能,但找不到从 SDCard 加载文件的方法 - 甚至无法使用内容提供程序。 从那以后我就没看过了。
但是我发现了一种方法,由于我已经在与网络服务器通信,因此证明它很有用
getting maps to accept a dynamically generated KML file?
这允许我将 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 列表供地图应用使用。
下面是cmets之后的更新:
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 文件,在这种情况下是来自谷歌的示例文件。这是一个带有叠加层的地图,但它现在是 google 地图应用程序,不再在您的应用程序中运行。
对于此解决方案,您需要将 KML 文件存储在某处的网络服务器上 - 这有一个小问题,因为用户需要数据连接(地图无论如何都需要数据连接 - 但如果 kml 文件很大并且连接速度慢,可能会有延迟)。
你提到你有一个服务器产生一些动态数据和一些静态数据。如果每个人的静态内容都相同,并且每次服务器生成一些数据时,我都会想让 Web 服务器生成一个格式良好的 KML 文档,包括两组数据 - 据我所知,谷歌地图应用程序只会从网络服务器加载一个 KML 文件。
我使用过的另一种解决方案已在上面发布 - 如果您在手机上有静态数据(我会使用带有数据的数据库),创建一个覆盖项目,并请求来自服务器的动态结果,将它们添加到自定义叠加层。此选项意味着您必须编写任何您想要的额外功能 - 即在地图上搜索位置、卫星视图..... 确保在单独的线程而不是 UI 线程中执行操作,特别是在构建大型叠加层时,否则您可能会收到强制关闭/等待对话框。
【讨论】:
我在地图上使用了 GPX 文件(Android 1.5),但没有任何东西可以加载 KML 或 GPX。如果没有在较新版本的 Android 中添加,我想您必须自己阅读该文件。这就是我 10 个月前所做的...
【讨论】: