#1 Fri 11 May 2018 22:29
- birame sene
- Juste Inscrit !
- Date d'inscription: 6 May 2018
- Messages: 2
Communes adjacentes
Salut
Je fais un stage dans une institut de recherche sur l'accès aux médecins traitant en IDF et je dispose d'une base de données avec différentes variables géolocalisées à l'IRIS et à la commune, comme le nombre de médecins qui acceptent de prendre de nouveaux, le nombre de médecins qui font des visites à domicile etc...
Maintenant pour la représentation cartographique, j'ai calculé le rapport entre MG qui acceptent de nouveaux sur le nombre de médecins total à l'IRIS et à la commune, et j'ai discrétisé cela en intervalle égale de 3 (0,33 rouge, 0,67 jaune et 1 jaune clair). Le résultat est très homogène et peut fausser mes analyses car je souhaite prendre en compte les unités géographiques voisines pour avoir une meilleure idée sur les zones de tension (en rouge).
Maintenant je souhaite calculer ce rapport en tenant commune des unités géographiques adjacentes pour déterminer les zones qui sont en tension où il y'a un grand risque de ne pas disposer d'un médecin traitant , par exemple pour chaque commune ou IRIS je veux calculer le rapport entre le nombre de médecins qui acceptent les nouveaux patients et celui de ses adjacents pour avoir la moyenne entre ces unités géographiques et déterminer si la zone est en tension ou pas.
Est ce que vs avez une idée sur cela?
Existe t-il une requête sur arcgis ou un logiciel SIG pour faire ce type de calcul?
Merci pour vos solutions car je suis bloqué...
Hors ligne
#2 Mon 14 May 2018 09:47
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3198
- Site web
Re: Communes adjacentes
Bonjour,
C'est un problème de topologie, qui peut se résoudre de plusieurs façons. Je ne sais pas pour les logiciels SIG, mais au niveau base de données, vous pouvez (avec postgrersql/postgis) utilisez la topologie native (intégrer vos communes dans une couche topologique) ou utiliser les relations spatiales pour connaitre qui est voisin de qui. Toute la problématique réside dans la nature géométrique de vos contours de communes (cadastre, IGN ou autre).
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Mon 14 May 2018 13:15
- birame sene
- Juste Inscrit !
- Date d'inscription: 6 May 2018
- Messages: 2
Re: Communes adjacentes
Bonjour,
C'est un problème de topologie, qui peut se résoudre de plusieurs façons. Je ne sais pas pour les logiciels SIG, mais au niveau base de données, vous pouvez (avec postgrersql/postgis) utilisez la topologie native (intégrer vos communes dans une couche topologique) ou utiliser les relations spatiales pour connaitre qui est voisin de qui. Toute la problématique réside dans la nature géométrique de vos contours de communes (cadastre, IGN ou autre).
Mes contours sont issus de l'IGN en fait, il s'agit des communes généralisées en île de France que j'ai téléchargé sur le site Opendataidf.
Je n'ai jamais utilisé Postgrersql ou postgis, pouvez vous me dire si je dois utiliser un langage spécial sur ce langage?
Hors ligne
#4 Mon 14 May 2018 13:21
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3198
- Site web
Re: Communes adjacentes
Bonjour,
Si vous n'avez jamais utilisé Postgesql et postgis cela va être un peu compliqué. Le langage utilisé est SQL.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#5 Mon 14 May 2018 14:15
- Jean-Yves G
- Membre
- Lieu: toulouse
- Date d'inscription: 12 Oct 2005
- Messages: 516
Re: Communes adjacentes
Bonjour,
à défaut de traiter l'adjacence avec de la topologie ... ce qui vous interesse, c'est la proximité ... et donc soit en faisant un buffer autour de la commune considérée ou bien un grand cercle à partir du centroïde, vous récupérez par intersection les communes voisines ...
Cordialement
JY
Hors ligne
#6 Mon 14 May 2018 14:43
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3198
- Site web
Re: Communes adjacentes
Bonjour,
et donc soit en faisant un buffer autour de la commune considérée ou bien un grand cercle à partir du centroïde, vous récupérez par intersection les communes voisines ...
Tellement le nez dedans que j'en oublie les solutions simples !!
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#7 Tue 15 May 2018 11:32
- Bapt
- Participant occasionnel
- Date d'inscription: 6 Jan 2011
- Messages: 29
Re: Communes adjacentes
Bonjour,
si vous tenez absolument à raisonner sur les voisinages de vos communes/IRIS, il y a un certain nombre d'options, notamment avec R. D'accès plus immédiat, le logiciel GeoDa, gratuit et avec une interface graphique assez simple, vous permet de créer des matrices de contiguïté à partir d'une couche 'polygones' (shapefile) : http://geodacenter.github.io/workbook/4 … lab4a.html
ça pousse ensuite plutôt pour des méthodes d'économétrie spatiale, même si une bonne part des outils relève de l'analyse exploratoire...
Bon courage
Hors ligne
#8 Tue 15 May 2018 18:01
- Cerise45
- Participant actif
- Date d'inscription: 31 Aug 2011
- Messages: 132
Re: Communes adjacentes
Un script dans la console python de QGIS vous permettra de lister les ID des polygones adjacents, pour chaque commune/IRIS:
Code:
################################################################################ # Copyright 2014 Ujaval Gandhi # #This program is free software; you can redistribute it and/or #modify it under the terms of the GNU General Public License #as published by the Free Software Foundation; either version 2 #of the License, or (at your option) any later version. # #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. # #You should have received a copy of the GNU General Public License #along with this program; if not, write to the Free Software #Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ################################################################################ from qgis.utils import iface from PyQt4.QtCore import QVariant # Replace the values below with values from your layer. # For example, if your identifier field is called 'XYZ', then change the line # below to _NAME_FIELD = 'XYZ' _NAME_FIELD = 'NAME' # Replace the value below with the field name that you want to sum up. # For example, if the # field that you want to sum up is called 'VALUES', then # change the line below to _SUM_FIELD = 'VALUES' _SUM_FIELD = 'POP_EST' # Names of the new fields to be added to the layer _NEW_NEIGHBORS_FIELD = 'NEIGHBORS' _NEW_SUM_FIELD = 'SUM' layer = iface.activeLayer() # Create 2 new fields in the layer that will hold the list of neighbors and sum # of the chosen field. layer.startEditing() layer.dataProvider().addAttributes( [QgsField(_NEW_NEIGHBORS_FIELD, QVariant.String), QgsField(_NEW_SUM_FIELD, QVariant.Int)]) layer.updateFields() # Create a dictionary of all features feature_dict = {f.id(): f for f in layer.getFeatures()} # Build a spatial index index = QgsSpatialIndex() for f in feature_dict.values(): index.insertFeature(f) # Loop through all features and find features that touch each feature for f in feature_dict.values(): print 'Working on %s' % f[_NAME_FIELD] geom = f.geometry() # Find all features that intersect the bounding box of the current feature. # We use spatial index to find the features intersecting the bounding box # of the current feature. This will narrow down the features that we need # to check neighboring features. intersecting_ids = index.intersects(geom.boundingBox()) # Initalize neighbors list and sum neighbors = [] neighbors_sum = 0 for intersecting_id in intersecting_ids: # Look up the feature from the dictionary intersecting_f = feature_dict[intersecting_id] # For our purpose we consider a feature as 'neighbor' if it touches or # intersects a feature. We use the 'disjoint' predicate to satisfy # these conditions. So if a feature is not disjoint, it is a neighbor. if (f != intersecting_f and not intersecting_f.geometry().disjoint(geom)): neighbors.append(intersecting_f[_NAME_FIELD]) neighbors_sum += intersecting_f[_SUM_FIELD] f[_NEW_NEIGHBORS_FIELD] = ','.join([str(i) for i in neighbors]) f[_NEW_SUM_FIELD] = neighbors_sum # Update the layer with new attribute values. layer.updateFeature(f) layer.commitChanges() print 'Processing complete.'
Hors ligne
#9 Tue 15 May 2018 21:06
Re: Communes adjacentes
Script devant sans doute être (très légèrement) modifié pour Qgis3.
Les
Code:
print 'message'
devront être remplacés par
Code:
print('message')
et
Code:
from PyQt4.QtCore import QVariant
par
Code:
from PyQt5.QtCore import QVariant
Bonne chance
Hors ligne