Repository: graphhopper/graphhopper
Pull request #1062 (2017-05-11 09:10:52)

reduce logging for landmarks
For normal usage we do not need to know all the details but as landmarks is still a fresh algorithm, things will go wrong and the logging will help us to identify problems faster so I would like to keep it there.

There is another change to the map.geo.json which splits 'eastern Asia' from Asia to avoid ferries between those areas making problems for landmark weights (to many weight entries would be 'maxed out')


Patch:
diff --git a/README.md b/README.md
index 63655216e..7fda4596e 100644
--- a/README.md
+++ b/README.md
@@ -56,9 +56,9 @@ and requires a time consuming and resource intense preparation. And implementing
 or very complex compared to the flexible mode. 
 
 The [master branch contains](https://github.com/graphhopper/graphhopper/pull/780)
-a **hybrid mode** based on A* using so called landmarks, which still requires preparation time and memory
+a **hybrid mode** that still requires preparation time and memory,
 but is much more flexible regarding changing properties per request or e.g. integrating traffic data and more. 
-Furthermore this hybrid mode is slower than the speed mode (depends on the number of landmarks) but it is an 
+Furthermore this hybrid mode is slower than the speed mode but it is an 
 order of magnitude faster than the flexible mode and uses also less RAM for one request.
 
 You can switch between all modes at request time.
diff --git a/core/src/main/java/com/graphhopper/routing/ch/CHAlgoFactoryDecorator.java b/core/src/main/java/com/graphhopper/routing/ch/CHAlgoFactoryDecorator.java
index acc770294..90cef22bc 100644
--- a/core/src/main/java/com/graphhopper/routing/ch/CHAlgoFactoryDecorator.java
+++ b/core/src/main/java/com/graphhopper/routing/ch/CHAlgoFactoryDecorator.java
@@ -286,19 +286,10 @@ public class CHAlgoFactoryDecorator implements RoutingAlgorithmFactoryDecorator
             completionService.submit(new Runnable() {
                 @Override
                 public void run() {
-                    String errorKey = CH.PREPARE + "error." + name;
-                    try {
-                        // toString is not taken into account so we need to cheat, see http://stackoverflow.com/q/6113746/194609 for other options
-                        Thread.currentThread().setName(name);
-                        properties.put(errorKey, "CH preparation incomplete");
-                        prepare.doWork();
-                        properties.remove(errorKey);
-                        properties.put(CH.PREPARE + "date." + name, Helper.createFormatter().format(new Date()));
-                    } catch (Exception ex) {
-                        LOGGER.error("Problem while CH preparation " + name, ex);
-                        properties.put(errorKey, ex.getMessage());
-                        throw ex;
-                    }
+                    // toString is not taken into account so we need to cheat, see http://stackoverflow.com/q/6113746/194609 for other options
+                    Thread.currentThread().setName(name);
+                    prepare.doWork();
+                    properties.put(CH.PREPARE + "date." + name, Helper.createFormatter().format(new Date()));
                 }
             }, name);
 
diff --git a/core/src/main/java/com/graphhopper/routing/lm/LMAlgoFactoryDecorator.java b/core/src/main/java/com/graphhopper/routing/lm/LMAlgoFactoryDecorator.java
index cc377e12e..4e855306d 100644
--- a/core/src/main/java/com/graphhopper/routing/lm/LMAlgoFactoryDecorator.java
+++ b/core/src/main/java/com/graphhopper/routing/lm/LMAlgoFactoryDecorator.java
@@ -67,6 +67,7 @@ public class LMAlgoFactoryDecorator implements RoutingAlgorithmFactoryDecorator
     private final List<String> lmSuggestionsLocations = new ArrayList<>(5);
     private int preparationThreads;
     private ExecutorService threadPool;
+    private boolean logDetails = false;
 
     public LMAlgoFactoryDecorator() {
         setPreparationThreads(1);
@@ -78,6 +79,8 @@ public class LMAlgoFactoryDecorator implements RoutingAlgorithmFactoryDecorator
 
         landmarkCount = args.getInt(Parameters.Landmark.COUNT, landmarkCount);
         activeLandmarkCount = args.getInt(Landmark.ACTIVE_COUNT_DEFAULT, Math.min(8, landmarkCount));
+        logDetails = args.getBool(Landmark.PREPARE + "log_details", false);
+
         for (String loc : args.get("prepare.lm.suggestions_location", "").split(",")) {
             if (!loc.trim().isEmpty())
                 lmSuggestionsLocations.add(loc.trim());
@@ -279,23 +282,16 @@ public class LMAlgoFactoryDecorator implements RoutingAlgorithmFactoryDecorator
             completionService.submit(new Runnable() {
                 @Override
                 public void run() {
-                    String errorKey = Landmark.PREPARE + "error." + name;
-                    try {
-                        Thread.currentThread().setName(name);
-                        properties.put(errorKey, "LM preparation incomplete");
-                        plm.doWork();
-                        properties.remove(errorKey);
-                        properties.put(Landmark.PREPARE + "date." + name, Helper.createFormatter().format(new Date()));
-                    } catch (Exception ex) {
-                        LOGGER.error("Problem while LM preparation " + name, ex);
-                        properties.put(errorKey, ex.getMessage());
-                    }
+                    Thread.currentThread().setName(name);
+                    plm.doWork();
+                    properties.put(Landmark.PREPARE + "date." + name, Helper.createFormatter().format(new Date()));
                 }
             }, name);
             submittedPreparations++;
         }
 
         threadPool.shutdown();
+
         try {
             for (int i = 0; i < submittedPreparations; i++) {
                 completionService.take().get();
@@ -336,7 +332,8 @@ public class LMAlgoFactoryDecorator implements RoutingAlgorithmFactoryDecorator
             PrepareLandmarks tmpPrepareLM = new PrepareLandmarks(ghStorage.getDirectory(), ghStorage,
                     weighting, traversalMode, landmarkCount, activeLandmarkCount).
                     setLandmarkSuggestions(lmSuggestions).
-                    setMaximumWeight(maximumWeight);
+                    setMaximumWeight(maximumWeight).
+                    setLogDetails(logDetails);
 
             addPreparation(tmpPrepareLM);
         }
diff --git a/core/src/main/java/com/graphhopper/routing/lm/LandmarkStorage.java b/core/src/main/java/com/graphhopper/routing/lm/LandmarkStorage.java
index b4e13bb3b..6a434825e 100644
--- a/core/src/main/java/com/graphhopper/routing/lm/LandmarkStorage.java
+++ b/core/src/main/java/com/graphhopper/routing/lm/LandmarkStorage.java
@@ -78,6 +78,7 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
     private final SubnetworkStorage subnetworkStorage;
     private List<LandmarkSuggestion> landmarkSuggestions = Collections.emptyList();
     private SpatialRuleLookup ruleLookup;
+    private boolean logDetails = false;
     /**
      * 'to' and 'from' fit into 32 bit => 16 bit for each of them => 65536
      */
@@ -140,6 +141,13 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
         return this;
     }
 
+    /**
+     * By default do not log many details.
+     */
+    public void setLogDetails(boolean logDetails) {
+        this.logDetails = logDetails;
+    }
+
     /**
      * This method forces the landmark preparation to skip the landmark search and uses the specified landmark list instead.
      * Useful for manual tuning of larger areas to safe import time or improve quality.
@@ -229,7 +237,8 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
             additionalInfo = ", maxWeight:" + maxWeight + ", from max distance:" + distanceInMeter / 1000f + "km";
         }
 
-        LOGGER.info("init landmarks for subnetworks with node count greater than " + minimumNodes + " with factor:" + factor + additionalInfo);
+        if (logDetails)
+            LOGGER.info("init landmarks for subnetworks with node count greater than " + minimumNodes + " with factor:" + factor + additionalInfo);
 
         int[] empty = new int[landmarks];
         Arrays.fill(empty, UNSET_SUBNETWORK);
@@ -245,7 +254,8 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
             StopWatch sw = new StopWatch().start();
             blockedEdges = findBorderEdgeIds(ruleLookup);
             tarjanFilter = new BlockedEdgesFilter(encoder, false, true, blockedEdges);
-            LOGGER.info("Made " + blockedEdges.size() + " edges inaccessible. Calculated country cut in " + sw.stop().getSeconds() + "s, " + Helper.getMemInfo());
+            if (logDetails)
+                LOGGER.info("Made " + blockedEdges.size() + " edges inaccessible. Calculated country cut in " + sw.stop().getSeconds() + "s, " + Helper.getMemInfo());
         }
 
         StopWatch sw = new StopWatch().start();
@@ -254,7 +264,8 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
         // also calculating subnetworks from scratch makes bigger problems when working with many oneways
         TarjansSCCAlgorithm tarjanAlgo = new TarjansSCCAlgorithm(graph, tarjanFilter, true);
         List<IntArrayList> graphComponents = tarjanAlgo.findComponents();
-        LOGGER.info("Calculated tarjan subnetworks in " + sw.stop().getSeconds() + "s, " + Helper.getMemInfo());
+        if (logDetails)
+            LOGGER.info("Calculated tarjan subnetworks in " + sw.stop().getSeconds() + "s, " + Helper.getMemInfo());
 
         EdgeExplorer tmpExplorer = graph.createEdgeExplorer(new RequireBothDirectionsEdgeFilter(encoder));
 
@@ -272,8 +283,9 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
                         && GHUtility.count(tmpExplorer.setBaseNode(nextStartNode)) > 0) {
 
                     GHPoint p = createPoint(graph, nextStartNode);
-                    LOGGER.info("start node: " + nextStartNode + " (" + p + ") subnetwork size: " + subnetworkIds.size()
-                            + ", " + Helper.getMemInfo() + ((ruleLookup == null) ? "" : " area:" + ruleLookup.lookupRule(p).getId()));
+                    if (logDetails)
+                        LOGGER.info("start node: " + nextStartNode + " (" + p + ") subnetwork size: " + subnetworkIds.size()
+                                + ", " + Helper.getMemInfo() + ((ruleLookup == null) ? "" : " area:" + ruleLookup.lookupRule(p).getId()));
 
                     if (createLandmarksForSubnetwork(nextStartNode, subnetworks, blockedEdges))
                         break;
@@ -309,7 +321,8 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
             subnetworkStorage.setSubnetwork(nodeId, subnetworks[nodeId]);
         }
 
-        LOGGER.info("Finished landmark creation. Subnetwork node count sum " + nodes + " vs. nodes " + graph.getNodes());
+        if (logDetails)
+            LOGGER.info("Finished landmark creation. Subnetwork node count sum " + nodes + " vs. nodes " + graph.getNodes());
         initialized = true;
     }
 
@@ -320,7 +333,6 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
      */
     private boolean createLandmarksForSubnetwork(final int startNode, final byte[] subnetworks, IntHashSet blockedEdges) {
         final int subnetworkId = landmarkIDs.size();
-        boolean random = false;
         int[] tmpLandmarkNodeIds = new int[landmarks];
         int logOffset = Math.max(1, tmpLandmarkNodeIds.length / 2);
         boolean pickedPrecalculatedLandmarks = false;
@@ -346,11 +358,6 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
                     tmpLandmarkNodeIds[i] = lmNodeId;
                 }
             }
-//            Random randomInst = new Random();
-//            for (int i = 0; i < tmpLandmarkNodeIds.length; i++) {
-//                int index = randomInst.nextInt(subnetworkIds.size());
-//                tmpLandmarkNodeIds[i] = subnetworkIds.get(index);
-//            }
         }
 
         if (pickedPrecalculatedLandmarks) {
@@ -372,7 +379,7 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
             // 1b) we have one landmark, now determine the other landmarks
             tmpLandmarkNodeIds[0] = explorer.getLastNode();
             for (int lmIdx = 0; lmIdx < tmpLandmarkNodeIds.length - 1; lmIdx++) {
-                if(Thread.currentThread().isInterrupted()){
+                if (Thread.currentThread().isInterrupted()) {
                     throw new RuntimeException("Thread was interrupted");
                 }
                 explorer = new LandmarkExplorer(graph, this, initWeighting, traversalMode);
@@ -383,16 +390,18 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
                 }
                 explorer.runAlgo(true);
                 tmpLandmarkNodeIds[lmIdx + 1] = explorer.getLastNode();
-                if (lmIdx % logOffset == 0)
+                if (logDetails && lmIdx % logOffset == 0)
                     LOGGER.info("Finding landmarks [" + weighting + "] in network [" + explorer.getVisitedNodes() + "]. "
                             + "Progress " + (int) (100.0 * lmIdx / tmpLandmarkNodeIds.length) + "%, " + Helper.getMemInfo());
             }
-            LOGGER.info("Finished searching landmarks for subnetwork " + subnetworkId + " of size " + explorer.getVisitedNodes());
+
+            if (logDetails)
+                LOGGER.info("Finished searching landmarks for subnetwork " + subnetworkId + " of size " + explorer.getVisitedNodes());
         }
 
         // 2) calculate weights for all landmarks -> 'from' and 'to' weight
         for (int lmIdx = 0; lmIdx < tmpLandmarkNodeIds.length; lmIdx++) {
-            if(Thread.currentThread().isInterrupted()){
+            if (Thread.currentThread().isInterrupted()) {
                 throw new RuntimeException("Thread was interrupted");
             }
             int lmNodeId = tmpLandmarkNodeIds[lmIdx];
@@ -419,7 +428,7 @@ public class LandmarkStorage implements Storable<LandmarkStorage> {
                     return false;
             }
 
-            if (lmIdx % logOffset == 0)
+            if (logDetails && lmIdx % logOffset == 0)
                 LOGGER.info("Set landmarks weights [" + weighting + "]. "
                         + "Progress " + (int) (100.0 * lmIdx / tmpLandmarkNodeIds.length) + "%");
         }
diff --git a/core/src/main/java/com/graphhopper/routing/lm/PrepareLandmarks.java b/core/src/main/java/com/graphhopper/routing/lm/PrepareLandmarks.java
index 70f5449b4..b570d415e 100644
--- a/core/src/main/java/com/graphhopper/routing/lm/PrepareLandmarks.java
+++ b/core/src/main/java/com/graphhopper/routing/lm/PrepareLandmarks.java
@@ -103,6 +103,11 @@ public class PrepareLandmarks extends AbstractAlgoPreparation {
         lms.setMinimumNodes(nodes);
     }
 
+    public PrepareLandmarks setLogDetails(boolean logDetails) {
+        lms.setLogDetails(logDetails);
+        return this;
+    }
+
     LandmarkStorage getLandmarkStorage() {
         return lms;
     }
diff --git a/core/src/main/java/com/graphhopper/routing/util/Car4WDFlagEncoder.java b/core/src/main/java/com/graphhopper/routing/util/Car4WDFlagEncoder.java
index 5a0a678be..33b2327ab 100644
--- a/core/src/main/java/com/graphhopper/routing/util/Car4WDFlagEncoder.java
+++ b/core/src/main/java/com/graphhopper/routing/util/Car4WDFlagEncoder.java
@@ -57,13 +57,14 @@ public class Car4WDFlagEncoder extends CarFlagEncoder {
     public long acceptWay(ReaderWay way) {
         // TODO: Ferries have conditionals, like opening hours or are closed during some time in the year
         String highwayValue = way.getTag("highway");
+        String firstValue = way.getFirstPriorityTag(restrictions);
         if (highwayValue == null) {
             if (way.hasTag("route", ferries)) {
-                String motorcarTag = way.getTag("motorcar");
-                if (motorcarTag == null)
-                    motorcarTag = way.getTag("motor_vehicle");
-
-                if (motorcarTag == null && !way.hasTag("foot") && !way.hasTag("bicycle") || "yes".equals(motorcarTag))
+                if (restrictedValues.contains(firstValue))
+                    return 0;
+                if (intendedValues.contains(firstValue) ||
+                        // implied default is allowed only if foot and bicycle is not specified:
+                        firstValue.isEmpty() && !way.hasTag("foot") && !way.hasTag("bicycle"))
                     return acceptBit | ferryBit;
             }
             return 0;
@@ -76,7 +77,6 @@ public class Car4WDFlagEncoder extends CarFlagEncoder {
             return 0;
 
         // multiple restrictions needs special handling compared to foot and bike, see also motorcycle
-        String firstValue = way.getFirstPriorityTag(restrictions);
         if (!firstValue.isEmpty()) {
             if (restrictedValues.contains(firstValue) && !getConditionalTagInspector().isRestrictedWayConditionallyPermitted(way))
                 return 0;
diff --git a/core/src/main/java/com/graphhopper/routing/util/CarFlagEncoder.java b/core/src/main/java/com/graphhopper/routing/util/CarFlagEncoder.java
index 33e12de0b..e5382169d 100644
--- a/core/src/main/java/com/graphhopper/routing/util/CarFlagEncoder.java
+++ b/core/src/main/java/com/graphhopper/routing/util/CarFlagEncoder.java
@@ -187,13 +187,14 @@ public class CarFlagEncoder extends AbstractFlagEncoder {
     public long acceptWay(ReaderWay way) {
         // TODO: Ferries have conditionals, like opening hours or are closed during some time in the year
         String highwayValue = way.getTag("highway");
+        String firstValue = way.getFirstPriorityTag(restrictions);
         if (highwayValue == null) {
             if (way.hasTag("route", ferries)) {
-                String motorcarTag = way.getTag("motorcar");
-                if (motorcarTag == null)
-                    motorcarTag = way.getTag("motor_vehicle");
-
-                if (motorcarTag == null && !way.hasTag("foot") && !way.hasTag("bicycle") || "yes".equals(motorcarTag))
+                if (restrictedValues.contains(firstValue))
+                    return 0;
+                if (intendedValues.contains(firstValue) ||
+                        // implied default is allowed only if foot and bicycle is not specified:
+                        firstValue.isEmpty() && !way.hasTag("foot") && !way.hasTag("bicycle"))
                     return acceptBit | ferryBit;
             }
             return 0;
@@ -212,7 +213,6 @@ public class CarFlagEncoder extends AbstractFlagEncoder {
             return 0;
 
         // multiple restrictions needs special handling compared to foot and bike, see also motorcycle
-        String firstValue = way.getFirstPriorityTag(restrictions);
         if (!firstValue.isEmpty()) {
             if (restrictedValues.contains(firstValue) && !getConditionalTagInspector().isRestrictedWayConditionallyPermitted(way))
                 return 0;
diff --git a/core/src/main/java/com/graphhopper/routing/util/MotorcycleFlagEncoder.java b/core/src/main/java/com/graphhopper/routing/util/MotorcycleFlagEncoder.java
index 06e61502e..37ff1cb3b 100644
--- a/core/src/main/java/com/graphhopper/routing/util/MotorcycleFlagEncoder.java
+++ b/core/src/main/java/com/graphhopper/routing/util/MotorcycleFlagEncoder.java
@@ -147,13 +147,14 @@ public class MotorcycleFlagEncoder extends CarFlagEncoder {
     @Override
     public long acceptWay(ReaderWay way) {
         String highwayValue = way.getTag("highway");
+        String firstValue = way.getFirstPriorityTag(restrictions);
         if (highwayValue == null) {
             if (way.hasTag("route", ferries)) {
-                String motorcycleTag = way.getTag("motorcycle");
-                if (motorcycleTag == null)
-                    motorcycleTag = way.getTag("motor_vehicle");
-
-                if (motorcycleTag == null && !way.hasTag("foot") && !way.hasTag("bicycle") || "yes".equals(motorcycleTag))
+                if (restrictedValues.contains(firstValue))
+                    return 0;
+                if (intendedValues.contains(firstValue) ||
+                        // implied default is allowed only if foot and bicycle is not specified:
+                        firstValue.isEmpty() && !way.hasTag("foot") && !way.hasTag("bicycle"))
                     return acceptBit | ferryBit;
             }
             return 0;
@@ -171,7 +172,6 @@ public class MotorcycleFlagEncoder extends CarFlagEncoder {
         if (way.hasTag("impassable", "yes") || way.hasTag("status", "impassable"))
             return 0;
 
-        String firstValue = way.getFirstPriorityTag(restrictions);
         if (!firstValue.isEmpty()) {
             if (restrictedValues.contains(firstValue) && !getConditionalTagInspector().isRestrictedWayConditionallyPermitted(way))
                 return 0;
diff --git a/core/src/main/java/com/graphhopper/util/CmdArgs.java b/core/src/main/java/com/graphhopper/util/CmdArgs.java
index 39d13f65b..ebf9ee70d 100644
--- a/core/src/main/java/com/graphhopper/util/CmdArgs.java
+++ b/core/src/main/java/com/graphhopper/util/CmdArgs.java
@@ -72,8 +72,11 @@ public class CmdArgs extends PMap {
         return args;
     }
 
+    /**
+     * This method creates a CmdArgs object from the specified string array (a list of key=value pairs).
+     */
     public static CmdArgs read(String[] args) {
-        Map<String, String> map = new LinkedHashMap<String, String>();
+        Map<String, String> map = new LinkedHashMap<>();
         for (String arg : args) {
             int index = arg.indexOf("=");
             if (index <= 0) {
@@ -90,7 +93,10 @@ public class CmdArgs extends PMap {
             }
 
             String value = arg.substring(index + 1);
-            map.put(key.toLowerCase(), value);
+            String old = map.put(key.toLowerCase(), value);
+            if (old != null)
+                throw new IllegalArgumentException("Pair '" + key.toLowerCase() + "'='" + value + "' not possible to " +
+                        "add to the CmdArgs-object as the key already exists with '" + old + "'");
         }
 
         return new CmdArgs(map);
@@ -98,7 +104,6 @@ public class CmdArgs extends PMap {
 
     /**
      * Command line configuration overwrites the ones in the config file.
-     * <p>
      *
      * @return a new CmdArgs object if necessary.
      */
diff --git a/core/src/main/java/com/graphhopper/util/Parameters.java b/core/src/main/java/com/graphhopper/util/Parameters.java
index daa782580..4372e4097 100644
--- a/core/src/main/java/com/graphhopper/util/Parameters.java
+++ b/core/src/main/java/com/graphhopper/util/Parameters.java
@@ -185,4 +185,14 @@ public class Parameters {
          */
         public static final String MAX_NON_CH_POINT_DISTANCE = ROUTING_INIT_PREFIX + NON_CH_PREFIX + "max_waypoint_distance";
     }
+
+    public static final class PT {
+        public static final String EARLIEST_DEPARTURE_TIME = "pt.earliest_departure_time";
+        public static final String RANGE_QUERY_END_TIME = "pt.range_query_end_time";
+        public static final String ARRIVE_BY = "pt.arrive_by";
+        public static final String IGNORE_TRANSFERS = "pt.ignore_transfers";
+        public static final String WALK_SPEED = "pt.walk_speed";
+        public static final String MAX_WALK_DISTANCE_PER_LEG = "pt.max_walk_distance_per_leg";
+        public static final String MAX_TRANSFER_DISTANCE_PER_LEG = "pt.max_transfer_distance_per_leg";
+    }
 }
diff --git a/core/src/main/resources/com/graphhopper/routing/lm/map.geo.json b/core/src/main/resources/com/graphhopper/routing/lm/map.geo.json
index 3aca24d0e..8a6e608eb 100644
--- a/core/src/main/resources/com/graphhopper/routing/lm/map.geo.json
+++ b/core/src/main/resources/com/graphhopper/routing/lm/map.geo.json
@@ -1,1 +1,1 @@
-{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"country":"RU"},"geometry":{"type":"Polygon","coordinates":[[[112.57827758789064,49.51272684615389],[114.51187133789064,50.22085199853945],[115.70114135742189,49.82469504231386],[116.53610229492188,49.99449830610663],[117.89840698242189,49.48329357201685],[118.15933227539065,49.76884804895152],[119.26071166992189,50.050966584791894],[120.71090698242189,52.093851356247676],[119.82925415039065,52.84425349475998],[121.94137573242189,53.47578733864619],[124.05075073242188,53.44962467836577],[125.71792602539065,52.73795463681313],[127.74215698242189,49.65429366237979],[130.4667663574219,49.02436199056141],[130.86227416992188,47.76979141653638],[132.75192260742188,47.799319161084114],[134.5948791503907,48.62020084032986],[134.20211791992193,46.84610371505515],[133.05953979492188,45.10551559143663],[132.4003601074219,45.44568028040934],[130.90621948242188,44.88798544802555],[131.34567260742188,43.085940390805106],[130.33493041992188,42.876970480834636],[130.7304382324219,42.13183974703906],[137.67105102539068,42.23055108552288],[140.04409790039068,45.569832358492796],[143.53775024414077,45.69275137290868],[158.21548461914068,48.445600235857185],[169.01779174804688,54.17610051351112],[174.71694946289065,61.09149607548889],[175.42007446289065,72.12203499882442],[119.47769165039067,78.6088687947775],[90.64956665039068,81.90812243054789],[57.99819946289063,82.25910954221085],[42.002105712890646,81.21191634755448],[31.08169555664064,69.77990109180783],[29.192047119140646,68.99090974637399],[28.55758666992189,68.41585740375355],[30.202789306640643,67.61026681415686],[29.148101806640643,66.81030253813987],[30.161590576171886,65.67242166534794],[29.83200073242189,65.63165696870591],[29.634246826171886,64.91946716585957],[30.620269775390636,64.14056743016336],[30.348358154296886,63.829162707695396],[30.057220458984382,63.72235949534538],[30.996551513671882,63.342888861671646],[31.71890258789064,62.87644060337138],[29.914398193359386,61.670979451447785],[29.409027099609386,61.381593811042165],[29.159088134765636,61.22068532865694],[28.829498291015632,61.11206922305154],[28.649597167968764,60.93243386774377],[28.530120849609393,60.937103929786254],[28.29528808593751,60.82349433253962],[27.79129028320314,60.5282389814158],[27.585296630859386,60.243219301102904],[26.99203491210939,60.1093548444954],[26.775054931640636,60.05318831743673],[26.731109619140643,59.74601800002018],[28.11676025390626,59.427617299091004],[28.22250366210939,59.369592780878726],[28.12637329101564,59.27921273266491],[27.950592041015636,59.25675565467942],[27.806396484375014,59.112538421825334],[27.73910522460939,58.967711787859834],[27.36694335937501,58.76535182776691],[27.54135131835939,58.370757426292286],[27.489166259765636,58.24233201310478],[27.57019042968751,58.11053805217788],[27.63061523437501,58.0858630214148],[27.621002197265636,58.008825354432176],[27.695159912109386,57.99718259769781],[27.699279785156264,57.91922428076206],[27.826995849609386,57.88346714330496],[27.78442382812501,57.824280360856264],[27.56195068359376,57.79135676069564],[27.55645751953126,57.70561467912492],[27.410888671875014,57.66597279400861],[27.391662597656264,57.574042705770005],[27.566070556640636,57.57625175278568],[27.57156372070314,57.428688235829824],[27.877807617187507,57.28126968710806],[27.77069091796876,57.11835002634522],[27.73635864257814,56.91649927576668],[27.695159912109386,56.85122485605976],[27.876434326171886,56.85573020076698],[28.11264038085939,56.520109413007944],[28.195037841796893,56.429851523562455],[28.196411132812514,56.32719809668833],[28.251342773437514,56.26242247585756],[28.144226074218768,56.153964018751346],[28.320007324218764,56.05210125166598],[28.372192382812518,56.04903353374956],[28.379058837890636,56.0973217578151],[28.67980957031251,56.09272548575246],[28.727874755859382,55.959194801518585],[28.84735107421876,55.9484308720065],[29.00665283203126,56.0214130920516],[29.214019775390636,56.000684786976336],[29.473571777343764,55.92381636473065],[29.34860229492189,55.74489304677825],[29.51614379882814,55.70080738536962],[30.14785766601564,55.849878967015044],[30.373077392578132,55.81285742969946],[30.562591552734386,55.74953074789916],[30.754852294921882,55.60705698351368],[30.96633911132814,55.62256840602216],[30.944366455078136,55.372087783537765],[31.018524169921886,55.11372825067393],[31.032257080078132,55.02723496817066],[30.782318115234382,54.80305958527637],[31.194305419921886,54.647617919056394],[31.353607177734386,54.24195810552538],[31.762847900390636,54.10047600536083],[31.949615478515636,54.040844640739685],[31.809539794921886,53.80632786808194],[32.30392456054689,53.75926631751659],[32.46597290039064,53.70727505824133],[32.50167846679689,53.66661213390057],[32.42477416992189,53.63405351645884],[32.51541137695314,53.54765154615999],[32.76535034179688,53.45289589264863],[32.73788452148438,53.31692866748978],[32.24075317382813,53.08165228331157],[31.47720336914064,53.17064968295496],[31.33987426757814,53.03708445284038],[31.60079956054689,52.80525205752532],[31.669464111328136,52.56216022339713],[31.75735473632814,52.28412225676032],[31.82327270507814,52.102287644791126],[32.20779418945313,52.09553874159923],[32.356109619140646,52.36469901960146],[33.89419555664063,52.32358963210519],[34.122161865234396,52.13770263559035],[34.13040161132814,52.004328577925094],[34.484710693359396,51.785683426064985],[34.43527221679689,51.70065098247789],[34.124908447265646,51.6580747314511],[34.31442260742189,51.524979430024345],[34.28146362304688,51.388066116760065],[34.363861083984396,51.3623491405115],[34.25949096679689,51.25933672375884],[34.34738159179689,51.235267210116255],[34.38858032226564,51.267929925864756],[34.44351196289064,51.25761789054247],[34.55474853515627,51.24902276043772],[34.672851562500014,51.24300521333463],[34.697570800781264,51.18795112740308],[34.790954589843764,51.18020386644292],[34.82803344726564,51.16987215953016],[34.896697998046896,51.20086033547138],[34.93789672851564,51.20430218013711],[34.980468750000014,51.22408779639158],[35.15762329101564,51.21806698712828],[35.16174316406252,51.13110763758015],[35.183715820312514,51.11731684874898],[35.17410278320313,51.08023369996697],[35.21804809570314,51.04571104081335],[35.323791503906264,51.07850817842925],[35.426788330078146,51.037939894299356],[35.34439086914064,50.99128563729097],[35.34576416015626,50.9393925139039],[35.406188964843764,50.9056308936385],[35.411682128906264,50.87357798883879],[35.43502807617189,50.83716687845952],[35.510559082031264,50.7798919741081],[35.50643920898439,50.67470554332169],[35.50437927246095,50.640752142960615],[35.43777465820314,50.63770384261477],[35.455627441406264,50.53612614279661],[35.59707641601564,50.45225789225832],[35.62316894531252,50.35948034629867],[35.72067260742189,50.35948034629867],[35.834655761718764,50.43126756156562],[36.103820800781264,50.454006666287384],[36.169738769531264,50.42864311565685],[36.436157226562514,50.331436330838805],[36.59683227539063,50.28231945008158],[36.66824340820314,50.22875939879218],[36.85501098632814,50.31565429419649],[37.180480957031264,50.363860727850316],[37.49359130859376,50.45575537567452],[37.655639648437514,50.305130024910035],[37.67211914062502,50.15578588538455],[37.905578613281264,50.051848374998514],[38.056640625000014,49.92293545449574],[38.23654174804689,49.97065584042108],[38.178863525390646,50.08093836269242],[38.32305908203127,50.08270082522937],[38.361511230468764,50.00597379753065],[38.644409179687514,49.9680059481165],[38.71719360351564,49.998029518286025],[38.96713256835938,49.80254124506291],[39.19784545898439,49.89640369842335],[39.27200317382814,49.75997752330658],[39.62219238281251,49.73246857852272],[39.710083007812514,49.61248962905261],[39.968261718750014,49.593799632782606],[40.157775878906264,49.61515904368315],[40.207214355468764,49.56619654323924],[40.100097656250014,49.42884000063522],[40.256652832031264,49.25705010952243],[39.781494140625014,49.00364573861305],[40.094604492187514,48.879167148960214],[40.006713867187514,48.79239019646406],[39.814453125,48.808672325527844],[39.729309082031264,48.70727541512677],[39.86114501953125,48.574789910928864],[39.98199462890626,48.36537369040198],[40.05340576171875,48.24845457730629],[39.88861083984375,48.111099041065366],[39.851531982421875,47.84265762816538],[39.417572021484375,47.85003078545827],[38.947906494140646,47.85924575819688],[38.82843017578125,47.818687628247105],[38.7872314453125,47.69682297134991],[38.623809814453125,47.642260848473],[38.494720458984375,47.63300737749619],[38.46038818359375,47.615421267605434],[38.368377685546875,47.5996813120644],[38.30245971679688,47.543163654317304],[38.29421997070314,47.36580396648149],[38.22006225585939,47.297859249409825],[38.33816528320315,47.303447043862626],[38.335418701171875,47.261524189742026],[38.23379516601564,47.21397145824757],[38.25576782226564,46.95588666908008],[38.1719970703125,46.852678248531106],[37.646026611328146,46.71915170604123],[37.2601318359375,46.403776166694634],[36.68472290039064,45.615958580368364],[36.640777587890646,44.966741217055315],[36.331787109375,43.67581809328341],[40.00946044921875,43.38508989465156],[40.106964111328125,43.55949595288937],[40.23193359375,43.57243174740972],[40.8306884765625,43.520671902437606],[41.37451171875,43.36512572875844],[41.572265625,43.24520272203356],[41.8194580078125,43.23319741022136],[42.40859985351564,43.207177786666634],[42.901611328125,43.16111586765961],[43.2861328125,42.956422511073335],[43.7969970703125,42.755079545072135],[43.7310791015625,42.633958722673135],[43.82583618164064,42.57937729240964],[44.1046142578125,42.59757641618889],[44.3463134765625,42.71069600569497],[44.72534179687499,42.71473218539458],[44.791259765625,42.60970621339408],[45.06591796875,42.71069600569497],[45.31997680664064,42.57128708742757],[45.780029296875,42.47209690919285],[45.62622070312499,42.204107493733176],[46.241455078125,41.99624282178583],[46.59301757812499,41.81636125072054],[46.73583984375,41.857287927691345],[47.3126220703125,41.29431726315258],[47.63671875,41.21998578493921],[47.8729248046875,41.22824901518529],[48.14208984375,41.52091689636249],[48.2794189453125,41.541477666790286],[48.4222412109375,41.63597302844412],[48.59252929687499,41.840920397579936],[49.69253540039064,45.9683336020637],[48.44009399414065,47.53389264528652],[47.407379150390646,47.71160964784592],[47.165679931640646,48.21186241720319],[46.57241821289063,48.387266208071296],[46.70425415039066,49.54125129864407],[47.56118774414065,50.43126756156557],[48.703765869140646,49.868087070275294],[48.945465087890646,50.61287460808083],[50.61538696289065,51.60607748386585],[52.17544555664067,51.674258422595145],[53.53775024414064,51.35977664828082],[54.658355712890675,50.90476488890605],[55.71304321289067,50.48722109174839],[56.569976806640646,50.86317771513582],[58.15200805664065,51.05693372898541],[59.25064086914064,50.48722109174839],[59.821929931640646,50.69645763438633],[61.469879150390646,50.66861315065768],[61.66763305664064,51.19483648846094],[59.97573852539064,51.878186564984],[61.07437133789064,52.24293795417474],[60.634918212890646,52.6447299720724],[62.129058837890646,52.9635294209657],[61.09634399414064,53.26685566290739],[61.55776977539064,53.46352559911501],[61.008453369140646,53.58109212828813],[61.272125244140646,53.957701602686356],[65.3370666503907,54.40774166820069],[70.50064086914065,55.46795634154887],[71.00601196289065,54.09967074689618],[73.79653930664065,53.91889859085943],[73.33511352539067,53.45044250555688],[74.41177368164065,53.48967969477546],[76.93862915039068,54.40774166820069],[76.54312133789065,53.97062792135663],[80.0367736816407,50.69645763438633],[80.73989868164067,51.249882345751644],[82.40982055664064,50.69645763438633],[83.48648071289065,50.987827899090945],[85.15640258789062,49.64095584788947],[87.15591430664067,49.12601663766719],[88.54019165039068,49.65518272008053],[91.7042541503907,50.55706994398532],[94.53872680664068,50.44526214970796],[94.71450805664068,49.882247460433284],[98.09829711914067,49.626724817659124],[98.38394165039068,52.09469505690127],[100.14175415039067,51.878186564984],[102.2978210449219,51.33146969705741],[102.2978210449219,50.723416223568485],[103.39370727539064,50.22085199853945],[106.64566040039068,50.305130024910035],[108.75778198242189,49.283035996995146],[110.20523071289062,49.255257474803116],[112.57827758789064,49.51272684615389]]]}},{"type":"Feature","properties":{"country":"TR"},"geometry":{"type":"Polygon","coordinates":[[[26.87393188476566,41.990629195207845],[26.98104858398441,42.01308073078775],[27.049713134765657,42.08446472536185],[27.20077514648437,42.07223316626938],[27.217254638671875,42.09873189780303],[27.255706787109414,42.10484541787712],[27.31613159179687,42.10076980332238],[27.36831665039062,42.06815545599751],[27.3944091796875,42.01665183556825],[27.43423461914062,41.98246303636428],[27.50701904296875,41.95693703889415],[27.564010620117188,41.899721690058364],[27.601776123046896,41.953873231845826],[27.734298706054684,41.97378534488486],[27.832489013671875,41.937019660425264],[27.85171508789062,42.00899922265493],[27.90664672851562,41.98246303636428],[28.057022094726562,41.97991089691236],[28.477935791015636,42.02124296136385],[30.4527282714844,42.23105950761341],[34.495697021484425,43.51917817047651],[36.17660522460941,43.53112699069791],[36.79183959960941,43.507226983493425],[37.97286987304691,42.07223316626935],[41.58187866210942,41.55226945517216],[42.252044677734425,41.48646296653738],[42.735443115234425,41.62622175930417],[43.1199645996094,41.379384735449385],[43.4385681152344,41.14815503879421],[43.7132263183594,40.683241578458656],[43.5923767089844,40.432836943889086],[43.69125366210941,40.14791364536748],[44.2515563964844,40.01341667916071],[44.5042419433594,39.996585880995006],[44.8777770996094,39.684468179576186],[44.83383178710942,39.6083332578092],[44.60998535156249,39.77951890877299],[44.46578979492187,39.67812680490032],[44.42047119140625,39.41444654288019],[44.05105590820312,39.39746898415019],[44.3174743652344,38.833824233697676],[44.320907592773445,38.37746115487397],[44.44519042968751,38.385265900107896],[44.50286865234375,38.33303882235456],[44.24606323242187,37.899239630600185],[44.600372314453125,37.784282779035216],[44.58114624023437,37.4519672738549],[44.698562622070305,37.37179426133591],[44.80018615722657,37.30519097732609],[44.765167236328125,37.22704803306454],[44.778900146484375,37.1504659253741],[44.592132568359375,37.15265506325517],[44.41635131835941,37.022839324407485],[44.306488037109425,36.93507434788671],[44.1307067871094,37.00529442809043],[44.1966247558594,37.19806537087228],[44.03182983398441,37.28552626562422],[43.943939208984425,37.17180731614314],[43.6582946777344,37.17180731614314],[43.4056091308594,37.215565668431395],[43.218841552734425,37.30300626322474],[43.097991943359425,37.31174473879972],[42.9222106933594,37.268042206658926],[42.84530639648441,37.31174473879972],[42.72445678710941,37.224314295273345],[42.5706481933594,37.128023608338715],[42.3838806152344,37.0929783934396],[42.2630310058594,37.110503028109626],[42.24105834960942,37.233061907375166],[42.21908569335941,37.29426677213781],[41.85653686523441,37.11926382507305],[41.27426147460942,37.03161025351676],[40.8787536621094,37.10174121753592],[40.5162048339844,37.014067382569216],[39.9888610839844,36.794439960959835],[39.4175720214844,36.66236030126652],[38.9891052246094,36.67117267841034],[38.6595153808594,36.68879440530872],[38.54965209960941,36.81203341240736],[38.2969665527344,36.87357865470461],[38.12118530273441,36.8472081877198],[37.7915954589844,36.74163536021999],[37.5718688964844,36.67998404645535],[37.44003295898441,36.5918249677316],[37.07748413085941,36.618283282321165],[36.9346618652344,36.66236030126652],[36.989593505859425,36.75043865214185],[36.71493530273441,36.77684246795779],[36.627044677734425,36.62710070356304],[36.60507202148442,36.46823289130906],[36.71493530273441,36.24704204661372],[36.61605834960942,36.18499603869516],[36.3963317871094,36.18499603869516],[36.41830444335941,35.99856302536761],[36.29745483398441,35.936320471920304],[36.2205505371094,35.90073127378858],[36.1656188964844,35.76712924679365],[36.06674194335941,35.847317460194596],[36.00082397460942,35.865126065820384],[35.9239196777344,35.90073127378858],[35.6822204589844,36.016337597992795],[35.40756225585942,36.27361812705445],[34.79232788085942,36.54770761282972],[33.9134216308594,36.00745081259691],[32.29431152343749,35.964669147704086],[30.7713317871094,36.016337597992795],[29.595794677734403,36.025223381454445],[28.469696044921918,36.52122510567714],[28.22113037109375,36.56370306576917],[27.99179077148441,36.4859009915186],[27.9217529296875,36.62103883480288],[27.89703369140625,36.6992553955527],[27.8118896484375,36.70696258281522],[27.71713256835942,36.66236030126652],[27.58529663085941,36.55653309976341],[27.40402221679691,36.56976944035481],[27.316131591796914,36.65795373431159],[27.316131591796914,36.76364169637644],[27.47543334960942,36.88236678807325],[27.376556396484414,36.943855400282466],[27.206268310546907,36.94824554701334],[27.16232299804691,37.128023608338715],[27.074432373046914,37.52551993630741],[26.93161010742191,37.63435365968988],[26.97555541992191,37.695231030259535],[27.125244140625,37.69577435330179],[27.12936401367191,37.7430282148491],[27.134857177734414,37.88189913601142],[27.003021240234407,37.968560758280454],[26.849212646484403,37.99453932469729],[26.717376708984407,38.00319680300932],[26.212005615234403,38.19340261396243],[26.217498779296907,38.36588705167384],[26.233978271484407,38.460578736068975],[26.321868896484403,38.486382199392224],[26.32736206054691,38.572327030541246],[26.195526123046914,38.70962513631026],[26.596527099609407,38.82098608040901],[26.695404052734403,39.03038586323265],[26.475677490234407,39.34544950312715],[26.453704833984403,39.43035925025338],[25.9977722167969,39.40914149976931],[25.893402099609414,39.874438536988116],[25.613250732421907,40.12271570320349],[25.745086669921903,40.2821448253348],[25.992279052734407,40.36590424964641],[26.047210693359403,40.420292132688886],[25.9991455078125,40.724364221722716],[26.13372802734375,40.74517613004631],[26.217498779296875,40.831475967182925],[26.228485107421875,40.88029480552824],[26.29302978515625,40.891715295571046],[26.338348388671907,40.95760413706828],[26.365814208984403,41.032233260261904],[26.343841552734375,41.03896645352545],[26.319122314453125,41.072104440201606],[26.321868896484403,41.11919376947867],[26.321868896484403,41.24735373575173],[26.382293701171903,41.255613506982],[26.50863647460941,41.334029242807084],[26.574554443359403,41.334029242807084],[26.621246337890653,41.344340084501496],[26.63223266601566,41.41235069554362],[26.59927368164066,41.46588471722134],[26.588287353515653,41.55638013883065],[26.596527099609407,41.611848779396695],[26.4811706542969,41.657010214790354],[26.49215698242191,41.673424709209506],[26.45095825195316,41.679579065729946],[26.396026611328153,41.69188601323633],[26.3603210449219,41.71444263601192],[26.319122314453153,41.74723814279776],[26.368560791015657,41.827107036777804],[26.533355712890657,41.827107036777804],[26.591033935546914,41.91505226156046],[26.55258178710941,41.93548729665263],[26.61575317382816,41.98246303636425],[26.87393188476566,41.990629195207845]]]}},{"type":"Feature","properties":{"country":"IR"},"geometry":{"type":"Polygon","coordinates":[[[44.883270263671875,39.61600341690947],[44.82833862304687,39.59484229602979],[44.60998535156249,39.767116946991244],[44.49050903320312,39.67839104047085],[44.44107055664062,39.40940676151136],[44.07989501953124,39.38393703310129],[44.32846069335937,38.841579496043266],[44.33464050292969,38.38634235060625],[44.449310302734375,38.3965678312631],[44.51866149902344,38.33627045638025],[44.27902221679687,37.91359663595634],[44.619598388671875,37.79215110146842],[44.61273193359374,37.57832416022906],[44.600372314453125,37.4530574713902],[44.8187255859375,37.309014074275915],[44.792633056640625,37.19314268101434],[44.77890014648437,37.07462794830974],[45.05355834960937,36.71439378142236],[45.037078857421875,36.498321462439414],[45.13595581054687,36.39226944709636],[45.21286010742187,36.423216258184446],[45.31173706054687,36.250641420134656],[45.372161865234375,36.00661762510096],[45.542449951171875,36.00661762510096],[45.78964233398437,35.7885763854771],[46.091766357421875,35.85983955355433],[46.16867065429687,35.797487780189684],[46.333465576171875,35.81530757124274],[46.26205444335937,35.72616864735527],[46.04782104492187,35.68602354632835],[45.98739624023437,35.5162992917345],[46.146697998046875,35.1937309523074],[45.729217529296875,34.72553016612018],[45.641326904296875,34.562838485444765],[45.44357299804687,34.50853703124081],[45.487518310546875,34.236499213950246],[45.59738159179687,33.835916209650705],[46.08078002929687,33.45178176572215],[46.25656127929687,33.12116302021135],[46.08078002929687,33.065938256310694],[46.49826049804687,32.90005602754376],[46.82785034179687,32.73386252069833],[47.31124877929687,32.493257351045806],[47.55294799804687,32.32630640516633],[47.70675659179687,31.916907450132438],[47.838592529296875,31.674128797835987],[47.662811279296875,31.036167580692506],[47.99240112304686,30.979669549931156],[48.080291748046875,30.431801765693898],[48.54171752929687,29.97605204798063],[48.98117065429687,29.575547222838154],[50.49728393554687,28.499772884023034],[51.13449096679686,27.5104029500194],[52.16720581054687,26.669243403744833],[52.496795654296875,27.031911463555893],[53.342742919921875,26.51205508518687],[54.078826904296875,26.266017420614613],[54.94674682617186,26.206890503958576],[55.45211791992187,26.3841809186334],[55.946502685546875,26.462889516700884],[56.699066162109375,26.674152057951513],[57.04513549804687,25.713002224490715],[57.358245849609375,25.519826237901636],[58.79196166992186,25.167348504848334],[61.20895385742186,25.013128689820096],[61.58248901367186,24.86868296084077],[61.62094116210936,25.177291490420096],[61.71432495117186,25.713002224490715],[61.857147216796875,25.757536892131878],[61.87911987304686,25.88609873958729],[61.81869506835937,25.970082833810277],[61.88461303710937,26.226602817229324],[62.043914794921875,26.32019065694281],[62.23068237304686,26.295569595944478],[62.340545654296875,26.531715423812592],[63.04367065429687,26.649606674853263],[63.16452026367186,26.65942546165811],[63.20846557617187,26.83601896889694],[63.252410888671875,26.95359530651796],[63.35128784179686,27.16883333811653],[63.23043823242187,27.29582490331502],[62.83493041992187,27.23723141217124],[62.75802612304687,28.054711717908784],[62.823944091796875,28.287149586525498],[62.60421752929686,28.248445031771915],[62.45040893554687,28.461145843377466],[61.99996948242187,28.528733889821094],[61.65939331054686,28.846778748267493],[61.51657104492187,29.077475561486054],[61.373748779296875,29.374695801730557],[61.077117919921875,29.64240915955532],[60.87936401367187,29.871312847947706],[61.79122924804687,30.847710720287516],[61.86813354492187,31.017338624573526],[61.73629760742187,31.3744509892913],[60.84640502929687,31.50567831915791],[60.81344604492187,31.767580660782684],[60.835418701171875,32.0007974563271],[60.82443237304687,32.11253149323632],[60.890350341796875,32.23342255966773],[60.58273315429687,33.12116302021135],[60.703582763671875,33.27744461716141],[60.835418701171875,33.42427807715397],[60.85739135742186,33.48843978561982],[60.945281982421875,33.48843978561982],[60.91232299804686,33.54339773076281],[60.73654174804687,33.5617092856824],[60.60470581054687,33.62576915177442],[60.50582885742186,33.66235342235485],[60.51681518554687,33.75374604872583],[60.56076049804686,33.863288729992725],[60.50582885742186,34.127436986771905],[60.58273315429687,34.24558136693],[60.69259643554686,34.318203302295586],[60.92330932617187,34.336348979311985],[60.75851440429687,34.517589732936564],[60.95626831054687,34.67133507834247],[61.15402221679686,35.13085984605181],[61.12106323242187,35.265524111422394],[61.186981201171875,35.30139686069295],[61.28585815429686,35.578871155607],[61.21994018554687,35.79303220775479],[61.24191284179687,35.93548653335642],[61.11007690429687,35.97995097659505],[61.23092651367186,36.201897371202975],[61.11007690429687,36.39669117478878],[61.17599487304686,36.564530326721425],[61.15402221679686,36.66153408917661],[60.34103393554687,36.64390611879393],[60.07736206054686,37.022016997879994],[59.65988159179687,37.13596128624874],[59.47311401367187,37.18849317920565],[59.385223388671875,37.38079754776621],[59.36325073242187,37.52034637734859],[59.27536010742186,37.5377716711564],[59.02267456054687,37.598728135433554],[58.93478393554687,37.65963470086988],[58.72604370117187,37.69441603823103],[58.660125732421875,37.67702740770202],[58.528289794921875,37.71180059181104],[58.46237182617187,37.65963470086988],[58.20968627929687,37.67702740770202],[58.15475463867187,37.78129802378188],[57.83615112304687,37.87675039049737],[57.58346557617186,37.92009699991215],[57.39669799804686,37.972079227501396],[57.37472534179687,38.04133164260481],[57.319793701171875,38.179640136980275],[57.20993041992187,38.265949898790964],[57.04513549804687,38.21417632897687],[56.737518310546875,38.291822856176225],[56.57272338867187,38.21417632897687],[56.48483276367187,38.248696138736456],[56.309051513671875,38.1882757205532],[56.36398315429687,38.093228016131455],[56.188201904296875,38.07593331549372],[55.924530029296875,38.08458117719328],[55.71578979492187,38.110518625420085],[55.49606323242187,38.07593331549372],[55.24337768554687,37.963418076862744],[55.06759643554686,37.92009699991215],[54.89181518554687,37.76392978442339],[54.792938232421875,37.67702740770202],[54.74899291992187,37.54648279144779],[54.70504760742186,37.45932579884708],[54.57321166992187,37.468046076080945],[54.375457763671875,37.35460316823002],[54.22164916992186,37.34586967624393],[53.06808471679686,37.50291701312484],[48.98666381835936,38.42535286323638],[48.898773193359375,38.442564597795496],[48.81088256835937,38.451168926369206],[48.66806030273437,38.403832425632075],[48.56918334960937,38.476975756406155],[48.442840576171875,38.59728549133625],[48.294525146484375,38.59728549133625],[48.25057983398437,38.69167335183297],[48.217620849609375,38.76024095593921],[48.06381225585937,38.81162346751259],[48.01986694335936,38.91000307716006],[48.23410034179686,38.97836076449878],[48.34396362304687,39.05091856953468],[48.28353881835937,39.13618535307064],[48.16268920898437,39.225604479644666],[48.16818237304687,39.263892137507305],[48.25607299804687,39.33190746834001],[48.37142944335937,39.37438348768386],[47.997894287109375,39.7132612612704],[47.92098999023437,39.670992062375056],[47.783660888671875,39.64984775813504],[47.43759155273437,39.48046052880385],[47.31674194335937,39.38712125767799],[47.157440185546875,39.30640946322186],[47.086029052734375,39.22985969593234],[46.99813842773437,39.1447063602562],[46.92123413085937,39.13618535307064],[46.910247802734375,39.166004365807254],[46.84982299804687,39.13192446273138],[46.77291870117187,39.067980173675046],[46.69052124023436,38.99970902307341],[46.536712646484375,38.86296894151961],[46.47628784179686,38.880075866440436],[46.388397216796875,38.9014537323899],[46.32797241210936,38.91427736345276],[46.20162963867187,38.84585789970058],[46.10275268554687,38.83730083512169],[46.053314208984375,38.8715229186257],[45.88851928710937,38.88435195434266],[45.79513549804687,38.92282516381189],[45.641326904296875,38.93991767539353],[45.53695678710937,38.97409034016252],[45.42709350585937,38.99970902307341],[45.43807983398437,39.04238622142501],[45.41610717773437,39.097828059155106],[45.366668701171875,39.14044598558154],[45.26779174804686,39.19155346221369],[45.207366943359375,39.208581034631116],[45.16342163085937,39.22134900536284],[45.13595581054687,39.27239766741328],[45.05355834960937,39.36164339330996],[44.97665405273437,39.40410133494665],[44.94918823242187,39.471980308378264],[44.94918823242187,39.535556759752296],[44.910736083984375,39.57367470884661],[44.883270263671875,39.61600341690947]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-6.0369873046875,35.766572101173516],[-5.723876953125,35.91129848822746],[-5.23773193359375,35.94910642813857],[-3.69140625,36.01356058518153],[4.24072265625,37.31775185163688],[9.25048828125,37.77071473849609],[11.79931640625,37.43997405227057],[12.32666015625,36.914764288955936],[12.963867187499998,36.2265501474709],[12.0849609375,35.11990857099681],[13.99658203125,33.55970664841198],[17.95166015625,32.676372772089834],[19.2919921875,31.784216884487385],[20.91796875,33.33970700424026],[23.3349609375,33.04550781490999],[26.103515625,32.10118973232094],[30.102539062499996,31.765537409484374],[32.49755859375,31.80289258670676],[33.83789062499999,31.59725256170666],[34.222412109375,31.325486676506983],[34.5574951171875,30.439202087235582],[34.7332763671875,30.06909396443887],[34.9090576171875,29.434813598289637],[34.4091796875,27.88278388425912],[34.5025634765625,27.69325634309158],[38.49609375,20.3034175184893],[42.71484375,13.581920900545844],[43.582763671875,12.361465967347373],[46.527099609375,11.835094475418835],[51.67968749999999,13.838079936422462],[51.85546874999999,11.544616463449655],[51.78955078125,8.450638800331001],[53.26171875,-19.145168196205297],[34.80468749999999,-35.7465122599185],[17.75390625,-36.738884124394296],[10.01953125,-31.353636941500987],[7.55859375,-12.897489183755892],[5.44921875,-2.986927393334863],[0.3515625,4.565473550710278],[-10.01953125,2.1088986592431382],[-18.80859375,7.013667927566642],[-21.26953125,13.752724664396988],[-19.51171875,20.797201434307],[-17.9296875,25.958044673317843],[-13.359375,28.43971381702788],[-9.5361328125,33.37641235124676],[-6.0369873046875,35.766572101173516]]]}},{"type":"Feature","properties":{"stroke":"#555555","stroke-width":2,"stroke-opacity":1,"fill":"#555555","fill-opacity":0.5,"country":"EU"},"geometry":{"type":"Polygon","coordinates":[[[37.503890991210966,50.3406400988631],[37.63023376464846,50.305568582636454],[37.65769958496096,50.156225818771155],[37.89115905761721,50.052289264025866],[38.00926208496096,49.95519607850053],[38.03123474121096,49.90746037049926],[38.23722839355471,49.96049712760075],[38.19877624511721,50.068158571371235],[38.32649230957034,50.07168437125453],[38.34434509277346,50.001119116212905],[38.47618103027346,49.97109747495407],[38.5887908935547,49.972863972559466],[38.65608215332033,49.94901078355835],[38.69041442871096,49.98875953320282],[38.958206176757834,49.788800797567795],[39.18891906738283,49.88534449228095],[39.26307678222658,49.75243630033573],[39.609146118164084,49.72403529516711],[39.69429016113283,49.61115486691071],[39.94285583496095,49.58534228077639],[40.1378631591797,49.603145526468985],[40.18318176269533,49.57287614193415],[40.05134582519533,49.48195527529924],[40.04241943359375,49.42437391023319],[40.14198303222658,49.38013767834597],[40.22163391113283,49.26556423534828],[39.94628906249999,49.105342729732754],[39.686737060546875,49.03606736319316],[39.8419189453125,48.88910074349772],[40.08087158203125,48.88639177703194],[40.016326904296875,48.823140892101684],[39.8089599609375,48.83308560934761],[39.7100830078125,48.71452483966837],[39.67987060546875,48.59477574898104],[39.814453125,48.58750908593607],[39.82543945312499,48.569337856144415],[39.85290527343749,48.56206753526866],[39.85015869140625,48.46745824148332],[39.93804931640625,48.378145469762444],[39.847412109375,48.32156041109599],[39.936676025390625,48.27770946754797],[39.98748779296875,48.316994361929304],[40.02593994140625,48.242967421301366],[39.8748779296875,48.120267527274464],[39.82543945312499,47.85740289465826],[38.88610839843749,47.86385263046567],[38.78997802734375,47.81684332352077],[38.76800537109375,47.702368466573716],[38.36151123046875,47.60431120244565],[38.2928466796875,47.54687159892238],[38.3038330078125,47.46709298382174],[38.277740478515625,47.37975438400816],[38.21319580078125,47.299721913179944],[38.310699462890625,47.29599652002003],[38.327178955078125,47.26338813315702],[38.2269287109375,47.2316921696968],[38.23104858398437,47.184112659842015],[38.21250915527354,47.03222659199384],[38.133544921875,46.875213396722685],[37.474365234375,46.76244305208004],[37.01499938964853,46.20597291866554],[36.63047790527353,45.724877075164805],[36.64970397949229,45.39025294290081],[36.50962829589853,44.89041779655453],[34.26841735839853,43.73488704685432],[28.069381713867283,42.00644814707985],[27.910766601562596,41.99369123471852],[27.842102050781353,42.02583375568839],[27.811203002929787,42.00848901572394],[27.811203002929787,41.95489451722686],[27.722625732421967,41.99369123471852],[27.6416015625001,41.98552546868186],[27.555084228515717,41.92680320648786],[27.39234924316416,42.01359090088993],[27.351837158203224,42.07783959017498],[27.255706787109474,42.11808935584944],[27.016067504882916,42.105864280581315],[26.95838928222666,42.01206037830707],[26.601333618164155,41.99573251255608],[26.56150817871104,41.960000698656835],[26.52030944824228,41.85063912364956],[26.348648071289155,41.84245503142376],[26.29371643066416,41.746213536653016],[26.587600708007905,41.61903566976246],[26.62330627441416,41.429857060994145],[26.6315460205079,41.374232293915426],[26.30744934082041,41.26903340788161],[26.31568908691415,41.19673985199647],[26.32255554199228,41.16159699608574],[26.292343139648526,41.12643528544444],[26.32118225097666,41.070551469995074],[26.3623809814454,41.035340973499586],[26.33354187011729,41.01254766976727],[26.278610229492276,40.91922020055107],[26.212692260742273,40.9046907327285],[26.196212768554787,40.84030757074789],[26.127548217773537,40.76546147212543],[25.97648620605478,40.74881754464598],[26.01493835449228,40.43910847204669],[25.71006774902352,40.310425249799835],[25.537033081054787,40.11956530349848],[25.921554565429773,39.37093327496136],[26.31156921386728,39.42081206179375],[26.40769958496102,39.40489717466257],[26.656265258789148,39.01865020920714],[26.175613403320398,38.741766321754575],[26.307449340820398,38.50465406475556],[26.220245361328214,38.47778207104823],[26.194496154785245,38.204194894086115],[27.08061218261728,37.791879793952056],[27.0874786376954,37.72130604487683],[26.96250915527353,37.71261539271678],[26.914443969726644,37.6484903562059],[27.068252563476648,37.536410466671605],[27.11219787597665,37.34232140492518],[27.186355590820398,36.96031714599466],[27.393722534179773,36.90872512003456],[27.298965454101655,36.78124222006403],[27.296218872070398,36.66346190359139],[27.3896026611329,36.578592407405615],[27.573623657226644,36.542191171722735],[27.742538452148523,36.67447705968596],[27.853775024414148,36.696502641380015],[27.890853881836023,36.662360301266496],[27.984237670898523,36.479275925989036],[28.326187133789155,36.479275925989036],[29.027938842773516,36.03855017779989],[31.955795288086016,35.82059705201462],[34.90562438964854,35.8662389708407],[34.83970642089854,34.7545889412861],[33.23570251464852,32.96661914407457],[25.87486267089853,33.646063909385845],[14.207382202148532,35.59869400858111],[11.850814819336021,37.586486421515175],[10.444564819336021,38.046468862404375],[3.3364105224610197,37.298636644614945],[-3.5410308837889803,36.18942952802741],[-5.235671997070223,36.024112713318466],[-8.534317016601474,35.687975511754026],[-9.578018188476474,33.746609502602944],[-13.664932250976475,28.356963607643923],[-15.96107482910147,27.112312236990405],[-19.69642639160148,26.248467256199522],[-9.501113891601475,63.71171775348058],[23.018417358398537,71.97027638906381],[31.477890014648526,70.60326676344317],[31.03843688964853,69.79389853388508],[30.983505249023523,69.54963737358388],[30.23643493652353,69.49390545846873],[29.03892517089853,69.04279107689334],[28.418197631836005,68.46707609801051],[30.00572204589853,67.57335993596081],[28.994979858398526,66.93624797168597],[30.055160522461,65.72074655683878],[29.791488647460998,65.65742544545313],[29.538803100586,64.92266867150246],[30.35728454589853,64.3467458058432],[30.5879974365235,64.13128167035353],[30.318832397461,63.844603535881205],[30.000228881836,63.76458292076888],[30.862655639648498,63.405357825532164],[31.543807983398526,63.012301440510626],[31.631698608398505,62.906790669328075],[31.109848022461,62.42503561215288],[28.994979858398526,61.17205301725941],[28.7752532958985,61.09979330971818],[28.657150268554748,60.96144387384799],[28.582992553711012,60.96810910352182],[28.522567749023512,60.96411013333126],[28.36601257324225,60.88937034233298],[27.79472351074225,60.55491622578091],[27.561264038086,60.27149310723817],[26.624679565429755,60.051474420026345],[26.70433044433601,59.74290425672726],[27.984237670898544,59.46426827717684],[28.228683471679755,59.402112731898534],[28.12980651855475,59.295695222223166],[27.955398559570387,59.27605560064646],[27.802963256835987,59.14037396737895],[27.776870727539116,59.04514632466057],[27.738418579101616,58.99000532803039],[27.34840393066412,58.796314896864935],[27.50770568847661,58.43156035330221],[27.55302429199224,58.36823669920544],[27.48161315917974,58.26003622028863],[27.568130493164105,58.135558505269906],[27.620315551757855,58.09203337957691],[27.63130187988286,58.01209919754368],[27.69035339355473,58.01064419313466],[27.70408630371098,57.91229455438017],[27.822189331054734,57.89697146737487],[27.80158996582036,57.84950144081816],[27.75215148925786,57.83268934922515],[27.64640808105473,57.839268928186385],[27.52555847167973,57.80343223682334],[27.555770874023484,57.74044901963144],[27.400588989257855,57.69424042663774],[27.40470886230473,57.616359436214864],[27.34703063964854,57.58324618383188],[27.55714416503911,57.53609982067914],[27.521438598632855,57.430536463426684],[27.67799377441411,57.39725408460606],[27.80845642089853,57.323184898986746],[27.720565795898533,56.94160328703216],[27.66563415527348,56.840334699901284],[27.868881225585984,56.87787358938221],[28.033676147460984,56.65207461850503],[28.197097778320355,56.443138204344955],[28.171005249023484,56.38084050297426],[28.24928283691411,56.27271770293423],[28.138046264648484,56.16581771266696],[28.333053588867234,56.059386103946416],[28.374252319335984,56.06091958171721],[28.401718139648487,56.10612974593509],[28.68598937988286,56.103066326453614],[28.727188110351605,55.97341397558883],[28.85215759277348,55.957272890742004],[29.03892517089848,56.029471096109056],[29.21470642089848,55.99646099076823],[29.483871459960977,55.936510173094156],[29.343795776367227,55.760736249818834],[29.51683044433598,55.708158452041516],[30.16777038574223,55.85411876805832],[30.58250427246098,55.74605252374095],[30.77201843261723,55.605117624217094],[30.950546264648484,55.62373151534754],[30.92857360839848,55.38418159710126],[30.84617614746098,55.29514711218648],[31.00273132324223,55.1290416463151],[31.02195739746098,55.04572878459713],[30.92857360839848,55.03471221980507],[30.934066772460977,55.009520122163046],[30.95329284667973,54.99061565778563],[30.895614624023477,54.95908841815877],[30.85166931152348,54.943315514969534],[30.75828552246098,54.81057860495582],[31.18949890136723,54.653576914893094],[31.10710144042973,54.51510308738985],[31.22520446777348,54.467244312003196],[31.36253356933598,54.24155685295376],[31.780014038085977,54.11134546447647],[31.928329467773477,54.053342085270955],[31.777267456054734,53.80592239059053],[32.304611206054744,53.76697828983067],[32.48039245605474,53.70199109852733],[32.40074157714848,53.66295054447537],[32.47215270996098,53.571715120578986],[32.67265319824224,53.49008822461741],[32.73307800292973,53.3345633626148],[32.51884460449223,53.29189950172525],[32.39799499511723,53.18176140226502],[32.20848083496099,53.10927767593557],[31.444931030273477,53.19492712068105],[31.26365661621098,53.04492843186183],[31.59873962402348,52.799855485989504],[31.50260925292973,52.69677721019335],[31.62345886230473,52.56675151567431],[31.612472534179727,52.31897292691061],[31.777267456054734,52.113674103541626],[31.95854187011723,52.059668069580894],[32.22770690917973,52.09342949993746],[32.37602233886724,52.342471137837734],[32.82096862792974,52.26185386317506],[33.08189392089849,52.305539772859795],[33.18901062011723,52.37769505233966],[33.51860046386724,52.35924793235075],[33.88664245605473,52.34582700615622],[34.12559509277349,52.13728119405205],[34.09263610839847,52.022501000650195],[34.46067810058597,51.79205440859987],[34.42222595214848,51.725752196313],[34.10362243652348,51.678090555349854],[34.31510925292972,51.52284331713511],[34.23545837402347,51.43046754788038],[34.22447204589846,51.397920460811946],[34.35356140136721,51.36535019883748],[34.22996520996096,51.26234452724744],[34.33845520019534,51.23139772039958],[34.387893676757834,51.26492248787802],[34.668045043945334,51.2442947539955],[34.669418334960966,51.20215105735902],[34.705123901367216,51.17632974764875],[34.72160339355471,51.18493845842625],[34.78752136230471,51.18235601399329],[34.83421325683596,51.170302693540094],[34.86854553222659,51.19956957741764],[34.911117553710966,51.20215105735902],[34.985275268554716,51.22881787980137],[35.14457702636721,51.22021736655215],[35.13084411621096,51.18838149261001],[35.143203735351584,51.13412382381159],[35.16929626464846,51.124643717966904],[35.154190063476584,51.084978552372114],[35.207748413085966,51.043552519760375],[35.313491821289084,51.077213995043046],[35.41648864746096,51.0400986768664],[35.33271789550784,51.00554608465721],[35.33409118652346,50.94155588479963],[35.395889282226584,50.92424609910126],[35.394515991210966,50.90866178334157],[35.390396118164084,50.87747749326812],[35.41923522949221,50.8506076217602],[35.41923522949221,50.79682141386321],[35.50025939941409,50.77598430964944],[35.47279357910159,50.729936133938146],[35.464553833007834,50.683842649833174],[35.49339294433596,50.67688120622779],[35.494766235351584,50.65250802085826],[35.46592712402346,50.665566657816186],[35.40000915527346,50.65250802085826],[35.430221557617216,50.60633841978648],[35.39863586425784,50.57233560144463],[35.486526489257834,50.48154133106944],[35.582656860351584,50.4535694788403],[35.60325622558596,50.356413838674676],[35.737838745117216,50.351156507586644],[35.80650329589846,50.40020229361594],[35.82847595214846,50.424706174038526],[35.86280822753909,50.42908053341026],[36.107254028320334,50.447448430362435],[36.206130981445334,50.40020229361594],[36.27204895019534,50.33713411177109],[36.33659362792971,50.28363574205397],[36.425857543945334,50.328368011914975],[36.58653259277346,50.28363574205397],[36.557693481445334,50.25027845797701],[36.645584106445334,50.21865526580863],[36.857070922851584,50.31346193018245],[37.19627380371096,50.36167058760706],[37.477798461914084,50.451820688650685],[37.503890991210966,50.3406400988631]]]}}]}
\ No newline at end of file
+{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"area":"RU"},"geometry":{"type":"Polygon","coordinates":[[[112.57827758789064,49.51272684615389],[114.51187133789064,50.22085199853945],[115.70114135742189,49.82469504231386],[116.53610229492188,49.99449830610663],[117.89840698242189,49.48329357201685],[118.15933227539065,49.76884804895152],[119.26071166992189,50.050966584791894],[120.71090698242189,52.093851356247676],[119.82925415039065,52.84425349475998],[121.94137573242189,53.47578733864619],[124.05075073242188,53.44962467836577],[125.71792602539065,52.73795463681313],[127.74215698242189,49.65429366237979],[130.4667663574219,49.02436199056141],[130.86227416992188,47.76979141653638],[132.75192260742188,47.799319161084114],[134.5948791503907,48.62020084032986],[134.20211791992193,46.84610371505515],[133.05953979492188,45.10551559143663],[132.4003601074219,45.44568028040934],[130.90621948242188,44.88798544802555],[131.34567260742188,43.085940390805106],[130.33493041992188,42.876970480834636],[130.7304382324219,42.13183974703906],[137.67105102539068,42.23055108552288],[140.04409790039068,45.569832358492796],[143.53775024414077,45.69275137290868],[158.21548461914068,48.445600235857185],[169.01779174804688,54.17610051351112],[174.71694946289065,61.09149607548889],[175.42007446289065,72.12203499882442],[119.47769165039067,78.6088687947775],[90.64956665039068,81.90812243054789],[57.99819946289063,82.25910954221085],[42.002105712890646,81.21191634755448],[31.08169555664064,69.77990109180783],[29.192047119140646,68.99090974637399],[28.55758666992189,68.41585740375355],[30.202789306640643,67.61026681415686],[29.148101806640643,66.81030253813987],[30.161590576171886,65.67242166534794],[29.83200073242189,65.63165696870591],[29.634246826171886,64.91946716585957],[30.620269775390636,64.14056743016336],[30.348358154296886,63.829162707695396],[30.057220458984382,63.72235949534538],[30.996551513671882,63.342888861671646],[31.71890258789064,62.87644060337138],[29.914398193359386,61.670979451447785],[29.409027099609386,61.381593811042165],[29.159088134765636,61.22068532865694],[28.829498291015632,61.11206922305154],[28.649597167968764,60.93243386774377],[28.530120849609393,60.937103929786254],[28.29528808593751,60.82349433253962],[27.79129028320314,60.5282389814158],[27.585296630859386,60.243219301102904],[26.99203491210939,60.1093548444954],[26.775054931640636,60.05318831743673],[26.731109619140643,59.74601800002018],[28.11676025390626,59.427617299091004],[28.22250366210939,59.369592780878726],[28.12637329101564,59.27921273266491],[27.950592041015636,59.25675565467942],[27.806396484375014,59.112538421825334],[27.73910522460939,58.967711787859834],[27.36694335937501,58.76535182776691],[27.54135131835939,58.370757426292286],[27.489166259765636,58.24233201310478],[27.57019042968751,58.11053805217788],[27.63061523437501,58.0858630214148],[27.621002197265636,58.008825354432176],[27.695159912109386,57.99718259769781],[27.699279785156264,57.91922428076206],[27.826995849609386,57.88346714330496],[27.78442382812501,57.824280360856264],[27.56195068359376,57.79135676069564],[27.55645751953126,57.70561467912492],[27.410888671875014,57.66597279400861],[27.391662597656264,57.574042705770005],[27.566070556640636,57.57625175278568],[27.57156372070314,57.428688235829824],[27.877807617187507,57.28126968710806],[27.77069091796876,57.11835002634522],[27.73635864257814,56.91649927576668],[27.695159912109386,56.85122485605976],[27.876434326171886,56.85573020076698],[28.11264038085939,56.520109413007944],[28.195037841796893,56.429851523562455],[28.196411132812514,56.32719809668833],[28.251342773437514,56.26242247585756],[28.144226074218768,56.153964018751346],[28.320007324218764,56.05210125166598],[28.372192382812518,56.04903353374956],[28.379058837890636,56.0973217578151],[28.67980957031251,56.09272548575246],[28.727874755859382,55.959194801518585],[28.84735107421876,55.9484308720065],[29.00665283203126,56.0214130920516],[29.214019775390636,56.000684786976336],[29.473571777343764,55.92381636473065],[29.34860229492189,55.74489304677825],[29.51614379882814,55.70080738536962],[30.14785766601564,55.849878967015044],[30.373077392578132,55.81285742969946],[30.562591552734386,55.74953074789916],[30.754852294921882,55.60705698351368],[30.96633911132814,55.62256840602216],[30.944366455078136,55.372087783537765],[31.018524169921886,55.11372825067393],[31.032257080078132,55.02723496817066],[30.782318115234382,54.80305958527637],[31.194305419921886,54.647617919056394],[31.353607177734386,54.24195810552538],[31.762847900390636,54.10047600536083],[31.949615478515636,54.040844640739685],[31.809539794921886,53.80632786808194],[32.30392456054689,53.75926631751659],[32.46597290039064,53.70727505824133],[32.50167846679689,53.66661213390057],[32.42477416992189,53.63405351645884],[32.51541137695314,53.54765154615999],[32.76535034179688,53.45289589264863],[32.73788452148438,53.31692866748978],[32.24075317382813,53.08165228331157],[31.47720336914064,53.17064968295496],[31.33987426757814,53.03708445284038],[31.60079956054689,52.80525205752532],[31.669464111328136,52.56216022339713],[31.75735473632814,52.28412225676032],[31.82327270507814,52.102287644791126],[32.20779418945313,52.09553874159923],[32.356109619140646,52.36469901960146],[33.89419555664063,52.32358963210519],[34.122161865234396,52.13770263559035],[34.13040161132814,52.004328577925094],[34.484710693359396,51.785683426064985],[34.43527221679689,51.70065098247789],[34.124908447265646,51.6580747314511],[34.31442260742189,51.524979430024345],[34.28146362304688,51.388066116760065],[34.363861083984396,51.3623491405115],[34.25949096679689,51.25933672375884],[34.34738159179689,51.235267210116255],[34.38858032226564,51.267929925864756],[34.44351196289064,51.25761789054247],[34.55474853515627,51.24902276043772],[34.672851562500014,51.24300521333463],[34.697570800781264,51.18795112740308],[34.790954589843764,51.18020386644292],[34.82803344726564,51.16987215953016],[34.896697998046896,51.20086033547138],[34.93789672851564,51.20430218013711],[34.980468750000014,51.22408779639158],[35.15762329101564,51.21806698712828],[35.16174316406252,51.13110763758015],[35.183715820312514,51.11731684874898],[35.17410278320313,51.08023369996697],[35.21804809570314,51.04571104081335],[35.323791503906264,51.07850817842925],[35.426788330078146,51.037939894299356],[35.34439086914064,50.99128563729097],[35.34576416015626,50.9393925139039],[35.406188964843764,50.9056308936385],[35.411682128906264,50.87357798883879],[35.43502807617189,50.83716687845952],[35.510559082031264,50.7798919741081],[35.50643920898439,50.67470554332169],[35.50437927246095,50.640752142960615],[35.43777465820314,50.63770384261477],[35.455627441406264,50.53612614279661],[35.59707641601564,50.45225789225832],[35.62316894531252,50.35948034629867],[35.72067260742189,50.35948034629867],[35.834655761718764,50.43126756156562],[36.103820800781264,50.454006666287384],[36.169738769531264,50.42864311565685],[36.436157226562514,50.331436330838805],[36.59683227539063,50.28231945008158],[36.66824340820314,50.22875939879218],[36.85501098632814,50.31565429419649],[37.180480957031264,50.363860727850316],[37.49359130859376,50.45575537567452],[37.655639648437514,50.305130024910035],[37.67211914062502,50.15578588538455],[37.905578613281264,50.051848374998514],[38.056640625000014,49.92293545449574],[38.23654174804689,49.97065584042108],[38.178863525390646,50.08093836269242],[38.32305908203127,50.08270082522937],[38.361511230468764,50.00597379753065],[38.644409179687514,49.9680059481165],[38.71719360351564,49.998029518286025],[38.96713256835938,49.80254124506291],[39.19784545898439,49.89640369842335],[39.27200317382814,49.75997752330658],[39.62219238281251,49.73246857852272],[39.710083007812514,49.61248962905261],[39.968261718750014,49.593799632782606],[40.157775878906264,49.61515904368315],[40.207214355468764,49.56619654323924],[40.100097656250014,49.42884000063522],[40.256652832031264,49.25705010952243],[39.781494140625014,49.00364573861305],[40.094604492187514,48.879167148960214],[40.006713867187514,48.79239019646406],[39.814453125,48.808672325527844],[39.729309082031264,48.70727541512677],[39.86114501953125,48.574789910928864],[39.98199462890626,48.36537369040198],[40.05340576171875,48.24845457730629],[39.88861083984375,48.111099041065366],[39.851531982421875,47.84265762816538],[39.417572021484375,47.85003078545827],[38.947906494140646,47.85924575819688],[38.82843017578125,47.818687628247105],[38.7872314453125,47.69682297134991],[38.623809814453125,47.642260848473],[38.494720458984375,47.63300737749619],[38.46038818359375,47.615421267605434],[38.368377685546875,47.5996813120644],[38.30245971679688,47.543163654317304],[38.29421997070314,47.36580396648149],[38.22006225585939,47.297859249409825],[38.33816528320315,47.303447043862626],[38.335418701171875,47.261524189742026],[38.23379516601564,47.21397145824757],[38.25576782226564,46.95588666908008],[38.1719970703125,46.852678248531106],[37.646026611328146,46.71915170604123],[37.2601318359375,46.403776166694634],[36.68472290039064,45.615958580368364],[36.640777587890646,44.966741217055315],[36.331787109375,43.67581809328341],[40.00946044921875,43.38508989465156],[40.106964111328125,43.55949595288937],[40.23193359375,43.57243174740972],[40.8306884765625,43.520671902437606],[41.37451171875,43.36512572875844],[41.572265625,43.24520272203356],[41.8194580078125,43.23319741022136],[42.40859985351564,43.207177786666634],[42.901611328125,43.16111586765961],[43.2861328125,42.956422511073335],[43.7969970703125,42.755079545072135],[43.7310791015625,42.633958722673135],[43.82583618164064,42.57937729240964],[44.1046142578125,42.59757641618889],[44.3463134765625,42.71069600569497],[44.72534179687499,42.71473218539458],[44.791259765625,42.60970621339408],[45.06591796875,42.71069600569497],[45.31997680664064,42.57128708742757],[45.780029296875,42.47209690919285],[45.62622070312499,42.204107493733176],[46.241455078125,41.99624282178583],[46.59301757812499,41.81636125072054],[46.73583984375,41.857287927691345],[47.3126220703125,41.29431726315258],[47.63671875,41.21998578493921],[47.8729248046875,41.22824901518529],[48.14208984375,41.52091689636249],[48.2794189453125,41.541477666790286],[48.4222412109375,41.63597302844412],[48.59252929687499,41.840920397579936],[49.69253540039064,45.9683336020637],[48.44009399414065,47.53389264528652],[47.407379150390646,47.71160964784592],[47.165679931640646,48.21186241720319],[46.57241821289063,48.387266208071296],[46.70425415039066,49.54125129864407],[47.56118774414065,50.43126756156557],[48.703765869140646,49.868087070275294],[48.945465087890646,50.61287460808083],[50.61538696289065,51.60607748386585],[52.17544555664067,51.674258422595145],[53.53775024414064,51.35977664828082],[54.658355712890675,50.90476488890605],[55.71304321289067,50.48722109174839],[56.569976806640646,50.86317771513582],[58.15200805664065,51.05693372898541],[59.25064086914064,50.48722109174839],[59.821929931640646,50.69645763438633],[61.469879150390646,50.66861315065768],[61.66763305664064,51.19483648846094],[59.97573852539064,51.878186564984],[61.07437133789064,52.24293795417474],[60.634918212890646,52.6447299720724],[62.129058837890646,52.9635294209657],[61.09634399414064,53.26685566290739],[61.55776977539064,53.46352559911501],[61.008453369140646,53.58109212828813],[61.272125244140646,53.957701602686356],[65.3370666503907,54.40774166820069],[70.50064086914065,55.46795634154887],[71.00601196289065,54.09967074689618],[73.79653930664065,53.91889859085943],[73.33511352539067,53.45044250555688],[74.41177368164065,53.48967969477546],[76.93862915039068,54.40774166820069],[76.54312133789065,53.97062792135663],[80.0367736816407,50.69645763438633],[80.73989868164067,51.249882345751644],[82.40982055664064,50.69645763438633],[83.48648071289065,50.987827899090945],[85.15640258789062,49.64095584788947],[87.15591430664067,49.12601663766719],[88.54019165039068,49.65518272008053],[91.7042541503907,50.55706994398532],[94.53872680664068,50.44526214970796],[94.71450805664068,49.882247460433284],[98.09829711914067,49.626724817659124],[98.38394165039068,52.09469505690127],[100.14175415039067,51.878186564984],[102.2978210449219,51.33146969705741],[102.2978210449219,50.723416223568485],[103.39370727539064,50.22085199853945],[106.64566040039068,50.305130024910035],[108.75778198242189,49.283035996995146],[110.20523071289062,49.255257474803116],[112.57827758789064,49.51272684615389]]]}},{"type":"Feature","properties":{"area":"TR"},"geometry":{"type":"Polygon","coordinates":[[[26.87393188476566,41.990629195207845],[26.61575317382816,41.98246303636425],[26.55258178710941,41.93548729665263],[26.591033935546914,41.91505226156046],[26.533355712890657,41.827107036777804],[26.368560791015657,41.827107036777804],[26.319122314453153,41.74723814279776],[26.3603210449219,41.71444263601192],[26.396026611328153,41.69188601323633],[26.45095825195316,41.679579065729946],[26.49215698242191,41.673424709209506],[26.4811706542969,41.657010214790354],[26.596527099609407,41.611848779396695],[26.588287353515653,41.55638013883065],[26.59927368164066,41.46588471722134],[26.63223266601566,41.41235069554362],[26.621246337890653,41.344340084501496],[26.574554443359403,41.334029242807084],[26.50863647460941,41.334029242807084],[26.382293701171903,41.255613506982],[26.321868896484403,41.24735373575173],[26.321868896484403,41.11919376947867],[26.319122314453125,41.072104440201606],[26.343841552734375,41.03896645352545],[26.365814208984403,41.032233260261904],[26.338348388671907,40.95760413706828],[26.29302978515625,40.891715295571046],[26.228485107421875,40.88029480552824],[26.217498779296875,40.831475967182925],[26.13372802734375,40.74517613004631],[25.9991455078125,40.724364221722716],[26.047210693359403,40.420292132688886],[25.992279052734407,40.36590424964641],[25.745086669921903,40.2821448253348],[25.613250732421907,40.12271570320349],[25.893402099609414,39.874438536988116],[25.9977722167969,39.40914149976931],[26.453704833984403,39.43035925025338],[26.475677490234407,39.34544950312715],[26.695404052734403,39.03038586323265],[26.596527099609407,38.82098608040901],[26.195526123046914,38.70962513631026],[26.32736206054691,38.572327030541246],[26.321868896484403,38.486382199392224],[26.233978271484407,38.460578736068975],[26.217498779296907,38.36588705167384],[26.212005615234403,38.19340261396243],[26.717376708984407,38.00319680300932],[26.849212646484403,37.99453932469729],[27.003021240234407,37.968560758280454],[27.134857177734414,37.88189913601142],[27.12936401367191,37.7430282148491],[27.125244140625,37.69577435330179],[26.97555541992191,37.695231030259535],[26.93161010742191,37.63435365968988],[27.074432373046914,37.52551993630741],[27.16232299804691,37.128023608338715],[27.206268310546907,36.94824554701334],[27.376556396484414,36.943855400282466],[27.47543334960942,36.88236678807325],[27.316131591796914,36.76364169637644],[27.316131591796914,36.65795373431159],[27.40402221679691,36.56976944035481],[27.58529663085941,36.55653309976341],[27.71713256835942,36.66236030126652],[27.8118896484375,36.70696258281522],[27.89703369140625,36.6992553955527],[27.9217529296875,36.62103883480288],[27.99179077148441,36.4859009915186],[28.22113037109375,36.56370306576917],[28.469696044921918,36.52122510567714],[29.595794677734403,36.025223381454445],[30.7713317871094,36.016337597992795],[32.29431152343749,35.964669147704086],[33.9134216308594,36.00745081259691],[34.79232788085942,36.54770761282972],[35.40756225585942,36.27361812705445],[35.6822204589844,36.016337597992795],[35.9239196777344,35.90073127378858],[36.00082397460942,35.865126065820384],[36.06674194335941,35.847317460194596],[36.1656188964844,35.76712924679365],[36.2205505371094,35.90073127378858],[36.29745483398441,35.936320471920304],[36.41830444335941,35.99856302536761],[36.3963317871094,36.18499603869516],[36.61605834960942,36.18499603869516],[36.71493530273441,36.24704204661372],[36.60507202148442,36.46823289130906],[36.627044677734425,36.62710070356304],[36.71493530273441,36.77684246795779],[36.989593505859425,36.75043865214185],[36.9346618652344,36.66236030126652],[37.07748413085941,36.618283282321165],[37.44003295898441,36.5918249677316],[37.5718688964844,36.67998404645535],[37.7915954589844,36.74163536021999],[38.12118530273441,36.8472081877198],[38.2969665527344,36.87357865470461],[38.54965209960941,36.81203341240736],[38.6595153808594,36.68879440530872],[38.9891052246094,36.67117267841034],[39.4175720214844,36.66236030126652],[39.9888610839844,36.794439960959835],[40.5162048339844,37.014067382569216],[40.8787536621094,37.10174121753592],[41.27426147460942,37.03161025351676],[41.85653686523441,37.11926382507305],[42.21908569335941,37.29426677213781],[42.24105834960942,37.233061907375166],[42.2630310058594,37.110503028109626],[42.3838806152344,37.0929783934396],[42.5706481933594,37.128023608338715],[42.72445678710941,37.224314295273345],[42.84530639648441,37.31174473879972],[42.9222106933594,37.268042206658926],[43.097991943359425,37.31174473879972],[43.218841552734425,37.30300626322474],[43.4056091308594,37.215565668431395],[43.6582946777344,37.17180731614314],[43.943939208984425,37.17180731614314],[44.03182983398441,37.28552626562422],[44.1966247558594,37.19806537087228],[44.1307067871094,37.00529442809043],[44.306488037109425,36.93507434788671],[44.41635131835941,37.022839324407485],[44.592132568359375,37.15265506325517],[44.778900146484375,37.1504659253741],[44.765167236328125,37.22704803306454],[44.80018615722657,37.30519097732609],[44.698562622070305,37.37179426133591],[44.58114624023437,37.4519672738549],[44.600372314453125,37.784282779035216],[44.24606323242187,37.899239630600185],[44.50286865234375,38.33303882235456],[44.44519042968751,38.385265900107896],[44.320907592773445,38.37746115487397],[44.3174743652344,38.833824233697676],[44.05105590820312,39.39746898415019],[44.42047119140625,39.41444654288019],[44.46578979492187,39.67812680490032],[44.60998535156249,39.77951890877299],[44.83383178710942,39.6083332578092],[44.8777770996094,39.684468179576186],[44.5042419433594,39.996585880995006],[44.2515563964844,40.01341667916071],[43.69125366210941,40.14791364536748],[43.5923767089844,40.432836943889086],[43.7132263183594,40.683241578458656],[43.4385681152344,41.14815503879421],[43.1199645996094,41.379384735449385],[42.735443115234425,41.62622175930417],[42.252044677734425,41.48646296653738],[41.58187866210942,41.55226945517216],[37.97286987304691,42.07223316626935],[36.79183959960941,43.507226983493425],[36.17660522460941,43.53112699069791],[34.495697021484425,43.51917817047651],[30.4527282714844,42.23105950761341],[28.477935791015636,42.02124296136385],[28.057022094726562,41.97991089691236],[27.90664672851562,41.98246303636428],[27.85171508789062,42.00899922265493],[27.832489013671875,41.937019660425264],[27.734298706054684,41.97378534488486],[27.601776123046896,41.953873231845826],[27.564010620117188,41.899721690058364],[27.50701904296875,41.95693703889415],[27.43423461914062,41.98246303636428],[27.3944091796875,42.01665183556825],[27.36831665039062,42.06815545599751],[27.31613159179687,42.10076980332238],[27.255706787109414,42.10484541787712],[27.217254638671875,42.09873189780303],[27.20077514648437,42.07223316626938],[27.049713134765657,42.08446472536185],[26.98104858398441,42.01308073078775],[26.87393188476566,41.990629195207845]]]}},{"type":"Feature","properties":{"area":"IR"},"geometry":{"type":"Polygon","coordinates":[[[44.883270263671875,39.61600341690947],[44.82833862304687,39.59484229602979],[44.60998535156249,39.767116946991244],[44.49050903320312,39.67839104047085],[44.44107055664062,39.40940676151136],[44.07989501953124,39.38393703310129],[44.32846069335937,38.841579496043266],[44.33464050292969,38.38634235060625],[44.449310302734375,38.3965678312631],[44.51866149902344,38.33627045638025],[44.27902221679687,37.91359663595634],[44.619598388671875,37.79215110146842],[44.61273193359374,37.57832416022906],[44.600372314453125,37.4530574713902],[44.8187255859375,37.309014074275915],[44.792633056640625,37.19314268101434],[44.77890014648437,37.07462794830974],[45.05355834960937,36.71439378142236],[45.037078857421875,36.498321462439414],[45.13595581054687,36.39226944709636],[45.21286010742187,36.423216258184446],[45.31173706054687,36.250641420134656],[45.372161865234375,36.00661762510096],[45.542449951171875,36.00661762510096],[45.78964233398437,35.7885763854771],[46.091766357421875,35.85983955355433],[46.16867065429687,35.797487780189684],[46.333465576171875,35.81530757124274],[46.26205444335937,35.72616864735527],[46.04782104492187,35.68602354632835],[45.98739624023437,35.5162992917345],[46.146697998046875,35.1937309523074],[45.729217529296875,34.72553016612018],[45.641326904296875,34.562838485444765],[45.44357299804687,34.50853703124081],[45.487518310546875,34.236499213950246],[45.59738159179687,33.835916209650705],[46.08078002929687,33.45178176572215],[46.25656127929687,33.12116302021135],[46.08078002929687,33.065938256310694],[46.49826049804687,32.90005602754376],[46.82785034179687,32.73386252069833],[47.31124877929687,32.493257351045806],[47.55294799804687,32.32630640516633],[47.70675659179687,31.916907450132438],[47.838592529296875,31.674128797835987],[47.662811279296875,31.036167580692506],[47.99240112304686,30.979669549931156],[48.080291748046875,30.431801765693898],[48.54171752929687,29.97605204798063],[48.98117065429687,29.575547222838154],[50.49728393554687,28.499772884023034],[51.13449096679686,27.5104029500194],[52.16720581054687,26.669243403744833],[52.496795654296875,27.031911463555893],[53.342742919921875,26.51205508518687],[54.078826904296875,26.266017420614613],[54.94674682617186,26.206890503958576],[55.45211791992187,26.3841809186334],[55.946502685546875,26.462889516700884],[56.699066162109375,26.674152057951513],[57.04513549804687,25.713002224490715],[57.358245849609375,25.519826237901636],[58.79196166992186,25.167348504848334],[61.20895385742186,25.013128689820096],[61.58248901367186,24.86868296084077],[61.62094116210936,25.177291490420096],[61.71432495117186,25.713002224490715],[61.857147216796875,25.757536892131878],[61.87911987304686,25.88609873958729],[61.81869506835937,25.970082833810277],[61.88461303710937,26.226602817229324],[62.043914794921875,26.32019065694281],[62.23068237304686,26.295569595944478],[62.340545654296875,26.531715423812592],[63.04367065429687,26.649606674853263],[63.16452026367186,26.65942546165811],[63.20846557617187,26.83601896889694],[63.252410888671875,26.95359530651796],[63.35128784179686,27.16883333811653],[63.23043823242187,27.29582490331502],[62.83493041992187,27.23723141217124],[62.75802612304687,28.054711717908784],[62.823944091796875,28.287149586525498],[62.60421752929686,28.248445031771915],[62.45040893554687,28.461145843377466],[61.99996948242187,28.528733889821094],[61.65939331054686,28.846778748267493],[61.51657104492187,29.077475561486054],[61.373748779296875,29.374695801730557],[61.077117919921875,29.64240915955532],[60.87936401367187,29.871312847947706],[61.79122924804687,30.847710720287516],[61.86813354492187,31.017338624573526],[61.73629760742187,31.3744509892913],[60.84640502929687,31.50567831915791],[60.81344604492187,31.767580660782684],[60.835418701171875,32.0007974563271],[60.82443237304687,32.11253149323632],[60.890350341796875,32.23342255966773],[60.58273315429687,33.12116302021135],[60.703582763671875,33.27744461716141],[60.835418701171875,33.42427807715397],[60.85739135742186,33.48843978561982],[60.945281982421875,33.48843978561982],[60.91232299804686,33.54339773076281],[60.73654174804687,33.5617092856824],[60.60470581054687,33.62576915177442],[60.50582885742186,33.66235342235485],[60.51681518554687,33.75374604872583],[60.56076049804686,33.863288729992725],[60.50582885742186,34.127436986771905],[60.58273315429687,34.24558136693],[60.69259643554686,34.318203302295586],[60.92330932617187,34.336348979311985],[60.75851440429687,34.517589732936564],[60.95626831054687,34.67133507834247],[61.15402221679686,35.13085984605181],[61.12106323242187,35.265524111422394],[61.186981201171875,35.30139686069295],[61.28585815429686,35.578871155607],[61.21994018554687,35.79303220775479],[61.24191284179687,35.93548653335642],[61.11007690429687,35.97995097659505],[61.23092651367186,36.201897371202975],[61.11007690429687,36.39669117478878],[61.17599487304686,36.564530326721425],[61.15402221679686,36.66153408917661],[60.34103393554687,36.64390611879393],[60.07736206054686,37.022016997879994],[59.65988159179687,37.13596128624874],[59.47311401367187,37.18849317920565],[59.385223388671875,37.38079754776621],[59.36325073242187,37.52034637734859],[59.27536010742186,37.5377716711564],[59.02267456054687,37.598728135433554],[58.93478393554687,37.65963470086988],[58.72604370117187,37.69441603823103],[58.660125732421875,37.67702740770202],[58.528289794921875,37.71180059181104],[58.46237182617187,37.65963470086988],[58.20968627929687,37.67702740770202],[58.15475463867187,37.78129802378188],[57.83615112304687,37.87675039049737],[57.58346557617186,37.92009699991215],[57.39669799804686,37.972079227501396],[57.37472534179687,38.04133164260481],[57.319793701171875,38.179640136980275],[57.20993041992187,38.265949898790964],[57.04513549804687,38.21417632897687],[56.737518310546875,38.291822856176225],[56.57272338867187,38.21417632897687],[56.48483276367187,38.248696138736456],[56.309051513671875,38.1882757205532],[56.36398315429687,38.093228016131455],[56.188201904296875,38.07593331549372],[55.924530029296875,38.08458117719328],[55.71578979492187,38.110518625420085],[55.49606323242187,38.07593331549372],[55.24337768554687,37.963418076862744],[55.06759643554686,37.92009699991215],[54.89181518554687,37.76392978442339],[54.792938232421875,37.67702740770202],[54.74899291992187,37.54648279144779],[54.70504760742186,37.45932579884708],[54.57321166992187,37.468046076080945],[54.375457763671875,37.35460316823002],[54.22164916992186,37.34586967624393],[53.06808471679686,37.50291701312484],[48.98666381835936,38.42535286323638],[48.898773193359375,38.442564597795496],[48.81088256835937,38.451168926369206],[48.66806030273437,38.403832425632075],[48.56918334960937,38.476975756406155],[48.442840576171875,38.59728549133625],[48.294525146484375,38.59728549133625],[48.25057983398437,38.69167335183297],[48.217620849609375,38.76024095593921],[48.06381225585937,38.81162346751259],[48.01986694335936,38.91000307716006],[48.23410034179686,38.97836076449878],[48.34396362304687,39.05091856953468],[48.28353881835937,39.13618535307064],[48.16268920898437,39.225604479644666],[48.16818237304687,39.263892137507305],[48.25607299804687,39.33190746834001],[48.37142944335937,39.37438348768386],[47.997894287109375,39.7132612612704],[47.92098999023437,39.670992062375056],[47.783660888671875,39.64984775813504],[47.43759155273437,39.48046052880385],[47.31674194335937,39.38712125767799],[47.157440185546875,39.30640946322186],[47.086029052734375,39.22985969593234],[46.99813842773437,39.1447063602562],[46.92123413085937,39.13618535307064],[46.910247802734375,39.166004365807254],[46.84982299804687,39.13192446273138],[46.77291870117187,39.067980173675046],[46.69052124023436,38.99970902307341],[46.536712646484375,38.86296894151961],[46.47628784179686,38.880075866440436],[46.388397216796875,38.9014537323899],[46.32797241210936,38.91427736345276],[46.20162963867187,38.84585789970058],[46.10275268554687,38.83730083512169],[46.053314208984375,38.8715229186257],[45.88851928710937,38.88435195434266],[45.79513549804687,38.92282516381189],[45.641326904296875,38.93991767539353],[45.53695678710937,38.97409034016252],[45.42709350585937,38.99970902307341],[45.43807983398437,39.04238622142501],[45.41610717773437,39.097828059155106],[45.366668701171875,39.14044598558154],[45.26779174804686,39.19155346221369],[45.207366943359375,39.208581034631116],[45.16342163085937,39.22134900536284],[45.13595581054687,39.27239766741328],[45.05355834960937,39.36164339330996],[44.97665405273437,39.40410133494665],[44.94918823242187,39.471980308378264],[44.94918823242187,39.535556759752296],[44.910736083984375,39.57367470884661],[44.883270263671875,39.61600341690947]]]}},{"type":"Feature","properties":{"area":"SOUTH-EAST ASIA"},"geometry":{"type":"Polygon","coordinates":[[[-6.0369873046875,35.766572101173516],[-9.5361328125,33.37641235124676],[-13.359375,28.43971381702788],[-17.9296875,25.958044673317843],[-19.51171875,20.797201434307],[-21.26953125,13.752724664396988],[-18.80859375,7.013667927566642],[-10.01953125,2.1088986592431382],[0.3515625,4.565473550710278],[5.44921875,-2.986927393334863],[7.55859375,-12.897489183755892],[10.01953125,-31.353636941500987],[17.75390625,-36.738884124394296],[34.80468749999999,-35.7465122599185],[53.26171875,-19.145168196205297],[51.78955078125,8.450638800331001],[51.85546874999999,11.544616463449655],[51.67968749999999,13.838079936422462],[46.527099609375,11.835094475418835],[43.582763671875,12.361465967347373],[42.71484375,13.581920900545844],[38.49609375,20.3034175184893],[34.5025634765625,27.69325634309158],[34.4091796875,27.88278388425912],[34.9090576171875,29.434813598289637],[34.7332763671875,30.06909396443887],[34.5574951171875,30.439202087235582],[34.222412109375,31.325486676506983],[33.83789062499999,31.59725256170666],[32.49755859375,31.80289258670676],[30.102539062499996,31.765537409484374],[26.103515625,32.10118973232094],[23.3349609375,33.04550781490999],[20.91796875,33.33970700424026],[19.2919921875,31.784216884487385],[17.95166015625,32.676372772089834],[13.99658203125,33.55970664841198],[12.0849609375,35.11990857099681],[12.963867187499998,36.2265501474709],[12.32666015625,36.914764288955936],[11.79931640625,37.43997405227057],[9.25048828125,37.77071473849609],[4.24072265625,37.31775185163688],[-3.69140625,36.01356058518153],[-5.23773193359375,35.94910642813857],[-5.723876953125,35.91129848822746],[-6.0369873046875,35.766572101173516]]]}},{"type":"Feature","properties":{"stroke":"#555555","stroke-width":2,"stroke-opacity":1,"fill":"#555555","fill-opacity":0.5,"area":"EU"},"geometry":{"type":"Polygon","coordinates":[[[37.503890991210966,50.3406400988631],[37.477798461914084,50.451820688650685],[37.19627380371096,50.36167058760706],[36.857070922851584,50.31346193018245],[36.645584106445334,50.21865526580863],[36.557693481445334,50.25027845797701],[36.58653259277346,50.28363574205397],[36.425857543945334,50.328368011914975],[36.33659362792971,50.28363574205397],[36.27204895019534,50.33713411177109],[36.206130981445334,50.40020229361594],[36.107254028320334,50.447448430362435],[35.86280822753909,50.42908053341026],[35.82847595214846,50.424706174038526],[35.80650329589846,50.40020229361594],[35.737838745117216,50.351156507586644],[35.60325622558596,50.356413838674676],[35.582656860351584,50.4535694788403],[35.486526489257834,50.48154133106944],[35.39863586425784,50.57233560144463],[35.430221557617216,50.60633841978648],[35.40000915527346,50.65250802085826],[35.46592712402346,50.665566657816186],[35.494766235351584,50.65250802085826],[35.49339294433596,50.67688120622779],[35.464553833007834,50.683842649833174],[35.47279357910159,50.729936133938146],[35.50025939941409,50.77598430964944],[35.41923522949221,50.79682141386321],[35.41923522949221,50.8506076217602],[35.390396118164084,50.87747749326812],[35.394515991210966,50.90866178334157],[35.395889282226584,50.92424609910126],[35.33409118652346,50.94155588479963],[35.33271789550784,51.00554608465721],[35.41648864746096,51.0400986768664],[35.313491821289084,51.077213995043046],[35.207748413085966,51.043552519760375],[35.154190063476584,51.084978552372114],[35.16929626464846,51.124643717966904],[35.143203735351584,51.13412382381159],[35.13084411621096,51.18838149261001],[35.14457702636721,51.22021736655215],[34.985275268554716,51.22881787980137],[34.911117553710966,51.20215105735902],[34.86854553222659,51.19956957741764],[34.83421325683596,51.170302693540094],[34.78752136230471,51.18235601399329],[34.72160339355471,51.18493845842625],[34.705123901367216,51.17632974764875],[34.669418334960966,51.20215105735902],[34.668045043945334,51.2442947539955],[34.387893676757834,51.26492248787802],[34.33845520019534,51.23139772039958],[34.22996520996096,51.26234452724744],[34.35356140136721,51.36535019883748],[34.22447204589846,51.397920460811946],[34.23545837402347,51.43046754788038],[34.31510925292972,51.52284331713511],[34.10362243652348,51.678090555349854],[34.42222595214848,51.725752196313],[34.46067810058597,51.79205440859987],[34.09263610839847,52.022501000650195],[34.12559509277349,52.13728119405205],[33.88664245605473,52.34582700615622],[33.51860046386724,52.35924793235075],[33.18901062011723,52.37769505233966],[33.08189392089849,52.305539772859795],[32.82096862792974,52.26185386317506],[32.37602233886724,52.342471137837734],[32.22770690917973,52.09342949993746],[31.95854187011723,52.059668069580894],[31.777267456054734,52.113674103541626],[31.612472534179727,52.31897292691061],[31.62345886230473,52.56675151567431],[31.50260925292973,52.69677721019335],[31.59873962402348,52.799855485989504],[31.26365661621098,53.04492843186183],[31.444931030273477,53.19492712068105],[32.20848083496099,53.10927767593557],[32.39799499511723,53.18176140226502],[32.51884460449223,53.29189950172525],[32.73307800292973,53.3345633626148],[32.67265319824224,53.49008822461741],[32.47215270996098,53.571715120578986],[32.40074157714848,53.66295054447537],[32.48039245605474,53.70199109852733],[32.304611206054744,53.76697828983067],[31.777267456054734,53.80592239059053],[31.928329467773477,54.053342085270955],[31.780014038085977,54.11134546447647],[31.36253356933598,54.24155685295376],[31.22520446777348,54.467244312003196],[31.10710144042973,54.51510308738985],[31.18949890136723,54.653576914893094],[30.75828552246098,54.81057860495582],[30.85166931152348,54.943315514969534],[30.895614624023477,54.95908841815877],[30.95329284667973,54.99061565778563],[30.934066772460977,55.009520122163046],[30.92857360839848,55.03471221980507],[31.02195739746098,55.04572878459713],[31.00273132324223,55.1290416463151],[30.84617614746098,55.29514711218648],[30.92857360839848,55.38418159710126],[30.950546264648484,55.62373151534754],[30.77201843261723,55.605117624217094],[30.58250427246098,55.74605252374095],[30.16777038574223,55.85411876805832],[29.51683044433598,55.708158452041516],[29.343795776367227,55.760736249818834],[29.483871459960977,55.936510173094156],[29.21470642089848,55.99646099076823],[29.03892517089848,56.029471096109056],[28.85215759277348,55.957272890742004],[28.727188110351605,55.97341397558883],[28.68598937988286,56.103066326453614],[28.401718139648487,56.10612974593509],[28.374252319335984,56.06091958171721],[28.333053588867234,56.059386103946416],[28.138046264648484,56.16581771266696],[28.24928283691411,56.27271770293423],[28.171005249023484,56.38084050297426],[28.197097778320355,56.443138204344955],[28.033676147460984,56.65207461850503],[27.868881225585984,56.87787358938221],[27.66563415527348,56.840334699901284],[27.720565795898533,56.94160328703216],[27.80845642089853,57.323184898986746],[27.67799377441411,57.39725408460606],[27.521438598632855,57.430536463426684],[27.55714416503911,57.53609982067914],[27.34703063964854,57.58324618383188],[27.40470886230473,57.616359436214864],[27.400588989257855,57.69424042663774],[27.555770874023484,57.74044901963144],[27.52555847167973,57.80343223682334],[27.64640808105473,57.839268928186385],[27.75215148925786,57.83268934922515],[27.80158996582036,57.84950144081816],[27.822189331054734,57.89697146737487],[27.70408630371098,57.91229455438017],[27.69035339355473,58.01064419313466],[27.63130187988286,58.01209919754368],[27.620315551757855,58.09203337957691],[27.568130493164105,58.135558505269906],[27.48161315917974,58.26003622028863],[27.55302429199224,58.36823669920544],[27.50770568847661,58.43156035330221],[27.34840393066412,58.796314896864935],[27.738418579101616,58.99000532803039],[27.776870727539116,59.04514632466057],[27.802963256835987,59.14037396737895],[27.955398559570387,59.27605560064646],[28.12980651855475,59.295695222223166],[28.228683471679755,59.402112731898534],[27.984237670898544,59.46426827717684],[26.70433044433601,59.74290425672726],[26.624679565429755,60.051474420026345],[27.561264038086,60.27149310723817],[27.79472351074225,60.55491622578091],[28.36601257324225,60.88937034233298],[28.522567749023512,60.96411013333126],[28.582992553711012,60.96810910352182],[28.657150268554748,60.96144387384799],[28.7752532958985,61.09979330971818],[28.994979858398526,61.17205301725941],[31.109848022461,62.42503561215288],[31.631698608398505,62.906790669328075],[31.543807983398526,63.012301440510626],[30.862655639648498,63.405357825532164],[30.000228881836,63.76458292076888],[30.318832397461,63.844603535881205],[30.5879974365235,64.13128167035353],[30.35728454589853,64.3467458058432],[29.538803100586,64.92266867150246],[29.791488647460998,65.65742544545313],[30.055160522461,65.72074655683878],[28.994979858398526,66.93624797168597],[30.00572204589853,67.57335993596081],[28.418197631836005,68.46707609801051],[29.03892517089853,69.04279107689334],[30.23643493652353,69.49390545846873],[30.983505249023523,69.54963737358388],[31.03843688964853,69.79389853388508],[31.477890014648526,70.60326676344317],[23.018417358398537,71.97027638906381],[-9.501113891601475,63.71171775348058],[-19.69642639160148,26.248467256199522],[-15.96107482910147,27.112312236990405],[-13.664932250976475,28.356963607643923],[-9.578018188476474,33.746609502602944],[-8.534317016601474,35.687975511754026],[-5.235671997070223,36.024112713318466],[-3.5410308837889803,36.18942952802741],[3.3364105224610197,37.298636644614945],[10.444564819336021,38.046468862404375],[11.850814819336021,37.586486421515175],[14.207382202148532,35.59869400858111],[25.87486267089853,33.646063909385845],[33.23570251464852,32.96661914407457],[34.83970642089854,34.7545889412861],[34.90562438964854,35.8662389708407],[31.955795288086016,35.82059705201462],[29.027938842773516,36.03855017779989],[28.326187133789155,36.479275925989036],[27.984237670898523,36.479275925989036],[27.890853881836023,36.662360301266496],[27.853775024414148,36.696502641380015],[27.742538452148523,36.67447705968596],[27.573623657226644,36.542191171722735],[27.3896026611329,36.578592407405615],[27.296218872070398,36.66346190359139],[27.298965454101655,36.78124222006403],[27.393722534179773,36.90872512003456],[27.186355590820398,36.96031714599466],[27.11219787597665,37.34232140492518],[27.068252563476648,37.536410466671605],[26.914443969726644,37.6484903562059],[26.96250915527353,37.71261539271678],[27.0874786376954,37.72130604487683],[27.08061218261728,37.791879793952056],[26.194496154785245,38.204194894086115],[26.220245361328214,38.47778207104823],[26.307449340820398,38.50465406475556],[26.175613403320398,38.741766321754575],[26.656265258789148,39.01865020920714],[26.40769958496102,39.40489717466257],[26.31156921386728,39.42081206179375],[25.921554565429773,39.37093327496136],[25.537033081054787,40.11956530349848],[25.71006774902352,40.310425249799835],[26.01493835449228,40.43910847204669],[25.97648620605478,40.74881754464598],[26.127548217773537,40.76546147212543],[26.196212768554787,40.84030757074789],[26.212692260742273,40.9046907327285],[26.278610229492276,40.91922020055107],[26.33354187011729,41.01254766976727],[26.3623809814454,41.035340973499586],[26.32118225097666,41.070551469995074],[26.292343139648526,41.12643528544444],[26.32255554199228,41.16159699608574],[26.31568908691415,41.19673985199647],[26.30744934082041,41.26903340788161],[26.6315460205079,41.374232293915426],[26.62330627441416,41.429857060994145],[26.587600708007905,41.61903566976246],[26.29371643066416,41.746213536653016],[26.348648071289155,41.84245503142376],[26.52030944824228,41.85063912364956],[26.56150817871104,41.960000698656835],[26.601333618164155,41.99573251255608],[26.95838928222666,42.01206037830707],[27.016067504882916,42.105864280581315],[27.255706787109474,42.11808935584944],[27.351837158203224,42.07783959017498],[27.39234924316416,42.01359090088993],[27.555084228515717,41.92680320648786],[27.6416015625001,41.98552546868186],[27.722625732421967,41.99369123471852],[27.811203002929787,41.95489451722686],[27.811203002929787,42.00848901572394],[27.842102050781353,42.02583375568839],[27.910766601562596,41.99369123471852],[28.069381713867283,42.00644814707985],[34.26841735839853,43.73488704685432],[36.50962829589853,44.89041779655453],[36.64970397949229,45.39025294290081],[36.63047790527353,45.724877075164805],[37.01499938964853,46.20597291866554],[37.474365234375,46.76244305208004],[38.133544921875,46.875213396722685],[38.21250915527354,47.03222659199384],[38.23104858398437,47.184112659842015],[38.2269287109375,47.2316921696968],[38.327178955078125,47.26338813315702],[38.310699462890625,47.29599652002003],[38.21319580078125,47.299721913179944],[38.277740478515625,47.37975438400816],[38.3038330078125,47.46709298382174],[38.2928466796875,47.54687159892238],[38.36151123046875,47.60431120244565],[38.76800537109375,47.702368466573716],[38.78997802734375,47.81684332352077],[38.88610839843749,47.86385263046567],[39.82543945312499,47.85740289465826],[39.8748779296875,48.120267527274464],[40.02593994140625,48.242967421301366],[39.98748779296875,48.316994361929304],[39.936676025390625,48.27770946754797],[39.847412109375,48.32156041109599],[39.93804931640625,48.378145469762444],[39.85015869140625,48.46745824148332],[39.85290527343749,48.56206753526866],[39.82543945312499,48.569337856144415],[39.814453125,48.58750908593607],[39.67987060546875,48.59477574898104],[39.7100830078125,48.71452483966837],[39.8089599609375,48.83308560934761],[40.016326904296875,48.823140892101684],[40.08087158203125,48.88639177703194],[39.8419189453125,48.88910074349772],[39.686737060546875,49.03606736319316],[39.94628906249999,49.105342729732754],[40.22163391113283,49.26556423534828],[40.14198303222658,49.38013767834597],[40.04241943359375,49.42437391023319],[40.05134582519533,49.48195527529924],[40.18318176269533,49.57287614193415],[40.1378631591797,49.603145526468985],[39.94285583496095,49.58534228077639],[39.69429016113283,49.61115486691071],[39.609146118164084,49.72403529516711],[39.26307678222658,49.75243630033573],[39.18891906738283,49.88534449228095],[38.958206176757834,49.788800797567795],[38.69041442871096,49.98875953320282],[38.65608215332033,49.94901078355835],[38.5887908935547,49.972863972559466],[38.47618103027346,49.97109747495407],[38.34434509277346,50.001119116212905],[38.32649230957034,50.07168437125453],[38.19877624511721,50.068158571371235],[38.23722839355471,49.96049712760075],[38.03123474121096,49.90746037049926],[38.00926208496096,49.95519607850053],[37.89115905761721,50.052289264025866],[37.65769958496096,50.156225818771155],[37.63023376464846,50.305568582636454],[37.503890991210966,50.3406400988631]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[93.80126953124999,15.347761924346937],[91.0546875,12.726084296948196],[90.703125,6.620957270326323],[102.39257812499999,-11.39387923296741],[113.2470703125,-11.480024648555816],[123.837890625,-11.867350911459294],[130.6494140625,-9.44906182688142],[137.021484375,-9.264779334169571],[141.1578369140625,-9.40571004160001],[142.05322265625,-9.432805545760889],[142.3828125,-9.519496825508257],[142.7288818359375,-9.611582210984674],[142.9486083984375,-9.622414142924805],[143.19580078124997,-9.600749932246847],[144.041748046875,-10.271681232946728],[147.65625,-11.781325296112277],[156.26953125,-17.560246503294888],[164.70703125,-25.324166525738384],[178.857421875,-27.527758206861886],[193.7109375,-22.593726063929296],[193.974609375,-12.039320557540572],[174.19921875,6.533645130567532],[171.123046875,11.005904459659451],[146.1181640625,16.341225619207496],[130.2978515625,13.453737213419249],[122.6953125,21.37124437061831],[120.7177734375,21.238182425982313],[117.23510742187501,16.330682820381462],[113.895263671875,11.576906799408956],[108.19335937499999,6.014922187699065],[106.16638183593749,4.368320420876243],[105.380859375,3.9574209405181326],[105.2764892578125,2.4272521703917294],[104.8150634765625,1.5653569866197157],[104.43328857421875,1.345701455472609],[104.16549682617188,1.2537146393239096],[103.94439697265624,1.2138984340943106],[103.79745483398438,1.1603515819731938],[103.72055053710938,1.1438754213781501],[103.66973876953125,1.1782006476145548],[103.568115234375,1.1644706071806057],[103.0078125,1.3731595449619909],[102.030029296875,1.9991059831233327],[99.84374999999999,3.7984839750369748],[96.2841796875,7.427836528738338],[95.60302734375,12.940322128384627],[93.80126953124999,15.347761924346937]]]}}]}
\ No newline at end of file
diff --git a/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java b/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java
index f0df1e11c..91d1f3a97 100644
--- a/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java
+++ b/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java
@@ -53,6 +53,7 @@ import java.util.stream.Stream;
 import java.util.zip.ZipFile;
 
 import static com.graphhopper.reader.gtfs.Label.reverseEdges;
+import static com.graphhopper.util.Parameters.PT.RANGE_QUERY_END_TIME;
 
 public final class GraphHopperGtfs implements GraphHopperAPI {
 
@@ -84,14 +85,6 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
         return new Factory(flagEncoder, translationMap, graphHopperStorage, locationIndex, gtfsStorage);
     }
 
-    public static final String EARLIEST_DEPARTURE_TIME_HINT = "earliest_departure_time";
-    public static final String RANGE_QUERY_END_TIME = "range_query_end_time";
-    public static final String ARRIVE_BY = "arrive_by";
-    public static final String IGNORE_TRANSFERS = "ignore_transfers";
-    public static final String WALK_SPEED_KM_H = "walk_speed";
-    public static final String MAX_WALK_DISTANCE_PER_LEG = "max_walk_distance_per_leg";
-    public static final String MAX_TRANSFER_DISTANCE_PER_LEG = "max_transfer_distance_per_leg";
-
     private final TranslationMap translationMap;
     private final PtFlagEncoder flagEncoder;
     private final GraphHopperStorage graphHopperStorage;
@@ -119,18 +112,18 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
 
         RequestHandler(GHRequest request) {
             maxVisitedNodesForRequest = request.getHints().getInt(Parameters.Routing.MAX_VISITED_NODES, Integer.MAX_VALUE);
-            final String departureTimeString = request.getHints().get(EARLIEST_DEPARTURE_TIME_HINT, "");
+            final String departureTimeString = request.getHints().get(Parameters.PT.EARLIEST_DEPARTURE_TIME, "");
             try {
                 initialTime = Instant.parse(departureTimeString);
             } catch (DateTimeParseException e) {
-                throw new IllegalArgumentException(String.format("Illegal value for required parameter %s: [%s]", EARLIEST_DEPARTURE_TIME_HINT, departureTimeString));
+                throw new IllegalArgumentException(String.format("Illegal value for required parameter %s: [%s]", Parameters.PT.EARLIEST_DEPARTURE_TIME, departureTimeString));
             }
-            rangeQueryEndTime = request.getHints().has(RANGE_QUERY_END_TIME) ? Instant.parse(request.getHints().get(RANGE_QUERY_END_TIME, "")) : initialTime;
-            arriveBy = request.getHints().getBool(ARRIVE_BY, false);
-            ignoreTransfers = request.getHints().getBool(IGNORE_TRANSFERS, false);
-            walkSpeedKmH = request.getHints().getDouble(WALK_SPEED_KM_H, 5.0);
-            maxWalkDistancePerLeg = request.getHints().getDouble(MAX_WALK_DISTANCE_PER_LEG, Double.MAX_VALUE);
-            maxTransferDistancePerLeg = request.getHints().getDouble(MAX_TRANSFER_DISTANCE_PER_LEG, Double.MAX_VALUE);
+            rangeQueryEndTime = request.getHints().has(Parameters.PT.RANGE_QUERY_END_TIME) ? Instant.parse(request.getHints().get(RANGE_QUERY_END_TIME, "")) : initialTime;
+            arriveBy = request.getHints().getBool(Parameters.PT.ARRIVE_BY, false);
+            ignoreTransfers = request.getHints().getBool(Parameters.PT.IGNORE_TRANSFERS, false);
+            walkSpeedKmH = request.getHints().getDouble(Parameters.PT.WALK_SPEED, 5.0);
+            maxWalkDistancePerLeg = request.getHints().getDouble(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, Double.MAX_VALUE);
+            maxTransferDistancePerLeg = request.getHints().getDouble(Parameters.PT.MAX_TRANSFER_DISTANCE_PER_LEG, Double.MAX_VALUE);
             weighting = createPtTravelTimeWeighting(flagEncoder, arriveBy, walkSpeedKmH);
             translation = translationMap.getWithFallBack(request.getLocale());
             if (request.getPoints().size() != 2) {
@@ -247,12 +240,12 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
                 FakeWalkNetworkBuilder.buildWalkNetwork(((GtfsStorage) graphHopperStorage.getExtension()).getGtfsFeeds().values(), graphHopperStorage, ptFlagEncoder, Helper.DIST_EARTH);
             }
             LocationIndex walkNetworkIndex;
-            if (graphHopperStorage.getNodes() > 0 ) {
+            if (graphHopperStorage.getNodes() > 0) {
                 walkNetworkIndex = new LocationIndexTree(graphHopperStorage, new RAMDirectory()).prepareIndex();
             } else {
                 walkNetworkIndex = new EmptyLocationIndex();
             }
-            for (int i=0;i<id;i++) {
+            for (int i = 0; i < id; i++) {
                 new GtfsReader("gtfs_" + i, graphHopperStorage, walkNetworkIndex).readGraph();
             }
             graphHopperStorage.flush();
@@ -320,7 +313,7 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
             path.setFirstPtLegDeparture(solution.firstPtDepartureTime);
         }
         path.setNumChanges((int) path.getLegs().stream()
-                .filter(l->l instanceof Trip.PtLeg)
+                .filter(l -> l instanceof Trip.PtLeg)
                 .filter(l -> !((Trip.PtLeg) l).isInSameVehicleAsPrevious)
                 .count() - 1);
         com.graphhopper.gtfs.fare.Trip faresTrip = new com.graphhopper.gtfs.fare.Trip();
@@ -422,7 +415,7 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
             List<Trip.Leg> result = new ArrayList<>();
             long boardTime = -1;
             List<Label.Transition> partition = null;
-            for (int i=1; i<path.size(); i++) {
+            for (int i = 1; i < path.size(); i++) {
                 Label.Transition transition = path.get(i);
                 Label.EdgeLabel edge = path.get(i).edge;
                 if (edge.edgeType == GtfsStorage.EdgeType.BOARD) {
@@ -470,7 +463,7 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
             }
             instructionsFromEdges.finish();
             final Instant departureTime = Instant.ofEpochMilli(path.get(0).label.currentTime);
-            final Instant arrivalTime = Instant.ofEpochMilli(path.get(path.size()-1).label.currentTime);
+            final Instant arrivalTime = Instant.ofEpochMilli(path.get(path.size() - 1).label.currentTime);
             return Collections.singletonList(new Trip.WalkLeg(
                     "Walk",
                     Date.from(departureTime),
@@ -528,15 +521,15 @@ public final class GraphHopperGtfs implements GraphHopperAPI {
                     stop = findStop(t);
                     departureTime = t.label.currentTime;
                     stops.add(new Trip.Stop(stop.stop_id, stop.stop_name, geometryFactory.createPoint(new Coordinate(stop.stop_lon, stop.stop_lat)), null, Date.from(Instant.ofEpochMilli(departureTime))));
-                break;
+                    break;
                 case HOP:
                     stop = findStop(t);
                     arrivalTimeFromHopEdge = t.label.currentTime;
-                break;
+                    break;
                 case DWELL:
                     departureTime = t.label.currentTime;
                     stops.add(new Trip.Stop(stop.stop_id, stop.stop_name, geometryFactory.createPoint(new Coordinate(stop.stop_lon, stop.stop_lat)), Date.from(Instant.ofEpochMilli(arrivalTimeFromHopEdge)), Date.from(Instant.ofEpochMilli(departureTime))));
-                break;
+                    break;
                 default:
                     throw new RuntimeException();
             }
diff --git a/web/src/main/webapp/js/graphhopper/GHRequest.js b/web/src/main/webapp/js/graphhopper/GHRequest.js
index 2af5634fb..fab7bda61 100644
--- a/web/src/main/webapp/js/graphhopper/GHRequest.js
+++ b/web/src/main/webapp/js/graphhopper/GHRequest.js
@@ -27,20 +27,19 @@ if (!Function.prototype.bind) {
     };
 }
 
-
 var GHRequest = function (host, api_key) {
     this.host = host;
     this.route = new GHRoute(new GHInput(), new GHInput());
     this.from = this.route.first();
     this.to = this.route.last();
-
     this.features = {};
 
     this.do_zoom = true;
     this.useMiles = false;
     // use jsonp here if host allows CORS
     this.dataType = "json";
-    this.api_params = {"locale": "en", "vehicle": "car", "weighting": "fastest", "elevation": false, "key": api_key};
+    this.api_params = {"locale": "en", "vehicle": "car", "weighting": "fastest", "elevation": false,
+        "key": api_key, "pt": {}};
 
     // register events
     this.route.addListener('route.add', function (evt) {
@@ -62,17 +61,16 @@ var GHRequest = function (host, api_key) {
 };
 
 GHRequest.prototype.init = function (params) {
-
     for (var key in params) {
+        if (key === "point" || key === "mathRandom" || key === "do_zoom" || key === "layer" || key === "use_miles")
+            continue;
+
         var val = params[key];
         if (val === "false")
             val = false;
         else if (val === "true")
             val = true;
 
-        if (key === "point" || key === "mathRandom" || key === "do_zoom" || key === "layer" || key === "use_miles")
-            continue;
-
         this.api_params[key] = val;
     }
 
@@ -121,12 +119,12 @@ GHRequest.prototype.init = function (params) {
 };
 
 GHRequest.prototype.setEarliestDepartureTime = function (localdatetime) {
-    this.api_params.earliestDepartureTime = localdatetime;
+    this.api_params.pt.earliest_departure_time = localdatetime;
 };
 
 GHRequest.prototype.getEarliestDepartureTime = function () {
-    if (this.api_params.earliestDepartureTime)
-        return this.api_params.earliestDepartureTime;
+    if (this.api_params.pt.earliest_departure_time)
+        return this.api_params.pt.earliest_departure_time;
     return undefined;
 };
 
@@ -197,21 +195,39 @@ GHRequest.prototype.createPointParams = function (useRawInput) {
 
 GHRequest.prototype.createPath = function (url, skipParameters) {
     for (var key in this.api_params) {
-        var val = this.api_params[key];
         if(skipParameters && skipParameters[key])
             continue;
 
-        if (GHRoute.isArray(val)) {
-            for (var keyIndex in val) {
-                url += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(val[keyIndex]);
-            }
-        } else {
-            url += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(val);
-        }
+        var val = this.api_params[key];
+        url += this.flatParameter(key, val);
     }
     return url;
 };
 
+GHRequest.prototype.flatParameter = function (key, val) {
+
+    if(GHRoute.isObject(val)) {
+        var url = "";
+        var arr = Object.keys(val);
+        for (var keyIndex in arr) {
+           var objKey = arr[keyIndex];
+           url += this.flatParameter(key + "." + objKey, val[objKey]);
+        }
+        return url;
+
+    } else  if (GHRoute.isArray(val)) {
+        var url = "";
+        var arr = val;
+        for (var keyIndex in arr) {
+            var objKey = arr[keyIndex];
+            url += this.flatParameter(key + "."+ objKey, val);
+        }
+        return url;
+    }
+
+    return "&" + encodeURIComponent(key) + "=" + encodeURIComponent(val);
+}
+
 GHRequest.prototype.doRequest = function (url, callback) {
     var that = this;
     $.ajax({
diff --git a/web/src/main/webapp/js/graphhopper/GHRoute.js b/web/src/main/webapp/js/graphhopper/GHRoute.js
index a507a207b..3b290f83a 100644
--- a/web/src/main/webapp/js/graphhopper/GHRoute.js
+++ b/web/src/main/webapp/js/graphhopper/GHRoute.js
@@ -27,6 +27,11 @@ GHroute.isArray = function (value) {
     return (stringValue.toLowerCase() === "[object array]");
 };
 
+GHroute.isObject = function (value) {
+    var stringValue = Object.prototype.toString.call(value);
+    return (stringValue.toLowerCase() === "[object object]");
+};
+
 GHroute.prototype = {
     first: function () {
         return this.getIndex(0);
diff --git a/web/src/main/webapp/js/main.js b/web/src/main/webapp/js/main.js
index 37891cd33..09ec9e7d4 100644
--- a/web/src/main/webapp/js/main.js
+++ b/web/src/main/webapp/js/main.js
@@ -46,10 +46,10 @@ var ensureOneCheckboxSelected=function(){$("#gpx_route").change(function(){$(thi
 function round(t,n){return void 0===n&&(n=1e6),Math.round(t*n)/n}var GHInput=function(t){this.set(t)};GHInput.isObject=function(t){var n=Object.prototype.toString.call(t);return"[object object]"===n.toLowerCase()},GHInput.isString=function(t){var n=Object.prototype.toString.call(t);return"[object string]"===n.toLowerCase()},GHInput.prototype.isResolved=function(){return!isNaN(this.lat)&&!isNaN(this.lng)},GHInput.prototype.setCoord=function(t,n){this.lat=round(t),this.lng=round(n),this.input=this.toString()},GHInput.prototype.setUnresolved=function(){this.lat=void 0,this.lng=void 0},GHInput.prototype.set=function(t){if(this.input=t,GHInput.isObject(t))this.setCoord(t.lat,t.lng);else if(GHInput.isString(t)){var n=t.indexOf(",");n>=0?(this.lat=round(parseFloat(t.substr(0,n))),this.lng=round(parseFloat(t.substr(n+1))),this.isResolved()?this.input=this.toString():this.setUnresolved()):this.setUnresolved()}},GHInput.prototype.toString=function(){if(void 0!==this.lat&&void 0!==this.lng)return this.lat+","+this.lng},module.exports=GHInput;
 
 },{}],13:[function(require,module,exports){
-var GHRoute=require("./GHRoute.js"),GHInput=require("./GHInput.js"),graphhopperTools=require("./tools.js");Function.prototype.bind||(Function.prototype.bind=function(t){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var e=Array.prototype.slice.call(arguments,1),i=this,o=function(){},s=function(){return i.apply(this instanceof o&&t?this:t,e.concat(Array.prototype.slice.call(arguments)))};return o.prototype=this.prototype,s.prototype=new o,s});var GHRequest=function(t,e){this.host=t,this.route=new GHRoute(new GHInput,new GHInput),this.from=this.route.first(),this.to=this.route.last(),this.features={},this.do_zoom=!0,this.useMiles=!1,this.dataType="json",this.api_params={locale:"en",vehicle:"car",weighting:"fastest",elevation:!1,key:e},this.route.addListener("route.add",function(t){this.to=this.route.last()}.bind(this)),this.route.addListener("route.remove",function(t){this.from=this.route.first(),this.to=this.route.last()}.bind(this)),this.route.addListener("route.move",function(t){this.from=this.route.first(),this.to=this.route.last()}.bind(this)),this.route.addListener("route.reverse",function(t){this.from=this.route.first(),this.to=this.route.last()}.bind(this))};GHRequest.prototype.init=function(t){for(var e in t){var i=t[e];"false"===i?i=!1:"true"===i&&(i=!0),"point"!==e&&"mathRandom"!==e&&"do_zoom"!==e&&"layer"!==e&&"use_miles"!==e&&(this.api_params[e]=i)}"do_zoom"in t&&(this.do_zoom=t.do_zoom),"use_miles"in t&&(this.useMiles=t.use_miles),this.api_params.elevation=!1;var o=this.features[this.api_params.vehicle];if(o&&o.elevation&&("elevation"in t?this.api_params.elevation=t.elevation:this.api_params.elevation=!0),t.q){var s=t.q;t.point||(t.point=[]);var r=s.indexOf("from:"),a=s.indexOf("to:");if(r>=0&&a>=0)r<a?(t.point.push(s.substring(r+5,a).trim()),t.point.push(s.substring(a+3).trim())):(t.point.push(s.substring(a+3,r).trim()),t.point.push(s.substring(r+5).trim()));else for(var n=s.split("p:"),p=0;p<n.length;p++){var u=n[p].trim();0!==u.length&&t.point.push(u)}}},GHRequest.prototype.setEarliestDepartureTime=function(t){this.api_params.earliestDepartureTime=t},GHRequest.prototype.getEarliestDepartureTime=function(){if(this.api_params.earliestDepartureTime)return this.api_params.earliestDepartureTime},GHRequest.prototype.initVehicle=function(t){this.api_params.vehicle=t;var e=this.features[t];e&&e.elevation?this.api_params.elevation=!0:this.api_params.elevation=!1},GHRequest.prototype.hasElevation=function(){return this.api_params.elevation},GHRequest.prototype.getVehicle=function(){return this.api_params.vehicle},GHRequest.prototype.isPublicTransit=function(){return"pt"===this.getVehicle()},GHRequest.prototype.createGeocodeURL=function(t,e){var i=this.host;t&&(i=t);var o=this.createPath(i+"/geocode?limit=6&type="+this.dataType);if(e>=0&&e<this.route.size()){var s=this.route.getIndex(e);s.isResolved()&&(o+="&point="+s.lat+","+s.lng)}return o},GHRequest.prototype.createURL=function(){return this.createPath(this.host+"/route?"+this.createPointParams(!1)+"&type="+this.dataType)},GHRequest.prototype.createGPXURL=function(t,e,i){return this.createPath(this.host+"/route?"+this.createPointParams(!1)+"&type=gpx&gpx.route="+t+"&gpx.track="+e+"&gpx.waypoints="+i)},GHRequest.prototype.createHistoryURL=function(){var t={key:!0};return this.createPath("?"+this.createPointParams(!0),t)+"&use_miles="+!!this.useMiles},GHRequest.prototype.createPointParams=function(t){var e,i,o,s="";for(i=0,o=this.route.size();i<o;i++)e=this.route.getIndex(i),i>0&&(s+="&"),s+=t?"point="+encodeURIComponent(e.input):"point="+encodeURIComponent(e.toString());return s},GHRequest.prototype.createPath=function(t,e){for(var i in this.api_params){var o=this.api_params[i];if(!e||!e[i])if(GHRoute.isArray(o))for(var s in o)t+="&"+encodeURIComponent(i)+"="+encodeURIComponent(o[s]);else t+="&"+encodeURIComponent(i)+"="+encodeURIComponent(o)}return t},GHRequest.prototype.doRequest=function(t,e){var i=this;$.ajax({timeout:3e4,url:t,success:function(t){if(t.paths)for(var o=0;o<t.paths.length;o++){var s=t.paths[o];if(s.points_encoded){var r=graphhopperTools.decodePath(s.points,i.hasElevation());s.points={type:"LineString",coordinates:r};var a=graphhopperTools.decodePath(s.snapped_waypoints,i.hasElevation());s.snapped_waypoints={type:"MultiPoint",coordinates:a}}}e(t)},error:function(i){var o,s="API did not respond! ";if(i&&i.responseText&&i.responseText.indexOf("{")>=0)o=JSON.parse(i.responseText);else if(i&&i.statusText&&"OK"!==i.statusText){s+=i.statusText;var r="Error for "+t;o={message:s,hints:[{message:s,details:r}]}}console.log(s+" "+JSON.stringify(i)),e(o)},type:"GET",dataType:this.dataType,crossDomain:!0})},GHRequest.prototype.getInfo=function(){var t=this.host+"/info?type="+this.dataType+"&key="+this.getKey();return $.ajax({url:t,timeout:3e3,type:"GET",dataType:this.dataType,crossDomain:!0})},GHRequest.prototype.setLocale=function(t){t&&(this.api_params.locale=t)},GHRequest.prototype.getKey=function(){return this.api_params.key},GHRequest.prototype.fetchTranslationMap=function(t){t||(t="");var e=this.host+"/i18n/"+t+"?type="+this.dataType+"&key="+this.getKey();return $.ajax({url:e,timeout:3e3,type:"GET",dataType:this.dataType,crossDomain:!0})},module.exports=GHRequest;
+var GHRoute=require("./GHRoute.js"),GHInput=require("./GHInput.js"),graphhopperTools=require("./tools.js");Function.prototype.bind||(Function.prototype.bind=function(t){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var e=Array.prototype.slice.call(arguments,1),i=this,o=function(){},s=function(){return i.apply(this instanceof o&&t?this:t,e.concat(Array.prototype.slice.call(arguments)))};return o.prototype=this.prototype,s.prototype=new o,s});var GHRequest=function(t,e){this.host=t,this.route=new GHRoute(new GHInput,new GHInput),this.from=this.route.first(),this.to=this.route.last(),this.features={},this.do_zoom=!0,this.useMiles=!1,this.dataType="json",this.api_params={locale:"en",vehicle:"car",weighting:"fastest",elevation:!1,key:e,pt:{}},this.route.addListener("route.add",function(t){this.to=this.route.last()}.bind(this)),this.route.addListener("route.remove",function(t){this.from=this.route.first(),this.to=this.route.last()}.bind(this)),this.route.addListener("route.move",function(t){this.from=this.route.first(),this.to=this.route.last()}.bind(this)),this.route.addListener("route.reverse",function(t){this.from=this.route.first(),this.to=this.route.last()}.bind(this))};GHRequest.prototype.init=function(t){for(var e in t)if("point"!==e&&"mathRandom"!==e&&"do_zoom"!==e&&"layer"!==e&&"use_miles"!==e){var i=t[e];"false"===i?i=!1:"true"===i&&(i=!0),this.api_params[e]=i}"do_zoom"in t&&(this.do_zoom=t.do_zoom),"use_miles"in t&&(this.useMiles=t.use_miles),this.api_params.elevation=!1;var o=this.features[this.api_params.vehicle];if(o&&o.elevation&&("elevation"in t?this.api_params.elevation=t.elevation:this.api_params.elevation=!0),t.q){var s=t.q;t.point||(t.point=[]);var r=s.indexOf("from:"),a=s.indexOf("to:");if(r>=0&&a>=0)r<a?(t.point.push(s.substring(r+5,a).trim()),t.point.push(s.substring(a+3).trim())):(t.point.push(s.substring(a+3,r).trim()),t.point.push(s.substring(r+5).trim()));else for(var n=s.split("p:"),p=0;p<n.length;p++){var u=n[p].trim();0!==u.length&&t.point.push(u)}}},GHRequest.prototype.setEarliestDepartureTime=function(t){this.api_params.pt.earliest_departure_time=t},GHRequest.prototype.getEarliestDepartureTime=function(){if(this.api_params.pt.earliest_departure_time)return this.api_params.pt.earliest_departure_time},GHRequest.prototype.initVehicle=function(t){this.api_params.vehicle=t;var e=this.features[t];e&&e.elevation?this.api_params.elevation=!0:this.api_params.elevation=!1},GHRequest.prototype.hasElevation=function(){return this.api_params.elevation},GHRequest.prototype.getVehicle=function(){return this.api_params.vehicle},GHRequest.prototype.isPublicTransit=function(){return"pt"===this.getVehicle()},GHRequest.prototype.createGeocodeURL=function(t,e){var i=this.host;t&&(i=t);var o=this.createPath(i+"/geocode?limit=6&type="+this.dataType);if(e>=0&&e<this.route.size()){var s=this.route.getIndex(e);s.isResolved()&&(o+="&point="+s.lat+","+s.lng)}return o},GHRequest.prototype.createURL=function(){return this.createPath(this.host+"/route?"+this.createPointParams(!1)+"&type="+this.dataType)},GHRequest.prototype.createGPXURL=function(t,e,i){return this.createPath(this.host+"/route?"+this.createPointParams(!1)+"&type=gpx&gpx.route="+t+"&gpx.track="+e+"&gpx.waypoints="+i)},GHRequest.prototype.createHistoryURL=function(){var t={key:!0};return this.createPath("?"+this.createPointParams(!0),t)+"&use_miles="+!!this.useMiles},GHRequest.prototype.createPointParams=function(t){var e,i,o,s="";for(i=0,o=this.route.size();i<o;i++)e=this.route.getIndex(i),i>0&&(s+="&"),s+=t?"point="+encodeURIComponent(e.input):"point="+encodeURIComponent(e.toString());return s},GHRequest.prototype.createPath=function(t,e){for(var i in this.api_params)if(!e||!e[i]){var o=this.api_params[i];t+=this.flatParameter(i,o)}return t},GHRequest.prototype.flatParameter=function(t,e){if(GHRoute.isObject(e)){var i="",o=Object.keys(e);for(var s in o){var r=o[s];i+=this.flatParameter(t+"."+r,e[r])}return i}if(GHRoute.isArray(e)){var i="",o=e;for(var s in o){var r=o[s];i+=this.flatParameter(t+"."+r,e)}return i}return"&"+encodeURIComponent(t)+"="+encodeURIComponent(e)},GHRequest.prototype.doRequest=function(t,e){var i=this;$.ajax({timeout:3e4,url:t,success:function(t){if(t.paths)for(var o=0;o<t.paths.length;o++){var s=t.paths[o];if(s.points_encoded){var r=graphhopperTools.decodePath(s.points,i.hasElevation());s.points={type:"LineString",coordinates:r};var a=graphhopperTools.decodePath(s.snapped_waypoints,i.hasElevation());s.snapped_waypoints={type:"MultiPoint",coordinates:a}}}e(t)},error:function(i){var o,s="API did not respond! ";if(i&&i.responseText&&i.responseText.indexOf("{")>=0)o=JSON.parse(i.responseText);else if(i&&i.statusText&&"OK"!==i.statusText){s+=i.statusText;var r="Error for "+t;o={message:s,hints:[{message:s,details:r}]}}console.log(s+" "+JSON.stringify(i)),e(o)},type:"GET",dataType:this.dataType,crossDomain:!0})},GHRequest.prototype.getInfo=function(){var t=this.host+"/info?type="+this.dataType+"&key="+this.getKey();return $.ajax({url:t,timeout:3e3,type:"GET",dataType:this.dataType,crossDomain:!0})},GHRequest.prototype.setLocale=function(t){t&&(this.api_params.locale=t)},GHRequest.prototype.getKey=function(){return this.api_params.key},GHRequest.prototype.fetchTranslationMap=function(t){t||(t="");var e=this.host+"/i18n/"+t+"?type="+this.dataType+"&key="+this.getKey();return $.ajax({url:e,timeout:3e3,type:"GET",dataType:this.dataType,crossDomain:!0})},module.exports=GHRequest;
 
 },{"./GHInput.js":12,"./GHRoute.js":14,"./tools.js":15}],14:[function(require,module,exports){
-var GHInput=require("./GHInput.js"),GHroute=function(){var t=Object.create(Array.prototype);return t=Array.apply(t,arguments)||t,GHroute.injectClassMethods(t),t._listeners={},t};GHroute.injectClassMethods=function(t){for(var e in GHroute.prototype)GHroute.prototype.hasOwnProperty(e)&&(t[e]=GHroute.prototype[e]);return t},GHroute.fromArray=function(t){var e=GHroute.apply(null,t);return e},GHroute.isArray=function(t){var e=Object.prototype.toString.call(t);return"[object array]"===e.toLowerCase()},GHroute.prototype={first:function(){return this.getIndex(0)},last:function(){return this.getIndex(this.length-1)},getIndex:function(t){return t=isNaN(t)?0:t,this[t]instanceof GHInput&&this[t]},getIndexByCoord:function(t){var e,r,i,n=!1,o=new GHInput(t);for(r=0,i=this.length;r<i;r++)if(e=this[r],e.toString()===o.toString()){n=r;break}return n},getIndexFromCoord:function(t){return this.getIndex(this.getIndexByCoord(t))},size:function(){return this.length},add:function(t,e){if(GHroute.isArray(t)){for(var r=0;r<t.length;r++)Array.prototype.push.call(this,t[r]instanceof GHInput?t[r]:new GHInput(t[r])),void 0!==e?(this.move(-1,e,!0),e++):e=this.lenght-1,this.fire("route.add",{point:this[e],to:e});return this}return Array.prototype.push.call(this,t instanceof GHInput?t:new GHInput(t)),void 0!==e?this.move(-1,e,!0):e=this.lenght-1,this.fire("route.add",{point:this[e],to:e}),this[e]},removeSingle:function(t){var e=!1;return isNaN(t)||t>=this.length||void 0===this[t]?(t instanceof GHInput&&(t=t.toString()),e=this.getIndexByCoord(t)):e=t,e!==!1&&this.remove(e),this},remove:function(t,e){var r=e||1;return Array.prototype.splice.call(this,t,r),1===this.length&&Array.prototype.push.call(this,new GHInput),this.fire("route.remove",{from:t,to:r}),this},addAll:function(){for(var t=0;t<arguments.length;t++)this.add(arguments[t]);return this},set:function(t,e,r){if(t instanceof GHInput)this[e]=t;else{if(!(this[e]instanceof GHInput))return!!r&&this.add(t,e);this[e].set(t)}return this.fire("route.set",{point:this[e],to:e}),this[e]},move:function(t,e,r){for(;t<0;)t+=this.length;for(;e<0;)e+=this.length;if(e>=this.length)for(var i=e-this.length;i--+1;)Array.prototype.push.call(this,void 0);return Array.prototype.splice.call(this,e,0,Array.prototype.splice.call(this,t,1)[0]),r||this.fire("route.move",{old_index:t,new_index:e}),this},reverse:function(){return Array.prototype.reverse.call(this),this.fire("route.reverse",{}),this},isResolved:function(){for(var t=0,e=this.length;t<e;t++){var r=this[t];if(!r.isResolved())return!1}return!0},addListener:function(t,e){return"undefined"==typeof this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},fire:function(t,e){if("string"==typeof t&&(t={type:t}),"object"==typeof e)for(var r in e)t[r]=e[r];if(t.route||(t.route=this),!t.type)throw new Error("Event object missing 'type' property.");if(this._listeners[t.type]instanceof Array)for(var i=this._listeners[t.type],n=0,o=i.length;n<o;n++)i[n].call(this,t)},removeListener:function(t,e){if(this._listeners[t]instanceof Array)for(var r=this._listeners[t],i=0,n=r.length;i<n;i++)if(r[i]===e){r.splice(i,1);break}}},module.exports=GHroute;
+var GHInput=require("./GHInput.js"),GHroute=function(){var t=Object.create(Array.prototype);return t=Array.apply(t,arguments)||t,GHroute.injectClassMethods(t),t._listeners={},t};GHroute.injectClassMethods=function(t){for(var e in GHroute.prototype)GHroute.prototype.hasOwnProperty(e)&&(t[e]=GHroute.prototype[e]);return t},GHroute.fromArray=function(t){var e=GHroute.apply(null,t);return e},GHroute.isArray=function(t){var e=Object.prototype.toString.call(t);return"[object array]"===e.toLowerCase()},GHroute.isObject=function(t){var e=Object.prototype.toString.call(t);return"[object object]"===e.toLowerCase()},GHroute.prototype={first:function(){return this.getIndex(0)},last:function(){return this.getIndex(this.length-1)},getIndex:function(t){return t=isNaN(t)?0:t,this[t]instanceof GHInput&&this[t]},getIndexByCoord:function(t){var e,r,i,n=!1,o=new GHInput(t);for(r=0,i=this.length;r<i;r++)if(e=this[r],e.toString()===o.toString()){n=r;break}return n},getIndexFromCoord:function(t){return this.getIndex(this.getIndexByCoord(t))},size:function(){return this.length},add:function(t,e){if(GHroute.isArray(t)){for(var r=0;r<t.length;r++)Array.prototype.push.call(this,t[r]instanceof GHInput?t[r]:new GHInput(t[r])),void 0!==e?(this.move(-1,e,!0),e++):e=this.lenght-1,this.fire("route.add",{point:this[e],to:e});return this}return Array.prototype.push.call(this,t instanceof GHInput?t:new GHInput(t)),void 0!==e?this.move(-1,e,!0):e=this.lenght-1,this.fire("route.add",{point:this[e],to:e}),this[e]},removeSingle:function(t){var e=!1;return isNaN(t)||t>=this.length||void 0===this[t]?(t instanceof GHInput&&(t=t.toString()),e=this.getIndexByCoord(t)):e=t,e!==!1&&this.remove(e),this},remove:function(t,e){var r=e||1;return Array.prototype.splice.call(this,t,r),1===this.length&&Array.prototype.push.call(this,new GHInput),this.fire("route.remove",{from:t,to:r}),this},addAll:function(){for(var t=0;t<arguments.length;t++)this.add(arguments[t]);return this},set:function(t,e,r){if(t instanceof GHInput)this[e]=t;else{if(!(this[e]instanceof GHInput))return!!r&&this.add(t,e);this[e].set(t)}return this.fire("route.set",{point:this[e],to:e}),this[e]},move:function(t,e,r){for(;t<0;)t+=this.length;for(;e<0;)e+=this.length;if(e>=this.length)for(var i=e-this.length;i--+1;)Array.prototype.push.call(this,void 0);return Array.prototype.splice.call(this,e,0,Array.prototype.splice.call(this,t,1)[0]),r||this.fire("route.move",{old_index:t,new_index:e}),this},reverse:function(){return Array.prototype.reverse.call(this),this.fire("route.reverse",{}),this},isResolved:function(){for(var t=0,e=this.length;t<e;t++){var r=this[t];if(!r.isResolved())return!1}return!0},addListener:function(t,e){return"undefined"==typeof this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},fire:function(t,e){if("string"==typeof t&&(t={type:t}),"object"==typeof e)for(var r in e)t[r]=e[r];if(t.route||(t.route=this),!t.type)throw new Error("Event object missing 'type' property.");if(this._listeners[t.type]instanceof Array)for(var i=this._listeners[t.type],n=0,o=i.length;n<o;n++)i[n].call(this,t)},removeListener:function(t,e){if(this._listeners[t]instanceof Array)for(var r=this._listeners[t],i=0,n=r.length;i<n;i++)if(r[i]===e){r.splice(i,1);break}}},module.exports=GHroute;
 },{"./GHInput.js":12}],15:[function(require,module,exports){
 var decodePath=function(e,d){for(var o=e.length,r=0,a=[],h=0,t=0,c=0;r<o;){var l,v=0,i=0;do l=e.charCodeAt(r++)-63,i|=(31&l)<<v,v+=5;while(l>=32);var u=1&i?~(i>>1):i>>1;h+=u,v=0,i=0;do l=e.charCodeAt(r++)-63,i|=(31&l)<<v,v+=5;while(l>=32);var n=1&i?~(i>>1):i>>1;if(t+=n,d){v=0,i=0;do l=e.charCodeAt(r++)-63,i|=(31&l)<<v,v+=5;while(l>=32);var s=1&i?~(i>>1):i>>1;c+=s,a.push([1e-5*t,1e-5*h,c/100])}else a.push([1e-5*t,1e-5*h])}return a};module.exports.decodePath=decodePath;
 },{}],16:[function(require,module,exports){
@@ -95,7 +95,7 @@ function insComma(o,t){return o.length>0?o+", "+t:t}function formatLocationEntry
 module.exports.getCenter=function(n){var o={lat:0,lng:0};return n.initialized&&(o.lat=(n.minLat+n.maxLat)/2,o.lng=(n.minLon+n.maxLon)/2),o},module.exports.floor=function(n,o){return o||(o=1e6),Math.floor(n*o)/o},module.exports.round=function(n,o){return void 0===o&&(o=1e6),Math.round(n*o)/o};
 
 },{}],29:[function(require,module,exports){
-function parseUrlWithHisto(){return parseUrl(window.location.hash?window.location.hash:window.location.search)}function parseUrl(r){var e=r.indexOf("?");e>=0&&(r=r.substring(e+1));for(var t={},o=r.split("&"),a=0;a<o.length;a++){var i=o[a].indexOf("=");if(!(i<0)){var n=o[a].substring(0,i),s=o[a].substring(i+1);if(s=decodeURIComponent(s.replace(/\+/g," ")),"undefined"==typeof t[n]&&"heading"!==n&&"point"!==n)"true"===s?s=!0:"false"===s&&(s=!1),t[n]=s;else{var l=t[n];isArray(l)?l.push(s):l?t[n]=[l,s]:t[n]=[s]}}}return t}var isArray=function(r){var e=Object.prototype.toString.call(r);return"[object array]"===e.toLowerCase()};module.exports.parseUrl=parseUrl,module.exports.parseUrlWithHisto=parseUrlWithHisto;
+function parseUrlWithHisto(){return parseUrl(window.location.hash?window.location.hash:window.location.search)}function parseUrl(r){var e=r.indexOf("?");e>=0&&(r=r.substring(e+1));for(var t={},a=r.split("&"),n=0;n<a.length;n++){var o=a[n].indexOf("=");if(!(o<0)){var i=a[n].substring(0,o),s=a[n].substring(o+1);s=decodeURIComponent(s.replace(/\+/g," ")),mergeParamIntoObject(t,i,s)}}return t}function mergeParamIntoObject(r,e,t){var a=e.indexOf(".");if(a<0){if("undefined"==typeof r[e]&&"heading"!==e&&"point"!==e)"true"===t?t=!0:"false"===t&&(t=!1),r[e]=t;else{var n=r[e];isArray(n)?n.push(t):n?r[e]=[n,t]:r[e]=[t]}return r}var o=e.substring(0,a),i=e.substring(a+1),n=r[o];return n||(n={}),r[o]=mergeParamIntoObject(n,i,t),r}var isArray=function(r){var e=Object.prototype.toString.call(r);return"[object array]"===e.toLowerCase()};module.exports.parseUrl=parseUrl,module.exports.mergeParamIntoObject=mergeParamIntoObject,module.exports.parseUrlWithHisto=parseUrlWithHisto;
 
 },{}],30:[function(require,module,exports){
 module.exports.getSortedVehicleKeys=function(e,r){var t=Object.keys(e);return t.sort(function(e,t){var o=r[e],n=r[t];return o||n?(o||(o=4),n||(n=4),o-n):e.localeCompare(t)}),t};
diff --git a/web/src/main/webapp/js/tools/url.js b/web/src/main/webapp/js/tools/url.js
index 80d9c4516..f0a39f312 100644
--- a/web/src/main/webapp/js/tools/url.js
+++ b/web/src/main/webapp/js/tools/url.js
@@ -24,7 +24,17 @@ function parseUrl(query) {
         var key = vars[i].substring(0, indexPos);
         var value = vars[i].substring(indexPos + 1);
         value = decodeURIComponent(value.replace(/\+/g, ' '));
+        mergeParamIntoObject(res, key, value);
+    }
+    return res;
+}
 
+// the key value parameter is merged into the first object 'res'
+// it is suboptimal that we need two long parameters for two array entries:
+// one.two=1&one.two=2 => one: { two : ["1", "2"] }
+function mergeParamIntoObject(res, key, value) {
+    var objectIndex = key.indexOf(".");
+    if(objectIndex < 0) {
         // force array for heading and point
         if (typeof res[key] === "undefined" && key !== "heading" && key !== "point") {
             if (value === 'true')
@@ -43,9 +53,22 @@ function parseUrl(query) {
                 res[key] = [value];
             }
         }
+        // leaf of recursion reached
+        return res;
     }
+
+    var newKey = key.substring(0, objectIndex);
+    var subKey = key.substring(objectIndex + 1);
+
+    var tmpVal = res[newKey];
+    if(!tmpVal)
+        tmpVal = {};
+
+    // recursion
+    res[newKey] = mergeParamIntoObject(tmpVal, subKey, value);
     return res;
 }
 
 module.exports.parseUrl = parseUrl;
+module.exports.mergeParamIntoObject = mergeParamIntoObject;
 module.exports.parseUrlWithHisto = parseUrlWithHisto;


Test patch:
diff --git a/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java
index 2047d3c42..1e3aaefce 100644
--- a/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java
@@ -83,6 +83,13 @@ public class CarFlagEncoderTest {
         assertFalse(encoder.acceptWay(way) > 0);
         assertFalse(encoder.isFerry(encoder.acceptWay(way)));
 
+        way.clearTags();
+        way.setTag("route", "ferry");
+        way.setTag("access", "no");
+        assertFalse(encoder.acceptWay(way) > 0);
+        way.setTag("vehicle", "yes");
+        assertTrue(encoder.acceptWay(way) > 0);
+
         way.clearTags();
         way.setTag("access", "yes");
         way.setTag("motor_vehicle", "no");
diff --git a/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java b/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java
index 150437971..480c8b8d3 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java
@@ -27,6 +27,7 @@ import com.graphhopper.storage.GraphHopperStorage;
 import com.graphhopper.storage.index.LocationIndex;
 import com.graphhopper.util.Helper;
 import com.graphhopper.util.Instruction;
+import com.graphhopper.util.Parameters;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -83,7 +84,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,0,0,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,0,0,0).atZone(zoneId).toInstant());
         GHResponse route = graphHopper.route(ghRequest);
 
         assertFalse(route.hasErrors());
@@ -99,7 +100,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,6,54).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,6,54).atZone(zoneId).toInstant());
         GHResponse route = graphHopper.route(ghRequest);
 
         assertFalse(route.hasErrors());
@@ -115,8 +116,8 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,7,44).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,7,44).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
 
         GHResponse response = graphHopper.route(ghRequest);
 
@@ -134,8 +135,8 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,6, 49).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.ARRIVE_BY, true);
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,6, 49).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.ARRIVE_BY, true);
 
         GHResponse route = graphHopper.route(ghRequest);
 
@@ -153,9 +154,9 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.RANGE_QUERY_END_TIME, LocalDateTime.of(2007,1,1,13,0).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.RANGE_QUERY_END_TIME, LocalDateTime.of(2007,1,1,13,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
 
         GHResponse response = graphHopper.route(ghRequest);
         List<LocalTime> actualDepartureTimes = response.getAll().stream()
@@ -177,11 +178,11 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,2,13,0).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.ARRIVE_BY, "true");
-        ghRequest.getHints().put(GraphHopperGtfs.RANGE_QUERY_END_TIME, LocalDateTime.of(2007,1,2,11,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,2,13,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.ARRIVE_BY, "true");
+        ghRequest.getHints().put(Parameters.PT.RANGE_QUERY_END_TIME, LocalDateTime.of(2007,1,2,11,0).atZone(zoneId).toInstant());
         // TODO: Find the problem with 1.1.2007
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
 
         GHResponse response = graphHopper.route(ghRequest);
         List<LocalTime> actualDepartureTimes = response.getAll().stream()
@@ -223,7 +224,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant());
         GHResponse route = graphHopper.route(ghRequest);
 
         assertFalse(route.hasErrors());
@@ -257,7 +258,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant()); // Monday morning
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant()); // Monday morning
 
 
         GHResponse route = graphHopper.route(ghRequest);
@@ -267,7 +268,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest1.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,6,0,0).atZone(zoneId).toInstant());
+        ghRequest1.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,6,0,0).atZone(zoneId).toInstant());
         GHResponse route1 = graphHopper.route(ghRequest1);
 
         assertFalse(route1.hasErrors());
@@ -286,7 +287,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,8,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,8,0).atZone(zoneId).toInstant());
         GHResponse response = graphHopper.route(ghRequest);
         assertEquals("Only find one solution. If blocks wouldn't work, there would be two. (There is a slower alternative without transfer.)", 1, response.getAll().size());
         assertEquals("Expected travel time == scheduled travel time", time(1,20), response.getBest().getTime());
@@ -305,7 +306,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO1_LAT, TO1_LON
         );
-        request.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
+        request.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
 
         GHResponse response = graphHopper.route(request);
         assertEquals("Ignoring transfer rules (free walking): Will be there at 9.", time(1, 30), response.getBest().getTime());
@@ -314,8 +315,8 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO1_LAT, TO1_LON
         );
-        request.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
-        request.getHints().put(GraphHopperGtfs.MAX_TRANSFER_DISTANCE_PER_LEG, 0.0);
+        request.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
+        request.getHints().put(Parameters.PT.MAX_TRANSFER_DISTANCE_PER_LEG, 0.0);
 
         response = graphHopper.route(request);
         assertEquals("Transfer rule: 11 minutes. Will miss connection, and be there at 14.", time(6, 30), response.getBest().getTime());
@@ -324,7 +325,7 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO2_LAT, TO2_LON
         );
-        request.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
+        request.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
 
         response = graphHopper.route(request);
         assertEquals("Ignoring transfer rules (free walking): Will be there at 8:10.", time(0, 40), response.getBest().getTime());
@@ -333,8 +334,8 @@ public class GraphHopperGtfsIT {
                 FROM_LAT, FROM_LON,
                 TO2_LAT, TO2_LON
         );
-        request.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
-        request.getHints().put(GraphHopperGtfs.MAX_TRANSFER_DISTANCE_PER_LEG, 0.0);
+        request.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,6,7,30).atZone(zoneId).toInstant());
+        request.getHints().put(Parameters.PT.MAX_TRANSFER_DISTANCE_PER_LEG, 0.0);
 
         response = graphHopper.route(request);
         assertEquals("Will still be there at 8:10 because there is a route-specific exception for this route.", time(0, 40), response.getBest().getTime());
@@ -343,8 +344,8 @@ public class GraphHopperGtfsIT {
                 TO2_LAT, TO2_LON,
                 FROM_LAT, FROM_LON
         );
-        request.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,6,12,5).atZone(zoneId).toInstant());
-        request.getHints().put(GraphHopperGtfs.MAX_TRANSFER_DISTANCE_PER_LEG, 0.0);
+        request.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,6,12,5).atZone(zoneId).toInstant());
+        request.getHints().put(Parameters.PT.MAX_TRANSFER_DISTANCE_PER_LEG, 0.0);
 
         response = graphHopper.route(request);
         assertEquals("Will take 1:15 because of a 'from route' exception with a longer transfer time.", time(1, 15), response.getBest().getTime());
@@ -356,7 +357,8 @@ public class GraphHopperGtfsIT {
                 from_lat, from_lon,
                 to_lat, to_lon
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, earliestDepartureTime);
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, earliestDepartureTime);
+        ghRequest.getHints().put(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 30);
         GHResponse route = graphHopper.route(ghRequest);
 
         assertFalse(route.hasErrors());
@@ -373,7 +375,8 @@ public class GraphHopperGtfsIT {
                 from_lat, from_lon,
                 to_lat, to_lon
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,0,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 30);
 
         GHResponse route = graphHopper.route(ghRequest);
         Assert.assertTrue(route.getAll().isEmpty());
diff --git a/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java b/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java
index 3f865e1cf..4982eb31c 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java
@@ -27,6 +27,7 @@ import com.graphhopper.storage.GHDirectory;
 import com.graphhopper.storage.GraphHopperStorage;
 import com.graphhopper.storage.index.LocationIndex;
 import com.graphhopper.util.Helper;
+import com.graphhopper.util.Parameters;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -78,9 +79,9 @@ public class RealtimeIT {
         );
 
         // I want to go at 6:44
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,6,44).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
-        ghRequest.getHints().put(GraphHopperGtfs.MAX_WALK_DISTANCE_PER_LEG, 30);
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,6,44).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 30);
 
         // But the 6:00 departure of my line is going to skip my departure stop :-(
         final GtfsRealtime.FeedMessage.Builder feedMessageBuilder = GtfsRealtime.FeedMessage.newBuilder();
@@ -109,9 +110,9 @@ public class RealtimeIT {
         );
 
         // I want to go at 6:44
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,6,44).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
-        ghRequest.getHints().put(GraphHopperGtfs.MAX_WALK_DISTANCE_PER_LEG, 30);
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,6,44).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 30);
 
         // But the 6:00 departure of my line is going to skip my arrival stop :-(
         final GtfsRealtime.FeedMessage.Builder feedMessageBuilder = GtfsRealtime.FeedMessage.newBuilder();
@@ -140,9 +141,9 @@ public class RealtimeIT {
         );
 
         // I want to go at 6:44
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,6,44).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
-        ghRequest.getHints().put(GraphHopperGtfs.MAX_WALK_DISTANCE_PER_LEG, 30);
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,6,44).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 30);
 
         // But the 6:00 departure of my line is going to skip my transfer stop :-(
         final GtfsRealtime.FeedMessage.Builder feedMessageBuilder = GtfsRealtime.FeedMessage.newBuilder();
@@ -169,9 +170,9 @@ public class RealtimeIT {
                 FROM_LAT, FROM_LON,
                 TO_LAT, TO_LON
         );
-        ghRequest.getHints().put(GraphHopperGtfs.EARLIEST_DEPARTURE_TIME_HINT, LocalDateTime.of(2007,1,1,8,0).atZone(zoneId).toInstant());
-        ghRequest.getHints().put(GraphHopperGtfs.IGNORE_TRANSFERS, "true");
-        ghRequest.getHints().put(GraphHopperGtfs.MAX_WALK_DISTANCE_PER_LEG, 30);
+        ghRequest.getHints().put(Parameters.PT.EARLIEST_DEPARTURE_TIME, LocalDateTime.of(2007,1,1,8,0).atZone(zoneId).toInstant());
+        ghRequest.getHints().put(Parameters.PT.IGNORE_TRANSFERS, "true");
+        ghRequest.getHints().put(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 30);
 
         // My line does not stop at Bullfrog today. If this was a real transfer, I would not be
         // able to change lines there. But it is not a real transfer, so I can go on as planned.
diff --git a/web/src/test/webapp/spec/graphhopper/GHRequestSpec.js b/web/src/test/webapp/spec/graphhopper/GHRequestSpec.js
index e9ab1b985..31daaab46 100644
--- a/web/src/test/webapp/spec/graphhopper/GHRequestSpec.js
+++ b/web/src/test/webapp/spec/graphhopper/GHRequestSpec.js
@@ -55,5 +55,25 @@ describe("GHRequest", function () {
         expect(ghRequest.api_params.test).toEqual("x");
         expect(ghRequest.api_params.test_array).toEqual([1, 2]);
     });
+
+    it("create URL from object 'dot' notation should work", function () {
+        var ghRequest = new GHRequest("http://test.de?");
+        var params = { pt: { earliest_departure_time : 123}};
+        ghRequest.init(params);
+        expect(ghRequest.api_params.pt).toBeDefined();
+        expect(ghRequest.api_params.pt.earliest_departure_time).toEqual(123);
+    });
+
+    it("createPath should work", function () {
+        var ghRequest = new GHRequest("http://test.de?");
+        ghRequest.init({ pt: { earliest_departure_time : 123 }, key: ""});
+        expect("&locale=en&vehicle=car&weighting=fastest&elevation=false&key=&pt.earliest_departure_time=123").
+            toEqual(ghRequest.createPath(""));
+
+        ghRequest = new GHRequest("http://test.de?");
+        ghRequest.api_params.test = {ab: { xy: "12", z: "3"}};
+        expect("&locale=en&vehicle=car&weighting=fastest&elevation=false&key=undefined&test.ab.xy=12&test.ab.z=3").
+            toEqual(ghRequest.createPath(""));
+    });
 });
 
diff --git a/web/src/test/webapp/spec/tools/urlSpec.js b/web/src/test/webapp/spec/tools/urlSpec.js
index 2d613ce82..d54013302 100644
--- a/web/src/test/webapp/spec/tools/urlSpec.js
+++ b/web/src/test/webapp/spec/tools/urlSpec.js
@@ -17,4 +17,25 @@ describe('urlTools', function () {
         params = urlTools.parseUrl("blup?point=&point=49.946505%2C11.571232");
         expect(params.point).toEqual(["", "49.946505,11.571232"]);
     });
+
+    it("should create object from dotted URL parameter", function () {
+        var someObject = urlTools.mergeParamIntoObject({}, "one.two", "12");
+        expect("12").toEqual(someObject.one.two);
+
+        someObject = urlTools.mergeParamIntoObject({"one": {"xy": "34"}}, "one.two", "12");
+        expect("12").toEqual(someObject.one.two);
+        expect("34").toEqual(someObject.one.xy);
+
+        someObject = urlTools.mergeParamIntoObject({}, "one.two.three", "123");
+        expect("123").toEqual(someObject.one.two.three);
+
+        var params = urlTools.parseUrl("localhost:8989?pt.test=now&pt.go.test=single&pt.go.further=far&pt.go.further=now");
+        expect("now").toEqual(params.pt.test);
+        expect("single").toEqual(params.pt.go.test);
+        expect(["far", "now"]).toEqual(params.pt.go.further);
+
+        // does not work at the moment: the second parameter is skipped
+        // params = urlTools.parseUrl("localhost:8989?pt.mix=now&pt.mix.test=now2");
+        // expect(["now", {"test" : "now2"}]).toEqual(params.pt.mix);
+    });
 });