Suite

Quelle est la meilleure façon de faire du géocodage inversé avec PostGIS ?


Existe-t-il un moyen de faire un géocodage inversé avec PostGIS ? Il y a beaucoup d'informations sur le Web mais j'ai trouvé cela très confus…

J'ai importé des données osm dans ma propre base de données Postgres avec PostGIS. Maintenant, je veux faire du géocodage et du géocodage inversé avec ma base de données. Je ne sais pas s'il existe des procédures stockées ou un projet quelque part qui s'occupe de mon problème.

La prochaine étape que je souhaite faire est de créer un service Web capable de gérer ce type de requêtes, mais c'est une autre question.


Enfin, je comprends comment faire du géocodage et du géocodage inversé avec ma base de données PostGIS. J'ai créé une procédure stockée qui trouve les types de géométrie proches d'un point. Cette procédure stockée utilise la fonction de distance pour obtenir les points les plus proches. Après cela, j'ai créé une API RESTful qui appelle cette procédure stockée pour résoudre les demandes de géocodage inversé.

Corrigez-moi si je me trompe, mais j'ai compris que le projet Nominatim crée une API pour les bases de données qui ont été importées depuis OSM. Vous n'avez donc pas besoin de créer de procédure stockée pour le géocodage inversé et le géocodage. De plus, vous n'avez pas besoin de créer de service Web pour résoudre les demandes via le Web.

J'espère que cela aide quelqu'un.

CREATE OR REPLACE FUNCTION reverse_geocode (lat double precision, lon double precision) RETOURNE le texte AS $BODY$ déclare la géométrie du point ; enregistrement d'enregistrement ; géocoder du texte ; begin point := geomfromtext('POINT('||lat||"||lon||')', 4326); sélectionnez le nom, la distance (way, point) comme dist dans rec de mapserverdb_point order by dist asc limit 1; geocode := rec.name; return geocode; end; $BODY$ LANGUAGE plpgsql;

Le géocodeur Tiger PostGIS 2.0 a un géocodeur inversé utilisant les données Tiger. Le géocodeur s'installera correctement sur PostGIS 1.5 8.4+ ou supérieur.

Si vous êtes aux États-Unis, cela pourrait être le plus facile à utiliser car tout est emballé sous forme de fonctions plpgsql.

http://www.postgis.org/documentation/manual-svn/Extras.html#Tiger_Geocoder http://www.postgis.org/documentation/manual-svn/Reverse_Geocode.html


Nominatim inversé

Géocodage inversé Le géocodage inversé génère une adresse à partir d'une latitude et d'une longitude ou à partir d'un objet OSM. Paramètres Le format principal de l'API inverse est. https://nominatim.openstreetmap.org/reverse?<query> Il existe deux manières de spécifier l'emplacement demandé : lat=<value> lon=<value> Un emplacement géographique pour lequel générer une adresse. Les coordonnées doivent être au format WGS84 Le format principal de l'API inverse est. https://nominatim.openstreetmap.org/reverse?<query>. L'emplacement demandé peut être spécifié de deux manières : lat=<value> lon=<value>. Un emplacement géographique pour lequel générer une adresse. Les coordonnées doivent être au format WGS84. osm_type= [N|W|R] osm_id=<value> Nominatim utilise les données OpenStreetMap pour trouver des emplacements sur Terre par nom et adresse (géocodage). Il peut également faire l'inverse, trouver une adresse pour n'importe quel endroit sur la planète. Pour autant que je sache, vous pouvez afficher un tas de données à partir du géocode inversé de Nominatim. Ceci est un exemple: à partir de geopy.geocodeurs import Nominatim locator = Nominatim (user_agent=myGeocoder) coordonnées = 53.480837, -2.244914 location = locator.reverse (coordinates) location.ra j'ai besoin d'aide pour implémenter une simple fonction de géocodage inversé en javascript (ou php ) qui reçoit la latitude et la longitude et renvoie une adresse. j'aimerais travailler avec Nominatim, si possible. je ne veux PAS utiliser Google, Bing ou CloudMade ou d'autres solutions propriétaires

Nominatim fournissait l'interface de recherche directement par lui-même lorsque format=html était demandé. Pour tous les points de terminaison, à l'exception de /reverse et /lookup, c'était même la valeur par défaut. La section suivante décrit comment configurer Apache ou nginx, afin que vos utilisateurs soient redirigés vers nominatim-ui lorsqu'ils accèdent à l'URL qui présentait auparavant l'interface utilisateur Si vous faites un grand nombre de demandes, veuillez inclure une adresse e-mail appropriée pour identifier vos demandes. Voir la politique d'utilisation de Nominatim pour plus de détails. debug=[0|1] Affiche des informations de débogage de développeur assorties. Données sur les éléments internes de la logique de boucle de recherche de Nominatim et les requêtes SQL. La sortie est au format HTML (rugueux). Cela remplace le format lisible par machine spécifié. (Par défaut : 0 Cela charge actuellement le géocode `Nominatim` et en renvoie une instance, en prenant

2 nous. ''' géolocalisateur global si géolocalisateur est Aucun : essayez : depuis geopy.geocodeurs importez Nominatim sauf ImportError : retournez Aucun geolocator = Nominatim(user_agent=geolocator_user_agent) retourne géolocalisateur retourne géolocalisateur. Exemple 11 Utilisez les problèmes Nominatim sur github pour signaler des problèmes. Veuillez vous assurer d'inclure une description complète du problème, y compris la requête de recherche que vous avez utilisée, le problème avec le résultat et, si le problème concerne des données manquantes, le type d'osm (nœud, chemin, relation) et l'identifiant de l'élément qui manque

Bienvenue chez Nominatim. Il s'agit de l'interface de débogage du moteur de recherche utilisé sur le site Web OpenStreetMap. Plus d'informations Nominatim peut effectuer à la fois le géocodage avant et arrière et prend en charge tous les pays, langues et formats d'adresses dans le monde. Il est développé et maintenu par la communauté OpenStreetMap et utilisé comme service de géocodage par défaut pour les données OSM. Avantages et inconvénients de Nominatim Cela semble bien jusqu'à présent Nominatim (du latin, 'par nom') est un outil pour rechercher des données OSM par nom et adresse et pour générer des adresses synthétiques de points OSM (géocodage inversé). Il peut être trouvé sur nominatim.openstreetmap.org. Nominatim est également utilisé comme l'une des sources du champ de recherche sur la page d'accueil d'OpenStreetMap. Plusieurs sociétés fournissent des instances hébergées de Nominatim que vous pouvez interroger via une API, voir la section Alternatives ci-dessous Exécutez la commande suivante depuis votre répertoire Nominatim après avoir configuré le fichier. bash ./utils/update_database.sh. Cela obtiendra les différences du serveur de réplication, importera les différences et indexera la base de données. Le serveur de réplication par défaut dans le script ( Geofabrik) fournit des mises à jour quotidiennes

2. Lors d'une recherche inversée, les détails de l'adresse comportent des parties qui ne contiennent pas le point que je cherchais. Il existe une idée fausse commune sur le fonctionnement de l'appel d'API inversé dans Nominatim. Reverse ne vous donne pas l'adresse du point que vous avez demandé. Inverse renvoie l'objet le plus proche du point que vous avez demandé, puis renvoie l'adresse de. L'utilisation de Nominatim permet de rechercher des objets géographiques en soumettant un nom ou une adresse. Il est également possible d'effectuer un géocodage inversé, grâce auquel une adresse est trouvée en soumettant des coordonnées géographiques. C'est exactement ce dont j'avais besoin, car j'avais déjà les coordonnées et je voulais des données supplémentaires sur les emplacements trouvés à ces coordonnées


Questions fréquemment posées

Le géocodage transforme les coordonnées géographiques (latitude et longitude) en une référence géographique - telle qu'une adresse, un nom de lieu ou une localité - ou vice versa. Les bonnes personnes de Wikipédia expliquent cela bien mieux que nous.

Faites-vous du géocodage en aval ?

Oui, avec notre API, vous pouvez effectuer un « géocodage avancé », qui consiste à transformer une adresse ou un nom de lieu en coordonnées.

Et le géocodage inversé ?

Oui, nous pouvons également faire un "géocodage inversé", ce qui signifie transformer les coordonnées en un nom de lieu ou une adresse compréhensible par l'homme. Il suffit de transmettre les coordonnées sous forme de latitude et de longitude, séparées par une virgule ou un espace (URL codé) et l'API déterminera automatiquement que vous souhaitez inverser le géocodage. Voici un exemple :

Si vous souhaitez en savoir plus sur le géocodage inversé, vous trouverez peut-être utile notre guide complet sur le géocodage inversé.

Faites-vous des cartes ?

Non. Nous nous concentrons sur une seule chose : une API de géocodage. Si vous avez besoin de cartes personnalisées, il existe de nombreux excellents services. Nous recommandons Thunderforest et Stadia Maps.

Fournissez-vous le routage ?

Non. Comme ci-dessus, nous nous concentrons sur une seule chose : une API de géocodage. Si vous avez besoin de routage, nous vous recommandons de jeter un œil à Graphhopper et Verso (qui se concentrent sur l'optimisation du routage). Les deux sont d'excellentes entreprises basées sur l'open source / open data.

Fournissez-vous une API « snap to road » ?

Notre API n'accepte qu'un seul emplacement (paire de coordonnées) par demande, nous n'acceptons pas de traces ou de séries de points. Nous vous permettons de géocoder jusqu'à la route la plus proche en utilisant le paramètre optionnel roadinfo. Veuillez consulter les détails pertinents dans la documentation de l'API.

Fournissez-vous une « suggestion automatique d'emplacement » pour les formulaires de recherche ?

Non, actuellement, nous ne proposons pas de fonctionnalité de géorecherche ou de « suggestion automatique ». Nous sommes en train de le construire et espérons le lancer à l'automne 2021.

Si vous souhaitez savoir quand le service sera lancé, veuillez consulter les différentes façons de rester informé.

Fournissez-vous une adresse IP à l'emplacement (souvent appelée "geoip" ou "ip2location") ?

Non. Nous nous concentrons sur une seule chose : une API de géocodage. Si vous avez besoin de recherches d'adresses IP vers des emplacements, il existe plusieurs services gratuits et payants. Jetez un œil à ipinfo, IP Sidekick ou IP Vigilante. Nous utilisons ipinfo, comme expliqué dans cet article sur notre blog.

Puis-je utiliser OpenCage pour déterminer l'emplacement d'une personne visitant mon site Web ?

C'est un processus connu sous le nom de géolocalisation du navigateur, c'est un concept différent du géocodage. Nous avons un guide détaillé sur la géolocalisation du navigateur et comment l'utiliser en combinaison avec le géocodage.

Acceptez-vous plus d'une requête (emplacement) par requête (parfois appelée « géocodage par lots » ou « géocodage en bloc ») ?

Pour quels pays pouvez-vous géocoder ?

Ils ont tous une couverture mondiale, mondiale. Mais cela variera d'un pays à l'autre, et même à l'intérieur des pays. La couverture dépendra des sources de données que nous utilisons. Au minimum, nous sommes aussi bons qu'OpenStreetMap, et OpenStreetMap s'améliore continuellement au rythme de plusieurs millions de modifications par jour (merci les bénévoles OSM !).

Que se cache-t-il derrière l'API du géocodeur ?

D'autres géocodeurs et beaucoup, beaucoup de données ouvertes.

Certains géocodeurs open source bien connus que nous utilisons sont Nominatim, Data Science Toolkit et le géocodeur Two Fishes, mais il y en a aussi d'autres.

Tout cela repose sur des données géospatiales ouvertes, notamment OpenStreetMap, Yahoo! GeoPlanet, Natural Earth Data, Thematic Mapping, Ordnance Survey OpenSpace, Statistics New Zealand, Zillow, MaxMind, GeoNames, le US Census Bureau et les fichiers de formes de Flickr et bien plus encore. Voici la liste complète des sources de données.

Alors pourquoi ne devrais-je pas simplement utiliser ces géocodeurs open source directement ?

Tout d'abord, héberger votre propre logiciel et le maintenir à jour (et maintenir à jour les données sous-jacentes) peut être un défi technique non trivial. Cela vous coûtera du temps et des efforts. Si ce type de problème d'opsy est votre truc, allez-y. Ou vous pouvez simplement nous laisser nous en occuper et plutôt vous concentrer sur le géocodage.

Il existe d'autres services de géocodage ouverts hébergés, le plus évidemment le propre service Nominatim d'OpenStreetMap. Cependant, cela est conçu pour être utilisé comme un outil par les mappeurs, et non comme un service de géocodage au niveau de l'entreprise, et en effet, la politique d'utilisation indique explicitement qu'il "a une capacité très limitée" et que les utilisateurs peuvent être bloqués s'ils demandent trop fréquemment.

De plus, nous faisons beaucoup pour améliorer les résultats que nous vous envoyons, en ajoutant des scores de confiance, des annotations, des jolis noms bien formatés.

Enfin, vous pouvez être satisfait du fait que nous parrainons régulièrement des événements géo ouverts (nous organisons la rencontre géo Geomob), contribuant au code des principaux projets logiciels OSM, opensource nombre de nos propres projets (veuillez envoyer des correctifs !), et sont membres corporatifs de la Fondation OpenStreetMap.

J'utilise déjà l'API de géocodage de Google, pourquoi devrais-je passer au géocodeur OpenCage ?

Les deux principales raisons sont de meilleures conditions d'utilisation (car nous utilisons des données ouvertes) et un coût nettement inférieur.

Veuillez consulter notre aperçu complet de la migration à partir du géocodage Google Maps, qui explique plus en détail les différences exactes entre les services.

Cela dit, il n'est pas obligatoire que vous utilisiez uniquement notre service. De nombreuses personnes utilisent notre service ET d'autres services comme Google. Cela s'avère généralement plus rentable que d'utiliser simplement un service coûteux comme Google.

Ajouterez-vous d'autres géocodeurs à l'avenir ?

Oui, nous ajoutons régulièrement plus de géocodeurs, généralement des géocodeurs spécifiques à un pays. Veuillez nous contacter si vous avez une suggestion spécifique.

Comment sont ordonnés les résultats ?

Les résultats sont classés du plus pertinent au moins pertinent. Veuillez consulter les détails du classement sur la page API.

À quelle fréquence les données sous-jacentes sont-elles mises à jour ?

Nous mettons actuellement à jour OpenStreetMap quotidiennement. Nos expériences ont montré que des mises à jour plus fréquentes ne sont pas très utiles car elles entraînent un impact sur la vitesse de la base de données. OpenStreetMap effectue en moyenne plusieurs millions de modifications par jour.

L'API renvoie-t-elle des limites ou des polygones exacts pour les zones ?

Non. Lorsque cela est possible, nous renvoyons un cadre de délimitation (que nous utilisons pour calculer le score de confiance du résultat). Il y a plusieurs raisons pour lesquelles nous ne renvoyons pas de polygones. Tout d'abord, nous agrégeons de nombreux géocodeurs différents, et alors que certains ont des polygones dans leurs données sous-jacentes, d'autres n'en ont pas ou n'ont qu'une couverture partielle. Deuxièmement, les polygones peuvent être absolument énormes en termes de taille de données.

Puis-je utiliser l'API derrière un pare-feu ou dans un logiciel qui nécessite que les utilisateurs s'enregistrent ?

Oui. Vous pouvez utiliser notre API pour des projets publics et privés.

Puis-je utiliser l'API dans un logiciel de bureau ?

Oui. Votre logiciel n'a pas besoin d'être visible publiquement sur le Web.

Puis-je utiliser l'API dans un logiciel à code source fermé ?

Puis-je utiliser l'API dans Google Docs ou Excel ?

Oui, veuillez consulter notre tutoriel sur l'utilisation du géocodeur dans Google Sheets ou dans Excel.

Si votre feuille de calcul est un peu plus complexe, ou si vous préférez simplement laisser quelqu'un d'autre s'en occuper, nous vous recommandons de discuter avec nos amis de Clean Spreadsheets, qui sont des experts en nettoyage de données et peuvent effectuer le géocodage en utilisant notre service pour vous.

Les résultats que vous me donnez sont faux ai-je trouvé un bug ?

C'est possible. Vous avez peut-être trouvé un bogue dans l'API, mais vous avez peut-être également trouvé un trou dans les données sous-jacentes. Faites-le nous savoir (via notre formulaire de contact), et nous découvrirons quel est le problème. si possible, veuillez inclure la requête exacte que vous avez faite, y compris tous les paramètres facultatifs. Cela nous aidera à vous répondre plus rapidement.

Nous travaillons continuellement à rendre beaucoup plus facile le retour des corrections vers nous, et bien sûr vers OpenStreetMap. Voici un tutoriel expliquant comment ajouter une adresse à OpenStreetMap.


Comment installer et utiliser

Obtenez le code source de GitHub et créez les 3 fichiers dans n'importe quel projet XS comme celui-ci (le nom du dossier n'a pas d'importance) :

Les trois fichiers sont les suivants :

  • géocodeApiGoogle.xsjslib: fichier de bibliothèque XSJS qui encapsule l'API Google Geocode (et le fichier de destination ci-dessous) et fournit des résultats de géocodage inversé formatés à partir d'un simple appel de fonction JS.
  • géocodeApiGoogleDest.xshttpdest: fichier de destination HTTP, requis par le moteur XS pour effectuer des appels vers des URL externes.
  • geodataEnrich.xsjs: le service XS principal, c'est ce qui est appelé pour faire le travail de lecture et d'écriture dans vos tables, en utilisant la bibliothèque XSJS ci-dessus.

Vous devez faire une petite modification pour que tout soit correctement mis à l'aplomb, dans le fichier geocodeApiGoogle.xsjslib, allez à la ligne 22 et modifiez cette ligne pour contenir votre chemin de projet comme premier paramètre (vous remplacerez donc “geodataenrich.services” avec le nom et le chemin de votre projet) :

Ok, avec cela fait, nous sommes prêts à partir.

Hypothèses

J'ai fait un tas d'hypothèses sur les tables et les champs qui peuvent être utilisés. Premièrement, les champs dans lesquels vous écrivez les données d'adresse résultantes sont toutes des chaînes. Les champs dans lesquels vous écrivez les données d'adresse doivent également être suffisamment longs pour contenir les données d'adresse résultantes. Plutôt que de simplement tronquer aveuglément, ce qui pourrait gâcher l'analyse ultérieure que vous voudrez peut-être faire, le programme renvoie une erreur si un champ cible est trop petit. Lors des tests, j'ai trouvé que 50 caractères suffisent pour contenir n'importe quel résultat. L'hypothèse finale est que la table en cours de lecture et d'écriture doit avoir une clé primaire. La clé primaire n'a pas besoin d'être spécifiée, mais elle doit exister pour permettre aux appels SQL UPDATE de fonctionner.

Utilisation suggérée

Plutôt que de simplement lancer le service sur une masse de données, j'ai trouvé qu'il était plus sûr de le faire en une série d'étapes. Avant de suivre ces étapes, examinons l'ensemble complet des paramètres d'URL et ce qu'ils font :

Nom du champ dans la table source qui est utilisé pour identifier les enregistrements dans lesquels vous souhaitez écrire, ceci afin d'éviter que les mêmes enregistrements ne soient écrits encore et encore. Si un enregistrement contient une valeur NULL dans ce champ, ce service tentera d'écrire dans tous les champs cibles. Si ce champ est rempli avec quelque chose qui n'est pas NULL, l'enregistrement ne sera pas sélectionné. Ce champ est requis.

Ok, alors maintenant passons aux étapes pour inverser le géocodage de vos données en toute sécurité.

Exécutez d'abord le service sur un petit échantillon de vos données (paramètre maxrecs=10), en mode simulation (paramètre simulation=actif) avec connexion à l'écran (paramètre log=actif), pour vous assurer que les paramètres de l'URL sont corrects. Le taux de traitement par défaut est limité à 2 appels d'API externes par seconde, ce qui signifie un délai de 500 millisecondes entre les appels d'API, mais vous pouvez modifier cela avec le paramètre mindelays. Le service XS se met en veille jusqu'à ce que l'intervalle requis se soit écoulé. Depuis que nous sommes connectés, nous obtenons une vue détaillée de ce qui va se passer :

Exécutez ensuite le service en mode direct (omettez le paramètre simuler) en vous connectant à l'écran pour 10 enregistrements. Si cela se termine bien sans erreur, alors nous sommes prêts à faire une course plus importante.

Enfin, exécutez le service en mode direct sans journalisation (omettez le paramètre de journalisation) pour les 2500 enregistrements complets, ou plus.

Voici quelques exemples d'URL. Toutes les URL commenceront comme d'habitude :

L'URL suivante simulera la mise à jour de 10 enregistrements dans la table “GEODATA”.”testtable01″, avec un délai de 400 ms entre les appels, la connexion à l'écran et le stockage

résultat de l'appel de l'API de géocodage dans le champ STATUS. Le champ à sélectionner est COUNTRY (c'est-à-dire rechercher les enregistrements avec COUNTRY=NULL) et les champs dans lesquels écrire sont ZIP et COUNTRY :

L'URL suivante effectuera une mise à jour en direct de 2000 enregistrements, avec un délai de 100 ms entre les appels, sans journalisation. Le champ à sélectionner est COUNTRY et les champs à écrire sont POSTCODE, REGION et SUBREGION :

Limitations de l'API Google

Au moment de la rédaction de cet article, Google impose certaines restrictions à son service. Sauf si vous avez une licence commerciale, vous devez vous limiter à 2500 appels par jour. De plus, vous n'êtes pas censé les faire trop fréquemment (bien qu'ils ne spécifient pas précisément la fréquence autorisée). Ils indiquent également que les résultats doivent être destinés à être utilisés sur une carte Google. Lisez la documentation de l'API pour connaître les limitations actuelles, qui pourraient bien avoir changé depuis la rédaction de ce blog .


À quoi sert une API de géocodeur inversé ?

Géocodeur Android. Géocodage fait référence à la transformation de l'adresse postale ou de toute adresse en latitude et longitude. Géocodage inversé fait référence à la transformation de la latitude et de la longitude en son adresse postale correspondante. La classe d'adresses aide à récupérer l'adresse postale, la localité, la sous-localité, la ville, le pays, le point de repère, etc.

De même, comment fonctionne le géocodeur ? Géocodage est le processus consistant à transformer une description d'un emplacement, telle que son adresse physique, en un emplacement précis sur une carte, à savoir une paire de coordonnées. Géocodage un ou plusieurs emplacements généreront des entités géographiques avec des attributs spécifiques pouvant être utilisés pour l'analyse spatiale.

A savoir aussi, quelle est la différence entre le géocodage et le géocodage inversé ?

Le différence entre "Géocodage" et "Géolocalisation" Géocodage - signifie "Convertir les adresses en coordonnées géographiques, ou le sens inverse'. Géocodage inversé, d'autre part, convertit les coordonnées géographiques en une description d'un emplacement, généralement le nom d'un lieu ou d'un emplacement adressable.

L'API Google Geocoding est-elle gratuite ?

Avec les 200 $ mensuels libre Crédit pour Plans, Routes ou Places, la grande majorité des clients trouvent que leurs cas d'utilisation sont complètement libre. Vous ne serez pas facturé tant que votre utilisation n'aura pas dépassé 200 $ par mois. Utilisation du Plans Intégrer API, SDK Cartes pour Android et iOS est également libre sans utiliser votre crédit.


Avez-vous vraiment besoin d'utiliser des codes postaux ?

Les codes postaux étaient une excellente solution du milieu du 20e siècle pour traiter et distribuer efficacement le courrier qui continue d'être utile à cette fin. Ils sont moins idéaux pour l'étude des populations ou d'autres formes d'activité humaine. Leur taille, leur forme et leur population varient énormément, ce qui les rend incohérentes en tant qu'unité d'analyse. Ils n'ont aucune signification ou fonction légale ou administrative, autre que la livraison du courrier. Bien que tous les Américains les connaissent, ils n'ont aucune signification sociale pertinente. Ils ne représentent pas les quartiers, et lorsque vous demandez à quelqu'un d'où il vient, il ne vous répondra pas « 822019703 ».

Alors quelles sont vos autres options ?

  1. Si vous ne devez pas utiliser de code postal ou de données ZCTA pour votre projet, ne le faites pas. Pour l'ensemble des États-Unis, envisagez d'utiliser les comtés, les PUMA ou les zones métropolitaines. Au sein des États : comtés, PUMA et subdivisions de comté. Pour les régions plus petites : municipalités, secteurs de recensement ou agrégats de secteurs de recensement.
  2. Si vous disposez des données brutes basées sur les adresses, envisagez de les géocoder. Une fois que vous avez géocodé une adresse, vous pouvez utiliser le SIG pour l'attribuer à tout type de géographie pour lequel vous avez un fichier de limites (jointure spatiale), puis vous pouvez l'agréger à cette géographie. Certains géocodeurs fournissent même des zones géographiques telles que des comtés ou des secteurs dans le résultat du match. Si vos données sont sensibles, supprimez tous les attributs à l'exception de l'adresse et d'un entier de série à utiliser comme identifiant, et après le géocodage, vous pouvez associer les résultats à vos données d'origine à l'aide de cet identifiant. Le Census Geocoder est gratuit, ne nécessite aucune connexion, vous permet de faire des lots de 1 000 adresses à la fois et vous oblige à utiliser ces précautions de sécurité. Pour les gros travaux, il existe une API.
  3. Parfois, vous n'aurez pas le choix et devrez utiliser les données de code postal / ZCTA, si ce que vous souhaitez étudier n'est fourni que sous forme de résumé, ou s'il existe des problèmes de confidentialité concernant le géocodage des données d'adresse brutes. Vous souhaiterez peut-être modifier la géographie ZCTA de votre région pour agréger des ZCTA plus petites en ZCTA plus grandes qui les entourent, à la fois pour l'affichage visuel et l'analyse statistique. Par exemple, à New York, il existe plusieurs ZCTA qui ne couvrent qu'une seule ville et un seul bloc de recensement, car elles sont occupées par un grand immeuble de bureaux qui traite beaucoup de courrier (et ont donc leur propre numéro ZIP). De plus, contrairement à la plupart des zones géographiques de recensement, les ZCTA présentent de grands trous. Toute zone qui n'a pas de rues et donc pas d'adresses n'est pas incluse dans un ZCTA. Dans les zones urbaines, cela signifie de grands parcs et cimetières. Dans les zones rurales, de vastes étendues de forêt inhabitée, de désert ou de terrain montagneux. Et de grandes étendues d'eau à chaque endroit.

ZCTA à un pâté de maisons à Midtown Manhattan, NYC, qui ont une population faible ou nulle.


Considérations pour le choix d'un système RO

Type de système

Il existe plusieurs catégories différentes de systèmes RO sur le marché actuel, il vaut donc la peine de se poser la question de ce que vous recherchez dans votre recherche. Oui, les unités d'eau du robinet sous l'évier sont les plus populaires, mais si vous voulez obtenir de l'eau propre et sûre pour toute votre maison, vous pouvez envisager un système de point d'entrée.

De nombreux produits RO de comptoir ont également pris leur envol ces dernières années. Ces systèmes fonctionnent bien en tant que solution plus portable - ils peuvent être utiles pour les personnes vivant dans des propriétés locatives.

Ton budget

À tout le moins, vous devrez prévoir au moins 300 $ pour une unité d'osmose inverse. Certains systèmes peuvent coûter plus de 1 000 $. L'achat initial est le coût le plus élevé, mais n'oubliez pas d'économiser de l'argent pour commander vos remplacements de filtres annuels, qui sont généralement plus abordables à 30 $ - 60 $ par paquet.

Ratio d'efficacité

Comme je l'ai mentionné plus tôt, le rapport d'efficacité RO typique est de 4 gallons d'eaux usées pour 1 gallon d'eau pure produite. Mais ces dernières années, les fabricants se sont efforcés de fournir des systèmes plus efficaces avec des ratios eaux usées/eau pure de 3:1, 2:1 et même 1:1. Bien que ces unités aient tendance à coûter plus cher au départ, les économies que vous réalisez avec une utilisation à long terme en fin de compte pourraient en faire un investissement rentable pour vous au fil du temps.

La qualité de votre eau

La qualité de votre eau est également un élément à prendre en compte dans votre recherche, car elle peut affecter l'efficacité de votre système d'osmose inverse. Un niveau élevé de contaminants affectera probablement le processus de filtrage et entraînera une durée de vie plus courte des filtres et des membranes. Cependant, si la pression de votre eau est suffisamment élevée, la qualité de votre eau ne devrait pas affecter la vitesse de filtration.

Addon UV supplémentaire

Bien que l'OI soit capable d'éliminer la majorité des bactéries et des virus, l'utilisation d'une lampe UV peut aider à rassurer davantage si votre source d'eau est riche en ces contaminants. Un complément UV est une solution sans produits chimiques qui garantit que votre eau est potable à 100 %, car son processus de traitement consiste à tuer les agents pathogènes plutôt qu'à les éliminer.

À propos de Brian Campbell

Avec plus de 100 000 lecteurs mensuels, ma mission est de vous aider à trouver des informations, des produits et des solutions pour répondre à vos besoins en matière de qualité de l'eau.

Mes critiques de systèmes de traitement de l'eau proviennent d'une expérience et d'une recherche réelles (et non d'une marque sans visage).


Existe-t-il un moyen plus simple de le faire? (géocodage inversé / recherche d'adresse)

J'ai été chargé d'obtenir une liste de terrains de golf dans l'Ohio avec leurs adresses. Tout ce que j'ai pu trouver en ligne, ce sont des ensembles de données avec uniquement le nom et la ville. Alors, voici ce que j'ai fini par faire :

CSV de terrains de golf dans l'Ohio avec juste le nom, la ville et l'état.

Géocodé dans QGIS (en utilisant le plugin MMQGIS) pour obtenir les coordonnées lat/lon.

A écrit un script Python qui utilise ces coordonnées lat/lon pour accéder à l'API Google Places. Je découvre que tout sauf le code postal est inclus dans la réponse de l'API, je découvre donc que je dois capturer le PID (ID de lieu) et effectuer un autre appel à l'API Places pour obtenir l'adresse complète (y compris le code postal).

Effectuez un autre appel à l'API Places à l'aide du PID pour obtenir l'adresse complète.

Cela a fini par être un succès (moins une poignée de terrains de golf qui n'ont pas été résolus avec le premier appel d'API), mais je ne peux pas m'empêcher de penser qu'il doit y avoir un moyen plus simple de le faire. Des astuces ou des conseils ?

Pouvez-vous expliquer comment vous avez géocodé dans QGIS à l'étape 2 ? Je ne vois pas où vous avez obtenu les adresses avec lesquelles géocoder.

J'ai utilisé le plugin MMQGIS dans QGIS. J'ai utilisé l'option "Geocode CSV avec Google / Open Street Maps", puis j'ai inséré le nom du terrain de golf pour le champ "address", et la ville et l'état pour leurs champs respectifs. J'espérais que cela résoudrait les adresses pour moi, mais cela ne m'a donné que les coordonnées lat/lon.

Traditionnellement, le géocodage est censé fonctionner dans l'autre sens : convertir les adresses postales en coordonnées lat/lon. J'avais besoin de faire l'inverse : convertir des adresses partielles (ou coordonnées lat/lon) en adresses complètes.

Donc, à partir de là, j'ai appelé les API Google avec les coordonnées lat/lon pour obtenir le PID, puis à nouveau avec le PID pour obtenir les adresses complètes.

Modifier pour ajouter : Google appelle ce processus "géocodage inversé" ou "recherche d'adresse"


Osmose inverse pour piscines !

En tant que propriétaire de piscine, avez-vous déjà entendu dire que vos niveaux de calcium, de solides dissous totaux (TDS) et d'acide cyanurique (CYA) sont trop élevés ? Avec ces niveaux élevés, quelqu'un vous a-t-il déjà dit de vider et de remplir votre piscine ? Cela ne semble-t-il pas fou avec nos conditions de sécheresse actuelles en Californie du Sud ? Chez Pool Water Recycling, nous sommes en accord avec vous et souhaitons vous informer sur la filtration mobile par osmose inverse pour vos piscines ainsi que sur certaines questions fréquemment posées concernant notre service. L'eau qui sort du robinet dans la région de Los Angeles est d'environ 400 parties par million (ppm), ce qui se situe à l'extrémité supérieure de l'échelle des niveaux de dureté de l'eau acceptables dans votre piscine. Au fur et à mesure que l'eau s'évapore dans la piscine, ces minéraux de dureté restent en solution et s'accumulent progressivement en concentration. Plus les niveaux de concentration sont élevés, meilleures sont les chances d'entartrage de votre canalisation d'eau, de la finition intérieure, de l'équipement de filtration, des déversoirs et des éléments d'eau. Lorsque cela se produit, il peut être extrêmement coûteux de retirer et encore plus difficile de prendre soin de votre piscine.

Alors, comment fonctionne la filtration mobile par osmose inverse (OI) ?

C'est relativement simple dans le fait que la seule décision que vous devez prendre est de nous confier à votre résidence ou à votre propriété commerciale ? Notre remorque mobile abrite une unité RO industrielle qui peut réduire la dureté calcique, le TDS, le CYA, les phosphates, les sels et les maladies d'origine hydrique. L'eau est prise de la piscine dans notre remorque où elle est filtrée et retournée à la piscine. L'eau est de l'eau potable pure et notre objectif est de vous laisser une eau meilleure que celle du robinet.

Combien de temps cela prend-il?

Tout est une fonctionnalité du temps. La plupart des travaux résidentiels peuvent être terminés en moins d'une journée et la majorité des travaux prendront toujours moins de temps qu'une vidange et un remplissage.

Absolument! Notre eau est la meilleure et la doublure n'est jamais exposée, ce qui évite de l'endommager.

Sommes-nous autorisés à nager dans la piscine pendant la filtration ?

C'est de loin l'un de nos plus grands avantages pour vous. Il n'y a pas de cordons électriques utilisés dans la piscine, ce qui permet de nager en toute sécurité pendant la filtration.

Pourquoi cette filtration est-elle recommandée en période de sécheresse ?

Étant donné que notre filtration fonctionne à haute pression, elle permet une perte d'eau minimale avec RO. À la fin du travail, nous économisons généralement en moyenne 85 % d'eau, ce qui signifie que la perte d'eau est minime.

L'eau est-elle différente lorsque vous avez terminé ?

Nous le pensons et la seule façon pour vous de le savoir est de nous contacter dès aujourd'hui pour prendre rendez-vous.


Python Geocoding Take 2 – US Addresses

Python Geocoding Take 1 - International Addresses J'ai discuté de mes récentes aventures avec des adresses de géocodage en dehors des États-Unis. En revanche, il existe d'innombrables options pour les adresses de géocodage par lots aux États-Unis. Je vais discuter de quelques-unes de ces options ici, mais je me concentrerai principalement sur le géocodeur de recensement américain et un script Python que j'ai écrit pour faire correspondre les adresses par lots à l'aide de leur API. Le code et la documentation sont disponibles sur la page des ressources de mon laboratoire.

Quelques options différentes

Les services de géocodage d'ESRI vous permettent (avec un compte) d'accéder à leurs serveurs de géocodage via des outils dans ArcToolbox, ou vous pouvez écrire un script et y accéder via une API. QGIS dispose d'un plugin tiers pour accéder aux services de Google (2500 enregistrements par jour gratuits) ou à Open Streetmap. Vous pouvez toujours faire les choses à l'ancienne, en téléchargeant des fichiers de rue géocodés et en créant un service de correspondance.

Alternativement, vous pouvez vous abonner à n'importe quel nombre de services commerciaux ou universitaires où vous pouvez télécharger un fichier, faire la correspondance et télécharger les résultats. Pendant des années, j'ai utilisé les services de géocodage de Texas A&M qui vous permettent de faire exactement cela. Leurs tarifs sont raisonnables, ou si vous êtes un établissement universitaire et que vous êtes partenaire avec eux (placez des liens vers leur service sur leur site Web), vous pouvez demander des crédits gratuits pour faire des matchs par lots.

Le géocodeur et l'API du recensement, et un script Python pour le géocodage par lots

The Census Bureau’s TIGER and address files are often used as the foundational layers for building these other services, to which the service providers add refinements and improvements. You can access the Census Bureau’s services directly through the Census Geocoder, where you can match an address one at a time, or you can upload a batch of 1000 records. It returns longitude and latitude coordinates in NAD 83, and you can get names and codes for all the census geographies where the address is located. The service is pretty picky about the structure of the upload file (must be plain text, csv, with an id column and then columns with the address components in a specific order – with no other attributes allowed) but the nice thing is it requires no login and no key. It’s also public domain, so you can do whatever you want with the data you’ve retrieved. A tutorial for using it is available on our lab’s census tutorials page.

They also have an API with some basic documentation. You can match parsed and unparsed addresses, and can even do reverse geocoding. So I took a stab at writing a script to batch process addresses in text-delimited files (csv or txt). Unfortnately, the Census Geocoding API is not one of the services covered by the Python Geocoder that I mentioned in my previous post, but I did find another third party module called censusgeocode which provides a thin wrapper you can use. I incorporated that module into my Python 3 script, which I wrote as a function that takes the following inputs:

census_geocode(datafile,delim,header,start,addcol)
(str,str,str,int,list[int]) -> files

  • datafile – this is the name of the file you want to process (file name and extension). If you place the geocode_census_funct.py file in the same directory as your data file, then you just need to provide the name of the file. Otherwise, you need to provide the full path to the file.
  • delim – this is the delimiter or character that separates the values in your data file. Common delimiters includes commas ‘,’, tabs ‘t’, and pipes ‘|’.
  • header – here you specify whether your file has a header row, i.e. column names. Enter ‘y’ or ‘yes’ if it does, ‘n’ or ‘no’ if it doesn’t.
  • start – type 0 to specify that you want to start reading the file from the beginning. If you were previously running the script and it broke and exited for some reason, it provides an index number where it stopped reading if that’s the case you can provide that index number here, to pick up where you left off.
  • addcol – provide a list that indicates the position number of the columns that contain the address components in your data file. For an unparsed address, you provide just one position number. For a parsed address, you provide 4 positions: address, city, state, and ZIP code. Whether you provide 1 or 4, the numbers must be supplied in brackets, as the function requires a Python list.

You can open the script in IDLE, run it to load it into memory, and then type the function with the necessary parameters in the shell to execute it. Quelques exemples:

  • A tab-delimited, unparsed address file with a header that’s stored in the same folder as the script. Start from the beginning and the address is in the 2nd column: census_geocode('my_addresses.txt','t','y',0,[2])
  • A comma-delimited, parsed address file with no header that’s stored in the same folder as the script. Start from the beginning and the addresses are in the 2nd through 5th columns: census_geocode('addresses_to_match.csv',',','n',0,[2,3,4,5])
  • A comma-delimited, unparsed address file with a header that’s not in the same folder as the script. We ran the file before and it stopped at index 250, so restart there – the address is in the 3rd column: census_geocode('C:address_datadata1.csv',',','y',250,[3])

The beginning of the script “sets the table”: we read the address columns into variables, create the output files (one for matches, one for non-matches, and a summary report), and we handle whether or not there’s a header row. For reading the file I used Python’s CSV module. Typically I don’t use this module, as I find it’s much simpler to do the basic: read a line in, split it on a delimiter, strip whitespace, read it into a list, etc. But in this case the CSV module allows you to handle a wider array of input files if the input data was a csv and there happened to be commas embedded in the values themselves, the CSV module easily takes care of it if you ignore it, the parsing would get thrown off for that record.

Handling Exceptions and Server Errors

In terms of expanding my skills, the new things I had to learn were exception handling and control flows. Since the censusgeocoding module is a thin wrapper, it had no built in mechanism for retrying a match a certain number of times if the server timed out. This is an absolute necessity, because the census server often times out, is busy, or just hiccups, returning a generic error message. I had already learned how to handle crashes in my earlier geocoding experiments, where I would write the script to match and write a record one by one as it went along. It would try to do a match, but if any error was raised, it would exit that loop cleanly, write a report, and all would be saved and you could pick up where you left off. But in this case, if that server non-response error was returned I didn’t want to give up – I wanted to keep trying.

So on the outside there is a loop to try and do a match, unless any error happens, then exit the loop cleanly and wrap up. But inside there is another try loop, where we try to do a match but if we get that specific server error, continue: go back to the top of that for loop and try again. That loop begins with While True – if we successfully get to the end, then we start with the next record. If we get that server error we stay in that While loop and keep trying until we get a match, or we run out of tries (5) and write as a non-match.

In doing an actual match, the script does a parsed or unparsed match based on user input. But there was another sticking point in some instances the API would return a matched result (we got coordinates!), but some of the objects that it returned were actually errors because of some java problem (failed to get the tract number or county name – here’s an error message instead!) To handle this, we have a for i in range loop. If we have a matched record and we don’t have a status message (that indicates an error) then we move along and grab all the info we need – the coordinates, and all the census geography where that coordinate falls, and write it out, and then that for loop ends with a break. But if we receive an error message we continue – go back to the top of that loop and try doing the match again. After 3 tries we give up and write no match.

Figuring all that out took a while – where do these loops go and what goes in them, how do I make sure that I retry a record rather than passing over it to the next one, etc. Stack Exchange to the rescue! Difference between continue, pass and break, returning to the beginning of a loop, breaking out of a nested loop, and retrying after an exception. The rest is pretty straightforward. Once the matching is done we close the files, and write out a little report that tells us how many matches we got versus fails. The Census Geocoder via the API is pretty unforgiving it either finds a match, or it doesn’t. There is no match score or partial matching, and it doesn’t give you a ZIP Code or municipal centroid if it can’t find the address. It’s all or nothing if you have partial or messy addresses or PO Boxes, it’s pretty much guaranteed that you won’t get matches.

There’s no limit on number of matches, but I’ve built in a number of pauses so I’m not hammering the server too hard – one second after each match, 5 seconds after every 1000 matches, a couple seconds before retrying after an error. Your mileage will vary, but the other day I did about 2500 matches in just under 2 hours. Their server can be balky at times – in some cases I’ve encountered only a couple problems for every 100 records, but on other occasions there were hang-ups on every other record. For diagnostic purposes the script prints every 100th record to the screen, as well as any problems it encountered (see pic below). If you launch a process and notice the server is hanging on every other record and repeatedly failing to get matches, it’s probably best to bail out and come back later. Recently, I’ve noticed fewer problems during off-peak times: evenings and weekends.

The script and the documentation are posted on our labs resources page, for all to see and use – you just have to install the third party censusgeocode module before using it. When would you want to use this? Well, if you need something that’s free, this is a good choice. If you have batches in the 10ks to do, this would be a good solution. If you’re in the 100ks, it could be a feasible solution – one of my colleagues has confirmed that he’s used the script to match about 40k addresses, so the service is up to the task for doing larger jobs.

If you have less than a couple thousand records, you might as well use their website and upload files directly. If you’re pushing a million or more – well, you’ll probably want to set up something locally. PostGIS has a TIGER module that lets you do desktop matching if you need to go into the millions, or you simply have a lot to do on a consistent basis. The excellent book PostGIS en action has a chapter dedicated to to this.

In some cases, large cities or counties may offer their own geocoding services, and if you know you’re just going to be doing matches for your local area those sources will probably have greater accuracy, if they’re adding value with local knowledge. For example, my results with NYC’s geocoding API for addresses in the five boroughs are better than the Census Bureau’s and is customized for local quirks for example, I can pass in a borough name instead of a postal city and ZIP Code, and it’s able to handle those funky addresses in Queens that have dashes and similar names for multiple streets (35th st, 35th ave, 35th dr…). But for a free, public domain service that requires no registration, no keys, covers the entire country, and is the foundation for just about every US geocoding platform out there, the Census Geocoder is hard to beat.


Voir la vidéo: Quelle est la meilleure façon de prévenir et détecter le mélanome? (Octobre 2021).