Pages: 1
- Sujet précédent - QGIS: Repérer les points séparés par une distance choisie - Sujet suivant
#1 Sun 21 April 2019 17:08
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
QGIS: Repérer les points séparés par une distance choisie
Bonjour à tous,
Je voudrais trouver un moyen de repérer facilement, dans une couche points, les bâtiments isolés de plus de 1 km d'un autre.
Je connais une technique qui concerne l'utilisation du tampon, puis en faisant une sélection par localisation se chevauchant, mais j'aimerais pouvoir plutôt le faire directement en SQL sur ma table attributaire.
L'idéal, ça serais de créer une nouveau champs "Etat" qui m'affiche "Bati_Isolé" ou "Bati_rapproche" selon si le bâti est isolé d'une distance > à 1 km, ou pas.
Malheureusement, mes bases en SQL ne me suffisent pas ^^'
Merci à vous.
Hors ligne
#2 Sun 21 April 2019 21:07
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 404
Re: QGIS: Repérer les points séparés par une distance choisie
bonsoir
le plugin NNjoin peut calculer la distance 1 à 1 la plus proche, ensuite vous pouvez faire un Case when "dist" > 1000 then 'isolé' else 'rapprocé'
LJ
Hors ligne
#3 Tue 23 April 2019 20:56
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Repérer les points séparés par une distance choisie
En SQL dans mon logiciel préféré :
Code:
Update ( SELECT [t].[ETAT], [u].[NAME1], [u].[dist] FROM [Pts_1km] AS [t] LEFT JOIN ( Select [a].[NAME] as [NAME1] , Min(Distance([a].[Geom (I)], [b].[Geom (I)])) as [dist] FROM [Pts_1km] as [a], [Pts_1km] as [b] where [a].[NAME] <> [b].[NAME] GROUP BY [a].[NAME] ) as [u] ON [t].[NAME] = [u].[NAME1]) Set [ETAT] = CASE WHEN [dist] > 1000 THEN "Bati_Isolé" ELSE "Bati_rapproché" END
Il reste à convertir le tout dans QGIS. Dès que je trouve le temps...
Le Left Join sert à rejoindre la table de départ avec la table qui a fait l'objet d'un Group By. Après le Group By, le lien avec la table d'origine est perdu et il faut donc la retrouver.
Dernière modification par carteq (Tue 23 April 2019 20:58)
Hors ligne
#4 Tue 23 April 2019 23:03
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Repérer les points séparés par une distance choisie
En QGIS, le premier Select (en couche virtuelle):
Code:
Select Min(Distance(a.geometry, b.geometry)) from pts_1km as [a], pts_1km as [b] where a.NAME <> b.NAME GROUP By a.NAME
Ça retourne la distance (minimale) par rapport au point le plus proche.
À suivre...
Dernière modification par carteq (Tue 23 April 2019 23:04)
Hors ligne
#5 Wed 24 April 2019 16:39
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Re: QGIS: Repérer les points séparés par une distance choisie
Merci beaucoup
Hors ligne
#6 Wed 24 April 2019 17:22
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Repérer les points séparés par une distance choisie
Finalement, je l'ai fait avec le DBManager via une couche Spatialite :
Code:
WITH cte (NAME1, dist) as ( Select a.NAME as NAME1, Min(Distance(a.GEOMETRY, b.GEOMETRY)) as dist from pts_1km as a, pts_1km as b where a.NAME <> b.NAME GROUP By a.NAME) Update pts_1km set etat = CASE WHEN (select dist from cte where cte.NAME1 = NAME) > 1000 THEN "Bati_Isolé" ELSE "Bati_rapproché" END
la table cte est une table temporaire.
Via un geopackage, le DBManager semble non fonctionnel.
Via une couche virtuelle, impossible de faire un update. Alors Spatialite est le bon outil.
La requête est facilement adaptable je dirais pour la calculatrice de champs. La syntaxe est assez similaire.
Dernière modification par carteq (Wed 24 April 2019 17:49)
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Repérer les points séparés par une distance choisie - Sujet suivant