Google Maps w aplikacji

Witam!

Moja aplikacja ma bazę z adresami, niech to będą np. stacje benzynowe.
Wyszukiwanie: użytkownik podaje swój aktualny adres i maksymalną odległość, a aplikacja pokazuje zaznaczone na mapie stacje w podanym maksymalnym promieniu/odległości.

Może ktoś mi podpowie jak się za to zabrać …?
Jak na razie dotarłem do tego, że chyba najlepiej będzie wykorzystać GeoKit…?

Sphinx ma wbudowane wyszukiwanie lokacji będących najbliżej podanego miejsca. Dodatkowo można tam bardzo łatwo poustawiać powiązania dzięki czemu nie trzeba bawić się w różnego rodzaju inner joiny obciążające bazę danych.

Jeżeli chcesz zrobić dodatkowo filtrowanie po jakichś atrybutach, to thinking sphinx będzie jak ulał.

Dzięki. Nie wiedziałem.

Mam teraz inne pytanie :slight_smile:
Wiadomo, że za pomocą GeoKit podając współrzędne lub adres można wyznaczyć punkt na mapie, ale czy działa to w drugą stronę? Klikając punkt na mapie dostajemy informację zwrotną ze współrzędnymi…?
Przejrzałem trochę tutoriali i żaden nie opisuje takiej funkcjonalności.

Oczywiście że jest callback po umieszczeniu znacznika, zwracający dokładnie parę długość, szerokość (oczywiście floaty). To chyba pierwszy opisywany w dokumentacji :wink:

Natomiast ustalenie najbliższego adresu do danego punktu – to tego już nie wiem.

da się, to tzw. reverse geocoding: http://geokit.rubyforge.org/readme.html

Konkretnie. Rozpatruję taką sytuację. Użytkownik chce dodać nowy punkt, ale nie zna adresu ani współrzędnych, więc klika na mapę i adres lub współrzędne danego punktu przychodzą jako zwrot i są zapisywane do bazy.

Sokoro mówicie, że się da to super.
Muszę zacząć dokładniej czytać dokumentację …i instrukcję do sprzętów AGD :wink:

To autor miał na myśli:
http://public.mymanufactory.com/projects/googlemaps/

Miał nadzieję, że taki GeoKit ma już to zaprzęgnięte :wink:

Przecież to jest funkcja dostępna w Google Maps API, jeśli zajrzysz do źródeł tej strony to znajdziesz:

GEvent.addListener(map,"click", function(overlay,latlng) { ... var myHtml = "Zaznaczyłeś punkt o dł. i szer.: <br/>" + latlng.lng() + "<br />" + latlng.lat(); });

hosiawk: dokładnie, testowałem API Google Maps :slight_smile:

Chodziło mi tylko o to, że może coś takiego jest już w jakimś stopniu gotowe w GeoKit lub innym pluginie.

Moim zdaniem używanie wszelkiego rodzaju wrapperów generujących z rubiego kod javascript to porażka, ale co kto lubi :slight_smile:

@drogus: generalnie nie lubię :slight_smile:

Niby tak, ale RJS się czasem aż przyjemnie używa :slight_smile:

Trzeba tutaj rozróżnić 2 rzeczy: interakcja z mapą po stronie klienta (Google Maps API) i GeoKit (geolokalizacja po stronie serwera, przechowywanie danych w bazie etc., rozne helpery do Rubiego)

Jeśli chodzi nam o “klikanie punktu na mapie” to trzeba zacząć od Google Maps API, ewentualnie dodając funkcje, które będą wysyłać dane do serwera (jeśli mają być przechowywane). Geokit’a nie mieszałbym do tego - jeśli piszemy wysoce “interaktywną” aplikację to nie ma lekko - trzeba zakasać rękawy, wyciągnąć tą zakurzoną książkę “Javascript w 24h”, skonfigurować swój ulubiony edytor do pracy z JS i zabrać się do roboty :wink:

Ech, a tak Cię szanowałem :wink:

Robimy flejma? :smiley:

Panowie,

User ma mieć możliwość dodania lokalizacji. Wyświetlana jest Gmapka - kolo sobie klika i w tym miejscu pojawia się marker. Po dodaniu innych atrybutów i kliknięciu dodaj - nowa lokalizacja ma być zapisana do bazy.

Doszedłem do punktu, w którym mam longitude i latitude w parametrach.

Kontroler i params-y :
http://pastie.org/538446

Ponieważ js nie do końca jeszcze ogarniam, nie wiem jak to przekazać do create i w ogóle nie jestem pewien czy tędy droga - czy znalazłby się ktoś, kto by mnie tu trochę poprowadził, ew. jakiś tutorial wskazał … ??

Właśnie rozgryzam ten temat i wydaje mi się, że obsługę Gmapki wrzuciłbym w całości do JS. Klikasz Gmapkę i JS ustawia marker i wrzuca dane w pola formularza. Następnie użytkownik wypełnia, co tam jeszcze ma wypełnić i Submit …

Nie wiem, czy to najlepsze rozwiązanie …?!

też mi się wydaje że to najlepsza droga … nie wiem dlaczego po zapisaniu do bazy ucina mi długość i szerokość geograficzną (floaty) do 4 miejsc po przecinku ??

Musisz stworzyć w bazie pola o większej precyzji, daj w migracji:

t.decimal "lat", :precision => 15, :scale => 10 t.decimal "lng", :precision => 15, :scale => 10

fakt, z decimalem z określonym zakresem działa OK, myślałem że float to przyjmie bez dodatkowych deklaracji …
dzięki …