[geos-commits] [SCM] GEOS branch main updated. ae1f72600b5939169d57c1ae76cd9dec7fba847e

git at osgeo.org git at osgeo.org
Fri Jul 4 12:13:36 PDT 2025


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GEOS".

The branch, main has been updated
       via  ae1f72600b5939169d57c1ae76cd9dec7fba847e (commit)
      from  3e5548c497271eda29d5e992b0f22da8702c7b4d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ae1f72600b5939169d57c1ae76cd9dec7fba847e
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Fri Jul 4 12:13:15 2025 -0700

    Port DiscreteFrechetDistance from JTS (#1274)
    
    Updates the DiscreteFrechetDistance along the lines of the [JTS improvement](https://github.com/locationtech/jts/pull/764). Removes stack overflow failure identified in #516, by removing the recursion. Replacement algorithm slows down with large objects, but no longer crashes. Interrupt points added hopefully in enough places to guard against overly large objects.

diff --git a/NEWS.md b/NEWS.md
index 0fb4f8e34..8232eaf6f 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -27,6 +27,7 @@
   - Fix OverlayNG coordinate dimension handling for EMPTY geometries (GH-1258, Martin Davis)
   - Fix DepthSegment comparison logic (really this time) (GH-1266, Martin Davis)
   - Change CoverageGapFinder to return polygons (Martin Davis)
+  - Update DiscreteFrechetDistance to new algorithm (GH-1274, Paul Ramsey)
 
 ## Changes in 3.13.0
 2024-09-06
diff --git a/include/geos/algorithm/distance/DiscreteFrechetDistance.h b/include/geos/algorithm/distance/DiscreteFrechetDistance.h
index da72b382c..a82952afb 100644
--- a/include/geos/algorithm/distance/DiscreteFrechetDistance.h
+++ b/include/geos/algorithm/distance/DiscreteFrechetDistance.h
@@ -3,173 +3,531 @@
  * GEOS - Geometry Engine Open Source
  * http://geos.osgeo.org
  *
- * Copyright (C) 2016 Shinichi SUGIYAMA (shin.sugi at gmail.com)
+ * Copyright (c) 2021 Felix Obermaier
+ * Copyright (c) 2025 Paul Ramsey
  *
  * This is free software; you can redistribute and/or modify it under
  * the terms of the GNU Lesser General Public Licence as published
  * by the Free Software Foundation.
  * See the COPYING file for more information.
  *
- **********************************************************************
- *
- * Last port: original work
- *
- * Developed by Shinichi SUGIYAMA (shin.sugi at gmail.com)
- * based on http://www.kr.tuwien.ac.at/staff/eiter/et-archive/cdtr9464.pdf
- *
  **********************************************************************/
 
 #pragma once
 
 #include <geos/export.h>
-#include <geos/algorithm/distance/PointPairDistance.h> // for composition
-#include <geos/algorithm/distance/DistanceToPoint.h> // for composition
-#include <geos/util/IllegalArgumentException.h> // for inlines
-#include <geos/geom/Geometry.h> // for inlines
-#include <geos/util/math.h> // for inlines
-#include <geos/geom/CoordinateFilter.h> // for inheritance
-#include <geos/geom/CoordinateSequence.h> // for inheritance
+#include <geos/algorithm/distance/PointPairDistance.h>
+#include <geos/geom/CoordinateSequenceFilter.h>
+#include <geos/util/math.h>
 
-#include <cstddef>
+#include <cstdint>
+#include <unordered_map>
+#include <array>
 #include <vector>
+#include <memory>
 
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
-#endif
-
+// Forward declarations
 namespace geos {
-namespace algorithm {
-//class RayCrossingCounter;
-}
 namespace geom {
 class Geometry;
 class Coordinate;
-//class CoordinateSequence;
-}
-namespace index {
-namespace intervalrtree {
-//class SortedPackedIntervalRTree;
-}
+class CoordinateSequence;
 }
 }
 
 namespace geos {
 namespace algorithm { // geos::algorithm
-namespace distance { // geos::algorithm::distance
+namespace distance {  // geos::algorithm::distance
 
 /** \brief
- * An algorithm for computing a distance metric
- * which is an approximation to the Frechet Distance
- * based on a discretization of the input {@link geom::Geometry}.
+ * The Fréchet distance is a measure of similarity between curves. Thus, it can
+ * be used like the Hausdorff distance.
  *
- * The algorithm computes the Frechet distance restricted to discrete points
- * for one of the geometries.
- * The points can be either the vertices of the geometries (the default),
- * or the geometries with line segments densified by a given fraction.
- * Also determines two points of the Geometries which are separated by the
- * computed distance.
+ * An analogy for the Fréchet distance taken from
+ * <a href="http://www.kr.tuwien.ac.at/staff/eiter/et-archive/cdtr9464.pdf">
+ *   Computing Discrete Fréchet Distance</a>
  *
- * This algorithm is an approximation to the standard Frechet distance.
- * Specifically,
- * <pre>
- *    for all geometries a, b:    DFD(a, b) >= FD(a, b)
- * </pre>
- * The approximation can be made as close as needed by densifying the
- * input geometries.
- * In the limit, this value will approach the true Frechet distance:
- * <pre>
- *    DFD(A, B, densifyFactor) -> FD(A, B) as densifyFactor -> 0.0
- * </pre>
- * The default approximation is exact or close enough for a large subset of
- * useful cases.
+ * <blockquote>A man is walking a dog on a leash: the man can move
+ * on one curve, the dog on the other; both may vary their
+ * speed, but backtracking is not allowed. </blockquote>
  *
- * The difference between DFD and FD is bounded
- * by the length of the longest edge of the polygonal curves.
+ * Its metric is better than the Hausdorff distance
+ * because it takes the directions of the curves into account.
+ * It is possible that two curves have a small Hausdorff but a large
+ * Fréchet distance.
  *
- * Fréchet distance sweep continuously along their respective curves
- * and the direction of curves is significant.
- * This makes a better measure of similarity than Hausdorff distance.
+ * This implementation is base on the following optimized Fréchet distance algorithm:
+ * Thomas Devogele, Maxence Esnault, Laurent Etienne. Distance discrète de Fréchet optimisée. Spatial
+ * Analysis and Geomatics (SAGEO), Nov 2016, Nice, France. hal-02110055
  *
- * An example showing how different DHD and DFD are:
- * <pre>
- *   A  = LINESTRING (0 0, 50 200, 100 0, 150 200, 200 0)
- *   B  = LINESTRING (0 200, 200 150, 0 100, 200 50, 0 0)
- *   B' = LINESTRING (0 0, 200 50, 0 100, 200 150, 0 200)
+ * Several matrix storage implementations are provided
  *
- *   DHD(A, B)  = DHD(A, B') = 48.5071250072666
- *   DFD(A, B)  = 200
- *   DFD(A, B') = 282.842712474619
- * </pre>
+ *   * <a href="https://en.wikipedia.org/wiki/Fr%C3%A9chet_distance">Fréchet distance</a>
+ *   * <a href="http://www.kr.tuwien.ac.at/staff/eiter/et-archive/cdtr9464.pdf">
+ *     Computing Discrete Fréchet Distance</a>
+ *   * <a href="https://hal.archives-ouvertes.fr/hal-02110055/document">Distance discrète de Fréchet optimisée</a>
+ *   * <a href="https://towardsdatascience.com/fast-discrete-fr%C3%A9chet-distance-d6b422a8fb77">
+ *     Fast Discrete Fréchet Distance</a>
+ *
+ * @see DiscreteHausdorffDistance
  */
 class GEOS_DLL DiscreteFrechetDistance {
+
+    using DistanceToPairMap = std::unordered_map<double, std::array<std::size_t, 2>>;
+
 public:
 
-    static double distance(const geom::Geometry& g0,
-                           const geom::Geometry& g1);
+    /**
+     * Creates an instance of this class using the provided geometries.
+     *
+     * @param geom0 a geometry
+     * @param geom1 a geometry
+     */
+    DiscreteFrechetDistance(const geom::Geometry& geom0, const geom::Geometry& geom1)
+        : g0(geom0)
+        , g1(geom1) {};
 
-    static double distance(const geom::Geometry& g0,
-                           const geom::Geometry& g1, double densifyFrac);
-
-    DiscreteFrechetDistance(const geom::Geometry& p_g0,
-                            const geom::Geometry& p_g1)
-        :
-        g0(p_g0),
-        g1(p_g1),
-        ptDist(),
-        densifyFrac(0.0)
-    {}
 
     /**
-     * Sets the fraction by which to densify each segment.
-     * Each segment will be (virtually) split into a number of equal-length
-     * subsegments, whose fraction of the total length is closest
-     * to the given fraction.
-     *
-     * @param dFrac
+    * Abstract base class for storing 2d matrix data
+    */
+    class GEOS_DLL MatrixStorage {
+
+        public:
+
+            std::size_t m_numRows;
+            std::size_t m_numCols;
+            double m_defaultValue;
+
+            /**
+             * Creates an instance of this class
+             * @param numRows the number of rows
+             * @param numCols the number of columns
+             * @param defaultValue A default value
+             */
+            MatrixStorage(std::size_t numRows, std::size_t numCols, double defaultValue)
+                : m_numRows(numRows)
+                , m_numCols(numCols)
+                , m_defaultValue(defaultValue) {};
+
+            virtual ~MatrixStorage() = 0;
+
+            /**
+             * Gets the matrix value at i, j
+             * @param i the row index
+             * @param j the column index
+             * @return The matrix value at i, j
+             */
+            virtual double get(std::size_t i, std::size_t j) const = 0;
+
+            /**
+             * Sets the matrix value at i, j
+             * @param i the row index
+             * @param j the column index
+             * @param value The matrix value to set at i, j
+             */
+            virtual void set(std::size_t i, std::size_t j, double value) = 0;
+
+            /**
+             * Gets a flag indicating if the matrix has a set value, e.g. one that is different
+             * than MatrixStorage defaultValue.
+             * @param i the row index
+             * @param j the column index
+             * @return a flag indicating if the matrix has a set value
+             */
+            virtual bool isValueSet(std::size_t i, std::size_t j) const = 0;
+    };
+
+
+    /**
+     * Straight forward implementation of a rectangular matrix
      */
+    class RectMatrix : public MatrixStorage {
+
+        private:
+            std::vector<double> m_matrix;
+
+        public:
+
+            /**
+             * Creates an instance of this matrix using the given number of rows and columns.
+             * A default value can be specified
+             *
+             * @param numRows the number of rows
+             * @param numCols the number of columns
+             * @param defaultValue A default value
+             */
+            RectMatrix(std::size_t numRows, std::size_t numCols, double defaultValue)
+                : MatrixStorage(numRows, numCols, defaultValue)
+            {
+                m_matrix.resize(numRows * numCols, defaultValue);
+            };
+
+            double get(std::size_t i, std::size_t j) const override {
+                return m_matrix[i * m_numCols + j];
+            };
+
+            void set(std::size_t i, std::size_t j, double value) override {
+                m_matrix[i * m_numCols + j] = value;
+            };
+
+            bool isValueSet(std::size_t i, std::size_t j) const override {
+                return get(i, j) != m_defaultValue;
+            };
+    };
+
+
+    /**
+     * A matrix implementation that adheres to the
+     * <a href="https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_(CSR,_CRS_or_Yale_format)">
+     *   Compressed sparse row format</a>.
+     * Note: Unfortunately not as fast as hoped.
+     */
+    class CsrMatrix : public MatrixStorage {
+
+        private:
+            std::vector<double> m_v;
+            std::vector<std::size_t> m_ri;
+            std::vector<std::size_t> m_ci;
+
+        public:
+
+            CsrMatrix(std::size_t numRows, std::size_t numCols, double defaultValue, std::size_t expectedValues)
+                : MatrixStorage(numRows, numCols, defaultValue)
+            {
+                m_v.resize(expectedValues);
+                m_ci.resize(expectedValues);
+                m_ri.resize(numRows + 1);
+            };
+
+            CsrMatrix(std::size_t numRows, std::size_t numCols, double defaultValue)
+                : CsrMatrix(numRows, numCols, defaultValue, expectedValuesHeuristic(numRows, numCols))
+                {};
+
+            /**
+             * Computes an initial value for the number of expected values
+             * @param numRows the number of rows
+             * @param numCols the number of columns
+             * @return the expected number of values in the sparse matrix
+             */
+            static std::size_t expectedValuesHeuristic(std::size_t numRows, std::size_t numCols) {
+                std::size_t max = std::max(numRows, numCols);
+                return max * max / 10;
+            };
+
+            /**
+             * A work-alike for Java Arrays.binarySearch(), used
+             * for searching ordered arrays. This variant searches
+             * for the key value within a bounded subset of the array.
+             * @param vec the vector to search
+             * @param fromIndex the lower bound index for the search
+             * @param toIndex the upper bound index for the search
+             * @param key the value to hunt for
+             * @return a pair with the first item being true if the key
+             *         was found and false otherwise, and the second being the
+             *         index of the key found, or the insertion point of the
+             *         key if not found
+             */
+            std::pair<bool, std::size_t>
+            cppBinarySearch(const std::vector<std::size_t>& vec, std::size_t fromIndex, std::size_t toIndex, std::size_t key) const {
+                // Return not found on invalid input
+                if (fromIndex > toIndex || toIndex > vec.size())
+                    return {false, 0};
+
+                // Define the iterators for the sub-range
+                auto first_it = vec.begin() + static_cast<std::ptrdiff_t>(fromIndex);
+                auto last_it = vec.begin() + static_cast<std::ptrdiff_t>(toIndex);
+
+                // Perform the binary search using std::lower_bound
+                auto it = std::lower_bound(first_it, last_it, key);
+
+                // Calculate the index relative to the *beginning of the original vector*
+                auto result_index = std::distance(vec.begin(), it);
+
+                // Determine if the element was found and return the appropriate value
+                if (it != last_it && *it == key) {
+                    // Element found, return its index
+                    return {true, result_index};
+                } else {
+                    // Element not found, return the insertion point
+                    return {false, result_index};
+                }
+            };
+
+            std::pair<bool, std::size_t> indexOf(std::size_t i, std::size_t j) const {
+                std::size_t cLow = m_ri[i];
+                std::size_t cHigh = m_ri[i+1];
+                if (cHigh <= cLow) return {false, cLow};
+                return cppBinarySearch(m_ci, cLow, cHigh, j);
+            };
+
+            double get(std::size_t i, std::size_t j) const override {
+                // get the index in the vector
+                std::pair<bool, std::size_t> vi = indexOf(i, j);
+                // if the vector index is negative, return default value
+                if (!vi.first)
+                    return m_defaultValue;
+
+                return m_v[vi.second];
+            };
+
+            void set(std::size_t i, std::size_t j, double value) override {
+
+                // get the index in the vector
+                std::pair<bool, std::size_t> vi = indexOf(i, j);
+
+                // do we already have a value?
+                if (!vi.first)
+                {
+                    // no, we don't, we need to ensure space!
+                    ensureCapacity(m_ri[m_numRows] + 1);
+
+                    // update row indices
+                    for (std::size_t ii = i + 1; ii <= m_numRows; ii++)
+                        m_ri[ii] += 1;
+
+                    // move and update column indices, move values
+                    std::size_t viv = vi.second;
+                    for (std::size_t ii = m_ri[m_numRows]; ii > viv; ii--) {
+                        m_ci[ii] = m_ci[ii - 1];
+                        m_v[ii] = m_v[ii - 1];
+                    }
+
+                    // insert column index
+                    m_ci[viv] = j;
+                }
+
+                // set the new value
+                m_v[vi.second] = value;
+            };
+
+            bool isValueSet(std::size_t i, std::size_t j) const override {
+                auto r = indexOf(i, j);
+                return r.first;
+            };
+
+            /**
+             * Ensures that the column index vector (m_ci) and value vector (m_v) are sufficiently large.
+             * @param required the number of items to store in the matrix
+             */
+            void ensureCapacity(std::size_t required) {
+                if (required < m_v.size())
+                    return;
+
+                std::size_t increment = std::max(m_numRows, m_numCols);
+                m_v.resize(m_v.size() + increment);
+                m_ci.resize(m_v.size() + increment);
+            };
+    };
+
+
+    /**
+     * A sparse matrix based on java's HashMap.
+     */
+    class HashMapMatrix : public MatrixStorage {
+
+        private:
+            std::unordered_map<std::size_t, double> m_matrix;
+
+        public:
+
+        /**
+         * Creates an instance of this class
+         * @param numRows the number of rows
+         * @param numCols the number of columns
+         * @param defaultValue a default value
+         */
+        HashMapMatrix(std::size_t numRows, std::size_t numCols, double defaultValue)
+            : MatrixStorage(numRows, numCols, defaultValue)
+            {};
+
+        double get(std::size_t i, std::size_t j) const override {
+            std::size_t key = i << 32 | j;
+            auto it_found = m_matrix.find(key);
+            if (it_found != m_matrix.end()) {
+                return (*it_found).second;
+            }
+            else {
+                return m_defaultValue;
+            }
+        };
+
+        void set(std::size_t i, std::size_t j, double value) override {
+            std::size_t key = i << 32 | j;
+            m_matrix[key] = value;
+        };
+
+        bool isValueSet(std::size_t i, std::size_t j) const override {
+            std::size_t key = i << 32 | j;
+            auto it_found = m_matrix.find(key);
+            return it_found != m_matrix.end();
+        };
+    };
+
+
+    /**
+     * Computes the Discrete Fréchet Distance between two Geometrys
+     * using a Cartesian distance computation function.
+     *
+     * @param geom0 the 1st geometry
+     * @param geom1 the 2nd geometry
+     * @return the cartesian distance between geom0 and geom1
+     */
+    static double distance(const geom::Geometry& geom0, const geom::Geometry& geom1);
+
+    /**
+     * Computes the Discrete Fréchet Distance between two Geometrys
+     * using a Cartesian distance computation function.
+     *
+     * @param geom0 the 1st geometry
+     * @param geom1 the 2nd geometry
+     * @param densityFrac the fraction of edge length to target
+     * when densifying edges
+     * @return the cartesian distance between geom0 and geom1
+     */
+    static double distance(const geom::Geometry& geom0, const geom::Geometry& geom1, double densityFrac);
+
+    /**
+     * Gets the pair of {@link geom::Coordinate}s at which the distance is obtained.
+     *
+     * @return the pair of Coordinates at which the distance is obtained
+     */
+    std::array<geom::CoordinateXY, 2> getCoordinates();
+
     void setDensifyFraction(double dFrac);
 
-    double
-    distance()
-    {
-        compute(g0, g1);
-        return ptDist.getDistance();
-    }
-
-    const std::array<geom::CoordinateXY, 2>
-    getCoordinates() const
-    {
-        return ptDist.getCoordinates();
-    }
 
 private:
-    geom::Coordinate getSegmentAt(const geom::CoordinateSequence& seq, std::size_t index);
-
-    PointPairDistance& getFrechetDistance(std::vector< std::vector<PointPairDistance> >& ca, std::size_t i, std::size_t j,
-                                         const geom::CoordinateSequence& p, const geom::CoordinateSequence& q);
-
-    void compute(const geom::Geometry& discreteGeom, const geom::Geometry& geom);
 
+    // Members
     const geom::Geometry& g0;
-
     const geom::Geometry& g1;
+    std::unique_ptr<PointPairDistance> ptDist;
+    double densifyFraction = -1.0;
 
-    PointPairDistance ptDist;
+    /**
+     * Computes the {@code Discrete Fréchet Distance} between the input geometries
+     *
+     * @return the Discrete Fréchet Distance
+     */
+    /* private */
+    double distance();
 
-    /// Value of 0.0 indicates that no densification should take place
-    double densifyFrac; // = 0.0;
+    /*
+     * Utility method to ape Java behaviour
+     */
+    void putIfAbsent(
+        DistanceToPairMap& distanceToPair,
+        double key, std::array<std::size_t, 2> val);
 
-    // Declare type as noncopyable
-    DiscreteFrechetDistance(const DiscreteFrechetDistance& other) = delete;
-    DiscreteFrechetDistance& operator=(const DiscreteFrechetDistance& rhs) = delete;
-};
+    /**
+     * Creates a matrix to store the computed distances.
+     *
+     * @param rows the number of rows
+     * @param cols the number of columns
+     * @return a matrix storage
+     */
+    static std::unique_ptr<MatrixStorage> createMatrixStorage(
+        std::size_t rows, std::size_t cols);
+
+    /**
+     * Computes the Fréchet Distance for the given distance matrix.
+     *
+     * @param coords0 an array of {@code Coordinate}s.
+     * @param coords1 an array of {@code Coordinate}s.
+     * @param diagonal an array of alternating col/row index values for the diagonal of the distance matrix
+     * @param distances the distance matrix
+     * @param distanceToPair a lookup for coordinate pairs based on a distance
+     *
+     */
+    static std::unique_ptr<PointPairDistance> computeFrechet(
+        const geom::CoordinateSequence& coords0,
+        const geom::CoordinateSequence& coords1,
+        std::vector<std::size_t>& diagonal,
+        MatrixStorage& distances,
+        DistanceToPairMap& distanceToPair);
+
+    /**
+     * Returns the minimum distance at the corner ({@code i, j}).
+     *
+     * @param matrix A sparse matrix
+     * @param i the column index
+     * @param j the row index
+     * @return the minimum distance
+     */
+    /* private */
+    static double getMinDistanceAtCorner(
+        MatrixStorage& matrix, std::size_t i, std::size_t j);
+
+    /**
+     * Computes relevant distances between pairs of {@link Coordinate}s for the
+     * computation of the {@code Discrete Fréchet Distance}.
+     *
+     * @param coords0 an array of {@code Coordinate}s.
+     * @param coords1 an array of {@code Coordinate}s.
+     * @param diagonal an array of alternating col/row index values for the diagonal of the distance matrix
+     * @param distances the distance matrix
+     * @param distanceToPair a lookup for coordinate pairs based on a distance
+     */
+    void computeCoordinateDistances(
+        const geom::CoordinateSequence& coords0, const geom::CoordinateSequence& coords1,
+        std::vector<std::size_t>& diagonal,
+        MatrixStorage& distances, DistanceToPairMap& distanceToPair);
+
+    /**
+     * Computes the indices for the diagonal of a {@code numCols x numRows} grid
+     * using the <a href=https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm>
+     * Bresenham line algorithm</a>.
+     *
+     * @param numCols the number of columns
+     * @param numRows the number of rows
+     * @return a packed array of column and row indices
+     */
+    static std::vector<std::size_t> bresenhamDiagonal(
+        std::size_t numCols, std::size_t numRows);
+
+    /**
+     * @param geom the geometry to densify
+     * @param densifyFrac the amount to split up edges
+     * @return a coordinate sequence of every vertex and all introduced
+     * densified vertices for the geometry
+     */
+    static std::unique_ptr<geom::CoordinateSequence> getDensifiedCoordinates(
+        const geom::Geometry& geom, double densifyFrac);
+
+
+    class DensifiedCoordinatesFilter : public geom::CoordinateSequenceFilter {
+
+        public:
+
+            DensifiedCoordinatesFilter(double fraction, geom::CoordinateSequence& coords)
+                : m_numSubSegs(static_cast<uint32_t>(util::round(1.0 / fraction)))
+                , m_coords(coords)
+            {};
+
+            void filter_ro(
+                const geom::CoordinateSequence& seq,
+                std::size_t index) override;
+
+            bool isGeometryChanged() const override {
+                return false;
+            }
+
+            bool isDone() const override {
+                return false;
+            }
+
+        private:
+
+            uint32_t m_numSubSegs;
+            geom::CoordinateSequence& m_coords;
+
+    };
+
+
+
+}; // DiscreteFrechetDistance
 
 } // geos::algorithm::distance
 } // geos::algorithm
 } // geos
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
diff --git a/include/geos/algorithm/distance/PointPairDistance.h b/include/geos/algorithm/distance/PointPairDistance.h
index 7589abbef..35aa135d0 100644
--- a/include/geos/algorithm/distance/PointPairDistance.h
+++ b/include/geos/algorithm/distance/PointPairDistance.h
@@ -120,13 +120,11 @@ public:
         return isNull;
     }
 
-private:
-
     /**
      * Initializes the points, avoiding recomputing the distance.
      * @param p0
      * @param p1
-     * @param dist the distance between p0 and p1
+     * @param distSquared the squared distance between p0 and p1
      */
     void
     initialize(const geom::CoordinateXY& p0, const geom::CoordinateXY& p1,
@@ -138,14 +136,14 @@ private:
         isNull = false;
     }
 
+private:
+
     std::array<geom::CoordinateXY, 2> pt;
-
     double distanceSquared;
-
     bool isNull;
+
 };
 
 } // geos::algorithm::distance
 } // geos::algorithm
 } // geos
-
diff --git a/src/algorithm/distance/DiscreteFrechetDistance.cpp b/src/algorithm/distance/DiscreteFrechetDistance.cpp
index 99a650f19..4fa6d0f50 100644
--- a/src/algorithm/distance/DiscreteFrechetDistance.cpp
+++ b/src/algorithm/distance/DiscreteFrechetDistance.cpp
@@ -3,171 +3,369 @@
  * GEOS - Geometry Engine Open Source
  * http://geos.osgeo.org
  *
- * Copyright (C) 2016  Shinichi SUGIYAMA <shin.sugi at gmail.com>
+ * Copyright (c) 2021 Felix Obermaier
+ * Copyright (c) 2025 Paul Ramsey
  *
  * This is free software; you can redistribute and/or modify it under
  * the terms of the GNU Lesser General Public Licence as published
  * by the Free Software Foundation.
  * See the COPYING file for more information.
  *
- **********************************************************************
- *
- * Last port: original work
- *
  **********************************************************************/
 
 #include <geos/algorithm/distance/DiscreteFrechetDistance.h>
+#include <geos/geom/Coordinate.h>
 #include <geos/geom/CoordinateSequence.h>
-
 #include <geos/geom/Geometry.h>
-#include <geos/geom/LineString.h>
+#include <geos/util/IllegalStateException.h>
+#include <geos/util/IllegalArgumentException.h>
+#include <geos/util.h>
+#include <geos/util/math.h>
+#include <geos/util/Interrupt.h>
 
-#include <typeinfo>
-#include <cassert>
-#include <vector>
-#include <algorithm>
-#include <limits>
-#include <iostream>
+#include <unordered_map>
 
-#include "geos/util.h"
-using namespace geos::geom;
+using geos::geom::Geometry;
+using geos::geom::CoordinateSequence;
+using geos::geom::CoordinateXY;
 
 namespace geos {
 namespace algorithm { // geos.algorithm
-namespace distance { // geos.algorithm.distance
+namespace distance {  // geos.algorithm.distance
 
-/* static public */
+
+/* public static */
 double
-DiscreteFrechetDistance::distance(const geom::Geometry& g0,
-                                  const geom::Geometry& g1)
+DiscreteFrechetDistance::distance(const Geometry& geom0, const Geometry& geom1)
 {
-    DiscreteFrechetDistance dist(g0, g1);
+    DiscreteFrechetDistance dist(geom0, geom1);
     return dist.distance();
 }
 
-/* static public */
+
+/* public static */
 double
-DiscreteFrechetDistance::distance(const geom::Geometry& g0,
-                                  const geom::Geometry& g1,
-                                  double densifyFrac)
+DiscreteFrechetDistance::distance(const Geometry& geom0, const Geometry& geom1, double densityFrac)
 {
-    DiscreteFrechetDistance dist(g0, g1);
-    dist.setDensifyFraction(densifyFrac);
+    DiscreteFrechetDistance dist(geom0, geom1);
+    dist.setDensifyFraction(densityFrac);
     return dist.distance();
 }
 
+
+/* private */
+double
+DiscreteFrechetDistance::distance()
+{
+    if (g0.isEmpty() || g1.isEmpty()) {
+        throw util::IllegalArgumentException(
+            "DiscreteFrechetDistance called with empty inputs.");
+    }
+
+    util::ensureNoCurvedComponents(g0);
+    util::ensureNoCurvedComponents(g1);
+
+    std::unique_ptr<CoordinateSequence> coords0;
+    std::unique_ptr<CoordinateSequence> coords1;
+    if (densifyFraction < 0) {
+        coords0 = g0.getCoordinates();
+        coords1 = g1.getCoordinates();
+    }
+    else {
+        coords0 = getDensifiedCoordinates(g0, densifyFraction);
+        coords1 = getDensifiedCoordinates(g1, densifyFraction);
+    }
+
+    std::unique_ptr<MatrixStorage> distances = createMatrixStorage(coords0->size(), coords1->size());
+    std::vector<std::size_t> diagonal = bresenhamDiagonal(coords0->size(), coords1->size());
+    DistanceToPairMap distanceToPair;
+    computeCoordinateDistances(*coords0, *coords1, diagonal, *distances, distanceToPair);
+    ptDist = computeFrechet(*coords0, *coords1, diagonal, *distances, distanceToPair);
+
+    return ptDist->getDistance();
+}
+
 /* public */
-void DiscreteFrechetDistance::setDensifyFraction(double dFrac)
+void
+DiscreteFrechetDistance::setDensifyFraction(double dFrac)
 {
-    // !(dFrac > 0) written that way to catch NaN
-    // and test on 1.0/dFrac to avoid a potential later undefined behaviour
-    // when casting to std::size_t
-    if(dFrac > 1.0 || !(dFrac > 0.0) ||
-       util::round(1.0 / dFrac) >
-           static_cast<double>(std::numeric_limits<std::size_t>::max())) {
+    // Densifying too far is too CPU intensive, and
+    // we also want to catching NaN and other out-of-range
+    // values here.
+    if (std::isnan(dFrac) || dFrac > 1.0 || dFrac <= 0.001) {
         throw util::IllegalArgumentException(
-            "Fraction is not in range (0.0 - 1.0]");
+            "Fraction is not in range (0.001 - 1.0]");
     }
 
-    densifyFrac = dFrac;
-}
-
-/* private */
-
-geom::Coordinate
-DiscreteFrechetDistance::getSegmentAt(const CoordinateSequence& seq, std::size_t index)
-{
-    if(densifyFrac > 0.0) {
-        // Validity of the cast to size_t has been verified in setDensifyFraction()
-        std::size_t numSubSegs =  std::size_t(util::round(1.0 / densifyFrac));
-        std::size_t i = index / numSubSegs;
-        std::size_t j = index % numSubSegs;
-        if(i >= seq.size() - 1) {
-            return seq.getAt(seq.size() - 1);
-        }
-        const geom::Coordinate& p0 = seq.getAt(i);
-        const geom::Coordinate& p1 = seq.getAt(i + 1);
-
-        double delx = (p1.x - p0.x) / static_cast<double>(numSubSegs);
-        double dely = (p1.y - p0.y) / static_cast<double>(numSubSegs);
-
-        double x = p0.x + static_cast<double>(j) * delx;
-        double y = p0.y + static_cast<double>(j) * dely;
-        Coordinate pt(x, y);
-        return pt;
-    }
-    else {
-        return seq.getAt(index);
-    }
-}
-
-PointPairDistance&
-DiscreteFrechetDistance::getFrechetDistance(std::vector< std::vector<PointPairDistance> >& ca, std::size_t i, std::size_t j,
-        const CoordinateSequence& p, const CoordinateSequence& q)
-{
-    PointPairDistance p_ptDist;
-    if(! ca[i][j].getIsNull()) {
-        return ca[i][j];
-    }
-    p_ptDist.initialize(getSegmentAt(p, i), getSegmentAt(q, j));
-    if(i == 0 && j == 0) {
-        ca[i][j] = p_ptDist;
-    }
-    else if(i > 0 && j == 0) {
-        PointPairDistance nextDist = getFrechetDistance(ca, i - 1, 0, p, q);
-        ca[i][j] = (nextDist.getDistance() > p_ptDist.getDistance()) ? nextDist : p_ptDist;
-    }
-    else if(i == 0 && j > 0) {
-        PointPairDistance nextDist = getFrechetDistance(ca, 0, j - 1, p, q);
-        ca[i][j] = (nextDist.getDistance() > p_ptDist.getDistance()) ? nextDist : p_ptDist;
-    }
-    else {
-        PointPairDistance d1 = getFrechetDistance(ca, i - 1, j, p, q),
-                          d2 = getFrechetDistance(ca, i - 1, j - 1, p, q),
-                          d3 = getFrechetDistance(ca, i, j - 1, p, q);
-        PointPairDistance& minDist = (d1.getDistance() < d2.getDistance()) ? d1 : d2;
-        if(d3.getDistance() < minDist.getDistance()) {
-            minDist = d3;
-        }
-        ca[i][j] = (minDist.getDistance() > p_ptDist.getDistance()) ? minDist : p_ptDist;
-    }
-
-    return ca[i][j];
+    densifyFraction = dFrac;
 }
 
 void
-DiscreteFrechetDistance::compute(
-    const geom::Geometry& discreteGeom,
-    const geom::Geometry& geom)
+DiscreteFrechetDistance::putIfAbsent(
+    DistanceToPairMap& distanceToPair,
+    double key, std::array<std::size_t, 2> val)
 {
-    if (discreteGeom.isEmpty() || geom.isEmpty()) {
-        throw util::IllegalArgumentException("DiscreteFrechetDistance called with empty inputs.");
-    }
-
-    util::ensureNoCurvedComponents(discreteGeom);
-    util::ensureNoCurvedComponents(geom);
-
-    auto lp = discreteGeom.getCoordinates();
-    auto lq = geom.getCoordinates();
-    std::size_t pSize, qSize;
-    if(densifyFrac > 0) {
-        std::size_t numSubSegs =  std::size_t(util::round(1.0 / densifyFrac));
-        pSize = numSubSegs * (lp->size() - 1) + 1;
-        qSize = numSubSegs * (lq->size() - 1) + 1;
-    }
-    else {
-        pSize = lp->size();
-        qSize = lq->size();
-    }
-    std::vector< std::vector<PointPairDistance> > ca(pSize, std::vector<PointPairDistance>(qSize));
-    for(std::size_t i = 0; i < pSize; i++) {
-        for(std::size_t j = 0; j < qSize; j++) {
-            ca[i][j].initialize();
-        }
-    }
-    ptDist = getFrechetDistance(ca, pSize - 1, qSize - 1, *lp, *lq);
+    auto it = distanceToPair.find(key);
+    if (it == distanceToPair.end())
+        distanceToPair[key] = val;
 }
 
-} // namespace geos.algorithm.distance
-} // namespace geos.algorithm
-} // namespace geos
+
+/* private static */
+std::unique_ptr<DiscreteFrechetDistance::MatrixStorage>
+DiscreteFrechetDistance::createMatrixStorage(std::size_t rows, std::size_t cols)
+{
+    std::size_t max = std::max(rows, cols);
+    double inf = std::numeric_limits<double>::infinity();
+    // NOTE: these constraints need to be verified
+    if (max < 1024)
+        return std::make_unique<RectMatrix>(rows, cols, inf);
+
+    return std::make_unique<CsrMatrix>(rows, cols, inf);
+}
+
+
+/* public */
+std::array<CoordinateXY, 2>
+DiscreteFrechetDistance::getCoordinates()
+{
+    if (ptDist == nullptr)
+        distance();
+
+    return ptDist->getCoordinates();
+}
+
+
+/* private static */
+std::unique_ptr<PointPairDistance>
+DiscreteFrechetDistance::computeFrechet(
+    const CoordinateSequence& coords0, const CoordinateSequence& coords1,
+    std::vector<std::size_t>& diagonal,
+    MatrixStorage& distances,
+    DistanceToPairMap& distanceToPair)
+{
+    for (std::size_t d = 0; d < diagonal.size(); d += 2) {
+        std::size_t i0 = diagonal[d];
+        std::size_t j0 = diagonal[d + 1];
+
+        GEOS_CHECK_FOR_INTERRUPTS();
+        for (std::size_t i = i0; i < coords0.size(); i++) {
+            if (distances.isValueSet(i, j0)) {
+                double dist = getMinDistanceAtCorner(distances, i, j0);
+                if (dist > distances.get(i, j0))
+                    distances.set(i, j0, dist);
+            }
+            else {
+                break;
+            }
+        }
+        GEOS_CHECK_FOR_INTERRUPTS();
+        for (std::size_t j = j0 + 1; j < coords1.size(); j++) {
+            if (distances.isValueSet(i0, j)) {
+                double dist = getMinDistanceAtCorner(distances, i0, j);
+                if (dist > distances.get(i0, j))
+                    distances.set(i0, j, dist);
+            }
+            else {
+                break;
+            }
+        }
+    }
+
+    double distance = distances.get(coords0.size()-1, coords1.size()-1);
+    auto it = distanceToPair.find(distance);
+    if (it == distanceToPair.end()) {
+        throw geos::util::IllegalStateException("Pair of points not recorded for computed distance");
+    }
+    std::array<std::size_t, 2> index = (*it).second;
+    const CoordinateXY& c0 = coords0.getAt(index[0]);
+    const CoordinateXY& c1 = coords1.getAt(index[1]);
+    auto result = std::make_unique<PointPairDistance>();
+    result->initialize(c0, c1, distance * distance);
+    return result;
+}
+
+
+/* private static */
+double
+DiscreteFrechetDistance::getMinDistanceAtCorner(MatrixStorage& matrix, std::size_t i, std::size_t j)
+{
+    if (i > 0 && j > 0) {
+        double d0 = matrix.get(i - 1, j - 1);
+        double d1 = matrix.get(i - 1, j);
+        double d2 = matrix.get(i, j - 1);
+        return std::min(std::min(d0, d1), d2);
+    }
+    if (i == 0 && j == 0)
+        return matrix.get(0, 0);
+
+    if (i == 0)
+        return matrix.get(0, j - 1);
+
+    // j == 0
+    return matrix.get(i - 1, 0);
+}
+
+
+/* private */
+void
+DiscreteFrechetDistance::computeCoordinateDistances(
+    const CoordinateSequence& coords0, const CoordinateSequence& coords1,
+    std::vector<std::size_t>& diagonal,
+    MatrixStorage& distances, DistanceToPairMap& distanceToPair)
+{
+    std::size_t numDiag = diagonal.size();
+    double maxDistOnDiag = 0.0;
+    std::size_t imin = 0, jmin = 0;
+    std::size_t numCoords0 = coords0.size();
+    std::size_t numCoords1 = coords1.size();
+
+    // First compute all the distances along the diagonal.
+    // Record the maximum distance.
+
+    for (std::size_t k = 0; k < numDiag; k += 2) {
+        std::size_t i0 = diagonal[k];
+        std::size_t j0 = diagonal[k + 1];
+        double diagDist = coords0[i0].distance(coords1[j0]);
+        if (diagDist > maxDistOnDiag) maxDistOnDiag = diagDist;
+        distances.set(i0, j0, diagDist);
+        // TBD convert to std::map
+        putIfAbsent(distanceToPair, diagDist, {i0, j0});
+    }
+
+    // Check for distances shorter than maxDistOnDiag along the diagonal
+    for (std::size_t k = 0; k < numDiag - 2; k += 2) {
+        // Decode index
+        std::size_t i0 = diagonal[k];
+        std::size_t j0 = diagonal[k + 1];
+
+        // Get reference coordinates for col and row
+        const CoordinateXY& coord0 = coords0.getAt(i0);
+        const CoordinateXY& coord1 = coords1.getAt(j0);
+
+        // Check for shorter distances in this row
+        std::size_t i = i0 + 1;
+        for (; i < numCoords0; i++) {
+            if (!distances.isValueSet(i, j0)) {
+                double dist = coords0[i].distance(coord1);
+                if (dist < maxDistOnDiag || i < imin) {
+                    distances.set(i, j0, dist);
+                    putIfAbsent(distanceToPair, dist, {i, j0});
+                }
+                else {
+                    break;
+                }
+            }
+            else {
+                break;
+            }
+        }
+        imin = i;
+        GEOS_CHECK_FOR_INTERRUPTS();
+
+        // Check for shorter distances in this column
+        std::size_t j = j0 + 1;
+        for (; j < numCoords1; j++) {
+            if (!distances.isValueSet(i0, j)) {
+                double dist = coord0.distance(coords1[j]);
+                if (dist < maxDistOnDiag || j < jmin)
+                {
+                    distances.set(i0, j, dist);
+                    putIfAbsent(distanceToPair, dist, {i0, j});
+                }
+                else
+                    break;
+            }
+            else {
+                break;
+            }
+        }
+        jmin = j;
+        GEOS_CHECK_FOR_INTERRUPTS();
+    }
+}
+
+
+/* static */
+std::vector<std::size_t>
+DiscreteFrechetDistance::bresenhamDiagonal(std::size_t numCols, std::size_t numRows)
+{
+    std::size_t dim = std::max(numCols, numRows);
+    std::vector<std::size_t> diagXY;
+    diagXY.reserve(2 * dim);
+
+    int64_t dx = static_cast<int64_t>(numCols) - 1;
+    int64_t dy = static_cast<int64_t>(numRows) - 1;
+    int64_t err;
+    if (numCols > numRows) {
+        std::size_t y = 0;
+        err = 2 * dy - dx;
+        for (std::size_t x = 0; x < numCols; x++) {
+            diagXY.push_back(x);
+            diagXY.push_back(y);
+            if (err > 0) {
+                y += 1;
+                err -= 2 * dx;
+            }
+            err += 2 * dy;
+        }
+    }
+    else {
+        std::size_t x = 0;
+        err = 2 * dx - dy;
+        for (std::size_t y = 0; y < numRows; y++) {
+            diagXY.push_back(x);
+            diagXY.push_back(y);
+            if (err > 0) {
+                x += 1;
+                err -= 2 * dy;
+            }
+            err += 2 * dx;
+        }
+    }
+    return diagXY;
+}
+
+/* private static */
+std::unique_ptr<CoordinateSequence>
+DiscreteFrechetDistance::getDensifiedCoordinates(const Geometry& geom, double densifyFrac)
+{
+    auto coords = std::make_unique<CoordinateSequence>();
+    DensifiedCoordinatesFilter dcf(densifyFrac, *coords);
+    geom.apply_ro(dcf);
+
+    return coords;
+}
+
+void
+DiscreteFrechetDistance::DensifiedCoordinatesFilter::filter_ro(
+    const geom::CoordinateSequence& seq, std::size_t index)
+{
+    // Skip the first coordinate so we can operate an edge
+    // at a time
+    if (index == 0)
+        return;
+
+    const geom::Coordinate& p0 = seq.getAt(index - 1);
+    const geom::Coordinate& p1 = seq.getAt(index);
+
+    double dx = (p1.x - p0.x) / m_numSubSegs;
+    double dy = (p1.y - p0.y) / m_numSubSegs;
+
+    for(uint32_t i = 0; i < m_numSubSegs; i++) {
+        geom::CoordinateXY pt(p0.x + i * dx, p0.y + i * dy);
+        m_coords.add(pt, true); // allowRepeated
+    }
+
+    // Include the final point in the sequence
+    if (index == seq.size() - 1)
+        m_coords.add(p1, true); // allowRepeated
+}
+
+
+/* Implementation of pure virtual destructor for C++ */
+DiscreteFrechetDistance::MatrixStorage::~MatrixStorage() {}
+
+}
+}
+}
diff --git a/tests/unit/algorithm/distance/DiscreteFrechetDistanceData.h b/tests/unit/algorithm/distance/DiscreteFrechetDistanceData.h
new file mode 100644
index 000000000..db82ddab7
--- /dev/null
+++ b/tests/unit/algorithm/distance/DiscreteFrechetDistanceData.h
@@ -0,0 +1,5559 @@
+
+#define LS1 "LINESTRING (" \
+  "7.619528 47.506634," \
+  "7.619528 47.506634," \
+  "7.619552 47.50662," \
+  "7.61957 47.50661," \
+  "7.619595 47.50659," \
+  "7.61962 47.506588," \
+  "7.619643 47.506584," \
+  "7.619667 47.506573," \
+  "7.6197 47.506573," \
+  "7.619728 47.50657," \
+  "7.619772 47.50658," \
+  "7.619795 47.50658," \
+  "7.619822 47.506577," \
+  "7.619845 47.506577," \
+  "7.619875 47.50658," \
+  "7.619908 47.506577," \
+  "7.619948 47.50658," \
+  "7.619985 47.50658," \
+  "7.620023 47.50658," \
+  "7.620057 47.506577," \
+  "7.620085 47.506577," \
+  "7.620115 47.506573," \
+  "7.620145 47.50657," \
+  "7.62017 47.506565," \
+  "7.620195 47.50656," \
+  "7.620223 47.506557," \
+  "7.620248 47.506554," \
+  "7.620275 47.50655," \
+  "7.620305 47.506546," \
+  "7.620338 47.506542," \
+  "7.620365 47.506535," \
+  "7.620382 47.50654," \
+  "7.620407 47.506542," \
+  "7.620433 47.50655," \
+  "7.620463 47.506542," \
+  "7.620485 47.50653," \
+  "7.620517 47.506527," \
+  "7.620547 47.50652," \
+  "7.620573 47.5065," \
+  "7.6206 47.506493," \
+  "7.620625 47.506477," \
+  "7.620643 47.506462," \
+  "7.620665 47.50645," \
+  "7.62069 47.50643," \
+  "7.620708 47.506405," \
+  "7.62072 47.506382," \
+  "7.620728 47.506363," \
+  "7.620738 47.506336," \
+  "7.620745 47.506313," \
+  "7.620752 47.506294," \
+  "7.620757 47.50627," \
+  "7.620765 47.50625," \
+  "7.62076 47.506214," \
+  "7.620755 47.506184," \
+  "7.62075 47.50614," \
+  "7.620737 47.506104," \
+  "7.620742 47.506073," \
+  "7.620755 47.50604," \
+  "7.62076 47.50601," \
+  "7.620752 47.505978," \
+  "7.620742 47.505947," \
+  "7.620737 47.505913," \
+  "7.620732 47.505882," \
+  "7.620733 47.50585," \
+  "7.620743 47.50583," \
+  "7.620743 47.5058," \
+  "7.620745 47.505768," \
+  "7.620752 47.505733," \
+  "7.620758 47.5057," \
+  "7.620778 47.505672," \
+  "7.620795 47.50565," \
+  "7.620805 47.505615," \
+  "7.620812 47.50559," \
+  "7.620812 47.50556," \
+  "7.620818 47.50553," \
+  "7.620822 47.5055," \
+  "7.620838 47.50547," \
+  "7.62085 47.50544," \
+  "7.620847 47.505398," \
+  "7.620855 47.505375," \
+  "7.62086 47.50535," \
+  "7.620858 47.50532," \
+  "7.62086 47.505295," \
+  "7.62086 47.505264," \
+  "7.620862 47.505238," \
+  "7.620867 47.505215," \
+  "7.620872 47.50519," \
+  "7.62088 47.505165," \
+  "7.620897 47.50514," \
+  "7.620905 47.50512," \
+  "7.620922 47.505096," \
+  "7.62095 47.505074," \
+  "7.620973 47.505054," \
+  "7.621002 47.50503," \
+  "7.621022 47.50501," \
+  "7.621042 47.50498," \
+  "7.62106 47.504955," \
+  "7.621077 47.50493," \
+  "7.621093 47.5049," \
+  "7.621117 47.50488," \
+  "7.621138 47.50486," \
+  "7.621165 47.504845," \
+  "7.62119 47.504826," \
+  "7.621218 47.504807," \
+  "7.62124 47.504784," \
+  "7.621267 47.50476," \
+  "7.621297 47.504734," \
+  "7.62133 47.50471," \
+  "7.621368 47.50469," \
+  "7.621392 47.504673," \
+  "7.621413 47.50466," \
+  "7.62144 47.504646," \
+  "7.621468 47.50463," \
+  "7.621502 47.504612," \
+  "7.621525 47.504585," \
+  "7.621545 47.50456," \
+  "7.62156 47.50453," \
+  "7.621575 47.50451," \
+  "7.62159 47.504486," \
+  "7.62161 47.504467," \
+  "7.621637 47.50445," \
+  "7.621657 47.504433," \
+  "7.621683 47.504414," \
+  "7.621702 47.5044," \
+  "7.62172 47.50438," \
+  "7.621742 47.504364," \
+  "7.621767 47.50435," \
+  "7.621798 47.504333," \
+  "7.62183 47.50432," \
+  "7.621858 47.504295," \
+  "7.621887 47.50428," \
+  "7.621918 47.504265," \
+  "7.621943 47.504246," \
+  "7.621963 47.50423," \
+  "7.621982 47.50421," \
+  "7.622 47.50419," \
+  "7.622023 47.504173," \
+  "7.622057 47.50416," \
+  "7.622087 47.504147," \
+  "7.62212 47.50413," \
+  "7.622143 47.504116," \
+  "7.622173 47.5041," \
+  "7.62221 47.50409," \
+  "7.62224 47.50407," \
+  "7.62227 47.50405," \
+  "7.622302 47.50404," \
+  "7.622332 47.504025," \
+  "7.62236 47.504013," \
+  "7.622388 47.503994," \
+  "7.622418 47.50398," \
+  "7.622447 47.503963," \
+  "7.62247 47.50394," \
+  "7.622497 47.50392," \
+  "7.622525 47.5039," \
+  "7.622553 47.50388," \
+  "7.622578 47.503857," \
+  "7.622602 47.503838," \
+  "7.622622 47.503815," \
+  "7.622645 47.50379," \
+  "7.622668 47.503773," \
+  "7.622695 47.503754," \
+  "7.622723 47.503735," \
+  "7.622752 47.503716," \
+  "7.622787 47.503696," \
+  "7.622822 47.50368," \
+  "7.622858 47.503666," \
+  "7.622892 47.503647," \
+  "7.622923 47.503624," \
+  "7.622962 47.503605," \
+  "7.623003 47.503593," \
+  "7.62303 47.503574," \
+  "7.623058 47.503563," \
+  "7.623098 47.50355," \
+  "7.62314 47.503548," \
+  "7.623173 47.503536," \
+  "7.623203 47.503525," \
+  "7.623225 47.50351," \
+  "7.62325 47.503494," \
+  "7.623277 47.50348," \
+  "7.623307 47.503464," \
+  "7.623332 47.50345," \
+  "7.623357 47.50343," \
+  "7.623377 47.50341," \
+  "7.623403 47.50339," \
+  "7.623427 47.503376," \
+  "7.623455 47.50336," \
+  "7.623485 47.503345," \
+  "7.62351 47.503338," \
+  "7.623532 47.503323," \
+  "7.623557 47.503307," \
+  "7.623582 47.503292," \
+  "7.62361 47.50328," \
+  "7.623645 47.503273," \
+  "7.623682 47.50326," \
+  "7.623713 47.503246," \
+  "7.623752 47.50324," \
+  "7.623785 47.50323," \
+  "7.62382 47.50323," \
+  "7.623858 47.503242," \
+  "7.623882 47.503242," \
+  "7.623893 47.503242," \
+  "7.623907 47.503246," \
+  "7.623918 47.503258," \
+  "7.62392 47.503273," \
+  "7.623925 47.503292," \
+  "7.623937 47.503307," \
+  "7.623938 47.503326," \
+  "7.623937 47.50334," \
+  "7.623928 47.50336," \
+  "7.623923 47.503384," \
+  "7.623922 47.503407," \
+  "7.62391 47.503426," \
+  "7.623893 47.50345," \
+  "7.623863 47.503464," \
+  "7.623835 47.503487," \
+  "7.623803 47.50351," \
+  "7.623772 47.50353," \
+  "7.623747 47.50355," \
+  "7.623725 47.50357," \
+  "7.623702 47.503593," \
+  "7.623677 47.503616," \
+  "7.623657 47.503643," \
+  "7.623632 47.503666," \
+  "7.623605 47.503685," \
+  "7.623572 47.5037," \
+  "7.623533 47.50371," \
+  "7.623497 47.503727," \
+  "7.62347 47.503735," \
+  "7.623448 47.503742," \
+  "7.623427 47.50376," \
+  "7.623407 47.503784," \
+  "7.623383 47.503803," \
+  "7.623363 47.503822," \
+  "7.623342 47.50384," \
+  "7.623322 47.50386," \
+  "7.6233 47.503876," \
+  "7.623282 47.50389," \
+  "7.623263 47.503914," \
+  "7.623242 47.503937," \
+  "7.623217 47.50396," \
+  "7.623192 47.50398," \
+  "7.623168 47.503998," \
+  "7.62315 47.504013," \
+  "7.62313 47.504032," \
+  "7.623103 47.50405," \
+  "7.623078 47.504074," \
+  "7.623058 47.504097," \
+  "7.62304 47.504124," \
+  "7.623018 47.504147," \
+  "7.623005 47.504173," \
+  "7.622997 47.504196," \
+  "7.62299 47.504223," \
+  "7.62298 47.50425," \
+  "7.622973 47.504276," \
+  "7.622967 47.504314," \
+  "7.622957 47.50435," \
+  "7.622942 47.50438," \
+  "7.622927 47.504414," \
+  "7.62292 47.504448," \
+  "7.622915 47.50448," \
+  "7.622907 47.50451," \
+  "7.622893 47.50454," \
+  "7.622888 47.50457," \
+  "7.622888 47.504604," \
+  "7.622872 47.50463," \
+  "7.622848 47.504654," \
+  "7.62283 47.50468," \
+  "7.622817 47.504707," \
+  "7.62281 47.50473," \
+  "7.6228 47.504757," \
+  "7.622785 47.504784," \
+  "7.622768 47.50481," \
+  "7.62275 47.504837," \
+  "7.62274 47.504868," \
+  "7.622723 47.504887," \
+  "7.622718 47.504917," \
+  "7.622707 47.504948," \
+  "7.622695 47.50498," \
+  "7.62269 47.505," \
+  "7.622683 47.505028," \
+  "7.622678 47.50505," \
+  "7.622677 47.505077," \
+  "7.622675 47.5051," \
+  "7.622673 47.505123," \
+  "7.622673 47.505154," \
+  "7.622672 47.50519," \
+  "7.62267 47.505226," \
+  "7.622668 47.505257," \
+  "7.622675 47.505283," \
+  "7.622677 47.505302," \
+  "7.62268 47.50533," \
+  "7.622677 47.50535," \
+  "7.622668 47.505367," \
+  "7.622663 47.505394," \
+  "7.62266 47.505424," \
+  "7.622658 47.505447," \
+  "7.622653 47.505486," \
+  "7.62266 47.50552," \
+  "7.622677 47.505566," \
+  "7.622678 47.505596," \
+  "7.622678 47.505627," \
+  "7.622682 47.505653," \
+  "7.622695 47.505672," \
+  "7.622717 47.50569," \
+  "7.622758 47.505722," \
+  "7.622795 47.505733," \
+  "7.622827 47.505737," \
+  "7.622862 47.505753," \
+  "7.622903 47.505768," \
+  "7.622942 47.50578," \
+  "7.622968 47.505783," \
+  "7.623 47.505787," \
+  "7.623028 47.50578," \
+  "7.623058 47.50577," \
+  "7.62309 47.50576," \
+  "7.623127 47.505753," \
+  "7.62316 47.50574," \
+  "7.623192 47.505733," \
+  "7.623227 47.50573," \
+  "7.623258 47.50572," \
+  "7.623285 47.505703," \
+  "7.62331 47.50569," \
+  "7.623337 47.505684," \
+  "7.623363 47.505672," \
+  "7.623392 47.505657," \
+  "7.62342 47.505642," \
+  "7.623452 47.50563," \
+  "7.623482 47.505623," \
+  "7.623505 47.50561," \
+  "7.623523 47.505596," \
+  "7.623545 47.50559," \
+  "7.62357 47.505577," \
+  "7.623598 47.50556," \
+  "7.623637 47.505547," \
+  "7.623672 47.50553," \
+  "7.623697 47.505512," \
+  "7.623717 47.5055," \
+  "7.623748 47.505493," \
+  "7.623783 47.50549," \
+  "7.623828 47.50549," \
+  "7.623873 47.505486," \
+  "7.623908 47.505478," \
+  "7.623942 47.505466," \
+  "7.623968 47.505455," \
+  "7.623993 47.505444," \
+  "7.624015 47.505432," \
+  "7.62404 47.50542," \
+  "7.62407 47.50541," \
+  "7.624097 47.505398," \
+  "7.624125 47.505383," \
+  "7.624155 47.50537," \
+  "7.62418 47.50536," \
+  "7.62421 47.50535," \
+  "7.624243 47.505337," \
+  "7.624278 47.505318," \
+  "7.624312 47.505302," \
+  "7.624338 47.505287," \
+  "7.624372 47.505272," \
+  "7.62441 47.50526," \
+  "7.62446 47.50525," \
+  "7.624505 47.505238," \
+  "7.624532 47.505222," \
+  "7.624567 47.505215," \
+  "7.624593 47.5052," \
+  "7.624625 47.50519," \
+  "7.624653 47.505177," \
+  "7.62468 47.505165," \
+  "7.624702 47.505146," \
+  "7.624715 47.505123," \
+  "7.624738 47.5051," \
+  "7.624758 47.50508," \
+  "7.624777 47.505062," \
+  "7.62479 47.505047," \
+  "7.624807 47.505028," \
+  "7.624838 47.50501," \
+  "7.624862 47.504986," \
+  "7.62489 47.504963," \
+  "7.624907 47.504944," \
+  "7.624922 47.50492," \
+  "7.624933 47.504898," \
+  "7.624947 47.50487," \
+  "7.624957 47.504852," \
+  "7.624967 47.50483," \
+  "7.624975 47.50481," \
+  "7.62498 47.50479," \
+  "7.62499 47.504776," \
+  "7.625028 47.504753," \
+  "7.625058 47.504745," \
+  "7.625085 47.50473," \
+  "7.625108 47.50472," \
+  "7.625127 47.504704," \
+  "7.625148 47.504684," \
+  "7.625165 47.50467," \
+  "7.625185 47.504654," \
+  "7.62521 47.504642," \
+  "7.625233 47.504627," \
+  "7.625255 47.504616," \
+  "7.625282 47.504604," \
+  "7.625308 47.50459," \
+  "7.625337 47.504574," \
+  "7.625362 47.50456," \
+  "7.62539 47.504547," \
+  "7.625423 47.504536," \
+  "7.625452 47.504517," \
+  "7.625463 47.504486," \
+  "7.625502 47.50448," \
+  "7.625525 47.504467," \
+  "7.625552 47.504456," \
+  "7.625582 47.50445," \
+  "7.625612 47.504444," \
+  "7.625652 47.504444," \
+  "7.625683 47.504444," \
+  "7.625708 47.504444," \
+  "7.625725 47.50444," \
+  "7.625737 47.504448," \
+  "7.625752 47.50446," \
+  "7.625757 47.504475," \
+  "7.625763 47.50449," \
+  "7.625772 47.5045," \
+  "7.625782 47.50452," \
+  "7.625787 47.504536," \
+  "7.625783 47.50455," \
+  "7.62578 47.504574," \
+  "7.625772 47.504597," \
+  "7.625757 47.504616," \
+  "7.625743 47.50464," \
+  "7.625727 47.50466," \
+  "7.62571 47.504684," \
+  "7.625692 47.50471," \
+  "7.62569 47.504738," \
+  "7.625692 47.504765," \
+  "7.625697 47.504787," \
+  "7.625703 47.504807," \
+  "7.625702 47.504833," \
+  "7.625707 47.504856," \
+  "7.625715 47.50488," \
+  "7.625715 47.504906," \
+  "7.625722 47.50493," \
+  "7.625728 47.504948," \
+  "7.62573 47.50497," \
+  "7.625742 47.505," \
+  "7.625747 47.50503," \
+  "7.625758 47.50506," \
+  "7.625778 47.505093," \
+  "7.625793 47.505116," \
+  "7.625805 47.50514," \
+  "7.625808 47.50516," \
+  "7.625818 47.505188," \
+  "7.625837 47.505215," \
+  "7.625847 47.505238," \
+  "7.625857 47.505272," \
+  "7.62587 47.505306," \
+  "7.62588 47.50533," \
+  "7.625887 47.505352," \
+  "7.62589 47.50538," \
+  "7.625893 47.505398," \
+  "7.625902 47.505417," \
+  "7.625912 47.505436," \
+  "7.625923 47.505455," \
+  "7.62594 47.50548," \
+  "7.625955 47.50551," \
+  "7.625967 47.50554," \
+  "7.625982 47.505573," \
+  "7.626 47.505604," \
+  "7.62601 47.505627," \
+  "7.626022 47.505657," \
+  "7.626033 47.505684," \
+  "7.626048 47.50571," \
+  "7.626072 47.50574," \
+  "7.626092 47.50578," \
+  "7.626105 47.50581," \
+  "7.626118 47.505844," \
+  "7.626133 47.50588," \
+  "7.62615 47.505913," \
+  "7.626173 47.505943," \
+  "7.6262 47.505974," \
+  "7.626233 47.50601," \
+  "7.626257 47.50603," \
+  "7.626282 47.50605," \
+  "7.626308 47.50607," \
+  "7.626335 47.50609," \
+  "7.626363 47.506104," \
+  "7.626393 47.506123," \
+  "7.62642 47.506138," \
+  "7.626453 47.506153," \
+  "7.626492 47.50617," \
+  "7.626533 47.50618," \
+  "7.626578 47.50619," \
+  "7.626623 47.506195," \
+  "7.626658 47.50619," \
+  "7.626693 47.50618," \
+  "7.626725 47.50617," \
+  "7.626758 47.506157," \
+  "7.626788 47.50615," \
+  "7.626817 47.506134," \
+  "7.62684 47.50612," \
+  "7.62686 47.506104," \
+  "7.62687 47.506077," \
+  "7.62689 47.50606," \
+  "7.626918 47.50605," \
+  "7.626957 47.50605," \
+  "7.626995 47.506046," \
+  "7.627022 47.506035," \
+  "7.627047 47.506016," \
+  "7.627077 47.506004," \
+  "7.627102 47.505993," \
+  "7.627128 47.50598," \
+  "7.627152 47.505974," \
+  "7.62718 47.505974," \
+  "7.627207 47.505962," \
+  "7.627233 47.505947," \
+  "7.627257 47.50593," \
+  "7.627278 47.505917," \
+  "7.627298 47.5059," \
+  "7.627308 47.505882," \
+  "7.627328 47.505867," \
+  "7.62735 47.50585," \
+  "7.627375 47.50584," \
+  "7.627398 47.50583," \
+  "7.627417 47.505814," \
+  "7.627437 47.505795," \
+  "7.627458 47.505775," \
+  "7.627482 47.505756," \
+  "7.6275 47.505737," \
+  "7.62751 47.50572," \
+  "7.627523 47.5057," \
+  "7.62755 47.505684," \
+  "7.627572 47.505672," \
+  "7.627588 47.505653," \
+  "7.627622 47.505642," \
+  "7.627638 47.505627," \
+  "7.62765 47.505608," \
+  "7.627672 47.50559," \
+  "7.627695 47.505573," \
+  "7.627712 47.505558," \
+  "7.627732 47.50554," \
+  "7.627755 47.505524," \
+  "7.627778 47.50551," \
+  "7.627798 47.50549," \
+  "7.627822 47.50547," \
+  "7.627845 47.50546," \
+  "7.627872 47.505444," \
+  "7.627885 47.50542," \
+  "7.6279 47.505398," \
+  "7.627923 47.50538," \
+  "7.627948 47.505367," \
+  "7.627978 47.50535," \
+  "7.62801 47.50533," \
+  "7.628028 47.505306," \
+  "7.628038 47.50529," \
+  "7.628072 47.505283," \
+  "7.628092 47.505276," \
+  "7.628108 47.50526," \
+  "7.62813 47.50525," \
+  "7.628155 47.505234," \
+  "7.628178 47.505215," \
+  "7.628198 47.505203," \
+  "7.628212 47.50519," \
+  "7.628243 47.505177," \
+  "7.628283 47.50515," \
+  "7.628305 47.505127," \
+  "7.628327 47.505108," \
+  "7.628348 47.505096," \
+  "7.628372 47.50509," \
+  "7.628392 47.505077," \
+  "7.628407 47.505062," \
+  "7.62842 47.505047," \
+  "7.628433 47.50503," \
+  "7.628445 47.505016," \
+  "7.628458 47.505," \
+  "7.62847 47.504982," \
+  "7.628483 47.504967," \
+  "7.628495 47.504948," \
+  "7.628495 47.504917," \
+  "7.628505 47.5049," \
+  "7.628518 47.50489," \
+  "7.62852 47.504875," \
+  "7.628525 47.504864," \
+  "7.628532 47.50485," \
+  "7.62854 47.504833," \
+  "7.628545 47.50482," \
+  "7.628555 47.504807," \
+  "7.628565 47.50479," \
+  "7.628572 47.504776," \
+  "7.628582 47.50476," \
+  "7.628598 47.50475," \
+  "7.628608 47.504738," \
+  "7.628615 47.504723," \
+  "7.628628 47.504707," \
+  "7.62864 47.504692," \
+  "7.62865 47.504673," \
+  "7.62866 47.504654," \
+  "7.628667 47.50464," \
+  "7.628675 47.50462," \
+  "7.628678 47.504597," \
+  "7.628662 47.504566," \
+  "7.628665 47.504543," \
+  "7.62866 47.50452," \
+  "7.628667 47.504498," \
+  "7.628672 47.50447," \
+  "7.628673 47.504448," \
+  "7.628668 47.504417," \
+  "7.62867 47.50439," \
+  "7.628663 47.504364," \
+  "7.628653 47.504337," \
+  "7.628645 47.50431," \
+  "7.628645 47.504288," \
+  "7.628655 47.504265," \
+  "7.628662 47.50424," \
+  "7.628657 47.50421," \
+  "7.628652 47.504185," \
+  "7.62865 47.504154," \
+  "7.628642 47.504128," \
+  "7.628653 47.504112," \
+  "7.628675 47.5041," \
+  "7.628697 47.504086," \
+  "7.628722 47.50408," \
+  "7.62873 47.504066," \
+  "7.628732 47.50405," \
+  "7.62874 47.504044," \
+  "7.628752 47.504032," \
+  "7.62876 47.50402," \
+  "7.628762 47.504005," \
+  "7.628763 47.50399," \
+  "7.628765 47.50398," \
+  "7.628767 47.503967," \
+  "7.628775 47.503956," \
+  "7.628778 47.50394," \
+  "7.628783 47.503918," \
+  "7.628785 47.5039," \
+  "7.628787 47.50388," \
+  "7.62879 47.50386," \
+  "7.628802 47.503838," \
+  "7.628818 47.503815," \
+  "7.628832 47.503788," \
+  "7.628845 47.50376," \
+  "7.62886 47.50374," \
+  "7.62886 47.50371," \
+  "7.628857 47.50368," \
+  "7.628852 47.50366," \
+  "7.628855 47.503643," \
+  "7.628863 47.503624," \
+  "7.628878 47.50361," \
+  "7.628885 47.503586," \
+  "7.628887 47.50357," \
+  "7.628895 47.50355," \
+  "7.628903 47.50353," \
+  "7.62891 47.5035," \
+  "7.628923 47.503483," \
+  "7.628937 47.503468," \
+  "7.628947 47.503445," \
+  "7.628952 47.50342," \
+  "7.628958 47.5034," \
+  "7.628973 47.50338," \
+  "7.628995 47.50337," \
+  "7.629018 47.503353," \
+  "7.629035 47.50334," \
+  "7.62905 47.50333," \
+  "7.629057 47.50331," \
+  "7.62906 47.503284," \
+  "7.629063 47.503258," \
+  "7.629075 47.503227," \
+  "7.62909 47.503204," \
+  "7.629098 47.503174," \
+  "7.6291 47.503143," \
+  "7.629122 47.503124," \
+  "7.62913 47.503094," \
+  "7.629152 47.503082," \
+  "7.629168 47.503067," \
+  "7.629183 47.50305," \
+  "7.6292 47.503036," \
+  "7.629222 47.50302," \
+  "7.629243 47.50301," \
+  "7.62926 47.502995," \
+  "7.629267 47.50297," \
+  "7.629272 47.502953," \
+  "7.629288 47.502937," \
+  "7.629308 47.502926," \
+  "7.629318 47.50291," \
+  "7.62933 47.502876," \
+  "7.629352 47.50285," \
+  "7.629368 47.502827," \
+  "7.62938 47.502808," \
+  "7.629393 47.50279," \
+  "7.629402 47.50276," \
+  "7.629418 47.502743," \
+  "7.62944 47.502728," \
+  "7.629465 47.502712," \
+  "7.629483 47.502693," \
+  "7.629508 47.50268," \
+  "7.629537 47.502674," \
+  "7.629563 47.502663," \
+  "7.629578 47.502647," \
+  "7.629592 47.502632," \
+  "7.629602 47.502617," \
+  "7.629618 47.502605," \
+  "7.629635 47.502594," \
+  "7.629662 47.50258," \
+  "7.629683 47.502563," \
+  "7.629697 47.502552," \
+  "7.629703 47.502537," \
+  "7.629713 47.502518," \
+  "7.62973 47.502495," \
+  "7.62975 47.50247," \
+  "7.629763 47.50245," \
+  "7.629778 47.502434," \
+  "7.629788 47.50241," \
+  "7.629788 47.502388," \
+  "7.629793 47.502365," \
+  "7.629802 47.50235," \
+  "7.629807 47.502335," \
+  "7.629817 47.50232," \
+  "7.629833 47.502316," \
+  "7.629853 47.502316," \
+  "7.629868 47.502308," \
+  "7.62989 47.502308," \
+  "7.629912 47.50231," \
+  "7.629927 47.50231," \
+  "7.62994 47.502316," \
+  "7.629945 47.50232," \
+  "7.629952 47.502327," \
+  "7.629952 47.502335," \
+  "7.629948 47.502346," \
+  "7.629947 47.502357," \
+  "7.629945 47.502373," \
+  "7.629937 47.502388," \
+  "7.629933 47.502403," \
+  "7.629935 47.50242," \
+  "7.629933 47.502434," \
+  "7.629925 47.50245," \
+  "7.629927 47.502464," \
+  "7.629928 47.502483," \
+  "7.629928 47.502506," \
+  "7.629933 47.502525," \
+  "7.629927 47.502544," \
+  "7.62993 47.502563," \
+  "7.62994 47.502583," \
+  "7.629942 47.502605," \
+  "7.629937 47.502625," \
+  "7.629923 47.502636," \
+  "7.629912 47.502644," \
+  "7.62992 47.502666," \
+  "7.62993 47.502697," \
+  "7.629935 47.50273," \
+  "7.629942 47.50276," \
+  "7.629942 47.502785," \
+  "7.629947 47.502804," \
+  "7.629952 47.502827," \
+  "7.629957 47.502846," \
+  "7.62996 47.502865," \
+  "7.629967 47.50288," \
+  "7.629973 47.5029," \
+  "7.629978 47.50292," \
+  "7.629987 47.502945," \
+  "7.629987 47.502964," \
+  "7.629995 47.502995," \
+  "7.629998 47.503025," \
+  "7.63 47.50305," \
+  "7.629995 47.503075," \
+  "7.629992 47.503098," \
+  "7.629995 47.50313," \
+  "7.629997 47.503155," \
+  "7.630008 47.50318," \
+  "7.63002 47.503204," \
+  "7.630033 47.50323," \
+  "7.630042 47.503254," \
+  "7.63005 47.50328," \
+  "7.63006 47.503304," \
+  "7.630065 47.50333," \
+  "7.630072 47.503357," \
+  "7.630077 47.50338," \
+  "7.630083 47.503403," \
+  "7.630085 47.50342," \
+  "7.630087 47.50344," \
+  "7.630093 47.503464," \
+  "7.630097 47.503487," \
+  "7.6301 47.50351," \
+  "7.630112 47.503532," \
+  "7.630123 47.503567," \
+  "7.630128 47.5036," \
+  "7.630132 47.503628," \
+  "7.630133 47.50365," \
+  "7.630142 47.503677," \
+  "7.630143 47.503696," \
+  "7.630145 47.503723," \
+  "7.63014 47.503746," \
+  "7.630133 47.503773," \
+  "7.630127 47.5038," \
+  "7.630128 47.503826," \
+  "7.630132 47.503853," \
+  "7.630132 47.503876," \
+  "7.630133 47.5039," \
+  "7.63014 47.50392," \
+  "7.630135 47.503944," \
+  "7.630143 47.503975," \
+  "7.630143 47.504005," \
+  "7.63016 47.504044," \
+  "7.630183 47.50408," \
+  "7.630202 47.50411," \
+  "7.63022 47.504128," \
+  "7.63025 47.504158," \
+  "7.630268 47.50418," \
+  "7.630315 47.504215," \
+  "7.630343 47.50424," \
+  "7.630372 47.504253," \
+  "7.630398 47.504265," \
+  "7.630425 47.50427," \
+  "7.630455 47.504265," \
+  "7.630483 47.504257," \
+  "7.63051 47.504246," \
+  "7.630538 47.504227," \
+  "7.630557 47.504204," \
+  "7.630575 47.50419," \
+  "7.630593 47.504173," \
+  "7.630607 47.50416," \
+  "7.630615 47.504147," \
+  "7.630627 47.50413," \
+  "7.63064 47.504124," \
+  "7.630655 47.50411," \
+  "7.630668 47.504093," \
+  "7.630683 47.50408," \
+  "7.6307 47.50406," \
+  "7.630712 47.504032," \
+  "7.630732 47.504013," \
+  "7.630752 47.503986," \
+  "7.63077 47.503963," \
+  "7.630793 47.503933," \
+  "7.630803 47.503902," \
+  "7.630815 47.503872," \
+  "7.630833 47.50384," \
+  "7.630855 47.50381," \
+  "7.630877 47.503788," \
+  "7.630898 47.50377," \
+  "7.630918 47.50375," \
+  "7.630937 47.503727," \
+  "7.630952 47.503708," \
+  "7.630968 47.50369," \
+  "7.630985 47.503662," \
+  "7.631007 47.503647," \
+  "7.631025 47.503624," \
+  "7.631047 47.5036," \
+  "7.631073 47.50357," \
+  "7.631095 47.503548," \
+  "7.631113 47.50353," \
+  "7.631128 47.503506," \
+  "7.631143 47.503487," \
+  "7.631157 47.50347," \
+  "7.631168 47.503452," \
+  "7.631183 47.503437," \
+  "7.631202 47.503418," \
+  "7.631213 47.50339," \
+  "7.63124 47.503372," \
+  "7.631263 47.503353," \
+  "7.631292 47.503338," \
+  "7.631312 47.503323," \
+  "7.631328 47.503304," \
+  "7.631353 47.50329," \
+  "7.631375 47.503277," \
+  "7.631402 47.50326," \
+  "7.631427 47.50324," \
+  "7.631452 47.503216," \
+  "7.631485 47.503197," \
+  "7.631513 47.503178," \
+  "7.631543 47.503166," \
+  "7.631572 47.503143," \
+  "7.631602 47.503124," \
+  "7.631623 47.5031," \
+  "7.631645 47.50308," \
+  "7.631665 47.50306," \
+  "7.631695 47.50304," \
+  "7.631717 47.50303," \
+  "7.631735 47.503002," \
+  "7.631753 47.502983," \
+  "7.631777 47.502968," \
+  "7.631803 47.502956," \
+  "7.631832 47.502953," \
+  "7.631863 47.50294," \
+  "7.631897 47.50293," \
+  "7.63194 47.50292," \
+  "7.631972 47.502895," \
+  "7.632 47.502888," \
+  "7.63203 47.50288," \
+  "7.632058 47.50287," \
+  "7.632103 47.502853," \
+  "7.632145 47.50283," \
+  "7.632183 47.502815," \
+  "7.632215 47.502796," \
+  "7.632245 47.50278," \
+  "7.632273 47.502766," \
+  "7.6323 47.502747," \
+  "7.632333 47.502728," \
+  "7.632372 47.50271," \
+  "7.632413 47.502697," \
+  "7.632445 47.502686," \
+  "7.632482 47.50267," \
+  "7.63252 47.502663," \
+  "7.632545 47.50265," \
+  "7.63258 47.50265," \
+  "7.632617 47.50265," \
+  "7.63266 47.50266," \
+  "7.632695 47.502666," \
+  "7.632727 47.50267," \
+  "7.632748 47.50267," \
+  "7.63277 47.502678," \
+  "7.632798 47.50268," \
+  "7.632823 47.502693," \
+  "7.632848 47.502705," \
+  "7.63288 47.502716," \
+  "7.632912 47.50273," \
+  "7.632943 47.502747," \
+  "7.632972 47.502758," \
+  "7.633002 47.502766," \
+  "7.633033 47.502777," \
+  "7.633068 47.502785," \
+  "7.633113 47.502792," \
+  "7.633143 47.502796," \
+  "7.633168 47.502792," \
+  "7.633207 47.502804," \
+  "7.63324 47.502815," \
+  "7.63327 47.502823," \
+  "7.633313 47.50284," \
+  "7.633353 47.502857," \
+  "7.633395 47.50287," \
+  "7.633438 47.502876," \
+  "7.633475 47.50288," \
+  "7.633505 47.502884," \
+  "7.63354 47.50289," \
+  "7.633578 47.502903," \
+  "7.633613 47.502907," \
+  "7.633648 47.50291," \
+  "7.633672 47.502914," \
+  "7.633702 47.502922," \
+  "7.633738 47.502934," \
+  "7.633773 47.502934," \
+  "7.63381 47.50294," \
+  "7.633842 47.50295," \
+  "7.633877 47.502956," \
+  "7.633918 47.50297," \
+  "7.633957 47.502987," \
+  "7.633993 47.503," \
+  "7.63403 47.503006," \
+  "7.634067 47.503014," \
+  "7.634107 47.50303," \
+  "7.634152 47.503044," \
+  "7.634192 47.503056," \
+  "7.634233 47.503067," \
+  "7.634267 47.50308," \
+  "7.634308 47.50309," \
+  "7.634343 47.503105," \
+  "7.634387 47.503124," \
+  "7.634423 47.503136," \
+  "7.634457 47.503143," \
+  "7.634488 47.503147," \
+  "7.634522 47.50315," \
+  "7.634562 47.503162," \
+  "7.634603 47.503174," \
+  "7.63465 47.503185," \
+  "7.63469 47.50319," \
+  "7.634727 47.50319," \
+  "7.634762 47.503185," \
+  "7.634802 47.50318," \
+  "7.634832 47.50317," \
+  "7.634872 47.503166," \
+  "7.634907 47.503162," \
+  "7.634937 47.503155," \
+  "7.634977 47.503155," \
+  "7.635012 47.503147," \
+  "7.635043 47.503136," \
+  "7.635092 47.503136," \
+  "7.635128 47.50313," \
+  "7.635155 47.503117," \
+  "7.635188 47.503113," \
+  "7.635222 47.5031," \
+  "7.635253 47.50309," \
+  "7.635292 47.503086," \
+  "7.635332 47.50308," \
+  "7.635368 47.50307," \
+  "7.635407 47.503063," \
+  "7.635448 47.50306," \
+  "7.635483 47.50305," \
+  "7.63551 47.503036," \
+  "7.635552 47.50303," \
+  "7.635598 47.50302," \
+  "7.63564 47.503014," \
+  "7.635687 47.503014," \
+  "7.635732 47.503006," \
+  "7.635765 47.50299," \
+  "7.6358 47.502975," \
+  "7.635833 47.502964," \
+  "7.635868 47.50295," \
+  "7.635898 47.502934," \
+  "7.63592 47.502907," \
+  "7.63595 47.50289," \
+  "7.635978 47.502872," \
+  "7.636005 47.502857," \
+  "7.636028 47.502846," \
+  "7.636063 47.50284," \
+  "7.63609 47.50282," \
+  "7.636108 47.502796," \
+  "7.636127 47.502773," \
+  "7.636145 47.50275," \
+  "7.636168 47.502735," \
+  "7.636198 47.50272," \
+  "7.636233 47.502705," \
+  "7.636257 47.502686," \
+  "7.636285 47.50267," \
+  "7.636305 47.50265," \
+  "7.636327 47.502644," \
+  "7.63635 47.502636," \
+  "7.636372 47.50262," \
+  "7.636392 47.5026," \
+  "7.636422 47.502583," \
+  "7.636448 47.502556," \
+  "7.636462 47.50253," \
+  "7.636483 47.502506," \
+  "7.636507 47.502483," \
+  "7.636528 47.50246," \
+  "7.636555 47.502445," \
+  "7.63659 47.50243," \
+  "7.636615 47.50241," \
+  "7.636637 47.50239," \
+  "7.63666 47.502377," \
+  "7.636692 47.502365," \
+  "7.636718 47.502346," \
+  "7.636747 47.502327," \
+  "7.636768 47.5023," \
+  "7.636783 47.502277," \
+  "7.636805 47.50225," \
+  "7.63683 47.50223," \
+  "7.636852 47.50221," \
+  "7.636873 47.50219," \
+  "7.636898 47.502167," \
+  "7.636928 47.50215," \
+  "7.636958 47.502136," \
+  "7.636995 47.50213," \
+  "7.63703 47.502117," \
+  "7.637065 47.50211," \
+  "7.637107 47.502106," \
+  "7.637145 47.5021," \
+  "7.6372 47.50211," \
+  "7.637233 47.502117," \
+  "7.637268 47.502125," \
+  "7.6373 47.50213," \
+  "7.637352 47.502148," \
+  "7.637393 47.50216," \
+  "7.637433 47.502163," \
+  "7.637473 47.50217," \
+  "7.637507 47.50218," \
+  "7.637537 47.502186," \
+  "7.637575 47.502193," \
+  "7.637613 47.502197," \
+  "7.637658 47.50221," \
+  "7.637702 47.502216," \
+  "7.637747 47.50222," \
+  "7.637788 47.502228," \
+  "7.637833 47.502235," \
+  "7.63788 47.502243," \
+  "7.637928 47.502247," \
+  "7.637978 47.502247," \
+  "7.638028 47.502247," \
+  "7.638077 47.50224," \
+  "7.638118 47.502228," \
+  "7.638165 47.502216," \
+  "7.638218 47.502216," \
+  "7.638275 47.50221," \
+  "7.63833 47.502197," \
+  "7.63837 47.50218," \
+  "7.638423 47.502167," \
+  "7.638468 47.50215," \
+  "7.638508 47.502136," \
+  "7.638553 47.502125," \
+  "7.638593 47.502113," \
+  "7.638638 47.5021," \
+  "7.638678 47.502087," \
+  "7.638725 47.502083," \
+  "7.638772 47.502075," \
+  "7.638818 47.502064," \
+  "7.638863 47.502056," \
+  "7.638905 47.502045," \
+  "7.638952 47.50203," \
+  "7.638993 47.502014," \
+  "7.639037 47.502003," \
+  "7.639083 47.501995," \
+  "7.639132 47.50199," \
+  "7.639172 47.50198," \
+  "7.639217 47.501972," \
+  "7.63926 47.501965," \
+  "7.639308 47.50196," \
+  "7.639357 47.501953," \
+  "7.639403 47.501945," \
+  "7.63945 47.501934," \
+  "7.639492 47.501923," \
+  "7.639537 47.501907," \
+  "7.63958 47.50189," \
+  "7.639623 47.501877," \
+  "7.639662 47.501858," \
+  "7.639697 47.501835," \
+  "7.639728 47.50181," \
+  "7.63976 47.50178," \
+  "7.639778 47.501755," \
+  "7.6398 47.50173," \
+  "7.639825 47.501713," \
+  "7.63985 47.501686," \
+  "7.639865 47.501656," \
+  "7.639877 47.50162," \
+  "7.639892 47.501587," \
+  "7.639903 47.501556," \
+  "7.639907 47.501522," \
+  "7.63991 47.501495," \
+  "7.639912 47.50147," \
+  "7.639908 47.50145," \
+  "7.639902 47.501427," \
+  "7.639897 47.501408," \
+  "7.639893 47.501385," \
+  "7.639888 47.50136," \
+  "7.639882 47.50133," \
+  "7.639872 47.501305," \
+  "7.639857 47.501278," \
+  "7.639838 47.50125," \
+  "7.63982 47.501225," \
+  "7.639795 47.501198," \
+  "7.639772 47.50116," \
+  "7.639762 47.50113," \
+  "7.639745 47.5011," \
+  "7.639727 47.501072," \
+  "7.639712 47.501045," \
+  "7.639693 47.50102," \
+  "7.639673 47.500988," \
+  "7.639657 47.500954," \
+  "7.639635 47.500927," \
+  "7.639615 47.500896," \
+  "7.639597 47.500866," \
+  "7.63957 47.500824," \
+  "7.639548 47.50078," \
+  "7.63952 47.50075," \
+  "7.6395 47.500725," \
+  "7.639473 47.5007," \
+  "7.639447 47.50067," \
+  "7.639415 47.50064," \
+  "7.639392 47.500618," \
+  "7.639368 47.500595," \
+  "7.639348 47.500576," \
+  "7.639323 47.50052," \
+  "7.639293 47.500477," \
+  "7.639267 47.500446," \
+  "7.639227 47.500412," \
+  "7.639197 47.50038," \
+  "7.639175 47.500347," \
+  "7.639155 47.500317," \
+  "7.639128 47.500294," \
+  "7.639093 47.50027," \
+  "7.63906 47.50025," \
+  "7.639035 47.50023," \
+  "7.639 47.500202," \
+  "7.63897 47.500175," \
+  "7.638935 47.50015," \
+  "7.63891 47.50012," \
+  "7.638885 47.5001," \
+  "7.638857 47.500076," \
+  "7.638827 47.50006," \
+  "7.638788 47.500046," \
+  "7.638755 47.500027," \
+  "7.638715 47.500004," \
+  "7.638682 47.49999," \
+  "7.638648 47.49996," \
+  "7.638613 47.499943," \
+  "7.638578 47.49992," \
+  "7.63854 47.499893," \
+  "7.6385 47.499874," \
+  "7.63846 47.49985," \
+  "7.638422 47.499832," \
+  "7.638393 47.499817," \
+  "7.638357 47.49979," \
+  "7.638312 47.499763," \
+  "7.638273 47.499744," \
+  "7.63823 47.49972," \
+  "7.638188 47.4997," \
+  "7.63816 47.499683," \
+  "7.638137 47.49966," \
+  "7.63811 47.49964," \
+  "7.6381 47.499615," \
+  "7.638078 47.49959," \
+  "7.638052 47.49956," \
+  "7.638025 47.499535," \
+  "7.638002 47.499516," \
+  "7.637965 47.499496," \
+  "7.637933 47.49947," \
+  "7.637905 47.499447," \
+  "7.637883 47.499413," \
+  "7.63787 47.49939," \
+  "7.637858 47.49936," \
+  "7.637852 47.49933," \
+  "7.637853 47.499302," \
+  "7.637862 47.499275," \
+  "7.637887 47.49926," \
+  "7.637913 47.499245," \
+  "7.637948 47.49923," \
+  "7.637983 47.49922," \
+  "7.63803 47.499218," \
+  "7.638082 47.499218," \
+  "7.63813 47.499214," \
+  "7.638175 47.49921," \
+  "7.638217 47.499207," \
+  "7.638258 47.499195," \
+  "7.638302 47.49919," \
+  "7.638348 47.499187," \
+  "7.638395 47.499187," \
+  "7.638447 47.499187," \
+  "7.63849 47.49918," \
+  "7.63854 47.499176," \
+  "7.63859 47.49917," \
+  "7.638647 47.49917," \
+  "7.638697 47.499165," \
+  "7.638738 47.499153," \
+  "7.63878 47.49914," \
+  "7.63883 47.499126," \
+  "7.63888 47.49912," \
+  "7.638928 47.49911," \
+  "7.638975 47.499092," \
+  "7.639025 47.499077," \
+  "7.63907 47.49906," \
+  "7.639118 47.499046," \
+  "7.639162 47.49903," \
+  "7.639203 47.49901," \
+  "7.639257 47.499," \
+  "7.639308 47.49899," \
+  "7.63935 47.498974," \
+  "7.639397 47.498962," \
+  "7.639447 47.498955," \
+  "7.639493 47.49894," \
+  "7.639547 47.49893," \
+  "7.6396 47.49892," \
+  "7.639652 47.49891," \
+  "7.639695 47.498898," \
+  "7.639735 47.49888," \
+  "7.639783 47.49887," \
+  "7.63983 47.498856," \
+  "7.639877 47.498837," \
+  "7.639915 47.498802," \
+  "7.639947 47.498764," \
+  "7.63997 47.49872," \
+  "7.639978 47.498684," \
+  "7.63998 47.49865," \
+  "7.639968 47.498615," \
+  "7.639952 47.498585," \
+  "7.639932 47.498547," \
+  "7.639917 47.498512," \
+  "7.639907 47.498486," \
+  "7.639897 47.49846," \
+  "7.63988 47.498432," \
+  "7.639865 47.498405," \
+  "7.639853 47.498383," \
+  "7.639835 47.498356," \
+  "7.63981 47.49832," \
+  "7.639777 47.498283," \
+  "7.639753 47.498253," \
+  "7.63973 47.498226," \
+  "7.639703 47.4982," \
+  "7.639675 47.498173," \
+  "7.639632 47.49814," \
+  "7.639588 47.4981," \
+  "7.639543 47.498062," \
+  "7.639498 47.498028," \
+  "7.639452 47.497993," \
+  "7.639412 47.497955," \
+  "7.639372 47.497925," \
+  "7.639335 47.497894," \
+  "7.639303 47.497868," \
+  "7.639272 47.49784," \
+  "7.639238 47.497818," \
+  "7.639208 47.4978," \
+  "7.639182 47.497784," \
+  "7.639157 47.497757," \
+  "7.639133 47.497734," \
+  "7.639097 47.497707," \
+  "7.639058 47.49768," \
+  "7.639008 47.497646," \
+  "7.638942 47.497597," \
+  "7.638897 47.49756," \
+  "7.638872 47.497536," \
+  "7.638843 47.497517," \
+  "7.638808 47.49749," \
+  "7.638765 47.497467," \
+  "7.638723 47.497448," \
+  "7.638648 47.497417," \
+  "7.638588 47.4974," \
+  "7.638533 47.497375," \
+  "7.638482 47.49735," \
+  "7.63843 47.497314," \
+  "7.638392 47.49729," \
+  "7.638352 47.497265," \
+  "7.638307 47.497227," \
+  "7.63829 47.497196," \
+  "7.638247 47.49716," \
+  "7.638198 47.497124," \
+  "7.638163 47.4971," \
+  "7.638132 47.497078," \
+  "7.638102 47.497047," \
+  "7.63808 47.497032," \
+  "7.638048 47.497013," \
+  "7.638018 47.49699," \
+  "7.637988 47.49697," \
+  "7.63796 47.49695," \
+  "7.637935 47.496918," \
+  "7.637913 47.496883," \
+  "7.637872 47.49685," \
+  "7.637828 47.49682," \
+  "7.637792 47.496788," \
+  "7.637762 47.49675," \
+  "7.637737 47.496716," \
+  "7.637703 47.49668," \
+  "7.637673 47.496655," \
+  "7.63764 47.49662," \
+  "7.637608 47.496593," \
+  "7.63758 47.49656," \
+  "7.637558 47.496525," \
+  "7.637543 47.496487," \
+  "7.63754 47.496452," \
+  "7.637552 47.49642," \
+  "7.637578 47.49639," \
+  "7.63761 47.49637," \
+  "7.637643 47.49635," \
+  "7.637692 47.49634," \
+  "7.63775 47.49635," \
+  "7.63781 47.496357," \
+  "7.637872 47.49637," \
+  "7.637927 47.496372," \
+  "7.63798 47.496372," \
+  "7.638032 47.496376," \
+  "7.638098 47.496384," \
+  "7.638167 47.49639," \
+  "7.638223 47.4964," \
+  "7.638278 47.496407," \
+  "7.638337 47.49642," \
+  "7.638388 47.496426," \
+  "7.63844 47.496437," \
+  "7.638493 47.496445," \
+  "7.638543 47.49645," \
+  "7.6386 47.49645," \
+  "7.638658 47.496452," \
+  "7.638715 47.496456," \
+  "7.63877 47.496464," \
+  "7.63882 47.496464," \
+  "7.638867 47.496468," \
+  "7.638915 47.496468," \
+  "7.63897 47.496468," \
+  "7.639025 47.496464," \
+  "7.639087 47.49647," \
+  "7.639152 47.496483," \
+  "7.639218 47.496487," \
+  "7.639265 47.496494," \
+  "7.639315 47.4965," \
+  "7.639368 47.49651," \
+  "7.639403 47.496513," \
+  "7.639458 47.49653," \
+  "7.639493 47.496536," \
+  "7.639542 47.496555," \
+  "7.639587 47.496567," \
+  "7.639635 47.49658," \
+  "7.639687 47.496593," \
+  "7.639718 47.49661," \
+  "7.639762 47.496624," \
+  "7.639815 47.496643," \
+  "7.63987 47.496662," \
+  "7.639918 47.49668," \
+  "7.63996 47.496696," \
+  "7.64 47.49671," \
+  "7.64004 47.496723," \
+  "7.640088 47.496735," \
+  "7.640142 47.496742," \
+  "7.640187 47.496742," \
+  "7.640232 47.496742," \
+  "7.640295 47.496742," \
+  "7.640345 47.496742," \
+  "7.640395 47.496746," \
+  "7.64045 47.49675," \
+  "7.6405 47.49676," \
+  "7.640557 47.496773," \
+  "7.640612 47.496784," \
+  "7.64067 47.496803," \
+  "7.64072 47.49682," \
+  "7.640765 47.496834," \
+  "7.64081 47.496857," \
+  "7.640853 47.49688," \
+  "7.64089 47.496902," \
+  "7.640918 47.496914," \
+  "7.64095 47.49693," \
+  "7.640987 47.49695," \
+  "7.64102 47.496964," \
+  "7.64105 47.49698," \
+  "7.641077 47.496998," \
+  "7.641108 47.497017," \
+  "7.641158 47.497036," \
+  "7.641203 47.49705," \
+  "7.641253 47.497074," \
+  "7.6413 47.4971," \
+  "7.641347 47.497128," \
+  "7.641398 47.497154," \
+  "7.641458 47.49718," \
+  "7.641498 47.4972," \
+  "7.641538 47.497223," \
+  "7.641568 47.49725," \
+  "7.641607 47.497272," \
+  "7.641642 47.497288," \
+  "7.641685 47.497307," \
+  "7.641732 47.49733," \
+  "7.64178 47.49735," \
+  "7.641835 47.49737," \
+  "7.641892 47.497406," \
+  "7.641952 47.49744," \
+  "7.642008 47.497463," \
+  "7.642058 47.49748," \
+  "7.642115 47.4975," \
+  "7.642197 47.497528," \
+  "7.642265 47.49755," \
+  "7.64233 47.49758," \
+  "7.642392 47.497604," \
+  "7.642463 47.49763," \
+  "7.642517 47.497646," \
+  "7.642567 47.497654," \
+  "7.642625 47.49769," \
+  "7.642673 47.49769," \
+  "7.642718 47.49769," \
+  "7.642778 47.49771," \
+  "7.64284 47.497723," \
+  "7.642897 47.497738," \
+  "7.642955 47.49776," \
+  "7.64301 47.497784," \
+  "7.643073 47.497795," \
+  "7.643128 47.497818," \
+  "7.643173 47.497818," \
+  "7.643228 47.497837," \
+  "7.643277 47.49785," \
+  "7.643323 47.497852," \
+  "7.643365 47.497864," \
+  "7.643408 47.49788," \
+  "7.643458 47.497917," \
+  "7.643492 47.497932," \
+  "7.643533 47.49795," \
+  "7.64358 47.497993," \
+  "7.64361 47.498013," \
+  "7.643633 47.498024," \
+  "7.643657 47.49804," \
+  "7.643698 47.498077," \
+  "7.643732 47.49811," \
+  "7.64376 47.498154," \
+  "7.643785 47.498177," \
+  "7.64381 47.498203," \
+  "7.64383 47.498226," \
+  "7.643848 47.498253," \
+  "7.643872 47.498283," \
+  "7.643893 47.498314," \
+  "7.64391 47.498337," \
+  "7.643928 47.498363," \
+  "7.643947 47.498394," \
+  "7.643962 47.498417," \
+  "7.643978 47.498444," \
+  "7.644003 47.498478," \
+  "7.644027 47.498516," \
+  "7.64406 47.498558," \
+  "7.644082 47.498596," \
+  "7.644107 47.498634," \
+  "7.644133 47.49867," \
+  "7.644167 47.49871," \
+  "7.644198 47.498745," \
+  "7.64423 47.49878," \
+  "7.64426 47.498814," \
+  "7.644298 47.49885," \
+  "7.644333 47.498875," \
+  "7.64436 47.498894," \
+  "7.64441 47.498913," \
+  "7.644447 47.498936," \
+  "7.644483 47.498962," \
+  "7.644522 47.49899," \
+  "7.64456 47.499012," \
+  "7.644597 47.49903," \
+  "7.644635 47.499054," \
+  "7.644662 47.49907," \
+  "7.644687 47.49909," \
+  "7.644717 47.49911," \
+  "7.64474 47.49912," \
+  "7.644773 47.499138," \
+  "7.64481 47.499157," \
+  "7.644848 47.499172," \
+  "7.644882 47.49919," \
+  "7.644923 47.49922," \
+  "7.644955 47.49925," \
+  "7.644997 47.499283," \
+  "7.64503 47.499306," \
+  "7.645067 47.499332," \
+  "7.645092 47.499363," \
+  "7.645123 47.499386," \
+  "7.64516 47.499413," \
+  "7.645187 47.499435," \
+  "7.645223 47.49946," \
+  "7.645258 47.49949," \
+  "7.645307 47.49951," \
+  "7.645363 47.499535," \
+  "7.64542 47.49955," \
+  "7.645475 47.499554," \
+  "7.645537 47.49955," \
+  "7.645602 47.49955," \
+  "7.645657 47.499546," \
+  "7.645715 47.499554," \
+  "7.645782 47.49957," \
+  "7.645828 47.49958," \
+  "7.645853 47.4996," \
+  "7.645873 47.499622," \
+  "7.645902 47.499638," \
+  "7.645943 47.49964," \
+  "7.645978 47.499626," \
+  "7.645998 47.4996," \
+  "7.646022 47.49957," \
+  "7.64605 47.499535," \
+  "7.646073 47.4995," \
+  "7.646092 47.499462," \
+  "7.646112 47.49943," \
+  "7.646128 47.499405," \
+  "7.646143 47.499374," \
+  "7.646167 47.49934," \
+  "7.646193 47.499302," \
+  "7.64622 47.49927," \
+  "7.646242 47.49924," \
+  "7.646265 47.499214," \
+  "7.646307 47.49919," \
+  "7.646352 47.499165," \
+  "7.646387 47.49914," \
+  "7.646412 47.499107," \
+  "7.646455 47.49908," \
+  "7.646507 47.499054," \
+  "7.646552 47.499027," \
+  "7.646598 47.499012," \
+  "7.646643 47.49899," \
+  "7.646693 47.498966," \
+  "7.646752 47.498955," \
+  "7.646812 47.498943," \
+  "7.646878 47.49893," \
+  "7.64694 47.49892," \
+  "7.647008 47.498917," \
+  "7.647062 47.4989," \
+  "7.647108 47.498886," \
+  "7.647158 47.498875," \
+  "7.647195 47.498848," \
+  "7.647243 47.49882," \
+  "7.647295 47.498795," \
+  "7.64734 47.49877," \
+  "7.64738 47.49875," \
+  "7.64743 47.498722," \
+  "7.647475 47.4987," \
+  "7.647508 47.49867," \
+  "7.647547 47.498642," \
+  "7.64759 47.498615," \
+  "7.647617 47.49859," \
+  "7.647633 47.49855," \
+  "7.647647 47.498524," \
+  "7.647685 47.4985," \
+  "7.647723 47.49848," \
+  "7.64774 47.498455," \
+  "7.64775 47.49843," \
+  "7.647762 47.498398," \
+  "7.647783 47.49837," \
+  "7.647808 47.49835," \
+  "7.647835 47.49833," \
+  "7.647868 47.49829," \
+  "7.647902 47.49827," \
+  "7.64794 47.49825," \
+  "7.647973 47.498226," \
+  "7.648005 47.49821," \
+  "7.648042 47.498184," \
+  "7.648078 47.49816," \
+  "7.648107 47.49814," \
+  "7.648125 47.49812," \
+  "7.648148 47.498093," \
+  "7.648158 47.49806," \
+  "7.648163 47.49803," \
+  "7.64816 47.498," \
+  "7.648153 47.49797," \
+  "7.648138 47.49794," \
+  "7.648122 47.49791," \
+  "7.648117 47.497887," \
+  "7.648102 47.497864," \
+  "7.64809 47.49784," \
+  "7.648077 47.497814," \
+  "7.648058 47.49778," \
+  "7.648047 47.49775," \
+  "7.648042 47.49772," \
+  "7.648043 47.497696," \
+  "7.648047 47.497677," \
+  "7.64804 47.497654," \
+  "7.648032 47.497627," \
+  "7.648017 47.4976," \
+  "7.648005 47.49757," \
+  "7.647973 47.497528," \
+  "7.647962 47.497494," \
+  "7.647948 47.49746," \
+  "7.647943 47.49743," \
+  "7.647933 47.497406," \
+  "7.647928 47.497375," \
+  "7.647923 47.497353," \
+  "7.647908 47.497322," \
+  "7.647878 47.497295," \
+  "7.647853 47.49727," \
+  "7.647828 47.49724," \
+  "7.647818 47.497208," \
+  "7.647805 47.49718," \
+  "7.647793 47.497158," \
+  "7.647773 47.49713," \
+  "7.64776 47.4971," \
+  "7.647742 47.497078," \
+  "7.647745 47.49706," \
+  "7.647767 47.497047," \
+  "7.6478 47.497044," \
+  "7.647827 47.49704," \
+  "7.647855 47.49703," \
+  "7.64788 47.49702," \
+  "7.647907 47.497005," \
+  "7.647928 47.496986," \
+  "7.647943 47.496967," \
+  "7.64796 47.496952," \
+  "7.647968 47.49693," \
+  "7.64798 47.496902," \
+  "7.647988 47.496883," \
+  "7.648 47.49686," \
+  "7.64801 47.496838," \
+  "7.648018 47.496815," \
+  "7.648025 47.49679," \
+  "7.648033 47.49677," \
+  "7.64804 47.49675," \
+  "7.64805 47.496727," \
+  "7.648063 47.49671," \
+  "7.648073 47.496693," \
+  "7.648083 47.496674," \
+  "7.648097 47.49665," \
+  "7.648113 47.496628," \
+  "7.648133 47.49661," \
+  "7.64815 47.496586," \
+  "7.648162 47.496563," \
+  "7.648168 47.496536," \
+  "7.648172 47.49651," \
+  "7.648188 47.49648," \
+  "7.648192 47.496456," \
+  "7.648208 47.496433," \
+  "7.648225 47.496414," \
+  "7.648248 47.496395," \
+  "7.64826 47.496376," \
+  "7.64827 47.496353," \
+  "7.648277 47.496334," \
+  "7.648287 47.496307," \
+  "7.648302 47.496277," \
+  "7.648318 47.496246," \
+  "7.648337 47.496216," \
+  "7.648348 47.49619," \
+  "7.648358 47.496166," \
+  "7.648363 47.496143," \
+  "7.648375 47.496117," \
+  "7.648387 47.49609," \
+  "7.648402 47.496063," \
+  "7.648412 47.496037," \
+  "7.64842 47.496017," \
+  "7.648433 47.495995," \
+  "7.648445 47.495968," \
+  "7.648457 47.49594," \
+  "7.648463 47.495914," \
+  "7.64846 47.495888," \
+  "7.648457 47.495865," \
+  "7.648453 47.495842," \
+  "7.648453 47.49581," \
+  "7.648452 47.49579," \
+  "7.64846 47.495766," \
+  "7.648472 47.49574," \
+  "7.648467 47.495705," \
+  "7.648467 47.495663," \
+  "7.648458 47.49562," \
+  "7.648448 47.495583," \
+  "7.648445 47.495556," \
+  "7.64844 47.49554," \
+  "7.648435 47.49553," \
+  "7.648437 47.49552," \
+  "7.648435 47.495514," \
+  "7.648433 47.495506," \
+  "7.648433 47.495483," \
+  "7.648438 47.49546," \
+  "7.648445 47.49544," \
+  "7.648447 47.49542," \
+  "7.64845 47.495396," \
+  "7.648457 47.495373," \
+  "7.648467 47.495354," \
+  "7.648468 47.495335," \
+  "7.648475 47.495308," \
+  "7.648475 47.495277," \
+  "7.64848 47.495247," \
+  "7.648497 47.495213," \
+  "7.648505 47.49518," \
+  "7.648508 47.49514," \
+  "7.648513 47.495106," \
+  "7.648527 47.495075," \
+  "7.648537 47.495052," \
+  "7.648538 47.49502," \
+  "7.648535 47.49499," \
+  "7.64855 47.49496," \
+  "7.648568 47.494934," \
+  "7.648577 47.494904," \
+  "7.64859 47.49487," \
+  "7.648585 47.494843," \
+  "7.648595 47.494816," \
+  "7.648603 47.494793," \
+  "7.648618 47.494766," \
+  "7.648628 47.494743," \
+  "7.64864 47.494717," \
+  "7.648655 47.494698," \
+  "7.648675 47.49468," \
+  "7.648692 47.49466," \
+  "7.648713 47.49464," \
+  "7.648747 47.494633," \
+  "7.648763 47.494625," \
+  "7.648787 47.49462," \
+  "7.64881 47.49462," \
+  "7.648852 47.49462," \
+  "7.648883 47.494617," \
+  "7.648918 47.49463," \
+  "7.648943 47.494633," \
+  "7.648963 47.49464," \
+  "7.648993 47.49465," \
+  "7.649023 47.494663," \
+  "7.649058 47.49468," \
+  "7.649097 47.494682," \
+  "7.649133 47.494686," \
+  "7.649173 47.4947," \
+  "7.649208 47.494717," \
+  "7.649245 47.49473," \
+  "7.649278 47.49474," \
+  "7.649312 47.494736," \
+  "7.649342 47.49473," \
+  "7.649368 47.49472," \
+  "7.649402 47.494717," \
+  "7.649433 47.494713," \
+  "7.649473 47.494717," \
+  "7.64951 47.494724," \
+  "7.649542 47.494728," \
+  "7.649577 47.49473," \
+  "7.64961 47.494736," \
+  "7.649647 47.494743," \
+  "7.649688 47.49475," \
+  "7.649735 47.49476," \
+  "7.649777 47.494766," \
+  "7.649833 47.494778," \
+  "7.649873 47.49478," \
+  "7.649905 47.494778," \
+  "7.649937 47.494766," \
+  "7.649967 47.49476," \
+  "7.650007 47.49474," \
+  "7.65004 47.494724," \
+  "7.65008 47.494717," \
+  "7.650123 47.494713," \
+  "7.650167 47.494713," \
+  "7.650217 47.494717," \
+  "7.650255 47.494717," \
+  "7.650293 47.494713," \
+  "7.650335 47.494705," \
+  "7.650375 47.494705," \
+  "7.65042 47.49471," \
+  "7.650465 47.494713," \
+  "7.65051 47.49471," \
+  "7.650562 47.4947," \
+  "7.65061 47.494686," \
+  "7.650662 47.494682," \
+  "7.6507 47.494675," \
+  "7.650742 47.494663," \
+  "7.650783 47.494656," \
+  "7.650827 47.494648," \
+  "7.650865 47.494633," \
+  "7.650917 47.49461," \
+  "7.650963 47.49459," \
+  "7.65101 47.494583," \
+  "7.651067 47.494576," \
+  "7.651102 47.494564," \
+  "7.65113 47.494545," \
+  "7.65116 47.494526," \
+  "7.651195 47.494507," \
+  "7.651223 47.49448," \
+  "7.651247 47.49446," \
+  "7.651275 47.494442," \
+  "7.651298 47.494423," \
+  "7.65133 47.494404," \
+  "7.651357 47.49439," \
+  "7.651383 47.494373," \
+  "7.651408 47.49436," \
+  "7.651438 47.494347," \
+  "7.651462 47.494335," \
+  "7.651483 47.494324," \
+  "7.651508 47.494316," \
+  "7.65153 47.494305," \
+  "7.651553 47.494293," \
+  "7.651575 47.494286," \
+  "7.651597 47.494274," \
+  "7.651622 47.494267," \
+  "7.651647 47.49426," \
+  "7.65167 47.494244," \
+  "7.6517 47.494236," \
+  "7.651728 47.494225," \
+  "7.651755 47.494217," \
+  "7.65178 47.49421," \
+  "7.651805 47.4942," \
+  "7.651825 47.49419," \
+  "7.651853 47.494186," \
+  "7.65188 47.49418," \
+  "7.651905 47.494167," \
+  "7.651933 47.494164," \
+  "7.651965 47.494164," \
+  "7.651997 47.494156," \
+  "7.652028 47.49415," \
+  "7.652057 47.49414," \
+  "7.652087 47.494133," \
+  "7.652125 47.49412," \
+  "7.65216 47.494118," \
+  "7.652193 47.49411," \
+  "7.652227 47.494102," \
+  "7.652253 47.49409," \
+  "7.652283 47.494083," \
+  "7.652312 47.494072," \
+  "7.652342 47.494064," \
+  "7.652372 47.49406," \
+  "7.652398 47.494053," \
+  "7.652422 47.494045," \
+  "7.652452 47.494038," \
+  "7.652482 47.494034," \
+  "7.652508 47.494026," \
+  "7.652532 47.494022," \
+  "7.652557 47.49401," \
+  "7.652585 47.494003," \
+  "7.652615 47.493996," \
+  "7.652638 47.493984," \
+  "7.652667 47.493973," \
+  "7.652693 47.49396," \
+  "7.652722 47.493954," \
+  "7.65275 47.493942," \
+  "7.652775 47.493927," \
+  "7.652805 47.493916," \
+  "7.652835 47.493904," \
+  "7.65286 47.493893," \
+  "7.652867 47.49387," \
+  "7.65288 47.493847," \
+  "7.652897 47.49383," \
+  "7.652935 47.493835," \
+  "7.65297 47.49383," \
+  "7.65301 47.49382," \
+  "7.653052 47.49381," \
+  "7.653092 47.493793," \
+  "7.653133 47.49378," \
+  "7.65318 47.493767," \
+  "7.653222 47.49375," \
+  "7.65326 47.493736," \
+  "7.653303 47.493713," \
+  "7.653345 47.493694," \
+  "7.653388 47.49367," \
+  "7.653435 47.493652," \
+  "7.653482 47.493633," \
+  "7.653527 47.493614," \
+  "7.653573 47.4936," \
+  "7.653617 47.493584," \
+  "7.653663 47.49357," \
+  "7.653708 47.49355," \
+  "7.653753 47.493534," \
+  "7.653802 47.49352," \
+  "7.653847 47.4935," \
+  "7.653892 47.49349," \
+  "7.65394 47.493473," \
+  "7.653983 47.493458," \
+  "7.654028 47.493443," \
+  "7.654078 47.49343," \
+  "7.654125 47.49342," \
+  "7.654173 47.49341," \
+  "7.65422 47.493397," \
+  "7.654262 47.49338," \
+  "7.654305 47.49337," \
+  "7.654347 47.49336," \
+  "7.654388 47.493343," \
+  "7.654428 47.49333," \
+  "7.65447 47.493317," \
+  "7.65451 47.493305," \
+  "7.65455 47.493294," \
+  "7.654587 47.493282," \
+  "7.654622 47.49327," \
+  "7.654662 47.493263," \
+  "7.6547 47.49325," \
+  "7.654737 47.493237," \
+  "7.654777 47.49323," \
+  "7.654818 47.493217," \
+  "7.654858 47.49321," \
+  "7.654893 47.4932," \
+  "7.654935 47.493195," \
+  "7.654975 47.493183," \
+  "7.655013 47.49317," \
+  "7.655053 47.493156," \
+  "7.655097 47.49315," \
+  "7.655137 47.49314," \
+  "7.655177 47.493134," \
+  "7.655203 47.49312," \
+  "7.655238 47.49311," \
+  "7.655282 47.493107," \
+  "7.65532 47.4931," \
+  "7.65536 47.493088," \
+  "7.655398 47.493076," \
+  "7.65544 47.493065," \
+  "7.65548 47.493057," \
+  "7.655517 47.493046," \
+  "7.655555 47.49304," \
+  "7.655597 47.49303," \
+  "7.655638 47.493027," \
+  "7.65568 47.49302," \
+  "7.655723 47.49301," \
+  "7.655767 47.493004," \
+  "7.655812 47.492996," \
+  "7.655853 47.49299," \
+  "7.65589 47.492977," \
+  "7.655928 47.49296," \
+  "7.65597 47.49295," \
+  "7.656008 47.492935," \
+  "7.656043 47.49292," \
+  "7.656082 47.492905," \
+  "7.656115 47.49289," \
+  "7.656145 47.492874," \
+  "7.656173 47.49285," \
+  "7.6562 47.49283," \
+  "7.656227 47.49281," \
+  "7.656258 47.492794," \
+  "7.65628 47.49278," \
+  "7.656305 47.492764," \
+  "7.656325 47.492744," \
+  "7.656335 47.49272," \
+  "7.656342 47.492695," \
+  "7.656353 47.492672," \
+  "7.656362 47.49265," \
+  "7.656368 47.492626," \
+  "7.656373 47.492603," \
+  "7.656382 47.49258," \
+  "7.656395 47.492554," \
+  "7.65641 47.49253," \
+  "7.656425 47.492504," \
+  "7.656433 47.49249," \
+  "7.656457 47.49246," \
+  "7.656475 47.492428," \
+  "7.656495 47.492405," \
+  "7.656508 47.492382," \
+  "7.656523 47.492355," \
+  "7.656528 47.49233," \
+  "7.656545 47.49229," \
+  "7.656568 47.492264," \
+  "7.65658 47.492233," \
+  "7.656595 47.49221," \
+  "7.65662 47.49218," \
+  "7.656637 47.49215," \
+  "7.656665 47.492123," \
+  "7.656692 47.492104," \
+  "7.656725 47.49207," \
+  "7.656745 47.49204," \
+  "7.656767 47.492016," \
+  "7.656783 47.491997," \
+  "7.656812 47.49197," \
+  "7.65685 47.49195," \
+  "7.656882 47.491932," \
+  "7.6569 47.4919," \
+  "7.656927 47.491882," \
+  "7.656955 47.49186," \
+  "7.656975 47.491844," \
+  "7.656997 47.49182," \
+  "7.657017 47.4918," \
+  "7.657035 47.49177," \
+  "7.657057 47.49174," \
+  "7.657078 47.491726," \
+  "7.657093 47.491707," \
+  "7.657112 47.491688," \
+  "7.65713 47.491657," \
+  "7.657137 47.491627," \
+  "7.657148 47.491596," \
+  "7.657168 47.491566," \
+  "7.657183 47.491524," \
+  "7.6572 47.491486," \
+  "7.6572 47.49146," \
+  "7.65721 47.49143," \
+  "7.65722 47.491394," \
+  "7.657225 47.491367," \
+  "7.657235 47.491337," \
+  "7.657245 47.491318," \
+  "7.657248 47.491283," \
+  "7.65724 47.491257," \
+  "7.657243 47.491234," \
+  "7.657253 47.491207," \
+  "7.65727 47.491184," \
+  "7.657288 47.491158," \
+  "7.657303 47.491127," \
+  "7.657325 47.491096," \
+  "7.657325 47.49106," \
+  "7.657338 47.491028," \
+  "7.657348 47.49099," \
+  "7.657358 47.49095," \
+  "7.65737 47.490913," \
+  "7.657377 47.49088," \
+  "7.657392 47.49085," \
+  "7.657407 47.490818," \
+  "7.657405 47.490788," \
+  "7.657405 47.490753," \
+  "7.657413 47.490726," \
+  "7.657427 47.490704," \
+  "7.657428 47.490677," \
+  "7.657428 47.490646," \
+  "7.657418 47.490612," \
+  "7.657417 47.490578," \
+  "7.657423 47.490543," \
+  "7.657427 47.49051," \
+  "7.657435 47.490475," \
+  "7.65744 47.49044," \
+  "7.657438 47.490406," \
+  "7.65743 47.490356," \
+  "7.657425 47.490322," \
+  "7.657428 47.49029," \
+  "7.657432 47.490253," \
+  "7.657433 47.490215," \
+  "7.657437 47.490185," \
+  "7.657437 47.49015," \
+  "7.657437 47.490116," \
+  "7.65744 47.490074," \
+  "7.657455 47.490044," \
+  "7.657472 47.490017," \
+  "7.657493 47.489983," \
+  "7.657515 47.489952," \
+  "7.657533 47.489914," \
+  "7.657552 47.48989," \
+  "7.657573 47.489864," \
+  "7.657595 47.489838," \
+  "7.657613 47.48981," \
+  "7.657632 47.489784," \
+  "7.657653 47.489758," \
+  "7.657677 47.48973," \
+  "7.657695 47.4897," \
+  "7.657718 47.489674," \
+  "7.65774 47.489647," \
+  "7.657763 47.489624," \
+  "7.65778 47.489597," \
+  "7.657795 47.48957," \
+  "7.65782 47.489536," \
+  "7.657842 47.489517," \
+  "7.657862 47.48949," \
+  "7.657878 47.489464," \
+  "7.657893 47.489433," \
+  "7.657908 47.489407," \
+  "7.657923 47.48938," \
+  "7.657947 47.489346," \
+  "7.657963 47.489323," \
+  "7.657978 47.489292," \
+  "7.65799 47.489254," \
+  "7.657995 47.48923," \
+  "7.658008 47.489204," \
+  "7.658027 47.489166," \
+  "7.65804 47.489147," \
+  "7.658055 47.48912," \
+  "7.658075 47.489098," \
+  "7.658097 47.48907," \
+  "7.658108 47.489048," \
+  "7.658123 47.48902," \
+  "7.658133 47.48899," \
+  "7.658143 47.488964," \
+  "7.658152 47.488934," \
+  "7.658158 47.488907," \
+  "7.65817 47.488876," \
+  "7.658187 47.48885," \
+  "7.6582 47.488823," \
+  "7.658212 47.48879," \
+  "7.658222 47.48877," \
+  "7.658237 47.488743," \
+  "7.658252 47.488716," \
+  "7.658268 47.48869," \
+  "7.658285 47.488667," \
+  "7.658298 47.488636," \
+  "7.658315 47.48861," \
+  "7.658337 47.48858," \
+  "7.658347 47.48855," \
+  "7.658358 47.488525," \
+  "7.658377 47.4885," \
+  "7.658393 47.48848," \
+  "7.658412 47.488453," \
+  "7.658432 47.488426," \
+  "7.658443 47.4884," \
+  "7.658462 47.488373," \
+  "7.658482 47.488346," \
+  "7.658498 47.48832," \
+  "7.658517 47.488293," \
+  "7.658535 47.48827," \
+  "7.658552 47.488243," \
+  "7.658568 47.488216," \
+  "7.658587 47.488194," \
+  "7.658605 47.48817," \
+  "7.658625 47.488148," \
+  "7.658632 47.488125," \
+  "7.658652 47.48811," \
+  "7.658662 47.488087," \
+  "7.658675 47.488056," \
+  "7.658692 47.48803," \
+  "7.658715 47.488007," \
+  "7.658742 47.487988," \
+  "7.658762 47.487965," \
+  "7.658783 47.48794," \
+  "7.658815 47.487926," \
+  "7.658843 47.487907," \
+  "7.658867 47.48789," \
+  "7.658892 47.48786," \
+  "7.65893 47.48784," \
+  "7.658957 47.487823," \
+  "7.658987 47.487804," \
+  "7.659015 47.487793," \
+  "7.659038 47.487774," \
+  "7.659063 47.487755," \
+  "7.659093 47.487736," \
+  "7.659123 47.487717," \
+  "7.659158 47.4877," \
+  "7.659193 47.48768," \
+  "7.659222 47.48767," \
+  "7.65926 47.48765," \
+  "7.659292 47.487637," \
+  "7.659318 47.48762," \
+  "7.659348 47.487606," \
+  "7.659378 47.48759," \
+  "7.659405 47.487576," \
+  "7.659433 47.487556," \
+  "7.659463 47.487537," \
+  "7.659498 47.48752," \
+  "7.659523 47.4875," \
+  "7.659552 47.487484," \
+  "7.659573 47.487473," \
+  "7.659602 47.48746," \
+  "7.659633 47.487446," \
+  "7.659663 47.487434," \
+  "7.659692 47.487423," \
+  "7.659717 47.487404," \
+  "7.659747 47.48739," \
+  "7.659778 47.48737," \
+  "7.65981 47.487354," \
+  "7.659843 47.487343," \
+  "7.659875 47.487324," \
+  "7.659902 47.48731," \
+  "7.659928 47.48729," \
+  "7.659948 47.487267," \
+  "7.659968 47.487244," \
+  "7.659988 47.48722," \
+  "7.660018 47.48721," \
+  "7.660047 47.487186," \
+  "7.66007 47.487167," \
+  "7.660097 47.48715," \
+  "7.660122 47.487133," \
+  "7.66015 47.487118," \
+  "7.660177 47.487103," \
+  "7.660203 47.487087," \
+  "7.660228 47.48707," \
+  "7.660253 47.487057," \
+  "7.66028 47.487034," \
+  "7.660302 47.487015," \
+  "7.660323 47.48699," \
+  "7.660348 47.486977," \
+  "7.660373 47.486954," \
+  "7.660395 47.486935," \
+  "7.660417 47.486916," \
+  "7.660435 47.486893," \
+  "7.660452 47.48687," \
+  "7.660468 47.486847," \
+  "7.660478 47.486816," \
+  "7.66049 47.4868," \
+  "7.660498 47.486774," \
+  "7.660507 47.486744," \
+  "7.660512 47.48672," \
+  "7.660513 47.48669," \
+  "7.660513 47.48666," \
+  "7.660522 47.486633," \
+  "7.660527 47.486607," \
+  "7.660528 47.48658," \
+  "7.660528 47.486557," \
+  "7.660528 47.48653," \
+  "7.660528 47.4865," \
+  "7.660528 47.48647," \
+  "7.660542 47.486446," \
+  "7.660538 47.48642," \
+  "7.660527 47.486393," \
+  "7.66052 47.486374," \
+  "7.660505 47.48635," \
+  "7.660478 47.48632," \
+  "7.660457 47.486298," \
+  "7.66044 47.48628," \
+  "7.660423 47.48626," \
+  "7.660408 47.486237," \
+  "7.660392 47.486214," \
+  "7.660375 47.486187," \
+  "7.660365 47.48617," \
+  "7.660353 47.48615," \
+  "7.660335 47.486126," \
+  "7.660323 47.48611," \
+  "7.660313 47.48609," \
+  "7.660303 47.486057," \
+  "7.660293 47.48603," \
+  "7.660285 47.48601," \
+  "7.660275 47.485996," \
+  "7.660265 47.485977," \
+  "7.660253 47.48595," \
+  "7.660238 47.485924," \
+  "7.660235 47.485905," \
+  "7.66023 47.485886," \
+  "7.660232 47.485863," \
+  "7.66023 47.485844," \
+  "7.660223 47.48582," \
+  "7.660215 47.485794," \
+  "7.66021 47.48577," \
+  "7.660205 47.48575," \
+  "7.660205 47.48573," \
+  "7.660213 47.485714," \
+  "7.660222 47.485706," \
+  "7.660225 47.485687," \
+  "7.66023 47.485672," \
+  "7.660232 47.485657," \
+  "7.66024 47.48564," \
+  "7.660247 47.485638," \
+  "7.66025 47.485626," \
+  "7.660253 47.485615," \
+  "7.660257 47.485596," \
+  "7.660262 47.48558," \
+  "7.660255 47.485554," \
+  "7.660247 47.48553," \
+  "7.660242 47.48551," \
+  "7.660242 47.485493," \
+  "7.660245 47.48548," \
+  "7.66026 47.485474," \
+  "7.660268 47.48546," \
+  "7.660277 47.485443," \
+  "7.660282 47.485428," \
+  "7.660292 47.485413," \
+  "7.660303 47.485397," \
+  "7.660322 47.48538," \
+  "7.660332 47.48536," \
+  "7.660343 47.485336," \
+  "7.66036 47.485313," \
+  "7.660377 47.48528," \
+  "7.660387 47.485245," \
+  "7.660392 47.48522," \
+  "7.66039 47.48519," \
+  "7.66038 47.485153," \
+  "7.660358 47.48512," \
+  "7.660358 47.485104," \
+  "7.660358 47.485077," \
+  "7.660355 47.48506," \
+  "7.660347 47.48504," \
+  "7.660332 47.485016," \
+  "7.660325 47.484997," \
+  "7.660317 47.484978," \
+  "7.660312 47.48496," \
+  "7.660305 47.484943," \
+  "7.660303 47.48493," \
+  "7.660298 47.484917," \
+  "7.660287 47.484898," \
+  "7.660273 47.484886," \
+  "7.660263 47.48487," \
+  "7.660255 47.484856," \
+  "7.660247 47.484833," \
+  "7.660252 47.48482," \
+  "7.660255 47.484802," \
+  "7.66025 47.48479," \
+  "7.660233 47.484768," \
+  "7.660225 47.484753," \
+  "7.660218 47.484737," \
+  "7.660207 47.484722," \
+  "7.660185 47.484707," \
+  "7.66016 47.484688," \
+  "7.660135 47.48467," \
+  "7.660105 47.484642," \
+  "7.660078 47.48462," \
+  "7.660063 47.484604," \
+  "7.660048 47.484592," \
+  "7.660038 47.48458," \
+  "7.660023 47.484573," \
+  "7.660003 47.484554," \
+  "7.659992 47.48454," \
+  "7.659978 47.484524," \
+  "7.659967 47.48451," \
+  "7.65996 47.48449," \
+  "7.659957 47.48447," \
+  "7.659948 47.484455," \
+  "7.659942 47.484444," \
+  "7.659925 47.484425," \
+  "7.659903 47.48441," \
+  "7.659892 47.484394," \
+  "7.65988 47.48438," \
+  "7.659863 47.484356," \
+  "7.659847 47.48433," \
+  "7.65983 47.484314," \
+  "7.659813 47.48429," \
+  "7.65979 47.484253," \
+  "7.659787 47.484234," \
+  "7.659778 47.48422," \
+  "7.659768 47.4842," \
+  "7.659755 47.48418," \
+  "7.65974 47.484165," \
+  "7.659725 47.484154," \
+  "7.659707 47.48414," \
+  "7.659693 47.48412," \
+  "7.659683 47.484108," \
+  "7.659672 47.484097," \
+  "7.659657 47.48408," \
+  "7.659643 47.484066," \
+  "7.659623 47.48405," \
+  "7.659595 47.48403," \
+  "7.65957 47.484016," \
+  "7.659482 47.483986," \
+  "7.659418 47.48398," \
+  "7.65937 47.48398," \
+  "7.659318 47.483974," \
+  "7.659267 47.483967," \
+  "7.659235 47.483963," \
+  "7.659213 47.483955," \
+  "7.659197 47.483948," \
+  "7.65917 47.483936," \
+  "7.659133 47.483925," \
+  "7.659105 47.48391," \
+  "7.659073 47.4839," \
+  "7.659043 47.483883," \
+  "7.659003 47.483864," \
+  "7.658967 47.48385," \
+  "7.658932 47.483833," \
+  "7.658893 47.483814," \
+  "7.658853 47.4838," \
+  "7.658818 47.483784," \
+  "7.658795 47.48377," \
+  "7.658765 47.48375," \
+  "7.658735 47.483727," \
+  "7.658698 47.483707," \
+  "7.658663 47.48369," \
+  "7.658625 47.48367," \
+  "7.658588 47.483646," \
+  "7.658552 47.48363," \
+  "7.658525 47.48362," \
+  "7.658497 47.483604," \
+  "7.658472 47.48359," \
+  "7.65844 47.483574," \
+  "7.658405 47.48356," \
+  "7.65837 47.48354," \
+  "7.658335 47.483517," \
+  "7.658307 47.4835," \
+  "7.658273 47.483486," \
+  "7.658253 47.483475," \
+  "7.658227 47.48346," \
+  "7.658207 47.483444," \
+  "7.658185 47.483437," \
+  "7.658145 47.483414," \
+  "7.658108 47.483387," \
+  "7.658075 47.483368," \
+  "7.658045 47.483345," \
+  "7.658013 47.483322," \
+  "7.657985 47.483303," \
+  "7.657955 47.483284," \
+  "7.657932 47.48327," \
+  "7.657908 47.483253," \
+  "7.657878 47.483234," \
+  "7.657857 47.48322," \
+  "7.657837 47.483204," \
+  "7.65782 47.483185," \
+  "7.6578 47.48316," \
+  "7.65778 47.483135," \
+  "7.65775 47.48311," \
+  "7.657753 47.4831," \
+  "7.657747 47.483086," \
+  "7.657732 47.48306," \
+  "7.657722 47.483036," \
+  "7.657703 47.483013," \
+  "7.657697 47.48299," \
+  "7.657692 47.482967," \
+  "7.657688 47.48295," \
+  "7.657682 47.48292," \
+  "7.657668 47.482903," \
+  "7.657638 47.48287," \
+  "7.657613 47.48285," \
+  "7.657587 47.48282," \
+  "7.657562 47.48279," \
+  "7.657545 47.482777," \
+  "7.657517 47.48275," \
+  "7.65749 47.482727," \
+  "7.657462 47.482708," \
+  "7.657438 47.48269," \
+  "7.657402 47.48266," \
+  "7.65737 47.48264," \
+  "7.657345 47.48262," \
+  "7.657313 47.482597," \
+  "7.657282 47.48258," \
+  "7.65725 47.48255," \
+  "7.65723 47.482525," \
+  "7.657223 47.4825," \
+  "7.657225 47.482475," \
+  "7.657223 47.482445," \
+  "7.657225 47.482414," \
+  "7.657228 47.482388," \
+  "7.657233 47.482365," \
+  "7.65724 47.48235," \
+  "7.657235 47.48232," \
+  "7.657222 47.48229," \
+  "7.657212 47.482265," \
+  "7.657187 47.48224," \
+  "7.657162 47.482212," \
+  "7.657138 47.48218," \
+  "7.65712 47.48215," \
+  "7.657105 47.482113," \
+  "7.657093 47.482082," \
+  "7.657082 47.48206," \
+  "7.657073 47.482037," \
+  "7.657062 47.482002," \
+  "7.657062 47.481968," \
+  "7.657062 47.481937," \
+  "7.657065 47.481907," \
+  "7.657073 47.481873," \
+  "7.657083 47.481842," \
+  "7.657092 47.481815," \
+  "7.657103 47.481773," \
+  "7.65711 47.481747," \
+  "7.657113 47.48172," \
+  "7.657118 47.481693," \
+  "7.657123 47.481663," \
+  "7.657133 47.48163," \
+  "7.657147 47.4816," \
+  "7.657162 47.48158," \
+  "7.657183 47.48155," \
+  "7.657202 47.48153," \
+  "7.657232 47.4815," \
+  "7.657255 47.48148," \
+  "7.65728 47.481453," \
+  "7.657298 47.481422," \
+  "7.657317 47.481396," \
+  "7.657335 47.481365," \
+  "7.657355 47.481342," \
+  "7.657387 47.48133," \
+  "7.657422 47.48131," \
+  "7.657452 47.481293," \
+  "7.657477 47.481266," \
+  "7.657497 47.481243," \
+  "7.657522 47.48121," \
+  "7.657532 47.481182," \
+  "7.657538 47.481155," \
+  "7.657552 47.48112," \
+  "7.657565 47.48108," \
+  "7.657575 47.481045," \
+  "7.65758 47.481007," \
+  "7.657588 47.480984," \
+  "7.65759 47.480938," \
+  "7.657603 47.48091," \
+  "7.657618 47.480873," \
+  "7.657638 47.48084," \
+  "7.657648 47.480797," \
+  "7.657663 47.480755," \
+  "7.657668 47.480717," \
+  "7.65767 47.480682," \
+  "7.657675 47.480648," \
+  "7.657682 47.480614," \
+  "7.657685 47.48058," \
+  "7.657693 47.480553," \
+  "7.657702 47.48052," \
+  "7.657715 47.480488," \
+  "7.657742 47.480446," \
+  "7.657753 47.480423," \
+  "7.657763 47.48039," \
+  "7.657778 47.48036," \
+  "7.657783 47.480324," \
+  "7.657785 47.480293," \
+  "7.65779 47.480263," \
+  "7.657788 47.48023," \
+  "7.657792 47.480194," \
+  "7.657785 47.480164," \
+  "7.657782 47.48013," \
+  "7.657788 47.4801," \
+  "7.657785 47.48007," \
+  "7.657783 47.48004," \
+  "7.657783 47.480003," \
+  "7.657785 47.47997," \
+  "7.657792 47.47994," \
+  "7.657798 47.479908," \
+  "7.657808 47.479874," \
+  "7.657827 47.47984," \
+  "7.657833 47.47981," \
+  "7.657845 47.479774," \
+  "7.657865 47.47974," \
+  "7.657885 47.479706," \
+  "7.657908 47.47967," \
+  "7.65793 47.47964," \
+  "7.657947 47.479614," \
+  "7.657953 47.479576," \
+  "7.657967 47.479538," \
+  "7.657985 47.47949," \
+  "7.657993 47.479458," \
+  "7.658007 47.479412," \
+  "7.65801 47.47938," \
+  "7.658013 47.47934," \
+  "7.65802 47.4793," \
+  "7.658027 47.479275," \
+  "7.658038 47.479233," \
+  "7.658048 47.4792," \
+  "7.658055 47.47916," \
+  "7.658078 47.479126," \
+  "7.658102 47.47909," \
+  "7.658103 47.479046," \
+  "7.658108 47.479004," \
+  "7.658127 47.478973," \
+  "7.658133 47.478935," \
+  "7.658142 47.47891," \
+  "7.658162 47.47887," \
+  "7.658178 47.478844," \
+  "7.658165 47.478806," \
+  "7.658135 47.47877," \
+  "7.658115 47.47874," \
+  "7.658107 47.478718," \
+  "7.658103 47.4787," \
+  "7.658087 47.478676," \
+  "7.658058 47.478664," \
+  "7.658023 47.47865," \
+  "7.657982 47.478638," \
+  "7.657933 47.478626," \
+  "7.657897 47.47861," \
+  "7.657853 47.478596," \
+  "7.657808 47.47859," \
+  "7.657765 47.478577," \
+  "7.657722 47.47856," \
+  "7.657688 47.478554," \
+  "7.657655 47.478554," \
+  "7.657623 47.47856," \
+  "7.657602 47.478577," \
+  "7.657587 47.478607," \
+  "7.657573 47.47863," \
+  "7.65755 47.47865," \
+  "7.657532 47.47867," \
+  "7.65752 47.478683," \
+  "7.657503 47.478687," \
+  "7.657488 47.478683," \
+  "7.657482 47.478672," \
+  "7.657477 47.47866," \
+  "7.65747 47.47865," \
+  "7.657457 47.47864," \
+  "7.657442 47.478626," \
+  "7.65743 47.478615," \
+  "7.657423 47.478603," \
+  "7.657407 47.478592," \
+  "7.657393 47.478577," \
+  "7.657375 47.47856," \
+  "7.657355 47.47855," \
+  "7.657342 47.47854," \
+  "7.657333 47.478527," \
+  "7.657317 47.47852," \
+  "7.6573 47.478504," \
+  "7.657283 47.478504," \
+  "7.657248 47.478493," \
+  "7.657215 47.478485," \
+  "7.657193 47.478493," \
+  "7.657172 47.478508," \
+  "7.65716 47.478523," \
+  "7.657157 47.47854," \
+  "7.657158 47.47856," \
+  "7.65716 47.478584," \
+  "7.657153 47.4786," \
+  "7.65715 47.478615," \
+  "7.657147 47.478622," \
+  "7.657142 47.478626," \
+  "7.657137 47.47862," \
+  "7.657123 47.478607," \
+  "7.657117 47.478603," \
+  "7.657105 47.478584," \
+  "7.657087 47.47856," \
+  "7.657062 47.478542," \
+  "7.657042 47.478527," \
+  "7.657025 47.47852," \
+  "7.657007 47.47851," \
+  "7.656985 47.478497," \
+  "7.656963 47.478477," \
+  "7.656938 47.47846," \
+  "7.656912 47.47844," \
+  "7.656888 47.478416," \
+  "7.656865 47.478397," \
+  "7.656842 47.478386," \
+  "7.656812 47.47837," \
+  "7.656772 47.47835," \
+  "7.65673 47.478336," \
+  "7.656688 47.478325," \
+  "7.656647 47.478313," \
+  "7.656607 47.478302," \
+  "7.656563 47.478294," \
+  "7.656515 47.47828," \
+  "7.656467 47.478264," \
+  "7.656417 47.47825," \
+  "7.656368 47.478233," \
+  "7.65633 47.478226," \
+  "7.65629 47.478214," \
+  "7.656248 47.478207," \
+  "7.65621 47.4782," \
+  "7.65617 47.478195," \
+  "7.656127 47.47819," \
+  "7.656077 47.478184," \
+  "7.656038 47.478176," \
+  "7.656003 47.47817," \
+  "7.655972 47.478157," \
+  "7.655938 47.47815," \
+  "7.655907 47.47815," \
+  "7.655867 47.47815," \
+  "7.655827 47.478153," \
+  "7.655787 47.478153," \
+  "7.655743 47.478153," \
+  "7.6557 47.478153," \
+  "7.65566 47.478153," \
+  "7.655623 47.478146," \
+  "7.655575 47.478138," \
+  "7.65554 47.47813," \
+  "7.655498 47.47812," \
+  "7.655458 47.47811," \
+  "7.655413 47.478096," \
+  "7.655373 47.47809," \
+  "7.655345 47.47809," \
+  "7.655312 47.478077," \
+  "7.65528 47.47807," \
+  "7.655243 47.478058," \
+  "7.655198 47.478046," \
+  "7.655148 47.47803," \
+  "7.6551 47.47802," \
+  "7.655052 47.47801," \
+  "7.65498 47.477985," \
+  "7.654918 47.477966," \
+  "7.654868 47.47795," \
+  "7.654815 47.477932," \
+  "7.654757 47.477905," \
+  "7.654708 47.477886," \
+  "7.654668 47.47787," \
+  "7.654612 47.47785," \
+  "7.654568 47.477837," \
+  "7.654527 47.477825," \
+  "7.654493 47.477818," \
+  "7.65446 47.477806," \
+  "7.654422 47.477787," \
+  "7.654383 47.477776," \
+  "7.654338 47.47776," \
+  "7.654293 47.47775," \
+  "7.654252 47.477737," \
+  "7.654207 47.477726," \
+  "7.65417 47.47772," \
+  "7.65413 47.477715," \
+  "7.65409 47.477703," \
+  "7.654047 47.47769," \
+  "7.654003 47.477684," \
+  "7.65396 47.477676," \
+  "7.653913 47.477673," \
+  "7.653875 47.47766," \
+  "7.653838 47.477657," \
+  "7.653797 47.477654," \
+  "7.653755 47.477646," \
+  "7.653713 47.477642," \
+  "7.653673 47.47764," \
+  "7.653628 47.477627," \
+  "7.653578 47.47762," \
+  "7.653528 47.47761," \
+  "7.653473 47.477596," \
+  "7.653423 47.47758," \
+  "7.653375 47.477573," \
+  "7.653328 47.477562," \
+  "7.653282 47.47756," \
+  "7.653245 47.47755," \
+  "7.6532 47.477547," \
+  "7.65315 47.477547," \
+  "7.6531 47.477543," \
+  "7.653058 47.47754," \
+  "7.652995 47.477528," \
+  "7.652937 47.47752," \
+  "7.652877 47.477505," \
+  "7.652815 47.477486," \
+  "7.652757 47.47748," \
+  "7.652692 47.477463," \
+  "7.652635 47.477455," \
+  "7.652573 47.477448," \
+  "7.652513 47.477448," \
+  "7.652462 47.477448," \
+  "7.652408 47.47745," \
+  "7.652353 47.47745," \
+  "7.6523 47.477455," \
+  "7.652248 47.477467," \
+  "7.652192 47.477474," \
+  "7.652137 47.47748," \
+  "7.65208 47.477497," \
+  "7.65201 47.477524," \
+  "7.65197 47.477543," \
+  "7.651922 47.477566," \
+  "7.651863 47.47759," \
+  "7.651822 47.477596," \
+  "7.651772 47.477608," \
+  "7.651722 47.47761," \
+  "7.651668 47.477615," \
+  "7.651612 47.477615," \
+  "7.651562 47.477615," \
+  "7.651513 47.47762," \
+  "7.651475 47.477615," \
+  "7.651447 47.47762," \
+  "7.651423 47.477623," \
+  "7.651388 47.477623," \
+  "7.651358 47.477627," \
+  "7.65133 47.47763," \
+  "7.651278 47.477623," \
+  "7.651237 47.47761," \
+  "7.651192 47.47761," \
+  "7.651142 47.477604," \
+  "7.651107 47.4776," \
+  "7.651075 47.4776," \
+  "7.651028 47.477596," \
+  "7.650978 47.47759," \
+  "7.650935 47.477585," \
+  "7.650895 47.47758," \
+  "7.650853 47.477577," \
+  "7.65081 47.47757," \
+  "7.650765 47.477566," \
+  "7.650718 47.47756," \
+  "7.650677 47.47755," \
+  "7.650635 47.47754," \
+  "7.650595 47.477524," \
+  "7.650552 47.477512," \
+  "7.650513 47.47751," \
+  "7.65047 47.477505," \
+  "7.65042 47.4775," \
+  "7.650367 47.4775," \
+  "7.650288 47.477512," \
+  "7.650227 47.477524," \
+  "7.650172 47.47753," \
+  "7.65011 47.477543," \
+  "7.650047 47.477543," \
+  "7.649998 47.477547," \
+  "7.649947 47.477554," \
+  "7.649913 47.477566," \
+  "7.649878 47.47757," \
+  "7.649835 47.477573," \
+  "7.649782 47.477573," \
+  "7.649725 47.477573," \
+  "7.649672 47.47758," \
+  "7.649622 47.477585," \
+  "7.64958 47.477585," \
+  "7.64953 47.47759," \
+  "7.649475 47.477585," \
+  "7.649433 47.47759," \
+  "7.649378 47.47759," \
+  "7.649333 47.47759," \
+  "7.649297 47.477596," \
+  "7.649263 47.477608," \
+  "7.649225 47.477623," \
+  "7.649198 47.47764," \
+  "7.649158 47.477654," \
+  "7.649128 47.477657," \
+  "7.649088 47.477665," \
+  "7.649045 47.477673," \
+  "7.64901 47.477676," \
+  "7.648982 47.477688," \
+  "7.648942 47.477695," \
+  "7.648905 47.477703," \
+  "7.64886 47.477707," \
+  "7.648817 47.477707," \
+  "7.648782 47.477707," \
+  "7.648732 47.477703," \
+  "7.648695 47.4777," \
+  "7.64866 47.47769," \
+  "7.648628 47.477684," \
+  "7.648582 47.477673," \
+  "7.64854 47.47766," \
+  "7.648508 47.477657," \
+  "7.648468 47.477654," \
+  "7.648428 47.47765," \
+  "7.64838 47.477646," \
+  "7.64833 47.47764," \
+  "7.648287 47.47764," \
+  "7.648247 47.477642," \
+  "7.648205 47.477646," \
+  "7.648158 47.477654," \
+  "7.648118 47.47766," \
+  "7.648072 47.47767," \
+  "7.648033 47.477676," \
+  "7.647978 47.47769," \
+  "7.647935 47.477703," \
+  "7.647892 47.477722," \
+  "7.647857 47.47774," \
+  "7.64782 47.477764," \
+  "7.64778 47.47779," \
+  "7.64775 47.477818," \
+  "7.647727 47.477844," \
+  "7.647705 47.477867," \
+  "7.64767 47.47789," \
+  "7.647633 47.477917," \
+  "7.647597 47.47794)"
+
+#define LS2 "LINESTRING (" \
+  "7.619772 47.50658," \
+  "7.619795 47.50658," \
+  "7.619822 47.506577," \
+  "7.619845 47.506577," \
+  "7.619875 47.50658," \
+  "7.619908 47.506577," \
+  "7.619948 47.50658," \
+  "7.619985 47.50658," \
+  "7.620023 47.50658," \
+  "7.620057 47.506577," \
+  "7.620085 47.506577," \
+  "7.620115 47.506573," \
+  "7.620145 47.50657," \
+  "7.62017 47.506565," \
+  "7.620195 47.50656," \
+  "7.620223 47.506557," \
+  "7.620248 47.506554," \
+  "7.620275 47.50655," \
+  "7.620305 47.506546," \
+  "7.620338 47.506542," \
+  "7.620365 47.506535," \
+  "7.620382 47.50654," \
+  "7.620407 47.506542," \
+  "7.620433 47.50655," \
+  "7.620463 47.506542," \
+  "7.620485 47.50653," \
+  "7.620517 47.506527," \
+  "7.620547 47.50652," \
+  "7.620573 47.5065," \
+  "7.6206 47.506493," \
+  "7.620625 47.506477," \
+  "7.620643 47.506462," \
+  "7.620665 47.50645," \
+  "7.62069 47.50643," \
+  "7.620708 47.506405," \
+  "7.62072 47.506382," \
+  "7.620728 47.506363," \
+  "7.620738 47.506336," \
+  "7.620745 47.506313," \
+  "7.620752 47.506294," \
+  "7.620757 47.50627," \
+  "7.620765 47.50625," \
+  "7.62076 47.506214," \
+  "7.620755 47.506184," \
+  "7.62075 47.50614," \
+  "7.620737 47.506104," \
+  "7.620742 47.506073," \
+  "7.620755 47.50604," \
+  "7.62076 47.50601," \
+  "7.620752 47.505978," \
+  "7.620742 47.505947," \
+  "7.620737 47.505913," \
+  "7.620732 47.505882," \
+  "7.620733 47.50585," \
+  "7.620743 47.50583," \
+  "7.620743 47.5058," \
+  "7.620745 47.505768," \
+  "7.620752 47.505733," \
+  "7.620758 47.5057," \
+  "7.620778 47.505672," \
+  "7.620795 47.50565," \
+  "7.620805 47.505615," \
+  "7.620812 47.50559," \
+  "7.620812 47.50556," \
+  "7.620818 47.50553," \
+  "7.620822 47.5055," \
+  "7.620838 47.50547," \
+  "7.62085 47.50544," \
+  "7.620847 47.505398," \
+  "7.620855 47.505375," \
+  "7.62086 47.50535," \
+  "7.620858 47.50532," \
+  "7.62086 47.505295," \
+  "7.62086 47.505264," \
+  "7.620862 47.505238," \
+  "7.620867 47.505215," \
+  "7.620872 47.50519," \
+  "7.62088 47.505165," \
+  "7.620897 47.50514," \
+  "7.620905 47.50512," \
+  "7.620922 47.505096," \
+  "7.62095 47.505074," \
+  "7.620973 47.505054," \
+  "7.621002 47.50503," \
+  "7.621022 47.50501," \
+  "7.621042 47.50498," \
+  "7.62106 47.504955," \
+  "7.621077 47.50493," \
+  "7.621093 47.5049," \
+  "7.621117 47.50488," \
+  "7.621138 47.50486," \
+  "7.621165 47.504845," \
+  "7.62119 47.504826," \
+  "7.621218 47.504807," \
+  "7.62124 47.504784," \
+  "7.621267 47.50476," \
+  "7.621297 47.504734," \
+  "7.62133 47.50471," \
+  "7.621368 47.50469," \
+  "7.621392 47.504673," \
+  "7.621413 47.50466," \
+  "7.62144 47.504646," \
+  "7.621468 47.50463," \
+  "7.621502 47.504612," \
+  "7.621525 47.504585," \
+  "7.621545 47.50456," \
+  "7.62156 47.50453," \
+  "7.621575 47.50451," \
+  "7.62159 47.504486," \
+  "7.62161 47.504467," \
+  "7.621637 47.50445," \
+  "7.621657 47.504433," \
+  "7.621683 47.504414," \
+  "7.621702 47.5044," \
+  "7.62172 47.50438," \
+  "7.621742 47.504364," \
+  "7.621767 47.50435," \
+  "7.621798 47.504333," \
+  "7.62183 47.50432," \
+  "7.621858 47.504295," \
+  "7.621887 47.50428," \
+  "7.621918 47.504265," \
+  "7.621943 47.504246," \
+  "7.621963 47.50423," \
+  "7.621982 47.50421," \
+  "7.622 47.50419," \
+  "7.622023 47.504173," \
+  "7.622057 47.50416," \
+  "7.622087 47.504147," \
+  "7.62212 47.50413," \
+  "7.622143 47.504116," \
+  "7.622173 47.5041," \
+  "7.62221 47.50409," \
+  "7.62224 47.50407," \
+  "7.62227 47.50405," \
+  "7.622302 47.50404," \
+  "7.622332 47.504025," \
+  "7.62236 47.504013," \
+  "7.622388 47.503994," \
+  "7.622418 47.50398," \
+  "7.622447 47.503963," \
+  "7.62247 47.50394," \
+  "7.622497 47.50392," \
+  "7.622525 47.5039," \
+  "7.622553 47.50388," \
+  "7.622578 47.503857," \
+  "7.622602 47.503838," \
+  "7.622622 47.503815," \
+  "7.622645 47.50379," \
+  "7.622668 47.503773," \
+  "7.622695 47.503754," \
+  "7.622723 47.503735," \
+  "7.622752 47.503716," \
+  "7.622787 47.503696," \
+  "7.622822 47.50368," \
+  "7.622858 47.503666," \
+  "7.622892 47.503647," \
+  "7.622923 47.503624," \
+  "7.622962 47.503605," \
+  "7.623003 47.503593," \
+  "7.62303 47.503574," \
+  "7.623058 47.503563," \
+  "7.623098 47.50355," \
+  "7.62314 47.503548," \
+  "7.623173 47.503536," \
+  "7.623203 47.503525," \
+  "7.623225 47.50351," \
+  "7.62325 47.503494," \
+  "7.623277 47.50348," \
+  "7.623307 47.503464," \
+  "7.623332 47.50345," \
+  "7.623357 47.50343," \
+  "7.623377 47.50341," \
+  "7.623403 47.50339," \
+  "7.623427 47.503376," \
+  "7.623455 47.50336," \
+  "7.623485 47.503345," \
+  "7.62351 47.503338," \
+  "7.623532 47.503323," \
+  "7.623557 47.503307," \
+  "7.623582 47.503292," \
+  "7.62361 47.50328," \
+  "7.623645 47.503273," \
+  "7.623682 47.50326," \
+  "7.623713 47.503246," \
+  "7.623752 47.50324," \
+  "7.623785 47.50323," \
+  "7.62382 47.50323," \
+  "7.623858 47.503242," \
+  "7.623882 47.503242," \
+  "7.623893 47.503242," \
+  "7.623907 47.503246," \
+  "7.623918 47.503258," \
+  "7.62392 47.503273," \
+  "7.623925 47.503292," \
+  "7.623937 47.503307," \
+  "7.623938 47.503326," \
+  "7.623937 47.50334," \
+  "7.623928 47.50336," \
+  "7.623923 47.503384," \
+  "7.623922 47.503407," \
+  "7.62391 47.503426," \
+  "7.623893 47.50345," \
+  "7.623863 47.503464," \
+  "7.623835 47.503487," \
+  "7.623803 47.50351," \
+  "7.623772 47.50353," \
+  "7.623747 47.50355," \
+  "7.623725 47.50357," \
+  "7.623702 47.503593," \
+  "7.623677 47.503616," \
+  "7.623657 47.503643," \
+  "7.623632 47.503666," \
+  "7.623605 47.503685," \
+  "7.623572 47.5037," \
+  "7.623533 47.50371," \
+  "7.623497 47.503727," \
+  "7.62347 47.503735," \
+  "7.623448 47.503742," \
+  "7.623427 47.50376," \
+  "7.623407 47.503784," \
+  "7.623383 47.503803," \
+  "7.623363 47.503822," \
+  "7.623342 47.50384," \
+  "7.623322 47.50386," \
+  "7.6233 47.503876," \
+  "7.623282 47.50389," \
+  "7.623263 47.503914," \
+  "7.623242 47.503937," \
+  "7.623217 47.50396," \
+  "7.623192 47.50398," \
+  "7.623168 47.503998," \
+  "7.62315 47.504013," \
+  "7.62313 47.504032," \
+  "7.623103 47.50405," \
+  "7.623078 47.504074," \
+  "7.623058 47.504097," \
+  "7.62304 47.504124," \
+  "7.623018 47.504147," \
+  "7.623005 47.504173," \
+  "7.622997 47.504196," \
+  "7.62299 47.504223," \
+  "7.62298 47.50425," \
+  "7.622973 47.504276," \
+  "7.622967 47.504314," \
+  "7.622957 47.50435," \
+  "7.622942 47.50438," \
+  "7.622927 47.504414," \
+  "7.62292 47.504448," \
+  "7.622915 47.50448," \
+  "7.622907 47.50451," \
+  "7.622893 47.50454," \
+  "7.622888 47.50457," \
+  "7.622888 47.504604," \
+  "7.622872 47.50463," \
+  "7.622848 47.504654," \
+  "7.62283 47.50468," \
+  "7.622817 47.504707," \
+  "7.62281 47.50473," \
+  "7.6228 47.504757," \
+  "7.622785 47.504784," \
+  "7.622768 47.50481," \
+  "7.62275 47.504837," \
+  "7.62274 47.504868," \
+  "7.622723 47.504887," \
+  "7.622718 47.504917," \
+  "7.622707 47.504948," \
+  "7.622695 47.50498," \
+  "7.62269 47.505," \
+  "7.622683 47.505028," \
+  "7.622678 47.50505," \
+  "7.622677 47.505077," \
+  "7.622675 47.5051," \
+  "7.622673 47.505123," \
+  "7.622673 47.505154," \
+  "7.622672 47.50519," \
+  "7.62267 47.505226," \
+  "7.622668 47.505257," \
+  "7.622675 47.505283," \
+  "7.622677 47.505302," \
+  "7.62268 47.50533," \
+  "7.622677 47.50535," \
+  "7.622668 47.505367," \
+  "7.622663 47.505394," \
+  "7.62266 47.505424," \
+  "7.622658 47.505447," \
+  "7.622653 47.505486," \
+  "7.62266 47.50552," \
+  "7.622677 47.505566," \
+  "7.622678 47.505596," \
+  "7.622678 47.505627," \
+  "7.622682 47.505653," \
+  "7.622695 47.505672," \
+  "7.622717 47.50569," \
+  "7.622758 47.505722," \
+  "7.622795 47.505733," \
+  "7.622827 47.505737," \
+  "7.622862 47.505753," \
+  "7.622903 47.505768," \
+  "7.622942 47.50578," \
+  "7.622968 47.505783," \
+  "7.623 47.505787," \
+  "7.623028 47.50578," \
+  "7.623058 47.50577," \
+  "7.62309 47.50576," \
+  "7.623127 47.505753," \
+  "7.62316 47.50574," \
+  "7.623192 47.505733," \
+  "7.623227 47.50573," \
+  "7.623258 47.50572," \
+  "7.623285 47.505703," \
+  "7.62331 47.50569," \
+  "7.623337 47.505684," \
+  "7.623363 47.505672," \
+  "7.623392 47.505657," \
+  "7.62342 47.505642," \
+  "7.623452 47.50563," \
+  "7.623482 47.505623," \
+  "7.623505 47.50561," \
+  "7.623523 47.505596," \
+  "7.623545 47.50559," \
+  "7.62357 47.505577," \
+  "7.623598 47.50556," \
+  "7.623637 47.505547," \
+  "7.623672 47.50553," \
+  "7.623697 47.505512," \
+  "7.623717 47.5055," \
+  "7.623748 47.505493," \
+  "7.623783 47.50549," \
+  "7.623828 47.50549," \
+  "7.623873 47.505486," \
+  "7.623908 47.505478," \
+  "7.623942 47.505466," \
+  "7.623968 47.505455," \
+  "7.623993 47.505444," \
+  "7.624015 47.505432," \
+  "7.62404 47.50542," \
+  "7.62407 47.50541," \
+  "7.624097 47.505398," \
+  "7.624125 47.505383," \
+  "7.624155 47.50537," \
+  "7.62418 47.50536," \
+  "7.62421 47.50535," \
+  "7.624243 47.505337," \
+  "7.624278 47.505318," \
+  "7.624312 47.505302," \
+  "7.624338 47.505287," \
+  "7.624372 47.505272," \
+  "7.62441 47.50526," \
+  "7.62446 47.50525," \
+  "7.624505 47.505238," \
+  "7.624532 47.505222," \
+  "7.624567 47.505215," \
+  "7.624593 47.5052," \
+  "7.624625 47.50519," \
+  "7.624653 47.505177," \
+  "7.62468 47.505165," \
+  "7.624702 47.505146," \
+  "7.624715 47.505123," \
+  "7.624738 47.5051," \
+  "7.624758 47.50508," \
+  "7.624777 47.505062," \
+  "7.62479 47.505047," \
+  "7.624807 47.505028," \
+  "7.624838 47.50501," \
+  "7.624862 47.504986," \
+  "7.62489 47.504963," \
+  "7.624907 47.504944," \
+  "7.624922 47.50492," \
+  "7.624933 47.504898," \
+  "7.624947 47.50487," \
+  "7.624957 47.504852," \
+  "7.624967 47.50483," \
+  "7.624975 47.50481," \
+  "7.62498 47.50479," \
+  "7.62499 47.504776," \
+  "7.625028 47.504753," \
+  "7.625058 47.504745," \
+  "7.625085 47.50473," \
+  "7.625108 47.50472," \
+  "7.625127 47.504704," \
+  "7.625148 47.504684," \
+  "7.625165 47.50467," \
+  "7.625185 47.504654," \
+  "7.62521 47.504642," \
+  "7.625233 47.504627," \
+  "7.625255 47.504616," \
+  "7.625282 47.504604," \
+  "7.625308 47.50459," \
+  "7.625337 47.504574," \
+  "7.625362 47.50456," \
+  "7.62539 47.504547," \
+  "7.625423 47.504536," \
+  "7.625452 47.504517," \
+  "7.625463 47.504486," \
+  "7.625502 47.50448," \
+  "7.625525 47.504467," \
+  "7.625552 47.504456," \
+  "7.625582 47.50445," \
+  "7.625612 47.504444," \
+  "7.625652 47.504444," \
+  "7.625683 47.504444," \
+  "7.625708 47.504444," \
+  "7.625725 47.50444," \
+  "7.625737 47.504448," \
+  "7.625752 47.50446," \
+  "7.625757 47.504475," \
+  "7.625763 47.50449," \
+  "7.625772 47.5045," \
+  "7.625782 47.50452," \
+  "7.625787 47.504536," \
+  "7.625783 47.50455," \
+  "7.62578 47.504574," \
+  "7.625772 47.504597," \
+  "7.625757 47.504616," \
+  "7.625743 47.50464," \
+  "7.625727 47.50466," \
+  "7.62571 47.504684," \
+  "7.625692 47.50471," \
+  "7.62569 47.504738," \
+  "7.625692 47.504765," \
+  "7.625697 47.504787," \
+  "7.625703 47.504807," \
+  "7.625702 47.504833," \
+  "7.625707 47.504856," \
+  "7.625715 47.50488," \
+  "7.625715 47.504906," \
+  "7.625722 47.50493," \
+  "7.625728 47.504948," \
+  "7.62573 47.50497," \
+  "7.625742 47.505," \
+  "7.625747 47.50503," \
+  "7.625758 47.50506," \
+  "7.625778 47.505093," \
+  "7.625793 47.505116," \
+  "7.625805 47.50514," \
+  "7.625808 47.50516," \
+  "7.625818 47.505188," \
+  "7.625837 47.505215," \
+  "7.625847 47.505238," \
+  "7.625857 47.505272," \
+  "7.62587 47.505306," \
+  "7.62588 47.50533," \
+  "7.625887 47.505352," \
+  "7.62589 47.50538," \
+  "7.625893 47.505398," \
+  "7.625902 47.505417," \
+  "7.625912 47.505436," \
+  "7.625923 47.505455," \
+  "7.62594 47.50548," \
+  "7.625955 47.50551," \
+  "7.625967 47.50554," \
+  "7.625982 47.505573," \
+  "7.626 47.505604," \
+  "7.62601 47.505627," \
+  "7.626022 47.505657," \
+  "7.626033 47.505684," \
+  "7.626048 47.50571," \
+  "7.626072 47.50574," \
+  "7.626092 47.50578," \
+  "7.626105 47.50581," \
+  "7.626118 47.505844," \
+  "7.626133 47.50588," \
+  "7.62615 47.505913," \
+  "7.626173 47.505943," \
+  "7.6262 47.505974," \
+  "7.626233 47.50601," \
+  "7.626257 47.50603," \
+  "7.626282 47.50605," \
+  "7.626308 47.50607," \
+  "7.626335 47.50609," \
+  "7.626363 47.506104," \
+  "7.626393 47.506123," \
+  "7.62642 47.506138," \
+  "7.626453 47.506153," \
+  "7.626492 47.50617," \
+  "7.626533 47.50618," \
+  "7.626578 47.50619," \
+  "7.626623 47.506195," \
+  "7.626658 47.50619," \
+  "7.626693 47.50618," \
+  "7.626725 47.50617," \
+  "7.626758 47.506157," \
+  "7.626788 47.50615," \
+  "7.626817 47.506134," \
+  "7.62684 47.50612," \
+  "7.62686 47.506104," \
+  "7.62687 47.506077," \
+  "7.62689 47.50606," \
+  "7.626918 47.50605," \
+  "7.626957 47.50605," \
+  "7.626995 47.506046," \
+  "7.627022 47.506035," \
+  "7.627047 47.506016," \
+  "7.627077 47.506004," \
+  "7.627102 47.505993," \
+  "7.627128 47.50598," \
+  "7.627152 47.505974," \
+  "7.62718 47.505974," \
+  "7.627207 47.505962," \
+  "7.627233 47.505947," \
+  "7.627257 47.50593," \
+  "7.627278 47.505917," \
+  "7.627298 47.5059," \
+  "7.627308 47.505882," \
+  "7.627328 47.505867," \
+  "7.62735 47.50585," \
+  "7.627375 47.50584," \
+  "7.627398 47.50583," \
+  "7.627417 47.505814," \
+  "7.627437 47.505795," \
+  "7.627458 47.505775," \
+  "7.627482 47.505756," \
+  "7.6275 47.505737," \
+  "7.62751 47.50572," \
+  "7.627523 47.5057," \
+  "7.62755 47.505684," \
+  "7.627572 47.505672," \
+  "7.627588 47.505653," \
+  "7.627622 47.505642," \
+  "7.627638 47.505627," \
+  "7.62765 47.505608," \
+  "7.627672 47.50559," \
+  "7.627695 47.505573," \
+  "7.627712 47.505558," \
+  "7.627732 47.50554," \
+  "7.627755 47.505524," \
+  "7.627778 47.50551," \
+  "7.627798 47.50549," \
+  "7.627822 47.50547," \
+  "7.627845 47.50546," \
+  "7.627872 47.505444," \
+  "7.627885 47.50542," \
+  "7.6279 47.505398," \
+  "7.627923 47.50538," \
+  "7.627948 47.505367," \
+  "7.627978 47.50535," \
+  "7.62801 47.50533," \
+  "7.628028 47.505306," \
+  "7.628038 47.50529," \
+  "7.628072 47.505283," \
+  "7.628092 47.505276," \
+  "7.628108 47.50526," \
+  "7.62813 47.50525," \
+  "7.628155 47.505234," \
+  "7.628178 47.505215," \
+  "7.628198 47.505203," \
+  "7.628212 47.50519," \
+  "7.628243 47.505177," \
+  "7.628283 47.50515," \
+  "7.628305 47.505127," \
+  "7.628327 47.505108," \
+  "7.628348 47.505096," \
+  "7.628372 47.50509," \
+  "7.628392 47.505077," \
+  "7.628407 47.505062," \
+  "7.62842 47.505047," \
+  "7.628433 47.50503," \
+  "7.628445 47.505016," \
+  "7.628458 47.505," \
+  "7.62847 47.504982," \
+  "7.628483 47.504967," \
+  "7.628495 47.504948," \
+  "7.628495 47.504917," \
+  "7.628505 47.5049," \
+  "7.628518 47.50489," \
+  "7.62852 47.504875," \
+  "7.628525 47.504864," \
+  "7.628532 47.50485," \
+  "7.62854 47.504833," \
+  "7.628545 47.50482," \
+  "7.628555 47.504807," \
+  "7.628565 47.50479," \
+  "7.628572 47.504776," \
+  "7.628582 47.50476," \
+  "7.628598 47.50475," \
+  "7.628608 47.504738," \
+  "7.628615 47.504723," \
+  "7.628628 47.504707," \
+  "7.62864 47.504692," \
+  "7.62865 47.504673," \
+  "7.62866 47.504654," \
+  "7.628667 47.50464," \
+  "7.628675 47.50462," \
+  "7.628678 47.504597," \
+  "7.628662 47.504566," \
+  "7.628665 47.504543," \
+  "7.62866 47.50452," \
+  "7.628667 47.504498," \
+  "7.628672 47.50447," \
+  "7.628673 47.504448," \
+  "7.628668 47.504417," \
+  "7.62867 47.50439," \
+  "7.628663 47.504364," \
+  "7.628653 47.504337," \
+  "7.628645 47.50431," \
+  "7.628645 47.504288," \
+  "7.628655 47.504265," \
+  "7.628662 47.50424," \
+  "7.628657 47.50421," \
+  "7.628652 47.504185," \
+  "7.62865 47.504154," \
+  "7.628642 47.504128," \
+  "7.628653 47.504112," \
+  "7.628675 47.5041," \
+  "7.628697 47.504086," \
+  "7.628722 47.50408," \
+  "7.62873 47.504066," \
+  "7.628732 47.50405," \
+  "7.62874 47.504044," \
+  "7.628752 47.504032," \
+  "7.62876 47.50402," \
+  "7.628762 47.504005," \
+  "7.628763 47.50399," \
+  "7.628765 47.50398," \
+  "7.628767 47.503967," \
+  "7.628775 47.503956," \
+  "7.628778 47.50394," \
+  "7.628783 47.503918," \
+  "7.628785 47.5039," \
+  "7.628787 47.50388," \
+  "7.62879 47.50386," \
+  "7.628802 47.503838," \
+  "7.628818 47.503815," \
+  "7.628832 47.503788," \
+  "7.628845 47.50376," \
+  "7.62886 47.50374," \
+  "7.62886 47.50371," \
+  "7.628857 47.50368," \
+  "7.628852 47.50366," \
+  "7.628855 47.503643," \
+  "7.628863 47.503624," \
+  "7.628878 47.50361," \
+  "7.628885 47.503586," \
+  "7.628887 47.50357," \
+  "7.628895 47.50355," \
+  "7.628903 47.50353," \
+  "7.62891 47.5035," \
+  "7.628923 47.503483," \
+  "7.628937 47.503468," \
+  "7.628947 47.503445," \
+  "7.628952 47.50342," \
+  "7.628958 47.5034," \
+  "7.628973 47.50338," \
+  "7.628995 47.50337," \
+  "7.629018 47.503353," \
+  "7.629035 47.50334," \
+  "7.62905 47.50333," \
+  "7.629057 47.50331," \
+  "7.62906 47.503284," \
+  "7.629063 47.503258," \
+  "7.629075 47.503227," \
+  "7.62909 47.503204," \
+  "7.629098 47.503174," \
+  "7.6291 47.503143," \
+  "7.629122 47.503124," \
+  "7.62913 47.503094," \
+  "7.629152 47.503082," \
+  "7.629168 47.503067," \
+  "7.629183 47.50305," \
+  "7.6292 47.503036," \
+  "7.629222 47.50302," \
+  "7.629243 47.50301," \
+  "7.62926 47.502995," \
+  "7.629267 47.50297," \
+  "7.629272 47.502953," \
+  "7.629288 47.502937," \
+  "7.629308 47.502926," \
+  "7.629318 47.50291," \
+  "7.62933 47.502876," \
+  "7.629352 47.50285," \
+  "7.629368 47.502827," \
+  "7.62938 47.502808," \
+  "7.629393 47.50279," \
+  "7.629402 47.50276," \
+  "7.629418 47.502743," \
+  "7.62944 47.502728," \
+  "7.629465 47.502712," \
+  "7.629483 47.502693," \
+  "7.629508 47.50268," \
+  "7.629537 47.502674," \
+  "7.629563 47.502663," \
+  "7.629578 47.502647," \
+  "7.629592 47.502632," \
+  "7.629602 47.502617," \
+  "7.629618 47.502605," \
+  "7.629635 47.502594," \
+  "7.629662 47.50258," \
+  "7.629683 47.502563," \
+  "7.629697 47.502552," \
+  "7.629703 47.502537," \
+  "7.629713 47.502518," \
+  "7.62973 47.502495," \
+  "7.62975 47.50247," \
+  "7.629763 47.50245," \
+  "7.629778 47.502434," \
+  "7.629788 47.50241," \
+  "7.629788 47.502388," \
+  "7.629793 47.502365," \
+  "7.629802 47.50235," \
+  "7.629807 47.502335," \
+  "7.629817 47.50232," \
+  "7.629833 47.502316," \
+  "7.629853 47.502316," \
+  "7.629868 47.502308," \
+  "7.62989 47.502308," \
+  "7.629912 47.50231," \
+  "7.629927 47.50231," \
+  "7.62994 47.502316," \
+  "7.629945 47.50232," \
+  "7.629952 47.502327," \
+  "7.629952 47.502335," \
+  "7.629948 47.502346," \
+  "7.629947 47.502357," \
+  "7.629945 47.502373," \
+  "7.629937 47.502388," \
+  "7.629933 47.502403," \
+  "7.629935 47.50242," \
+  "7.629933 47.502434," \
+  "7.629925 47.50245," \
+  "7.629927 47.502464," \
+  "7.629928 47.502483," \
+  "7.629928 47.502506," \
+  "7.629933 47.502525," \
+  "7.629927 47.502544," \
+  "7.62993 47.502563," \
+  "7.62994 47.502583," \
+  "7.629942 47.502605," \
+  "7.629937 47.502625," \
+  "7.629923 47.502636," \
+  "7.629912 47.502644," \
+  "7.62992 47.502666," \
+  "7.62993 47.502697," \
+  "7.629935 47.50273," \
+  "7.629942 47.50276," \
+  "7.629942 47.502785," \
+  "7.629947 47.502804," \
+  "7.629952 47.502827," \
+  "7.629957 47.502846," \
+  "7.62996 47.502865," \
+  "7.629967 47.50288," \
+  "7.629973 47.5029," \
+  "7.629978 47.50292," \
+  "7.629987 47.502945," \
+  "7.629987 47.502964," \
+  "7.629995 47.502995," \
+  "7.629998 47.503025," \
+  "7.63 47.50305," \
+  "7.629995 47.503075," \
+  "7.629992 47.503098," \
+  "7.629995 47.50313," \
+  "7.629997 47.503155," \
+  "7.630008 47.50318," \
+  "7.63002 47.503204," \
+  "7.630033 47.50323," \
+  "7.630042 47.503254," \
+  "7.63005 47.50328," \
+  "7.63006 47.503304," \
+  "7.630065 47.50333," \
+  "7.630072 47.503357," \
+  "7.630077 47.50338," \
+  "7.630083 47.503403," \
+  "7.630085 47.50342," \
+  "7.630087 47.50344," \
+  "7.630093 47.503464," \
+  "7.630097 47.503487," \
+  "7.6301 47.50351," \
+  "7.630112 47.503532," \
+  "7.630123 47.503567," \
+  "7.630128 47.5036," \
+  "7.630132 47.503628," \
+  "7.630133 47.50365," \
+  "7.630142 47.503677," \
+  "7.630143 47.503696," \
+  "7.630145 47.503723," \
+  "7.63014 47.503746," \
+  "7.630133 47.503773," \
+  "7.630127 47.5038," \
+  "7.630128 47.503826," \
+  "7.630132 47.503853," \
+  "7.630132 47.503876," \
+  "7.630133 47.5039," \
+  "7.63014 47.50392," \
+  "7.630135 47.503944," \
+  "7.630143 47.503975," \
+  "7.630143 47.504005," \
+  "7.63016 47.504044," \
+  "7.630183 47.50408," \
+  "7.630202 47.50411," \
+  "7.63022 47.504128," \
+  "7.63025 47.504158," \
+  "7.630268 47.50418," \
+  "7.630315 47.504215," \
+  "7.630343 47.50424," \
+  "7.630372 47.504253," \
+  "7.630398 47.504265," \
+  "7.630425 47.50427," \
+  "7.630455 47.504265," \
+  "7.630483 47.504257," \
+  "7.63051 47.504246," \
+  "7.630538 47.504227," \
+  "7.630557 47.504204," \
+  "7.630575 47.50419," \
+  "7.630593 47.504173," \
+  "7.630607 47.50416," \
+  "7.630615 47.504147," \
+  "7.630627 47.50413," \
+  "7.63064 47.504124," \
+  "7.630655 47.50411," \
+  "7.630668 47.504093," \
+  "7.630683 47.50408," \
+  "7.6307 47.50406," \
+  "7.630712 47.504032," \
+  "7.630732 47.504013," \
+  "7.630752 47.503986," \
+  "7.63077 47.503963," \
+  "7.630793 47.503933," \
+  "7.630803 47.503902," \
+  "7.630815 47.503872," \
+  "7.630833 47.50384," \
+  "7.630855 47.50381," \
+  "7.630877 47.503788," \
+  "7.630898 47.50377," \
+  "7.630918 47.50375," \
+  "7.630937 47.503727," \
+  "7.630952 47.503708," \
+  "7.630968 47.50369," \
+  "7.630985 47.503662," \
+  "7.631007 47.503647," \
+  "7.631025 47.503624," \
+  "7.631047 47.5036," \
+  "7.631073 47.50357," \
+  "7.631095 47.503548," \
+  "7.631113 47.50353," \
+  "7.631128 47.503506," \
+  "7.631143 47.503487," \
+  "7.631157 47.50347," \
+  "7.631168 47.503452," \
+  "7.631183 47.503437," \
+  "7.631202 47.503418," \
+  "7.631213 47.50339," \
+  "7.63124 47.503372," \
+  "7.631263 47.503353," \
+  "7.631292 47.503338," \
+  "7.631312 47.503323," \
+  "7.631328 47.503304," \
+  "7.631353 47.50329," \
+  "7.631375 47.503277," \
+  "7.631402 47.50326," \
+  "7.631427 47.50324," \
+  "7.631452 47.503216," \
+  "7.631485 47.503197," \
+  "7.631513 47.503178," \
+  "7.631543 47.503166," \
+  "7.631572 47.503143," \
+  "7.631602 47.503124," \
+  "7.631623 47.5031," \
+  "7.631645 47.50308," \
+  "7.631665 47.50306," \
+  "7.631695 47.50304," \
+  "7.631717 47.50303," \
+  "7.631735 47.503002," \
+  "7.631753 47.502983," \
+  "7.631777 47.502968," \
+  "7.631803 47.502956," \
+  "7.631832 47.502953," \
+  "7.631863 47.50294," \
+  "7.631897 47.50293," \
+  "7.63194 47.50292," \
+  "7.631972 47.502895," \
+  "7.632 47.502888," \
+  "7.63203 47.50288," \
+  "7.632058 47.50287," \
+  "7.632103 47.502853," \
+  "7.632145 47.50283," \
+  "7.632183 47.502815," \
+  "7.632215 47.502796," \
+  "7.632245 47.50278," \
+  "7.632273 47.502766," \
+  "7.6323 47.502747," \
+  "7.632333 47.502728," \
+  "7.632372 47.50271," \
+  "7.632413 47.502697," \
+  "7.632445 47.502686," \
+  "7.632482 47.50267," \
+  "7.63252 47.502663," \
+  "7.632545 47.50265," \
+  "7.63258 47.50265," \
+  "7.632617 47.50265," \
+  "7.63266 47.50266," \
+  "7.632695 47.502666," \
+  "7.632727 47.50267," \
+  "7.632748 47.50267," \
+  "7.63277 47.502678," \
+  "7.632798 47.50268," \
+  "7.632823 47.502693," \
+  "7.632848 47.502705," \
+  "7.63288 47.502716," \
+  "7.632912 47.50273," \
+  "7.632943 47.502747," \
+  "7.632972 47.502758," \
+  "7.633002 47.502766," \
+  "7.633033 47.502777," \
+  "7.633068 47.502785," \
+  "7.633113 47.502792," \
+  "7.633143 47.502796," \
+  "7.633168 47.502792," \
+  "7.633207 47.502804," \
+  "7.63324 47.502815," \
+  "7.63327 47.502823," \
+  "7.633313 47.50284," \
+  "7.633353 47.502857," \
+  "7.633395 47.50287," \
+  "7.633438 47.502876," \
+  "7.633475 47.50288," \
+  "7.633505 47.502884," \
+  "7.63354 47.50289," \
+  "7.633578 47.502903," \
+  "7.633613 47.502907," \
+  "7.633648 47.50291," \
+  "7.633672 47.502914," \
+  "7.633702 47.502922," \
+  "7.633738 47.502934," \
+  "7.633773 47.502934," \
+  "7.63381 47.50294," \
+  "7.633842 47.50295," \
+  "7.633877 47.502956," \
+  "7.633918 47.50297," \
+  "7.633957 47.502987," \
+  "7.633993 47.503," \
+  "7.63403 47.503006," \
+  "7.634067 47.503014," \
+  "7.634107 47.50303," \
+  "7.634152 47.503044," \
+  "7.634192 47.503056," \
+  "7.634233 47.503067," \
+  "7.634267 47.50308," \
+  "7.634308 47.50309," \
+  "7.634343 47.503105," \
+  "7.634387 47.503124," \
+  "7.634423 47.503136," \
+  "7.634457 47.503143," \
+  "7.634488 47.503147," \
+  "7.634522 47.50315," \
+  "7.634562 47.503162," \
+  "7.634603 47.503174," \
+  "7.63465 47.503185," \
+  "7.63469 47.50319," \
+  "7.634727 47.50319," \
+  "7.634762 47.503185," \
+  "7.634802 47.50318," \
+  "7.634832 47.50317," \
+  "7.634872 47.503166," \
+  "7.634907 47.503162," \
+  "7.634937 47.503155," \
+  "7.634977 47.503155," \
+  "7.635012 47.503147," \
+  "7.635043 47.503136," \
+  "7.635092 47.503136," \
+  "7.635128 47.50313," \
+  "7.635155 47.503117," \
+  "7.635188 47.503113," \
+  "7.635222 47.5031," \
+  "7.635253 47.50309," \
+  "7.635292 47.503086," \
+  "7.635332 47.50308," \
+  "7.635368 47.50307," \
+  "7.635407 47.503063," \
+  "7.635448 47.50306," \
+  "7.635483 47.50305," \
+  "7.63551 47.503036," \
+  "7.635552 47.50303," \
+  "7.635598 47.50302," \
+  "7.63564 47.503014," \
+  "7.635687 47.503014," \
+  "7.635732 47.503006," \
+  "7.635765 47.50299," \
+  "7.6358 47.502975," \
+  "7.635833 47.502964," \
+  "7.635868 47.50295," \
+  "7.635898 47.502934," \
+  "7.63592 47.502907," \
+  "7.63595 47.50289," \
+  "7.635978 47.502872," \
+  "7.636005 47.502857," \
+  "7.636028 47.502846," \
+  "7.636063 47.50284," \
+  "7.63609 47.50282," \
+  "7.636108 47.502796," \
+  "7.636127 47.502773," \
+  "7.636145 47.50275," \
+  "7.636168 47.502735," \
+  "7.636198 47.50272," \
+  "7.636233 47.502705," \
+  "7.636257 47.502686," \
+  "7.636285 47.50267," \
+  "7.636305 47.50265," \
+  "7.636327 47.502644," \
+  "7.63635 47.502636," \
+  "7.636372 47.50262," \
+  "7.636392 47.5026," \
+  "7.636422 47.502583," \
+  "7.636448 47.502556," \
+  "7.636462 47.50253," \
+  "7.636483 47.502506," \
+  "7.636507 47.502483," \
+  "7.636528 47.50246," \
+  "7.636555 47.502445," \
+  "7.63659 47.50243," \
+  "7.636615 47.50241," \
+  "7.636637 47.50239," \
+  "7.63666 47.502377," \
+  "7.636692 47.502365," \
+  "7.636718 47.502346," \
+  "7.636747 47.502327," \
+  "7.636768 47.5023," \
+  "7.636783 47.502277," \
+  "7.636805 47.50225," \
+  "7.63683 47.50223," \
+  "7.636852 47.50221," \
+  "7.636873 47.50219," \
+  "7.636898 47.502167," \
+  "7.636928 47.50215," \
+  "7.636958 47.502136," \
+  "7.636995 47.50213," \
+  "7.63703 47.502117," \
+  "7.637065 47.50211," \
+  "7.637107 47.502106," \
+  "7.637145 47.5021," \
+  "7.6372 47.50211," \
+  "7.637233 47.502117," \
+  "7.637268 47.502125," \
+  "7.6373 47.50213," \
+  "7.637352 47.502148," \
+  "7.637393 47.50216," \
+  "7.637433 47.502163," \
+  "7.637473 47.50217," \
+  "7.637507 47.50218," \
+  "7.637537 47.502186," \
+  "7.637575 47.502193," \
+  "7.637613 47.502197," \
+  "7.637658 47.50221," \
+  "7.637702 47.502216," \
+  "7.637747 47.50222," \
+  "7.637788 47.502228," \
+  "7.637833 47.502235," \
+  "7.63788 47.502243," \
+  "7.637928 47.502247," \
+  "7.637978 47.502247," \
+  "7.638028 47.502247," \
+  "7.638077 47.50224," \
+  "7.638118 47.502228," \
+  "7.638165 47.502216," \
+  "7.638218 47.502216," \
+  "7.638275 47.50221," \
+  "7.63833 47.502197," \
+  "7.63837 47.50218," \
+  "7.638423 47.502167," \
+  "7.638468 47.50215," \
+  "7.638508 47.502136," \
+  "7.638553 47.502125," \
+  "7.638593 47.502113," \
+  "7.638638 47.5021," \
+  "7.638678 47.502087," \
+  "7.638725 47.502083," \
+  "7.638772 47.502075," \
+  "7.638818 47.502064," \
+  "7.638863 47.502056," \
+  "7.638905 47.502045," \
+  "7.638952 47.50203," \
+  "7.638993 47.502014," \
+  "7.639037 47.502003," \
+  "7.639083 47.501995," \
+  "7.639132 47.50199," \
+  "7.639172 47.50198," \
+  "7.639217 47.501972," \
+  "7.63926 47.501965," \
+  "7.639308 47.50196," \
+  "7.639357 47.501953," \
+  "7.639403 47.501945," \
+  "7.63945 47.501934," \
+  "7.639492 47.501923," \
+  "7.639537 47.501907," \
+  "7.63958 47.50189," \
+  "7.639623 47.501877," \
+  "7.639662 47.501858," \
+  "7.639697 47.501835," \
+  "7.639728 47.50181," \
+  "7.63976 47.50178," \
+  "7.639778 47.501755," \
+  "7.6398 47.50173," \
+  "7.639825 47.501713," \
+  "7.63985 47.501686," \
+  "7.639865 47.501656," \
+  "7.639877 47.50162," \
+  "7.639892 47.501587," \
+  "7.639903 47.501556," \
+  "7.639907 47.501522," \
+  "7.63991 47.501495," \
+  "7.639912 47.50147," \
+  "7.639908 47.50145," \
+  "7.639902 47.501427," \
+  "7.639897 47.501408," \
+  "7.639893 47.501385," \
+  "7.639888 47.50136," \
+  "7.639882 47.50133," \
+  "7.639872 47.501305," \
+  "7.639857 47.501278," \
+  "7.639838 47.50125," \
+  "7.63982 47.501225," \
+  "7.639795 47.501198," \
+  "7.639772 47.50116," \
+  "7.639762 47.50113," \
+  "7.639745 47.5011," \
+  "7.639727 47.501072," \
+  "7.639712 47.501045," \
+  "7.639693 47.50102," \
+  "7.639673 47.500988," \
+  "7.639657 47.500954," \
+  "7.639635 47.500927," \
+  "7.639615 47.500896," \
+  "7.639597 47.500866," \
+  "7.63957 47.500824," \
+  "7.639548 47.50078," \
+  "7.63952 47.50075," \
+  "7.6395 47.500725," \
+  "7.639473 47.5007," \
+  "7.639447 47.50067," \
+  "7.639415 47.50064," \
+  "7.639392 47.500618," \
+  "7.639368 47.500595," \
+  "7.639348 47.500576," \
+  "7.639323 47.50052," \
+  "7.639293 47.500477," \
+  "7.639267 47.500446," \
+  "7.639227 47.500412," \
+  "7.639197 47.50038," \
+  "7.639175 47.500347," \
+  "7.639155 47.500317," \
+  "7.639128 47.500294," \
+  "7.639093 47.50027," \
+  "7.63906 47.50025," \
+  "7.639035 47.50023," \
+  "7.639 47.500202," \
+  "7.63897 47.500175," \
+  "7.638935 47.50015," \
+  "7.63891 47.50012," \
+  "7.638885 47.5001," \
+  "7.638857 47.500076," \
+  "7.638827 47.50006," \
+  "7.638788 47.500046," \
+  "7.638755 47.500027," \
+  "7.638715 47.500004," \
+  "7.638682 47.49999," \
+  "7.638648 47.49996," \
+  "7.638613 47.499943," \
+  "7.638578 47.49992," \
+  "7.63854 47.499893," \
+  "7.6385 47.499874," \
+  "7.63846 47.49985," \
+  "7.638422 47.499832," \
+  "7.638393 47.499817," \
+  "7.638357 47.49979," \
+  "7.638312 47.499763," \
+  "7.638273 47.499744," \
+  "7.63823 47.49972," \
+  "7.638188 47.4997," \
+  "7.63816 47.499683," \
+  "7.638137 47.49966," \
+  "7.63811 47.49964," \
+  "7.6381 47.499615," \
+  "7.638078 47.49959," \
+  "7.638052 47.49956," \
+  "7.638025 47.499535," \
+  "7.638002 47.499516," \
+  "7.637965 47.499496," \
+  "7.637933 47.49947," \
+  "7.637905 47.499447," \
+  "7.637883 47.499413," \
+  "7.63787 47.49939," \
+  "7.637858 47.49936," \
+  "7.637852 47.49933," \
+  "7.637853 47.499302," \
+  "7.637862 47.499275," \
+  "7.637887 47.49926," \
+  "7.637913 47.499245," \
+  "7.637948 47.49923," \
+  "7.637983 47.49922," \
+  "7.63803 47.499218," \
+  "7.638082 47.499218," \
+  "7.63813 47.499214," \
+  "7.638175 47.49921," \
+  "7.638217 47.499207," \
+  "7.638258 47.499195," \
+  "7.638302 47.49919," \
+  "7.638348 47.499187," \
+  "7.638395 47.499187," \
+  "7.638447 47.499187," \
+  "7.63849 47.49918," \
+  "7.63854 47.499176," \
+  "7.63859 47.49917," \
+  "7.638647 47.49917," \
+  "7.638697 47.499165," \
+  "7.638738 47.499153," \
+  "7.63878 47.49914," \
+  "7.63883 47.499126," \
+  "7.63888 47.49912," \
+  "7.638928 47.49911," \
+  "7.638975 47.499092," \
+  "7.639025 47.499077," \
+  "7.63907 47.49906," \
+  "7.639118 47.499046," \
+  "7.639162 47.49903," \
+  "7.639203 47.49901," \
+  "7.639257 47.499," \
+  "7.639308 47.49899," \
+  "7.63935 47.498974," \
+  "7.639397 47.498962," \
+  "7.639447 47.498955," \
+  "7.639493 47.49894," \
+  "7.639547 47.49893," \
+  "7.6396 47.49892," \
+  "7.639652 47.49891," \
+  "7.639695 47.498898," \
+  "7.639735 47.49888," \
+  "7.639783 47.49887," \
+  "7.63983 47.498856," \
+  "7.639877 47.498837," \
+  "7.639915 47.498802," \
+  "7.639947 47.498764," \
+  "7.63997 47.49872," \
+  "7.639978 47.498684," \
+  "7.63998 47.49865," \
+  "7.639968 47.498615," \
+  "7.639952 47.498585," \
+  "7.639932 47.498547," \
+  "7.639917 47.498512," \
+  "7.639907 47.498486," \
+  "7.639897 47.49846," \
+  "7.63988 47.498432," \
+  "7.639865 47.498405," \
+  "7.639853 47.498383," \
+  "7.639835 47.498356," \
+  "7.63981 47.49832," \
+  "7.639777 47.498283," \
+  "7.639753 47.498253," \
+  "7.63973 47.498226," \
+  "7.639703 47.4982," \
+  "7.639675 47.498173," \
+  "7.639632 47.49814," \
+  "7.639588 47.4981," \
+  "7.639543 47.498062," \
+  "7.639498 47.498028," \
+  "7.639452 47.497993," \
+  "7.639412 47.497955," \
+  "7.639372 47.497925," \
+  "7.639335 47.497894," \
+  "7.639303 47.497868," \
+  "7.639272 47.49784," \
+  "7.639238 47.497818," \
+  "7.639208 47.4978," \
+  "7.639182 47.497784," \
+  "7.639157 47.497757," \
+  "7.639133 47.497734," \
+  "7.639097 47.497707," \
+  "7.639058 47.49768," \
+  "7.639008 47.497646," \
+  "7.638942 47.497597," \
+  "7.638897 47.49756," \
+  "7.638872 47.497536," \
+  "7.638843 47.497517," \
+  "7.638808 47.49749," \
+  "7.638765 47.497467," \
+  "7.638723 47.497448," \
+  "7.638648 47.497417," \
+  "7.638588 47.4974," \
+  "7.638533 47.497375," \
+  "7.638482 47.49735," \
+  "7.63843 47.497314," \
+  "7.638392 47.49729," \
+  "7.638352 47.497265," \
+  "7.638307 47.497227," \
+  "7.63829 47.497196," \
+  "7.638247 47.49716," \
+  "7.638198 47.497124," \
+  "7.638163 47.4971," \
+  "7.638132 47.497078," \
+  "7.638102 47.497047," \
+  "7.63808 47.497032," \
+  "7.638048 47.497013," \
+  "7.638018 47.49699," \
+  "7.637988 47.49697," \
+  "7.63796 47.49695," \
+  "7.637935 47.496918," \
+  "7.637913 47.496883," \
+  "7.637872 47.49685," \
+  "7.637828 47.49682," \
+  "7.637792 47.496788," \
+  "7.637762 47.49675," \
+  "7.637737 47.496716," \
+  "7.637703 47.49668," \
+  "7.637673 47.496655," \
+  "7.63764 47.49662," \
+  "7.637608 47.496593," \
+  "7.63758 47.49656," \
+  "7.637558 47.496525," \
+  "7.637543 47.496487," \
+  "7.63754 47.496452," \
+  "7.637552 47.49642," \
+  "7.637578 47.49639," \
+  "7.63761 47.49637," \
+  "7.637643 47.49635," \
+  "7.637692 47.49634," \
+  "7.63775 47.49635," \
+  "7.63781 47.496357," \
+  "7.637872 47.49637," \
+  "7.637927 47.496372," \
+  "7.63798 47.496372," \
+  "7.638032 47.496376," \
+  "7.638098 47.496384," \
+  "7.638167 47.49639," \
+  "7.638223 47.4964," \
+  "7.638278 47.496407," \
+  "7.638337 47.49642," \
+  "7.638388 47.496426," \
+  "7.63844 47.496437," \
+  "7.638493 47.496445," \
+  "7.638543 47.49645," \
+  "7.6386 47.49645," \
+  "7.638658 47.496452," \
+  "7.638715 47.496456," \
+  "7.63877 47.496464," \
+  "7.63882 47.496464," \
+  "7.638867 47.496468," \
+  "7.638915 47.496468," \
+  "7.63897 47.496468," \
+  "7.639025 47.496464," \
+  "7.639087 47.49647," \
+  "7.639152 47.496483," \
+  "7.639218 47.496487," \
+  "7.639265 47.496494," \
+  "7.639315 47.4965," \
+  "7.639368 47.49651," \
+  "7.639403 47.496513," \
+  "7.639458 47.49653," \
+  "7.639493 47.496536," \
+  "7.639542 47.496555," \
+  "7.639587 47.496567," \
+  "7.639635 47.49658," \
+  "7.639687 47.496593," \
+  "7.639718 47.49661," \
+  "7.639762 47.496624," \
+  "7.639815 47.496643," \
+  "7.63987 47.496662," \
+  "7.639918 47.49668," \
+  "7.63996 47.496696," \
+  "7.64 47.49671," \
+  "7.64004 47.496723," \
+  "7.640088 47.496735," \
+  "7.640142 47.496742," \
+  "7.640187 47.496742," \
+  "7.640232 47.496742," \
+  "7.640295 47.496742," \
+  "7.640345 47.496742," \
+  "7.640395 47.496746," \
+  "7.64045 47.49675," \
+  "7.6405 47.49676," \
+  "7.640557 47.496773," \
+  "7.640612 47.496784," \
+  "7.64067 47.496803," \
+  "7.64072 47.49682," \
+  "7.640765 47.496834," \
+  "7.64081 47.496857," \
+  "7.640853 47.49688," \
+  "7.64089 47.496902," \
+  "7.640918 47.496914," \
+  "7.64095 47.49693," \
+  "7.640987 47.49695," \
+  "7.64102 47.496964," \
+  "7.64105 47.49698," \
+  "7.641077 47.496998," \
+  "7.641108 47.497017," \
+  "7.641158 47.497036," \
+  "7.641203 47.49705," \
+  "7.641253 47.497074," \
+  "7.6413 47.4971," \
+  "7.641347 47.497128," \
+  "7.641398 47.497154," \
+  "7.641458 47.49718," \
+  "7.641498 47.4972," \
+  "7.641538 47.497223," \
+  "7.641568 47.49725," \
+  "7.641607 47.497272," \
+  "7.641642 47.497288," \
+  "7.641685 47.497307," \
+  "7.641732 47.49733," \
+  "7.64178 47.49735," \
+  "7.641835 47.49737," \
+  "7.641892 47.497406," \
+  "7.641952 47.49744," \
+  "7.642008 47.497463," \
+  "7.642058 47.49748," \
+  "7.642115 47.4975," \
+  "7.642197 47.497528," \
+  "7.642265 47.49755," \
+  "7.64233 47.49758," \
+  "7.642392 47.497604," \
+  "7.642463 47.49763," \
+  "7.642517 47.497646," \
+  "7.642567 47.497654," \
+  "7.642625 47.49769," \
+  "7.642673 47.49769," \
+  "7.642718 47.49769," \
+  "7.642778 47.49771," \
+  "7.64284 47.497723," \
+  "7.642897 47.497738," \
+  "7.642955 47.49776," \
+  "7.64301 47.497784," \
+  "7.643073 47.497795," \
+  "7.643128 47.497818," \
+  "7.643173 47.497818," \
+  "7.643228 47.497837," \
+  "7.643277 47.49785," \
+  "7.643323 47.497852," \
+  "7.643365 47.497864," \
+  "7.643408 47.49788," \
+  "7.643458 47.497917," \
+  "7.643492 47.497932," \
+  "7.643533 47.49795," \
+  "7.64358 47.497993," \
+  "7.64361 47.498013," \
+  "7.643633 47.498024," \
+  "7.643657 47.49804," \
+  "7.643698 47.498077," \
+  "7.643732 47.49811," \
+  "7.64376 47.498154," \
+  "7.643785 47.498177," \
+  "7.64381 47.498203," \
+  "7.64383 47.498226," \
+  "7.643848 47.498253," \
+  "7.643872 47.498283," \
+  "7.643893 47.498314," \
+  "7.64391 47.498337," \
+  "7.643928 47.498363," \
+  "7.643947 47.498394," \
+  "7.643962 47.498417," \
+  "7.643978 47.498444," \
+  "7.644003 47.498478," \
+  "7.644027 47.498516," \
+  "7.64406 47.498558," \
+  "7.644082 47.498596," \
+  "7.644107 47.498634," \
+  "7.644133 47.49867," \
+  "7.644167 47.49871," \
+  "7.644198 47.498745," \
+  "7.64423 47.49878," \
+  "7.64426 47.498814," \
+  "7.644298 47.49885," \
+  "7.644333 47.498875," \
+  "7.64436 47.498894," \
+  "7.64441 47.498913," \
+  "7.644447 47.498936," \
+  "7.644483 47.498962," \
+  "7.644522 47.49899," \
+  "7.64456 47.499012," \
+  "7.644597 47.49903," \
+  "7.644635 47.499054," \
+  "7.644662 47.49907," \
+  "7.644687 47.49909," \
+  "7.644717 47.49911," \
+  "7.64474 47.49912," \
+  "7.644773 47.499138," \
+  "7.64481 47.499157," \
+  "7.644848 47.499172," \
+  "7.644882 47.49919," \
+  "7.644923 47.49922," \
+  "7.644955 47.49925," \
+  "7.644997 47.499283," \
+  "7.64503 47.499306," \
+  "7.645067 47.499332," \
+  "7.645092 47.499363," \
+  "7.645123 47.499386," \
+  "7.64516 47.499413," \
+  "7.645187 47.499435," \
+  "7.645223 47.49946," \
+  "7.645258 47.49949," \
+  "7.645307 47.49951," \
+  "7.645363 47.499535," \
+  "7.64542 47.49955," \
+  "7.645475 47.499554," \
+  "7.645537 47.49955," \
+  "7.645602 47.49955," \
+  "7.645657 47.499546," \
+  "7.645715 47.499554," \
+  "7.645782 47.49957," \
+  "7.645828 47.49958," \
+  "7.645853 47.4996," \
+  "7.645873 47.499622," \
+  "7.645902 47.499638," \
+  "7.645943 47.49964," \
+  "7.645978 47.499626," \
+  "7.645998 47.4996," \
+  "7.646022 47.49957," \
+  "7.64605 47.499535," \
+  "7.646073 47.4995," \
+  "7.646092 47.499462," \
+  "7.646112 47.49943," \
+  "7.646128 47.499405," \
+  "7.646143 47.499374," \
+  "7.646167 47.49934," \
+  "7.646193 47.499302," \
+  "7.64622 47.49927," \
+  "7.646242 47.49924," \
+  "7.646265 47.499214," \
+  "7.646307 47.49919," \
+  "7.646352 47.499165," \
+  "7.646387 47.49914," \
+  "7.646412 47.499107," \
+  "7.646455 47.49908," \
+  "7.646507 47.499054," \
+  "7.646552 47.499027," \
+  "7.646598 47.499012," \
+  "7.646643 47.49899," \
+  "7.646693 47.498966," \
+  "7.646752 47.498955," \
+  "7.646812 47.498943," \
+  "7.646878 47.49893," \
+  "7.64694 47.49892," \
+  "7.647008 47.498917," \
+  "7.647062 47.4989," \
+  "7.647108 47.498886," \
+  "7.647158 47.498875," \
+  "7.647195 47.498848," \
+  "7.647243 47.49882," \
+  "7.647295 47.498795," \
+  "7.64734 47.49877," \
+  "7.64738 47.49875," \
+  "7.64743 47.498722," \
+  "7.647475 47.4987," \
+  "7.647508 47.49867," \
+  "7.647547 47.498642," \
+  "7.64759 47.498615," \
+  "7.647617 47.49859," \
+  "7.647633 47.49855," \
+  "7.647647 47.498524," \
+  "7.647685 47.4985," \
+  "7.647723 47.49848," \
+  "7.64774 47.498455," \
+  "7.64775 47.49843," \
+  "7.647762 47.498398," \
+  "7.647783 47.49837," \
+  "7.647808 47.49835," \
+  "7.647835 47.49833," \
+  "7.647868 47.49829," \
+  "7.647902 47.49827," \
+  "7.64794 47.49825," \
+  "7.647973 47.498226," \
+  "7.648005 47.49821," \
+  "7.648042 47.498184," \
+  "7.648078 47.49816," \
+  "7.648107 47.49814," \
+  "7.648125 47.49812," \
+  "7.648148 47.498093," \
+  "7.648158 47.49806," \
+  "7.648163 47.49803," \
+  "7.64816 47.498," \
+  "7.648153 47.49797," \
+  "7.648138 47.49794," \
+  "7.648122 47.49791," \
+  "7.648117 47.497887," \
+  "7.648102 47.497864," \
+  "7.64809 47.49784," \
+  "7.648077 47.497814," \
+  "7.648058 47.49778," \
+  "7.648047 47.49775," \
+  "7.648042 47.49772," \
+  "7.648043 47.497696," \
+  "7.648047 47.497677," \
+  "7.64804 47.497654," \
+  "7.648032 47.497627," \
+  "7.648017 47.4976," \
+  "7.648005 47.49757," \
+  "7.647973 47.497528," \
+  "7.647962 47.497494," \
+  "7.647948 47.49746," \
+  "7.647943 47.49743," \
+  "7.647933 47.497406," \
+  "7.647928 47.497375," \
+  "7.647923 47.497353," \
+  "7.647908 47.497322," \
+  "7.647878 47.497295," \
+  "7.647853 47.49727," \
+  "7.647828 47.49724," \
+  "7.647818 47.497208," \
+  "7.647805 47.49718," \
+  "7.647793 47.497158," \
+  "7.647773 47.49713," \
+  "7.64776 47.4971," \
+  "7.647742 47.497078," \
+  "7.647745 47.49706," \
+  "7.647767 47.497047," \
+  "7.6478 47.497044," \
+  "7.647827 47.49704," \
+  "7.647855 47.49703," \
+  "7.64788 47.49702," \
+  "7.647907 47.497005," \
+  "7.647928 47.496986," \
+  "7.647943 47.496967," \
+  "7.64796 47.496952," \
+  "7.647968 47.49693," \
+  "7.64798 47.496902," \
+  "7.647988 47.496883," \
+  "7.648 47.49686," \
+  "7.64801 47.496838," \
+  "7.648018 47.496815," \
+  "7.648025 47.49679," \
+  "7.648033 47.49677," \
+  "7.64804 47.49675," \
+  "7.64805 47.496727," \
+  "7.648063 47.49671," \
+  "7.648073 47.496693," \
+  "7.648083 47.496674," \
+  "7.648097 47.49665," \
+  "7.648113 47.496628," \
+  "7.648133 47.49661," \
+  "7.64815 47.496586," \
+  "7.648162 47.496563," \
+  "7.648168 47.496536," \
+  "7.648172 47.49651," \
+  "7.648188 47.49648," \
+  "7.648192 47.496456," \
+  "7.648208 47.496433," \
+  "7.648225 47.496414," \
+  "7.648248 47.496395," \
+  "7.64826 47.496376," \
+  "7.64827 47.496353," \
+  "7.648277 47.496334," \
+  "7.648287 47.496307," \
+  "7.648302 47.496277," \
+  "7.648318 47.496246," \
+  "7.648337 47.496216," \
+  "7.648348 47.49619," \
+  "7.648358 47.496166," \
+  "7.648363 47.496143," \
+  "7.648375 47.496117," \
+  "7.648387 47.49609," \
+  "7.648402 47.496063," \
+  "7.648412 47.496037," \
+  "7.64842 47.496017," \
+  "7.648433 47.495995," \
+  "7.648445 47.495968," \
+  "7.648457 47.49594," \
+  "7.648463 47.495914," \
+  "7.64846 47.495888," \
+  "7.648457 47.495865," \
+  "7.648453 47.495842," \
+  "7.648453 47.49581," \
+  "7.648452 47.49579," \
+  "7.64846 47.495766," \
+  "7.648472 47.49574," \
+  "7.648467 47.495705," \
+  "7.648467 47.495663," \
+  "7.648458 47.49562," \
+  "7.648448 47.495583," \
+  "7.648445 47.495556," \
+  "7.64844 47.49554," \
+  "7.648435 47.49553," \
+  "7.648437 47.49552," \
+  "7.648435 47.495514," \
+  "7.648433 47.495506," \
+  "7.648433 47.495483," \
+  "7.648438 47.49546," \
+  "7.648445 47.49544," \
+  "7.648447 47.49542," \
+  "7.64845 47.495396," \
+  "7.648457 47.495373," \
+  "7.648467 47.495354," \
+  "7.648468 47.495335," \
+  "7.648475 47.495308," \
+  "7.648475 47.495277," \
+  "7.64848 47.495247," \
+  "7.648497 47.495213," \
+  "7.648505 47.49518," \
+  "7.648508 47.49514," \
+  "7.648513 47.495106," \
+  "7.648527 47.495075," \
+  "7.648537 47.495052," \
+  "7.648538 47.49502," \
+  "7.648535 47.49499," \
+  "7.64855 47.49496," \
+  "7.648568 47.494934," \
+  "7.648577 47.494904," \
+  "7.64859 47.49487," \
+  "7.648585 47.494843," \
+  "7.648595 47.494816," \
+  "7.648603 47.494793," \
+  "7.648618 47.494766," \
+  "7.648628 47.494743," \
+  "7.64864 47.494717," \
+  "7.648655 47.494698," \
+  "7.648675 47.49468," \
+  "7.648692 47.49466," \
+  "7.648713 47.49464," \
+  "7.648747 47.494633," \
+  "7.648763 47.494625," \
+  "7.648787 47.49462," \
+  "7.64881 47.49462," \
+  "7.648852 47.49462," \
+  "7.648883 47.494617," \
+  "7.648918 47.49463," \
+  "7.648943 47.494633," \
+  "7.648963 47.49464," \
+  "7.648993 47.49465," \
+  "7.649023 47.494663," \
+  "7.649058 47.49468," \
+  "7.649097 47.494682," \
+  "7.649133 47.494686," \
+  "7.649173 47.4947," \
+  "7.649208 47.494717," \
+  "7.649245 47.49473," \
+  "7.649278 47.49474," \
+  "7.649312 47.494736," \
+  "7.649342 47.49473," \
+  "7.649368 47.49472," \
+  "7.649402 47.494717," \
+  "7.649433 47.494713," \
+  "7.649473 47.494717," \
+  "7.64951 47.494724," \
+  "7.649542 47.494728," \
+  "7.649577 47.49473," \
+  "7.64961 47.494736," \
+  "7.649647 47.494743," \
+  "7.649688 47.49475," \
+  "7.649735 47.49476," \
+  "7.649777 47.494766," \
+  "7.649833 47.494778," \
+  "7.649873 47.49478," \
+  "7.649905 47.494778," \
+  "7.649937 47.494766," \
+  "7.649967 47.49476," \
+  "7.650007 47.49474," \
+  "7.65004 47.494724," \
+  "7.65008 47.494717," \
+  "7.650123 47.494713," \
+  "7.650167 47.494713," \
+  "7.650217 47.494717," \
+  "7.650255 47.494717," \
+  "7.650293 47.494713," \
+  "7.650335 47.494705," \
+  "7.650375 47.494705," \
+  "7.65042 47.49471," \
+  "7.650465 47.494713," \
+  "7.65051 47.49471," \
+  "7.650562 47.4947," \
+  "7.65061 47.494686," \
+  "7.650662 47.494682," \
+  "7.6507 47.494675," \
+  "7.650742 47.494663," \
+  "7.650783 47.494656," \
+  "7.650827 47.494648," \
+  "7.650865 47.494633," \
+  "7.650917 47.49461," \
+  "7.650963 47.49459," \
+  "7.65101 47.494583," \
+  "7.651067 47.494576," \
+  "7.651102 47.494564," \
+  "7.65113 47.494545," \
+  "7.65116 47.494526," \
+  "7.651195 47.494507," \
+  "7.651223 47.49448," \
+  "7.651247 47.49446," \
+  "7.651275 47.494442," \
+  "7.651298 47.494423," \
+  "7.65133 47.494404," \
+  "7.651357 47.49439," \
+  "7.651383 47.494373," \
+  "7.651408 47.49436," \
+  "7.651438 47.494347," \
+  "7.651462 47.494335," \
+  "7.651483 47.494324," \
+  "7.651508 47.494316," \
+  "7.65153 47.494305," \
+  "7.651553 47.494293," \
+  "7.651575 47.494286," \
+  "7.651597 47.494274," \
+  "7.651622 47.494267," \
+  "7.651647 47.49426," \
+  "7.65167 47.494244," \
+  "7.6517 47.494236," \
+  "7.651728 47.494225," \
+  "7.651755 47.494217," \
+  "7.65178 47.49421," \
+  "7.651805 47.4942," \
+  "7.651825 47.49419," \
+  "7.651853 47.494186," \
+  "7.65188 47.49418," \
+  "7.651905 47.494167," \
+  "7.651933 47.494164," \
+  "7.651965 47.494164," \
+  "7.651997 47.494156," \
+  "7.652028 47.49415," \
+  "7.652057 47.49414," \
+  "7.652087 47.494133," \
+  "7.652125 47.49412," \
+  "7.65216 47.494118," \
+  "7.652193 47.49411," \
+  "7.652227 47.494102," \
+  "7.652253 47.49409," \
+  "7.652283 47.494083," \
+  "7.652312 47.494072," \
+  "7.652342 47.494064," \
+  "7.652372 47.49406," \
+  "7.652398 47.494053," \
+  "7.652422 47.494045," \
+  "7.652452 47.494038," \
+  "7.652482 47.494034," \
+  "7.652508 47.494026," \
+  "7.652532 47.494022," \
+  "7.652557 47.49401," \
+  "7.652585 47.494003," \
+  "7.652615 47.493996," \
+  "7.652638 47.493984," \
+  "7.652667 47.493973," \
+  "7.652693 47.49396," \
+  "7.652722 47.493954," \
+  "7.65275 47.493942," \
+  "7.652775 47.493927," \
+  "7.652805 47.493916," \
+  "7.652835 47.493904," \
+  "7.65286 47.493893," \
+  "7.652867 47.49387," \
+  "7.65288 47.493847," \
+  "7.652897 47.49383," \
+  "7.652935 47.493835," \
+  "7.65297 47.49383," \
+  "7.65301 47.49382," \
+  "7.653052 47.49381," \
+  "7.653092 47.493793," \
+  "7.653133 47.49378," \
+  "7.65318 47.493767," \
+  "7.653222 47.49375," \
+  "7.65326 47.493736," \
+  "7.653303 47.493713," \
+  "7.653345 47.493694," \
+  "7.653388 47.49367," \
+  "7.653435 47.493652," \
+  "7.653482 47.493633," \
+  "7.653527 47.493614," \
+  "7.653573 47.4936," \
+  "7.653617 47.493584," \
+  "7.653663 47.49357," \
+  "7.653708 47.49355," \
+  "7.653753 47.493534," \
+  "7.653802 47.49352," \
+  "7.653847 47.4935," \
+  "7.653892 47.49349," \
+  "7.65394 47.493473," \
+  "7.653983 47.493458," \
+  "7.654028 47.493443," \
+  "7.654078 47.49343," \
+  "7.654125 47.49342," \
+  "7.654173 47.49341," \
+  "7.65422 47.493397," \
+  "7.654262 47.49338," \
+  "7.654305 47.49337," \
+  "7.654347 47.49336," \
+  "7.654388 47.493343," \
+  "7.654428 47.49333," \
+  "7.65447 47.493317," \
+  "7.65451 47.493305," \
+  "7.65455 47.493294," \
+  "7.654587 47.493282," \
+  "7.654622 47.49327," \
+  "7.654662 47.493263," \
+  "7.6547 47.49325," \
+  "7.654737 47.493237," \
+  "7.654777 47.49323," \
+  "7.654818 47.493217," \
+  "7.654858 47.49321," \
+  "7.654893 47.4932," \
+  "7.654935 47.493195," \
+  "7.654975 47.493183," \
+  "7.655013 47.49317," \
+  "7.655053 47.493156," \
+  "7.655097 47.49315," \
+  "7.655137 47.49314," \
+  "7.655177 47.493134," \
+  "7.655203 47.49312," \
+  "7.655238 47.49311," \
+  "7.655282 47.493107," \
+  "7.65532 47.4931," \
+  "7.65536 47.493088," \
+  "7.655398 47.493076," \
+  "7.65544 47.493065," \
+  "7.65548 47.493057," \
+  "7.655517 47.493046," \
+  "7.655555 47.49304," \
+  "7.655597 47.49303," \
+  "7.655638 47.493027," \
+  "7.65568 47.49302," \
+  "7.655723 47.49301," \
+  "7.655767 47.493004," \
+  "7.655812 47.492996," \
+  "7.655853 47.49299," \
+  "7.65589 47.492977," \
+  "7.655928 47.49296," \
+  "7.65597 47.49295," \
+  "7.656008 47.492935," \
+  "7.656043 47.49292," \
+  "7.656082 47.492905," \
+  "7.656115 47.49289," \
+  "7.656145 47.492874," \
+  "7.656173 47.49285," \
+  "7.6562 47.49283," \
+  "7.656227 47.49281," \
+  "7.656258 47.492794," \
+  "7.65628 47.49278," \
+  "7.656305 47.492764," \
+  "7.656325 47.492744," \
+  "7.656335 47.49272," \
+  "7.656342 47.492695," \
+  "7.656353 47.492672," \
+  "7.656362 47.49265," \
+  "7.656368 47.492626," \
+  "7.656373 47.492603," \
+  "7.656382 47.49258," \
+  "7.656395 47.492554," \
+  "7.65641 47.49253," \
+  "7.656425 47.492504," \
+  "7.656433 47.49249," \
+  "7.656457 47.49246," \
+  "7.656475 47.492428," \
+  "7.656495 47.492405," \
+  "7.656508 47.492382," \
+  "7.656523 47.492355," \
+  "7.656528 47.49233," \
+  "7.656545 47.49229," \
+  "7.656568 47.492264," \
+  "7.65658 47.492233," \
+  "7.656595 47.49221," \
+  "7.65662 47.49218," \
+  "7.656637 47.49215," \
+  "7.656665 47.492123," \
+  "7.656692 47.492104," \
+  "7.656725 47.49207," \
+  "7.656745 47.49204," \
+  "7.656767 47.492016," \
+  "7.656783 47.491997," \
+  "7.656812 47.49197," \
+  "7.65685 47.49195," \
+  "7.656882 47.491932," \
+  "7.6569 47.4919," \
+  "7.656927 47.491882," \
+  "7.656955 47.49186," \
+  "7.656975 47.491844," \
+  "7.656997 47.49182," \
+  "7.657017 47.4918," \
+  "7.657035 47.49177," \
+  "7.657057 47.49174," \
+  "7.657078 47.491726," \
+  "7.657093 47.491707," \
+  "7.657112 47.491688," \
+  "7.65713 47.491657," \
+  "7.657137 47.491627," \
+  "7.657148 47.491596," \
+  "7.657168 47.491566," \
+  "7.657183 47.491524," \
+  "7.6572 47.491486," \
+  "7.6572 47.49146," \
+  "7.65721 47.49143," \
+  "7.65722 47.491394," \
+  "7.657225 47.491367," \
+  "7.657235 47.491337," \
+  "7.657245 47.491318," \
+  "7.657248 47.491283," \
+  "7.65724 47.491257," \
+  "7.657243 47.491234," \
+  "7.657253 47.491207," \
+  "7.65727 47.491184," \
+  "7.657288 47.491158," \
+  "7.657303 47.491127," \
+  "7.657325 47.491096," \
+  "7.657325 47.49106," \
+  "7.657338 47.491028," \
+  "7.657348 47.49099," \
+  "7.657358 47.49095," \
+  "7.65737 47.490913," \
+  "7.657377 47.49088," \
+  "7.657392 47.49085," \
+  "7.657407 47.490818," \
+  "7.657405 47.490788," \
+  "7.657405 47.490753," \
+  "7.657413 47.490726," \
+  "7.657427 47.490704," \
+  "7.657428 47.490677," \
+  "7.657428 47.490646," \
+  "7.657418 47.490612," \
+  "7.657417 47.490578," \
+  "7.657423 47.490543," \
+  "7.657427 47.49051," \
+  "7.657435 47.490475," \
+  "7.65744 47.49044," \
+  "7.657438 47.490406," \
+  "7.65743 47.490356," \
+  "7.657425 47.490322," \
+  "7.657428 47.49029," \
+  "7.657432 47.490253," \
+  "7.657433 47.490215," \
+  "7.657437 47.490185," \
+  "7.657437 47.49015," \
+  "7.657437 47.490116," \
+  "7.65744 47.490074," \
+  "7.657455 47.490044," \
+  "7.657472 47.490017," \
+  "7.657493 47.489983," \
+  "7.657515 47.489952," \
+  "7.657533 47.489914," \
+  "7.657552 47.48989," \
+  "7.657573 47.489864," \
+  "7.657595 47.489838," \
+  "7.657613 47.48981," \
+  "7.657632 47.489784," \
+  "7.657653 47.489758," \
+  "7.657677 47.48973," \
+  "7.657695 47.4897," \
+  "7.657718 47.489674," \
+  "7.65774 47.489647," \
+  "7.657763 47.489624," \
+  "7.65778 47.489597," \
+  "7.657795 47.48957," \
+  "7.65782 47.489536," \
+  "7.657842 47.489517," \
+  "7.657862 47.48949," \
+  "7.657878 47.489464," \
+  "7.657893 47.489433," \
+  "7.657908 47.489407," \
+  "7.657923 47.48938," \
+  "7.657947 47.489346," \
+  "7.657963 47.489323," \
+  "7.657978 47.489292," \
+  "7.65799 47.489254," \
+  "7.657995 47.48923," \
+  "7.658008 47.489204," \
+  "7.658027 47.489166," \
+  "7.65804 47.489147," \
+  "7.658055 47.48912," \
+  "7.658075 47.489098," \
+  "7.658097 47.48907," \
+  "7.658108 47.489048," \
+  "7.658123 47.48902," \
+  "7.658133 47.48899," \
+  "7.658143 47.488964," \
+  "7.658152 47.488934," \
+  "7.658158 47.488907," \
+  "7.65817 47.488876," \
+  "7.658187 47.48885," \
+  "7.6582 47.488823," \
+  "7.658212 47.48879," \
+  "7.658222 47.48877," \
+  "7.658237 47.488743," \
+  "7.658252 47.488716," \
+  "7.658268 47.48869," \
+  "7.658285 47.488667," \
+  "7.658298 47.488636," \
+  "7.658315 47.48861," \
+  "7.658337 47.48858," \
+  "7.658347 47.48855," \
+  "7.658358 47.488525," \
+  "7.658377 47.4885," \
+  "7.658393 47.48848," \
+  "7.658412 47.488453," \
+  "7.658432 47.488426," \
+  "7.658443 47.4884," \
+  "7.658462 47.488373," \
+  "7.658482 47.488346," \
+  "7.658498 47.48832," \
+  "7.658517 47.488293," \
+  "7.658535 47.48827," \
+  "7.658552 47.488243," \
+  "7.658568 47.488216," \
+  "7.658587 47.488194," \
+  "7.658605 47.48817," \
+  "7.658625 47.488148," \
+  "7.658632 47.488125," \
+  "7.658652 47.48811," \
+  "7.658662 47.488087," \
+  "7.658675 47.488056," \
+  "7.658692 47.48803," \
+  "7.658715 47.488007," \
+  "7.658742 47.487988," \
+  "7.658762 47.487965," \
+  "7.658783 47.48794," \
+  "7.658815 47.487926," \
+  "7.658843 47.487907," \
+  "7.658867 47.48789," \
+  "7.658892 47.48786," \
+  "7.65893 47.48784," \
+  "7.658957 47.487823," \
+  "7.658987 47.487804," \
+  "7.659015 47.487793," \
+  "7.659038 47.487774," \
+  "7.659063 47.487755," \
+  "7.659093 47.487736," \
+  "7.659123 47.487717," \
+  "7.659158 47.4877," \
+  "7.659193 47.48768," \
+  "7.659222 47.48767," \
+  "7.65926 47.48765," \
+  "7.659292 47.487637," \
+  "7.659318 47.48762," \
+  "7.659348 47.487606," \
+  "7.659378 47.48759," \
+  "7.659405 47.487576," \
+  "7.659433 47.487556," \
+  "7.659463 47.487537," \
+  "7.659498 47.48752," \
+  "7.659523 47.4875," \
+  "7.659552 47.487484," \
+  "7.659573 47.487473," \
+  "7.659602 47.48746," \
+  "7.659633 47.487446," \
+  "7.659663 47.487434," \
+  "7.659692 47.487423," \
+  "7.659717 47.487404," \
+  "7.659747 47.48739," \
+  "7.659778 47.48737," \
+  "7.65981 47.487354," \
+  "7.659843 47.487343," \
+  "7.659875 47.487324," \
+  "7.659902 47.48731," \
+  "7.659928 47.48729," \
+  "7.659948 47.487267," \
+  "7.659968 47.487244," \
+  "7.659988 47.48722," \
+  "7.660018 47.48721," \
+  "7.660047 47.487186," \
+  "7.66007 47.487167," \
+  "7.660097 47.48715," \
+  "7.660122 47.487133," \
+  "7.66015 47.487118," \
+  "7.660177 47.487103," \
+  "7.660203 47.487087," \
+  "7.660228 47.48707," \
+  "7.660253 47.487057," \
+  "7.66028 47.487034," \
+  "7.660302 47.487015," \
+  "7.660323 47.48699," \
+  "7.660348 47.486977," \
+  "7.660373 47.486954," \
+  "7.660395 47.486935," \
+  "7.660417 47.486916," \
+  "7.660435 47.486893," \
+  "7.660452 47.48687," \
+  "7.660468 47.486847," \
+  "7.660478 47.486816," \
+  "7.66049 47.4868," \
+  "7.660498 47.486774," \
+  "7.660507 47.486744," \
+  "7.660512 47.48672," \
+  "7.660513 47.48669," \
+  "7.660513 47.48666," \
+  "7.660522 47.486633," \
+  "7.660527 47.486607," \
+  "7.660528 47.48658," \
+  "7.660528 47.486557," \
+  "7.660528 47.48653," \
+  "7.660528 47.4865," \
+  "7.660528 47.48647," \
+  "7.660542 47.486446," \
+  "7.660538 47.48642," \
+  "7.660527 47.486393," \
+  "7.66052 47.486374," \
+  "7.660505 47.48635," \
+  "7.660478 47.48632," \
+  "7.660457 47.486298," \
+  "7.66044 47.48628," \
+  "7.660423 47.48626," \
+  "7.660408 47.486237," \
+  "7.660392 47.486214," \
+  "7.660375 47.486187," \
+  "7.660365 47.48617," \
+  "7.660353 47.48615," \
+  "7.660335 47.486126," \
+  "7.660323 47.48611," \
+  "7.660313 47.48609," \
+  "7.660303 47.486057," \
+  "7.660293 47.48603," \
+  "7.660285 47.48601," \
+  "7.660275 47.485996," \
+  "7.660265 47.485977," \
+  "7.660253 47.48595," \
+  "7.660238 47.485924," \
+  "7.660235 47.485905," \
+  "7.66023 47.485886," \
+  "7.660232 47.485863," \
+  "7.66023 47.485844," \
+  "7.660223 47.48582," \
+  "7.660215 47.485794," \
+  "7.66021 47.48577," \
+  "7.660205 47.48575," \
+  "7.660205 47.48573," \
+  "7.660213 47.485714," \
+  "7.660222 47.485706," \
+  "7.660225 47.485687," \
+  "7.66023 47.485672," \
+  "7.660232 47.485657," \
+  "7.66024 47.48564," \
+  "7.660247 47.485638," \
+  "7.66025 47.485626," \
+  "7.660253 47.485615," \
+  "7.660257 47.485596," \
+  "7.660262 47.48558," \
+  "7.660255 47.485554," \
+  "7.660247 47.48553," \
+  "7.660242 47.48551," \
+  "7.660242 47.485493," \
+  "7.660245 47.48548," \
+  "7.66026 47.485474," \
+  "7.660268 47.48546," \
+  "7.660277 47.485443," \
+  "7.660282 47.485428," \
+  "7.660292 47.485413," \
+  "7.660303 47.485397," \
+  "7.660322 47.48538," \
+  "7.660332 47.48536," \
+  "7.660343 47.485336," \
+  "7.66036 47.485313," \
+  "7.660377 47.48528," \
+  "7.660387 47.485245," \
+  "7.660392 47.48522," \
+  "7.66039 47.48519," \
+  "7.66038 47.485153," \
+  "7.660358 47.48512," \
+  "7.660358 47.485104," \
+  "7.660358 47.485077," \
+  "7.660355 47.48506," \
+  "7.660347 47.48504," \
+  "7.660332 47.485016," \
+  "7.660325 47.484997," \
+  "7.660317 47.484978," \
+  "7.660312 47.48496," \
+  "7.660305 47.484943," \
+  "7.660303 47.48493," \
+  "7.660298 47.484917," \
+  "7.660287 47.484898," \
+  "7.660273 47.484886," \
+  "7.660263 47.48487," \
+  "7.660255 47.484856," \
+  "7.660247 47.484833," \
+  "7.660252 47.48482," \
+  "7.660255 47.484802," \
+  "7.66025 47.48479," \
+  "7.660233 47.484768," \
+  "7.660225 47.484753," \
+  "7.660218 47.484737," \
+  "7.660207 47.484722," \
+  "7.660185 47.484707," \
+  "7.66016 47.484688," \
+  "7.660135 47.48467," \
+  "7.660105 47.484642," \
+  "7.660078 47.48462," \
+  "7.660063 47.484604," \
+  "7.660048 47.484592," \
+  "7.660038 47.48458," \
+  "7.660023 47.484573," \
+  "7.660003 47.484554," \
+  "7.659992 47.48454," \
+  "7.659978 47.484524," \
+  "7.659967 47.48451," \
+  "7.65996 47.48449," \
+  "7.659957 47.48447," \
+  "7.659948 47.484455," \
+  "7.659942 47.484444," \
+  "7.659925 47.484425," \
+  "7.659903 47.48441," \
+  "7.659892 47.484394," \
+  "7.65988 47.48438," \
+  "7.659863 47.484356," \
+  "7.659847 47.48433," \
+  "7.65983 47.484314," \
+  "7.659813 47.48429," \
+  "7.65979 47.484253," \
+  "7.659787 47.484234," \
+  "7.659778 47.48422," \
+  "7.659768 47.4842," \
+  "7.659755 47.48418," \
+  "7.65974 47.484165," \
+  "7.659725 47.484154," \
+  "7.659707 47.48414," \
+  "7.659693 47.48412," \
+  "7.659683 47.484108," \
+  "7.659672 47.484097," \
+  "7.659657 47.48408," \
+  "7.659643 47.484066," \
+  "7.659623 47.48405," \
+  "7.659595 47.48403," \
+  "7.65957 47.484016," \
+  "7.659482 47.483986," \
+  "7.659418 47.48398," \
+  "7.65937 47.48398," \
+  "7.659318 47.483974," \
+  "7.659267 47.483967," \
+  "7.659235 47.483963," \
+  "7.659213 47.483955," \
+  "7.659197 47.483948," \
+  "7.65917 47.483936," \
+  "7.659133 47.483925," \
+  "7.659105 47.48391," \
+  "7.659073 47.4839," \
+  "7.659043 47.483883," \
+  "7.659003 47.483864," \
+  "7.658967 47.48385," \
+  "7.658932 47.483833," \
+  "7.658893 47.483814," \
+  "7.658853 47.4838," \
+  "7.658818 47.483784," \
+  "7.658795 47.48377," \
+  "7.658765 47.48375," \
+  "7.658735 47.483727," \
+  "7.658698 47.483707," \
+  "7.658663 47.48369," \
+  "7.658625 47.48367," \
+  "7.658588 47.483646," \
+  "7.658552 47.48363," \
+  "7.658525 47.48362," \
+  "7.658497 47.483604," \
+  "7.658472 47.48359," \
+  "7.65844 47.483574," \
+  "7.658405 47.48356," \
+  "7.65837 47.48354," \
+  "7.658335 47.483517," \
+  "7.658307 47.4835," \
+  "7.658273 47.483486," \
+  "7.658253 47.483475," \
+  "7.658227 47.48346," \
+  "7.658207 47.483444," \
+  "7.658185 47.483437," \
+  "7.658145 47.483414," \
+  "7.658108 47.483387," \
+  "7.658075 47.483368," \
+  "7.658045 47.483345," \
+  "7.658013 47.483322," \
+  "7.657985 47.483303," \
+  "7.657955 47.483284," \
+  "7.657932 47.48327," \
+  "7.657908 47.483253," \
+  "7.657878 47.483234," \
+  "7.657857 47.48322," \
+  "7.657837 47.483204," \
+  "7.65782 47.483185," \
+  "7.6578 47.48316," \
+  "7.65778 47.483135," \
+  "7.65775 47.48311," \
+  "7.657753 47.4831," \
+  "7.657747 47.483086," \
+  "7.657732 47.48306," \
+  "7.657722 47.483036," \
+  "7.657703 47.483013," \
+  "7.657697 47.48299," \
+  "7.657692 47.482967," \
+  "7.657688 47.48295," \
+  "7.657682 47.48292," \
+  "7.657668 47.482903," \
+  "7.657638 47.48287," \
+  "7.657613 47.48285," \
+  "7.657587 47.48282," \
+  "7.657562 47.48279," \
+  "7.657545 47.482777," \
+  "7.657517 47.48275," \
+  "7.65749 47.482727," \
+  "7.657462 47.482708," \
+  "7.657438 47.48269," \
+  "7.657402 47.48266," \
+  "7.65737 47.48264," \
+  "7.657345 47.48262," \
+  "7.657313 47.482597," \
+  "7.657282 47.48258," \
+  "7.65725 47.48255," \
+  "7.65723 47.482525," \
+  "7.657223 47.4825," \
+  "7.657225 47.482475," \
+  "7.657223 47.482445," \
+  "7.657225 47.482414," \
+  "7.657228 47.482388," \
+  "7.657233 47.482365," \
+  "7.65724 47.48235," \
+  "7.657235 47.48232," \
+  "7.657222 47.48229," \
+  "7.657212 47.482265," \
+  "7.657187 47.48224," \
+  "7.657162 47.482212," \
+  "7.657138 47.48218," \
+  "7.65712 47.48215," \
+  "7.657105 47.482113," \
+  "7.657093 47.482082," \
+  "7.657082 47.48206," \
+  "7.657073 47.482037," \
+  "7.657062 47.482002," \
+  "7.657062 47.481968," \
+  "7.657062 47.481937," \
+  "7.657065 47.481907," \
+  "7.657073 47.481873," \
+  "7.657083 47.481842," \
+  "7.657092 47.481815," \
+  "7.657103 47.481773," \
+  "7.65711 47.481747," \
+  "7.657113 47.48172," \
+  "7.657118 47.481693," \
+  "7.657123 47.481663," \
+  "7.657133 47.48163," \
+  "7.657147 47.4816," \
+  "7.657162 47.48158," \
+  "7.657183 47.48155," \
+  "7.657202 47.48153," \
+  "7.657232 47.4815," \
+  "7.657255 47.48148," \
+  "7.65728 47.481453," \
+  "7.657298 47.481422," \
+  "7.657317 47.481396," \
+  "7.657335 47.481365," \
+  "7.657355 47.481342," \
+  "7.657387 47.48133," \
+  "7.657422 47.48131," \
+  "7.657452 47.481293," \
+  "7.657477 47.481266," \
+  "7.657497 47.481243," \
+  "7.657522 47.48121," \
+  "7.657532 47.481182," \
+  "7.657538 47.481155," \
+  "7.657552 47.48112," \
+  "7.657565 47.48108," \
+  "7.657575 47.481045," \
+  "7.65758 47.481007," \
+  "7.657588 47.480984," \
+  "7.65759 47.480938," \
+  "7.657603 47.48091," \
+  "7.657618 47.480873," \
+  "7.657638 47.48084," \
+  "7.657648 47.480797," \
+  "7.657663 47.480755," \
+  "7.657668 47.480717," \
+  "7.65767 47.480682," \
+  "7.657675 47.480648," \
+  "7.657682 47.480614," \
+  "7.657685 47.48058," \
+  "7.657693 47.480553," \
+  "7.657702 47.48052," \
+  "7.657715 47.480488," \
+  "7.657742 47.480446," \
+  "7.657753 47.480423," \
+  "7.657763 47.48039," \
+  "7.657778 47.48036," \
+  "7.657783 47.480324," \
+  "7.657785 47.480293," \
+  "7.65779 47.480263," \
+  "7.657788 47.48023," \
+  "7.657792 47.480194," \
+  "7.657785 47.480164," \
+  "7.657782 47.48013," \
+  "7.657788 47.4801," \
+  "7.657785 47.48007," \
+  "7.657783 47.48004," \
+  "7.657783 47.480003," \
+  "7.657785 47.47997," \
+  "7.657792 47.47994," \
+  "7.657798 47.479908," \
+  "7.657808 47.479874," \
+  "7.657827 47.47984," \
+  "7.657833 47.47981," \
+  "7.657845 47.479774," \
+  "7.657865 47.47974," \
+  "7.657885 47.479706," \
+  "7.657908 47.47967," \
+  "7.65793 47.47964," \
+  "7.657947 47.479614," \
+  "7.657953 47.479576," \
+  "7.657967 47.479538," \
+  "7.657985 47.47949," \
+  "7.657993 47.479458," \
+  "7.658007 47.479412," \
+  "7.65801 47.47938," \
+  "7.658013 47.47934," \
+  "7.65802 47.4793," \
+  "7.658027 47.479275," \
+  "7.658038 47.479233," \
+  "7.658048 47.4792," \
+  "7.658055 47.47916," \
+  "7.658078 47.479126," \
+  "7.658102 47.47909," \
+  "7.658103 47.479046," \
+  "7.658108 47.479004," \
+  "7.658127 47.478973," \
+  "7.658133 47.478935," \
+  "7.658142 47.47891," \
+  "7.658162 47.47887," \
+  "7.658178 47.478844," \
+  "7.658165 47.478806," \
+  "7.658135 47.47877," \
+  "7.658115 47.47874," \
+  "7.658107 47.478718," \
+  "7.658103 47.4787," \
+  "7.658087 47.478676," \
+  "7.658058 47.478664," \
+  "7.658023 47.47865," \
+  "7.657982 47.478638," \
+  "7.657933 47.478626," \
+  "7.657897 47.47861," \
+  "7.657853 47.478596," \
+  "7.657808 47.47859," \
+  "7.657765 47.478577," \
+  "7.657722 47.47856," \
+  "7.657688 47.478554," \
+  "7.657655 47.478554," \
+  "7.657623 47.47856," \
+  "7.657602 47.478577," \
+  "7.657587 47.478607," \
+  "7.657573 47.47863," \
+  "7.65755 47.47865," \
+  "7.657532 47.47867," \
+  "7.65752 47.478683," \
+  "7.657503 47.478687," \
+  "7.657488 47.478683," \
+  "7.657482 47.478672," \
+  "7.657477 47.47866," \
+  "7.65747 47.47865," \
+  "7.657457 47.47864," \
+  "7.657442 47.478626," \
+  "7.65743 47.478615," \
+  "7.657423 47.478603," \
+  "7.657407 47.478592," \
+  "7.657393 47.478577," \
+  "7.657375 47.47856," \
+  "7.657355 47.47855," \
+  "7.657342 47.47854," \
+  "7.657333 47.478527," \
+  "7.657317 47.47852," \
+  "7.6573 47.478504," \
+  "7.657283 47.478504," \
+  "7.657248 47.478493," \
+  "7.657215 47.478485," \
+  "7.657193 47.478493," \
+  "7.657172 47.478508," \
+  "7.65716 47.478523," \
+  "7.657157 47.47854," \
+  "7.657158 47.47856," \
+  "7.65716 47.478584," \
+  "7.657153 47.4786," \
+  "7.65715 47.478615," \
+  "7.657147 47.478622," \
+  "7.657142 47.478626," \
+  "7.657137 47.47862," \
+  "7.657123 47.478607," \
+  "7.657117 47.478603," \
+  "7.657105 47.478584," \
+  "7.657087 47.47856," \
+  "7.657062 47.478542," \
+  "7.657042 47.478527," \
+  "7.657025 47.47852," \
+  "7.657007 47.47851," \
+  "7.656985 47.478497," \
+  "7.656963 47.478477," \
+  "7.656938 47.47846," \
+  "7.656912 47.47844," \
+  "7.656888 47.478416," \
+  "7.656865 47.478397," \
+  "7.656842 47.478386," \
+  "7.656812 47.47837," \
+  "7.656772 47.47835," \
+  "7.65673 47.478336," \
+  "7.656688 47.478325," \
+  "7.656647 47.478313," \
+  "7.656607 47.478302," \
+  "7.656563 47.478294," \
+  "7.656515 47.47828," \
+  "7.656467 47.478264," \
+  "7.656417 47.47825," \
+  "7.656368 47.478233," \
+  "7.65633 47.478226," \
+  "7.65629 47.478214," \
+  "7.656248 47.478207," \
+  "7.65621 47.4782," \
+  "7.65617 47.478195," \
+  "7.656127 47.47819," \
+  "7.656077 47.478184," \
+  "7.656038 47.478176," \
+  "7.656003 47.47817," \
+  "7.655972 47.478157," \
+  "7.655938 47.47815," \
+  "7.655907 47.47815," \
+  "7.655867 47.47815," \
+  "7.655827 47.478153," \
+  "7.655787 47.478153," \
+  "7.655743 47.478153," \
+  "7.6557 47.478153," \
+  "7.65566 47.478153," \
+  "7.655623 47.478146," \
+  "7.655575 47.478138," \
+  "7.65554 47.47813," \
+  "7.655498 47.47812," \
+  "7.655458 47.47811," \
+  "7.655413 47.478096," \
+  "7.655373 47.47809," \
+  "7.655345 47.47809," \
+  "7.655312 47.478077," \
+  "7.65528 47.47807," \
+  "7.655243 47.478058," \
+  "7.655198 47.478046," \
+  "7.655148 47.47803," \
+  "7.6551 47.47802," \
+  "7.655052 47.47801," \
+  "7.65498 47.477985," \
+  "7.654918 47.477966," \
+  "7.654868 47.47795," \
+  "7.654815 47.477932," \
+  "7.654757 47.477905," \
+  "7.654708 47.477886," \
+  "7.654668 47.47787," \
+  "7.654612 47.47785," \
+  "7.654568 47.477837," \
+  "7.654527 47.477825," \
+  "7.654493 47.477818," \
+  "7.65446 47.477806," \
+  "7.654422 47.477787," \
+  "7.654383 47.477776," \
+  "7.654338 47.47776," \
+  "7.654293 47.47775," \
+  "7.654252 47.477737," \
+  "7.654207 47.477726," \
+  "7.65417 47.47772," \
+  "7.65413 47.477715," \
+  "7.65409 47.477703," \
+  "7.654047 47.47769," \
+  "7.654003 47.477684," \
+  "7.65396 47.477676," \
+  "7.653913 47.477673," \
+  "7.653875 47.47766," \
+  "7.653838 47.477657," \
+  "7.653797 47.477654," \
+  "7.653755 47.477646," \
+  "7.653713 47.477642," \
+  "7.653673 47.47764," \
+  "7.653628 47.477627," \
+  "7.653578 47.47762," \
+  "7.653528 47.47761," \
+  "7.653473 47.477596," \
+  "7.653423 47.47758," \
+  "7.653375 47.477573," \
+  "7.653328 47.477562," \
+  "7.653282 47.47756," \
+  "7.653245 47.47755," \
+  "7.6532 47.477547," \
+  "7.65315 47.477547," \
+  "7.6531 47.477543," \
+  "7.653058 47.47754," \
+  "7.652995 47.477528," \
+  "7.652937 47.47752," \
+  "7.652877 47.477505," \
+  "7.652815 47.477486," \
+  "7.652757 47.47748," \
+  "7.652692 47.477463," \
+  "7.652635 47.477455," \
+  "7.652573 47.477448," \
+  "7.652513 47.477448," \
+  "7.652462 47.477448," \
+  "7.652408 47.47745," \
+  "7.652353 47.47745," \
+  "7.6523 47.477455," \
+  "7.652248 47.477467," \
+  "7.652192 47.477474," \
+  "7.652137 47.47748," \
+  "7.65208 47.477497," \
+  "7.65201 47.477524," \
+  "7.65197 47.477543," \
+  "7.651922 47.477566," \
+  "7.651863 47.47759," \
+  "7.651822 47.477596," \
+  "7.651772 47.477608," \
+  "7.651722 47.47761," \
+  "7.651668 47.477615," \
+  "7.651612 47.477615," \
+  "7.651562 47.477615," \
+  "7.651513 47.47762," \
+  "7.651475 47.477615," \
+  "7.651447 47.47762," \
+  "7.651423 47.477623," \
+  "7.651388 47.477623," \
+  "7.651358 47.477627," \
+  "7.65133 47.47763," \
+  "7.651278 47.477623," \
+  "7.651237 47.47761," \
+  "7.651192 47.47761," \
+  "7.651142 47.477604," \
+  "7.651107 47.4776," \
+  "7.651075 47.4776," \
+  "7.651028 47.477596," \
+  "7.650978 47.47759," \
+  "7.650935 47.477585," \
+  "7.650895 47.47758," \
+  "7.650853 47.477577," \
+  "7.65081 47.47757," \
+  "7.650765 47.477566," \
+  "7.650718 47.47756," \
+  "7.650677 47.47755," \
+  "7.650635 47.47754," \
+  "7.650595 47.477524," \
+  "7.650552 47.477512," \
+  "7.650513 47.47751," \
+  "7.65047 47.477505," \
+  "7.65042 47.4775," \
+  "7.650367 47.4775," \
+  "7.650288 47.477512," \
+  "7.650227 47.477524," \
+  "7.650172 47.47753," \
+  "7.65011 47.477543," \
+  "7.650047 47.477543," \
+  "7.649998 47.477547," \
+  "7.649947 47.477554," \
+  "7.649913 47.477566," \
+  "7.649878 47.47757," \
+  "7.649835 47.477573," \
+  "7.649782 47.477573," \
+  "7.649725 47.477573," \
+  "7.649672 47.47758," \
+  "7.649622 47.477585," \
+  "7.64958 47.477585," \
+  "7.64953 47.47759," \
+  "7.649475 47.477585," \
+  "7.649433 47.47759," \
+  "7.649378 47.47759," \
+  "7.649333 47.47759," \
+  "7.649297 47.477596," \
+  "7.649263 47.477608," \
+  "7.649225 47.477623," \
+  "7.649198 47.47764," \
+  "7.649158 47.477654," \
+  "7.649128 47.477657," \
+  "7.649088 47.477665," \
+  "7.649045 47.477673," \
+  "7.64901 47.477676," \
+  "7.648982 47.477688," \
+  "7.648942 47.477695," \
+  "7.648905 47.477703," \
+  "7.64886 47.477707," \
+  "7.648817 47.477707," \
+  "7.648782 47.477707," \
+  "7.648732 47.477703," \
+  "7.648695 47.4777," \
+  "7.64866 47.47769," \
+  "7.648628 47.477684," \
+  "7.648582 47.477673," \
+  "7.64854 47.47766," \
+  "7.648508 47.477657," \
+  "7.648468 47.477654," \
+  "7.648428 47.47765," \
+  "7.64838 47.477646," \
+  "7.64833 47.47764," \
+  "7.648287 47.47764," \
+  "7.648247 47.477642," \
+  "7.648205 47.477646," \
+  "7.648158 47.477654," \
+  "7.648118 47.47766," \
+  "7.648072 47.47767," \
+  "7.648033 47.477676," \
+  "7.647978 47.47769," \
+  "7.647935 47.477703," \
+  "7.647892 47.477722," \
+  "7.647857 47.47774," \
+  "7.64782 47.477764," \
+  "7.64778 47.47779," \
+  "7.64775 47.477818)"
diff --git a/tests/unit/algorithm/distance/DiscreteFrechetDistanceTest.cpp b/tests/unit/algorithm/distance/DiscreteFrechetDistanceTest.cpp
index ae5c344c7..d118b494f 100644
--- a/tests/unit/algorithm/distance/DiscreteFrechetDistanceTest.cpp
+++ b/tests/unit/algorithm/distance/DiscreteFrechetDistanceTest.cpp
@@ -31,76 +31,50 @@ namespace tut {
 // Test Group
 //
 
-// Test data, not used
-struct test_DiscreteFrechetDistance_data {
+struct test_frechetdistance_data {
 
-    typedef std::unique_ptr<Geometry> GeomPtr;
-
-    test_DiscreteFrechetDistance_data()
-        :
-        pm(),
-        gf(GeometryFactory::create(&pm)),
-        reader(gf.get())
-    {}
-
-    static const double TOLERANCE;
+    geos::io::WKTReader reader;
+    static constexpr double TOLERANCE = 0.00001;
 
     void
-    runTest(const std::string& wkt1, const std::string& wkt2,
+    checkDiscreteFrechet(const std::string& wkt1, const std::string& wkt2,
             double expectedDistance)
     {
-        GeomPtr g1(reader.read(wkt1));
-        GeomPtr g2(reader.read(wkt2));
+        std::unique_ptr<Geometry> g1(reader.read(wkt1));
+        std::unique_ptr<Geometry> g2(reader.read(wkt2));
 
         double distance = DiscreteFrechetDistance::distance(*g1, *g2);
-        double diff = std::fabs(distance - expectedDistance);
-        //std::cerr << "expectedDistance:" << expectedDistance << " actual distance:" << distance << std::endl;
-        ensure(diff <= TOLERANCE);
+        ensure_equals("checkDiscreteFrechet", distance, expectedDistance, TOLERANCE);
     }
 
     void
-    runTest(const std::string& wkt1, const std::string& wkt2,
+    checkDensifiedFrechet(const std::string& wkt1, const std::string& wkt2,
             double densifyFactor, double expectedDistance)
     {
-        GeomPtr g1(reader.read(wkt1));
-        GeomPtr g2(reader.read(wkt2));
+        std::unique_ptr<Geometry> g1(reader.read(wkt1));
+        std::unique_ptr<Geometry> g2(reader.read(wkt2));
 
-        double distance = DiscreteFrechetDistance::distance(*g1,
-                          *g2, densifyFactor);
-        double diff = std::fabs(distance - expectedDistance);
-        //std::cerr << "expectedDistance:" << expectedDistance << " actual distance:" << distance << std::endl;
-        ensure(diff <= TOLERANCE);
+        double distance = DiscreteFrechetDistance::distance(*g1, *g2, densifyFactor);
+        ensure_equals("checkDensifiedFrechet", distance, expectedDistance, TOLERANCE);
     }
 
-    PrecisionModel pm;
-    GeometryFactory::Ptr gf;
-    geos::io::WKTReader reader;
-
 };
-const double test_DiscreteFrechetDistance_data::TOLERANCE = 0.00001;
 
-typedef test_group<test_DiscreteFrechetDistance_data> group;
+typedef test_group<test_frechetdistance_data> group;
 typedef group::object object;
 
-group test_DiscreteFrechetDistance_group("geos::algorithm::distance::DiscreteFrechetDistance");
-
-
-
-//
-// Test Cases
-//
+group test_frechetdistance_group("geos::algorithm::distance::DiscreteFrechetDistance");
 
 // 1 - testLineSegments
 template<>
 template<>
-void object::test<1>
-()
+void object::test<1> ()
 {
-    runTest("LINESTRING (0 0, 2 1)", "LINESTRING (0 0, 2 0)", 1.0);
+    checkDiscreteFrechet("LINESTRING (0 0, 2 1)", "LINESTRING (0 0, 2 0)", 1.0);
 
     // zero densify factor
     try {
-        runTest("LINESTRING (0 0, 2 1)", "LINESTRING EMPTY", 0.0, 0);
+        checkDensifiedFrechet("LINESTRING (0 0, 2 1)", "LINESTRING EMPTY", 0.0, 0);
     }
     catch(const geos::util::IllegalArgumentException& e) {
         // We do expect an exception
@@ -109,7 +83,7 @@ void object::test<1>
 
     // too big densify factor
     try {
-        runTest("LINESTRING (0 0, 2 1)", "LINESTRING EMPTY", 1 + 1e-10, 0);
+        checkDensifiedFrechet("LINESTRING (0 0, 2 1)", "LINESTRING EMPTY", 1 + 1e-10, 0);
     }
     catch(const geos::util::IllegalArgumentException& e) {
         // We do expect an exception
@@ -118,7 +92,7 @@ void object::test<1>
 
     // too small positive densify factor
     try {
-        runTest("LINESTRING (0 0, 2 1)", "LINESTRING EMPTY", 1e-30, 0);
+        checkDensifiedFrechet("LINESTRING (0 0, 2 1)", "LINESTRING EMPTY", 1e-30, 0);
     }
     catch(const geos::util::IllegalArgumentException& e) {
         // We do expect an exception
@@ -129,19 +103,17 @@ void object::test<1>
 // 2 - testLineSegments2
 template<>
 template<>
-void object::test<2>
-()
+void object::test<2> ()
 {
-    runTest("LINESTRING (0 0, 2 0)", "LINESTRING (0 1, 1 2, 2 1)", 2.23606797749979);
+    checkDiscreteFrechet("LINESTRING (0 0, 2 0)", "LINESTRING (0 1, 1 2, 2 1)", 2.23606797749979);
 }
 
 // 3 - testLinePoints
 template<>
 template<>
-void object::test<3>
-()
+void object::test<3> ()
 {
-    runTest("LINESTRING (0 0, 2 0)", "MULTIPOINT ((0 1), (1 0), (2 1))", 1.0);
+    checkDiscreteFrechet("LINESTRING (0 0, 2 0)", "MULTIPOINT ((0 1), (1 0), (2 1))", 1.0);
 }
 
 // 4 - testLinesShowingDiscretenessEffect
@@ -151,27 +123,25 @@ void object::test<3>
 //
 template<>
 template<>
-void object::test<4>
-()
+void object::test<4> ()
 {
-    runTest("LINESTRING (0 0, 100 0)", "LINESTRING (0 0, 50 50, 100 0)", 70.7106781186548);
-// densifying provides accurate HD
-    runTest("LINESTRING (0 0, 100 0)", "LINESTRING (0 0, 50 50, 100 0)", 0.5, 50.0);
+    checkDiscreteFrechet("LINESTRING (0 0, 100 0)", "LINESTRING (0 0, 50 50, 100 0)", 70.7106781186548);
+    // densifying provides accurate HD
+    checkDensifiedFrechet("LINESTRING (0 0, 100 0)", "LINESTRING (0 0, 50 50, 100 0)", 0.5, 50.0);
 }
 
 // 5 - test Line Segments revealing distance initialization bug
 template<>
 template<>
-void object::test<5>
-()
+void object::test<5> ()
 {
-    runTest("LINESTRING (1 1, 2 2)", "LINESTRING (1 4, 2 3)", 3);
+    checkDiscreteFrechet("LINESTRING (1 1, 2 2)", "LINESTRING (1 4, 2 3)", 3);
 }
 
+// Empty arguments should throw error
 template<>
 template<>
-void object::test<6>
-()
+void object::test<6> ()
 {
     auto g1 = reader.read("LINESTRING EMPTY");
     auto g2 = reader.read("POLYGON EMPTY");
@@ -183,4 +153,25 @@ void object::test<6>
     }
 }
 
+// Large test data set caused stack overflow in old 
+// recursive version of the algorithm
+// https://github.com/libgeos/geos/issues/516
+
+#include "DiscreteFrechetDistanceData.h"
+
+template<>
+template<>
+void object::test<7> ()
+{
+    checkDiscreteFrechet(LS1, LS2, 2.49903e-04);
+}
+
+template<>
+template<>
+void object::test<8> ()
+{
+    checkDensifiedFrechet("LINESTRING(1 0, 2 0)", "LINESTRING(-1 0, 0 0, 7 8)", 0.002, 9.43398);
+}
+
+
 } // namespace tut
diff --git a/tests/unit/algorithm/distance/MatrixStorageTest.cpp b/tests/unit/algorithm/distance/MatrixStorageTest.cpp
new file mode 100644
index 000000000..cea043cf4
--- /dev/null
+++ b/tests/unit/algorithm/distance/MatrixStorageTest.cpp
@@ -0,0 +1,110 @@
+//
+// Test Suite for geos::algorithm::distance::DiscreteFrechetDistance::MatrixStorage
+//
+
+#include <tut/tut.hpp>
+// geos
+#include <geos/algorithm/distance/DiscreteFrechetDistance.h>
+#include <geos/util.h>
+
+using geos::algorithm::distance::DiscreteFrechetDistance;
+
+namespace tut {
+
+struct test_matrixstorage_data {
+
+    test_matrixstorage_data() {};
+
+    void
+    runOrderedTest(DiscreteFrechetDistance::MatrixStorage& mat)
+    {
+        mat.set(0, 0, 10);
+        mat.set(0, 1, 20);
+        mat.set(1, 1, 30);
+        mat.set(1, 3, 40);
+        mat.set(2, 2, 50);
+        mat.set(2, 3, 60);
+        mat.set(2, 4, 70);
+        mat.set(3, 5, 80);
+
+        ensure_equals("ordered 10", mat.get(0, 0), 10);
+        ensure_equals("ordered 20", mat.get(0, 1), 20);
+        ensure_equals("ordered 30", mat.get(1, 1), 30);
+        ensure_equals("ordered 40", mat.get(1, 3), 40);
+        ensure_equals("ordered 50", mat.get(2, 2), 50);
+        ensure_equals("ordered 60", mat.get(2, 3), 60);
+        ensure_equals("ordered 70", mat.get(2, 4), 70);
+        ensure_equals("ordered 80", mat.get(3, 5), 80);
+    }
+
+    void
+    runUnorderedTest(DiscreteFrechetDistance::MatrixStorage& mat)
+    {
+        mat.set(0, 0, 10);
+        mat.set(3, 5, 80);
+        mat.set(0, 1, 20);
+        mat.set(2, 4, 70);
+        mat.set(1, 1, 30);
+        mat.set(2, 3, 60);
+        mat.set(2, 2, 50);
+        mat.set(1, 3, 40);
+
+        ensure_equals("unordered 10", mat.get(0, 0), 10);
+        ensure_equals("unordered 20", mat.get(0, 1), 20);
+        ensure_equals("unordered 30", mat.get(1, 1), 30);
+        ensure_equals("unordered 40", mat.get(1, 3), 40);
+        ensure_equals("unordered 50", mat.get(2, 2), 50);
+        ensure_equals("unordered 60", mat.get(2, 3), 60);
+        ensure_equals("unordered 70", mat.get(2, 4), 70);
+        ensure_equals("unordered 80", mat.get(3, 5), 80);
+    }
+
+};
+
+typedef test_group<test_matrixstorage_data> group;
+typedef group::object object;
+
+group test_matrixstorage_group("geos::algorithm::distance::MatrixStorage");
+
+//
+// Test Cases
+//
+
+// testCsrMatrix
+template<>
+template<>
+void object::test<1>()
+{
+    std::unique_ptr<DiscreteFrechetDistance::MatrixStorage> mat;
+    mat = std::make_unique<DiscreteFrechetDistance::CsrMatrix>(4, 6, 0.0, 8);
+    runOrderedTest(*mat);
+    mat = std::make_unique<DiscreteFrechetDistance::CsrMatrix>(4, 6, 0.0, 8);
+    runUnorderedTest(*mat);
+}
+
+// testHashMapMatrix
+template<>
+template<>
+void object::test<2>()
+{
+    std::unique_ptr<DiscreteFrechetDistance::MatrixStorage> mat;
+    mat = std::make_unique<DiscreteFrechetDistance::HashMapMatrix>(4, 6, 0.0);
+    runOrderedTest(*mat);
+    mat = std::make_unique<DiscreteFrechetDistance::HashMapMatrix>(4, 6, 0.0);
+    runUnorderedTest(*mat);
+}
+
+// testRectMatrix
+template<>
+template<>
+void object::test<3>()
+{
+    std::unique_ptr<DiscreteFrechetDistance::MatrixStorage> mat;
+    mat = std::make_unique<DiscreteFrechetDistance::RectMatrix>(4, 6, 0.0);
+    runOrderedTest(*mat);
+    mat = std::make_unique<DiscreteFrechetDistance::RectMatrix>(4, 6, 0.0);
+    runUnorderedTest(*mat);
+}
+
+
+} // namespace tut
diff --git a/tests/unit/capi/GEOSFrechetDistanceTest.cpp b/tests/unit/capi/GEOSFrechetDistanceTest.cpp
index dc7d69929..68d8dddd5 100644
--- a/tests/unit/capi/GEOSFrechetDistanceTest.cpp
+++ b/tests/unit/capi/GEOSFrechetDistanceTest.cpp
@@ -26,8 +26,7 @@ group test_capigeosfrechetdistance_group("capi::GEOSFrechetDistance");
 
 template<>
 template<>
-void object::test<1>
-()
+void object::test<1>()
 {
     geom1_ = fromWKT("LINESTRING (0 0, 100 0)");
     geom2_ = fromWKT("LINESTRING (0 0, 50 50, 100 0)");
@@ -41,8 +40,7 @@ void object::test<1>
 
 template<>
 template<>
-void object::test<2>
-()
+void object::test<2>()
 {
     geom1_ = fromWKT("LINESTRING (0 0, 100 0)");
     geom2_ = fromWKT("LINESTRING (0 0, 50 50, 100 0)");
@@ -58,33 +56,15 @@ void object::test<2>
 // https://trac.osgeo.org/geos/ticket/1086
 template<>
 template<>
-void object::test<3>
-()
+void object::test<3>()
 {
+    double dist = 0;
     geom1_ = fromWKT("LINESTRING (0 0, 3 7, 5 5)");
     geom2_ = fromWKT("LINESTRING (0 0, 9 1, 2 2)");
-
-    double dist = 0;
-    GEOSFrechetDistanceDensify(geom1_, geom2_, 1e-40, &dist);
-
-    ensure(dist >= 0); // no crash
+    int ret = GEOSFrechetDistanceDensify(geom1_, geom2_, 1e-40, &dist);
+    ensure_equals(ret, 0);
 }
 
-// No crash with tiny densify fraction
-// https://trac.osgeo.org/geos/ticket/1086
-template<>
-template<>
-void object::test<4>
-()
-{
-    geom1_ = fromWKT("LINESTRING (0 0, 3 7, 5 5)");
-    geom2_ = fromWKT("LINESTRING (0 0, 9 1, 2 2)");
-
-    double dist = 0;
-    GEOSFrechetDistanceDensify(geom1_, geom2_, 1e-19, &dist);
-
-    ensure(dist >= 0); // no crash
-}
 
 template<>
 template<>

-----------------------------------------------------------------------

Summary of changes:
 NEWS.md                                            |    1 +
 .../algorithm/distance/DiscreteFrechetDistance.h   |  588 ++-
 .../geos/algorithm/distance/PointPairDistance.h    |   10 +-
 src/algorithm/distance/DiscreteFrechetDistance.cpp |  414 +-
 .../distance/DiscreteFrechetDistanceData.h         | 5559 ++++++++++++++++++++
 .../distance/DiscreteFrechetDistanceTest.cpp       |  115 +-
 .../unit/algorithm/distance/MatrixStorageTest.cpp  |  110 +
 tests/unit/capi/GEOSFrechetDistanceTest.cpp        |   32 +-
 8 files changed, 6512 insertions(+), 317 deletions(-)
 create mode 100644 tests/unit/algorithm/distance/DiscreteFrechetDistanceData.h
 create mode 100644 tests/unit/algorithm/distance/MatrixStorageTest.cpp


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list