[Talk-de] JOSM: Relationen - Element-Reihenfolge bearbeiten - Codefragment

Jan Tappenbeck osm at tappenbeck.net
Fr Mai 8 06:22:21 UTC 2009


sorry - but ich kann kein java !
gruß jan :-)

marcus.wolschon at googlemail.com schrieb:
> On Fri, 08 May 2009 07:40:32 +0200, Jan Tappenbeck <osm at tappenbeck.net>
> wrote:
>> Moin !
>>
>> seit der Umstellung auf die neue API werden die Ways einer Relation auch 
>> in ihrer Reihenfolge bewertet und in JOSM gibt es im 
>> Relationsbearbeitungsdialog zwei Schaltflächen für das Verschieben der 
>> Elemente in der Reihenfolge.
>>
>> Wenn man die Nummern der Ways kennt und weiß welche ID nach / vor 
>> welcher kommt ist das ja schön - aber gibt es noch ein weiteres 
>> Hilfsmittel darüberhinaus welches mir noch nicht bekannt ist.
>>
>> Ansonsten wäre vielleicht über folgenden Vorschlag nachzudenken - eine 
>> Funktion analysiert in welcher Reihenfolge die Elemente angeordnet 
>> werden müßten um einen fortlaufenden Weg  ergeben zu können. Der User 
>> kann dann das Ergebnis bewerten und ggf. übernehmen.
> 
> Sehr gute Idee.
> Vorschlag für eine Umsetzung, die auch mit dual-carriageways funktioniert:
> 
> /**
>  * Combine ways sharing the same endpoints
>  * to find an ordering for relation-members
>  * that share the same role.
>  * @param input all ways of a relation
>  * @return minimal list of ways
>  */
> public Set<List<Way>> combineWays(final Set<Way> input) {
> 
>   Set<List<Way>> output = new Hashset<List<Way>>();
>   for(Way in : input) {
>      List<Way> temp = new LinkedList<Way>();
>      temp.add(in);
>      output.add(temp);
>   }
> 
>   // go on as long as we can combine 2 of the lists
>   // in "output"
>   boolean combined = true;
>   while (combined) {
>      combined = false;
>      for(List<Way> first : output ) {
>         for(List<Way> second: output ) {
>             if (first == second) {
>                 break;
>             }
>             Way firstWay = first.get(first.size() - 1);
>             Way secondWay = second.get(0);
>             if (firstWay.getWayNodes(firstWay.getWayNodes().size() -
> 1).getNodeID()
>                == secondWay .getWayNodes(0).getNodeID) {
>                  first.appendAll(second);
>                  combined = true;
>                 break;
>             }
>         }
>         if (combined) {
>            break; // avoid ConcurrentModificationException
>         }
>      }
>   }
> }
> 
> _______________________________________________
> Talk-de mailing list
> Talk-de at openstreetmap.org
> http://lists.openstreetmap.org/listinfo/talk-de





Mehr Informationen über die Mailingliste Talk-de