All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.graph_builder.module.shapefile.CaseBasedTraversalPermissionConverter Maven / Gradle / Ivy

package org.opentripplanner.graph_builder.module.shapefile;

import java.util.HashMap;
import java.util.Map;

import org.opengis.feature.simple.SimpleFeature;
import org.opentripplanner.common.model.P2;
import org.opentripplanner.graph_builder.services.shapefile.SimpleFeatureConverter;
import org.opentripplanner.routing.edgetype.StreetTraversalPermission;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Calculates street traversal permissions based upon a fixed set of cases.
 * 
 * For example, given a shapefile that includes a DIRECTION column with data as follows:
 * 
 * | DIRECTION | NAME    | 
 * | ONE_WAY_F | Side St | 
 * | TWO_WAY   | Main St |
 * | ONE_WAY_B | Foo St. |
 * 
* You could use a CaseBasedTraversalPermissionConverter to implement the following rules: * *

By default, all streets should be traversable by pedestrians and bicycles in both directions.

* *

If a street's DIRECTION attribute is ONE_WAY_F, it should be traversable by cars and bikes in * only the forward direction and traversable by pedestrians in both directions.

* *

If a street's DIRECTION attribute is ONE_WAY_B, it should be traversable by cars and bikes in * only the backward direction and traversable by pedestrians in both directions.

* *

If a street's DIRECTION attribute is TWO_WAY, it should be traversable by everyone in both * directions.

* * * These rules could be implemented by configuring the converter bean as follows: *
 * {@code
 * 
 *    
 *    
 *    
 *        
 *            
 *            
 *            
 *       
 *   
 * }
 * 
* @see org.opentripplanner.routing.edgetype.StreetTraversalPermission * */ public class CaseBasedTraversalPermissionConverter implements SimpleFeatureConverter> { private static Logger log = LoggerFactory.getLogger(CaseBasedBicycleSafetyFeatureConverter.class); private String attributeName; private P2 defaultPermission = P2.createPair( StreetTraversalPermission.ALL, StreetTraversalPermission.ALL); private Map> _permissions = new HashMap>(); public CaseBasedTraversalPermissionConverter() { } public CaseBasedTraversalPermissionConverter(String attributeName) { this.attributeName = attributeName; } public CaseBasedTraversalPermissionConverter(String attributeName, StreetTraversalPermission defaultPermission) { this.attributeName = attributeName; this.defaultPermission = P2.createPair(defaultPermission, defaultPermission); } /** * The name of the feature attribute to use when calculating the traversal permissions. */ public void setAttributeName(String attributeName) { this.attributeName = attributeName; } /** * The default permission to use when no matching case is found for a street. */ public void setDefaultPermission(StreetTraversalPermission permission) { defaultPermission = P2.createPair(permission, permission); } /** * The mapping from attribute values to permissions to use when determining a street's traversal * permission. */ public void setPermissions(Map permissions) { for (Map.Entry entry : permissions.entrySet()) { String attributeValue = entry.getKey(); String perms = entry.getValue(); String[] tokens = perms.split(","); if (tokens.length != 2) throw new IllegalArgumentException("invalid street traversal permissions: " + perms); StreetTraversalPermission forward = StreetTraversalPermission.valueOf(tokens[0]); StreetTraversalPermission reverse = StreetTraversalPermission.valueOf(tokens[1]); addPermission(attributeValue, forward, reverse); } } public void addPermission(String attributeValue, StreetTraversalPermission forward, StreetTraversalPermission reverse) { _permissions.put(attributeValue, P2.createPair(forward, reverse)); } @Override public P2 convert(SimpleFeature feature) { if (attributeName == null) { return defaultPermission; } Object key = feature.getAttribute(attributeName); if (key == null) { return defaultPermission; } P2 permission = _permissions.get(key.toString()); if (permission == null) { log.info("unexpected permission " + key.toString()); return defaultPermission; } return permission; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy