Suite

Pouvons-nous limiter la plage de recherche de la fonction geocode() dans PostGIS Tiger Geocoder ?

Pouvons-nous limiter la plage de recherche de la fonction geocode() dans PostGIS Tiger Geocoder ?


J'ai trouvé que le serveur avec seulement 2 états chargés est beaucoup plus rapide que le serveur avec tous les états chargés. Ma théorie est qu'une adresse mal formatée qui n'a pas d'accès exact au début coûtera beaucoup plus de temps lorsque le géocodeur vérifiera tous les états. Avec seulement 2 états, cette recherche est limitée et arrêtée beaucoup plus tôt.

Il y a unrestreindre_régionparamètre dansgéocoderLa fonction semble prometteuse si elle peut limiter la plage de recherche, car j'ai suffisamment d'informations ou de raisons de croire que les informations d'état dans mes adresses saisies sont correctes. J'ai écrit une requête en essayant d'utiliser la géométrie d'un état comme paramètre limite :

SELECT geocode('501 Fairmount DR , Annapolis, MD 20137', 1, the_geom) FROM tiger.state WHERE statefp = '24';

et comparé les performances avec la version simple

SELECT géocode('501 Fairmount DR , Annapolis, MD 20137',1) ;

ÉDITER Notez que la ville et le code postal dans cette entrée sont faux, ce qui est intentionnel. Si l'adresse est parfaite, il ne sert à rien de limiter la plage de recherche puisque le géocodeur peut aller dans la bonne table au premier essai. Seule cette tentative n'a de sens que lorsque le code postal ou la ville est erroné.

Je n'ai pas trouvé de gain de performances avec le paramètre. Au lieu de cela, il a perdu le gain de performances de la mise en cache, qui provenait généralement de la réexécution immédiate de la même requête, car toutes les données nécessaires ont été mises en cache dans la RAM.

Peut-être que mon utilisation n'est pas appropriée ou que ce paramètre n'est pas destiné à fonctionner comme prévu. Cependant si la plage de recherche peut être limitée, le gain de performances pourrait être substantiel, car ce sont les adresses mal formatées qui ont pris le plus de temps à géocoder, et elles gâchent aussi souvent les données déjà mises en cache car le géocodeur a besoin de rechercher des états, même tous mes entrées sont dans un état et toutes les données peuvent être mises en cache dans la RAM.


dracodoc,

Pas de surprise, le filtre géométrique n'augmente pas les performances. Il a été plus conçu pour empêcher la correspondance avec des zones où absolument une adresse ne peut pas exister. Vous pouvez essayer de simplifier la géométrie avec ST_Simplify, mais même cela pourrait ne pas aider beaucoup.

Idéalement, vous voudrez peut-être d'abord normaliser les adresses, surtout si votre problème est une mauvaise normalisation, puis filtrer uniquement celles qui tombent dans le bon état.

Donc quelque chose comme :

AVEC addys AS (SELECT original_address, normalize(original_address) As addy FROM your_table LIMIT 100) SELECT geocode(addy,1) FROM addys WHERE (addy).stateAbbrev = 'MD';

S'il peut déterminer l'adresse, il devrait être assez intelligent pour aller tout de suite aux bonnes tables. Si vous remarquez un ralentissement important, assurez-vous d'avoir indexé et analysé le vide à partir des tables parent. Cela est souvent à l'origine du géocodage lent lorsque vous ajoutez plus d'états. J'ai oublié cela moi-même à plusieurs reprises et je me suis demandé pourquoi les choses étaient si lentes.

SELECT install_missing_indexes(); analyse à vide verbeux tiger.addr; analyse sous vide tiger.edges verbeux; analyse à vide verbeux tigre.faces; analyse sous vide tiger.featnames verbeux; analyse sous vide verbeux tiger.place; analyse sous vide verbeux tiger.cousub; analyse à vide verbeux tiger.county; analyse sous vide verbeux tiger.state;

Voir la vidéo: Nominatim OpenStreetMap REVERSE GEOCODING. LATITUDE u0026 LONGITUDE coordinates to STREET ADDRESS