簡體   English   中英

Android-如何使用Intent和KML打開Goog​​le地圖?

[英]Android - How to open google maps with Intent and KML?

我需要使用在SD卡上已存在的kml文件打開Goog​​le地圖。 (/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);
  • 關於此問題的其他兩個未解決的主題:

在Android上的Google Maps中打開本地KML文件

Android API是否支持KML文件?

知道如何打開此kml嗎?

謝謝!!!

由於您的應用可能會或可能無法訪問sdcard(例如,它可能會或可能不可用),因此最可靠的解決方案是將KML文件發布到網絡上並收費(我假設您擁有網絡訪問權限,因為google地圖不會在離線狀態下大量使用,甚至無法預取圖塊)。

即使您必須為此付出代價(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] ,則可能可以擺脫實時更新。

我正在使用Locus Free(來自市場),這是一個地圖遮陽板,能夠打開.kml文件(例如從Google地圖,BUT中捕獲的文件),並且能夠從Google導入.kml文件,不要讓您看到衛星視圖,只能看到您添加到其中的標記以及一些地形特征(例如道路和地理名稱)。

對於上面的內容對我不起作用(在Android v2.1上),我並不感到驚訝,因為我認為所有Maps所做的就是將查詢字符串發送到服務器進行處理。 服務器可以處理http://,因為(通常有互聯網警告!)文件可以從任何地方獲取。 但是它不能處理file://,因為這僅意味着原始設備上的某些內容,而服務器則無能為力。 我認為Google Maps至少不能以這種方式處理本地KML文件。 但是,如果以傳統的DOS命令行方式為其指定了本地文件名,則Windows Mobile 5.0上的Google Maps可以這樣做。 當然,這也必須是意向性地在Android中!

您需要對Intent數據使用geo URI方案語法:

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

此答案中的代碼對我有用: 如何在MapView上從Google地圖繪制預構建地圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM