[OSM-dev] Polygon relationificator

Iván Sánchez Ortega ivan at sanchezortega.es
Mon Sep 14 14:18:07 BST 2009


El Lunes, 14 de Septiembre de 2009, Ian Dees escribió:
> This feature could be added, but could you draw a couple pictures to
> explain what you mean? What happens with the graph edges inside the
> multipolygon? Since they aren't really polygons, do they belong in a
> multipolygon relation? Maybe I'm not correctly interpreting what you meant.

OK, let's do some crapy ASCII-art. So set your e-mail readers to a fixed-width 
font.

Suppose a .osm file containing the following polygons and nodes. Suppose that 
the polygons are originally ways.


n4-------------------------n3-------------------n2---n1
|                          |                    |    |
|                          |                    | P1 |
|                          |                    |    |
|                          |                    n6----n5
|                          |                    |
|                    n11--n10                   |
n19      P4           |    |         P2         |
|                     | P3 |                    n7
|                    n12---n9                   |
|                     |                         n8
|                     |                         |
n18--n17---n16-------n15---------n14------------n13
|                                               |
|                                               |
|                   P5                          |
|                                               |
n21-----------------------n20------------------n19


For every pair of connected nodes (segment i.e. graph edges), relate that 
segment to a set of one or two polygons. Any adjacent segments related to the 
same set of polygons gets converted into a way (i.e. simplified graph edges):


n4-AAAAAAAAAAAAAAAAAAAAAAAA-n3-BBBBBBBBBBBBBBBB--n2-E-n1
|                           |                    |    |
A                           H                    F P1 E
A                           H                    |    |
A                           H                    n6-E-n5
A                           |                    |
|                    n11-C-n10                   G
n19                   |     |                    |
|                     C P3  D                    n7
A         P4          |     |         P2         G
A                    n12-DD-n9                   G
A                     I                          n8
|                     I                          G
n18-J-n17-J-n16-JJJJ-n15-KKKKKKK-n14-KKKKKKKKKK-n13
|                                                |
L                                                L
L                   P5                           L
|                                                |
n21-LLLLLLLLLLLLLLLLLLLLL-n20-LLLLLLLLLLLLLLLL-n19


So this creates ways as follows:
A = n3-n4-n19-n18
B = n3-n2
C = n10-n11-n12
D = n10-n9-n12
E = n2-n1-n5-n6
F = n2-n6
G = n6-n7-n8-n13
H = n3-n10
I = n12-n15

(Please note H and I are both adjacent to both P4 and P2, but are different 
ways as they're not adjacent segments. Same goes to B and G.)

J = n18-n17-n16-n15
K = n15-n14-n13
L = n18-n21-n20-n19-n13

And then, given those, the algorithm destroys the original polygons-as-ways 
and reconstructs them as relations:

P1 = E-F
P2 = B-H-D-I-K-G-F
P3 = C-D
P4 = A-H-C-I-J
P5 = J-K-L



I think I make myself clear with those. Of course, if the inputs are 
multipolygons, the algorithm gets a little more complex, but the idea stays 
the same: *Any polygons that share at least one segment with another polygon 
should get converted into a relation of polygon edges*.


I would like to be able to convert and fix stuff properly... not to speak 
about those JOSM warnings about polygon ways sharing a segment.



P.S.: Remind me to take a course in computational geometry. I'm feeling like I 
need it.


Cheers,
-- 
----------------------------------
Iván Sánchez Ortega <ivan at sanchezortega.es>

Aviso: Este e-mail es confidencial y no debería ser usado por nadie que no sea 
el destinatario original. No se permite la reproducción mediante fotocopia, 
walkie-talkie, emisora de radioaficionado, satélite, televisión por cable, 
proyector, señales de humo, código morse, braille, lenguaje de signos, 
taquigrafía o cualquier otro medio. Bajo ningún concepto debe traducirse al 
francés este e-mail. Este e-mail no puede ser ridiculizado, parodiado, 
juzgado en una competición, o leído en voz alta con un acento gracioso 
llevando un bigote falso y/o cualquier tipo de sombrero, incluyendo pero no 
limitándose a pañuelos. No inciten ni provoquen a este e-mail. Si está 
medicándose, puede experimentar nauseas, desorientación, histeria, vómitos, 
pérdida temporal de la memoria a corto plazo y malestar general al leer este 
e-mail. Consulte a su médico o farmacéutico antes de leer este e-mail. Todas 
las modelos descritas en este e-mail son mayores de 18 años. Si ha recibido 
este e-mail por error es probablemente porque estaba borracho cuando escribí 
la dirección del destinatario.




More information about the dev mailing list