--- src/uk/me/parabola/mkgmap/reader/osm/HighwayHooks.java 2010-11-07 16:30:22.000000000 +0100 +++ src/uk/me/parabola/mkgmap/reader/osm/HighwayHooks.java 2010-11-10 18:54:02.000000000 +0100 @@ -36,6 +36,7 @@ private boolean makeOppositeCycleways; private boolean makeCycleways; + private boolean routePedestrianAreas; private String frigRoundabouts; private ElementSaver saver; private boolean linkPOIsToWays; @@ -51,6 +52,7 @@ makeOppositeCycleways = props.getProperty("make-opposite-cycleways", false); makeCycleways = props.getProperty("make-cycleways", false); } + routePedestrianAreas = props.getProperty("route-pedestrian-areas", false); frigRoundabouts = props.getProperty("frig-roundabouts"); linkPOIsToWays = props.getProperty("link-pois-to-ways", false); currentNodeInWay = null; @@ -187,6 +189,29 @@ } } + if(routePedestrianAreas && "pedestrian".equals(highway)) { + String pedestrianAreaTag = way.getTag("area"); + + if("yes".equals(pedestrianAreaTag)) { + // Add extra footway around pedestrian square for routing + long pedestrianId = way.getId() + CYCLEWAY_ID_OFFSET; + + Way pedestrianWay = new Way(pedestrianId); + saver.addWay(pedestrianWay); + List points = way.getPoints(); + for(int i = 0; i < points.size(); ++i) + pedestrianWay.addPoint(points.get(i)); + + pedestrianWay.copyTags(way); + if (way.getTag("name") != null) { + pedestrianWay.addTag("name", way.getTag("name")); + } + pedestrianWay.addTag("area", "no"); + + log.info("Making routable pedestrian way from area '" + pedestrianWay.getTag("name") + "'"); + } + } + if("motorway".equals(highway) || "trunk".equals(highway)) motorways.add(way); }