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


Ignore:
Timestamp:
2011-09-13T02:34:57+02:00 (15 years 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