<osm version="0.5" generator="OpenStreetMap server">
   <way id="21536389" visible="true" ...>
      <nd ref="81551260" aii="2500" aid="2501" afi="2598" afd="2599"/>
      <nd ref="81834162" aii="2600" aid="2601" afi="2698" afd="2699"/>
      ...


<relation id="77" visible="true" timestamp="2006-03-14T10:07:23+00:00"
user="fred">
  <member type="way" ref="343" />
  <member type="node" ref="911" role="0" />
  <member type="node" ref="227" role="100" />
  <member type="node" ref="941" role="150" />
  <member type="node" ref="217" role="400" />
  <tag k="type" v="street_number" />
</relation>

 Un tag opcional permitiría indicar si los números pares están a la
izquierda o a la derecha (pero acá definitivamente podríamos incluir algo
más internacional como 1-50 de un lado y 51-100 del otro).
Si se fijan en http://wiki.openstreetmap.org/index.php/Proposed_features/House_numbers#Voting_2b la propuesta, que sería perfectamente útil para nosotros es:

<relation id="42">
 <member type="node" ref="553" role="" />
 <member type="way" ref="104" role="" />
 <tag k="type" v="street_number" />
 <tag k="street_number_left" v="10" />
 <tag k="street_number_right" v="11" />
 <tag k="number_left_type" v="even" />
 <tag k="number_right_type" v="odd" />
</relation>

Este esquema es la misma idea que plantean ustedes adaptado al modelo de relaciones de OSM. Tiene una característica importante que es que se puede usar aun teniendo datos parciales. Si a una calle le ponemos las alturas del primer y último nodo, probablemente la interpolación a lo largo de la calle nos dé una posición bastante buena, sin necesidad de tener los nodos intermedios. Es más, es posible que hasta extrapolar de resultados satisfactorios en muchos casos.

Esto es especialmente importante en un proyecto como este que va creciendo orgánicamente.

El problema serio que presenta esto es a qué se considera izquierda y derecha en una calle. Tenemos que tener en cuenta que es relativamente sencillo dar vuelta una calle que es doble mano y esto desbarataría por completo la numeración. Usando el ejemplo de la calle Charcas, solucionaríamos este problema incluyendo el nodo inicial y el nodo final en la relación de la siguiente manera:

<relation id="37425">
 <tag k="type" v="ar:street_number"/>
 <member type="node" ref="81551260" role="first_node"/>
 <member type="node" ref="81834162" role="last_node"/>
 <member type="way" ref="21536389" role="way"/>
 <tag k="last_street_number_right" v="2599"/>
 <tag k="first_street_number_right" v="2501"/>
 <tag k="first_street_number_left" v="2500"/>
 <tag k="last_street_number_left" v="2598"/>
</relation>

Esto nos vuelve inmunes a que nos den vuelta la calle pero complica bastante el ingreso de las alturas.

Sin embargo en la Argentina, hasta donde yo sé, la numeración de las calles tiene una propiedad muy útil y es que siempre crece en el mismo sentido, por lo que podemos definir el lado derecho e izquierdo de la calle considerando que la recorremos del número más bajo hacia el más alto, con lo que volveríamos al ejemplo anterior:

<relation id="37425">
 <tag k="type" v="ar:street_number"/>
 <member type="node" ref="81551260" role=""/>
 <member type="way" ref="21536389" role=""/>
 <tag k="street_number_right" v="2501"/>
 <tag k="street_number_left" v="2500"/>
</relation>

Ni siquiera nos resulta necesario aclarar de qué lado es par e impar porque basta con mirar si el primer número de ese lado es par o impar. Tampoco son necesarios ahora los roles ya que hay un solo nodo y una sola vía en la relación. A título de ejemplo pueden ver esta relación implementada en:

http://www.openstreetmap.org/browse/relation/37425

¿Comentarios?

_______________________________________________
Talk-ar mailing list
Talk-ar@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-ar

Responder a