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

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 smile

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

 

Pied de page des forums

Powered by FluxBB