Changes between Version 4 and Version 5 of Help/Plugin/Scripting/Python


Ignore:
Timestamp:
Sep 13, 2011 2:34:57 AM (20 months ago)
Author:
Polyglot
Comment:

another script which will validate an rcn route relation

Legend:

Unmodified
Added
Removed
Modified
  • Help/Plugin/Scripting/Python

    v4 v5  
    199199                print dir(DownloadRelationMemberTask) 
    200200                DownloadRelationMemberTask.run(DownloadRelationMemberTask(relation, relation.getIncompleteMembers(), mv.editLayer )) 
    201 }}} 
     201 
     202}}} 
     203 
     204 
     205Validate an rcn route relation: 
     206 
     207 
     208{{{ 
     209 
     210#!/bin/jython 
     211''' 
     212- Validation of a rcn route relation 
     213 
     214This code is released under the GNU General 
     215Public License v2 or later. 
     216 
     217The GPL v3 is accessible here: 
     218http://www.gnu.org/licenses/gpl.html 
     219 
     220The GPL v2 is accessible here: 
     221http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 
     222 
     223It comes with no warranty whatsoever. 
     224 
     225This code illustrates how to use Jython to: 
     226* loop over all members of a route relation 
     227* find out whether member is node, way or relation 
     228* add/change properties of a relation 
     229* remove properties of a relation 
     230* add members to a relation 
     231* remove members from a relation 
     232* sort all members backwards 
     233 
     234* How to set an element selected 
     235 
     236''' 
     237from javax.swing import JOptionPane 
     238from org.openstreetmap.josm import Main 
     239import org.openstreetmap.josm.data.osm.Node as Node 
     240import org.openstreetmap.josm.data.osm.Way as Way 
     241import org.openstreetmap.josm.data.osm.Relation as Relation 
     242import org.openstreetmap.josm.data.osm.TagCollection as TagCollection 
     243import org.openstreetmap.josm.data.osm.DataSet as DataSet 
     244import org.openstreetmap.josm.data.osm.RelationMember as RelationMember 
     245 
     246def getMapView(): 
     247    if Main.main and Main.main.map: 
     248        return Main.main.map.mapView 
     249    else: 
     250        return None 
     251 
     252mv = getMapView() 
     253if mv and mv.editLayer and mv.editLayer.data: 
     254    selectedRelations = mv.editLayer.data.getSelectedRelations() 
     255 
     256    if not(selectedRelations): 
     257        JOptionPane.showMessageDialog(Main.parent, "Please select a route relation") 
     258    else: 
     259        print 
     260        for route in selectedRelations: 
     261            Main.main.getCurrentDataSet().setSelected(route.getMember(0).getWay()) 
     262            name = route.get('name') 
     263            if name and name == route.get('note'): 
     264                print 'removing name when it is the same as note' 
     265                route.remove('name') 
     266            rcn_refs=[] 
     267            memberslist = [] 
     268            continuous = True 
     269            for member in route.getMembers(): 
     270                if member.isWay(): 
     271                    memberslist.append(member) 
     272                    way = member.getWay() 
     273                    #JOptionPane.showMessageDialog(Main.parent, 'way is selected') 
     274                    endnodes = [way.getNode(0), way.getNode(way.nodesCount-1)] 
     275                    for endnode in endnodes: 
     276                        rcn_ref = endnode.get('rcn_ref') 
     277                        if rcn_ref: 
     278                            rcn_refs.append(int(rcn_ref)) 
     279            print rcn_refs 
     280            if len(rcn_refs) > 1: 
     281                if rcn_refs[0] > rcn_refs[1]: 
     282                    rcn_refs.sort() 
     283                    print 'flipping members order' 
     284                    for member in reversed(memberslist): 
     285                        route.addMember( route.getMembersCount(), member) 
     286                        route.removeMember (0) 
     287                route.put('note', str(rcn_refs[0]).zfill(2) + '-' + str(rcn_refs[1]).zfill(2)) 
     288            else: 
     289                print 'less than 2 end nodes with rcn_ref found' 
     290}}} 
     291 
     292