Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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: 3199
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

ChristopheV a écrit:

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: 3199
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: 3199
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

Sylther
Participant assidu
Lieu: Mpl
Date d'inscription: 17 May 2016
Messages: 187
Site web

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 wink

Hors ligne

 

Pied de page des forums

Powered by FluxBB