From 14e39e361f9ce346ceaed75a9dc23e3b8023ccc3 Mon Sep 17 00:00:00 2001 From: Lucia Zimmermann <7947215+zimzoom@users.noreply.github.com> Date: Wed, 4 Mar 2026 10:02:38 -0500 Subject: [PATCH 1/3] CMR-11098: Add force_cartesian optional param to search --- .../search/services/parameters/conversion.clj | 8 +- .../parameters/converters/geometry.clj | 35 ++- .../parameters/converters/shapefile.clj | 286 ++++++++++-------- .../parameters/parameter_validation.clj | 27 +- .../src/cmr/search/services/query_service.clj | 26 +- .../geometry_force_cartesian_test.clj | 136 +++++++++ .../collection_shapefile_search_test.clj | 39 ++- .../granule/granule_shapefile_search_test.clj | 37 +++ 8 files changed, 430 insertions(+), 164 deletions(-) create mode 100644 search-app/test/cmr/search/test/unit/services/parameter_converters/geometry_force_cartesian_test.clj diff --git a/search-app/src/cmr/search/services/parameters/conversion.clj b/search-app/src/cmr/search/services/parameters/conversion.clj index f907512d4c..e306c9a83a 100644 --- a/search-app/src/cmr/search/services/parameters/conversion.clj +++ b/search-app/src/cmr/search/services/parameters/conversion.clj @@ -86,6 +86,7 @@ :facets-size :string :shapefile :shapefile :simplify-shapefile :boolean + :force-cartesian :boolean ;; Tag parameters :tag-data :tag-query @@ -152,7 +153,8 @@ :cycle :int :passes :passes :shapefile :shapefile - :simplify-shapefile :boolean}) + :simplify-shapefile :boolean + :force-cartesian :boolean}) (defmethod common-params/param-mappings :tag [_] @@ -570,7 +572,7 @@ [(dissoc params :boosts :include-granule-counts :include-has-granules :include-facets :echo-compatible :hierarchical-facets :include-highlights :include-tags :all-revisions :facets-size - :simplify-shapefile) + :simplify-shapefile :force-cartesian) (-> query-attribs (merge {:boosts (:boosts params) :result-features (seq result-features) @@ -594,7 +596,7 @@ :granule params lp/param-aliases) result-features (when (= "v2" (util/safe-lowercase (:include-facets params))) [:facets-v2]) - regular-params (dissoc params :echo-compatible :include-facets :simplify-shapefile) + regular-params (dissoc params :echo-compatible :include-facets :simplify-shapefile :force-cartesian) {:keys [page-size offset]} query-attribs concept-id (:concept-id regular-params) concept-ids (when concept-id diff --git a/search-app/src/cmr/search/services/parameters/converters/geometry.clj b/search-app/src/cmr/search/services/parameters/converters/geometry.clj index b7a5d0224c..dfcb60c332 100644 --- a/search-app/src/cmr/search/services/parameters/converters/geometry.clj +++ b/search-app/src/cmr/search/services/parameters/converters/geometry.clj @@ -34,23 +34,27 @@ (defn line-string-ring->ring "Convert a JTS LineString to a spatial lib ring" - [^LineString line-string] - (rr/ords->ring :geodetic (coords->ords (.getCoordinates line-string)))) + ([^LineString line-string] + (line-string-ring->ring line-string {})) + ([^LineString line-string options] + (let [coord-sys (if (:force-cartesian options) :cartesian :geodetic)] + (rr/ords->ring coord-sys (coords->ords (.getCoordinates line-string)))))) (defn force-ccw-orientation "Forces a LineString to be in counter-clockwise orientation" [^LineString line-string winding] (let [coords (.getCoordinates line-string)] - (if (and - (> (count coords) 3) - (= winding :cw)) + (if (and + (> (count coords) 3) + (= winding :cw)) (.reverse line-string) line-string))) (defn polygon->shape "Convert a JTS Polygon to a spatial lib shape that can be used in a Spatial query. The `options` map can be used to provide information about winding. Accepted keys - are `:boundary-winding` and `:hole-winding`. Accepted values are `:cw` and `:ccw`." + are `:boundary-winding` and `:hole-winding`. Accepted values are `:cw` and `:ccw`. + The `:force-cartesian` key can be used to force cartesian coordinate system." [^Polygon polygon options] (let [boundary-ring (.getExteriorRing polygon) _ (debug (format "BOUNDARY RING BEFORE FORCE-CCW: %s" boundary-ring)) @@ -61,10 +65,12 @@ (for [i (range num-interior-rings)] (force-ccw-orientation (.getInteriorRingN polygon i) (:hole-winding options))) []) - all-rings (concat [boundary-ring] interior-rings)] + all-rings (concat [boundary-ring] interior-rings) + coord-sys (if (:force-cartesian options) :cartesian :geodetic)] (debug (format "NUM INTERIOR RINGS: [%d]" num-interior-rings)) (debug (format "RINGS: [%s]" (vec all-rings))) - (poly/polygon :geodetic (map line-string-ring->ring all-rings)))) + (debug (format "COORDINATE SYSTEM: %s" coord-sys)) + (poly/polygon coord-sys (map #(line-string-ring->ring % options) all-rings)))) (defn point->shape "Convert a JTS Point to a spatial lib shape that can be used in a Spatial query" @@ -73,16 +79,19 @@ (defn line->shape "Convert a LineString or LinearRing to a spatial lib shape that can be used in a Spatial query" - [^LineString line] - (let [ordinates (coords->ords (.getCoordinates line))] - (l/ords->line-string :geodetic ordinates))) + ([^LineString line] + (line->shape line {})) + ([^LineString line options] + (let [ordinates (coords->ords (.getCoordinates line)) + coord-sys (if (:force-cartesian options) :cartesian :geodetic)] + (l/ords->line-string coord-sys ordinates)))) (defmulti geometry->condition "Convert a Geometry object to a query condition. The `options` map can be used to provided additional information." - (fn [^Geometry geometry options] + (fn [^Geometry geometry options] (.getGeometryType geometry))) - + (defmethod geometry->condition "MultiPolygon" [geometry options] (let [shape (polygon->shape geometry options)] diff --git a/search-app/src/cmr/search/services/parameters/converters/shapefile.clj b/search-app/src/cmr/search/services/parameters/converters/shapefile.clj index 5900610a6c..5ac9439d6c 100644 --- a/search-app/src/cmr/search/services/parameters/converters/shapefile.clj +++ b/search-app/src/cmr/search/services/parameters/converters/shapefile.clj @@ -45,12 +45,24 @@ {:default 5000 :type Long}) (defn winding-opts - "Get the opts for a call to `normalize-polygon-winding` based on file type" - [mime-type] - (case mime-type - "application/shapefile+zip" {:boundary-winding :cw} - "application/vnd.google-earth.kml+xml" {} - "application/geo+json" {:hole-winding :cw})) + "Get the opts for a call to `normalize-polygon-winding` based on file type. + Optionally merges in force-cartesian option if provided in context. + + Note: For GeoJSON, we only normalize hole winding. Boundary winding is not normalized + because GeoJSON coordinates come from GeoTools already validated. For small local polygons + (the typical cartesian use case), geodetic CCW and cartesian CCW have the same orientation, + so no boundary reversal is needed." + ([mime-type] + (winding-opts mime-type nil)) + ([mime-type context] + (let [base-opts (case mime-type + "application/shapefile+zip" {:boundary-winding :cw} + "application/vnd.google-earth.kml+xml" {} + "application/geo+json" {:hole-winding :cw}) + final-opts (if (:force-cartesian context) + (assoc base-opts :force-cartesian true) + base-opts)] + final-opts))) (defn validate-entry-dir [target-dir entry] @@ -148,8 +160,8 @@ (cond (= point-count 0) "Shapefile has no points" (> point-count (max-shapefile-points)) - (format "Number of points in shapefile exceeds the limit of %d" - (max-shapefile-points)) + (format "Number of points in shapefile exceeds the limit of %d" + (max-shapefile-points)) :else nil))) (defn- validate-feature-count @@ -159,9 +171,9 @@ (cond (= feature-count 0) "Shapefile has no features" (> feature-count (max-shapefile-features)) - (format "Shapefile feature count [%d] exceeds the %d feature limit" - feature-count - (max-shapefile-features)) + (format "Shapefile feature count [%d] exceeds the %d feature limit" + feature-count + (max-shapefile-features)) :else nil))) (defn validate-features @@ -172,8 +184,9 @@ (defn feature->conditions "Process the contents of a Feature to return query conditions along with number of points in - the processed Feature. The `context` map can be used to pass along additional info." - [feature context] + the processed Feature. The `options` map can be used to pass along additional info including + winding options and force-cartesian setting." + [feature options] (let [crs (when (.getDefaultGeometryProperty feature) (-> feature .getDefaultGeometryProperty .getDescriptor .getCoordinateReferenceSystem)) properties (.getProperties feature) @@ -183,26 +196,30 @@ geometries (map #(-> % .getValue (transform-to-epsg-4326 crs)) geometry-props) _ (debug (format "Transformed [%d] geometries" (count geometries))) point-count (apply + (map geometry-point-count geometries)) - conditions (mapcat (fn [g] (geometry->conditions g context)) geometries)] + conditions (mapcat (fn [g] (geometry->conditions g options)) geometries)] (debug (format "CONDITIONS: %s" conditions)) [conditions point-count])) (defn features->conditions - "Converts a list of features into a vector of SpatialConditions" - [features mime-type] - (validate-features features) - (let [iterator (.iterator features)] - ;; Loop overall all the Features in the list, building up a vector of conditions - (loop [conditions []] - (if (.hasNext iterator) - (let [feature (.next iterator) - [feature-conditions _] (feature->conditions feature (winding-opts mime-type))] - (if (> (count feature-conditions) 0) - ;; if any conditions were created for the feature add them to the current conditions - (recur (conj conditions (gc/or-conds feature-conditions))) - (recur conditions))) - ;; no more Features in list - return conditions created - conditions)))) + "Converts a list of features into a vector of SpatialConditions. + The context map can contain force-cartesian setting which will be merged into the options." + ([features mime-type] + (features->conditions features mime-type nil)) + ([features mime-type context] + (validate-features features) + (let [iterator (.iterator features) + options (winding-opts mime-type context)] + ;; Loop overall all the Features in the list, building up a vector of conditions + (loop [conditions []] + (if (.hasNext iterator) + (let [feature (.next iterator) + [feature-conditions _] (feature->conditions feature options)] + (if (> (count feature-conditions) 0) + ;; if any conditions were created for the feature add them to the current conditions + (recur (conj conditions (gc/or-conds feature-conditions))) + (recur conditions))) + ;; no more Features in list - return conditions created + conditions))))) (defn error-if "Throw a service error with the given message if `f` applied to `item` is true. @@ -216,98 +233,107 @@ (defn esri-shapefile->condition-vec "Converts a shapefile to a vector of SpatialConditions" - [shapefile-info] - (try - (let [file (:tempfile shapefile-info) - ^File temp-dir (unzip-file file) - shp-file (error-if - (find-shp-file temp-dir) - nil? - "Incomplete shapefile: missing .shp file" - temp-dir) - data-store (FileDataStoreFinder/getDataStore shp-file) - feature-source (.getFeatureSource data-store) - features (.getFeatures feature-source) - iterator (.features features) - feature-list (ArrayList.)] - (try - (while (.hasNext iterator) - (let [feature (.next iterator)] - (.add feature-list feature))) - (features->conditions feature-list mt/shapefile) - (finally - (.close iterator) - (-> data-store .getFeatureReader .close) - (.delete temp-dir)))) - (catch Exception e - (let [{:keys [type errors]} (ex-data e)] - (if (and type errors) - (throw e) ;; This was a more specific service error so just re-throw it - (errors/throw-service-error :bad-request "Failed to parse shapefile")))))) + ([shapefile-info] + (esri-shapefile->condition-vec shapefile-info nil)) + ([shapefile-info context] + (try + (let [file (:tempfile shapefile-info) + ^File temp-dir (unzip-file file) + shp-file (error-if + (find-shp-file temp-dir) + nil? + "Incomplete shapefile: missing .shp file" + temp-dir) + data-store (FileDataStoreFinder/getDataStore shp-file) + feature-source (.getFeatureSource data-store) + features (.getFeatures feature-source) + iterator (.features features) + feature-list (ArrayList.)] + (try + (while (.hasNext iterator) + (let [feature (.next iterator)] + (.add feature-list feature))) + (features->conditions feature-list mt/shapefile context) + (finally + (.close iterator) + (-> data-store .getFeatureReader .close) + (.delete temp-dir)))) + (catch Exception e + (let [{:keys [type errors]} (ex-data e)] + (if (and type errors) + (throw e) ;; This was a more specific service error so just re-throw it + (errors/throw-service-error :bad-request "Failed to parse shapefile"))))))) (defn geojson->conditions-vec "Converts a geojson file to a vector of SpatialConditions" - [shapefile-info] - (try - (let [file (:tempfile shapefile-info) - _ (geojson/sanitize-geojson file) - url (URLs/fileToUrl file) - data-store (GeoJSONDataStore. url) - feature-source (.getFeatureSource data-store) - features (.getFeatures feature-source) - ;; Fail fast - _ (when (or (nil? features) - (nil? (.getSchema features)) - (.isEmpty features)) - (errors/throw-service-error :bad-request "Shapefile has no features")) - iterator (.features features) - feature-list (ArrayList.)] - (try - (while (.hasNext iterator) - (let [feature (.next iterator)] - (.add feature-list feature))) - (features->conditions feature-list mt/geojson) - (finally - (.close iterator) - (-> data-store .getFeatureReader .close) - (.delete file)))) - (catch Exception e - (let [{:keys [type errors]} (ex-data e)] - (if (and type errors) - (throw e) ;; This was a more specific service error so just re-throw it - (errors/throw-service-error :bad-request "Failed to parse shapefile")))))) + ([shapefile-info] + (geojson->conditions-vec shapefile-info nil)) + ([shapefile-info context] + (try + (let [file (:tempfile shapefile-info) + _ (geojson/sanitize-geojson file) + url (URLs/fileToUrl file) + data-store (GeoJSONDataStore. url) + feature-source (.getFeatureSource data-store) + features (.getFeatures feature-source) + ;; Fail fast + _ (when (or (nil? features) + (nil? (.getSchema features)) + (.isEmpty features)) + (errors/throw-service-error :bad-request "Shapefile has no features")) + iterator (.features features) + feature-list (ArrayList.)] + (try + (while (.hasNext iterator) + (let [feature (.next iterator)] + (.add feature-list feature))) + (features->conditions feature-list mt/geojson context) + (finally + (.close iterator) + (-> data-store .getFeatureReader .close) + (.delete file)))) + (catch Exception e + (let [{:keys [type errors]} (ex-data e)] + (if (and type errors) + (throw e) ;; This was a more specific service error so just re-throw it + (errors/throw-service-error :bad-request "Failed to parse shapefile"))))))) (defn kml->conditions-vec "Converts a kml file to a vector of SpatialConditions" - [shapefile-info] - (try - (let [file (:tempfile shapefile-info) - input-stream (FileInputStream. file) - parser (PullParser. (KMLConfiguration.) input-stream SimpleFeature) - feature-list (ArrayList.)] - (try - (util/while-let [feature (.parse parser)] - (when (> (feature-point-count feature) 0) - (.add feature-list feature))) - (features->conditions feature-list mt/kml) - (finally - (.delete file)))) - (catch Exception e - (let [{:keys [type errors]} (ex-data e)] - (if (and type errors) - (throw e) ;; This was a more specific service error so just re-throw it - (errors/throw-service-error :bad-request "Failed to parse shapefile")))))) + ([shapefile-info] + (kml->conditions-vec shapefile-info nil)) + ([shapefile-info context] + (try + (let [file (:tempfile shapefile-info) + input-stream (FileInputStream. file) + parser (PullParser. (KMLConfiguration.) input-stream SimpleFeature) + feature-list (ArrayList.)] + (try + (util/while-let [feature (.parse parser)] + (when (> (feature-point-count feature) 0) + (.add feature-list feature))) + (features->conditions feature-list mt/kml context) + (finally + (.delete file)))) + (catch Exception e + (let [{:keys [type errors]} (ex-data e)] + (if (and type errors) + (throw e) ;; This was a more specific service error so just re-throw it + (errors/throw-service-error :bad-request "Failed to parse shapefile"))))))) (defn in-memory->conditions-vec "Converts a group of features produced by simplification to a vector of SpatialConditions" - [shapefile-info] - (let [^ArrayList features (:tempfile shapefile-info) - mime-type (:content-type shapefile-info)] - (features->conditions features mime-type))) + ([shapefile-info] + (in-memory->conditions-vec shapefile-info nil)) + ([shapefile-info context] + (let [^ArrayList features (:tempfile shapefile-info) + mime-type (:content-type shapefile-info)] + (features->conditions features mime-type context)))) (defmulti shapefile->conditions - "Converts a shapefile to query conditions based on shapefile format" - (fn [shapefile-info] + "Converts a shapefile to query conditions based on shapefile format. + Optionally accepts a context map containing force-cartesian setting." + (fn [shapefile-info & _] (debug (format "SHAPEFILE FORMAT: %s" (:contenty-type shapefile-info))) (if (:in-memory shapefile-info) :in-memory @@ -315,30 +341,42 @@ ;; ESRI shapefiles (defmethod shapefile->conditions mt/shapefile - [shapefile-info] - (let [conditions-vec (esri-shapefile->condition-vec shapefile-info)] - (gc/or-conds (flatten conditions-vec)))) + ([shapefile-info] + (shapefile->conditions shapefile-info nil)) + ([shapefile-info context] + (let [conditions-vec (esri-shapefile->condition-vec shapefile-info context)] + (gc/or-conds (flatten conditions-vec))))) ;; GeoJSON (defmethod shapefile->conditions mt/geojson - [shapefile-info] - (let [conditions-vec (geojson->conditions-vec shapefile-info)] - (gc/or-conds (flatten conditions-vec)))) + ([shapefile-info] + (shapefile->conditions shapefile-info nil)) + ([shapefile-info context] + (let [conditions-vec (geojson->conditions-vec shapefile-info context)] + (gc/or-conds (flatten conditions-vec))))) ;; KML (defmethod shapefile->conditions mt/kml - [shapefile-info] - (let [conditions-vec (kml->conditions-vec shapefile-info)] - (gc/or-conds (flatten conditions-vec)))) + ([shapefile-info] + (shapefile->conditions shapefile-info nil)) + ([shapefile-info context] + (let [conditions-vec (kml->conditions-vec shapefile-info context)] + (gc/or-conds (flatten conditions-vec))))) ;; Simplfied and stored in memory (defmethod shapefile->conditions :in-memory - [shapefile-info] - (let [conditions-vec (in-memory->conditions-vec shapefile-info)] - (gc/or-conds (flatten conditions-vec)))) + ([shapefile-info] + (shapefile->conditions shapefile-info nil)) + ([shapefile-info context] + (let [conditions-vec (in-memory->conditions-vec shapefile-info context)] + (gc/or-conds (flatten conditions-vec))))) (defmethod p/parameter->condition :shapefile - [_context _concept-type _param value _options] + [context _concept-type _param value _options] (if (enable-shapefile-parameter-flag) - (shapefile->conditions value) + (let [;; Params are added to context as keywords after sanitization + force-cartesian-value (get-in context [:params :force-cartesian]) + force-cartesian (or (= "true" force-cartesian-value) (= true force-cartesian-value)) + shapefile-context (when force-cartesian {:force-cartesian true})] + (shapefile->conditions value shapefile-context)) (errors/throw-service-error :bad-request "Searching by shapefile is not enabled"))) diff --git a/search-app/src/cmr/search/services/parameters/parameter_validation.clj b/search-app/src/cmr/search/services/parameters/parameter_validation.clj index 83fa4caa17..9e1ee047c0 100644 --- a/search-app/src/cmr/search/services/parameters/parameter_validation.clj +++ b/search-app/src/cmr/search/services/parameters/parameter_validation.clj @@ -38,7 +38,7 @@ cpv/basic-params-config {:single-value #{:keyword :echo-compatible :include-granule-counts :include-has-granules :include-facets :hierarchical-facets :include-highlights :include-tags - :all-revisions :shapefile :simplify-shapefile} + :all-revisions :shapefile :simplify-shapefile :force-cartesian} :multiple-value #{:short-name :instrument :instrument-h :two-d-coordinate-system-name :collection-data-type :collection-progress :consortium :project :project-h :entry-id :version :provider :entry-title :doi :native-id :platform :platform-h :processing-level-id @@ -53,7 +53,7 @@ [_] (cpv/merge-params-config cpv/basic-params-config - {:single-value #{:echo-compatible :include-facets :shapefile :simplify-shapefile} + {:single-value #{:echo-compatible :include-facets :shapefile :simplify-shapefile :force-cartesian} :multiple-value #{:granule-ur :short-name :instrument :collection-concept-id :producer-granule-id :project :version :native-id :provider :entry-title :platform :sensor :feature-id :crid-id :cycle} @@ -244,6 +244,7 @@ :sensor cpv/string-plus-and-exclude-collection-options :short-name cpv/string-plus-and-options :simplify-shapefile cpv/string-param-options + :force-cartesian cpv/string-param-options :spatial cpv/and-or-option :spatial-keyword cpv/string-plus-and-options :temporal exclude-plus-and-or-option @@ -432,12 +433,12 @@ (let [gen-name (name generic-type) gen-ver (generics/current-generic-version generic-type) indexes (-> "schemas/%s/v%s/config.json" - (format gen-name gen-ver) - (io/resource) - (slurp) - (json/parse-string true) - (:Indexes) - (e-gen/only-elastic-preferences)) + (format gen-name gen-ver) + (io/resource) + (slurp) + (json/parse-string true) + (:Indexes) + (e-gen/only-elastic-preferences)) names (->> indexes (map :Name) (map csk/->kebab-case-keyword))] @@ -707,11 +708,11 @@ :simplify-shapefile :cloud-hosted :standard-product :include-non-operational])] (mapcat - (fn [[param value]] - (when-not (contains? #{"true" "false" "unset"} (when value (string/lower-case value))) - [(format "Parameter %s must take value of true, false, or unset, but was [%s]" - (csk/->snake_case_string param) value)])) - bool-params))) + (fn [[param value]] + (when-not (contains? #{"true" "false" "unset"} (when value (string/lower-case value))) + [(format "Parameter %s must take value of true, false, or unset, but was [%s]" + (csk/->snake_case_string param) value)])) + bool-params))) (defn- collection-include-facets-validation "Validates that the include_facets parameter has a value of true, false or v2." diff --git a/search-app/src/cmr/search/services/query_service.clj b/search-app/src/cmr/search/services/query_service.clj index 122732104e..ca2eff5214 100644 --- a/search-app/src/cmr/search/services/query_service.clj +++ b/search-app/src/cmr/search/services/query_service.clj @@ -175,17 +175,23 @@ (defn make-concepts-query "Utility function for generating an elastic-ready query." ([context concept-type params] - (common-params/parse-parameter-query - context - concept-type - (create-and-validate-concepts-query-parameters - context concept-type params))) + (let [validated-params (create-and-validate-concepts-query-parameters + context concept-type params) + ;; Add params to context so they're available in parameter converters + context-with-params (assoc context :params validated-params)] + (common-params/parse-parameter-query + context-with-params + concept-type + validated-params))) ([context concept-type params tag-data] - (common-params/parse-parameter-query - context - concept-type - (create-and-validate-concepts-query-parameters - context concept-type params tag-data)))) + (let [validated-params (create-and-validate-concepts-query-parameters + context concept-type params tag-data) + ;; Add params to context so they're available in parameter converters + context-with-params (assoc context :params validated-params)] + (common-params/parse-parameter-query + context-with-params + concept-type + validated-params)))) (defn generate-query-conditions-for-parameters "Given the query params, generate the conditions for elastic search. Returns diff --git a/search-app/test/cmr/search/test/unit/services/parameter_converters/geometry_force_cartesian_test.clj b/search-app/test/cmr/search/test/unit/services/parameter_converters/geometry_force_cartesian_test.clj new file mode 100644 index 0000000000..fe4abd4cce --- /dev/null +++ b/search-app/test/cmr/search/test/unit/services/parameter_converters/geometry_force_cartesian_test.clj @@ -0,0 +1,136 @@ +(ns cmr.search.test.unit.services.parameter-converters.geometry-force-cartesian-test + "Tests for force-cartesian parameter in geometry converters" + (:require + [clojure.test :refer [deftest is testing]] + [cmr.search.services.parameters.converters.geometry :as geo] + [cmr.spatial.ring-relations :as rr]) + (:import + (org.locationtech.jts.geom Coordinate GeometryFactory LinearRing LineString Polygon))) + +(def ^GeometryFactory geometry-factory + "JTS GeometryFactory for creating test geometries" + (GeometryFactory.)) + +(defn make-line-string + "Create a JTS LineString from coordinate pairs" + [& coords] + (let [coord-array (into-array Coordinate + (map (fn [[lon lat]] (Coordinate. lon lat)) (partition 2 coords)))] + (.createLineString geometry-factory coord-array))) + +(defn make-linear-ring + "Create a JTS LinearRing from coordinate pairs" + [& coords] + (let [coord-array (into-array Coordinate + (map (fn [[lon lat]] (Coordinate. lon lat)) (partition 2 coords)))] + (.createLinearRing geometry-factory coord-array))) + +(defn make-polygon + "Create a JTS Polygon from exterior ring coordinates and optional hole coordinates" + [exterior-coords & hole-coords] + (let [exterior-ring (apply make-linear-ring exterior-coords) + hole-rings (map #(apply make-linear-ring %) hole-coords) + hole-array (into-array LinearRing hole-rings)] + (.createPolygon geometry-factory exterior-ring hole-array))) + +(deftest line-string-ring->ring-force-cartesian-test + (testing "line-string-ring->ring with force-cartesian option" + (let [line-string (make-line-string 0 0, 10 0, 10 10, 0 10, 0 0)] + + (testing "force-cartesian true creates cartesian ring" + (let [ring (geo/line-string-ring->ring line-string {:force-cartesian true})] + (is (= :cartesian (rr/coordinate-system ring)) + "Ring should have cartesian coordinate system"))) + + (testing "force-cartesian false creates geodetic ring" + (let [ring (geo/line-string-ring->ring line-string {:force-cartesian false})] + (is (= :geodetic (rr/coordinate-system ring)) + "Ring should have geodetic coordinate system"))) + + (testing "no force-cartesian option defaults to geodetic" + (let [ring (geo/line-string-ring->ring line-string {})] + (is (= :geodetic (rr/coordinate-system ring)) + "Ring should default to geodetic coordinate system")) + (let [ring (geo/line-string-ring->ring line-string)] + (is (= :geodetic (rr/coordinate-system ring)) + "Ring should default to geodetic coordinate system with no options")))))) + +(deftest polygon->shape-force-cartesian-test + (testing "polygon->shape with force-cartesian option" + (let [exterior-coords [0 0, 10 0, 10 10, 0 10, 0 0] + polygon (make-polygon exterior-coords)] + + (testing "force-cartesian true creates cartesian polygon" + (let [shape (geo/polygon->shape polygon {:force-cartesian true})] + (is (= :cartesian (:coordinate-system shape)) + "Polygon should have cartesian coordinate system") + ;; Verify all rings have cartesian coordinate system + (doseq [ring (:rings shape)] + (is (= :cartesian (rr/coordinate-system ring)) + "All rings should have cartesian coordinate system")))) + + (testing "force-cartesian false creates geodetic polygon" + (let [shape (geo/polygon->shape polygon {:force-cartesian false})] + (is (= :geodetic (:coordinate-system shape)) + "Polygon should have geodetic coordinate system") + (doseq [ring (:rings shape)] + (is (= :geodetic (rr/coordinate-system ring)) + "All rings should have geodetic coordinate system")))) + + (testing "no force-cartesian option defaults to geodetic" + (let [shape (geo/polygon->shape polygon {})] + (is (= :geodetic (:coordinate-system shape)) + "Polygon should default to geodetic coordinate system") + (doseq [ring (:rings shape)] + (is (= :geodetic (rr/coordinate-system ring)) + "All rings should default to geodetic coordinate system"))))))) + +(deftest polygon-with-holes-force-cartesian-test + (testing "polygon->shape with holes and force-cartesian option" + (let [exterior-coords [0 0, 20 0, 20 20, 0 20, 0 0] + hole1-coords [5 5, 8 5, 8 8, 5 8, 5 5] + hole2-coords [12 12, 15 12, 15 15, 12 15, 12 12] + polygon (make-polygon exterior-coords hole1-coords hole2-coords)] + + (testing "force-cartesian true creates cartesian polygon with cartesian holes" + (let [shape (geo/polygon->shape polygon {:force-cartesian true})] + (is (= :cartesian (:coordinate-system shape)) + "Polygon should have cartesian coordinate system") + (is (= 3 (count (:rings shape))) + "Polygon should have 3 rings (1 exterior + 2 holes)") + ;; Verify all rings (exterior and holes) have cartesian coordinate system + (doseq [ring (:rings shape)] + (is (= :cartesian (rr/coordinate-system ring)) + "All rings including holes should have cartesian coordinate system")))) + + (testing "no force-cartesian option defaults to geodetic for all rings" + (let [shape (geo/polygon->shape polygon {})] + (is (= :geodetic (:coordinate-system shape)) + "Polygon should default to geodetic coordinate system") + (is (= 3 (count (:rings shape))) + "Polygon should have 3 rings (1 exterior + 2 holes)") + (doseq [ring (:rings shape)] + (is (= :geodetic (rr/coordinate-system ring)) + "All rings including holes should default to geodetic coordinate system"))))))) + +(deftest line->shape-force-cartesian-test + (testing "line->shape with force-cartesian option" + (let [line-string (make-line-string -77 38.9, -77.4 37.54)] + + (testing "force-cartesian true creates cartesian line-string" + (let [shape (geo/line->shape line-string {:force-cartesian true})] + (is (= :cartesian (:coordinate-system shape)) + "Line-string should have cartesian coordinate system"))) + + (testing "force-cartesian false creates geodetic line-string" + (let [shape (geo/line->shape line-string {:force-cartesian false})] + (is (= :geodetic (:coordinate-system shape)) + "Line-string should have geodetic coordinate system"))) + + (testing "no force-cartesian option defaults to geodetic" + (let [shape (geo/line->shape line-string {})] + (is (= :geodetic (:coordinate-system shape)) + "Line-string should default to geodetic coordinate system")) + (let [shape (geo/line->shape line-string)] + (is (= :geodetic (:coordinate-system shape)) + "Line-string should default to geodetic coordinate system with no options")))))) diff --git a/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj b/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj index f3661cd90e..763bf9bf75 100644 --- a/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj +++ b/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj @@ -142,4 +142,41 @@ "dc_richmond_line" [whole-world very-wide-cart washington-dc richmond] "Single Point Washington DC" - "single_point_dc" [whole-world very-wide-cart washington-dc]))))) + "single_point_dc" [whole-world very-wide-cart washington-dc])) + + (testing (format "Search with force-cartesian parameter using %s shapefile" fmt) + ;; The parameter changes how shapefile coordinates are interpreted (geodetic vs cartesian) + (are3 [shapefile force-cartesian expected-items] + (let [params (if (some? force-cartesian) + [{:name "shapefile" + :content (io/file (io/resource (str "shapefiles/" shapefile "." extension))) + :mime-type mime-type} + {:name "force-cartesian" + :content (str force-cartesian)} + {:name "provider" + :content "PROV1"}] + [{:name "shapefile" + :content (io/file (io/resource (str "shapefiles/" shapefile "." extension))) + :mime-type mime-type} + {:name "provider" + :content "PROV1"}]) + found (search/find-refs-with-multi-part-form-post :collection params)] + (d/assert-refs-match expected-items found)) + + "box shapefile without force-cartesian (default geodetic)" + "box" nil [whole-world very-wide-cart washington-dc richmond] + + "box shapefile with force-cartesian=false (explicit geodetic)" + "box" false [whole-world very-wide-cart washington-dc richmond] + + "box shapefile with force-cartesian=true (cartesian interpretation)" + "box" true [whole-world very-wide-cart washington-dc richmond] + + "southern_africa without force-cartesian" + "southern_africa" nil [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart] + + "southern_africa with force-cartesian=false" + "southern_africa" false [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart] + + "southern_africa with force-cartesian=true" + "southern_africa" true [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart]))))) diff --git a/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj b/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj index b92a0ee929..1a85a08c5b 100644 --- a/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj +++ b/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj @@ -257,6 +257,43 @@ "Single Point Washington DC" "single_point_dc" [whole-world very-wide-cart washington-dc])) + (testing (format "Search with force-cartesian parameter using %s shapefile" fmt) + ;; The parameter changes how shapefile coordinates are interpreted (geodetic vs cartesian) + (are3 [shapefile force-cartesian expected-items] + (let [params (if (some? force-cartesian) + [{:name "shapefile" + :content (io/file (io/resource (str "shapefiles/" shapefile "." extension))) + :mime-type mime-type} + {:name "force-cartesian" + :content (str force-cartesian)} + {:name "provider" + :content "PROV1"}] + [{:name "shapefile" + :content (io/file (io/resource (str "shapefiles/" shapefile "." extension))) + :mime-type mime-type} + {:name "provider" + :content "PROV1"}]) + found (search/find-refs-with-multi-part-form-post :granule params)] + (d/assert-refs-match expected-items found)) + + "box shapefile without force-cartesian (default geodetic)" + "box" nil [whole-world very-wide-cart washington-dc richmond] + + "box shapefile with force-cartesian=false (explicit geodetic)" + "box" false [whole-world very-wide-cart washington-dc richmond] + + "box shapefile with force-cartesian=true (cartesian interpretation)" + "box" true [whole-world very-wide-cart washington-dc richmond] + + "southern_africa without force-cartesian" + "southern_africa" nil [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart] + + "southern_africa with force-cartesian=false" + "southern_africa" false [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart] + + "southern_africa with force-cartesian=true" + "southern_africa" true [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart])) + (testing (format "Scrolling with results on first page for %s shapefile" fmt) (let [expected-items [whole-world touches-sp on-sp very-tall-cart south-pole] {:keys [hits headers] :as initial-scroll-request} From 127d7afccc803f2683a3781ee2aecd57c62b84bd Mon Sep 17 00:00:00 2001 From: Lucia Zimmermann <7947215+zimzoom@users.noreply.github.com> Date: Thu, 12 Mar 2026 18:18:18 -0400 Subject: [PATCH 2/3] CMR-11098: pr feedback --- .../parameters/converters/geometry.clj | 4 +- .../parameters/converters/shapefile.clj | 262 +- .../parameters/parameter_validation.clj | 2 +- .../parameter_converters/shapefile.clj | 6 +- .../shapefiles/scotland_cartesian.json | 14690 ++++++++++++++++ .../collection_shapefile_search_test.clj | 39 + .../granule/granule_shapefile_search_test.clj | 1 + 7 files changed, 14857 insertions(+), 147 deletions(-) create mode 100644 system-int-test/resources/shapefiles/scotland_cartesian.json diff --git a/search-app/src/cmr/search/services/parameters/converters/geometry.clj b/search-app/src/cmr/search/services/parameters/converters/geometry.clj index dfcb60c332..614e1b94be 100644 --- a/search-app/src/cmr/search/services/parameters/converters/geometry.clj +++ b/search-app/src/cmr/search/services/parameters/converters/geometry.clj @@ -109,10 +109,10 @@ (defmethod geometry->condition "LineString" [geometry options] - (let [shape (line->shape geometry)] + (let [shape (line->shape geometry options)] (qm/->SpatialCondition shape))) (defmethod geometry->condition "LinearRing" [geometry options] - (let [shape (line->shape geometry)] + (let [shape (line->shape geometry options)] (qm/->SpatialCondition shape))) diff --git a/search-app/src/cmr/search/services/parameters/converters/shapefile.clj b/search-app/src/cmr/search/services/parameters/converters/shapefile.clj index 5ac9439d6c..97cca619b0 100644 --- a/search-app/src/cmr/search/services/parameters/converters/shapefile.clj +++ b/search-app/src/cmr/search/services/parameters/converters/shapefile.clj @@ -46,23 +46,21 @@ (defn winding-opts "Get the opts for a call to `normalize-polygon-winding` based on file type. - Optionally merges in force-cartesian option if provided in context. + Optionally merges in force-cartesian option if provided in options. Note: For GeoJSON, we only normalize hole winding. Boundary winding is not normalized because GeoJSON coordinates come from GeoTools already validated. For small local polygons (the typical cartesian use case), geodetic CCW and cartesian CCW have the same orientation, so no boundary reversal is needed." - ([mime-type] - (winding-opts mime-type nil)) - ([mime-type context] - (let [base-opts (case mime-type - "application/shapefile+zip" {:boundary-winding :cw} - "application/vnd.google-earth.kml+xml" {} - "application/geo+json" {:hole-winding :cw}) - final-opts (if (:force-cartesian context) - (assoc base-opts :force-cartesian true) - base-opts)] - final-opts))) + [mime-type options] + (let [base-opts (case mime-type + "application/shapefile+zip" {:boundary-winding :cw} + "application/vnd.google-earth.kml+xml" {} + "application/geo+json" {:hole-winding :cw}) + final-opts (if (:force-cartesian options) + (assoc base-opts :force-cartesian true) + base-opts)] + final-opts)) (defn validate-entry-dir [target-dir entry] @@ -202,24 +200,22 @@ (defn features->conditions "Converts a list of features into a vector of SpatialConditions. - The context map can contain force-cartesian setting which will be merged into the options." - ([features mime-type] - (features->conditions features mime-type nil)) - ([features mime-type context] - (validate-features features) - (let [iterator (.iterator features) - options (winding-opts mime-type context)] - ;; Loop overall all the Features in the list, building up a vector of conditions - (loop [conditions []] - (if (.hasNext iterator) - (let [feature (.next iterator) - [feature-conditions _] (feature->conditions feature options)] - (if (> (count feature-conditions) 0) - ;; if any conditions were created for the feature add them to the current conditions - (recur (conj conditions (gc/or-conds feature-conditions))) - (recur conditions))) - ;; no more Features in list - return conditions created - conditions))))) + The options map can contain force-cartesian setting which will be merged into the winding options." + [features mime-type options] + (validate-features features) + (let [iterator (.iterator features) + winding-options (winding-opts mime-type options)] + ;; Loop overall all the Features in the list, building up a vector of conditions + (loop [conditions []] + (if (.hasNext iterator) + (let [feature (.next iterator) + [feature-conditions _] (feature->conditions feature winding-options)] + (if (> (count feature-conditions) 0) + ;; if any conditions were created for the feature add them to the current conditions + (recur (conj conditions (gc/or-conds feature-conditions))) + (recur conditions))) + ;; no more Features in list - return conditions created + conditions)))) (defn error-if "Throw a service error with the given message if `f` applied to `item` is true. @@ -233,106 +229,98 @@ (defn esri-shapefile->condition-vec "Converts a shapefile to a vector of SpatialConditions" - ([shapefile-info] - (esri-shapefile->condition-vec shapefile-info nil)) - ([shapefile-info context] - (try - (let [file (:tempfile shapefile-info) - ^File temp-dir (unzip-file file) - shp-file (error-if - (find-shp-file temp-dir) - nil? - "Incomplete shapefile: missing .shp file" - temp-dir) - data-store (FileDataStoreFinder/getDataStore shp-file) - feature-source (.getFeatureSource data-store) - features (.getFeatures feature-source) - iterator (.features features) - feature-list (ArrayList.)] - (try - (while (.hasNext iterator) - (let [feature (.next iterator)] - (.add feature-list feature))) - (features->conditions feature-list mt/shapefile context) - (finally - (.close iterator) - (-> data-store .getFeatureReader .close) - (.delete temp-dir)))) - (catch Exception e - (let [{:keys [type errors]} (ex-data e)] - (if (and type errors) - (throw e) ;; This was a more specific service error so just re-throw it - (errors/throw-service-error :bad-request "Failed to parse shapefile"))))))) + [shapefile-info options] + (try + (let [file (:tempfile shapefile-info) + ^File temp-dir (unzip-file file) + shp-file (error-if + (find-shp-file temp-dir) + nil? + "Incomplete shapefile: missing .shp file" + temp-dir) + data-store (FileDataStoreFinder/getDataStore shp-file) + feature-source (.getFeatureSource data-store) + features (.getFeatures feature-source) + iterator (.features features) + feature-list (ArrayList.)] + (try + (while (.hasNext iterator) + (let [feature (.next iterator)] + (.add feature-list feature))) + (features->conditions feature-list mt/shapefile options) + (finally + (.close iterator) + (-> data-store .getFeatureReader .close) + (.delete temp-dir)))) + (catch Exception e + (let [{:keys [type errors]} (ex-data e)] + (if (and type errors) + (throw e) ;; This was a more specific service error so just re-throw it + (errors/throw-service-error :bad-request "Failed to parse shapefile")))))) (defn geojson->conditions-vec "Converts a geojson file to a vector of SpatialConditions" - ([shapefile-info] - (geojson->conditions-vec shapefile-info nil)) - ([shapefile-info context] - (try - (let [file (:tempfile shapefile-info) - _ (geojson/sanitize-geojson file) - url (URLs/fileToUrl file) - data-store (GeoJSONDataStore. url) - feature-source (.getFeatureSource data-store) - features (.getFeatures feature-source) - ;; Fail fast - _ (when (or (nil? features) - (nil? (.getSchema features)) - (.isEmpty features)) - (errors/throw-service-error :bad-request "Shapefile has no features")) - iterator (.features features) - feature-list (ArrayList.)] - (try - (while (.hasNext iterator) - (let [feature (.next iterator)] - (.add feature-list feature))) - (features->conditions feature-list mt/geojson context) - (finally - (.close iterator) - (-> data-store .getFeatureReader .close) - (.delete file)))) - (catch Exception e - (let [{:keys [type errors]} (ex-data e)] - (if (and type errors) - (throw e) ;; This was a more specific service error so just re-throw it - (errors/throw-service-error :bad-request "Failed to parse shapefile"))))))) + [shapefile-info options] + (try + (let [file (:tempfile shapefile-info) + _ (geojson/sanitize-geojson file) + url (URLs/fileToUrl file) + data-store (GeoJSONDataStore. url) + feature-source (.getFeatureSource data-store) + features (.getFeatures feature-source) + ;; Fail fast + _ (when (or (nil? features) + (nil? (.getSchema features)) + (.isEmpty features)) + (errors/throw-service-error :bad-request "Shapefile has no features")) + iterator (.features features) + feature-list (ArrayList.)] + (try + (while (.hasNext iterator) + (let [feature (.next iterator)] + (.add feature-list feature))) + (features->conditions feature-list mt/geojson options) + (finally + (.close iterator) + (-> data-store .getFeatureReader .close) + (.delete file)))) + (catch Exception e + (let [{:keys [type errors]} (ex-data e)] + (if (and type errors) + (throw e) ;; This was a more specific service error so just re-throw it + (errors/throw-service-error :bad-request "Failed to parse shapefile")))))) (defn kml->conditions-vec "Converts a kml file to a vector of SpatialConditions" - ([shapefile-info] - (kml->conditions-vec shapefile-info nil)) - ([shapefile-info context] - (try - (let [file (:tempfile shapefile-info) - input-stream (FileInputStream. file) - parser (PullParser. (KMLConfiguration.) input-stream SimpleFeature) - feature-list (ArrayList.)] - (try - (util/while-let [feature (.parse parser)] - (when (> (feature-point-count feature) 0) - (.add feature-list feature))) - (features->conditions feature-list mt/kml context) - (finally - (.delete file)))) - (catch Exception e - (let [{:keys [type errors]} (ex-data e)] - (if (and type errors) - (throw e) ;; This was a more specific service error so just re-throw it - (errors/throw-service-error :bad-request "Failed to parse shapefile"))))))) + [shapefile-info options] + (try + (let [file (:tempfile shapefile-info) + input-stream (FileInputStream. file) + parser (PullParser. (KMLConfiguration.) input-stream SimpleFeature) + feature-list (ArrayList.)] + (try + (util/while-let [feature (.parse parser)] + (when (> (feature-point-count feature) 0) + (.add feature-list feature))) + (features->conditions feature-list mt/kml options) + (finally + (.delete file)))) + (catch Exception e + (let [{:keys [type errors]} (ex-data e)] + (if (and type errors) + (throw e) ;; This was a more specific service error so just re-throw it + (errors/throw-service-error :bad-request "Failed to parse shapefile")))))) (defn in-memory->conditions-vec "Converts a group of features produced by simplification to a vector of SpatialConditions" - ([shapefile-info] - (in-memory->conditions-vec shapefile-info nil)) - ([shapefile-info context] - (let [^ArrayList features (:tempfile shapefile-info) - mime-type (:content-type shapefile-info)] - (features->conditions features mime-type context)))) + [shapefile-info options] + (let [^ArrayList features (:tempfile shapefile-info) + mime-type (:content-type shapefile-info)] + (features->conditions features mime-type options))) (defmulti shapefile->conditions "Converts a shapefile to query conditions based on shapefile format. - Optionally accepts a context map containing force-cartesian setting." + Optionally accepts an options map containing force-cartesian setting." (fn [shapefile-info & _] (debug (format "SHAPEFILE FORMAT: %s" (:contenty-type shapefile-info))) (if (:in-memory shapefile-info) @@ -341,42 +329,34 @@ ;; ESRI shapefiles (defmethod shapefile->conditions mt/shapefile - ([shapefile-info] - (shapefile->conditions shapefile-info nil)) - ([shapefile-info context] - (let [conditions-vec (esri-shapefile->condition-vec shapefile-info context)] - (gc/or-conds (flatten conditions-vec))))) + [shapefile-info options] + (let [conditions-vec (esri-shapefile->condition-vec shapefile-info options)] + (gc/or-conds (flatten conditions-vec)))) ;; GeoJSON (defmethod shapefile->conditions mt/geojson - ([shapefile-info] - (shapefile->conditions shapefile-info nil)) - ([shapefile-info context] - (let [conditions-vec (geojson->conditions-vec shapefile-info context)] - (gc/or-conds (flatten conditions-vec))))) + [shapefile-info options] + (let [conditions-vec (geojson->conditions-vec shapefile-info options)] + (gc/or-conds (flatten conditions-vec)))) ;; KML (defmethod shapefile->conditions mt/kml - ([shapefile-info] - (shapefile->conditions shapefile-info nil)) - ([shapefile-info context] - (let [conditions-vec (kml->conditions-vec shapefile-info context)] - (gc/or-conds (flatten conditions-vec))))) + [shapefile-info options] + (let [conditions-vec (kml->conditions-vec shapefile-info options)] + (gc/or-conds (flatten conditions-vec)))) ;; Simplfied and stored in memory (defmethod shapefile->conditions :in-memory - ([shapefile-info] - (shapefile->conditions shapefile-info nil)) - ([shapefile-info context] - (let [conditions-vec (in-memory->conditions-vec shapefile-info context)] - (gc/or-conds (flatten conditions-vec))))) + [shapefile-info options] + (let [conditions-vec (in-memory->conditions-vec shapefile-info options)] + (gc/or-conds (flatten conditions-vec)))) (defmethod p/parameter->condition :shapefile [context _concept-type _param value _options] (if (enable-shapefile-parameter-flag) (let [;; Params are added to context as keywords after sanitization force-cartesian-value (get-in context [:params :force-cartesian]) - force-cartesian (or (= "true" force-cartesian-value) (= true force-cartesian-value)) - shapefile-context (when force-cartesian {:force-cartesian true})] - (shapefile->conditions value shapefile-context)) + force-cartesian (= "true" (util/safe-lowercase force-cartesian-value)) + options (when force-cartesian {:force-cartesian true})] + (shapefile->conditions value options)) (errors/throw-service-error :bad-request "Searching by shapefile is not enabled"))) diff --git a/search-app/src/cmr/search/services/parameters/parameter_validation.clj b/search-app/src/cmr/search/services/parameters/parameter_validation.clj index 9e1ee047c0..525d264609 100644 --- a/search-app/src/cmr/search/services/parameters/parameter_validation.clj +++ b/search-app/src/cmr/search/services/parameters/parameter_validation.clj @@ -706,7 +706,7 @@ :include-has-granules :has-granules :hierarchical-facets :include-highlights :all-revisions :has-opendap-url :simplify-shapefile :cloud-hosted :standard-product - :include-non-operational])] + :include-non-operational :force-cartesian])] (mapcat (fn [[param value]] (when-not (contains? #{"true" "false" "unset"} (when value (string/lower-case value))) diff --git a/search-app/test/cmr/search/test/unit/services/parameter_converters/shapefile.clj b/search-app/test/cmr/search/test/unit/services/parameter_converters/shapefile.clj index 9142c8269c..86b70da8f3 100644 --- a/search-app/test/cmr/search/test/unit/services/parameter_converters/shapefile.clj +++ b/search-app/test/cmr/search/test/unit/services/parameter_converters/shapefile.clj @@ -55,7 +55,7 @@ (testing "empty file" (try (let [shp-file (io/file (io/resource "shapefiles/empty.zip"))] - (shapefile/esri-shapefile->condition-vec {:tempfile shp-file})) + (shapefile/esri-shapefile->condition-vec {:tempfile shp-file} {})) (catch Exception e (is (= "Shapefile has no features" (.getMessage e)))))) @@ -63,7 +63,7 @@ (testing "corrupt zip file" (try (let [shp-file (io/file (io/resource "shapefiles/corrupt_file.zip"))] - (shapefile/esri-shapefile->condition-vec {:tempfile shp-file})) + (shapefile/esri-shapefile->condition-vec {:tempfile shp-file} {})) (catch Exception e (is (= "Error while uncompressing zip file: invalid END header (bad central directory offset)" (.getMessage e)))))) @@ -71,7 +71,7 @@ (testing "missing zip file" (try (let [shp-file (io/file (io/resource "shapefiles/missing_shapefile_shp.zip"))] - (shapefile/esri-shapefile->condition-vec {:tempfile shp-file})) + (shapefile/esri-shapefile->condition-vec {:tempfile shp-file} {})) (catch Exception e (is (= "Incomplete shapefile: missing .shp file" (.getMessage e))))))) diff --git a/system-int-test/resources/shapefiles/scotland_cartesian.json b/system-int-test/resources/shapefiles/scotland_cartesian.json new file mode 100644 index 0000000000..9b2ec32298 --- /dev/null +++ b/system-int-test/resources/shapefiles/scotland_cartesian.json @@ -0,0 +1,14690 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -7.660969, + 56.785301 + ], + [ + -7.611614, + 56.783964 + ], + [ + -7.617084, + 56.787912 + ], + [ + -7.660969, + 56.785301 + ] + ] + ], + [ + [ + [ + -7.664183, + 56.804709 + ], + [ + -7.659395, + 56.805382 + ], + [ + -7.662387, + 56.807698 + ], + [ + -7.664183, + 56.804709 + ] + ] + ], + [ + [ + [ + -7.659639, + 56.822184 + ], + [ + -7.621786, + 56.802519 + ], + [ + -7.617279, + 56.829059 + ], + [ + -7.659639, + 56.822184 + ] + ] + ], + [ + [ + [ + -7.660316, + 56.81673 + ], + [ + -7.659411, + 56.815741 + ], + [ + -7.656225, + 56.817303 + ], + [ + -7.660316, + 56.81673 + ] + ] + ], + [ + [ + [ + -7.548115, + 56.848826 + ], + [ + -7.554523, + 56.85525 + ], + [ + -7.598323, + 56.84917 + ], + [ + -7.548115, + 56.848826 + ] + ] + ], + [ + [ + [ + -7.580256, + 56.871398 + ], + [ + -7.572254, + 56.87114 + ], + [ + -7.572753, + 56.875307 + ], + [ + -7.580256, + 56.871398 + ] + ] + ], + [ + [ + [ + -7.550311, + 56.876769 + ], + [ + -7.55418, + 56.875867 + ], + [ + -7.551023, + 56.874257 + ], + [ + -7.550311, + 56.876769 + ] + ] + ], + [ + [ + [ + -7.51595, + 56.879897 + ], + [ + -7.489018, + 56.885898 + ], + [ + -7.499333, + 56.898659 + ], + [ + -7.51595, + 56.879897 + ] + ] + ], + [ + [ + [ + -7.569716, + 56.891914 + ], + [ + -7.562128, + 56.899206 + ], + [ + -7.571978, + 56.899742 + ], + [ + -7.569716, + 56.891914 + ] + ] + ], + [ + [ + [ + -7.448621, + 56.911727 + ], + [ + -7.43835, + 56.914286 + ], + [ + -7.451448, + 56.920937 + ], + [ + -7.448621, + 56.911727 + ] + ] + ], + [ + [ + [ + -7.523275, + 56.944932 + ], + [ + -7.528927, + 56.94334 + ], + [ + -7.526073, + 56.942095 + ], + [ + -7.523275, + 56.944932 + ] + ] + ], + [ + [ + [ + -7.424445, + 56.967672 + ], + [ + -7.424323, + 56.966337 + ], + [ + -7.419255, + 56.965082 + ], + [ + -7.424445, + 56.967672 + ] + ] + ], + [ + [ + [ + -7.582672, + 56.933376 + ], + [ + -7.377215, + 56.979993 + ], + [ + -7.429841, + 57.001767 + ], + [ + -7.582672, + 56.933376 + ] + ] + ], + [ + [ + [ + -7.375864, + 56.981306 + ], + [ + -7.372616, + 56.979651 + ], + [ + -7.372391, + 56.982311 + ], + [ + -7.375864, + 56.981306 + ] + ] + ], + [ + [ + [ + -7.341923, + 56.996078 + ], + [ + -7.34385, + 56.999276 + ], + [ + -7.35902, + 56.994121 + ], + [ + -7.341923, + 56.996078 + ] + ] + ], + [ + [ + [ + -7.376422, + 56.99412 + ], + [ + -7.360424, + 56.993058 + ], + [ + -7.365191, + 57.00061 + ], + [ + -7.376422, + 56.99412 + ] + ] + ], + [ + [ + [ + -7.381238, + 57.001705 + ], + [ + -7.376227, + 57.00166 + ], + [ + -7.377565, + 57.003839 + ], + [ + -7.381238, + 57.001705 + ] + ] + ], + [ + [ + [ + -7.390405, + 57.002142 + ], + [ + -7.386775, + 57.002983 + ], + [ + -7.38849, + 57.006846 + ], + [ + -7.390405, + 57.002142 + ] + ] + ], + [ + [ + [ + -7.375265, + 57.006809 + ], + [ + -7.36533, + 57.00374 + ], + [ + -7.368015, + 57.006005 + ], + [ + -7.375265, + 57.006809 + ] + ] + ], + [ + [ + [ + -7.379077, + 57.005686 + ], + [ + -7.382306, + 57.007482 + ], + [ + -7.389976, + 57.007938 + ], + [ + -7.379077, + 57.005686 + ] + ] + ], + [ + [ + [ + -7.363778, + 57.013499 + ], + [ + -7.328884, + 57.006796 + ], + [ + -7.329985, + 57.014704 + ], + [ + -7.363778, + 57.013499 + ] + ] + ], + [ + [ + [ + -7.331608, + 57.026234 + ], + [ + -7.347887, + 57.019936 + ], + [ + -7.319385, + 57.014809 + ], + [ + -7.331608, + 57.026234 + ] + ] + ], + [ + [ + [ + -7.302665, + 57.042243 + ], + [ + -7.297316, + 57.042758 + ], + [ + -7.300239, + 57.04375 + ], + [ + -7.302665, + 57.042243 + ] + ] + ], + [ + [ + [ + -7.305783, + 57.047424 + ], + [ + -7.291151, + 57.048904 + ], + [ + -7.303692, + 57.048791 + ], + [ + -7.305783, + 57.047424 + ] + ] + ], + [ + [ + [ + -7.370995, + 57.052002 + ], + [ + -7.377691, + 57.059428 + ], + [ + -7.399201, + 57.042813 + ], + [ + -7.370995, + 57.052002 + ] + ] + ], + [ + [ + [ + -7.448614, + 57.068323 + ], + [ + -7.451674, + 57.063293 + ], + [ + -7.432664, + 57.065908 + ], + [ + -7.448614, + 57.068323 + ] + ] + ], + [ + [ + [ + -7.281708, + 57.057263 + ], + [ + -7.268344, + 57.091181 + ], + [ + -7.301424, + 57.086979 + ], + [ + -7.281708, + 57.057263 + ] + ] + ], + [ + [ + [ + -7.36531, + 57.078273 + ], + [ + -7.358404, + 57.078803 + ], + [ + -7.358425, + 57.081173 + ], + [ + -7.36531, + 57.078273 + ] + ] + ], + [ + [ + [ + -7.324997, + 57.082409 + ], + [ + -7.320763, + 57.08078 + ], + [ + -7.324366, + 57.082674 + ], + [ + -7.324997, + 57.082409 + ] + ] + ], + [ + [ + [ + -7.274483, + 57.092096 + ], + [ + -7.266424, + 57.094533 + ], + [ + -7.27501, + 57.095678 + ], + [ + -7.274483, + 57.092096 + ] + ] + ], + [ + [ + [ + -7.266739, + 57.142364 + ], + [ + -7.254526, + 57.14151 + ], + [ + -7.25675, + 57.143707 + ], + [ + -7.266739, + 57.142364 + ] + ] + ], + [ + [ + [ + -7.318362, + 57.142547 + ], + [ + -7.299843, + 57.14304 + ], + [ + -7.306258, + 57.146737 + ], + [ + -7.318362, + 57.142547 + ] + ] + ], + [ + [ + [ + -7.254647, + 57.189216 + ], + [ + -7.240121, + 57.191089 + ], + [ + -7.239893, + 57.193573 + ], + [ + -7.254647, + 57.189216 + ] + ] + ], + [ + [ + [ + -7.294016, + 57.337109 + ], + [ + -7.263724, + 57.328003 + ], + [ + -7.220117, + 57.347535 + ], + [ + -7.233814, + 57.341921 + ], + [ + -7.260937, + 57.341854 + ], + [ + -7.347581, + 57.416973 + ], + [ + -7.400129, + 57.303342 + ], + [ + -7.459512, + 57.241093 + ], + [ + -7.41589, + 57.130124 + ], + [ + -7.227294, + 57.095703 + ], + [ + -7.355948, + 57.153695 + ], + [ + -7.244427, + 57.163773 + ], + [ + -7.363566, + 57.243714 + ], + [ + -7.267728, + 57.224013 + ], + [ + -7.294016, + 57.337109 + ] + ] + ], + [ + [ + [ + -7.238884, + 57.324108 + ], + [ + -7.240055, + 57.328986 + ], + [ + -7.252568, + 57.326876 + ], + [ + -7.238884, + 57.324108 + ] + ] + ], + [ + [ + [ + -7.26041, + 57.368087 + ], + [ + -7.253585, + 57.367239 + ], + [ + -7.255523, + 57.37065 + ], + [ + -7.26041, + 57.368087 + ] + ] + ], + [ + [ + [ + -7.277007, + 57.370689 + ], + [ + -7.268949, + 57.370024 + ], + [ + -7.276832, + 57.371155 + ], + [ + -7.277007, + 57.370689 + ] + ] + ], + [ + [ + [ + -7.263255, + 57.38053 + ], + [ + -7.265646, + 57.382041 + ], + [ + -7.268707, + 57.381368 + ], + [ + -7.263255, + 57.38053 + ] + ] + ], + [ + [ + [ + -7.252249, + 57.383713 + ], + [ + -7.234406, + 57.379995 + ], + [ + -7.248615, + 57.383352 + ], + [ + -7.252249, + 57.383713 + ] + ] + ], + [ + [ + [ + -7.228512, + 57.385451 + ], + [ + -7.23168, + 57.387208 + ], + [ + -7.2374, + 57.384909 + ], + [ + -7.228512, + 57.385451 + ] + ] + ], + [ + [ + [ + -7.24513, + 57.388218 + ], + [ + -7.24628, + 57.389092 + ], + [ + -7.249419, + 57.387395 + ], + [ + -7.24513, + 57.388218 + ] + ] + ], + [ + [ + [ + -7.238278, + 57.389826 + ], + [ + -7.23224, + 57.388449 + ], + [ + -7.233233, + 57.389218 + ], + [ + -7.238278, + 57.389826 + ] + ] + ], + [ + [ + [ + -7.271617, + 57.394666 + ], + [ + -7.273543, + 57.394557 + ], + [ + -7.269926, + 57.392561 + ], + [ + -7.271617, + 57.394666 + ] + ] + ], + [ + [ + [ + -7.264211, + 57.388456 + ], + [ + -7.238493, + 57.394067 + ], + [ + -7.240232, + 57.399976 + ], + [ + -7.264211, + 57.388456 + ] + ] + ], + [ + [ + [ + -7.275156, + 57.396217 + ], + [ + -7.269082, + 57.394782 + ], + [ + -7.274219, + 57.396861 + ], + [ + -7.275156, + 57.396217 + ] + ] + ], + [ + [ + [ + -7.225248, + 57.441499 + ], + [ + -7.227522, + 57.442934 + ], + [ + -7.228438, + 57.4407 + ], + [ + -7.225248, + 57.441499 + ] + ] + ], + [ + [ + [ + -7.227339, + 57.453667 + ], + [ + -7.230041, + 57.453474 + ], + [ + -7.224858, + 57.452308 + ], + [ + -7.227339, + 57.453667 + ] + ] + ], + [ + [ + [ + -7.234968, + 57.455532 + ], + [ + -7.219676, + 57.453257 + ], + [ + -7.222407, + 57.455312 + ], + [ + -7.234968, + 57.455532 + ] + ] + ], + [ + [ + [ + -7.235509, + 57.461399 + ], + [ + -7.200962, + 57.460509 + ], + [ + -7.26621, + 57.466491 + ], + [ + -7.335613, + 57.496881 + ], + [ + -7.403232, + 57.425378 + ], + [ + -7.197096, + 57.413511 + ], + [ + -7.275404, + 57.438661 + ], + [ + -7.235509, + 57.461399 + ] + ] + ], + [ + [ + [ + -7.265231, + 57.481953 + ], + [ + -7.265918, + 57.482696 + ], + [ + -7.270102, + 57.483851 + ], + [ + -7.265231, + 57.481953 + ] + ] + ], + [ + [ + [ + -7.348143, + 57.497285 + ], + [ + -7.339978, + 57.499184 + ], + [ + -7.347001, + 57.501309 + ], + [ + -7.348143, + 57.497285 + ] + ] + ], + [ + [ + [ + -7.333558, + 57.51426 + ], + [ + -7.333423, + 57.517245 + ], + [ + -7.336339, + 57.513895 + ], + [ + -7.333558, + 57.51426 + ] + ] + ], + [ + [ + [ + -7.680715, + 57.519421 + ], + [ + -7.595741, + 57.521429 + ], + [ + -7.601444, + 57.533199 + ], + [ + -7.680715, + 57.519421 + ] + ] + ], + [ + [ + [ + -7.691745, + 57.527483 + ], + [ + -7.687722, + 57.529312 + ], + [ + -7.698618, + 57.52687 + ], + [ + -7.688368, + 57.524345 + ], + [ + -7.691745, + 57.527483 + ] + ] + ], + [ + [ + [ + -7.578689, + 57.530949 + ], + [ + -7.578732, + 57.533251 + ], + [ + -7.584213, + 57.53069 + ], + [ + -7.578689, + 57.530949 + ] + ] + ], + [ + [ + [ + -7.268241, + 57.553162 + ], + [ + -7.261104, + 57.553893 + ], + [ + -7.271921, + 57.55439 + ], + [ + -7.268241, + 57.553162 + ] + ] + ], + [ + [ + [ + -7.595491, + 57.603005 + ], + [ + -7.595598, + 57.600161 + ], + [ + -7.589211, + 57.602942 + ], + [ + -7.595491, + 57.603005 + ] + ] + ], + [ + [ + [ + -7.201594, + 57.735208 + ], + [ + -7.271197, + 57.655003 + ], + [ + -7.549418, + 57.600986 + ], + [ + -7.204186, + 57.472715 + ], + [ + -7.276299, + 57.517731 + ], + [ + -7.133276, + 57.55283 + ], + [ + -7.165735, + 57.547553 + ], + [ + -7.29969, + 57.553421 + ], + [ + -7.25452, + 57.570604 + ], + [ + -7.136886, + 57.558486 + ], + [ + -7.102439, + 57.58723 + ], + [ + -7.182227, + 57.592959 + ], + [ + -7.215062, + 57.641797 + ], + [ + -7.062099, + 57.640399 + ], + [ + -7.185193, + 57.652355 + ], + [ + -7.15241, + 57.665386 + ], + [ + -7.194154, + 57.690695 + ], + [ + -7.163293, + 57.707928 + ], + [ + -7.17223, + 57.719089 + ], + [ + -7.12197, + 57.70796 + ], + [ + -7.201594, + 57.735208 + ] + ] + ], + [ + [ + [ + -7.544212, + 57.61073 + ], + [ + -7.53743, + 57.610928 + ], + [ + -7.542419, + 57.612389 + ], + [ + -7.544212, + 57.61073 + ] + ] + ], + [ + [ + [ + -7.691618, + 57.699789 + ], + [ + -7.685843, + 57.698132 + ], + [ + -7.679506, + 57.703386 + ], + [ + -7.691618, + 57.699789 + ] + ] + ], + [ + [ + [ + -7.27441, + 57.701972 + ], + [ + -7.274815, + 57.715588 + ], + [ + -7.300837, + 57.706642 + ], + [ + -7.27441, + 57.701972 + ] + ] + ], + [ + [ + [ + -7.244742, + 57.755745 + ], + [ + -7.244541, + 57.758417 + ], + [ + -7.252765, + 57.758246 + ], + [ + -7.244742, + 57.755745 + ] + ] + ], + [ + [ + [ + -7.266208, + 57.766559 + ], + [ + -7.198509, + 57.770995 + ], + [ + -7.21486, + 57.785066 + ], + [ + -7.266208, + 57.766559 + ] + ] + ], + [ + [ + [ + -7.264823, + 57.796357 + ], + [ + -7.25986, + 57.794566 + ], + [ + -7.259635, + 57.796082 + ], + [ + -7.264823, + 57.796357 + ] + ] + ], + [ + [ + [ + -7.256822, + 57.796618 + ], + [ + -7.243893, + 57.802318 + ], + [ + -7.24776, + 57.804381 + ], + [ + -7.256822, + 57.796618 + ] + ] + ], + [ + [ + [ + -8.551102, + 57.793745 + ], + [ + -8.564789, + 57.825368 + ], + [ + -8.610236, + 57.80935 + ], + [ + -8.551102, + 57.793745 + ] + ] + ], + [ + [ + [ + -8.649996, + 57.827958 + ], + [ + -8.635584, + 57.823708 + ], + [ + -8.642134, + 57.832066 + ], + [ + -8.649996, + 57.827958 + ] + ] + ], + [ + [ + [ + -8.491961, + 57.876947 + ], + [ + -8.499603, + 57.866773 + ], + [ + -8.480354, + 57.866505 + ], + [ + -8.491961, + 57.876947 + ] + ] + ], + [ + [ + [ + -8.496615, + 57.882063 + ], + [ + -8.49817, + 57.879119 + ], + [ + -8.49457, + 57.879313 + ], + [ + -8.496615, + 57.882063 + ] + ] + ], + [ + [ + [ + -7.294925, + 57.984886 + ], + [ + -7.287781, + 57.98028 + ], + [ + -7.283208, + 57.983552 + ], + [ + -7.294925, + 57.984886 + ] + ] + ], + [ + [ + [ + -7.591157, + 58.274226 + ], + [ + -7.588758, + 58.273963 + ], + [ + -7.587438, + 58.275722 + ], + [ + -7.591157, + 58.274226 + ] + ] + ], + [ + [ + [ + -7.650145, + 58.28045 + ], + [ + -7.645041, + 58.28032 + ], + [ + -7.648913, + 58.281611 + ], + [ + -7.650145, + 58.28045 + ] + ] + ], + [ + [ + [ + -7.585946, + 58.282065 + ], + [ + -7.575915, + 58.284664 + ], + [ + -7.577726, + 58.28526 + ], + [ + -7.585946, + 58.282065 + ] + ] + ], + [ + [ + [ + -7.650125, + 58.284118 + ], + [ + -7.647579, + 58.283106 + ], + [ + -7.645364, + 58.284915 + ], + [ + -7.650125, + 58.284118 + ] + ] + ], + [ + [ + [ + -7.58839, + 58.286017 + ], + [ + -7.584903, + 58.288393 + ], + [ + -7.58835, + 58.289542 + ], + [ + -7.58839, + 58.286017 + ] + ] + ], + [ + [ + [ + -7.220947, + 57.328455 + ], + [ + -7.221037, + 57.3295 + ], + [ + -7.229077, + 57.328188 + ], + [ + -7.220947, + 57.328455 + ] + ] + ], + [ + [ + [ + -7.217844, + 57.340858 + ], + [ + -7.209737, + 57.347755 + ], + [ + -7.220651, + 57.342635 + ], + [ + -7.217844, + 57.340858 + ] + ] + ], + [ + [ + [ + -7.206596, + 57.346621 + ], + [ + -7.213469, + 57.344383 + ], + [ + -7.20981, + 57.343288 + ], + [ + -7.206596, + 57.346621 + ] + ] + ], + [ + [ + [ + -7.228442, + 57.351984 + ], + [ + -7.222612, + 57.350913 + ], + [ + -7.226473, + 57.352597 + ], + [ + -7.228442, + 57.351984 + ] + ] + ], + [ + [ + [ + -7.218275, + 57.384288 + ], + [ + -7.211484, + 57.384633 + ], + [ + -7.216139, + 57.385497 + ], + [ + -7.218275, + 57.384288 + ] + ] + ], + [ + [ + [ + -7.18841, + 57.409817 + ], + [ + -7.234261, + 57.391632 + ], + [ + -7.203502, + 57.386211 + ], + [ + -7.18841, + 57.409817 + ] + ] + ], + [ + [ + [ + -7.194495, + 57.424318 + ], + [ + -7.19526, + 57.42659 + ], + [ + -7.199656, + 57.426187 + ], + [ + -7.194495, + 57.424318 + ] + ] + ], + [ + [ + [ + -7.187627, + 57.429227 + ], + [ + -7.189856, + 57.431411 + ], + [ + -7.196588, + 57.430476 + ], + [ + -7.187627, + 57.429227 + ] + ] + ], + [ + [ + [ + -7.192872, + 57.4335 + ], + [ + -7.193703, + 57.433124 + ], + [ + -7.189652, + 57.431559 + ], + [ + -7.192872, + 57.4335 + ] + ] + ], + [ + [ + [ + -7.201675, + 57.431642 + ], + [ + -7.196024, + 57.432726 + ], + [ + -7.201046, + 57.435605 + ], + [ + -7.201675, + 57.431642 + ] + ] + ], + [ + [ + [ + -7.2147, + 57.449267 + ], + [ + -7.218111, + 57.448728 + ], + [ + -7.208215, + 57.446619 + ], + [ + -7.2147, + 57.449267 + ] + ] + ], + [ + [ + [ + -7.182452, + 57.451085 + ], + [ + -7.177783, + 57.450121 + ], + [ + -7.1802, + 57.452213 + ], + [ + -7.182452, + 57.451085 + ] + ] + ], + [ + [ + [ + -7.213188, + 57.452239 + ], + [ + -7.214716, + 57.453238 + ], + [ + -7.219664, + 57.453986 + ], + [ + -7.213188, + 57.452239 + ] + ] + ], + [ + [ + [ + -7.193168, + 57.45332 + ], + [ + -7.184032, + 57.454574 + ], + [ + -7.190221, + 57.45948 + ], + [ + -7.193168, + 57.45332 + ] + ] + ], + [ + [ + [ + -7.209946, + 57.467842 + ], + [ + -7.205137, + 57.468428 + ], + [ + -7.226085, + 57.47559 + ], + [ + -7.209946, + 57.467842 + ] + ] + ], + [ + [ + [ + -7.201406, + 57.480959 + ], + [ + -7.192256, + 57.480278 + ], + [ + -7.196874, + 57.483695 + ], + [ + -7.201406, + 57.480959 + ] + ] + ], + [ + [ + [ + -7.177281, + 57.491097 + ], + [ + -7.194553, + 57.473095 + ], + [ + -7.15794, + 57.483775 + ], + [ + -7.167853, + 57.502278 + ], + [ + -7.177281, + 57.491097 + ] + ] + ], + [ + [ + [ + -7.213155, + 57.495752 + ], + [ + -7.210121, + 57.492351 + ], + [ + -7.211534, + 57.496688 + ], + [ + -7.213155, + 57.495752 + ] + ] + ], + [ + [ + [ + -7.15396, + 57.494983 + ], + [ + -7.143375, + 57.500806 + ], + [ + -7.148017, + 57.500472 + ], + [ + -7.15396, + 57.494983 + ] + ] + ], + [ + [ + [ + -7.203361, + 57.504589 + ], + [ + -7.2108, + 57.5029 + ], + [ + -7.195353, + 57.50312 + ], + [ + -7.203361, + 57.504589 + ] + ] + ], + [ + [ + [ + -7.161422, + 57.505848 + ], + [ + -7.167906, + 57.505542 + ], + [ + -7.164189, + 57.503314 + ], + [ + -7.161422, + 57.505848 + ] + ] + ], + [ + [ + [ + -7.195521, + 57.505358 + ], + [ + -7.180728, + 57.504187 + ], + [ + -7.191785, + 57.505535 + ], + [ + -7.195521, + 57.505358 + ] + ] + ], + [ + [ + [ + -7.159163, + 57.505122 + ], + [ + -7.150529, + 57.504891 + ], + [ + -7.152928, + 57.506192 + ], + [ + -7.159163, + 57.505122 + ] + ] + ], + [ + [ + [ + -7.20893, + 57.507238 + ], + [ + -7.213295, + 57.506081 + ], + [ + -7.203774, + 57.50567 + ], + [ + -7.20893, + 57.507238 + ] + ] + ], + [ + [ + [ + -7.15433, + 57.506944 + ], + [ + -7.141925, + 57.507294 + ], + [ + -7.150951, + 57.508824 + ], + [ + -7.15433, + 57.506944 + ] + ] + ], + [ + [ + [ + -7.191966, + 57.510211 + ], + [ + -7.187972, + 57.510398 + ], + [ + -7.195362, + 57.512042 + ], + [ + -7.191966, + 57.510211 + ] + ] + ], + [ + [ + [ + -7.138979, + 57.598185 + ], + [ + -7.142569, + 57.59744 + ], + [ + -7.137369, + 57.596518 + ], + [ + -7.138979, + 57.598185 + ] + ] + ], + [ + [ + [ + -7.141139, + 57.604094 + ], + [ + -7.132977, + 57.602622 + ], + [ + -7.137775, + 57.605374 + ], + [ + -7.141139, + 57.604094 + ] + ] + ], + [ + [ + [ + -7.148933, + 57.609555 + ], + [ + -7.141444, + 57.608378 + ], + [ + -7.14737, + 57.61084 + ], + [ + -7.148933, + 57.609555 + ] + ] + ], + [ + [ + [ + -7.13018, + 57.610344 + ], + [ + -7.117233, + 57.608292 + ], + [ + -7.118613, + 57.612375 + ], + [ + -7.13018, + 57.610344 + ] + ] + ], + [ + [ + [ + -7.159482, + 57.618407 + ], + [ + -7.136382, + 57.612057 + ], + [ + -7.133829, + 57.61855 + ], + [ + -7.159482, + 57.618407 + ] + ] + ], + [ + [ + [ + -7.14122, + 57.622428 + ], + [ + -7.129265, + 57.620364 + ], + [ + -7.138073, + 57.622467 + ], + [ + -7.14122, + 57.622428 + ] + ] + ], + [ + [ + [ + -7.067199, + 57.64646 + ], + [ + -7.060136, + 57.647914 + ], + [ + -7.071873, + 57.648981 + ], + [ + -7.067199, + 57.64646 + ] + ] + ], + [ + [ + [ + -7.151249, + 57.652729 + ], + [ + -7.146972, + 57.651626 + ], + [ + -7.149912, + 57.653418 + ], + [ + -7.151249, + 57.652729 + ] + ] + ], + [ + [ + [ + -7.086472, + 57.655253 + ], + [ + -7.088363, + 57.654439 + ], + [ + -7.084231, + 57.653326 + ], + [ + -7.086472, + 57.655253 + ] + ] + ], + [ + [ + [ + -7.131248, + 57.656864 + ], + [ + -7.134282, + 57.654585 + ], + [ + -7.126325, + 57.655233 + ], + [ + -7.131248, + 57.656864 + ] + ] + ], + [ + [ + [ + -7.176471, + 57.655219 + ], + [ + -7.168878, + 57.655593 + ], + [ + -7.171132, + 57.656797 + ], + [ + -7.176471, + 57.655219 + ] + ] + ], + [ + [ + [ + -7.160201, + 57.656367 + ], + [ + -7.151245, + 57.65577 + ], + [ + -7.159201, + 57.657065 + ], + [ + -7.160201, + 57.656367 + ] + ] + ], + [ + [ + [ + -7.069782, + 57.655574 + ], + [ + -7.05903, + 57.662178 + ], + [ + -7.079241, + 57.661092 + ], + [ + -7.069782, + 57.655574 + ] + ] + ], + [ + [ + [ + -7.16107, + 57.66141 + ], + [ + -7.153241, + 57.66326 + ], + [ + -7.156085, + 57.662951 + ], + [ + -7.16107, + 57.66141 + ] + ] + ], + [ + [ + [ + -7.103581, + 57.6628 + ], + [ + -7.086325, + 57.660307 + ], + [ + -7.089245, + 57.664607 + ], + [ + -7.103581, + 57.6628 + ] + ] + ], + [ + [ + [ + -7.130319, + 57.666133 + ], + [ + -7.126065, + 57.666266 + ], + [ + -7.129529, + 57.668086 + ], + [ + -7.130319, + 57.666133 + ] + ] + ], + [ + [ + [ + -7.127988, + 57.672085 + ], + [ + -7.116849, + 57.66735 + ], + [ + -7.117745, + 57.674888 + ], + [ + -7.127988, + 57.672085 + ] + ] + ], + [ + [ + [ + -7.14237, + 57.671482 + ], + [ + -7.138468, + 57.671029 + ], + [ + -7.143891, + 57.672612 + ], + [ + -7.14237, + 57.671482 + ] + ] + ], + [ + [ + [ + -7.079358, + 57.674259 + ], + [ + -7.079501, + 57.669647 + ], + [ + -7.073981, + 57.670642 + ], + [ + -7.079358, + 57.674259 + ] + ] + ], + [ + [ + [ + -7.090355, + 57.671369 + ], + [ + -7.087696, + 57.670374 + ], + [ + -7.088851, + 57.674889 + ], + [ + -7.090355, + 57.671369 + ] + ] + ], + [ + [ + [ + -7.10975, + 57.669761 + ], + [ + -7.09602, + 57.669619 + ], + [ + -7.106702, + 57.675715 + ], + [ + -7.10975, + 57.669761 + ] + ] + ], + [ + [ + [ + -7.138478, + 57.671983 + ], + [ + -7.131476, + 57.671458 + ], + [ + -7.139757, + 57.674666 + ], + [ + -7.138478, + 57.671983 + ] + ] + ], + [ + [ + [ + -7.142513, + 57.672902 + ], + [ + -7.144654, + 57.673967 + ], + [ + -7.148776, + 57.673839 + ], + [ + -7.142513, + 57.672902 + ] + ] + ], + [ + [ + [ + -7.060077, + 57.67094 + ], + [ + -7.061443, + 57.67555 + ], + [ + -7.07745, + 57.676041 + ], + [ + -7.060077, + 57.67094 + ] + ] + ], + [ + [ + [ + -7.082449, + 57.675466 + ], + [ + -7.083046, + 57.673017 + ], + [ + -7.080292, + 57.673313 + ], + [ + -7.082449, + 57.675466 + ] + ] + ], + [ + [ + [ + -7.140368, + 57.677318 + ], + [ + -7.135308, + 57.675625 + ], + [ + -7.138045, + 57.67775 + ], + [ + -7.140368, + 57.677318 + ] + ] + ], + [ + [ + [ + -7.076987, + 57.682744 + ], + [ + -7.078178, + 57.679556 + ], + [ + -7.072745, + 57.679743 + ], + [ + -7.076987, + 57.682744 + ] + ] + ], + [ + [ + [ + -7.144131, + 57.681636 + ], + [ + -7.142452, + 57.683059 + ], + [ + -7.148504, + 57.685633 + ], + [ + -7.144131, + 57.681636 + ] + ] + ], + [ + [ + [ + -7.163256, + 57.685998 + ], + [ + -7.160757, + 57.682672 + ], + [ + -7.150793, + 57.68342 + ], + [ + -7.163256, + 57.685998 + ] + ] + ], + [ + [ + [ + -7.173012, + 57.687492 + ], + [ + -7.168594, + 57.68644 + ], + [ + -7.16965, + 57.687891 + ], + [ + -7.173012, + 57.687492 + ] + ] + ], + [ + [ + [ + -7.156388, + 57.691744 + ], + [ + -7.157373, + 57.691047 + ], + [ + -7.154195, + 57.689737 + ], + [ + -7.156388, + 57.691744 + ] + ] + ], + [ + [ + [ + -7.179183, + 57.693695 + ], + [ + -7.164145, + 57.689992 + ], + [ + -7.170588, + 57.69681 + ], + [ + -7.179183, + 57.693695 + ] + ] + ], + [ + [ + [ + -7.096246, + 57.700112 + ], + [ + -7.09435, + 57.701389 + ], + [ + -7.101813, + 57.701871 + ], + [ + -7.096246, + 57.700112 + ] + ] + ], + [ + [ + [ + -7.09363, + 57.701522 + ], + [ + -7.088643, + 57.703887 + ], + [ + -7.096438, + 57.702844 + ], + [ + -7.09363, + 57.701522 + ] + ] + ], + [ + [ + [ + -7.065314, + 57.716787 + ], + [ + -7.059693, + 57.716328 + ], + [ + -7.061832, + 57.719895 + ], + [ + -7.065314, + 57.716787 + ] + ] + ], + [ + [ + [ + -7.058804, + 57.729747 + ], + [ + -7.062785, + 57.731446 + ], + [ + -7.06225, + 57.730513 + ], + [ + -7.058804, + 57.729747 + ] + ] + ], + [ + [ + [ + -7.062177, + 57.732752 + ], + [ + -7.051386, + 57.727691 + ], + [ + -7.068338, + 57.74148 + ], + [ + -7.062177, + 57.732752 + ] + ] + ], + [ + [ + [ + -7.107827, + 57.751127 + ], + [ + -7.102084, + 57.749191 + ], + [ + -7.10612, + 57.752442 + ], + [ + -7.107827, + 57.751127 + ] + ] + ], + [ + [ + [ + -7.074197, + 57.751151 + ], + [ + -7.069686, + 57.759474 + ], + [ + -7.099772, + 57.768273 + ], + [ + -7.074197, + 57.751151 + ] + ] + ], + [ + [ + [ + -7.166082, + 57.830127 + ], + [ + -7.172978, + 57.828698 + ], + [ + -7.164802, + 57.826494 + ], + [ + -7.166082, + 57.830127 + ] + ] + ], + [ + [ + [ + -7.099325, + 58.00563 + ], + [ + -7.107228, + 58.02885 + ], + [ + -7.172055, + 58.026167 + ], + [ + -7.099325, + 58.00563 + ] + ] + ], + [ + [ + [ + -7.089527, + 58.021512 + ], + [ + -7.087241, + 58.025882 + ], + [ + -7.096956, + 58.025864 + ], + [ + -7.089527, + 58.021512 + ] + ] + ], + [ + [ + [ + -7.068232, + 58.030201 + ], + [ + -7.068354, + 58.027295 + ], + [ + -7.064544, + 58.027631 + ], + [ + -7.068232, + 58.030201 + ] + ] + ], + [ + [ + [ + -7.153431, + 58.039562 + ], + [ + -7.145167, + 58.036545 + ], + [ + -7.148371, + 58.039177 + ], + [ + -7.153431, + 58.039562 + ] + ] + ], + [ + [ + [ + -7.090156, + 58.063663 + ], + [ + -7.091169, + 58.065233 + ], + [ + -7.094858, + 58.062885 + ], + [ + -7.090156, + 58.063663 + ] + ] + ], + [ + [ + [ + -7.136243, + 58.07512 + ], + [ + -7.11772, + 58.071782 + ], + [ + -7.118691, + 58.083638 + ], + [ + -7.136243, + 58.07512 + ] + ] + ], + [ + [ + [ + -7.129864, + 58.104975 + ], + [ + -7.123919, + 58.10571 + ], + [ + -7.126866, + 58.107471 + ], + [ + -7.129864, + 58.104975 + ] + ] + ], + [ + [ + [ + -7.109933, + 58.17823 + ], + [ + -7.116248, + 58.177346 + ], + [ + -7.113187, + 58.176046 + ], + [ + -7.109933, + 58.17823 + ] + ] + ], + [ + [ + [ + -7.084333, + 58.189818 + ], + [ + -7.081559, + 58.18853 + ], + [ + -7.083644, + 58.19084 + ], + [ + -7.084333, + 58.189818 + ] + ] + ], + [ + [ + [ + -6.754009, + 56.55699 + ], + [ + -6.87682, + 56.519304 + ], + [ + -6.95108, + 56.529414 + ], + [ + -7.008032, + 56.502114 + ], + [ + -6.9071, + 56.440704 + ], + [ + -6.754009, + 56.55699 + ] + ] + ], + [ + [ + [ + -6.931518, + 56.537149 + ], + [ + -6.934807, + 56.535956 + ], + [ + -6.934348, + 56.535124 + ], + [ + -6.931518, + 56.537149 + ] + ] + ], + [ + [ + [ + -6.711335, + 56.538135 + ], + [ + -6.709971, + 56.534566 + ], + [ + -6.709441, + 56.536134 + ], + [ + -6.711335, + 56.538135 + ] + ] + ], + [ + [ + [ + -6.725404, + 56.559865 + ], + [ + -6.704481, + 56.565774 + ], + [ + -6.712936, + 56.571516 + ], + [ + -6.725404, + 56.559865 + ] + ] + ], + [ + [ + [ + -6.630739, + 56.561797 + ], + [ + -6.627405, + 56.566365 + ], + [ + -6.635011, + 56.571465 + ], + [ + -6.630739, + 56.561797 + ] + ] + ], + [ + [ + [ + -6.523046, + 56.624267 + ], + [ + -6.45342, + 56.688099 + ], + [ + -6.619182, + 56.622276 + ], + [ + -6.657051, + 56.594478 + ], + [ + -6.710576, + 56.575663 + ], + [ + -6.524407, + 56.603292 + ], + [ + -6.523046, + 56.624267 + ] + ] + ], + [ + [ + [ + -6.683603, + 56.967705 + ], + [ + -6.684243, + 56.971549 + ], + [ + -6.686069, + 56.967999 + ], + [ + -6.683603, + 56.967705 + ] + ] + ], + [ + [ + [ + -6.676418, + 56.964785 + ], + [ + -6.67264, + 56.969128 + ], + [ + -6.679009, + 56.976031 + ], + [ + -6.676418, + 56.964785 + ] + ] + ], + [ + [ + [ + -6.594535, + 57.039035 + ], + [ + -6.595291, + 57.037014 + ], + [ + -6.591206, + 57.038136 + ], + [ + -6.594535, + 57.039035 + ] + ] + ], + [ + [ + [ + -6.613927, + 57.050823 + ], + [ + -6.51596, + 57.056848 + ], + [ + -6.465058, + 57.045297 + ], + [ + -6.488397, + 57.068134 + ], + [ + -6.613927, + 57.050823 + ] + ] + ], + [ + [ + [ + -6.6681, + 57.334065 + ], + [ + -6.667864, + 57.339275 + ], + [ + -6.673315, + 57.337141 + ], + [ + -6.6681, + 57.334065 + ] + ] + ], + [ + [ + [ + -6.522113, + 57.359627 + ], + [ + -6.522173, + 57.366591 + ], + [ + -6.529412, + 57.366038 + ], + [ + -6.522113, + 57.359627 + ] + ] + ], + [ + [ + [ + -6.619368, + 57.440523 + ], + [ + -6.625149, + 57.449432 + ], + [ + -6.635352, + 57.444284 + ], + [ + -6.619368, + 57.440523 + ] + ] + ], + [ + [ + [ + -6.639795, + 57.451094 + ], + [ + -6.642611, + 57.452262 + ], + [ + -6.646164, + 57.451384 + ], + [ + -6.639795, + 57.451094 + ] + ] + ], + [ + [ + [ + -6.60206, + 57.454102 + ], + [ + -6.610953, + 57.452338 + ], + [ + -6.606407, + 57.450655 + ], + [ + -6.60206, + 57.454102 + ] + ] + ], + [ + [ + [ + -6.636748, + 57.511461 + ], + [ + -6.648028, + 57.527317 + ], + [ + -6.650634, + 57.511237 + ], + [ + -6.636748, + 57.511461 + ] + ] + ], + [ + [ + [ + -6.643061, + 57.527964 + ], + [ + -6.641949, + 57.522581 + ], + [ + -6.638226, + 57.524265 + ], + [ + -6.643061, + 57.527964 + ] + ] + ], + [ + [ + [ + -6.637905, + 57.529696 + ], + [ + -6.641021, + 57.530396 + ], + [ + -6.638081, + 57.527333 + ], + [ + -6.637905, + 57.529696 + ] + ] + ], + [ + [ + [ + -6.50838, + 57.581178 + ], + [ + -6.527368, + 57.593485 + ], + [ + -6.524084, + 57.588427 + ], + [ + -6.50838, + 57.581178 + ] + ] + ], + [ + [ + [ + -6.527637, + 57.594906 + ], + [ + -6.545303, + 57.59874 + ], + [ + -6.543351, + 57.596193 + ], + [ + -6.527637, + 57.594906 + ] + ] + ], + [ + [ + [ + -7.043404, + 57.649533 + ], + [ + -7.046146, + 57.661156 + ], + [ + -7.061016, + 57.653137 + ], + [ + -7.043404, + 57.649533 + ] + ] + ], + [ + [ + [ + -7.013803, + 57.691538 + ], + [ + -7.01907, + 57.6929 + ], + [ + -7.023315, + 57.692503 + ], + [ + -7.013803, + 57.691538 + ] + ] + ], + [ + [ + [ + -7.055627, + 57.700593 + ], + [ + -7.056852, + 57.699554 + ], + [ + -7.054465, + 57.697805 + ], + [ + -7.055627, + 57.700593 + ] + ] + ], + [ + [ + [ + -7.017805, + 57.703385 + ], + [ + -7.018725, + 57.700075 + ], + [ + -7.010524, + 57.699462 + ], + [ + -7.017805, + 57.703385 + ] + ] + ], + [ + [ + [ + -7.03105, + 57.705883 + ], + [ + -7.042051, + 57.704469 + ], + [ + -7.024409, + 57.699811 + ], + [ + -7.03105, + 57.705883 + ] + ] + ], + [ + [ + [ + -6.998181, + 57.705661 + ], + [ + -7.004619, + 57.711567 + ], + [ + -7.004698, + 57.705424 + ], + [ + -6.998181, + 57.705661 + ] + ] + ], + [ + [ + [ + -7.053689, + 57.714508 + ], + [ + -7.051016, + 57.712343 + ], + [ + -7.049861, + 57.712925 + ], + [ + -7.053689, + 57.714508 + ] + ] + ], + [ + [ + [ + -7.060395, + 57.72747 + ], + [ + -7.049747, + 57.723902 + ], + [ + -7.056781, + 57.727907 + ], + [ + -7.060395, + 57.72747 + ] + ] + ], + [ + [ + [ + -7.045589, + 57.74845 + ], + [ + -7.046391, + 57.747869 + ], + [ + -7.04142, + 57.746615 + ], + [ + -7.045589, + 57.74845 + ] + ] + ], + [ + [ + [ + -6.933232, + 57.75047 + ], + [ + -6.927723, + 57.753564 + ], + [ + -6.927848, + 57.754729 + ], + [ + -6.933232, + 57.75047 + ] + ] + ], + [ + [ + [ + -7.056674, + 57.752627 + ], + [ + -7.052451, + 57.752935 + ], + [ + -7.054634, + 57.754526 + ], + [ + -7.056674, + 57.752627 + ] + ] + ], + [ + [ + [ + -7.020117, + 57.763077 + ], + [ + -7.023857, + 57.764309 + ], + [ + -7.024021, + 57.761248 + ], + [ + -7.020117, + 57.763077 + ] + ] + ], + [ + [ + [ + -7.052437, + 57.769738 + ], + [ + -7.049107, + 57.767658 + ], + [ + -7.04852, + 57.768581 + ], + [ + -7.052437, + 57.769738 + ] + ] + ], + [ + [ + [ + -7.057018, + 57.770104 + ], + [ + -7.053833, + 57.768346 + ], + [ + -7.052979, + 57.770301 + ], + [ + -7.057018, + 57.770104 + ] + ] + ], + [ + [ + [ + -6.823156, + 57.80362 + ], + [ + -6.807375, + 57.804504 + ], + [ + -6.823776, + 57.812578 + ], + [ + -6.823156, + 57.80362 + ] + ] + ], + [ + [ + [ + -6.782847, + 57.810864 + ], + [ + -6.782018, + 57.812779 + ], + [ + -6.785971, + 57.812173 + ], + [ + -6.782847, + 57.810864 + ] + ] + ], + [ + [ + [ + -6.778066, + 57.816842 + ], + [ + -6.777127, + 57.818813 + ], + [ + -6.780991, + 57.818677 + ], + [ + -6.778066, + 57.816842 + ] + ] + ], + [ + [ + [ + -6.739606, + 57.850301 + ], + [ + -6.741414, + 57.849042 + ], + [ + -6.735533, + 57.848457 + ], + [ + -6.739606, + 57.850301 + ] + ] + ], + [ + [ + [ + -6.704693, + 57.856529 + ], + [ + -6.708041, + 57.855352 + ], + [ + -6.699659, + 57.85261 + ], + [ + -6.704693, + 57.856529 + ] + ] + ], + [ + [ + [ + -6.718829, + 57.858094 + ], + [ + -6.710374, + 57.858737 + ], + [ + -6.713026, + 57.861846 + ], + [ + -6.718829, + 57.858094 + ] + ] + ], + [ + [ + [ + -6.641178, + 57.856723 + ], + [ + -6.650008, + 57.871187 + ], + [ + -6.690857, + 57.851174 + ], + [ + -6.641178, + 57.856723 + ] + ] + ], + [ + [ + [ + -6.713694, + 57.864947 + ], + [ + -6.71687, + 57.868827 + ], + [ + -6.723244, + 57.863637 + ], + [ + -6.713694, + 57.864947 + ] + ] + ], + [ + [ + [ + -6.711992, + 57.869283 + ], + [ + -6.714369, + 57.869451 + ], + [ + -6.709388, + 57.866614 + ], + [ + -6.711992, + 57.869283 + ] + ] + ], + [ + [ + [ + -6.750641, + 57.879308 + ], + [ + -6.746606, + 57.870747 + ], + [ + -6.737421, + 57.875477 + ], + [ + -6.750641, + 57.879308 + ] + ] + ], + [ + [ + [ + -7.077532, + 57.87473 + ], + [ + -6.983299, + 57.893248 + ], + [ + -6.993092, + 57.918564 + ], + [ + -7.077532, + 57.87473 + ] + ] + ], + [ + [ + [ + -6.883554, + 57.915208 + ], + [ + -6.88539, + 57.916959 + ], + [ + -6.890146, + 57.913839 + ], + [ + -6.883554, + 57.915208 + ] + ] + ], + [ + [ + [ + -6.598738, + 57.924283 + ], + [ + -6.595355, + 57.924666 + ], + [ + -6.60103, + 57.926538 + ], + [ + -6.598738, + 57.924283 + ] + ] + ], + [ + [ + [ + -6.966072, + 57.933197 + ], + [ + -6.951295, + 57.936236 + ], + [ + -6.964836, + 57.942715 + ], + [ + -6.966072, + 57.933197 + ] + ] + ], + [ + [ + [ + -6.982132, + 57.945986 + ], + [ + -6.984917, + 57.943258 + ], + [ + -6.977565, + 57.94173 + ], + [ + -6.982132, + 57.945986 + ] + ] + ], + [ + [ + [ + -6.741128, + 58.001094 + ], + [ + -6.723785, + 57.985265 + ], + [ + -6.712342, + 57.994034 + ], + [ + -6.741128, + 58.001094 + ] + ] + ], + [ + [ + [ + -7.129284, + 57.825136 + ], + [ + -7.014154, + 57.769409 + ], + [ + -6.965904, + 57.727833 + ], + [ + -6.803015, + 57.897415 + ], + [ + -6.66513, + 57.882158 + ], + [ + -6.756618, + 57.995293 + ], + [ + -6.689388, + 58.057677 + ], + [ + -6.587936, + 58.052999 + ], + [ + -6.651079, + 57.917435 + ], + [ + -6.448892, + 57.965641 + ], + [ + -6.570846, + 58.004496 + ], + [ + -6.460126, + 58.018772 + ], + [ + -6.386525, + 58.000575 + ], + [ + -6.398692, + 58.111838 + ], + [ + -6.431832, + 58.090079 + ], + [ + -6.627513, + 58.083056 + ], + [ + -6.153373, + 58.221119 + ], + [ + -6.334665, + 58.231747 + ], + [ + -6.317682, + 58.266546 + ], + [ + -6.162146, + 58.342614 + ], + [ + -6.260396, + 58.516707 + ], + [ + -6.804362, + 58.304372 + ], + [ + -6.70771, + 58.184545 + ], + [ + -6.863656, + 58.116067 + ], + [ + -7.048915, + 58.232578 + ], + [ + -7.100795, + 58.070159 + ], + [ + -6.909447, + 58.051194 + ], + [ + -7.114502, + 57.989013 + ], + [ + -6.901853, + 57.950752 + ], + [ + -6.815962, + 57.900657 + ], + [ + -7.129284, + 57.825136 + ] + ] + ], + [ + [ + [ + -6.729088, + 58.177258 + ], + [ + -6.727679, + 58.17991 + ], + [ + -6.732042, + 58.180962 + ], + [ + -6.729088, + 58.177258 + ] + ] + ], + [ + [ + [ + -6.927503, + 58.198813 + ], + [ + -6.934649, + 58.194627 + ], + [ + -6.92133, + 58.189255 + ], + [ + -6.927503, + 58.198813 + ] + ] + ], + [ + [ + [ + -6.887056, + 58.192842 + ], + [ + -6.883547, + 58.193525 + ], + [ + -6.888243, + 58.195711 + ], + [ + -6.887056, + 58.192842 + ] + ] + ], + [ + [ + [ + -6.903251, + 58.195201 + ], + [ + -6.893492, + 58.193225 + ], + [ + -6.897747, + 58.199826 + ], + [ + -6.903251, + 58.195201 + ] + ] + ], + [ + [ + [ + -6.778055, + 58.201219 + ], + [ + -6.764672, + 58.193104 + ], + [ + -6.765248, + 58.201708 + ], + [ + -6.778055, + 58.201219 + ] + ] + ], + [ + [ + [ + -6.920274, + 58.198661 + ], + [ + -6.922501, + 58.200136 + ], + [ + -6.921063, + 58.197222 + ], + [ + -6.920274, + 58.198661 + ] + ] + ], + [ + [ + [ + -6.877077, + 58.207942 + ], + [ + -6.887422, + 58.211346 + ], + [ + -6.894186, + 58.205887 + ], + [ + -6.877077, + 58.207942 + ] + ] + ], + [ + [ + [ + -6.775655, + 58.212762 + ], + [ + -6.766492, + 58.21148 + ], + [ + -6.769103, + 58.216921 + ], + [ + -6.775655, + 58.212762 + ] + ] + ], + [ + [ + [ + -6.936026, + 58.225665 + ], + [ + -6.937406, + 58.222841 + ], + [ + -6.934552, + 58.221566 + ], + [ + -6.936026, + 58.225665 + ] + ] + ], + [ + [ + [ + -6.792691, + 58.223234 + ], + [ + -6.786679, + 58.222583 + ], + [ + -6.788046, + 58.224943 + ], + [ + -6.792691, + 58.223234 + ] + ] + ], + [ + [ + [ + -6.911376, + 58.230585 + ], + [ + -6.919434, + 58.229847 + ], + [ + -6.908774, + 58.227496 + ], + [ + -6.911376, + 58.230585 + ] + ] + ], + [ + [ + [ + -6.781726, + 58.202669 + ], + [ + -6.884919, + 58.25734 + ], + [ + -6.871889, + 58.24243 + ], + [ + -6.781726, + 58.202669 + ] + ] + ], + [ + [ + [ + -6.951343, + 58.238755 + ], + [ + -6.928725, + 58.228656 + ], + [ + -6.934161, + 58.233524 + ], + [ + -6.951343, + 58.238755 + ] + ] + ], + [ + [ + [ + -6.826078, + 58.235772 + ], + [ + -6.823073, + 58.233751 + ], + [ + -6.82278, + 58.234918 + ], + [ + -6.826078, + 58.235772 + ] + ] + ], + [ + [ + [ + -6.942279, + 58.239939 + ], + [ + -6.938333, + 58.241428 + ], + [ + -6.939822, + 58.243141 + ], + [ + -6.942279, + 58.239939 + ] + ] + ], + [ + [ + [ + -6.895514, + 58.244775 + ], + [ + -6.890669, + 58.243079 + ], + [ + -6.8936, + 58.245128 + ], + [ + -6.895514, + 58.244775 + ] + ] + ], + [ + [ + [ + -6.844634, + 58.255355 + ], + [ + -6.841619, + 58.252843 + ], + [ + -6.844046, + 58.256052 + ], + [ + -6.844634, + 58.255355 + ] + ] + ], + [ + [ + [ + -6.929526, + 58.262366 + ], + [ + -6.932357, + 58.261798 + ], + [ + -6.927811, + 58.26053 + ], + [ + -6.929526, + 58.262366 + ] + ] + ], + [ + [ + [ + -6.858645, + 58.260517 + ], + [ + -6.859151, + 58.266695 + ], + [ + -6.867459, + 58.265906 + ], + [ + -6.858645, + 58.260517 + ] + ] + ], + [ + [ + [ + -6.909811, + 58.265331 + ], + [ + -6.904464, + 58.265244 + ], + [ + -6.904213, + 58.267867 + ], + [ + -6.909811, + 58.265331 + ] + ] + ], + [ + [ + [ + -6.867596, + 58.270188 + ], + [ + -6.868774, + 58.274038 + ], + [ + -6.871929, + 58.270036 + ], + [ + -6.867596, + 58.270188 + ] + ] + ], + [ + [ + [ + -6.880169, + 58.277547 + ], + [ + -6.876454, + 58.277105 + ], + [ + -6.878621, + 58.279878 + ], + [ + -6.880169, + 58.277547 + ] + ] + ], + [ + [ + [ + -6.923158, + 58.285377 + ], + [ + -6.925376, + 58.283024 + ], + [ + -6.915347, + 58.283803 + ], + [ + -6.923158, + 58.285377 + ] + ] + ], + [ + [ + [ + -6.835829, + 58.28529 + ], + [ + -6.832297, + 58.284385 + ], + [ + -6.83188, + 58.286893 + ], + [ + -6.835829, + 58.28529 + ] + ] + ], + [ + [ + [ + -6.131738, + 55.619578 + ], + [ + -6.139037, + 55.621351 + ], + [ + -6.143296, + 55.612852 + ], + [ + -6.131738, + 55.619578 + ] + ] + ], + [ + [ + [ + -6.514864, + 55.670881 + ], + [ + -6.50619, + 55.671423 + ], + [ + -6.512669, + 55.677376 + ], + [ + -6.514864, + 55.670881 + ] + ] + ], + [ + [ + [ + -6.513714, + 55.678447 + ], + [ + -6.518861, + 55.683642 + ], + [ + -6.517399, + 55.677784 + ], + [ + -6.513714, + 55.678447 + ] + ] + ], + [ + [ + [ + -6.199123, + 55.928185 + ], + [ + -6.52641, + 55.693384 + ], + [ + -6.294803, + 55.784156 + ], + [ + -6.338284, + 55.589602 + ], + [ + -6.074198, + 55.642267 + ], + [ + -6.199123, + 55.928185 + ] + ] + ], + [ + [ + [ + -6.351396, + 55.887391 + ], + [ + -6.347941, + 55.892477 + ], + [ + -6.350373, + 55.892971 + ], + [ + -6.351396, + 55.887391 + ] + ] + ], + [ + [ + [ + -6.345195, + 55.900472 + ], + [ + -6.347121, + 55.894737 + ], + [ + -6.342129, + 55.893698 + ], + [ + -6.345195, + 55.900472 + ] + ] + ], + [ + [ + [ + -6.277939, + 56.002012 + ], + [ + -6.287683, + 55.99676 + ], + [ + -6.282461, + 55.994838 + ], + [ + -6.277939, + 56.002012 + ] + ] + ], + [ + [ + [ + -6.233205, + 55.99849 + ], + [ + -6.22673, + 55.997611 + ], + [ + -6.22494, + 56.002007 + ], + [ + -6.233205, + 55.99849 + ] + ] + ], + [ + [ + [ + -6.269833, + 56.002575 + ], + [ + -6.262933, + 55.998452 + ], + [ + -6.264542, + 56.004023 + ], + [ + -6.269833, + 56.002575 + ] + ] + ], + [ + [ + [ + -6.220036, + 56.008107 + ], + [ + -6.226213, + 56.004257 + ], + [ + -6.221376, + 56.002516 + ], + [ + -6.220036, + 56.008107 + ] + ] + ], + [ + [ + [ + -6.140512, + 56.129936 + ], + [ + -6.28145, + 56.015668 + ], + [ + -6.209621, + 56.01554 + ], + [ + -6.140512, + 56.129936 + ] + ] + ], + [ + [ + [ + -6.296721, + 56.267479 + ], + [ + -6.29149, + 56.267242 + ], + [ + -6.290992, + 56.269097 + ], + [ + -6.296721, + 56.267479 + ] + ] + ], + [ + [ + [ + -6.357298, + 56.274217 + ], + [ + -6.351796, + 56.270399 + ], + [ + -6.349643, + 56.275705 + ], + [ + -6.357298, + 56.274217 + ] + ] + ], + [ + [ + [ + -6.352099, + 56.282364 + ], + [ + -6.355837, + 56.283384 + ], + [ + -6.353979, + 56.279995 + ], + [ + -6.352099, + 56.282364 + ] + ] + ], + [ + [ + [ + -6.456355, + 56.285939 + ], + [ + -6.46239, + 56.286377 + ], + [ + -6.450881, + 56.284895 + ], + [ + -6.456355, + 56.285939 + ] + ] + ], + [ + [ + [ + -6.395877, + 56.288348 + ], + [ + -6.391485, + 56.285167 + ], + [ + -6.389624, + 56.28642 + ], + [ + -6.395877, + 56.288348 + ] + ] + ], + [ + [ + [ + -6.389234, + 56.291331 + ], + [ + -6.388273, + 56.289094 + ], + [ + -6.383156, + 56.29362 + ], + [ + -6.389234, + 56.291331 + ] + ] + ], + [ + [ + [ + -6.380226, + 56.297619 + ], + [ + -6.383613, + 56.301056 + ], + [ + -6.38213, + 56.296728 + ], + [ + -6.380226, + 56.297619 + ] + ] + ], + [ + [ + [ + -6.432946, + 56.303146 + ], + [ + -6.4333, + 56.300547 + ], + [ + -6.42941, + 56.301114 + ], + [ + -6.432946, + 56.303146 + ] + ] + ], + [ + [ + [ + -6.255064, + 56.324479 + ], + [ + -6.249159, + 56.322889 + ], + [ + -6.250382, + 56.324747 + ], + [ + -6.255064, + 56.324479 + ] + ] + ], + [ + [ + [ + -6.429622, + 56.337948 + ], + [ + -6.425414, + 56.322645 + ], + [ + -6.445116, + 56.313813 + ], + [ + -6.399873, + 56.318201 + ], + [ + -6.429622, + 56.337948 + ] + ] + ], + [ + [ + [ + -6.363907, + 56.340829 + ], + [ + -6.36906, + 56.340563 + ], + [ + -6.371632, + 56.33305 + ], + [ + -6.363907, + 56.340829 + ] + ] + ], + [ + [ + [ + -6.196834, + 56.339227 + ], + [ + -6.199982, + 56.338549 + ], + [ + -6.198187, + 56.336923 + ], + [ + -6.196834, + 56.339227 + ] + ] + ], + [ + [ + [ + -6.372372, + 56.355059 + ], + [ + -6.37347, + 56.355866 + ], + [ + -6.375002, + 56.351643 + ], + [ + -6.372372, + 56.355059 + ] + ] + ], + [ + [ + [ + -6.24924, + 56.411172 + ], + [ + -6.2468, + 56.410091 + ], + [ + -6.24553, + 56.412018 + ], + [ + -6.24924, + 56.411172 + ] + ] + ], + [ + [ + [ + -6.336629, + 56.434238 + ], + [ + -6.338012, + 56.440593 + ], + [ + -6.347738, + 56.43499 + ], + [ + -6.336629, + 56.434238 + ] + ] + ], + [ + [ + [ + -6.159788, + 56.434767 + ], + [ + -6.145282, + 56.448289 + ], + [ + -6.156971, + 56.449899 + ], + [ + -6.159788, + 56.434767 + ] + ] + ], + [ + [ + [ + -6.133997, + 56.453069 + ], + [ + -6.139011, + 56.452658 + ], + [ + -6.135701, + 56.450305 + ], + [ + -6.133997, + 56.453069 + ] + ] + ], + [ + [ + [ + -6.267358, + 56.456331 + ], + [ + -6.266001, + 56.448014 + ], + [ + -6.249691, + 56.45268 + ], + [ + -6.267358, + 56.456331 + ] + ] + ], + [ + [ + [ + -6.469622, + 56.464692 + ], + [ + -6.47937, + 56.461816 + ], + [ + -6.480809, + 56.450026 + ], + [ + -6.469622, + 56.464692 + ] + ] + ], + [ + [ + [ + -6.2234, + 56.461978 + ], + [ + -6.222351, + 56.464378 + ], + [ + -6.227172, + 56.462228 + ], + [ + -6.2234, + 56.461978 + ] + ] + ], + [ + [ + [ + -6.304043, + 56.472753 + ], + [ + -6.30435, + 56.476178 + ], + [ + -6.309736, + 56.473445 + ], + [ + -6.304043, + 56.472753 + ] + ] + ], + [ + [ + [ + -6.258218, + 56.488973 + ], + [ + -6.269863, + 56.477245 + ], + [ + -6.246964, + 56.472154 + ], + [ + -6.249913, + 56.467948 + ], + [ + -6.239962, + 56.465181 + ], + [ + -6.239445, + 56.456043 + ], + [ + -6.222055, + 56.471072 + ], + [ + -6.140891, + 56.471922 + ], + [ + -6.217453, + 56.499845 + ], + [ + -6.258218, + 56.488973 + ] + ] + ], + [ + [ + [ + -6.16698, + 56.490522 + ], + [ + -6.166568, + 56.489362 + ], + [ + -6.157421, + 56.489328 + ], + [ + -6.16698, + 56.490522 + ] + ] + ], + [ + [ + [ + -6.418914, + 56.501827 + ], + [ + -6.427297, + 56.49771 + ], + [ + -6.4236, + 56.48288 + ], + [ + -6.418914, + 56.501827 + ] + ] + ], + [ + [ + [ + -6.414342, + 56.501459 + ], + [ + -6.411398, + 56.505647 + ], + [ + -6.413429, + 56.505908 + ], + [ + -6.414342, + 56.501459 + ] + ] + ], + [ + [ + [ + -6.397893, + 56.509815 + ], + [ + -6.398998, + 56.505598 + ], + [ + -6.388638, + 56.507777 + ], + [ + -6.397893, + 56.509815 + ] + ] + ], + [ + [ + [ + -6.379433, + 56.517291 + ], + [ + -6.380028, + 56.519765 + ], + [ + -6.383675, + 56.519929 + ], + [ + -6.379433, + 56.517291 + ] + ] + ], + [ + [ + [ + -6.379324, + 56.520784 + ], + [ + -6.379071, + 56.518805 + ], + [ + -6.375221, + 56.520268 + ], + [ + -6.379324, + 56.520784 + ] + ] + ], + [ + [ + [ + -6.51807, + 56.619544 + ], + [ + -6.516552, + 56.616495 + ], + [ + -6.513486, + 56.618625 + ], + [ + -6.51807, + 56.619544 + ] + ] + ], + [ + [ + [ + -6.443311, + 56.694609 + ], + [ + -6.441685, + 56.697104 + ], + [ + -6.445199, + 56.699241 + ], + [ + -6.443311, + 56.694609 + ] + ] + ], + [ + [ + [ + -6.448021, + 56.700916 + ], + [ + -6.447752, + 56.702104 + ], + [ + -6.45426, + 56.700378 + ], + [ + -6.448021, + 56.700916 + ] + ] + ], + [ + [ + [ + -6.213981, + 56.835547 + ], + [ + -6.222669, + 56.845596 + ], + [ + -6.270339, + 56.826929 + ], + [ + -6.213981, + 56.835547 + ] + ] + ], + [ + [ + [ + -6.273778, + 56.847505 + ], + [ + -6.268993, + 56.850947 + ], + [ + -6.27664, + 56.853589 + ], + [ + -6.273778, + 56.847505 + ] + ] + ], + [ + [ + [ + -6.210167, + 56.903449 + ], + [ + -6.19448, + 56.878504 + ], + [ + -6.138687, + 56.945476 + ], + [ + -6.210167, + 56.903449 + ] + ] + ], + [ + [ + [ + -6.460171, + 57.007348 + ], + [ + -6.304041, + 56.936062 + ], + [ + -6.329695, + 57.061032 + ], + [ + -6.460171, + 57.007348 + ] + ] + ], + [ + [ + [ + -6.203307, + 57.134328 + ], + [ + -6.178539, + 57.15892 + ], + [ + -6.256644, + 57.149559 + ], + [ + -6.203307, + 57.134328 + ] + ] + ], + [ + [ + [ + -6.504518, + 57.342522 + ], + [ + -6.513907, + 57.332022 + ], + [ + -6.492175, + 57.330374 + ], + [ + -6.504518, + 57.342522 + ] + ] + ], + [ + [ + [ + -6.343201, + 57.685367 + ], + [ + -6.354775, + 57.671295 + ], + [ + -6.427705, + 57.64215 + ], + [ + -6.320062, + 57.467994 + ], + [ + -6.635624, + 57.608809 + ], + [ + -6.584821, + 57.432032 + ], + [ + -6.789163, + 57.420169 + ], + [ + -6.402925, + 57.356367 + ], + [ + -6.322603, + 57.160012 + ], + [ + -6.164962, + 57.198675 + ], + [ + -6.110325, + 57.186329 + ], + [ + -6.082745, + 57.124657 + ], + [ + -6.033855, + 57.223166 + ], + [ + -5.848321, + 57.18508 + ], + [ + -6.0177, + 57.017699 + ], + [ + -5.66863, + 57.208795 + ], + [ + -6.151392, + 57.303865 + ], + [ + -6.13673, + 57.587852 + ], + [ + -6.343201, + 57.685367 + ] + ] + ], + [ + [ + [ + -6.48734, + 57.358567 + ], + [ + -6.491836, + 57.361374 + ], + [ + -6.497105, + 57.357102 + ], + [ + -6.48734, + 57.358567 + ] + ] + ], + [ + [ + [ + -6.417847, + 57.526391 + ], + [ + -6.414155, + 57.524754 + ], + [ + -6.416271, + 57.528349 + ], + [ + -6.417847, + 57.526391 + ] + ] + ], + [ + [ + [ + -6.514308, + 57.593256 + ], + [ + -6.516452, + 57.589618 + ], + [ + -6.513511, + 57.589067 + ], + [ + -6.514308, + 57.593256 + ] + ] + ], + [ + [ + [ + -6.198081, + 57.638894 + ], + [ + -6.208798, + 57.646582 + ], + [ + -6.210009, + 57.645592 + ], + [ + -6.198081, + 57.638894 + ] + ] + ], + [ + [ + [ + -6.221912, + 57.665518 + ], + [ + -6.233248, + 57.666389 + ], + [ + -6.229052, + 57.662784 + ], + [ + -6.221912, + 57.665518 + ] + ] + ], + [ + [ + [ + -6.23002, + 57.669932 + ], + [ + -6.221651, + 57.665945 + ], + [ + -6.231842, + 57.672965 + ], + [ + -6.23002, + 57.669932 + ] + ] + ], + [ + [ + [ + -6.347463, + 57.687091 + ], + [ + -6.354452, + 57.691446 + ], + [ + -6.349709, + 57.687473 + ], + [ + -6.347463, + 57.687091 + ] + ] + ], + [ + [ + [ + -6.299328, + 57.72973 + ], + [ + -6.306736, + 57.725939 + ], + [ + -6.301414, + 57.722959 + ], + [ + -6.299328, + 57.72973 + ] + ] + ], + [ + [ + [ + -6.442376, + 57.743165 + ], + [ + -6.422839, + 57.737038 + ], + [ + -6.436804, + 57.746212 + ], + [ + -6.442376, + 57.743165 + ] + ] + ], + [ + [ + [ + -6.382023, + 57.902893 + ], + [ + -6.352164, + 57.880272 + ], + [ + -6.352029, + 57.902661 + ], + [ + -6.382023, + 57.902893 + ] + ] + ], + [ + [ + [ + -6.324168, + 57.89834 + ], + [ + -6.332698, + 57.901225 + ], + [ + -6.345099, + 57.902278 + ], + [ + -6.324168, + 57.89834 + ] + ] + ], + [ + [ + [ + -6.412195, + 57.997954 + ], + [ + -6.42013, + 58.005417 + ], + [ + -6.451172, + 58.000753 + ], + [ + -6.412195, + 57.997954 + ] + ] + ], + [ + [ + [ + -6.370556, + 58.090941 + ], + [ + -6.372912, + 58.097277 + ], + [ + -6.374634, + 58.092622 + ], + [ + -6.374374, + 58.090086 + ], + [ + -6.370556, + 58.090941 + ] + ] + ], + [ + [ + [ + -6.438621, + 58.096727 + ], + [ + -6.435861, + 58.096936 + ], + [ + -6.437653, + 58.099463 + ], + [ + -6.438621, + 58.096727 + ] + ] + ], + [ + [ + [ + -6.466518, + 58.100431 + ], + [ + -6.476188, + 58.101096 + ], + [ + -6.478564, + 58.100156 + ], + [ + -6.466518, + 58.100431 + ] + ] + ], + [ + [ + [ + -6.378269, + 58.10265 + ], + [ + -6.389701, + 58.10182 + ], + [ + -6.384084, + 58.099932 + ], + [ + -6.378269, + 58.10265 + ] + ] + ], + [ + [ + [ + -6.453073, + 58.101128 + ], + [ + -6.443309, + 58.098501 + ], + [ + -6.434677, + 58.110224 + ], + [ + -6.453073, + 58.101128 + ] + ] + ], + [ + [ + [ + -6.375411, + 58.118464 + ], + [ + -6.37517, + 58.120032 + ], + [ + -6.382363, + 58.11764 + ], + [ + -6.375411, + 58.118464 + ] + ] + ], + [ + [ + [ + -6.385222, + 58.120556 + ], + [ + -6.389021, + 58.119267 + ], + [ + -6.387594, + 58.118165 + ], + [ + -6.385222, + 58.120556 + ] + ] + ], + [ + [ + [ + -6.414599, + 58.120901 + ], + [ + -6.40769, + 58.123582 + ], + [ + -6.410044, + 58.125708 + ], + [ + -6.414599, + 58.120901 + ] + ] + ], + [ + [ + [ + -6.405476, + 58.126779 + ], + [ + -6.406001, + 58.125043 + ], + [ + -6.400828, + 58.125137 + ], + [ + -6.405476, + 58.126779 + ] + ] + ], + [ + [ + [ + -6.414739, + 58.127582 + ], + [ + -6.410221, + 58.128607 + ], + [ + -6.416676, + 58.128755 + ], + [ + -6.414739, + 58.127582 + ] + ] + ], + [ + [ + [ + -6.264549, + 58.283316 + ], + [ + -6.262453, + 58.282995 + ], + [ + -6.257458, + 58.284115 + ], + [ + -6.264549, + 58.283316 + ] + ] + ], + [ + [ + [ + -6.255579, + 58.286596 + ], + [ + -6.260815, + 58.28577 + ], + [ + -6.259414, + 58.285331 + ], + [ + -6.255579, + 58.286596 + ] + ] + ], + [ + [ + [ + -6.262414, + 58.28827 + ], + [ + -6.267269, + 58.286229 + ], + [ + -6.266675, + 58.28601 + ], + [ + -6.262414, + 58.28827 + ] + ] + ], + [ + [ + [ + -6.157704, + 59.096783 + ], + [ + -6.160932, + 59.093069 + ], + [ + -6.153991, + 59.094627 + ], + [ + -6.157704, + 59.096783 + ] + ] + ], + [ + [ + [ + -5.759222, + 55.626803 + ], + [ + -5.751231, + 55.6253 + ], + [ + -5.74932, + 55.639805 + ], + [ + -5.759222, + 55.626803 + ] + ] + ], + [ + [ + [ + -5.742452, + 55.647797 + ], + [ + -5.745057, + 55.64546 + ], + [ + -5.741412, + 55.64773 + ], + [ + -5.742452, + 55.647797 + ] + ] + ], + [ + [ + [ + -5.74174, + 55.651245 + ], + [ + -5.74535, + 55.647426 + ], + [ + -5.740486, + 55.648109 + ], + [ + -5.74174, + 55.651245 + ] + ] + ], + [ + [ + [ + -6.044389, + 55.65495 + ], + [ + -6.04911, + 55.651768 + ], + [ + -6.044588, + 55.653105 + ], + [ + -6.044389, + 55.65495 + ] + ] + ], + [ + [ + [ + -6.039351, + 55.660144 + ], + [ + -6.043132, + 55.658643 + ], + [ + -6.041262, + 55.656033 + ], + [ + -6.039351, + 55.660144 + ] + ] + ], + [ + [ + [ + -5.763764, + 55.645769 + ], + [ + -5.717757, + 55.68526 + ], + [ + -5.774452, + 55.676827 + ], + [ + -5.763764, + 55.645769 + ] + ] + ], + [ + [ + [ + -6.022983, + 55.664738 + ], + [ + -6.018109, + 55.669413 + ], + [ + -6.026311, + 55.66832 + ], + [ + -6.022983, + 55.664738 + ] + ] + ], + [ + [ + [ + -6.0337, + 55.671009 + ], + [ + -6.029524, + 55.668548 + ], + [ + -6.025105, + 55.672533 + ], + [ + -6.0337, + 55.671009 + ] + ] + ], + [ + [ + [ + -5.987996, + 55.791297 + ], + [ + -5.994789, + 55.789826 + ], + [ + -5.992211, + 55.785305 + ], + [ + -5.987996, + 55.791297 + ] + ] + ], + [ + [ + [ + -6.03997, + 55.793941 + ], + [ + -6.040656, + 55.790626 + ], + [ + -6.033257, + 55.79123 + ], + [ + -6.03997, + 55.793941 + ] + ] + ], + [ + [ + [ + -6.075417, + 55.809352 + ], + [ + -6.070819, + 55.809514 + ], + [ + -6.073138, + 55.812904 + ], + [ + -6.075417, + 55.809352 + ] + ] + ], + [ + [ + [ + -5.928328, + 55.841426 + ], + [ + -5.934192, + 55.840069 + ], + [ + -5.935064, + 55.834232 + ], + [ + -5.928328, + 55.841426 + ] + ] + ], + [ + [ + [ + -5.9257, + 55.844122 + ], + [ + -5.920925, + 55.848123 + ], + [ + -5.925469, + 55.847857 + ], + [ + -5.9257, + 55.844122 + ] + ] + ], + [ + [ + [ + -5.929605, + 55.847972 + ], + [ + -5.92738, + 55.850471 + ], + [ + -5.928945, + 55.851248 + ], + [ + -5.929605, + 55.847972 + ] + ] + ], + [ + [ + [ + -5.906579, + 55.859983 + ], + [ + -5.908196, + 55.861671 + ], + [ + -5.911616, + 55.860065 + ], + [ + -5.906579, + 55.859983 + ] + ] + ], + [ + [ + [ + -5.734725, + 55.911138 + ], + [ + -5.730688, + 55.916849 + ], + [ + -5.738177, + 55.915889 + ], + [ + -5.734725, + 55.911138 + ] + ] + ], + [ + [ + [ + -5.696331, + 55.918903 + ], + [ + -5.699076, + 55.917462 + ], + [ + -5.701158, + 55.914788 + ], + [ + -5.696331, + 55.918903 + ] + ] + ], + [ + [ + [ + -5.715683, + 55.91725 + ], + [ + -5.712121, + 55.920099 + ], + [ + -5.715191, + 55.920713 + ], + [ + -5.715683, + 55.91725 + ] + ] + ], + [ + [ + [ + -5.716363, + 55.919243 + ], + [ + -5.716271, + 55.922051 + ], + [ + -5.721032, + 55.918423 + ], + [ + -5.716363, + 55.919243 + ] + ] + ], + [ + [ + [ + -5.708582, + 55.940604 + ], + [ + -5.706018, + 55.944453 + ], + [ + -5.707427, + 55.943691 + ], + [ + -5.708582, + 55.940604 + ] + ] + ], + [ + [ + [ + -5.936566, + 55.86644 + ], + [ + -5.687478, + 56.111098 + ], + [ + -6.07708, + 55.815012 + ], + [ + -5.963039, + 55.792852 + ], + [ + -5.936566, + 55.86644 + ] + ] + ], + [ + [ + [ + -5.973505, + 56.020833 + ], + [ + -5.971043, + 56.020625 + ], + [ + -5.969793, + 56.023377 + ], + [ + -5.973505, + 56.020833 + ] + ] + ], + [ + [ + [ + -5.75184, + 56.167899 + ], + [ + -5.672348, + 56.16798 + ], + [ + -5.725414, + 56.190711 + ], + [ + -5.75184, + 56.167899 + ] + ] + ], + [ + [ + [ + -5.719781, + 56.205965 + ], + [ + -5.718591, + 56.209085 + ], + [ + -5.723697, + 56.209079 + ], + [ + -5.719781, + 56.205965 + ] + ] + ], + [ + [ + [ + -5.690703, + 56.236972 + ], + [ + -5.715444, + 56.211229 + ], + [ + -5.68566, + 56.202667 + ], + [ + -5.690703, + 56.236972 + ] + ] + ], + [ + [ + [ + -5.79787, + 56.22845 + ], + [ + -5.818782, + 56.216385 + ], + [ + -5.816208, + 56.215981 + ], + [ + -5.79787, + 56.22845 + ] + ] + ], + [ + [ + [ + -5.709296, + 56.234609 + ], + [ + -5.723445, + 56.233153 + ], + [ + -5.718323, + 56.227449 + ], + [ + -5.709296, + 56.234609 + ] + ] + ], + [ + [ + [ + -5.779386, + 56.238179 + ], + [ + -5.78575, + 56.237962 + ], + [ + -5.78257, + 56.234421 + ], + [ + -5.779386, + 56.238179 + ] + ] + ], + [ + [ + [ + -5.721219, + 56.234672 + ], + [ + -5.716139, + 56.235638 + ], + [ + -5.719098, + 56.240009 + ], + [ + -5.721219, + 56.234672 + ] + ] + ], + [ + [ + [ + -5.693361, + 56.242188 + ], + [ + -5.696136, + 56.243674 + ], + [ + -5.695165, + 56.241303 + ], + [ + -5.693361, + 56.242188 + ] + ] + ], + [ + [ + [ + -5.749792, + 56.248515 + ], + [ + -5.771701, + 56.246547 + ], + [ + -5.75337, + 56.2417 + ], + [ + -5.749792, + 56.248515 + ] + ] + ], + [ + [ + [ + -5.681048, + 56.247384 + ], + [ + -5.679331, + 56.248676 + ], + [ + -5.682305, + 56.250386 + ], + [ + -5.681048, + 56.247384 + ] + ] + ], + [ + [ + [ + -5.688621, + 56.250899 + ], + [ + -5.693181, + 56.256063 + ], + [ + -5.693336, + 56.250138 + ], + [ + -5.688621, + 56.250899 + ] + ] + ], + [ + [ + [ + -5.834305, + 56.30911 + ], + [ + -5.836933, + 56.309752 + ], + [ + -5.838832, + 56.307558 + ], + [ + -5.834305, + 56.30911 + ] + ] + ], + [ + [ + [ + -5.967108, + 56.313549 + ], + [ + -5.963225, + 56.314788 + ], + [ + -5.973817, + 56.314273 + ], + [ + -5.967108, + 56.313549 + ] + ] + ], + [ + [ + [ + -6.090406, + 56.470494 + ], + [ + -6.101701, + 56.464326 + ], + [ + -6.089943, + 56.461701 + ], + [ + -6.090406, + 56.470494 + ] + ] + ], + [ + [ + [ + -5.652358, + 56.415262 + ], + [ + -5.954006, + 56.521614 + ], + [ + -6.128821, + 56.656936 + ], + [ + -6.341167, + 56.536255 + ], + [ + -6.000775, + 56.493181 + ], + [ + -6.211723, + 56.37348 + ], + [ + -6.009426, + 56.37449 + ], + [ + -6.385269, + 56.287434 + ], + [ + -5.652358, + 56.415262 + ] + ] + ], + [ + [ + [ + -5.701067, + 56.502089 + ], + [ + -5.694281, + 56.501689 + ], + [ + -5.696872, + 56.503756 + ], + [ + -5.701067, + 56.502089 + ] + ] + ], + [ + [ + [ + -6.051869, + 56.621601 + ], + [ + -6.040056, + 56.614284 + ], + [ + -6.037744, + 56.622605 + ], + [ + -6.051869, + 56.621601 + ] + ] + ], + [ + [ + [ + -5.882971, + 56.670888 + ], + [ + -5.896332, + 56.655098 + ], + [ + -5.881846, + 56.652584 + ], + [ + -5.882971, + 56.670888 + ] + ] + ], + [ + [ + [ + -5.901216, + 56.668703 + ], + [ + -5.897599, + 56.670754 + ], + [ + -5.899048, + 56.671895 + ], + [ + -5.901216, + 56.668703 + ] + ] + ], + [ + [ + [ + -5.689228, + 56.695848 + ], + [ + -5.693118, + 56.69544 + ], + [ + -5.691952, + 56.6928 + ], + [ + -5.689228, + 56.695848 + ] + ] + ], + [ + [ + [ + -5.832052, + 56.788184 + ], + [ + -5.826823, + 56.786066 + ], + [ + -5.830068, + 56.789208 + ], + [ + -5.832052, + 56.788184 + ] + ] + ], + [ + [ + [ + -5.873131, + 56.81642 + ], + [ + -5.868793, + 56.816483 + ], + [ + -5.87179, + 56.820576 + ], + [ + -5.873131, + 56.81642 + ] + ] + ], + [ + [ + [ + -5.781568, + 56.847065 + ], + [ + -5.781151, + 56.851385 + ], + [ + -5.785298, + 56.849393 + ], + [ + -5.781568, + 56.847065 + ] + ] + ], + [ + [ + [ + -5.736977, + 56.850168 + ], + [ + -5.741237, + 56.850103 + ], + [ + -5.736232, + 56.848293 + ], + [ + -5.736977, + 56.850168 + ] + ] + ], + [ + [ + [ + -5.886771, + 56.863432 + ], + [ + -5.888996, + 56.865412 + ], + [ + -5.890057, + 56.863855 + ], + [ + -5.886771, + 56.863432 + ] + ] + ], + [ + [ + [ + -6.119763, + 56.870384 + ], + [ + -6.123682, + 56.877776 + ], + [ + -6.130609, + 56.868892 + ], + [ + -6.119763, + 56.870384 + ] + ] + ], + [ + [ + [ + -5.897388, + 56.876071 + ], + [ + -5.898727, + 56.872459 + ], + [ + -5.894352, + 56.873967 + ], + [ + -5.897388, + 56.876071 + ] + ] + ], + [ + [ + [ + -5.832499, + 56.873752 + ], + [ + -5.828658, + 56.875129 + ], + [ + -5.828964, + 56.875704 + ], + [ + -5.832499, + 56.873752 + ] + ] + ], + [ + [ + [ + -5.802466, + 56.886009 + ], + [ + -5.805981, + 56.885048 + ], + [ + -5.804726, + 56.884088 + ], + [ + -5.802466, + 56.886009 + ] + ] + ], + [ + [ + [ + -5.904301, + 56.916398 + ], + [ + -5.915674, + 56.905158 + ], + [ + -5.919256, + 56.89764 + ], + [ + -5.886341, + 56.912607 + ], + [ + -5.904301, + 56.916398 + ] + ] + ], + [ + [ + [ + -5.907356, + 56.914172 + ], + [ + -5.914408, + 56.918015 + ], + [ + -5.917837, + 56.912306 + ], + [ + -5.907356, + 56.914172 + ] + ] + ], + [ + [ + [ + -5.869213, + 56.952576 + ], + [ + -5.872853, + 56.953403 + ], + [ + -5.872405, + 56.950198 + ], + [ + -5.869213, + 56.952576 + ] + ] + ], + [ + [ + [ + -6.091194, + 57.124139 + ], + [ + -6.093997, + 57.128935 + ], + [ + -6.09699, + 57.126912 + ], + [ + -6.091194, + 57.124139 + ] + ] + ], + [ + [ + [ + -5.704378, + 57.165794 + ], + [ + -5.698758, + 57.168419 + ], + [ + -5.699659, + 57.168828 + ], + [ + -5.704378, + 57.165794 + ] + ] + ], + [ + [ + [ + -5.854905, + 57.284021 + ], + [ + -5.874686, + 57.280053 + ], + [ + -5.867406, + 57.265357 + ], + [ + -5.854905, + 57.284021 + ] + ] + ], + [ + [ + [ + -5.921728, + 57.275373 + ], + [ + -5.918539, + 57.273185 + ], + [ + -5.920503, + 57.276437 + ], + [ + -5.921728, + 57.275373 + ] + ] + ], + [ + [ + [ + -5.743041, + 57.277858 + ], + [ + -5.735875, + 57.278242 + ], + [ + -5.740916, + 57.280146 + ], + [ + -5.743041, + 57.277858 + ] + ] + ], + [ + [ + [ + -5.742013, + 57.290368 + ], + [ + -5.74088, + 57.284364 + ], + [ + -5.733091, + 57.288598 + ], + [ + -5.742013, + 57.290368 + ] + ] + ], + [ + [ + [ + -5.980352, + 57.325362 + ], + [ + -6.023624, + 57.307393 + ], + [ + -5.981479, + 57.272773 + ], + [ + -5.980352, + 57.325362 + ] + ] + ], + [ + [ + [ + -5.732344, + 57.29787 + ], + [ + -5.727256, + 57.301043 + ], + [ + -5.734212, + 57.301989 + ], + [ + -5.732344, + 57.29787 + ] + ] + ], + [ + [ + [ + -5.88299, + 57.309501 + ], + [ + -5.894772, + 57.316126 + ], + [ + -5.890956, + 57.305351 + ], + [ + -5.88299, + 57.309501 + ] + ] + ], + [ + [ + [ + -5.859135, + 57.354504 + ], + [ + -5.8455, + 57.335029 + ], + [ + -5.833893, + 57.350777 + ], + [ + -5.859135, + 57.354504 + ] + ] + ], + [ + [ + [ + -5.831445, + 57.374022 + ], + [ + -5.833637, + 57.377156 + ], + [ + -5.841059, + 57.372051 + ], + [ + -5.831445, + 57.374022 + ] + ] + ], + [ + [ + [ + -5.83057, + 57.402888 + ], + [ + -5.829189, + 57.398409 + ], + [ + -5.82515, + 57.404154 + ], + [ + -5.83057, + 57.402888 + ] + ] + ], + [ + [ + [ + -6.064946, + 57.331725 + ], + [ + -5.991761, + 57.358319 + ], + [ + -5.978341, + 57.494366 + ], + [ + -6.085319, + 57.421243 + ], + [ + -6.064946, + 57.331725 + ] + ] + ], + [ + [ + [ + -5.98459, + 57.512067 + ], + [ + -5.981788, + 57.509737 + ], + [ + -5.977857, + 57.508897 + ], + [ + -5.98459, + 57.512067 + ] + ] + ], + [ + [ + [ + -5.981549, + 57.511907 + ], + [ + -5.969987, + 57.519815 + ], + [ + -6.002757, + 57.543101 + ], + [ + -5.981549, + 57.511907 + ] + ] + ], + [ + [ + [ + -6.002356, + 57.531838 + ], + [ + -5.997595, + 57.533163 + ], + [ + -6.002578, + 57.534619 + ], + [ + -6.002356, + 57.531838 + ] + ] + ], + [ + [ + [ + -5.978923, + 57.583554 + ], + [ + -5.975886, + 57.582108 + ], + [ + -5.976749, + 57.584266 + ], + [ + -5.978923, + 57.583554 + ] + ] + ], + [ + [ + [ + -5.722444, + 57.706663 + ], + [ + -5.721704, + 57.704173 + ], + [ + -5.710607, + 57.706624 + ], + [ + -5.722444, + 57.706663 + ] + ] + ], + [ + [ + [ + -5.801176, + 57.726517 + ], + [ + -5.788287, + 57.736708 + ], + [ + -5.810475, + 57.735426 + ], + [ + -5.801176, + 57.726517 + ] + ] + ], + [ + [ + [ + -5.718504, + 57.874339 + ], + [ + -5.71217, + 57.872637 + ], + [ + -5.712531, + 57.8754 + ], + [ + -5.718504, + 57.874339 + ] + ] + ], + [ + [ + [ + -5.843551, + 59.116581 + ], + [ + -5.812981, + 59.119007 + ], + [ + -5.82276, + 59.125952 + ], + [ + -5.843551, + 59.116581 + ] + ] + ], + [ + [ + [ + -5.581288, + 55.274504 + ], + [ + -5.564658, + 55.28155 + ], + [ + -5.586925, + 55.286 + ], + [ + -5.581288, + 55.274504 + ] + ] + ], + [ + [ + [ + -5.572096, + 55.289551 + ], + [ + -5.569, + 55.290788 + ], + [ + -5.574125, + 55.294248 + ], + [ + -5.572096, + 55.289551 + ] + ] + ], + [ + [ + [ + -5.658695, + 55.894973 + ], + [ + -5.663148, + 55.890947 + ], + [ + -5.659898, + 55.893382 + ], + [ + -5.658695, + 55.894973 + ] + ] + ], + [ + [ + [ + -5.649004, + 55.980788 + ], + [ + -5.647552, + 55.980017 + ], + [ + -5.640662, + 55.986304 + ], + [ + -5.649004, + 55.980788 + ] + ] + ], + [ + [ + [ + -5.385196, + 56.002152 + ], + [ + -5.386588, + 56.001921 + ], + [ + -5.388017, + 55.997633 + ], + [ + -5.385196, + 56.002152 + ] + ] + ], + [ + [ + [ + -5.603799, + 56.011733 + ], + [ + -5.607304, + 56.006555 + ], + [ + -5.601494, + 56.007595 + ], + [ + -5.603799, + 56.011733 + ] + ] + ], + [ + [ + [ + -5.67418, + 56.010305 + ], + [ + -5.66925, + 56.016278 + ], + [ + -5.671673, + 56.015595 + ], + [ + -5.67418, + 56.010305 + ] + ] + ], + [ + [ + [ + -5.657564, + 56.025177 + ], + [ + -5.656431, + 56.029064 + ], + [ + -5.66415, + 56.019622 + ], + [ + -5.657564, + 56.025177 + ] + ] + ], + [ + [ + [ + -5.64039, + 56.044568 + ], + [ + -5.644226, + 56.041982 + ], + [ + -5.643689, + 56.037147 + ], + [ + -5.64039, + 56.044568 + ] + ] + ], + [ + [ + [ + -5.568341, + 56.089466 + ], + [ + -5.565086, + 56.090858 + ], + [ + -5.56839, + 56.092054 + ], + [ + -5.568341, + 56.089466 + ] + ] + ], + [ + [ + [ + -5.62016, + 56.113596 + ], + [ + -5.621316, + 56.110487 + ], + [ + -5.618917, + 56.110904 + ], + [ + -5.62016, + 56.113596 + ] + ] + ], + [ + [ + [ + -5.611837, + 56.118709 + ], + [ + -5.607027, + 56.123629 + ], + [ + -5.611888, + 56.123891 + ], + [ + -5.611837, + 56.118709 + ] + ] + ], + [ + [ + [ + -5.645141, + 56.134386 + ], + [ + -5.649027, + 56.129186 + ], + [ + -5.644643, + 56.129725 + ], + [ + -5.645141, + 56.134386 + ] + ] + ], + [ + [ + [ + -5.555954, + 56.142028 + ], + [ + -5.562482, + 56.140612 + ], + [ + -5.559848, + 56.133549 + ], + [ + -5.555954, + 56.142028 + ] + ] + ], + [ + [ + [ + -5.554376, + 56.146011 + ], + [ + -5.55724, + 56.145549 + ], + [ + -5.55671, + 56.143148 + ], + [ + -5.554376, + 56.146011 + ] + ] + ], + [ + [ + [ + -5.624082, + 56.151106 + ], + [ + -5.626412, + 56.142895 + ], + [ + -5.62214, + 56.145246 + ], + [ + -5.624082, + 56.151106 + ] + ] + ], + [ + [ + [ + -5.526518, + 56.168735 + ], + [ + -5.539263, + 56.164046 + ], + [ + -5.548121, + 56.146468 + ], + [ + -5.526518, + 56.168735 + ] + ] + ], + [ + [ + [ + -5.561821, + 56.156735 + ], + [ + -5.560162, + 56.155378 + ], + [ + -5.561804, + 56.160917 + ], + [ + -5.561821, + 56.156735 + ] + ] + ], + [ + [ + [ + -5.563005, + 56.155904 + ], + [ + -5.563825, + 56.160579 + ], + [ + -5.567066, + 56.158608 + ], + [ + -5.563005, + 56.155904 + ] + ] + ], + [ + [ + [ + -5.641098, + 56.186322 + ], + [ + -5.629952, + 56.19015 + ], + [ + -5.665983, + 56.219056 + ], + [ + -5.641098, + 56.186322 + ] + ] + ], + [ + [ + [ + -5.569646, + 56.209699 + ], + [ + -5.573983, + 56.206296 + ], + [ + -5.569269, + 56.205802 + ], + [ + -5.569646, + 56.209699 + ] + ] + ], + [ + [ + [ + -5.611205, + 56.195143 + ], + [ + -5.589424, + 56.204378 + ], + [ + -5.590656, + 56.223795 + ], + [ + -5.611205, + 56.195143 + ] + ] + ], + [ + [ + [ + -5.574721, + 56.218714 + ], + [ + -5.571177, + 56.22484 + ], + [ + -5.574198, + 56.222361 + ], + [ + -5.574721, + 56.218714 + ] + ] + ], + [ + [ + [ + -5.661902, + 56.239268 + ], + [ + -5.667433, + 56.239958 + ], + [ + -5.667489, + 56.237254 + ], + [ + -5.661902, + 56.239268 + ] + ] + ], + [ + [ + [ + -5.575459, + 56.238225 + ], + [ + -5.577695, + 56.239694 + ], + [ + -5.581394, + 56.238332 + ], + [ + -5.575459, + 56.238225 + ] + ] + ], + [ + [ + [ + -5.607701, + 56.26369 + ], + [ + -5.611851, + 56.265466 + ], + [ + -5.613604, + 56.250405 + ], + [ + -5.607701, + 56.26369 + ] + ] + ], + [ + [ + [ + -5.655131, + 56.288778 + ], + [ + -5.651133, + 56.291646 + ], + [ + -5.658167, + 56.295556 + ], + [ + -5.655131, + 56.288778 + ] + ] + ], + [ + [ + [ + -5.599643, + 56.294562 + ], + [ + -5.600876, + 56.292864 + ], + [ + -5.596501, + 56.291824 + ], + [ + -5.599643, + 56.294562 + ] + ] + ], + [ + [ + [ + -5.580202, + 56.327385 + ], + [ + -5.654497, + 56.297677 + ], + [ + -5.599065, + 56.279957 + ], + [ + -5.607878, + 56.293854 + ], + [ + -5.580202, + 56.327385 + ] + ] + ], + [ + [ + [ + -5.661615, + 56.31691 + ], + [ + -5.665768, + 56.31854 + ], + [ + -5.670425, + 56.30875 + ], + [ + -5.661615, + 56.31691 + ] + ] + ], + [ + [ + [ + -5.607642, + 56.318819 + ], + [ + -5.605937, + 56.318448 + ], + [ + -5.604303, + 56.320585 + ], + [ + -5.607642, + 56.318819 + ] + ] + ], + [ + [ + [ + -5.592216, + 56.329176 + ], + [ + -5.587939, + 56.332227 + ], + [ + -5.590664, + 56.333843 + ], + [ + -5.592216, + 56.329176 + ] + ] + ], + [ + [ + [ + -5.599273, + 56.382836 + ], + [ + -5.602915, + 56.382443 + ], + [ + -5.602382, + 56.381006 + ], + [ + -5.599273, + 56.382836 + ] + ] + ], + [ + [ + [ + -5.499807, + 56.425742 + ], + [ + -5.523671, + 56.411523 + ], + [ + -5.562983, + 56.408601 + ], + [ + -5.589462, + 56.380352 + ], + [ + -5.487983, + 56.421862 + ], + [ + -5.499807, + 56.425742 + ] + ] + ], + [ + [ + [ + -5.533887, + 56.416605 + ], + [ + -5.541521, + 56.414458 + ], + [ + -5.536942, + 56.413443 + ], + [ + -5.533887, + 56.416605 + ] + ] + ], + [ + [ + [ + -5.528915, + 56.415115 + ], + [ + -5.527927, + 56.414779 + ], + [ + -5.524062, + 56.416309 + ], + [ + -5.528915, + 56.415115 + ] + ] + ], + [ + [ + [ + -5.646664, + 56.425717 + ], + [ + -5.646548, + 56.430346 + ], + [ + -5.648224, + 56.428034 + ], + [ + -5.646664, + 56.425717 + ] + ] + ], + [ + [ + [ + -5.599592, + 56.459528 + ], + [ + -5.600819, + 56.460481 + ], + [ + -5.608991, + 56.454786 + ], + [ + -5.599592, + 56.459528 + ] + ] + ], + [ + [ + [ + -5.427756, + 56.460124 + ], + [ + -5.433995, + 56.459111 + ], + [ + -5.428769, + 56.45665 + ], + [ + -5.427756, + 56.460124 + ] + ] + ], + [ + [ + [ + -5.518172, + 56.475135 + ], + [ + -5.509549, + 56.477897 + ], + [ + -5.51244, + 56.478063 + ], + [ + -5.518172, + 56.475135 + ] + ] + ], + [ + [ + [ + -5.520127, + 56.488525 + ], + [ + -5.530534, + 56.482907 + ], + [ + -5.51962, + 56.485681 + ], + [ + -5.520127, + 56.488525 + ] + ] + ], + [ + [ + [ + -5.506273, + 56.48649 + ], + [ + -5.510189, + 56.489567 + ], + [ + -5.510364, + 56.484257 + ], + [ + -5.506273, + 56.48649 + ] + ] + ], + [ + [ + [ + -5.456351, + 56.553281 + ], + [ + -5.470429, + 56.5584 + ], + [ + -5.507791, + 56.523128 + ], + [ + -5.598982, + 56.460715 + ], + [ + -5.425476, + 56.559087 + ], + [ + -5.456351, + 56.553281 + ] + ] + ], + [ + [ + [ + -5.456941, + 56.525769 + ], + [ + -5.462013, + 56.519771 + ], + [ + -5.460173, + 56.519745 + ], + [ + -5.456941, + 56.525769 + ] + ] + ], + [ + [ + [ + -5.478169, + 56.554099 + ], + [ + -5.480317, + 56.551385 + ], + [ + -5.475783, + 56.554476 + ], + [ + -5.478169, + 56.554099 + ] + ] + ], + [ + [ + [ + -5.438916, + 56.560792 + ], + [ + -5.443848, + 56.561046 + ], + [ + -5.447704, + 56.555735 + ], + [ + -5.438916, + 56.560792 + ] + ] + ], + [ + [ + [ + -5.417918, + 56.563727 + ], + [ + -5.420852, + 56.563044 + ], + [ + -5.418469, + 56.561357 + ], + [ + -5.417918, + 56.563727 + ] + ] + ], + [ + [ + [ + -5.434976, + 56.570309 + ], + [ + -5.430604, + 56.572197 + ], + [ + -5.433063, + 56.571926 + ], + [ + -5.434976, + 56.570309 + ] + ] + ], + [ + [ + [ + -5.390015, + 56.579146 + ], + [ + -5.380156, + 56.595871 + ], + [ + -5.402569, + 56.590773 + ], + [ + -5.390015, + 56.579146 + ] + ] + ], + [ + [ + [ + -5.613505, + 57.143877 + ], + [ + -5.621582, + 57.143257 + ], + [ + -5.619307, + 57.141642 + ], + [ + -5.613505, + 57.143877 + ] + ] + ], + [ + [ + [ + -5.581064, + 57.269188 + ], + [ + -5.580015, + 57.262143 + ], + [ + -5.571669, + 57.268642 + ], + [ + -5.581064, + 57.269188 + ] + ] + ], + [ + [ + [ + -5.66864, + 57.342315 + ], + [ + -5.663656, + 57.342661 + ], + [ + -5.664394, + 57.34464 + ], + [ + -5.66864, + 57.342315 + ] + ] + ], + [ + [ + [ + -5.643225, + 57.371036 + ], + [ + -5.645957, + 57.373249 + ], + [ + -5.648797, + 57.371346 + ], + [ + -5.643225, + 57.371036 + ] + ] + ], + [ + [ + [ + -5.648182, + 57.378889 + ], + [ + -5.653713, + 57.375928 + ], + [ + -5.649453, + 57.372923 + ], + [ + -5.648182, + 57.378889 + ] + ] + ], + [ + [ + [ + -5.4789, + 57.39909 + ], + [ + -5.480149, + 57.396172 + ], + [ + -5.474052, + 57.39695 + ], + [ + -5.4789, + 57.39909 + ] + ] + ], + [ + [ + [ + -5.662935, + 57.52835 + ], + [ + -5.662366, + 57.526591 + ], + [ + -5.656067, + 57.525289 + ], + [ + -5.662935, + 57.52835 + ] + ] + ], + [ + [ + [ + -5.601846, + 57.82146 + ], + [ + -5.600962, + 57.831084 + ], + [ + -5.644762, + 57.840059 + ], + [ + -5.601846, + 57.82146 + ] + ] + ], + [ + [ + [ + -5.478454, + 57.883508 + ], + [ + -5.458739, + 57.878375 + ], + [ + -5.467086, + 57.898984 + ], + [ + -5.478454, + 57.883508 + ] + ] + ], + [ + [ + [ + -5.464041, + 57.960327 + ], + [ + -5.460364, + 57.95867 + ], + [ + -5.456477, + 57.962385 + ], + [ + -5.464041, + 57.960327 + ] + ] + ], + [ + [ + [ + -5.366078, + 57.959942 + ], + [ + -5.36187, + 57.95884 + ], + [ + -5.361028, + 57.962448 + ], + [ + -5.366078, + 57.959942 + ] + ] + ], + [ + [ + [ + -5.502182, + 57.9556 + ], + [ + -5.497022, + 57.960695 + ], + [ + -5.510337, + 57.968176 + ], + [ + -5.502182, + 57.9556 + ] + ] + ], + [ + [ + [ + -5.440675, + 57.961363 + ], + [ + -5.43876, + 57.961585 + ], + [ + -5.437751, + 57.964646 + ], + [ + -5.440675, + 57.961363 + ] + ] + ], + [ + [ + [ + -5.453357, + 57.962744 + ], + [ + -5.443326, + 57.962545 + ], + [ + -5.44817, + 57.967461 + ], + [ + -5.453357, + 57.962744 + ] + ] + ], + [ + [ + [ + -5.433243, + 57.970562 + ], + [ + -5.420816, + 57.977459 + ], + [ + -5.430954, + 57.978988 + ], + [ + -5.433243, + 57.970562 + ] + ] + ], + [ + [ + [ + -5.352863, + 57.981572 + ], + [ + -5.346185, + 57.979546 + ], + [ + -5.338425, + 57.985341 + ], + [ + -5.352863, + 57.981572 + ] + ] + ], + [ + [ + [ + -5.509528, + 57.983412 + ], + [ + -5.50557, + 57.988533 + ], + [ + -5.51018, + 57.98739 + ], + [ + -5.509528, + 57.983412 + ] + ] + ], + [ + [ + [ + -5.434118, + 58.008741 + ], + [ + -5.445386, + 58.016112 + ], + [ + -5.451856, + 58.00417 + ], + [ + -5.434118, + 58.008741 + ] + ] + ], + [ + [ + [ + -5.428183, + 58.010083 + ], + [ + -5.430529, + 58.018127 + ], + [ + -5.431294, + 58.00799 + ], + [ + -5.428183, + 58.010083 + ] + ] + ], + [ + [ + [ + -5.403216, + 58.022862 + ], + [ + -5.421789, + 58.005545 + ], + [ + -5.395625, + 58.007893 + ], + [ + -5.402402, + 58.009926 + ], + [ + -5.403216, + 58.022862 + ] + ] + ], + [ + [ + [ + -5.44836, + 58.021663 + ], + [ + -5.447505, + 58.017623 + ], + [ + -5.443989, + 58.018757 + ], + [ + -5.44836, + 58.021663 + ] + ] + ], + [ + [ + [ + -5.429667, + 58.022479 + ], + [ + -5.430081, + 58.0176 + ], + [ + -5.422434, + 58.020889 + ], + [ + -5.429667, + 58.022479 + ] + ] + ], + [ + [ + [ + -5.474072, + 58.024756 + ], + [ + -5.468556, + 58.024839 + ], + [ + -5.471905, + 58.03202 + ], + [ + -5.474072, + 58.024756 + ] + ] + ], + [ + [ + [ + -5.422791, + 58.046369 + ], + [ + -5.434544, + 58.047781 + ], + [ + -5.449167, + 58.039789 + ], + [ + -5.422791, + 58.046369 + ] + ] + ], + [ + [ + [ + -5.455609, + 58.049083 + ], + [ + -5.459299, + 58.053766 + ], + [ + -5.467417, + 58.046651 + ], + [ + -5.455609, + 58.049083 + ] + ] + ], + [ + [ + [ + -5.340981, + 58.130023 + ], + [ + -5.351538, + 58.129081 + ], + [ + -5.346597, + 58.128577 + ], + [ + -5.340981, + 58.130023 + ] + ] + ], + [ + [ + [ + -4.086023, + 54.768912 + ], + [ + -4.088379, + 54.764565 + ], + [ + -4.083042, + 54.764898 + ], + [ + -4.086023, + 54.768912 + ] + ] + ], + [ + [ + [ + -5.10646, + 55.251632 + ], + [ + -5.119083, + 55.25836 + ], + [ + -5.115662, + 55.246601 + ], + [ + -5.10646, + 55.251632 + ] + ] + ], + [ + [ + [ + -4.84565, + 55.307128 + ], + [ + -4.849496, + 55.307283 + ], + [ + -4.850634, + 55.304015 + ], + [ + -4.84565, + 55.307128 + ] + ] + ], + [ + [ + [ + -5.122244, + 55.427882 + ], + [ + -5.11946, + 55.423647 + ], + [ + -5.115527, + 55.4255 + ], + [ + -5.122244, + 55.427882 + ] + ] + ], + [ + [ + [ + -4.731782, + 55.525859 + ], + [ + -4.731947, + 55.527212 + ], + [ + -4.737417, + 55.525656 + ], + [ + -4.731782, + 55.525859 + ] + ] + ], + [ + [ + [ + -5.089049, + 55.536174 + ], + [ + -5.086962, + 55.525223 + ], + [ + -5.073984, + 55.535088 + ], + [ + -5.089049, + 55.536174 + ] + ] + ], + [ + [ + [ + -5.084525, + 55.45301 + ], + [ + -5.151621, + 55.667281 + ], + [ + -5.284906, + 55.719635 + ], + [ + -5.356141, + 55.505886 + ], + [ + -5.084525, + 55.45301 + ] + ] + ], + [ + [ + [ + -4.839197, + 55.647363 + ], + [ + -4.846662, + 55.647963 + ], + [ + -4.839724, + 55.643213 + ], + [ + -4.839197, + 55.647363 + ] + ] + ], + [ + [ + [ + -4.968026, + 55.718376 + ], + [ + -4.948438, + 55.711286 + ], + [ + -4.960846, + 55.726698 + ], + [ + -4.968026, + 55.718376 + ] + ] + ], + [ + [ + [ + -4.918327, + 55.753397 + ], + [ + -4.904351, + 55.750096 + ], + [ + -4.898051, + 55.791752 + ], + [ + -4.950111, + 55.744273 + ], + [ + -4.918327, + 55.753397 + ] + ] + ], + [ + [ + [ + -5.168298, + 55.790275 + ], + [ + -5.156897, + 55.776014 + ], + [ + -5.147198, + 55.784543 + ], + [ + -5.168298, + 55.790275 + ] + ] + ], + [ + [ + [ + -5.003454, + 55.729549 + ], + [ + -5.024363, + 55.843421 + ], + [ + -5.185586, + 55.926941 + ], + [ + -5.120651, + 55.772288 + ], + [ + -5.003454, + 55.729549 + ] + ] + ], + [ + [ + [ + -5.309656, + 55.848431 + ], + [ + -5.307985, + 55.846817 + ], + [ + -5.306468, + 55.849187 + ], + [ + -5.309656, + 55.848431 + ] + ] + ], + [ + [ + [ + -5.173311, + 55.924729 + ], + [ + -5.170635, + 55.926074 + ], + [ + -5.174744, + 55.927955 + ], + [ + -5.173311, + 55.924729 + ] + ] + ], + [ + [ + [ + -3.273718, + 56.012624 + ], + [ + -3.275272, + 56.011981 + ], + [ + -3.271576, + 56.009239 + ], + [ + -3.273718, + 56.012624 + ] + ] + ], + [ + [ + [ + -3.306854, + 56.026383 + ], + [ + -3.294254, + 56.029233 + ], + [ + -3.30254, + 56.031254 + ], + [ + -3.306854, + 56.026383 + ] + ] + ], + [ + [ + [ + -5.241299, + 56.101383 + ], + [ + -5.243908, + 56.099422 + ], + [ + -5.239244, + 56.101757 + ], + [ + -5.241299, + 56.101383 + ] + ] + ], + [ + [ + [ + -5.320401, + 56.457247 + ], + [ + -5.323352, + 56.458201 + ], + [ + -5.321904, + 56.455388 + ], + [ + -5.320401, + 56.457247 + ] + ] + ], + [ + [ + [ + -5.33456, + 56.636698 + ], + [ + -5.343199, + 56.629526 + ], + [ + -5.334803, + 56.632053 + ], + [ + -5.33456, + 56.636698 + ] + ] + ], + [ + [ + [ + -4.916673, + 56.164542 + ], + [ + -4.750385, + 56.203852 + ], + [ + -4.867269, + 56.01364 + ], + [ + -4.6445, + 55.952543 + ], + [ + -4.878429, + 55.943039 + ], + [ + -4.906078, + 55.700314 + ], + [ + -4.675098, + 55.589699 + ], + [ + -4.630413, + 55.476672 + ], + [ + -4.996818, + 55.138108 + ], + [ + -4.997653, + 54.92018 + ], + [ + -5.18641, + 54.976131 + ], + [ + -4.964787, + 54.663905 + ], + [ + -4.852963, + 54.636711 + ], + [ + -4.951443, + 54.801168 + ], + [ + -4.850232, + 54.851433 + ], + [ + -4.394232, + 54.67717 + ], + [ + -4.387607, + 54.872886 + ], + [ + -3.983992, + 54.768099 + ], + [ + -2.197131, + 55.442937 + ], + [ + -2.336005, + 55.632481 + ], + [ + -2.033201, + 55.811664 + ], + [ + -2.627951, + 56.057705 + ], + [ + -3.08129, + 55.948881 + ], + [ + -3.746386, + 56.071074 + ], + [ + -3.390821, + 56.005815 + ], + [ + -2.599991, + 56.263536 + ], + [ + -2.799831, + 56.346428 + ], + [ + -2.709446, + 56.448909 + ], + [ + -2.922891, + 56.451843 + ], + [ + -3.276346, + 56.351036 + ], + [ + -2.536295, + 56.567748 + ], + [ + -1.765681, + 57.507577 + ], + [ + -2.003893, + 57.698938 + ], + [ + -3.347132, + 57.726692 + ], + [ + -4.372227, + 57.485855 + ], + [ + -3.993218, + 57.677331 + ], + [ + -4.380906, + 57.621843 + ], + [ + -3.771501, + 57.867144 + ], + [ + -4.046944, + 57.826768 + ], + [ + -4.337031, + 57.879993 + ], + [ + -3.960013, + 57.86194 + ], + [ + -3.981474, + 57.969212 + ], + [ + -3.107927, + 58.370992 + ], + [ + -3.024059, + 58.643653 + ], + [ + -4.476064, + 58.439977 + ], + [ + -4.45563, + 58.493807 + ], + [ + -4.387165, + 58.540688 + ], + [ + -4.757064, + 58.448843 + ], + [ + -4.653195, + 58.551108 + ], + [ + -5.007139, + 58.625818 + ], + [ + -5.126595, + 58.489718 + ], + [ + -4.992246, + 58.439964 + ], + [ + -5.11798, + 58.428576 + ], + [ + -5.032481, + 58.409839 + ], + [ + -5.019596, + 58.376818 + ], + [ + -5.188178, + 58.350817 + ], + [ + -4.920615, + 58.255866 + ], + [ + -4.938953, + 58.217003 + ], + [ + -5.007467, + 58.254896 + ], + [ + -5.056272, + 58.246597 + ], + [ + -5.108952, + 58.270139 + ], + [ + -5.158484, + 58.233626 + ], + [ + -5.241689, + 58.249365 + ], + [ + -5.262191, + 58.268652 + ], + [ + -5.307481, + 58.225705 + ], + [ + -5.375568, + 58.264896 + ], + [ + -5.241019, + 58.147693 + ], + [ + -5.301078, + 58.064708 + ], + [ + -5.458756, + 58.076981 + ], + [ + -5.193884, + 57.957095 + ], + [ + -5.071279, + 57.827177 + ], + [ + -5.361264, + 57.939251 + ], + [ + -5.406779, + 57.927661 + ], + [ + -5.229452, + 57.848807 + ], + [ + -5.468108, + 57.8533 + ], + [ + -5.61866, + 57.92438 + ], + [ + -5.579044, + 57.792617 + ], + [ + -5.619631, + 57.766725 + ], + [ + -5.814144, + 57.858542 + ], + [ + -5.671688, + 57.701428 + ], + [ + -5.818881, + 57.638971 + ], + [ + -5.523871, + 57.546503 + ], + [ + -5.650044, + 57.510671 + ], + [ + -5.836805, + 57.580279 + ], + [ + -5.873832, + 57.473541 + ], + [ + -5.817899, + 57.432713 + ], + [ + -5.823795, + 57.362584 + ], + [ + -5.456225, + 57.403388 + ], + [ + -5.535436, + 57.353158 + ], + [ + -5.644537, + 57.335701 + ], + [ + -5.686662, + 57.341445 + ], + [ + -5.68055, + 57.325967 + ], + [ + -5.734349, + 57.282587 + ], + [ + -5.460424, + 57.310654 + ], + [ + -5.423088, + 57.213691 + ], + [ + -5.699287, + 57.166349 + ], + [ + -5.391813, + 57.108932 + ], + [ + -5.533495, + 57.087537 + ], + [ + -5.722461, + 57.118372 + ], + [ + -5.524024, + 56.994397 + ], + [ + -5.635323, + 56.970203 + ], + [ + -5.820655, + 57.012452 + ], + [ + -5.851131, + 56.899694 + ], + [ + -5.922362, + 56.882926 + ], + [ + -5.737061, + 56.895619 + ], + [ + -5.725549, + 56.849345 + ], + [ + -5.675759, + 56.87089 + ], + [ + -5.871129, + 56.756858 + ], + [ + -6.227418, + 56.727304 + ], + [ + -5.974471, + 56.672111 + ], + [ + -5.777021, + 56.715052 + ], + [ + -5.544596, + 56.687782 + ], + [ + -5.832763, + 56.62346 + ], + [ + -6.008099, + 56.645291 + ], + [ + -5.905469, + 56.551184 + ], + [ + -5.748181, + 56.564838 + ], + [ + -5.685135, + 56.497074 + ], + [ + -5.119012, + 56.833417 + ], + [ + -5.32837, + 56.858268 + ], + [ + -5.192189, + 56.854694 + ], + [ + -5.149146, + 56.838627 + ], + [ + -5.125989, + 56.842381 + ], + [ + -5.111051, + 56.835242 + ], + [ + -5.249941, + 56.701357 + ], + [ + -4.969455, + 56.714557 + ], + [ + -5.146699, + 56.677162 + ], + [ + -5.223081, + 56.686503 + ], + [ + -5.316839, + 56.654095 + ], + [ + -5.300002, + 56.637076 + ], + [ + -5.417672, + 56.538373 + ], + [ + -5.231478, + 56.56389 + ], + [ + -5.475404, + 56.480342 + ], + [ + -5.06467, + 56.562905 + ], + [ + -5.119096, + 56.489002 + ], + [ + -5.19056, + 56.448407 + ], + [ + -5.235585, + 56.437043 + ], + [ + -5.352445, + 56.460375 + ], + [ + -5.35636, + 56.457326 + ], + [ + -5.366445, + 56.454644 + ], + [ + -5.410094, + 56.450579 + ], + [ + -5.440648, + 56.455738 + ], + [ + -5.464399, + 56.44681 + ], + [ + -5.449193, + 56.361585 + ], + [ + -5.520443, + 56.340439 + ], + [ + -5.548872, + 56.349321 + ], + [ + -5.578191, + 56.332864 + ], + [ + -5.486992, + 56.25682 + ], + [ + -5.614769, + 56.131597 + ], + [ + -5.525765, + 56.187652 + ], + [ + -5.50347, + 56.18495 + ], + [ + -5.543828, + 56.092284 + ], + [ + -5.715128, + 55.948557 + ], + [ + -5.56662, + 56.041229 + ], + [ + -5.69113, + 55.909937 + ], + [ + -5.583059, + 55.92916 + ], + [ + -5.615587, + 55.7606 + ], + [ + -5.440632, + 55.85552 + ], + [ + -5.481752, + 55.804633 + ], + [ + -5.67706, + 55.682534 + ], + [ + -5.803898, + 55.305103 + ], + [ + -5.518201, + 55.361292 + ], + [ + -5.603653, + 55.425572 + ], + [ + -5.313972, + 55.783719 + ], + [ + -5.446051, + 56.020707 + ], + [ + -4.930381, + 56.269571 + ], + [ + -5.352073, + 56.010493 + ], + [ + -5.312587, + 55.852447 + ], + [ + -5.192056, + 55.961116 + ], + [ + -5.076553, + 55.897974 + ], + [ + -5.126022, + 56.00599 + ], + [ + -4.980421, + 55.860165 + ], + [ + -4.916673, + 56.164542 + ] + ] + ], + [ + [ + [ + -5.132071, + 56.684205 + ], + [ + -5.126805, + 56.684266 + ], + [ + -5.128506, + 56.685626 + ], + [ + -5.132071, + 56.684205 + ] + ] + ], + [ + [ + [ + -5.126802, + 56.684831 + ], + [ + -5.123256, + 56.686507 + ], + [ + -5.124673, + 56.687073 + ], + [ + -5.126802, + 56.684831 + ] + ] + ], + [ + [ + [ + -5.121875, + 56.838228 + ], + [ + -5.1234, + 56.839196 + ], + [ + -5.129372, + 56.837451 + ], + [ + -5.121875, + 56.838228 + ] + ] + ], + [ + [ + [ + -3.353076, + 57.729497 + ], + [ + -3.352373, + 57.729119 + ], + [ + -3.346772, + 57.730626 + ], + [ + -3.353076, + 57.729497 + ] + ] + ], + [ + [ + [ + -5.223881, + 57.936963 + ], + [ + -5.209587, + 57.937943 + ], + [ + -5.210836, + 57.948884 + ], + [ + -5.223881, + 57.936963 + ] + ] + ], + [ + [ + [ + -5.30768, + 58.103042 + ], + [ + -5.301776, + 58.100791 + ], + [ + -5.300294, + 58.10469 + ], + [ + -5.30768, + 58.103042 + ] + ] + ], + [ + [ + [ + -5.288984, + 58.1043 + ], + [ + -5.28349, + 58.104752 + ], + [ + -5.287894, + 58.106202 + ], + [ + -5.288984, + 58.1043 + ] + ] + ], + [ + [ + [ + -5.304446, + 58.109095 + ], + [ + -5.309468, + 58.11078 + ], + [ + -5.309259, + 58.108439 + ], + [ + -5.304446, + 58.109095 + ] + ] + ], + [ + [ + [ + -5.308328, + 58.143068 + ], + [ + -5.317899, + 58.146185 + ], + [ + -5.324861, + 58.141006 + ], + [ + -5.308328, + 58.143068 + ] + ] + ], + [ + [ + [ + -5.203337, + 58.249349 + ], + [ + -5.199841, + 58.249239 + ], + [ + -5.199756, + 58.251129 + ], + [ + -5.203337, + 58.249349 + ] + ] + ], + [ + [ + [ + -5.298622, + 58.251376 + ], + [ + -5.290335, + 58.250543 + ], + [ + -5.290552, + 58.252424 + ], + [ + -5.298622, + 58.251376 + ] + ] + ], + [ + [ + [ + -5.061295, + 58.253549 + ], + [ + -5.062796, + 58.252368 + ], + [ + -5.058415, + 58.250603 + ], + [ + -5.061295, + 58.253549 + ] + ] + ], + [ + [ + [ + -5.204508, + 58.253998 + ], + [ + -5.208465, + 58.252789 + ], + [ + -5.201472, + 58.250969 + ], + [ + -5.204508, + 58.253998 + ] + ] + ], + [ + [ + [ + -5.239598, + 58.255125 + ], + [ + -5.237357, + 58.25374 + ], + [ + -5.23576, + 58.255758 + ], + [ + -5.239598, + 58.255125 + ] + ] + ], + [ + [ + [ + -5.263312, + 58.269059 + ], + [ + -5.266881, + 58.268645 + ], + [ + -5.266565, + 58.266514 + ], + [ + -5.263312, + 58.269059 + ] + ] + ], + [ + [ + [ + -5.152067, + 58.287043 + ], + [ + -5.156764, + 58.285264 + ], + [ + -5.152355, + 58.280205 + ], + [ + -5.152067, + 58.287043 + ] + ] + ], + [ + [ + [ + -5.197646, + 58.28529 + ], + [ + -5.194839, + 58.28785 + ], + [ + -5.202982, + 58.285615 + ], + [ + -5.197646, + 58.28529 + ] + ] + ], + [ + [ + [ + -5.208209, + 58.286706 + ], + [ + -5.202576, + 58.291031 + ], + [ + -5.209887, + 58.290811 + ], + [ + -5.208209, + 58.286706 + ] + ] + ], + [ + [ + [ + -5.187358, + 58.302579 + ], + [ + -5.182755, + 58.301988 + ], + [ + -5.184443, + 58.303384 + ], + [ + -5.187358, + 58.302579 + ] + ] + ], + [ + [ + [ + -5.175985, + 58.305405 + ], + [ + -5.173268, + 58.301667 + ], + [ + -5.170723, + 58.306134 + ], + [ + -5.175985, + 58.305405 + ] + ] + ], + [ + [ + [ + -5.190929, + 58.304116 + ], + [ + -5.186079, + 58.306668 + ], + [ + -5.188074, + 58.307014 + ], + [ + -5.190929, + 58.304116 + ] + ] + ], + [ + [ + [ + -5.177606, + 58.309576 + ], + [ + -5.179119, + 58.30779 + ], + [ + -5.175878, + 58.307071 + ], + [ + -5.177606, + 58.309576 + ] + ] + ], + [ + [ + [ + -5.168133, + 58.308108 + ], + [ + -5.163548, + 58.306195 + ], + [ + -5.155806, + 58.311572 + ], + [ + -5.168133, + 58.308108 + ] + ] + ], + [ + [ + [ + -5.169529, + 58.315775 + ], + [ + -5.174381, + 58.314653 + ], + [ + -5.165095, + 58.312416 + ], + [ + -5.169529, + 58.315775 + ] + ] + ], + [ + [ + [ + -5.185688, + 58.315414 + ], + [ + -5.183975, + 58.313551 + ], + [ + -5.182598, + 58.316659 + ], + [ + -5.185688, + 58.315414 + ] + ] + ], + [ + [ + [ + -5.146771, + 58.31699 + ], + [ + -5.149664, + 58.314703 + ], + [ + -5.145721, + 58.314822 + ], + [ + -5.146771, + 58.31699 + ] + ] + ], + [ + [ + [ + -5.163183, + 58.316243 + ], + [ + -5.168452, + 58.317483 + ], + [ + -5.166796, + 58.31587 + ], + [ + -5.163183, + 58.316243 + ] + ] + ], + [ + [ + [ + -5.141683, + 58.323496 + ], + [ + -5.143478, + 58.324467 + ], + [ + -5.144538, + 58.320734 + ], + [ + -5.141683, + 58.323496 + ] + ] + ], + [ + [ + [ + -5.210299, + 58.377057 + ], + [ + -5.171596, + 58.373308 + ], + [ + -5.165031, + 58.382035 + ], + [ + -5.210299, + 58.377057 + ] + ] + ], + [ + [ + [ + -5.059913, + 58.385653 + ], + [ + -5.05672, + 58.384548 + ], + [ + -5.052729, + 58.384499 + ], + [ + -5.059913, + 58.385653 + ] + ] + ], + [ + [ + [ + -5.165263, + 58.388159 + ], + [ + -5.1543, + 58.388331 + ], + [ + -5.161346, + 58.389518 + ], + [ + -5.165263, + 58.388159 + ] + ] + ], + [ + [ + [ + -5.043793, + 58.391012 + ], + [ + -5.047416, + 58.38827 + ], + [ + -5.042959, + 58.388183 + ], + [ + -5.043793, + 58.391012 + ] + ] + ], + [ + [ + [ + -5.155934, + 58.391009 + ], + [ + -5.152843, + 58.392047 + ], + [ + -5.156614, + 58.393922 + ], + [ + -5.155934, + 58.391009 + ] + ] + ], + [ + [ + [ + -5.087235, + 58.395251 + ], + [ + -5.083558, + 58.398027 + ], + [ + -5.091842, + 58.400456 + ], + [ + -5.087235, + 58.395251 + ] + ] + ], + [ + [ + [ + -5.101235, + 58.403594 + ], + [ + -5.106772, + 58.406003 + ], + [ + -5.104858, + 58.40148 + ], + [ + -5.101235, + 58.403594 + ] + ] + ], + [ + [ + [ + -5.072861, + 58.40444 + ], + [ + -5.075134, + 58.407135 + ], + [ + -5.080463, + 58.402186 + ], + [ + -5.072861, + 58.40444 + ] + ] + ], + [ + [ + [ + -5.106576, + 58.416514 + ], + [ + -5.100409, + 58.416888 + ], + [ + -5.101962, + 58.418769 + ], + [ + -5.106576, + 58.416514 + ] + ] + ], + [ + [ + [ + -5.120619, + 58.428188 + ], + [ + -5.11641, + 58.429814 + ], + [ + -5.119278, + 58.431236 + ], + [ + -5.120619, + 58.428188 + ] + ] + ], + [ + [ + [ + -5.087073, + 58.452849 + ], + [ + -5.088772, + 58.450319 + ], + [ + -5.08547, + 58.450287 + ], + [ + -5.087073, + 58.452849 + ] + ] + ], + [ + [ + [ + -4.753061, + 58.451252 + ], + [ + -4.75119, + 58.451324 + ], + [ + -4.750085, + 58.453967 + ], + [ + -4.753061, + 58.451252 + ] + ] + ], + [ + [ + [ + -5.086147, + 58.462519 + ], + [ + -5.076476, + 58.462936 + ], + [ + -5.083209, + 58.465789 + ], + [ + -5.086147, + 58.462519 + ] + ] + ], + [ + [ + [ + -5.133564, + 58.473843 + ], + [ + -5.116152, + 58.477435 + ], + [ + -5.141385, + 58.475552 + ], + [ + -5.133564, + 58.473843 + ] + ] + ], + [ + [ + [ + -4.710645, + 58.476216 + ], + [ + -4.70131, + 58.486558 + ], + [ + -4.710822, + 58.484964 + ], + [ + -4.710645, + 58.476216 + ] + ] + ], + [ + [ + [ + -4.624603, + 58.528087 + ], + [ + -4.621038, + 58.530271 + ], + [ + -4.627932, + 58.528949 + ], + [ + -4.624603, + 58.528087 + ] + ] + ], + [ + [ + [ + -4.389128, + 58.542205 + ], + [ + -4.386477, + 58.545985 + ], + [ + -4.388383, + 58.548156 + ], + [ + -4.389128, + 58.542205 + ] + ] + ], + [ + [ + [ + -4.288083, + 58.545928 + ], + [ + -4.296694, + 58.551453 + ], + [ + -4.305888, + 58.548022 + ], + [ + -4.288083, + 58.545928 + ] + ] + ], + [ + [ + [ + -4.420374, + 58.55215 + ], + [ + -4.423723, + 58.552595 + ], + [ + -4.424002, + 58.550662 + ], + [ + -4.420374, + 58.55215 + ] + ] + ], + [ + [ + [ + -4.326324, + 58.557244 + ], + [ + -4.331963, + 58.56229 + ], + [ + -4.34558, + 58.548777 + ], + [ + -4.326324, + 58.557244 + ] + ] + ], + [ + [ + [ + -4.687913, + 58.564579 + ], + [ + -4.677412, + 58.564106 + ], + [ + -4.68237, + 58.568451 + ], + [ + -4.687913, + 58.564579 + ] + ] + ], + [ + [ + [ + -4.050065, + 58.578081 + ], + [ + -4.053476, + 58.579931 + ], + [ + -4.052061, + 58.576931 + ], + [ + -4.050065, + 58.578081 + ] + ] + ], + [ + [ + [ + -4.84519, + 58.603215 + ], + [ + -4.847368, + 58.605573 + ], + [ + -4.846681, + 58.602642 + ], + [ + -4.84519, + 58.603215 + ] + ] + ], + [ + [ + [ + -3.130052, + 58.787614 + ], + [ + -3.327234, + 58.929065 + ], + [ + -3.433494, + 58.887414 + ], + [ + -3.295008, + 58.776015 + ], + [ + -3.130052, + 58.787614 + ] + ] + ], + [ + [ + [ + -3.201372, + 58.858587 + ], + [ + -3.189383, + 58.85855 + ], + [ + -3.189204, + 58.86117 + ], + [ + -3.201372, + 58.858587 + ] + ] + ], + [ + [ + [ + -3.307221, + 58.924598 + ], + [ + -3.264653, + 58.922705 + ], + [ + -3.273024, + 58.93726 + ], + [ + -3.307221, + 58.924598 + ] + ] + ], + [ + [ + [ + -4.411488, + 59.087531 + ], + [ + -4.408326, + 59.082564 + ], + [ + -4.400261, + 59.087314 + ], + [ + -4.411488, + 59.087531 + ] + ] + ], + [ + [ + [ + -3.126925, + 56.023466 + ], + [ + -3.129651, + 56.029456 + ], + [ + -3.142724, + 56.034453 + ], + [ + -3.126925, + 56.023466 + ] + ] + ], + [ + [ + [ + -2.787686, + 56.069874 + ], + [ + -2.780325, + 56.070941 + ], + [ + -2.786376, + 56.073476 + ], + [ + -2.787686, + 56.069874 + ] + ] + ], + [ + [ + [ + -2.718651, + 56.075063 + ], + [ + -2.722912, + 56.073394 + ], + [ + -2.719796, + 56.072293 + ], + [ + -2.718651, + 56.075063 + ] + ] + ], + [ + [ + [ + -2.640167, + 56.075863 + ], + [ + -2.637965, + 56.07869 + ], + [ + -2.642297, + 56.078613 + ], + [ + -2.640167, + 56.075863 + ] + ] + ], + [ + [ + [ + -2.557485, + 56.183105 + ], + [ + -2.54427, + 56.180945 + ], + [ + -2.562606, + 56.193121 + ], + [ + -2.557485, + 56.183105 + ] + ] + ], + [ + [ + [ + -2.915416, + 58.673127 + ], + [ + -2.910969, + 58.673186 + ], + [ + -2.911699, + 58.675044 + ], + [ + -2.915416, + 58.673127 + ] + ] + ], + [ + [ + [ + -3.100514, + 58.684726 + ], + [ + -3.125583, + 58.694958 + ], + [ + -3.105308, + 58.671231 + ], + [ + -3.100514, + 58.684726 + ] + ] + ], + [ + [ + [ + -2.932674, + 58.690445 + ], + [ + -2.935765, + 58.688945 + ], + [ + -2.918582, + 58.685629 + ], + [ + -2.932674, + 58.690445 + ] + ] + ], + [ + [ + [ + -3.074576, + 58.734871 + ], + [ + -3.053147, + 58.739714 + ], + [ + -3.049795, + 58.75174 + ], + [ + -3.074576, + 58.734871 + ] + ] + ], + [ + [ + [ + -3.099988, + 58.796719 + ], + [ + -3.092461, + 58.803905 + ], + [ + -3.113984, + 58.797968 + ], + [ + -3.099988, + 58.796719 + ] + ] + ], + [ + [ + [ + -3.064132, + 58.846127 + ], + [ + -3.129872, + 58.840313 + ], + [ + -3.08002, + 58.814097 + ], + [ + -3.064132, + 58.846127 + ] + ] + ], + [ + [ + [ + -3.149625, + 58.836928 + ], + [ + -3.159089, + 58.854685 + ], + [ + -3.173258, + 58.834914 + ], + [ + -3.149625, + 58.836928 + ] + ] + ], + [ + [ + [ + -3.076698, + 58.851222 + ], + [ + -3.065429, + 58.854605 + ], + [ + -3.073145, + 58.855154 + ], + [ + -3.076698, + 58.851222 + ] + ] + ], + [ + [ + [ + -3.156271, + 58.876306 + ], + [ + -3.173774, + 58.886607 + ], + [ + -3.169718, + 58.871739 + ], + [ + -3.156271, + 58.876306 + ] + ] + ], + [ + [ + [ + -2.663587, + 58.901833 + ], + [ + -2.684295, + 58.899646 + ], + [ + -2.682737, + 58.891191 + ], + [ + -2.663587, + 58.901833 + ] + ] + ], + [ + [ + [ + -3.12303, + 59.01039 + ], + [ + -3.073071, + 59.123701 + ], + [ + -3.341564, + 59.136845 + ], + [ + -3.354178, + 58.962237 + ], + [ + -2.897359, + 58.895212 + ], + [ + -3.036981, + 58.819358 + ], + [ + -2.962911, + 58.729897 + ], + [ + -2.708929, + 58.922285 + ], + [ + -3.12303, + 59.01039 + ] + ] + ], + [ + [ + [ + -2.841667, + 58.986301 + ], + [ + -2.844455, + 58.987124 + ], + [ + -2.846926, + 58.985587 + ], + [ + -2.841667, + 58.986301 + ] + ] + ], + [ + [ + [ + -3.070314, + 59.006699 + ], + [ + -3.063752, + 59.004533 + ], + [ + -3.065844, + 59.011773 + ], + [ + -3.070314, + 59.006699 + ] + ] + ], + [ + [ + [ + -2.570998, + 59.023994 + ], + [ + -2.558995, + 59.033312 + ], + [ + -2.575234, + 59.039026 + ], + [ + -2.570998, + 59.023994 + ] + ] + ], + [ + [ + [ + -2.805542, + 59.028152 + ], + [ + -2.801394, + 59.087742 + ], + [ + -2.856439, + 59.056959 + ], + [ + -2.805542, + 59.028152 + ] + ] + ], + [ + [ + [ + -2.567358, + 59.064286 + ], + [ + -2.564536, + 59.064036 + ], + [ + -2.566563, + 59.066453 + ], + [ + -2.567358, + 59.064286 + ] + ] + ], + [ + [ + [ + -2.993645, + 59.086228 + ], + [ + -2.974483, + 59.071727 + ], + [ + -2.964396, + 59.092129 + ], + [ + -2.993645, + 59.086228 + ] + ] + ], + [ + [ + [ + -2.946465, + 59.09029 + ], + [ + -2.951499, + 59.092606 + ], + [ + -2.949885, + 59.086492 + ], + [ + -2.946465, + 59.09029 + ] + ] + ], + [ + [ + [ + -2.963818, + 59.128042 + ], + [ + -3.014612, + 59.113434 + ], + [ + -2.965867, + 59.110429 + ], + [ + -2.963818, + 59.128042 + ] + ] + ], + [ + [ + [ + -2.829035, + 59.118707 + ], + [ + -2.829562, + 59.122432 + ], + [ + -2.833187, + 59.120031 + ], + [ + -2.829035, + 59.118707 + ] + ] + ], + [ + [ + [ + -2.595608, + 59.116353 + ], + [ + -2.629095, + 59.162875 + ], + [ + -2.677715, + 59.151116 + ], + [ + -2.622894, + 59.119048 + ], + [ + -2.690503, + 59.079206 + ], + [ + -2.63436, + 59.107066 + ], + [ + -2.595608, + 59.116353 + ] + ] + ], + [ + [ + [ + -2.828369, + 59.123226 + ], + [ + -2.825741, + 59.12395 + ], + [ + -2.834495, + 59.129325 + ], + [ + -2.828369, + 59.123226 + ] + ] + ], + [ + [ + [ + -2.683218, + 59.135796 + ], + [ + -2.663154, + 59.127598 + ], + [ + -2.669785, + 59.134019 + ], + [ + -2.683218, + 59.135796 + ] + ] + ], + [ + [ + [ + -3.12745, + 59.148855 + ], + [ + -3.12946, + 59.142475 + ], + [ + -3.117169, + 59.137027 + ], + [ + -3.12745, + 59.148855 + ] + ] + ], + [ + [ + [ + -2.945459, + 59.155634 + ], + [ + -2.916599, + 59.124237 + ], + [ + -2.907569, + 59.164232 + ], + [ + -2.945459, + 59.155634 + ] + ] + ], + [ + [ + [ + -3.110719, + 59.149377 + ], + [ + -3.105547, + 59.147854 + ], + [ + -3.107719, + 59.149596 + ], + [ + -3.110719, + 59.149377 + ] + ] + ], + [ + [ + [ + -2.575304, + 59.149311 + ], + [ + -2.603987, + 59.151745 + ], + [ + -2.58396, + 59.14616 + ], + [ + -2.575304, + 59.149311 + ] + ] + ], + [ + [ + [ + -2.963722, + 59.135274 + ], + [ + -2.97791, + 59.161956 + ], + [ + -2.951807, + 59.17811 + ], + [ + -3.121003, + 59.173811 + ], + [ + -2.963722, + 59.135274 + ] + ] + ], + [ + [ + [ + -2.68861, + 59.160059 + ], + [ + -2.690997, + 59.159151 + ], + [ + -2.69113, + 59.156395 + ], + [ + -2.68861, + 59.160059 + ] + ] + ], + [ + [ + [ + -2.955818, + 59.169316 + ], + [ + -2.955296, + 59.164498 + ], + [ + -2.945806, + 59.167186 + ], + [ + -2.955818, + 59.169316 + ] + ] + ], + [ + [ + [ + -2.648965, + 59.171108 + ], + [ + -2.657108, + 59.163668 + ], + [ + -2.645588, + 59.167259 + ], + [ + -2.648965, + 59.171108 + ] + ] + ], + [ + [ + [ + -2.694196, + 59.169836 + ], + [ + -2.687554, + 59.178173 + ], + [ + -2.699273, + 59.171799 + ], + [ + -2.694196, + 59.169836 + ] + ] + ], + [ + [ + [ + -2.92795, + 59.171143 + ], + [ + -2.922381, + 59.171701 + ], + [ + -2.920883, + 59.178319 + ], + [ + -2.92795, + 59.171143 + ] + ] + ], + [ + [ + [ + -2.754565, + 59.25067 + ], + [ + -2.828056, + 59.1906 + ], + [ + -2.738095, + 59.147328 + ], + [ + -2.754565, + 59.25067 + ] + ] + ], + [ + [ + [ + -2.851286, + 59.206206 + ], + [ + -2.854534, + 59.21215 + ], + [ + -2.859526, + 59.205326 + ], + [ + -2.851286, + 59.206206 + ] + ] + ], + [ + [ + [ + -2.837201, + 59.237209 + ], + [ + -2.820443, + 59.201778 + ], + [ + -2.814706, + 59.213198 + ], + [ + -2.837201, + 59.237209 + ] + ] + ], + [ + [ + [ + -2.589705, + 59.22303 + ], + [ + -2.592911, + 59.221262 + ], + [ + -2.589955, + 59.219888 + ], + [ + -2.589705, + 59.22303 + ] + ] + ], + [ + [ + [ + -2.903121, + 59.225176 + ], + [ + -2.902861, + 59.22718 + ], + [ + -2.907054, + 59.224803 + ], + [ + -2.903121, + 59.225176 + ] + ] + ], + [ + [ + [ + -2.749286, + 59.237627 + ], + [ + -2.716343, + 59.231571 + ], + [ + -2.740517, + 59.248006 + ], + [ + -2.749286, + 59.237627 + ] + ] + ], + [ + [ + [ + -2.976659, + 59.243608 + ], + [ + -2.981266, + 59.244992 + ], + [ + -2.981083, + 59.243804 + ], + [ + -2.976659, + 59.243608 + ] + ] + ], + [ + [ + [ + -2.907776, + 59.259872 + ], + [ + -2.908254, + 59.256416 + ], + [ + -2.906207, + 59.25793 + ], + [ + -2.907776, + 59.259872 + ] + ] + ], + [ + [ + [ + -2.424803, + 59.313791 + ], + [ + -2.565062, + 59.262591 + ], + [ + -2.522948, + 59.305654 + ], + [ + -2.56641, + 59.321072 + ], + [ + -2.559933, + 59.306164 + ], + [ + -2.57674, + 59.294615 + ], + [ + -2.623133, + 59.308353 + ], + [ + -2.602125, + 59.260534 + ], + [ + -2.696398, + 59.221713 + ], + [ + -2.370348, + 59.281178 + ], + [ + -2.424803, + 59.313791 + ] + ] + ], + [ + [ + [ + -2.903451, + 59.304948 + ], + [ + -2.931255, + 59.358282 + ], + [ + -3.07081, + 59.33267 + ], + [ + -2.837087, + 59.246483 + ], + [ + -2.903451, + 59.304948 + ] + ] + ], + [ + [ + [ + -2.864906, + 59.345085 + ], + [ + -2.863704, + 59.351291 + ], + [ + -2.877773, + 59.355298 + ], + [ + -2.864906, + 59.345085 + ] + ] + ], + [ + [ + [ + -2.87814, + 59.386117 + ], + [ + -2.91224, + 59.350005 + ], + [ + -2.876154, + 59.334664 + ], + [ + -2.887428, + 59.35369 + ], + [ + -2.87814, + 59.386117 + ] + ] + ], + [ + [ + [ + -2.451874, + 59.357431 + ], + [ + -2.368106, + 59.384028 + ], + [ + -2.380243, + 59.393609 + ], + [ + -2.451874, + 59.357431 + ] + ] + ], + [ + [ + [ + -2.385619, + 59.399209 + ], + [ + -2.394327, + 59.398275 + ], + [ + -2.38793, + 59.394557 + ], + [ + -2.385619, + 59.399209 + ] + ] + ], + [ + [ + [ + -1.597256, + 59.539634 + ], + [ + -1.639374, + 59.552292 + ], + [ + -1.65557, + 59.512622 + ], + [ + -1.597256, + 59.539634 + ] + ] + ], + [ + [ + [ + -2.063651, + 60.109647 + ], + [ + -2.039964, + 60.140288 + ], + [ + -2.117547, + 60.133526 + ], + [ + -2.063651, + 60.109647 + ] + ] + ], + [ + [ + [ + -1.376582, + 60.128325 + ], + [ + -1.37992, + 60.126495 + ], + [ + -1.376763, + 60.124985 + ], + [ + -1.376582, + 60.128325 + ] + ] + ], + [ + [ + [ + -1.379897, + 60.155013 + ], + [ + -1.376897, + 60.155488 + ], + [ + -1.380128, + 60.158049 + ], + [ + -1.379897, + 60.155013 + ] + ] + ], + [ + [ + [ + -1.51231, + 60.161025 + ], + [ + -1.508866, + 60.160617 + ], + [ + -1.509798, + 60.162758 + ], + [ + -1.51231, + 60.161025 + ] + ] + ], + [ + [ + [ + -1.563014, + 60.195129 + ], + [ + -1.578614, + 60.209231 + ], + [ + -1.604909, + 60.204095 + ], + [ + -1.563014, + 60.195129 + ] + ] + ], + [ + [ + [ + -1.566525, + 60.212672 + ], + [ + -1.567164, + 60.217494 + ], + [ + -1.577303, + 60.215063 + ], + [ + -1.566525, + 60.212672 + ] + ] + ], + [ + [ + [ + -1.551953, + 60.309443 + ], + [ + -1.554425, + 60.308666 + ], + [ + -1.549521, + 60.307953 + ], + [ + -1.551953, + 60.309443 + ] + ] + ], + [ + [ + [ + -1.656133, + 60.309393 + ], + [ + -1.651311, + 60.3093 + ], + [ + -1.651471, + 60.311563 + ], + [ + -1.656133, + 60.309393 + ] + ] + ], + [ + [ + [ + -1.547794, + 60.309236 + ], + [ + -1.544145, + 60.313286 + ], + [ + -1.548384, + 60.31564 + ], + [ + -1.547794, + 60.309236 + ] + ] + ], + [ + [ + [ + -1.492277, + 60.31695 + ], + [ + -1.49338, + 60.315895 + ], + [ + -1.486, + 60.313231 + ], + [ + -1.492277, + 60.31695 + ] + ] + ], + [ + [ + [ + -1.437985, + 60.32726 + ], + [ + -1.474317, + 60.341424 + ], + [ + -1.472887, + 60.310962 + ], + [ + -1.437985, + 60.32726 + ] + ] + ], + [ + [ + [ + -1.662574, + 60.337697 + ], + [ + -1.737088, + 60.332509 + ], + [ + -1.665443, + 60.321168 + ], + [ + -1.662574, + 60.337697 + ] + ] + ], + [ + [ + [ + -1.395686, + 60.321341 + ], + [ + -1.373732, + 60.334029 + ], + [ + -1.37997, + 60.341018 + ], + [ + -1.395686, + 60.321341 + ] + ] + ], + [ + [ + [ + -1.744514, + 60.334629 + ], + [ + -1.752296, + 60.336588 + ], + [ + -1.7518, + 60.334041 + ], + [ + -1.744514, + 60.334629 + ] + ] + ], + [ + [ + [ + -1.431659, + 60.344854 + ], + [ + -1.378516, + 60.367903 + ], + [ + -1.474925, + 60.375209 + ], + [ + -1.431659, + 60.344854 + ] + ] + ], + [ + [ + [ + -1.816057, + 60.374203 + ], + [ + -1.811253, + 60.372329 + ], + [ + -1.814279, + 60.374394 + ], + [ + -1.816057, + 60.374203 + ] + ] + ], + [ + [ + [ + -1.386862, + 60.377211 + ], + [ + -1.387402, + 60.37792 + ], + [ + -1.391043, + 60.378936 + ], + [ + -1.386862, + 60.377211 + ] + ] + ], + [ + [ + [ + -1.427202, + 60.406407 + ], + [ + -1.420694, + 60.411569 + ], + [ + -1.42156, + 60.41239 + ], + [ + -1.427202, + 60.406407 + ] + ] + ], + [ + [ + [ + -1.458231, + 60.443157 + ], + [ + -1.461524, + 60.436867 + ], + [ + -1.450751, + 60.439499 + ], + [ + -1.458231, + 60.443157 + ] + ] + ], + [ + [ + [ + -1.457654, + 60.446705 + ], + [ + -1.453797, + 60.444782 + ], + [ + -1.451605, + 60.44757 + ], + [ + -1.457654, + 60.446705 + ] + ] + ], + [ + [ + [ + -1.629871, + 60.474472 + ], + [ + -1.633036, + 60.473677 + ], + [ + -1.627674, + 60.470929 + ], + [ + -1.629871, + 60.474472 + ] + ] + ], + [ + [ + [ + -1.620457, + 60.472973 + ], + [ + -1.625622, + 60.476216 + ], + [ + -1.623342, + 60.471208 + ], + [ + -1.620457, + 60.472973 + ] + ] + ], + [ + [ + [ + -1.320004, + 59.848854 + ], + [ + -1.313845, + 59.850645 + ], + [ + -1.316118, + 59.852075 + ], + [ + -1.320004, + 59.848854 + ] + ] + ], + [ + [ + [ + -1.323382, + 59.868842 + ], + [ + -1.320889, + 59.870663 + ], + [ + -1.325295, + 59.870513 + ], + [ + -1.323382, + 59.868842 + ] + ] + ], + [ + [ + [ + -1.327954, + 59.871496 + ], + [ + -1.331878, + 59.874865 + ], + [ + -1.330683, + 59.867667 + ], + [ + -1.327954, + 59.871496 + ] + ] + ], + [ + [ + [ + -1.353817, + 59.94875 + ], + [ + -1.351427, + 59.952443 + ], + [ + -1.357695, + 59.955122 + ], + [ + -1.353817, + 59.94875 + ] + ] + ], + [ + [ + [ + -1.156894, + 59.996848 + ], + [ + -1.186253, + 60.008391 + ], + [ + -1.175787, + 59.990076 + ], + [ + -1.156894, + 59.996848 + ] + ] + ], + [ + [ + [ + -1.368613, + 60.025061 + ], + [ + -1.370638, + 60.024694 + ], + [ + -1.365935, + 60.01967 + ], + [ + -1.368613, + 60.025061 + ] + ] + ], + [ + [ + [ + -1.351567, + 60.019174 + ], + [ + -1.344792, + 60.027446 + ], + [ + -1.36667, + 60.03048 + ], + [ + -1.351567, + 60.019174 + ] + ] + ], + [ + [ + [ + -1.341101, + 60.042109 + ], + [ + -1.297949, + 60.086344 + ], + [ + -1.332679, + 60.078398 + ], + [ + -1.324509, + 60.06081 + ], + [ + -1.341101, + 60.042109 + ] + ] + ], + [ + [ + [ + -1.334, + 60.080643 + ], + [ + -1.309172, + 60.115285 + ], + [ + -1.374377, + 60.041925 + ], + [ + -1.341354, + 60.056908 + ], + [ + -1.334, + 60.080643 + ] + ] + ], + [ + [ + [ + -1.379639, + 60.121326 + ], + [ + -1.375797, + 60.112257 + ], + [ + -1.358628, + 60.119098 + ], + [ + -1.379639, + 60.121326 + ] + ] + ], + [ + [ + [ + -1.272449, + 60.130534 + ], + [ + -1.29801, + 60.127767 + ], + [ + -1.286046, + 60.106502 + ], + [ + -1.272449, + 60.130534 + ] + ] + ], + [ + [ + [ + -1.333226, + 60.12423 + ], + [ + -1.360361, + 60.126245 + ], + [ + -1.355759, + 60.120916 + ], + [ + -1.333226, + 60.12423 + ] + ] + ], + [ + [ + [ + -1.372416, + 60.133033 + ], + [ + -1.38041, + 60.129119 + ], + [ + -1.373088, + 60.127985 + ], + [ + -1.372416, + 60.133033 + ] + ] + ], + [ + [ + [ + -1.326731, + 60.139601 + ], + [ + -1.328713, + 60.141713 + ], + [ + -1.331526, + 60.133538 + ], + [ + -1.326731, + 60.139601 + ] + ] + ], + [ + [ + [ + -1.347011, + 60.138791 + ], + [ + -1.347476, + 60.140765 + ], + [ + -1.35074, + 60.137759 + ], + [ + -1.347011, + 60.138791 + ] + ] + ], + [ + [ + [ + -1.078904, + 60.171151 + ], + [ + -1.146999, + 60.180299 + ], + [ + -1.113348, + 60.149228 + ], + [ + -1.121918, + 60.119649 + ], + [ + -1.071412, + 60.103537 + ], + [ + -1.078904, + 60.171151 + ] + ] + ], + [ + [ + [ + -1.023249, + 60.133901 + ], + [ + -1.003129, + 60.139345 + ], + [ + -1.005665, + 60.151065 + ], + [ + -1.023249, + 60.133901 + ] + ] + ], + [ + [ + [ + -1.359059, + 60.138172 + ], + [ + -1.350149, + 60.147216 + ], + [ + -1.362476, + 60.152798 + ], + [ + -1.359059, + 60.138172 + ] + ] + ], + [ + [ + [ + -1.34114, + 60.16724 + ], + [ + -1.342144, + 60.165678 + ], + [ + -1.334838, + 60.162081 + ], + [ + -1.34114, + 60.16724 + ] + ] + ], + [ + [ + [ + -1.104061, + 60.18229 + ], + [ + -1.10191, + 60.181397 + ], + [ + -1.100295, + 60.183876 + ], + [ + -1.104061, + 60.18229 + ] + ] + ], + [ + [ + [ + -1.32461, + 60.189075 + ], + [ + -1.328972, + 60.188725 + ], + [ + -1.32717, + 60.183808 + ], + [ + -1.32461, + 60.189075 + ] + ] + ], + [ + [ + [ + -1.318867, + 60.196009 + ], + [ + -1.316894, + 60.198549 + ], + [ + -1.322526, + 60.202722 + ], + [ + -1.318867, + 60.196009 + ] + ] + ], + [ + [ + [ + -1.319828, + 60.206659 + ], + [ + -1.323296, + 60.206475 + ], + [ + -1.321001, + 60.204505 + ], + [ + -1.319828, + 60.206659 + ] + ] + ], + [ + [ + [ + -1.143698, + 60.239253 + ], + [ + -1.15168, + 60.240288 + ], + [ + -1.1527, + 60.235055 + ], + [ + -1.143698, + 60.239253 + ] + ] + ], + [ + [ + [ + -1.142791, + 60.242512 + ], + [ + -1.137318, + 60.241821 + ], + [ + -1.133616, + 60.24317 + ], + [ + -1.142791, + 60.242512 + ] + ] + ], + [ + [ + [ + -1.091674, + 60.248953 + ], + [ + -1.088726, + 60.248297 + ], + [ + -1.087517, + 60.250392 + ], + [ + -1.091674, + 60.248953 + ] + ] + ], + [ + [ + [ + -1.318359, + 60.171808 + ], + [ + -1.267004, + 60.13721 + ], + [ + -1.329187, + 59.948852 + ], + [ + -1.392275, + 59.913064 + ], + [ + -1.273984, + 59.852577 + ], + [ + -1.131706, + 60.148789 + ], + [ + -1.230389, + 60.230136 + ], + [ + -1.081593, + 60.304942 + ], + [ + -1.184755, + 60.351204 + ], + [ + -1.048385, + 60.450413 + ], + [ + -1.257551, + 60.403048 + ], + [ + -1.115242, + 60.505199 + ], + [ + -1.027413, + 60.497762 + ], + [ + -1.085321, + 60.605903 + ], + [ + -0.986319, + 60.700302 + ], + [ + -1.126953, + 60.727328 + ], + [ + -1.119574, + 60.719298 + ], + [ + -1.146407, + 60.627673 + ], + [ + -1.111584, + 60.606161 + ], + [ + -1.63321, + 60.487253 + ], + [ + -1.496305, + 60.482994 + ], + [ + -1.262802, + 60.351774 + ], + [ + -1.375343, + 60.285008 + ], + [ + -1.665897, + 60.306178 + ], + [ + -1.703095, + 60.254457 + ], + [ + -1.267255, + 60.236583 + ], + [ + -1.318359, + 60.171808 + ] + ] + ], + [ + [ + [ + -1.07875, + 60.302522 + ], + [ + -1.076389, + 60.30475 + ], + [ + -1.07993, + 60.30502 + ], + [ + -1.07875, + 60.302522 + ] + ] + ], + [ + [ + [ + -0.902688, + 60.32731 + ], + [ + -0.905689, + 60.328049 + ], + [ + -0.909377, + 60.325636 + ], + [ + -0.902688, + 60.32731 + ] + ] + ], + [ + [ + [ + -0.858029, + 60.34257 + ], + [ + -0.864574, + 60.33802 + ], + [ + -0.860952, + 60.337629 + ], + [ + -0.858029, + 60.34257 + ] + ] + ], + [ + [ + [ + -0.879627, + 60.344213 + ], + [ + -0.881474, + 60.345037 + ], + [ + -0.886433, + 60.337756 + ], + [ + -0.879627, + 60.344213 + ] + ] + ], + [ + [ + [ + -0.900043, + 60.381693 + ], + [ + -0.96283, + 60.383423 + ], + [ + -0.978711, + 60.331383 + ], + [ + -0.900043, + 60.381693 + ] + ] + ], + [ + [ + [ + -0.908757, + 60.359236 + ], + [ + -0.911217, + 60.356126 + ], + [ + -0.904616, + 60.357864 + ], + [ + -0.908757, + 60.359236 + ] + ] + ], + [ + [ + [ + -1.354652, + 60.354896 + ], + [ + -1.354815, + 60.360837 + ], + [ + -1.366948, + 60.360037 + ], + [ + -1.354652, + 60.354896 + ] + ] + ], + [ + [ + [ + -1.033032, + 60.353102 + ], + [ + -1.024515, + 60.369742 + ], + [ + -1.045201, + 60.363673 + ], + [ + -1.033032, + 60.353102 + ] + ] + ], + [ + [ + [ + -0.903372, + 60.363591 + ], + [ + -0.901788, + 60.36273 + ], + [ + -0.899873, + 60.36548 + ], + [ + -0.903372, + 60.363591 + ] + ] + ], + [ + [ + [ + -1.052674, + 60.369128 + ], + [ + -1.054666, + 60.365788 + ], + [ + -1.049746, + 60.367585 + ], + [ + -1.052674, + 60.369128 + ] + ] + ], + [ + [ + [ + -1.056901, + 60.366868 + ], + [ + -1.055688, + 60.368682 + ], + [ + -1.059378, + 60.369306 + ], + [ + -1.056901, + 60.366868 + ] + ] + ], + [ + [ + [ + -0.893348, + 60.368636 + ], + [ + -0.894171, + 60.3695 + ], + [ + -0.89908, + 60.366685 + ], + [ + -0.893348, + 60.368636 + ] + ] + ], + [ + [ + [ + -1.024125, + 60.371283 + ], + [ + -1.020667, + 60.372915 + ], + [ + -1.022831, + 60.373604 + ], + [ + -1.024125, + 60.371283 + ] + ] + ], + [ + [ + [ + -0.800656, + 60.396595 + ], + [ + -0.802456, + 60.397747 + ], + [ + -0.803863, + 60.394752 + ], + [ + -0.800656, + 60.396595 + ] + ] + ], + [ + [ + [ + -0.79148, + 60.403045 + ], + [ + -0.792592, + 60.404146 + ], + [ + -0.794448, + 60.401563 + ], + [ + -0.79148, + 60.403045 + ] + ] + ], + [ + [ + [ + -0.790927, + 60.40497 + ], + [ + -0.798479, + 60.405708 + ], + [ + -0.797539, + 60.403625 + ], + [ + -0.790927, + 60.40497 + ] + ] + ], + [ + [ + [ + -0.75343, + 60.418703 + ], + [ + -0.762906, + 60.423587 + ], + [ + -0.799195, + 60.409871 + ], + [ + -0.75343, + 60.418703 + ] + ] + ], + [ + [ + [ + -0.750475, + 60.419108 + ], + [ + -0.732836, + 60.420029 + ], + [ + -0.750233, + 60.421107 + ], + [ + -0.750475, + 60.419108 + ] + ] + ], + [ + [ + [ + -0.749559, + 60.430755 + ], + [ + -0.759405, + 60.42482 + ], + [ + -0.739957, + 60.426081 + ], + [ + -0.749559, + 60.430755 + ] + ] + ], + [ + [ + [ + -1.155578, + 60.42994 + ], + [ + -1.150102, + 60.428172 + ], + [ + -1.152101, + 60.430569 + ], + [ + -1.155578, + 60.42994 + ] + ] + ], + [ + [ + [ + -1.159941, + 60.438605 + ], + [ + -1.147921, + 60.438969 + ], + [ + -1.156367, + 60.44577 + ], + [ + -1.159941, + 60.438605 + ] + ] + ], + [ + [ + [ + -1.133552, + 60.447034 + ], + [ + -1.12998, + 60.452519 + ], + [ + -1.136506, + 60.449769 + ], + [ + -1.133552, + 60.447034 + ] + ] + ], + [ + [ + [ + -1.040471, + 60.45653 + ], + [ + -1.045623, + 60.454744 + ], + [ + -1.045673, + 60.452387 + ], + [ + -1.040471, + 60.45653 + ] + ] + ], + [ + [ + [ + -0.837059, + 60.62956 + ], + [ + -0.947542, + 60.620894 + ], + [ + -0.894262, + 60.56271 + ], + [ + -0.837059, + 60.62956 + ] + ] + ], + [ + [ + [ + -1.039436, + 60.60337 + ], + [ + -1.038941, + 60.601881 + ], + [ + -1.035102, + 60.602621 + ], + [ + -1.039436, + 60.60337 + ] + ] + ], + [ + [ + [ + -0.968194, + 60.612206 + ], + [ + -0.998276, + 60.619447 + ], + [ + -1.000057, + 60.596712 + ], + [ + -0.968194, + 60.612206 + ] + ] + ], + [ + [ + [ + -0.895011, + 60.632494 + ], + [ + -0.895092, + 60.636283 + ], + [ + -0.898191, + 60.6352 + ], + [ + -0.895011, + 60.632494 + ] + ] + ], + [ + [ + [ + -0.91517, + 60.636708 + ], + [ + -0.906968, + 60.63973 + ], + [ + -0.907584, + 60.641544 + ], + [ + -0.91517, + 60.636708 + ] + ] + ], + [ + [ + [ + -0.943533, + 60.642609 + ], + [ + -0.937795, + 60.644732 + ], + [ + -0.938606, + 60.645929 + ], + [ + -0.943533, + 60.642609 + ] + ] + ], + [ + [ + [ + -1.306212, + 60.651989 + ], + [ + -1.300228, + 60.651267 + ], + [ + -1.303264, + 60.654259 + ], + [ + -1.306212, + 60.651989 + ] + ] + ], + [ + [ + [ + -0.875415, + 60.654796 + ], + [ + -0.878042, + 60.656866 + ], + [ + -0.877734, + 60.653859 + ], + [ + -0.875415, + 60.654796 + ] + ] + ], + [ + [ + [ + -0.841073, + 60.665436 + ], + [ + -0.844889, + 60.66312 + ], + [ + -0.833762, + 60.660402 + ], + [ + -0.841073, + 60.665436 + ] + ] + ], + [ + [ + [ + -0.985592, + 60.672762 + ], + [ + -0.988701, + 60.671982 + ], + [ + -0.974595, + 60.659439 + ], + [ + -0.985592, + 60.672762 + ] + ] + ], + [ + [ + [ + -0.876229, + 60.671352 + ], + [ + -0.919687, + 60.677612 + ], + [ + -0.901059, + 60.661056 + ], + [ + -0.876229, + 60.671352 + ] + ] + ], + [ + [ + [ + -0.96105, + 60.731937 + ], + [ + -0.964314, + 60.73323 + ], + [ + -0.964555, + 60.730754 + ], + [ + -0.96105, + 60.731937 + ] + ] + ], + [ + [ + [ + -1.108155, + 60.735501 + ], + [ + -1.108584, + 60.737555 + ], + [ + -1.11474, + 60.734458 + ], + [ + -1.108155, + 60.735501 + ] + ] + ], + [ + [ + [ + -0.981932, + 60.684066 + ], + [ + -0.831442, + 60.684656 + ], + [ + -0.93821, + 60.812951 + ], + [ + -0.938951, + 60.75085 + ], + [ + -0.981932, + 60.684066 + ] + ] + ], + [ + [ + [ + -0.952041, + 60.771676 + ], + [ + -0.94927, + 60.769661 + ], + [ + -0.947497, + 60.771937 + ], + [ + -0.952041, + 60.771676 + ] + ] + ], + [ + [ + [ + -0.769973, + 60.831846 + ], + [ + -0.771584, + 60.832054 + ], + [ + -0.772336, + 60.829219 + ], + [ + -0.769973, + 60.831846 + ] + ] + ], + [ + [ + [ + -0.774629, + 60.832271 + ], + [ + -0.768405, + 60.832685 + ], + [ + -0.769796, + 60.834534 + ], + [ + -0.774629, + 60.832271 + ] + ] + ], + [ + [ + [ + -0.894598, + 60.849718 + ], + [ + -0.893086, + 60.849262 + ], + [ + -0.891191, + 60.85306 + ], + [ + -0.894598, + 60.849718 + ] + ] + ], + [ + [ + [ + -0.889752, + 60.851455 + ], + [ + -0.887352, + 60.851364 + ], + [ + -0.887554, + 60.854791 + ], + [ + -0.889752, + 60.851455 + ] + ] + ] + ] + }, + "properties": {} + } + ] +} \ No newline at end of file diff --git a/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj b/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj index 763bf9bf75..be0e82c97d 100644 --- a/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj +++ b/system-int-test/test/cmr/system_int_test/search/collection/collection_shapefile_search_test.clj @@ -146,6 +146,7 @@ (testing (format "Search with force-cartesian parameter using %s shapefile" fmt) ;; The parameter changes how shapefile coordinates are interpreted (geodetic vs cartesian) + ;; We expect the results for these test files to be the same vs the default geodetic (are3 [shapefile force-cartesian expected-items] (let [params (if (some? force-cartesian) [{:name "shapefile" @@ -180,3 +181,41 @@ "southern_africa with force-cartesian=true" "southern_africa" true [whole-world polygon-with-holes polygon-with-holes-cart normal-line normal-line-cart normal-brs wide-south-cart]))))) + +(deftest collection-shapefile-force-cartesian-validation-test + "Test that cartesian-only shapefiles require force-cartesian=true to pass validation" + (let [_ (side/eval-form `(shapefile/set-enable-shapefile-parameter-flag! true))] + (testing "scotland_cartesian.json is only valid when processed as cartesian" + (testing "with force-cartesian=true should pass validation" + (let [params [{:name "shapefile" + :content (io/file (io/resource "shapefiles/scotland_cartesian.json")) + :mime-type mt/geojson} + {:name "force-cartesian" + :content "true"} + {:name "provider" + :content "PROV1"}] + {:keys [status]} (search/find-refs-with-multi-part-form-post :collection params)] + (is (nil? status) + "Should pass validation with force-cartesian=true"))) + + (testing "without force-cartesian should fail validation" + (let [params [{:name "shapefile" + :content (io/file (io/resource "shapefiles/scotland_cartesian.json")) + :mime-type mt/geojson} + {:name "provider" + :content "PROV1"}] + {:keys [status]} (search/find-refs-with-multi-part-form-post :collection params)] + (is (= 400 status) + "Should fail validation without force-cartesian"))) + + (testing "with force-cartesian=false should fail validation" + (let [params [{:name "shapefile" + :content (io/file (io/resource "shapefiles/scotland_cartesian.json")) + :mime-type mt/geojson} + {:name "force-cartesian" + :content "false"} + {:name "provider" + :content "PROV1"}] + {:keys [status]} (search/find-refs-with-multi-part-form-post :collection params)] + (is (= 400 status) + "Should fail validation with force-cartesian=false")))))) diff --git a/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj b/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj index 1a85a08c5b..2f0fc4eddc 100644 --- a/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj +++ b/system-int-test/test/cmr/system_int_test/search/granule/granule_shapefile_search_test.clj @@ -259,6 +259,7 @@ (testing (format "Search with force-cartesian parameter using %s shapefile" fmt) ;; The parameter changes how shapefile coordinates are interpreted (geodetic vs cartesian) + ;; We expect the results for these test files to be the same vs the default geodetic (are3 [shapefile force-cartesian expected-items] (let [params (if (some? force-cartesian) [{:name "shapefile" From 33a78c20b047208ee0b6fa3647d8e9e7bcc886b8 Mon Sep 17 00:00:00 2001 From: Lucia Zimmermann <7947215+zimzoom@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:21:09 -0400 Subject: [PATCH 3/3] CMR-11098: pr feedback --- .../src/cmr/search/services/parameters/parameter_validation.clj | 1 + 1 file changed, 1 insertion(+) diff --git a/search-app/src/cmr/search/services/parameters/parameter_validation.clj b/search-app/src/cmr/search/services/parameters/parameter_validation.clj index 525d264609..98e8e630b7 100644 --- a/search-app/src/cmr/search/services/parameters/parameter_validation.clj +++ b/search-app/src/cmr/search/services/parameters/parameter_validation.clj @@ -187,6 +187,7 @@ :sensor cpv/string-plus-and-options :short-name cpv/string-plus-and-options :simplify-shapefile cpv/string-param-options + :force-cartesian cpv/string-param-options :spatial cpv/and-or-option :spatial-keyword cpv/string-plus-and-options :temporal (conj exclude-plus-and-or-option :limit-to-granules)