| 201 | | }}} |
| | 201 | |
| | 202 | }}} |
| | 203 | |
| | 204 | |
| | 205 | Validate an rcn route relation: |
| | 206 | |
| | 207 | |
| | 208 | {{{ |
| | 209 | |
| | 210 | #!/bin/jython |
| | 211 | ''' |
| | 212 | - Validation of a rcn route relation |
| | 213 | |
| | 214 | This code is released under the GNU General |
| | 215 | Public License v2 or later. |
| | 216 | |
| | 217 | The GPL v3 is accessible here: |
| | 218 | http://www.gnu.org/licenses/gpl.html |
| | 219 | |
| | 220 | The GPL v2 is accessible here: |
| | 221 | http://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
| | 222 | |
| | 223 | It comes with no warranty whatsoever. |
| | 224 | |
| | 225 | This 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 | ''' |
| | 237 | from javax.swing import JOptionPane |
| | 238 | from org.openstreetmap.josm import Main |
| | 239 | import org.openstreetmap.josm.data.osm.Node as Node |
| | 240 | import org.openstreetmap.josm.data.osm.Way as Way |
| | 241 | import org.openstreetmap.josm.data.osm.Relation as Relation |
| | 242 | import org.openstreetmap.josm.data.osm.TagCollection as TagCollection |
| | 243 | import org.openstreetmap.josm.data.osm.DataSet as DataSet |
| | 244 | import org.openstreetmap.josm.data.osm.RelationMember as RelationMember |
| | 245 | |
| | 246 | def getMapView(): |
| | 247 | if Main.main and Main.main.map: |
| | 248 | return Main.main.map.mapView |
| | 249 | else: |
| | 250 | return None |
| | 251 | |
| | 252 | mv = getMapView() |
| | 253 | if 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 | |