Suite

Jointure spatiale plus efficace en Python sans QGIS, ArcGIS, PostGIS, etc.

Jointure spatiale plus efficace en Python sans QGIS, ArcGIS, PostGIS, etc.


J'essaie de faire une jointure spatiale un peu comme dans l'exemple ici : existe-t-il une option python pour « joindre les attributs par emplacement » ?. Cependant, cette approche semble vraiment inefficace / lente. Même l'exécuter avec un modeste 250 points prend près de 2 minutes et échoue entièrement sur les fichiers de formes avec > 1 000 points. Est-ce qu'il y a une meilleure approche? J'aimerais le faire entièrement en Python sans utiliser ArcGIS, QGIS, etc.

Je serais également intéressé de savoir s'il est possible de SUMMER les attributs (c'est-à-dire la population) de tous les points qui se trouvent dans un polygone et de joindre cette quantité au fichier de formes du polygone.

Voici le code que j'essaye de convertir. J'obtiens une erreur à la ligne 9 :

poly['properties']['score'] += point['properties']['score']

qui dit :

TypeError : type(s) d'opérande non pris en charge pour += : 'NoneType' et 'float'.

Si je remplace le "+=" par "=", cela fonctionne bien mais cela ne fait pas la somme des champs. J'ai également essayé de les faire sous forme d'entiers, mais cela échoue également.

avec fiona.open(poly_shp, 'r') comme n: avec fiona.open(point_shp,'r') comme s: outSchema = {'geometry': 'Polygon','properties':{'region':'str ','score':'float'}} avec fiona.open (out_shp, 'w', 'ESRI Shapefile', outSchema, crs) en sortie : pour le point dans s : pour poly dans n : if shape(point[' geometry']).within(shape(poly['geometry'])): poly['properties']['score']) += point['properties']['score']) output.write({ ' properties':{ 'region':poly['properties']['NAME'], 'score':poly['properties']['score']}, 'geometry':poly['geometry']})

Fiona renvoie des dictionnaires Python et vous ne pouvez pas utiliserpoly['properties']['score']) += point['properties']['score'])avec un dictionnaire.

Exemple de sommation d'attributs à l'aide des références données par Mike T :

# lire les fichiers de formes import fiona from shapely.geometry import shape polygons = [pol for pol in fiona.open('poly.shp')] points = [pt for pt in fiona.open('point.shp')] # attributs des polygones pour poly dans les polygones : print poly['properties'] OrderedDict([(u'score', 0)]) OrderedDict([(u'score', 0)]) OrderedDict([(u'score', 0)]) # attributs des points pour pt en points : print i['properties'] OrderedDict([(u'score', 1)])… # (idem pour les 8 points)

Maintenant, nous pouvons utiliser deux méthodes, avec ou sans index spatial :

1 : sans

# itérer à travers les points pour i, pt dans énumérer(points): point = shape(pt['geometry']) #itérer à travers les polygones pour j, poly dans énumérer(polygones): if point.within(shape(poly['geometry '])): # somme des valeurs d'attributs polygons[j]['properties']['score'] = polygons[j]['properties']['score'] + points[i]['properties'][ 'But']

2: avec un index R-tree (vous pouvez utiliser pyrtree ou rtree)

# Créez l'index R-tree et stockez-y les caractéristiques (boîte englobante) de rtree import index idx = index.Index() for pos, poly in enumerate(polygons): idx.insert(pos, shape(poly['geometry ']).bounds) # itérer à travers les points pour i,pt dans énumérer(points): point = shape(pt['geometry']) # itérer à travers l'index spatial pour j dans idx.intersection(point.coords[0]) : if point.within(shape(polygons[j]['geometry'])): polygons[j]['properties']['score'] = polygons[j]['properties']['score'] + points[i]['propriétés']['score']

Résultat avec les deux solutions :

pour poly dans les polygones : print poly['properties'] OrderedDict([(u'score', 2)]) # 2 points dans le polygone OrderedDict([(u'score', 1)]) # 1 point dans le polygone OrderedDict([(u'score', 1)]) # 1 point dans le polygone

Quelle est la différence ?

  • Sans l'index, vous devez parcourir toutes les géométries (polygones et points).
  • Avec un index spatial englobant (Spatial Index RTree), vous parcourez uniquement les géométries qui ont une chance de se croiser avec votre géométrie actuelle ('filtre' qui permet d'économiser une quantité considérable de calculs et de temps…)
  • mais un Index Spatial n'est pas une baguette magique. Lorsqu'une très grande partie de l'ensemble de données doit être récupérée, un index spatial ne peut donner aucun avantage de vitesse.

Après:

schema = fiona.open('poly.shp').schema avec fiona.open ('output.shp', 'w', 'ESRI Shapefile', schema) en sortie : pour poly dans les polygones : output.write(poly)

Pour aller plus loin, regardez Utilisation de l'indexation spatiale Rtree avec OGR, Shapely, Fiona


De plus, les géopandas incluent désormais en optionarbreen tant que dépendance, voir le repo github

Donc, au lieu de suivre tout le (très joli) code ci-dessus, vous pouvez simplement faire quelque chose comme :

import geopandas from geopandas.tools import sjoin point = geopandas.GeoDataFrame.from_file('point.shp') # ou geojson etc poly = geopandas.GeoDataFrame.from_file('poly.shp') pointInPolys = sjoin(point, poly, how= "gauche") pointSumByPoly = pointInPolys.groupby('PolyGroupByField')['fields', 'in', 'grouped', 'output'].agg(['sum'])

Pour obtenir cette fonctionnalité élégante, assurez-vous d'installer d'abord la bibliothèque C libspatialindex

EDIT : correction des importations de packages


Utilisez Rtree comme index pour effectuer les jointures beaucoup plus rapides, puis Shapely pour effectuer les prédicats spatiaux afin de déterminer si un point se trouve réellement dans un polygone. Si cela est fait correctement, cela peut être plus rapide que la plupart des autres SIG.

Voir des exemples ici ou ici.

La deuxième partie de votre question concernant 'SUM', utilisez undictobjet pour accumuler des populations en utilisant un identifiant de polygone comme clé. Cependant, ce type de chose est fait beaucoup plus bien avec PostGIS.


Cette page Web montre comment utiliser une recherche point dans un polygone Bounding Box avant la requête spatiale Within plus coûteuse de Shapely.

http://rexdouglass.com/fast-spatial-joins-in-python-with-a-spatial-index/


Jour d'entrainement

Des sessions de formation d'une demi-journée et d'une journée complète auront lieu le 13 août à un coût supplémentaire de 35 $ pour les sessions d'une demi-journée et de 65 $ pour les sessions d'une journée complète. Les sessions de formation sont remplies selon le principe du premier arrivé, premier servi.

Sessions de formation d'une journée Vendredi 13 août de 8h30 à 17h

Des sessions de formation d'une journée complète sont offertes à un coût supplémentaire de 65 $ par session.

Asset Management 101 : Principes et pratiques pour le professionnel du SIG

Instructeur : Anthony Dowell et Christopher Pawlowski, AECOM

La gestion des actifs devient un objectif de plus en plus important pour les agences et les organisations qui cherchent à optimiser leurs budgets, à maintenir leurs actifs existants et à investir dans de nouvelles améliorations et de nouveaux projets. Cette session fournira aux participants une introduction aux principes clés de la gestion des actifs, à la terminologie et aux meilleures pratiques, en mettant l'accent sur le rôle que les données, les systèmes et les professionnels du SIG jouent dans le cycle de vie et le cadre de la gestion des actifs. Les logiciels Esri ArcGIS Desktop et Innovyze InfoAsset Planner seront utilisés pour des exercices pratiques, en mettant l'accent sur la gestion des actifs pour les services d'eau/eaux usées.

Besoins logiciels

  • ArcGIS Desktop (ArcMap & ArcCatalog) version 10.6.1 ou supérieure
  • Innovyze InfoAsset Planner (Fichiers d'installation et licences temporaires fournies par AECOM)

Introduction à Microsoft Power BI - Exploration et visualisation des données

Instructeur : Anastassiya Suprunova

Au cours de la dernière année, vous avez vu de nombreux tableaux de bord différents, grâce à la pandémie. Nous vivons dans un monde de flux de données constant et si peu de temps pour transformer les données en informations précieuses. Rejoignez cet atelier pour apprendre à créer des tableaux de bord informatifs et attrayants à l'aide du logiciel gratuit Microsoft Power BI. Microsoft Power BI n'est pas la seule option sur le marché qui peut vous aider à visualiser et analyser vos données. Pourtant, il présente des avantages importants que nous explorerons au cours de cet atelier.

Au cours de cet atelier, vous apprendrez à travers des exercices pratiques : la différence entre Power BI Desktop et Power BI Service pour pouvoir choisir l'outil qui vous convient comment connecter vos données comment transformer vos données pour répondre à vos besoins comment vous pouvez visualiser ces données de manière significative en utilisant des éléments visuels tels que des colonnes, des lignes, des camemberts, des arborescences, des jauges, des cartes, etc. comment cartographier vos données à l'aide des différentes options disponibles dans Power BI comment raconter l'histoire avec vos données en créant tableaux de bord informatifs et interactifs fonctionnalités avancées telles que signets et info-bulles comment publier et partager votre travail avec d'autres et bien d'autres trucs et astuces Power BI.

Besoins logiciels

  • Microsoft BI Power Desktop
  • Adresse e-mail de l'organisation ou de l'étudiant requise. Gmail, Yahoo et autres adresses ne sont pas autorisés. Veuillez poser des questions.

Modélisation des bassins versants à l'aide des outils Open Source PostGIS et QGIS

Instructeur : John Buckley, McCormick Taylor

Cet atelier présentera aux participants plusieurs outils SIG open source en mettant l'accent sur PostGIS et QGIS. Il est conçu pour les utilisateurs ayant une compréhension de base du SIG qui peuvent être intéressés à en savoir plus sur les alternatives open source à ArcMap. Les utilisateurs intéressés par la modélisation des eaux de surface ou l'analyse de grands ensembles de données à l'aide de SQL sont également les bienvenus. Nous allons charger des données raster et vectorielles dans une base de données compatible PostGIS et les visualiser dans QGIS. En utilisant des données d'altitude disponibles gratuitement, nous délimiterons des bassins, des cours d'eau, des couches d'accumulation de flux et de direction d'écoulement pour un bassin versant local à l'aide de GRASS et de QGIS. Enfin, nous calculerons les chemins d'écoulement en aval et les zones de drainage en amont en utilisant uniquement SQL, et nous visualiserons les sorties dans QGIS. Tout au long de l'atelier, j'espère partager les nombreux trucs et astuces que j'ai appris au cours des années d'utilisation de ces excellents packages open source. Si le temps le permet, nous verrons comment ces mêmes outils et techniques peuvent être utilisés pour la cartographie des inondations, la modélisation climatique et l'analyse de tous les types de grands ensembles de données spatiales.


Pourquoi sommes-nous obsédés par le « lieu » en tant que dimension ?

Premièrement, il n'y a pas de « mobilité » sans localisation dynamique. En d'autres termes, la localisation est un aspect fondamental chaque fois qu'il y a un mouvement de biens (personnes, véhicules, marchandises, colis) sur le terrain. Après tout, dans les villes et les villages où les choses changent à chaque kilomètre carré dans une ville, il est important d'ajouter le « contexte » de ces zones.

Pour l'économie à la demande dans laquelle nous vivons, l'analyse des données de localisation dans toutes vos dimensions (utilisateurs, magasins, partenaires) devient critique en temps réel. C'est parce que vous devez faire correspondre votre offre à la demande, faire des prix basés sur l'emplacement, des promotions ou des livraisons plus rapides et plus précises à grande échelle !

Deuxièmement, la localisation devient également cruciale pour l'analyse chaque fois qu'il est question de « où » dans un problème commercial. Par exemple, dois-je ouvrir mon nouveau magasin? dois-je lancer des campagnes et des produits ? dois-je envoyer mon personnel de livraison?

Et enfin, les expériences basées sur la localisation les plus réussies pour les consommateurs sont basées sur des activités séquentielles à un niveau très granulaire : où êtes-vous ? Où avez-vous besoin d'aller? Que veux-tu faire une fois là-bas ? Cela devient important lorsque vous devez acquérir des clients en ciblant les publicités et en les fidélisant et en les engageant en étudiant leur comportement.

L'emplacement est excitant! S'il est bien joué, il peut entraîner des améliorations significatives des revenus (exemple : Uber et Airbnb). Son utilisation élevée et sa nature en temps réel le rendent vraiment précieux et collant.

Mais, tout ce temps, composante de localisation qui a été particulièrement négligée dans les décisions commerciales. En effet, les outils d'analyse conventionnels sont fantastiques pour le trésor de données statistiques dont disposent les entreprises, mais quelque part, ils ne parviennent pas à décision basée sur l'emplacement.

Vous vous demandez peut-être : « Mais pourquoi ? »

Avant d'approfondir cela, comprenons en quoi les données géospatiales sont différentes des données statistiques.


Diffusez l'écran Android sur un PC avec TeamViewer

Je cherchais depuis un certain temps un moyen simple de diffuser un écran de tablette Android sur un PC (Windows) pour faire des démonstrations sur le fonctionnement des applications sur Android (telles que des démonstrations sur Collector et d'autres applications ArcGIS). Bien sûr, vous pouvez utiliser une caméra portable ou une webcam, mais que se passe-t-il si vous voulez juste montrer quelque chose très rapidement sans configurer les caméras ?

Au cas où vous auriez besoin de faire des démos avec les applications mobiles, lisez ci-dessous comment procéder.

Il existe de nombreuses façons de le faire (serveurs vnc, applications payantes, donner un accès root sur l'appareil), mais le plus efficace que j'ai trouvé jusqu'à présent est d'utiliser TeamViewer. Il existe également une version gratuite de ce logiciel.

  1. Téléchargez TeamViewer sur votre ordinateur Windows. Vous n'avez pas besoin de l'installer, il est possible d'exécuter le .exe une seule fois.
  2. Installez TeamViewer QuickSupport sur votre tablette.
  3. Lors de l'exécution de TeamViewer sur votre tablette, il vous sera demandé si vous souhaitez installer un module complémentaire pour le contrôle à distance de l'appareil. La tablette trouvera automatiquement le module complémentaire pour votre fabrication (Lenovo, Sony, Samsung, HTC, HP, etc.) et l'installera.
  4. Ensuite, connectez-vous simplement de la machine Windows à la tablette Android (les deux doivent être connectés à Internet bien sûr).

Il peut y avoir un certain retard lorsque vous avez une mauvaise connexion Internet, mais en général, les gens comprennent cela et ont tendance à se concentrer sur la fonctionnalité et non sur les performances du partage d'écran. Gardez à l'esprit que vous pouvez également faire le contrôle à distance, donc le dépannage directement sur la tablette du client est une option si vous travaillez dans le support technique.

Ainsi, vous pouvez non seulement voir votre écran, mais également effectuer des clics pour simuler des touchers sur la tablette. Une fonctionnalité étonnante que j'utiliserai souvent maintenant pour faire des démonstrations à nos clients.