Affiner la bonne réponse de @ Pablo, avec les définitions (ci-dessous) et ajouter une liste de contrôle pour chaque méthode, ce qui restreint leur utilisation. Définitions:
La couche de blocs est une table SQL avec des polygones représentant les limites des blocs de ville , qui ou sans trottoirs , mais préservant les ruelles privées (voir front-1 ) ou non adressables (voir front-2 ) dans le bloc.
La couche de lot est une table SQL avec des polygones représentant les limites des terrains .
La couche Street est une table SQL avec des lignes représentant les rues ... Ou, dans un "terrain fluvial", il y a aussi des rivières (et un chemin de fer peut être un "front"?).
Front-1 : les méthodes de @ Pablo concernent un concept général de front , où certains lots ont plus d'un "front sur une rue", parce qu'ils sont au coin (ont deux segments avant ou plus sur toutes ses rues environnantes).
Front-2 : "front" concerne la rue indiquée dans l'adresse officielle (ou adresse de correspondance) du lot. Eux, tous les lots (même au coin) n'ont qu'un seul segment de rue. PS: si votre système d'adresses et la couche de blocs acceptent beaucoup de " condominiums horizontaux " et ses adresses de condo, les "rues privées" doivent apparaître comme des rues habituelles .
L' illustraion de la question de @ ChristianAbreu montre le concept Front-2 (!) , Pas le concept général.
Note technique: vous pouvez connecter Python avec PostGIS ou avec tout autre outil compatible OGC (pour SQL spatial) pour exprimer formellement les listes de contrôle.
Liste de contrôle pour la méthode # 1 - côté d'un polygone qui ne touche aucun autre polygone
Cette méthode a une approche topologique, n'est valable que pour les blocs où toutes les zones du lot forment la zone de leur bloc. Donc, pour utiliser cette méthode, vous avez besoin d'une couche de blocs .
Exprimer formellement: vérifiez si blkarea~=sum_lotarea
pour chaque bloc,
SELECT ST_Area(geom) INTO blkarea FROM block WHERE gid=each1;
SELECT SUM(ST_Area(geom)) INTO sum_lotarea FROM lot WHERE gid_block=each1;
Ou, si les goemetries ne sont pas exactes, ou si les blocs sont avec des trottoirs, utilisez le moins w pour ST_Buffer(block.geom,-w)
cela assure ST_Within(lot.geom lot,ST_Buffer(block.geom,-w))
pour tous les lots.
REMARQUE: vérifiez également
si tous les lots sont dans un bloc, ST_Within(lot.geom,block.geom)
pour tous les lots et blocs associés.
si, pour tous les lots non disjoints, il n'y a pas de zones superposées. not(ST_Overlaps(a,b))
ou cette zone d'intersection n'a aucune signification (c'est-à-dire 2*ST_Area(ST_Intersection(a,b))/(ST_Area(a)+ST_Area(b))<0.01
).
Liste de contrôle pour la méthode # 2 - le côté du polygone le plus proche d'une route
Cette méthode a une approche géométrique, basée sur une distance euclidienne minimale .
Vérifiez si la couche de rue n'a que des "rues publiques" , car vous devez séparer les "rues publiques" (qui peuvent exprimer l'adresse officielle d'un terrain) des "ruelles" (peuvent être internes au lot ou un "immeuble à condos" ").
Ensuite, vérifiez visuellement si tous les "blocs visuels" sont entourés de rues. Si votre couche rue est incomplète, la méthode n'est pas valide pour ces blocs.
Conclusions: règles de choix des méthodes
Pour la définition de Front-1 :
A) Lorsque vous avez de bonnes données sur les rues, utilisez la méthode n ° 2 ;
B) Lorsque vous avez une couche de bloc et une couche de lot cohérente, utilisez la méthode # 1
C) Lorsque vous n'avez pas de bonnes données, essayez de diviser vos données spatiales en portions où vous pouvez utiliser l'une ou l'autre méthode. PS: même sans la couche de blocs , vous pouvez construire des lots voisins, ou par une bonne réponse à cette question .
Pour la définition Front-2 : vous avez besoin de bonnes données de rue, car la définition Front-2 a besoin du nom de la rue (de l'adresse du lot). Utilisez la méthode n ° 2 et supprimez les segments avant qui n'ont pas le même nom de rue que l'adresse du lot.