Some more examples in Python: Export a collection of routes to Garmin GPX file: {{{ #!/bin/jython ''' RWN2Garmin.py - Numbered networks to Garmin GPX file converter This code is released under the GNU General Public License v2 or later. The GPL v3 is accessible here: http://www.gnu.org/licenses/gpl.html The GPL v2 is accessible here: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html It comes with no warranty whatsoever. This code illustrates how to use Jython to: * work with selected items or how to process all the primitives of a certain kind (node, way, relation) ''' from javax.swing import JOptionPane, JDialog from java.awt.event import ActionListener, ActionEvent from org.openstreetmap.josm import Main import org.openstreetmap.josm.command as Command import org.openstreetmap.josm.data.osm.Node as Node import org.openstreetmap.josm.data.osm.Way as Way import org.openstreetmap.josm.data.osm.TagCollection as TagCollection import org.openstreetmap.josm.data.osm.DataSet as DataSet import time def getMapView(): if Main.main and Main.main.map: return Main.main.map.mapView else: return None mv = getMapView() f = open('C:/export.gpx', 'w') f.write('\n') f.write('\n') f.write('\n') if mv and mv.editLayer and mv.editLayer.data: #selectedNodes = mv.editLayer.data.getSelectedNodes() #selectedWays = mv.editLayer.data.getSelectedWays() selectedRelations = mv.editLayer.data.getSelectedRelations() if not(selectedRelations): JOptionPane.showMessageDialog(Main.parent, "Please select a collection relation") else: # nodetype = Node().getType() print for collection in selectedRelations: print 'COLLECTION:', collection for member in collection.getMembers(): print 'MEMBER:',member if member.isNode(): node = member.getNode() coords = node.getCoor() lon = coords.getX() lat = coords.getY() rwn_ref = node.get('rwn_ref') f.write('\t\n') if rwn_ref: f.write('\t\t' + rwn_ref + '\n') f.write('\t\n') for member in collection.getMembers(): if member.isRelation(): routerelation = member.getRelation() f.write('\t\n') networkname = routerelation.get('network:name') if not(networkname): networkname = '' else: networkname += ' ' note = routerelation.get('note') if not(note): note = '' f.write('\t\t' + networkname + note + '\n') f.write('\t\tOpenStreetMap.org\n') f.write('\t\tfoot\n') for routerelmember in routerelation.getMembers(): if routerelmember.isWay(): f.write('\t\t\n') way=routerelmember.getWay() for waynode in way.getNodes(): coords = waynode.getCoor() lon = coords.getX() lat = coords.getY() f.write('\t\t\t \n') f.write('\t\t\n') f.write('\t\n') f.write('\n') f.close() }}} Download missing parent elements for the selected element: {{{ #!/bin/jython ''' This code is released under the GNU General Public License v2 or later. The GPL v3 is accessible here: http://www.gnu.org/licenses/gpl.html The GPL v2 is accessible here: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html It comes with no warranty whatsoever. This code illustrates how to use Jython to: * Download all referrer for an element ''' from javax.swing import JOptionPane from org.openstreetmap.josm import Main import org.openstreetmap.josm.data.osm.Node as Node import org.openstreetmap.josm.data.osm.Way as Way import org.openstreetmap.josm.data.osm.Relation as Relation import org.openstreetmap.josm.data.osm.TagCollection as TagCollection import org.openstreetmap.josm.data.osm.DataSet as DataSet import org.openstreetmap.josm.data.osm.RelationMember as RelationMember import org.openstreetmap.josm.actions.DownloadReferrersAction as DownloadReferrersAction #import org.openstreetmap.josm.actions.downloadtasks.DownloadReferrersTask as DownloadReferrersTask; def getMapView(): if Main.main and Main.main.map: return Main.main.map.mapView else: return None mv = getMapView() if mv and mv.editLayer and mv.editLayer.data: selectedElements = mv.editLayer.data.getSelected() if not(selectedElements): JOptionPane.showMessageDialog(Main.parent, "Please select an element") else: DownloadReferrersAction.downloadReferrers(mv.editLayer, selectedElements) }}} Download missing relation members: {{{ #!/bin/jython ''' This code is released under the GNU General Public License v2 or later. The GPL v3 is accessible here: http://www.gnu.org/licenses/gpl.html The GPL v2 is accessible here: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html It comes with no warranty whatsoever. This code illustrates how to use Jython to: * Download all missing members of a relation ''' from javax.swing import JOptionPane from org.openstreetmap.josm import Main import org.openstreetmap.josm.data.osm.Node as Node import org.openstreetmap.josm.data.osm.Way as Way import org.openstreetmap.josm.data.osm.Relation as Relation import org.openstreetmap.josm.data.osm.TagCollection as TagCollection import org.openstreetmap.josm.data.osm.DataSet as DataSet import org.openstreetmap.josm.data.osm.RelationMember as RelationMember import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationMemberTask as DownloadRelationMemberTask def getMapView(): if Main.main and Main.main.map: return Main.main.map.mapView else: return None mv = getMapView() if mv and mv.editLayer and mv.editLayer.data: selectedRelations = mv.editLayer.data.getSelectedRelations() if not(selectedRelations): JOptionPane.showMessageDialog(Main.parent, "Please select a node") else: for relation in selectedRelations: if relation.hasIncompleteMembers(): #print dir(relation) print dir(DownloadRelationMemberTask) DownloadRelationMemberTask.run(DownloadRelationMemberTask(relation, relation.getIncompleteMembers(), mv.editLayer )) }}}