Mam bazę danych, która ma 300 000 adresów, które mają być pokazane na mapie. Wiem, że jeśli geokoduję cały adres, będzie to dla mnie zbyt kosztowne. Zastanawiałem się więc, czy możliwe jest geokodowanie adresu w locie / w czasie rzeczywistym, kiedy użytkownik wybierze adres (adres nieruchomości), przeszuka bazę danych, a następnie geokoduje adres, a następnie zmapuje go za pomocą inne atrybuty.
Byłoby naprawdę miło, gdybyś mógł udostępnić kod, koncepcję lub cokolwiek innego. Nawiasem mówiąc, mój backend jest na mysql obsługiwanym przez Joomla.
google-maps
geocoding
php
mysql
google-maps-api
użytkownik1089553
źródło
źródło
Odpowiedzi:
Mehul, pracowałem w branży weryfikacji adresów w firmie SmartyStreets. Istnieje wiele usług geokodowania, ale tylko nieliczne obsługują przetwarzanie wsadowe z wymaganym wolumenem. (Google i inni nie zezwalają na masowe korzystanie z interfejsu API lub przechowywanie / buforowanie wyników).
Jeśli przejdziesz do bazy danych MySQL i wykonasz eksport tabeli zawierającej adresy, zapisz ją na przykład jako plik CSV. Następnie możesz go przetworzyć za pomocą narzędzia internetowego SmartyList lub narzędzia wiersza poleceń . Tak jak powiedziałem, istnieje kilka usług, ale przypuszczam, że będziesz czegoś potrzebować, co weryfikuje również istnienie adresów (stąd przyczyna geokodowania) - jeśli adres jest nieprawidłowy lub niekompletny, podobnie jak wyniki geokodowania . Robi to tylko kilka usług.
LiveAddress to usługa posiadająca certyfikat CASS wydany przez USPS. Jest ich kilka, więc przeszukaj swoje badania, ale chcesz czegoś „w locie” / szybkiego i niedrogiego, więc znów polecam LiveAddress. Nie tylko zweryfikuje adres, ale następnie wykona to, czego potrzebujesz, podając informacje o długości i długości geograficznej, a także dokładność wyników geokodowania. Wszystko jest oparte na sieci Web i przetworzy dziesiątki milionów rekordów w krótkim czasie (zobacz to pytanie jako odniesienie ).
Jeśli potrzebujesz więcej geokodować adresy podczas interakcji użytkowników, LiveAddress ma również wersję API, która może podłączyć się do prawie wszystkiego i obsługuje również przetwarzanie wsadowe w locie, ale jest opłacane jako subskrypcja, a nie jednorazowo Zapłata.
źródło
Jeśli podoba Ci się Python, możesz użyć GeoPy API w połączeniu z powiązaniami GDAL Python lub Fiona i stworzyć bardzo prosty skrypt do konwersji adresów na punktowy plik kształtu.
Spowoduje to geolokalizację pliku o nazwie „adres_do_geokodu”, tworząc wyjściowy plik kształtów o nazwie „my_output.shp” w folderze my_output:
Plik powinien zawierać tylko wiersz dla jednego adresu, na przykład:
Tutaj korzystam z Google API, ale GeoPy jest bardzo prosty, aby przejść do różnych API, takich jak Yahoo !, GeoNames lub MapPoint .
źródło
Inną opcją rozwiązania problemu byłoby zaimportowanie zestawu danych do tabel syntezy i ustawienie pola adresu jako lokalizacji. Następnie automatycznie geokoduje punkty. Po zakończeniu możesz wyeksportować dane jako KML.
Lub ... alternatywnie, możesz napisać skrypt php, aby skorzystać z geokodera yahoo, który ma limit 50 000 rekordów, więc prędzej czy później będziesz mieć wszystkie swoje punkty geokodowane w bazie danych.
Mam nadzieję, że to pomogło!
źródło
zdecydowanie najlepszy i najłatwiejszy geokoder, z którego korzystałem https://pypi.python.org/pypi/geocoder/1.8.0 mapy bing, mapy google, OSM itp.
źródło
Może nie najlepsza odpowiedź na twoje pytanie, ale możesz spróbować BatchGeo. Darmowa wersja sprawiłaby, że dużo cierpiałeś, ale wciąż był wystarczająco dobry dla mojej pracy. Chociaż kupiliśmy wersję Pro.
Sztuką, aby uzyskać współrzędne z pliku KML, jest później zaimportować go do ArcGIS.
źródło
Z powodzeniem korzystam z geofonii korzystającej z usługi geokodowania Google. Działa idealnie do 2k punktów na 24 godziny.
źródło
Matej, to dlatego, że Google API pozwala pobierać do 2,5 tys. Dziennie.
Jeśli chodzi o rozwiązanie Geo, partia nie jest jeszcze obsługiwana, ponieważ z mojej recenzji kodu geo python wydaje się, że otwiera połączenie za każdym razem, gdy poprosi o nowy cordinate, 300k prawdopodobnie utknie na zawsze (prawdopodobnie z błędem 400).
Zagraj w Poligons powinno załatwić sprawę, ale zależy to od tego, jaki jest twój obszar gry, jeśli jest to 1 kraj lub n krajów.
Dla 1 kraju wielokąty powinny działać całkiem nieźle.
W przypadku n krajów rozwiązanie nie będzie działać, ponieważ pobieranie potrwa dłużej za każdym razem, gdy dodasz inny kraj. Najlepszym sposobem na zrobienie tego jest leniwe ładowanie.
=> zacznij od pomysłu wielokąta, wszystko w innym kraju, stwórz dużą bazę danych do przechowywania danych, w końcu będziesz przechowywać dane, których potrzebujesz, jak sądzę.
źródło
Jeśli chcesz to zrobić za pomocą PHP - MySQL jest rozwiązaniem, które działało dla mnie:
źródło
Wypróbuj interfejs API geokodowania . Jest bezpłatny dla małego użytku, ale jeśli chcesz więcej, płacą. Jest jednak tani i można to łatwo przetworzyć, przetwarzam miliony miesięcznie za ich pośrednictwem.
źródło
Możesz zapisać swoje dane jako plik tekstowy (jeden rekord na linię), a następnie wsadować geokodować za pomocą tej usługi: http://geocode.xyz/batch (działa w większości krajów europejskich)
lub możesz napisać własny kod, aby uzyskać dostęp do interfejsu API REST / JSON: http://geocode.xyz/api (jest bezpłatny dla nieograniczonej liczby wyszukiwań)
źródło
Użyj narzędzi do mapowania (Wskazywanie mapy | Boc Geocoding Tool ( http://www.mappointing.com/ )) W tym narzędziu możesz przetwarzać dane za pomocą darmowego klucza API do map Google. A także to narzędzie zapewnia narzędzie do obliczania odległości i wyszukiwania miejsca.
źródło