Suite

Comment puis-je extraire toutes les valeurs distinctes d'un raster PostGIS ?

Comment puis-je extraire toutes les valeurs distinctes d'un raster PostGIS ?


Je travaille avec un raster entier dans PostGIS 2.1 et j'aimerais extraire toutes les valeurs distinctes de ce raster. J'espérais pouvoir faire quelque chose dans le sens de la requête suivante, mais je n'ai pas trouvé de solution qui fonctionne jusqu'à présent.

SELECT DISTINCT ST_Value(rast) FROM myrastertable

Il existe un moyen plus simple et plus efficace de le faire. Fonctionne pour PostGIS 2.1 et 2.0. Utilisez simplement la fonction ST_ValueCount.

http://postgis.net/docs/manual-2.1/RT_ST_ValueCount.html

cela vous donnera à la fois la valeur du pixel et le nombre de pixels qui ont cette valeur.

ainsi serait pour votre cas

SELECT DISTINCT (pvc).value FROM (SELECT ST_ValueCount(rast) As pvc FROM myrastertable) As f;

Si vous voulez également compter les pixels qui ont chaque valeur, faites

SELECT (pvc).value, SUM((pvc).count) Comme total FROM (SELECT ST_ValueCount(rast) Comme pvc FROM myrastertable) Comme f GROUP BY (pvc).value;

Vous pouvez également vouloir lancer un ordre par (pvc).value pour trier par la valeur du pixel.


Il existe différentes formes de ST_Value et celle qui vous aidera probablement est la ST_Value(rast, band, x, y).

En modifiant l'un des exemples de la documentation, vous pouvez vider toutes les valeurs de chaque pixel à l'aide de generate_series dans les directions x et y, puis utiliser group by (ou distinct) sur celles-ci pour obtenir la liste des valeurs de pixel uniques.

SELECT count(b1val), b1val FROM (SELECT ST_Value(rast, 1, x, y) As b1val FROM dummy_rast CROSS JOIN generate_series(1, raster_width) As x CROSS JOIN generate_series(1, raster_height) As y WHERE rid = raster_id) as rast_values ​​groupe par b1val ;

où vous devrez fournir des valeurs pour raster_id, raster_width et raster_height et je suppose que vous regardez la bande 1.


Chapitre 8 Analyse géospatiale II : Données raster

Suite à notre discussion sur l'analyse des données attributaires et vectorielles, l'analyse des données raster présente le dernier outil puissant d'exploration de données disponible pour les géographes. Les données raster sont particulièrement adaptées à certains types d'analyses, telles que le géotraitement de base (Section 8.1 « Géotraitement de base avec des rasters »), l'analyse de surface (Section 8.2 « Echelle d'analyse ») et la cartographie du terrain (Section 8.3 « Analyse de surface : interpolation spatiale "). Bien que ce ne soit pas toujours vrai, les données raster peuvent simplifier de nombreux types d'analyses spatiales qui seraient autrement trop lourdes à effectuer sur des jeux de données vectorielles. Certaines des techniques les plus courantes sont présentées dans ce chapitre.


L'extraction efficace d'un sous-ensemble de points dépend du format exact que vous utilisez. En supposant que vous stockiez votre raster sous la forme d'un tableau numpy d'entiers, vous pouvez extraire des points comme ceci :

points_in_circle créera un générateur renvoyant tous les points. Veuillez noter que j'ai utilisé yield au lieu de return . Cette fonction ne renvoie pas réellement de valeurs de points, mais décrit comment les trouver toutes. Il crée un itérateur séquentiel sur les valeurs des points dans le cercle. Voir la documentation Python pour plus de détails sur le fonctionnement de yield.

J'ai utilisé le fait que pour le cercle, nous ne pouvons explicitement boucler que sur les points intérieurs. Pour des formes plus complexes, vous pouvez boucler sur les points de l'étendue d'une forme, puis vérifier si un point lui appartient. L'astuce est de ne pas vérifier tous point, seulement un sous-ensemble étroit d'entre eux.


Pour obtenir tous valeurs, vous pouvez faire

Vous pouvez également utiliser l'indexation

Pour des extractions plus complexes utilisant des points, des lignes ou des polygones, voir ?extract

x est l'objet raster dont vous essayez d'extraire les valeurs de y. Il peut s'agir de SpatialPoints, SpatialPolygons, SpatialLines, Extent ou d'un vecteur représentant les numéros de cellules (regardez ?extract ). Votre code values_raster <- extract(x = values, df=TRUE) ne fonctionnera pas car vous alimentez la fonction avec n'importe quel objet/vecteur y. Vous pouvez essayer de créer un vecteur avec tous les numéros de cellules de votre raster. Imaginez que votre raster ait 200 cellules. Si votre do values_raster <- extract(x = values,y=seq(1,200,1), df=TRUE), vous obtiendrez une trame de données avec des valeurs pour chaque cellule.


Comment puis-je extraire toutes les valeurs distinctes d'un raster PostGIS ? - Systèmes d'information géographique

Je voudrais remplacer les cellules NA qui se trouvent dans une étendue spécifiée (ici une zone rectangulaire définie par drawExtent dans le code ci-dessous) d'un objet raster. Mon idée était d'utiliser les fonctions cellsFromExtent et extract pour extraire les cellules NA dans une étendue du raster et d'attribuer la valeur 250 à ces cellules. Enfin, les cellules NA du raster qui se trouvent dans l'étendue devraient avoir la valeur 250 et les autres cellules NA qui se trouvent en dehors de l'étendue conserveraient la valeur NA. Alors, comment puis-je modifier les valeurs des cellules NA dans un objet raster en utilisant un sous-ensemble géographique du raster comme condition ? Voici le début d'un code :

À partir de z , comment puis-je attribuer la valeur 250 aux cellules NA du raster (j'ai testé r[is.na(z)] mais cela ne fonctionne pas) ?

Vous étiez sur la bonne voie avec cellsFromExtent . Plutôt que d'extraire, vous pouvez utiliser la fonction pour renvoyer l'index de cellule associé à l'étendue.

Ajouter une bibliothèque et créer des données

Créez un objet d'étendue et un tracé. J'ai utilisé une étendue définie mais vous pouvez toujours utiliser drawExtent.

Ici, nous obtenons une valeur d'index pour les valeurs NA dans l'étendue, puis utilisons l'index pour remplacer les valeurs dans l'ensemble du raster.


Scripts de prise en charge de PostGIS

Au lieu d'exécuter les scripts individuellement, vous pouvez utiliser le script postgis_manager.sh pour exécuter des scripts SQL qui activent ou suppriment la prise en charge de PostGIS. Voir Activation et suppression de la prise en charge de PostGIS.

Vous pouvez exécuter les scripts SQL PostGIS individuellement pour activer ou supprimer la prise en charge de PostGIS. Par exemple, ces commandes exécutent les scripts SQL postgis.sql , rtpostgis.sql et spatial_ref_sys.sql dans la base de données mydatabase .

Après avoir exécuté les scripts, la base de données est activée avec PostGIS et PostGIS Raster.

Scripts qui activent la prise en charge de PostGIS et de PostGIS Raster

  • install/postgis.sql - Charge les objets PostGIS et les définitions de fonctions.
  • install/rtpostgis.sql - Chargez l'objet raster PostGIS et les définitions de fonction.
  • install/spatial_ref_sys.sql - Remplir la table spatial_ref_sys avec un ensemble complet d'identifiants de définition de système de coordonnées EPSG. Avec les identifiants de définition, vous pouvez effectuer des opérations ST_Transform() sur les géométries.

Vous pouvez afficher les commentaires avec la méta-commande pslq dd nom_fonction ou à partir de n'importe quel outil pouvant afficher les commentaires sur les fonctions de la base de données Greenplum.

Variables d'environnement raster PostGIS

L'installation du package postGIS ajoute ces lignes au fichier greenplum_path.sh pour la prise en charge de PostGIS Raster.

GDAL_DATA spécifie l'emplacement des utilitaires GDAL et des fichiers de support utilisés par la bibliothèque GDAL. Par exemple, le répertoire contient des fichiers de support EPSG tels que gcs.csv​ et pcs.csv (appelés dictionnaires, principalement au format CSV). La bibliothèque GDAL nécessite les fichiers de support pour évaluer correctement les codes EPSG.

POSTGIS_GDAL_ENABLED_DRIVERS définit les pilotes GDAL activés dans l'environnement PostGIS.

POSTGIS_ENABLE_OUTDB_RASTERS est une option de configuration booléenne pour permettre l'accès aux bandes raster hors de la base de données.

Scripts qui suppriment la prise en charge de PostGIS et PostGIS Raster

Pour supprimer la prise en charge de PostGIS d'une base de données, exécutez les scripts SQL fournis avec le package d'extension PostGIS dans $GPHOME/share/postgresql/contrib/postgis-2.1/

  • uninstall/uninstall_rtpostgis.sql - Supprime l'objet PostGIS Raster et les définitions de fonction.
  • uninstall/uninstall_postgis.sql - Supprime les objets PostGIS et les définitions de fonction.

Redémarrez la base de données Greenplum après avoir supprimé le package.

Assurez-vous que ces lignes pour la prise en charge de PostGIS Raster sont supprimées du fichier greenplum_path.sh.

Copyright © 2021 VMware, Inc. ou ses sociétés affiliées. Tous les droits sont réservés.


Est-ce que quelque chose que nous avons expliqué n'était pas clair cette semaine ou était quelque chose de vraiment clair… faites-le nous savoir en utilisant le formulaire de commentaires. C'est anonyme et nous utiliserons les réponses pour résoudre tout problème à l'avenir / adapter le matériel.

Si vous avez un Mac et que vous rencontrez des problèmes avec R, essayez ceci…

Il semble que de nombreux packages dépendent de rgdal, qui pourrait ne pas s'installer correctement…

Ordre des opérations

Installez java JDK (pour répondre à l'erreur Impossible de trouver des JVM correspondant à la version "(null)", qui s'est produite lorsque nous avons essayé de charger le package OpenStreetMap dans RStudio)

Téléchargez et installez le fichier .dmg approprié à partir du kit de développement Java SE 11.0.1

Exécutez sudo R CMD javareconf dans Terminal comme décrit ici (mais ne suivez pas exactement ce tutoriel, juste jusqu'à cette commande de terminal).

(Peut-être) redémarrez votre ordinateur (pas vraiment sûr quand cela est nécessaire).

Installer GDAL

GDAL, la bibliothèque d'abstraction de données géospatiales, semble être un package / bibliothèque / quoi que ce soit dont dépendent de nombreux outils spatiaux que nous utilisons. C'est là que les choses peuvent être délicates - nous avons déjà installé GDAL pour QGIS, mais évidemment RStudio ne peut pas trouver cette installation... je ne sais pas comment mettre à jour les pointeurs, mais nous avons constaté que l'installation de GDAL (encore ?) l'a résolu. Nous espérons que cela n'a pas ruiné ou cassé les autres logiciels que nous avons installés, seul le temps nous le dira :grimacing:


Travailler avec les données OpenStreetMap (OSM)

Nous utiliserons osm2pgsql pour le chargement, car il fonctionne également sous Windows et est plus facile à compiler sur un autre système d'exploitation.

Binaires disponibles : Osm2pgsql. Si sur Windows, utilisez celui marqué Cygwin.

Obtenir des données OSM

Données Open Street Map généralement chargées dans Web Mercator

Chargement des données avec OSM2PGSQL

hstore doit être installé avant de pouvoir utiliser --hstore-all ou --hstore

Le commutateur -W demande le mot de passe. s'il vous manque le fichier default.style, obtenez d'ici

Créer des index et des vues fonctionnels

Tous les restaurants d'une région

--prend 230 ms, remplacer geog par geom réduit à 22 ms


Vous ne savez pas si vous exécutez le meilleur PostGIS possible pour votre PostgreSQL ? Reportez-vous à notre politique de compatibilité de version et de fin de vie.

PostGIS est publié sous la licence publique générale GNU (GPLv2 ou ultérieure). Reportez-vous à la FAQ sur les licences pour plus d'informations. PostGIS est développé par un groupe de contributeurs dirigé par un comité de pilotage du projet.

Qu'est-ce qui se passe en ce moment

PostGIS 3.1.2

L'équipe PostGIS est heureuse de publier la version de PostGIS 3.1.2 !

Cette version est une version de correction de bogues, résolvant les problèmes trouvés dans la version 3.1 précédente.

    , TopoGeometry::geometry cast renvoie NULL pour les objets TopoGeometry vides (Sandro Santilli) , postgistigregéocodeur Meilleures réponses lorsqu'aucun zip n'est fourni (Regina Obe), gérer des dystems de coordonnées composées plus complexes (Paul Ramsey), ne faire que des retournements d'axe sur CRS qui ont un “Lat” comme première colonne (Paul Ramsey)
  • Prend en charge les versions récentes de Proj qui ont supprimé pjavoirrelease (Paul Ramsey) , Ajuster la tolérance pour les calculs géodésiques (Paul Ramsey) , Conversion incorrecte de l'azimut géographique négatif en positif (Paul Ramsey) , Le cluster DBSCAN n'est pas formé lorsque la longueur du jeu d'enregistrements est égale à minPoints (Dan Baston) , Mettre à jour les bboxes après scale/affine changements de coordonnées (Paul Ramsey) , Correction des problèmes de raster liés aux changements de tablefunc de PostgreSQL 14 (Paul Ramsey, Regina Obe) , mingw64 PostGIS / PostgreSQL 14 compile (Regina Obe, Tom Lane) , Mise à jour pour prendre en charge Tiger 2020 (Regina Obe) , Change Proj durée de vie du cache pour durer aussi longtemps que la connexion (Paul Ramsey), ajouter le support de build Pg14 (Paul Ramsey)

PostGIS 3.1.1

L'équipe PostGIS est heureuse de publier la version de PostGIS 3.1.1 !

Cette version est une version de correction de bogues, résolvant les problèmes trouvés dans la version 3.1 précédente.

    , Crash passant la collection avec uniquement des composants vides à ST_MakeValid , Faire fonctionner le pilote synthétique VSICURL comme documenté , Résultats instables de ST_MakeValid , Éviter de répertorier la même géométrie dans différentes collections

PostGIS 3.1.0

L'équipe PostGIS est heureuse de publier la version de PostGIS 3.1.0 !

Cette version expose les nouvelles fonctionnalités de GEOS 3.9 ainsi que de nombreuses améliorations de performances de base pour les jointures spatiales, l'accès aux objets volumineux, la sortie au format texte et plus encore.

Les performances sont une caractéristique clé de cette version, avec des améliorations apportées aux jointures spatiales, aux sorties de texte, aux lectures d'objets volumineux, à la sortie de tuiles vectorielles et à une multitude d'ajustements plus petits.

Le code de clustering k-means a été amélioré pour prendre en charge la pondération et les clusters de dimension supérieure.

Des générateurs de géométrie pour créer des pavages hexagonaux et carrés ont été ajoutés, pour des requêtes de résumé plus simples dans la base de données.

Enfin, PostGIS expose les dernières améliorations de la bibliothèque de géométrie GEOS version 3.9. Le nouveau moteur de superposition (alias “OverlayNG”) offre une gestion plus robuste des géométries d'entrée difficiles, en utilisant un ensemble de nouvelles stratégies de nœud pour traiter la géométrie. Pour l'utilisateur final, cela devrait signifier plus d'"exceptions de topologie" lors de l'utilisation des fonctions d'union, de différence, d'intersection ou de différence symétrique. PostGIS expose également la nouvelle capacité de superposition à précision fixe via un paramètre de taille de grille supplémentaire sur ST_Intersection et les autres fonctions de superposition.

PostGIS 3.1.0rc1

L'équipe PostGIS est heureuse de publier la version candidate de la prochaine version PostGIS 3.1.0. Cette version expose certaines des nouvelles améliorations de performances et de fonctionnalités de GEOS 3.9 ainsi que de nombreuses améliorations de vitesse ne nécessitant pas un GEOS plus récent.


Analyse morphométrique dans les systèmes d'information géographique : applications des logiciels libres GRASS et R ☆

Le développement et l'interprétation des cartes morphométriques sont des outils importants dans les études liées à la néotectonique et à la géomorphologie. Les systèmes d'information géographique (SIG) permettent la rapidité et la précision de ce processus, mais la méthodologie appliquée variera en fonction des outils disponibles et du degré de connaissance de chaque chercheur sur les logiciels impliqués.

Une méthodologie pour intégrer le SIG et les statistiques dans l'analyse morphométrique est présentée pour les paramètres morphométriques les plus courants : hypsométrie, pente, aspect, profils de fauchée, linéaments et densité de drainage, rugosité de surface, isobase et gradient hydraulique.

Le SIG utilisé était le système d'aide à l'analyse des ressources géographiques (GRASS-GIS), un projet open source qui offre un environnement intégré pour l'analyse matricielle et vectorielle, le traitement d'images et la création de cartes/graphiques. L'analyse statistique des paramètres peut être effectuée sur R, un système de calcul statistique et graphique, via une interface avec GRASS qui permet de traiter les cartes raster et les fichiers de points comme des variables d'analyse.

L'élément de base pour dériver des cartes morphométriques est le modèle numérique d'élévation (MNE). Il peut être interpolé à partir de points ou de contours dispersés, au format raster ou vectoriel, il est également possible d'utiliser les DEM de la mission topographique du radar de la navette de la NASA, avec une résolution au sol de 30 m pour les États-Unis et de 90 m pour les autres pays.

La méthodologie proposée peut être adaptée en fonction des nécessités et des outils disponibles. L'utilisation d'outils libres et open source garantit l'accès à tous, et sa vulgarisation croissante ouvre de nouvelles perspectives de développement dans ce domaine de recherche.


Calcul des statistiques zonales¶

Souvent, nous souhaitons résumer des jeux de données raster en fonction de géométries vectorielles, telles que le calcul de l'altitude moyenne d'une zone spécifique ou l'agrégation de résumés de zones ou d'autres statistiques basées sur le nombre par pixel sous des polygones donnés. Rasterstats est un module Python qui fonctionne sur Rasterio et fait exactement cela.

Les rasters continus représentent une surface continue de la distribution d'un phénomène dans l'espace - par ex. altitude ou température. Les DEM sont des rasters continus et nous voulons maintenant examiner un fichier raster de modèle numérique d'élévation (DEM) : dem.tif.

Nous réutilisons à nouveau le fichier Porijõgi GeoJSON de la dernière conférence : porijogi_sub_catchments.geojson. Ce seront nos polygones pour lesquels nous souhaitons agréger des statistiques récapitulatives à partir du raster DEM.

Ouvrons maintenant le DEM et inspectons ses attributs :

Et nous pouvons également tracer ensemble des entités vectorielles et des jeux de données raster : encore une fois, nous nous assurons que nous traçons sur les mêmes « axes », nous utilisons la fonction show Rasterio et lui disons de tracer la première bande dans le jeu de données demdata, et puis nous plaçons notre dataframe Geopandas dessus. Nous devons bien sûr être sûrs que nos jeux de données sont dans le même système de référence de coordonnées spatiales.

L'importation et l'appel de la fonction de statistiques zonales depuis le module Rasterstats sont très simples. Cependant, nous devons être conscients que nous nous référons directement aux chemins de fichiers des ensembles de données, et non à une variable contenant un tableau numpy ou une trame de données ! On peut nommer les statistiques souhaitées via le paramètre stats. Consultez l'API détaillée pour connaître les statistiques disponibles.

La variable zs est une liste d'objets de dictionnaire qui contient les statistiques calculées pour chaque entité/polygone dans le même ordre. Nous devons donc nous fier à l'ordre des fonctionnalités dans le fichier GeoJSON source pour que zonal_statistics soit le même que dans notre cadre de données Geopandas. Mais parce que des ordinateurs nous le pouvons, et nous en faisons une liste dans un cadre de données Pandas et concatéssons simplement (rejoignez/fusionnez simplement en « le piquant sur ») en tant que colonnes supplémentaires.

Nous renommeons également les colonnes pour être plus explicite sur la signification de la variable calculée. Enfin, nous traçons notre geodataframe de bassins versants en fonction de la colonne dem_mean. La répartition de l'altitude moyenne au sein du bassin versant est logique, l'exutoire se trouve au Nord-Est.

Lancer dans le web/MyBinder :

© Copyright 2019, Géoinformatique du paysage Dernière mise à jour le 04 mars 2020.


Voir la vidéo: Tuto QGIS: Extract values from a raster. Extraire des valeurs dun raster