2010-04-13 8 views
8

Właśnie kupiłem smartfon Google Nexus One i chcę napisać małą aplikację na Androida dla zabawy. Przypuśćmy, że mogę uzyskać aktualne współrzędne GPS, więc jak mogę programowo znaleźć pobliskie punkty orientacyjne lub punkty szczególne w pewnym promieniu? Czy istnieje interfejs API, który pozwala uzyskać znaczniki geograficzne oznaczone symbolem GPS, np. W bazie danych Google Earth?Podane współrzędne GPS, jak znaleźć pobliskie punkty orientacyjne lub punkty szczególne?

Na przykład, jeśli jestem w centrum Chicago, mój program wskaże mi wszystkie "turystyczne" rzeczy do odwiedzenia w tym mieście.

Najlepiej byłoby, gdyby wszystko działało na moim smartfonie, ale jeśli to konieczne, mogę poprosić smartfon o wysłanie zapytania do serwera WWW, który będzie wtedy wyświetlał więcej zapytań.

+0

Czy spojrzałeś na mapy Google api? – Jay

+0

Zostałeś już pokonany; istnieje aplikacja o nazwie "Katalog Miejsc" napisana przez Google, która robi dokładnie to, co opisujesz. –

+0

@Daniel Lew Nie mam zamiaru pisać własnego wniosku o dystrybucję. Chcę wypróbować różne interfejsy API. – stackoverflowuser2010

Odpowiedz

3

Zależy gdzie jesteś uzyskiwanie danych z punktów orientacyjnych. Jeśli chcesz wykonać kwerendę internetową, możesz uruchomić jedną z powyższych rzeczy.

Alternatywnie - jeśli masz własne dane, możesz je zapisać w db za pomocą wartości lat i lon, a następnie utworzyć prostokąt ograniczający dla zapytania. To pytanie powie Ci jak obliczyć obwiedni, który obejmuje dany promień wokół aktualnego punktu (będzie to pole, więc będzie większa niż okręgu ....

How to calculate the bounding box for a given lat/lng location?

Używanie ograniczającego możesz teraz wykonać zapytanie z db where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon, które da ci wszystkie interesujące punkty w tym pudełku:

Następnie, używając klasy Lokalizacja w api aplikacji Android, możesz pobrać ją do obliczenia namiaru i odległości do każdego z haseł, a następnie możesz na przykład posortować według promienia ze swojej pozycji:

+0

To świetna pomoc. Załóżmy, że chcę przechowywać własne punkty orientacyjne i wdrożyć własną usługę wyszukiwania; jeśli mam N punktów orientacyjnych, musiałbym wykonać wyszukiwanie O (N) przez wszystkie z nich, aby znaleźć najbliższy. Czy istnieje struktura danych lub podejście, które poprawi się podczas tego wyszukiwania? Myślałem o implementacji drzewa dwupoziomowego (jeden poziom szerokości geograficznej, inny poziom dla długości geograficznej) lub drzewa kd lub kwadratu. Jakieś pomysły? – stackoverflowuser2010

+0

Pomysł polegałby na tym, że indeksujesz na długości i długości, co oznacza, że ​​znalezienie wszystkiego w obrębie prostokąta byłoby dość szybkie. Po wykonaniu tego, masz tylko ograniczony zestaw rzeczy, które musisz wykonać, O (n) do pracy. Możesz również zacząć od naprawdę małego prostokąta, a następnie zapytać na zewnątrz (z wyłączeniem wewnętrznego prostokąta), aby dodać więcej wyników, jeśli uznasz to za konieczne. – Fiid

+0

Nawiasem mówiąc - uważam, że prawdziwe bazy danych geo mają więcej sprytu na ten temat. Zaimplementowałem wyszukiwanie geograficzne na Androidzie przy użyciu tego accacddh i działa ono dość szybko. Moja aplikacja znajduje wszystkie lotniska i heliport w promieniu 50 minut. – Fiid

2

Najszybszym sposobem, aby to zrobić:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=business+near+city"); 
startActivity(intent); 

Po geo umieścić swoje współrzędne, a po q = wprowadzisz swoimi tearms wyszukiwania, jak turystyka + miasto. Spowoduje to uruchomienie aplikacji Mapy Google z interesującymi miejscami docelowymi.

Jeśli chcesz użyć widoku mapy wewnątrz aplikacji, musisz pobrać dane z usługi, np. Własnej. Możesz jednak pobrać dane z wyszukiwarki ajaxowej Google'a w ten sposób: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago Więcej informacji tutaj: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local Daje to wyniki, które mają współrzędne geograficzne i trzeba by zrobić sposób analizowania wyników i może je wprowadzić w Baza danych.

+0

Dzięki. Nie chcę koniecznie uzyskać pobliskich punktów zainteresowania w postaci mapy. Wolałbym, żeby został zwrócony w XML. – stackoverflowuser2010

+0

W takim razie api ajax powinno działać dla ciebie, ale myślę, że działa tylko z jsonem. –

1

Jednym z przyjaznych dla programistów źródeł danych, z których można korzystać, jest http://compass.webservius.com - baza danych zawierająca miliony wpisów o firmach w USA, z możliwością łatwego wyszukiwania za pomocą ramki ograniczającej współrzędne za pomocą interfejsu API REST.

1

Foursquare ma świetny interfejs API, który udostępnia dane o firmach i innych interesujących miejscach z uwzględnieniem współrzędnych GPS. Nie wymaga logowania użytkownika, aby uzyskać dostęp. Baza danych jest stale obsługiwana przez użytkowników foursquare.

https://developer.foursquare.com/overview/venues

+0

Rad. Dziękuję za udostępnienie. – Nick