2010-10-20 14 views

Odpowiedz

8

Proszę znaleźć tutaj przykładowy kod, który pobiera dane z Google KML i wciąga go na mapie:

How to draw a path on a map using kml file?

+0

@Mathias ... dziękuję bardzo! ale jeśli mogę cię zapytać. czy jest sposób na dostęp do kml z karty SD telefonu. kml, którego używam, nigdy się nie zmieni. więc nie ma sensu odbierać go z serwera za każdym razem, gdy włączasz aplikację. jeszcze raz dziękuję –

+0

oczywiście, możesz umieścić go w pliku tekstowym i przeczytać go za pomocą zwykłych metod java.io.file –

+0

, więc chcesz powiedzieć ... Muszę skopiować zawartość kml do pliku tekstowego i przeanalizować go za pomocą metody io .. (tokenizer i inne podobne rzeczy)? nie można przechowywać kml w telefonie i użyć parsera sax do przeanalizowania go? –

0

użyłem plików GPX na mapie (Android 1.5), ale nie było nic, aby załadować plik KML lub GPX. Jeśli nie został dodany w nowszych wersjach Androida, domyślam się, że musisz sam przeczytać ten plik. To, co zrobiłem 10 miesięcy temu ...

3

Kilka miesięcy temu szukałem podobnej funkcji, ale nie mogłem znaleźć sposobu na załadowanie pliku z karty SD - lub nawet za pomocą dostawcy treści. Nie oglądałem się od tego czasu.

jednak jedna metoda Zauważyłem, które okazały się przydatne, jak byłem już komunikowania się z serwera WWW

getting maps to accept a dynamically generated KML file?

To pozwoliło mi wysyłają KML z mojej aplikacji na serwerze (Komunikowanie był już na miejscu), serwer przechowywane KML, przypisany losowy ciąg, i powrócił go do aplikacji, aplikacja następnie przekazywane link do serwera w stylu:

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); 

serwer zwrócił Lista KML dla aplikacji mapy do użycia.

Aktualizacja po komentarzach poniżej:

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); 

Spróbuj uruchomić powyższy kod - będzie można zobaczyć, kiedy go uruchomić, mapa aplikacja Google jest otwarty i będzie zwrócić się do pliku KML, w tym przypadku próbki pliku z google. Jest to mapa z nakładką, ale jest teraz aplikacją mapy google i nie jest już uruchamiana w aplikacji.

Aby to rozwiązanie trzeba było gdzieś przechowywać plik KML na serwerze sieciowym - ma to niewielki problem, ponieważ użytkownik potrzebuje połączenia danych (które mapa i tak by potrzebowała - ale jeśli plik kml jest duży i połączenie zwolnione może być opóźnienie).

Wspomniałeś, że masz serwer produkujący dynamiczne dane, a także pewne statyczne rzeczy. Jeśli statyczny materiał jest taki sam dla wszystkich i za każdym razem, gdy serwer produkuje jakieś dane, byłbym pokusiłby się, aby serwer WWW wyprodukował jeden dobrze sformatowany dokument KML zawierający oba zestawy danych - aplikację map Google, o ile wiem, że tylko załaduj jeden plik KML z serwera WWW.

Drugie rozwiązanie, z którego korzystałem, zostało zamieszczone powyżej - jeśli masz dane statyczne w telefonie (chciałbym użyć DB z danymi), utwórz nakładkę rysującą elementy, a także zażądaj dynamicznych wyników z serwera, dodaj je do niestandardowej nakładki. Ta opcja będzie oznaczać, że będziesz musiał kodować dowolną dodatkową funkcję, którą chcesz - tzn. Przeszukując mapę pod kątem lokalizacji, widoku satelitarnego ..... Upewnij się, że wykonujesz operację w osobnym wątku, a nie w wątku interfejsu użytkownika, szczególnie podczas budowania duże nakładki lub prawdopodobnie pojawi się okno dialogowe Wymuszanie zamykania/Czekaj.

+0

@Scoobler ... dzięki za to. Więc jak mogę położyć ten plik kml na mapie google? –

+0

@raqz co dokładnie masz na myśli?Czy masz plik kml, który chcesz nałożyć na mapę - czy masz zestaw współrzędnych i szukasz sposobu na pokazanie ich na mapie, np. Dynamicznie tworząc plik kml? – Scoobler

+0

@Scoobler ... Mam plik kml, którego dane są stałe. Muszę wykreślić te geometrie w kml na mapie, tj; nakładki, które na mapie google. Mam również inny plik kml, który jest generowany dynamicznie na serwerze i muszę wyświetlać to samo na telefonie. więc struktura byłaby, najpierw mapa google, następny stały plik kml, a następnie na szczycie obu tych obiektów ... dynamicznie generowany kml. czy jest jakiś sposób. naprawdę doceniam twoją pomoc ... dziękuję –