Suite

Obtenir uniquement des points lors de l'importation d'OpenStreetMap vers PostgreSQL ?

Obtenir uniquement des points lors de l'importation d'OpenStreetMap vers PostgreSQL ?


C'est la première fois que je travaille avec des données OpenStreetMap.

J'essaie d'importer des données d'OpenStreetMap dans PostgreSQL. J'ai téléchargé les données en utilisant la requête suivante :

wget 'http://overpass-api.de/api/interpreter?data=node(52.06,5.04,52.08,5.06);out;' -O utrecht2.osm

Ensuite, j'ai importé le fichier résultant dans PostgreSQL en utilisant osm2pqsql :

osm2pgsql -c -d utrecht -C 1000 --flat-nodes /home/me/Documents/01_perso/28_routing --hstore -S default.style utrecht2.osm

Tout semble fonctionner sans aucune erreur (que je peux voir au moins).

J'utilise le fichier default.style qui se trouve ici pour l'import.

Enfin, je regarde les données qui ont été importées dans ma table Postgresql. Ce qui m'agace c'est que seule la table planet_osm_point contient des informations. Toutes les autres tables sont vides.

Lorsque je regarde la zone en utilisant le site Web de l'OSM, il est clair pour moi qu'il devrait y avoir beaucoup plus d'informations disponibles, en termes de polygones, de routes, etc.

J'ai essayé de réduire ma zone de recherche à plusieurs reprises, en me demandant si je n'avais pas atteint les limites de l'API de dépassement mais sans succès jusqu'à présent.

Quelqu'un pourrait-il m'indiquer la raison pour laquelle je n'obtiens aucune information sur les routes, les polygones et les lignes dans ma base de données ?


Comme vous demandez de n'avoir que des nœuds, c'est tout ce que vous obtenez. Voir http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide#Nodes pour plus de détails.

Votre requête doit être

http://overpass-api.de/api/interpreter?data=(node(52.06,5.04,52.08,5.06);<;>;);out;


Connecter Kafka à PostgreSQL : 4 étapes faciles

Vous souhaitez transférer vos données PostgreSQL à l'aide de Kafka ? Trouvez-vous difficile de connecter Kafka à PostgreSQL ? Eh bien, ne cherchez pas plus loin ! Cet article répondra à toutes vos questions et vous soulagera du stress de trouver une solution vraiment efficace. Suivez notre guide simple étape par étape pour vous aider à maîtriser les compétences nécessaires pour transférer efficacement vos données depuis PostgreSQL à l'aide de Kafka.

Il vous aidera à prendre en charge sans tracas sans compromettre l'efficacité. Cet article vise à rendre le processus d'exportation de données aussi fluide que possible.

Après une analyse complète du contenu, vous pourrez connecter avec succès Kafka à PostgreSQL pour transférer en toute transparence les données vers la destination de votre choix pour une analyse fructueuse en temps réel. Cela vous aidera également à créer un pipeline ETL personnalisé pour votre organisation. Grâce à cet article, vous obtiendrez une compréhension approfondie des outils et des techniques et vous aidera ainsi à perfectionner vos compétences.


Dans PostgreSQL (comme décrit dans la documentation, The Information Schema) :

Pour MySQL, vous auriez besoin de table_schema='dbName' et pour MSSQL, supprimez cette condition.

Remarquerez que « seules les tables et vues auxquelles l'utilisateur actuel a accès sont affichées ». De plus, si vous avez accès à de nombreuses bases de données et souhaitez limiter le résultat à une certaine base de données, vous pouvez y parvenir en ajoutant la condition AND table_catalog='yourDatabase' (dans PostgreSQL).

Si vous aussi vous souhaitez se débarrasser de l'en-tête affichant les noms de lignes et le pied de page affichant le nombre de lignes, vous pouvez soit démarrer le psql avec l'option de ligne de commande -t (abréviation de --tuples-only ) ou vous pouvez basculer le paramètre dans la ligne de commande de psql par (abréviation de pset tuples_only ) . Cela peut être utile, par exemple, lorsque vous dirigez la sortie vers une autre commande avec g [ |command ] .


Thème émergent : Information géographique volontaire

Pour le thème émergent de cette semaine, vous passerez en revue les documents ci-dessous et participerez à une discussion sur Canvas avec vos camarades de classe - voir les détails ci-dessous.

Les données spatiales ont traditionnellement été développées par des agences gouvernementales et des entreprises qui pouvaient se permettre les dépenses techniques et financières nécessaires pour numériser les informations spatiales. Les progrès récents de la cartographie Web et de la technologie GPS permettent aux bénévoles férus de technologie de développer leurs propres ensembles de données spatiales. Ce type de données géographiques est fréquemment appelé « Information Géographique Volontaire » ou VGI en abrégé. La courte vidéo (31 secondes) ci-dessous montre la réponse dramatique de VGI au tremblement de terre en Haïti de 2010 à travers des ajouts et des corrections aux données OpenStreetMap pour le pays. Haïti était auparavant un endroit mal cartographié, et il y avait un besoin immédiat au lendemain de la catastrophe de développer une bien meilleure carte de base pour aider les efforts de relèvement. Ce fut un événement décisif dans VGI pour la réponse aux catastrophes/humanitaires, comme discuté par Meier dans le premier chapitre de Digital Humanitarians que vous avez lu dans la leçon 1.

L'un des efforts VGI les plus efficaces se trouve sur OpenStreetMap.org. OpenStreetMap a pour objectif de développer une carte de base des routes, des noms de lieux et d'autres caractéristiques spatiales communes pour le monde, entièrement basée sur des contributions volontaires. Le projet OpenStreetMap vise à fournir un ensemble de données géospatiales mondial entièrement gratuit sans aucune restriction juridique ou technique sur son utilisation. Les ressources cartographiques Web les plus populaires, telles que Google Maps ou Bing Maps, limitent étroitement la manière dont leurs données peuvent être manipulées, publiées ou affichées. Beaucoup de gens tiennent pour acquis que ces cartes sont gratuites, mais, en fait, elles ne le sont que parce que ces entreprises y donnent accès gratuitement dès maintenant. Vous n'êtes pas autorisé à réutiliser et à réaffecter ces ressources ou à télécharger vous-même leurs données, et si Google décidait demain de vous facturer l'accès à leurs cartes, vous n'auriez aucun recours pour vous assurer de conserver l'accès gratuitement.

Une autre tendance importante de VGI est l'utilisation de campagnes de micro-tâches ou de « micromapping » qui divisent une grande tâche en petits morceaux que la communauté VGI peut prendre en charge. Par exemple, jetez un œil à cet examen intéressant et utile du rôle des microtâches dans la gestion des urgences de l'Australian Institute of Disaster Resilience. Dans certains systèmes, des tuiles à partir d'images haute résolution vous sont présentées et vous êtes invité à rechercher et à étiqueter des éléments tels que « tas de déchets », « routes bloquées » et « bâtiments endommagés ». Il convient de noter que ce type de microtâche peut également être utilisé pour entraîner des algorithmes d'apprentissage automatique à détecter ces mêmes caractéristiques avec une grande précision. Vous pouvez en savoir plus à ce sujet dans le chapitre 6, « L'intelligence artificielle dans le ciel », de Digital Humanitarians. C'est vraiment des trucs de pointe qui se produisent maintenant.

Maintenant, j'aimerais que vous considériez VGI avec des « citoyens comme capteurs ». C'est là que les informations relatives à la catastrophe sont collectées grâce aux appareils que les gens transportent. Je suis sûr que vous pouvez penser à de nombreux exemples de données que vous pourriez obtenir à partir de smartphones, mais je voulais souligner un projet qui a commencé au Japon peu de temps après la catastrophe nucléaire de Fukushima Daiichi. L'équipe Safecast a développé de petits appareils pour le rayonnement, cartographiant les résultats que vous pouvez voir sur la carte Web ici. Un exemple très récent de citoyens en tant que capteurs est l'application COVIDSafe utilisée en Australie. Il s'agit d'une application de recherche de contrats qui enregistre toutes les personnes avec lesquelles vous entrez en contact via Bluetooth sur les téléphones mobiles. Les données sont cryptées sur votre téléphone et accessibles uniquement si vous êtes entré en contact avec une personne testée positive pour COVID-19.

Livrable

  1. Postez un commentaire dans le Discussion thématique émergente (L3) forum qui décrit comment vous pensez que l'émergence de nouvelles sources de VGI a un impact sur les systèmes géospatiaux pour la gestion des urgences. Y a-t-il de futures sources de VGI que nous devrions planifier ? Les méthodes actuelles de fourniture d'IGV sont-elles durables sur le long terme ? Comment vous assurez-vous qu'il y aura toujours des bénévoles?
  2. Fournissez un lien et une brève description vers un effort VGI « dans l'actualité » ou que vous avez rencontré d'une autre manière.
  3. REMARQUE: Répondez à cette mission dans le Discussion thématique émergente (L3) forum avant la date indiquée sur le calendrier des cours.

Critères de classement

Cette discussion sera notée sur 15 points.

Veuillez consulter la page Attentes de discussion et notation sous le module Orientation et ressources de cours pour plus de détails.


Quels sont les projets et outils bien connus disponibles pour la cartographie collaborative ?

Il existe de nombreuses façons de créer une carte collaborative. Le plus simple est de s'asseoir avec les autres et d'utiliser un stylo et du papier. Bien que collaborative dans le processus de création, la technique du stylo et du papier ne permet pas facilement la collaboration au-delà du petit groupe qui peut se rassembler autour du morceau de papier. Même si le seul morceau de papier est très grand, il y a une limite physique au nombre de personnes pouvant travailler en même temps sur un seul morceau de papier. OpenStreetMap permet aux groupes de collaborer sur des cartes par voie électronique, ce qui augmente considérablement ce nombre. Mais ce ne sont pas les seules options. Outre le stylo et le papier et les outils entourant OpenStreetMap, il existe de nombreuses façons de créer des cartes collaboratives et partageables.

WikiMapia

Selon WikiMapia (http://wikimapia.org) lui-même, "WikiMapia est une carte modifiable en ligne - vous pouvez décrire n'importe quel endroit sur Terre. Ou simplement surfer sur la carte en découvrant des tonnes d'endroits déjà marqués." Avec WikiMapia, vous pouvez ajouter des immeubles de bureaux, des restaurants, des parcs et des villages pour ne citer que quelques éléments. L'idée avec WikiMapia est qu'il y a une carte collaborative sur laquelle tout le monde travaille ensemble. Vous n'avez pas besoin d'un compte pour commencer à ajouter des informations à WikiMapia, ou pour consulter les informations que d'autres ont ajoutées. Vous avez besoin d'un compte (et d'un certain nombre de contributions au projet) pour commencer à changer de place que d'autres personnes ont ajoutées.

Ushahidi

Ushahidi (http://ushahidi.com) est une application logicielle open source qui vous permet de générer des rapports d'informations en commun et de visualiser ces informations sur une carte et une chronologie. À l'origine, il a été utilisé pour faire des cartes rapportant les cas de violence lors des violences post-électorales au Kenya en 2007-2008. Aujourd'hui, il est utilisé pour de nombreux projets de cartographie collaborative différents. L'idée avec Ushahidi est que les utilisateurs puissent soumettre des "rapports" directement via l'application Ushahidi, via les réseaux sociaux, ou même via SMS. Vous pouvez démarrer rapidement une version d'Ushahidi à l'aide de CrowdMap (http://crowdmap.com) ou télécharger le code source et l'exécuter sur votre propre serveur.

Créateur de cartes Google

Google Map Maker (http://www.google.com/mapmaker) est un moyen de corriger et d'ajouter des informations à Google Maps et Google Earth. Des exemples d'informations que vous pouvez ajouter incluent des routes ou des points d'intérêt manquants et incorrects. Les modifications apportées par les nouveaux utilisateurs passent par un processus de révision avant d'être publiées. Dans certaines parties du monde, les nouvelles informations cartographiques sont toujours examinées avant d'être affichées publiquement.

Google MyMaps

Google MyMaps (http://maps.google.com/maps/mm) est un onglet associé à Google Maps qui vous permet d'enregistrer des informations dans votre propre carte. Vous pouvez décider si votre carte doit être publique ou privée, partagée uniquement avec certaines personnes qui en ont le lien. Vous pouvez également inviter des personnes spécifiques à collaborer avec vous ou mettre votre carte à la disposition du monde entier pour qu'elle y contribue.


Test de la connexion PostgreSQL avec QuantumGIS

  • Lancez "/usr/bin/qgis" .
  • Menu -> Couche -> Ajouter une couche PostGIS.
    • Créez une connexion LocalHost :
      • Hôte : 127.0.0.1
      • Base de données : "emplacement"
      • Port : 5432
      • Nom d'utilisateur : gis
      • planet_osm_line
      • planet_osm_point
      • planet_osm_polygon
      • planet_osm_roads

      Selon la taille de la base de données, la carte peut prendre un certain temps à se dessiner. Si la carte a été dessinée de manière satisfaisante, il est fort probable que l'importation osm2pgsql ait réussi.


      D'un point de vue conceptuel, l'équivalent du type de données BLOB d'Oracle est bytea dans Postgres.

      bytea vous permet uniquement de lire et d'écrire le Achevée (vous ne pouvez pas simplement récupérer 100 Ko à partir d'une valeur de 1 Go). Ce qui signifie qu'il est conservé dans la mémoire de la JVM lors de sa lecture. C'est la même chose qu'avec le type BLOB d'Oracle. D'un point de vue JDBC, ces deux types de données se comportent presque de la même manière.

      L'OID (ou mieux : "gros objets") n'est pas un véritable "type de données". Il s'agit simplement d'un pointeur vers les données stockées dans le système de fichiers. L'avantage d'utiliser des objets volumineux est que vous pouvez diffuser correctement le contenu du serveur vers le client, vous n'avez pas besoin de charger l'intégralité des données binaires dans la mémoire du client.

      Cependant, traiter des objets volumineux est beaucoup plus compliqué que de traiter des colonnes d'octets. Vous devez également manuellement nettoyez les objets volumineux supprimés si vous supprimez la ligne correspondante de la table de base (ce que vous n'avez pas besoin de faire avec bytea ). La lecture et l'écriture d'objets volumineux sont également beaucoup plus compliquées que le traitement des valeurs d'octets.

      Comme vous utilisez actuellement une colonne BLOB, vous avez apparemment la mémoire côté client pour traiter les données, dans ce cas pour rendre la transition aussi fluide que possible, je recommande fortement d'utiliser bytea dans Postgres.


      Notre blog

      L'une des choses les plus effrayantes que vous puissiez rencontrer en tant que DBA (que ce soit en utilisant Postgres ou un système inférieur) est un plantage suivi d'un échec complet de la base de données pour démarrer la sauvegarde. Voici un bref aperçu des étapes à suivre lorsque cela se produit.

      La première étape consiste à déterminer pourquoi il ne démarre pas en examinant les journaux. Vérifiez vos journaux Postgres normaux, mais vérifiez également le nom de fichier transmis au --Journal argument pour pg_ctl, car Postgres n'est peut-être même pas allé assez loin pour démarrer la journalisation normale. La plupart du temps, ces erreurs ne sont pas graves, sont assez explicites et peuvent être corrigées facilement, comme le manque d'espace disque. En cas de doute, recherchez sur le Web ou demandez dans le canal IRC #postgresql et vous trouverez très probablement une solution.

      Parfois, l'erreur est plus grave ou la solution n'est pas si évidente. Considérez ce problème que quelqu'un a rencontré dans le canal #postgresql il y a quelque temps :

      Comme vous pouvez le voir, Postgres a déjà laissé entendre que vous pourriez avoir de gros problèmes avec sa suggestion d'utiliser une sauvegarde. Le démon Postgres ne démarre pas complètement car un index est corrompu. Postgres a reconnu que l'index B-tree ne ressemble plus à un B-tree et se sauve.

      Pour de nombreuses erreurs, l'étape suivante consiste à tenter de démarrer Postgres en mode mono-utilisateur. Ceci est similaire au "mode sans échec" de Windows : il démarre Postgres de manière simplifiée et simple, et est principalement destiné au débogage de problèmes tels qu'un échec de démarrage. Ce mode est entré en exécutant directement l'exécutable "postgres" (au lieu de laisser pg_ctl le faire) et en passant des arguments spécifiques. Voici un exemple:

      Cela démarre le programme « postgres » (auparavant « postmaster »), passe en mode mono-utilisateur, spécifie où se trouve le répertoire de données, désactive les index système et définit la sortie de débogage sur 1. Après son exécution, vous aura une invite simple. À partir de là, vous pouvez résoudre votre problème, tel que la réindexation de mauvais index, qui peuvent avoir causé l'échec d'un démarrage normal. Utilisez CTRL-d pour quitter ce mode :

      Si vous n'êtes pas en mesure de résoudre les problèmes avec le mode mono-utilisateur, il est temps de passer aux choses sérieuses. Ce serait un excellent moment pour effectuer une sauvegarde complète au niveau du fichier. Copiez l'intégralité du répertoire de données sur un autre serveur ou au moins sur une autre partition. Assurez-vous que tout se trouve également dans le répertoire pg_xlog, car il peut être lié symboliquement ailleurs.

      Il est temps d'utiliser pg_resetxlog, non ? Non pas du tout. L'utilisation de l'utilitaire pg_resetxlog doit être effectuée en dernier recours absolu, et il y a encore certaines choses que vous devriez essayer en premier. Votre problème a peut-être déjà été résolu, la prochaine étape devrait donc consister à mettre à niveau Postgres vers la dernière révision. Avec Postgres, une révision (le dernier numéro de la chaîne de version) est toujours réservée aux corrections de bogues uniquement. De plus, changer la révision est presque toujours aussi simple que d'installer un nouveau binaire. Donc, si vous exécutez Postgres version 9.0.3, mettez à niveau vers la dernière version de la série 9.0 (9.0.18 au moment d'écrire ces lignes). Vérifiez les notes de version, effectuez la mise à niveau et essayez de démarrer Postgres.

      Toujours perplexe ? Pensez à demander de l'aide. Pour une aide rapide et gratuite, essayez le canal IRC #postgresql. Pour une aide gratuite légèrement plus lente, essayez la liste de diffusion pgsql-general. Pour ces deux options, la majorité des abonnés sont regroupés près du fuseau horaire de l'Est des États-Unis, de sorte que les temps de réponse seront plus rapides à 15h00, heure de New York, par rapport à 3h00, heure de New York. Pour une aide payante, vous pouvez trouver un expert Postgres (comme End Point !) dans la liste des services professionnels sur postgresql.org,

      Les prochaines étapes dépendent de l'erreur, mais une autre voie consiste à pirater le code source pour que Postgres contourne l'erreur empêchant le démarrage. Cela pourrait signifier, par exemple, changer une exception FATAL en un AVERTISSEMENT, ou une autre supercherie. C'est un truc de niveau expert, bien sûr, mais fait avec soin peut toujours être plus sûr que pg_resetxlog. Si possible, essayez ceci sur une copie des données !

      Si vous avez fait tout le reste, il est temps d'essayer d'utiliser pg_resetxlog. Veuillez vous assurer de lire la page de manuel à ce sujet avant utilisation. N'oubliez pas qu'il s'agit d'une commande irréversible, susceptible de détruire des données ! Cependant, parfois, c'est la seule chose qui fonctionnera.

      Si vous avez réussi à résoudre le problème, au moins suffisamment pour que Postgres démarre, l'étape suivante consiste à effectuer une sauvegarde logique complète de votre base de données. Cela signifie faire un pg_dump complet tout de suite. Ceci est particulièrement important si vous avez utilisé pg_resetxlog. Videz tout, puis restaurez-le dans un nouveau cluster Postgres (mettez d'abord à niveau vers la dernière révision si nécessaire !). Le pg_dump vous permettra non seulement de créer une version de travail propre de votre base de données, mais constitue également un excellent moyen de vérifier l'intégrité de vos données, car il examine nécessairement chaque ligne de données que vous possédez. Ce sera ne pas vérifiez l'intégrité de vos index, mais il existe d'autres moyens de le faire, le plus simple étant de faire une BASE DE DONNÉES REINDEX sur chaque base de données de votre cluster.

      Toutes ces étapes, y compris pg_resetxlog, peuvent ou non aider. Dans l'exemple "le lien gauche ne correspond pas" en haut, rien n'a pu résoudre le problème (ni le mode mono-utilisateur, ni une révision plus récente, ni pg_resetxlog). Il est possible que les données aient pu être récupérées en piratant le code source ou en utilisant des outils pour extraire les données directement, mais cela n'était pas nécessaire car il s'agissait d'une expérience AWS de courte durée. Le consensus était qu'il s'agissait probablement d'un problème matériel. Ce qui montre que vous ne pouvez jamais faire totalement confiance à votre matériel ou logiciel, alors gardez toujours des sauvegardes testées, fréquentes et multiples à proximité !


      Autres options d'entrepôt de données

      Azure Synapse est génial, mais parfois, vous devez optimiser pour différentes choses lorsque vous choisissez un entrepôt de données. Certaines personnes choisissent d'utiliser Amazon Redshift, Google BigQuery, PostgreSQL, Snowflake ou Panoply, qui sont des SGBDR utilisant une syntaxe SQL similaire. D'autres choisissent un lac de données, comme Amazon S3 ou Delta Lake sur Databricks. Si vous souhaitez connaître les étapes pertinentes pour charger des données sur l'une de ces plates-formes, consultez Vers Redshift, Vers BigQuery, Vers Postgres, Vers Snowflake, Vers Panoply, Vers S3 et Vers Delta Lake.


      1 réponse 1

      Tout d'abord, supposons que work_mem soit à 1024 Mo , et non l'impossible 1024 Go signalé (impossible avec un total de 3 Go sur la machine).

      De toute façon c'est beaucoup trop haut. Comme indiqué dans Resource Consumption dans la documentation PostgreSQL, avec quelques accents ajoutés :

      travail_mem (entier)

      Spécifie la quantité de mémoire à utiliser par les opérations de tri internes et les tables de hachage avant d'écrire sur des fichiers de disque temporaires. La valeur par défaut est un mégaoctet (1 Mo). Notez que pour une requête complexe, plusieurs opérations de tri ou de hachage peuvent s'exécuter en parallèle, chaque opération sera autorisée à utiliser autant de mémoire que cette valeur le spécifie avant de commencer à écrire des données dans des fichiers temporaires. En outre, plusieurs sessions en cours d'exécution pourraient effectuer de telles opérations simultanément. Donc, la mémoire totale utilisée peut être plusieurs fois la valeur de work_mem il est nécessaire de garder ce fait à l'esprit lors du choix de la valeur. Les opérations de tri sont utilisées pour ORDER BY, DISTINCT et les jointures de fusion. Les tables de hachage sont utilisées dans les jointures de hachage, l'agrégation basée sur le hachage et le traitement basé sur le hachage des sous-requêtes IN.

      La requête dont le plan est affiché est complexe et nécessite plusieurs niveaux de hachage, vous êtes donc clairement dans le cas contre lequel le doc met en garde.

      La valeur par défaut de 1 Mo est conservatrice, mais je n'augmenterais pas work_mem au-dessus de 128 Mo pour une instance de 3 Go. shared_buffers en revanche pourrait être fixé à 1024 Mo : celui-ci n'est alloué qu'une seule fois et conservé pour toute la durée de vie de l'instance.


      Voir la vidéo: PostgreSQL. Часть 1. Установка и настройка