Skip to content

Commit 8056ea6

Browse files
committed
use small fixture to speed up and stabilie tests
1 parent 1ed0671 commit 8056ea6

7 files changed

Lines changed: 250 additions & 34 deletions

File tree

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
#!/usr/bin/env python3
2+
# SPDX-FileCopyrightText: 2025 OPTIMETA and KOMET projects <https://projects.tib.eu/komet>
3+
# SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
"""
6+
One-off script: build tiny GeoJSON fixtures for global regions tests.
7+
8+
Reads the full-fidelity geojson files used by load_global_regions:
9+
works/management/commands/goas_v01_simplified.geojson (~4.5 MB)
10+
works/management/commands/world_continents.geojson (~6.3 MB)
11+
12+
Aggressively simplifies each feature (high-tolerance Douglas-Peucker, drop holes,
13+
round to 1 decimal place) and writes minified GeoJSON to:
14+
tests/fixtures/global_regions/goas_v01_simplified.geojson (target < 10 KB)
15+
tests/fixtures/global_regions/world_continents.geojson
16+
17+
Run once when source data changes; the fixtures are committed to git so tests
18+
do not depend on network access.
19+
"""
20+
21+
import json
22+
import os
23+
from pathlib import Path
24+
25+
from shapely.geometry import Polygon, MultiPolygon, mapping, shape
26+
from shapely.ops import unary_union
27+
28+
ROOT = Path(__file__).resolve().parent.parent
29+
SRC_DIR = ROOT / "works" / "management" / "commands"
30+
OUT_DIR = ROOT / "tests" / "fixtures" / "global_regions"
31+
32+
OCEANS_SRC = SRC_DIR / "goas_v01_simplified.geojson"
33+
CONTS_SRC = SRC_DIR / "world_continents.geojson"
34+
OCEANS_OUT = OUT_DIR / "goas_v01_simplified.geojson"
35+
CONTS_OUT = OUT_DIR / "world_continents.geojson"
36+
37+
OCEAN_SIZE_TARGET = 10 * 1024 # 10 KB hard cap from spec
38+
39+
40+
def _round_coords(geom_mapping, ndigits=1):
41+
"""Round all coordinates in a GeoJSON geometry mapping in-place."""
42+
43+
def _walk(coords):
44+
if isinstance(coords, (list, tuple)) and coords and isinstance(coords[0], (int, float)):
45+
return [round(c, ndigits) for c in coords]
46+
return [_walk(c) for c in coords]
47+
48+
geom_mapping["coordinates"] = _walk(geom_mapping["coordinates"])
49+
return geom_mapping
50+
51+
52+
def _drop_holes(geom):
53+
"""Return a MultiPolygon with interior rings removed.
54+
55+
Always emits MultiPolygon — the GlobalRegion model uses MultiPolygonField,
56+
and a bare Polygon would fail to round-trip through SpatialProxy on load.
57+
"""
58+
if geom.geom_type == "Polygon":
59+
return MultiPolygon([Polygon(geom.exterior)])
60+
if geom.geom_type == "MultiPolygon":
61+
return MultiPolygon([Polygon(p.exterior) for p in geom.geoms])
62+
return geom
63+
64+
65+
def _simplify(geom, tolerance):
66+
return _drop_holes(geom.simplify(tolerance, preserve_topology=False))
67+
68+
69+
def shrink_features(features, tolerance, ndigits, max_size=None):
70+
"""Apply simplification + rounding; optionally raise tolerance until <= max_size."""
71+
while True:
72+
out = []
73+
for feat in features:
74+
g = shape(feat["geometry"])
75+
simplified = _simplify(g, tolerance)
76+
geom_mapping = _round_coords(mapping(simplified), ndigits=ndigits)
77+
out.append({
78+
"type": "Feature",
79+
"geometry": geom_mapping,
80+
"properties": feat["properties"],
81+
})
82+
payload = {"type": "FeatureCollection", "features": out}
83+
encoded = json.dumps(payload, separators=(",", ":"))
84+
if max_size is None or len(encoded.encode("utf-8")) <= max_size:
85+
return payload, encoded, tolerance
86+
tolerance *= 1.5
87+
88+
89+
def slim_ocean_props(props):
90+
"""Keep only the name field — load_global_regions only reads it."""
91+
return {"name": props.get("name") or props.get("Name")}
92+
93+
94+
def slim_continent_props(props):
95+
"""load_global_regions reads CONTINENT (with fallbacks Name/continent)."""
96+
return {"CONTINENT": props.get("CONTINENT") or props.get("Name") or props.get("continent")}
97+
98+
99+
def main():
100+
OUT_DIR.mkdir(parents=True, exist_ok=True)
101+
102+
# --- Oceans ---
103+
with OCEANS_SRC.open() as f:
104+
oceans_in = json.load(f)
105+
oceans_features = [
106+
{"geometry": f["geometry"], "properties": slim_ocean_props(f["properties"])}
107+
for f in oceans_in["features"]
108+
]
109+
oceans_payload, oceans_json, used_tol = shrink_features(
110+
oceans_features, tolerance=2.0, ndigits=1, max_size=OCEAN_SIZE_TARGET
111+
)
112+
OCEANS_OUT.write_text(oceans_json)
113+
print(f"oceans: {OCEANS_OUT.relative_to(ROOT)} "
114+
f"size={len(oceans_json)} bytes features={len(oceans_payload['features'])} "
115+
f"tolerance={used_tol}")
116+
117+
# --- Continents ---
118+
with CONTS_SRC.open() as f:
119+
conts_in = json.load(f)
120+
cont_features = [
121+
{"geometry": f["geometry"], "properties": slim_continent_props(f["properties"])}
122+
for f in conts_in["features"]
123+
]
124+
conts_payload, conts_json, used_tol = shrink_features(
125+
cont_features, tolerance=2.0, ndigits=1, max_size=OCEAN_SIZE_TARGET
126+
)
127+
CONTS_OUT.write_text(conts_json)
128+
print(f"continents:{CONTS_OUT.relative_to(ROOT)} "
129+
f"size={len(conts_json)} bytes features={len(conts_payload['features'])} "
130+
f"tolerance={used_tol}")
131+
132+
133+
if __name__ == "__main__":
134+
main()

tests-ui/test_feeds_and_work_landing.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
"""
1212

1313
import os
14+
import shutil
15+
import tempfile
16+
from pathlib import Path
17+
1418
from django.core.management import call_command
1519
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
20+
from django.test import override_settings
1621
from helium import (
1722
start_chrome,
1823
kill_browser,
@@ -27,6 +32,19 @@
2732
from works.models import Work
2833

2934

35+
# Tiny fixture geojson files copied from tests/fixtures/global_regions/ keep
36+
# load_global_regions offline during the UI run.
37+
FIXTURE_DIR = Path(__file__).resolve().parent.parent / "tests" / "fixtures" / "global_regions"
38+
39+
40+
def _install_global_region_fixtures(target_dir):
41+
target = Path(target_dir)
42+
target.mkdir(parents=True, exist_ok=True)
43+
shutil.copy(FIXTURE_DIR / "world_continents.geojson", target / "world_continents.geojson")
44+
shutil.copy(FIXTURE_DIR / "goas_v01_simplified.geojson", target / "goas_v01_simplified.geojson")
45+
(target / "goas_v01.gpkg").touch()
46+
47+
3048
class FeedsAndWorkLandingTests(StaticLiveServerTestCase):
3149
"""UI tests for feeds and work landing pages.
3250
@@ -39,10 +57,20 @@ class FeedsAndWorkLandingTests(StaticLiveServerTestCase):
3957
@classmethod
4058
def setUpClass(cls):
4159
"""Set up class-level resources including live server."""
60+
cls._regions_tmp = tempfile.mkdtemp(prefix="optimap_global_regions_ui_")
61+
_install_global_region_fixtures(cls._regions_tmp)
62+
cls._settings_override = override_settings(GLOBAL_REGIONS_DATA_DIR=cls._regions_tmp)
63+
cls._settings_override.enable()
4264
super().setUpClass()
4365

4466
call_command("load_global_regions")
4567

68+
@classmethod
69+
def tearDownClass(cls):
70+
super().tearDownClass()
71+
cls._settings_override.disable()
72+
shutil.rmtree(cls._regions_tmp, ignore_errors=True)
73+
4674
def test_europe_feed_page_loads(self):
4775
"""Test that the Europe feed page loads and displays works."""
4876
try:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-149.5,-76.4],[-145.3,-77.1],[-158.5,-78.2],[-145.2,-80.7],[-154.9,-81.6],[-153.0,-84.0],[-137.4,-85.1],[-180.0,-84.4],[-180.0,-60.0],[180.0,-60.0],[180.0,-84.4],[159.7,-80.7],[167.1,-78.7],[163.3,-78.3],[164.7,-75.4],[162.4,-74.9],[170.2,-71.4],[134.9,-65.3],[88.1,-66.7],[71.5,-71.4],[68.1,-70.3],[69.9,-67.8],[53.8,-65.8],[38.7,-70.1],[-10.2,-70.9],[-36.5,-78.7],[-30.7,-80.4],[-58.4,-83.0],[-72.1,-81.7],[-42.9,-79.4],[-74.5,-80.7],[-83.2,-77.2],[-69.1,-78.1],[-60.7,-74.4],[-65.6,-67.5],[-57.3,-63.2],[-67.5,-67.0],[-66.9,-72.4],[-69.3,-73.2],[-149.5,-76.4]]]]},"properties":{"name":"Southern Ocean"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-56.7,-36.9],[-58.5,-33.0],[-54.2,-34.7],[-48.7,-25.4],[-41.0,-22.0],[-34.8,-8.0],[-39.9,-2.9],[-50.3,-2.2],[-48.4,-0.3],[-51.2,0.1],[6.6,0.0],[13.7,-5.5],[11.7,-17.6],[20.0,-34.8],[20.0,-60.0],[-67.3,-60.0],[-65.1,-54.7],[-69.6,-51.6],[-65.8,-47.9],[-67.6,-46.1],[-63.6,-42.8],[-65.1,-40.9],[-56.7,-36.9]]]]},"properties":{"name":"South Atlantic Ocean"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[135.1,-3.4],[130.1,-0.0],[172.6,0.0],[173.0,3.4],[174.3,0.0],[180.0,0.0],[180.0,-60.0],[146.9,-60.0],[148.4,-41.0],[143.5,-38.9],[150.0,-37.5],[153.6,-28.6],[141.0,-9.1],[144.8,-7.3],[150.9,-10.2],[144.5,-3.8],[135.1,-3.4]]],[[[-81.1,-4.9],[-75.9,-14.7],[-70.3,-18.4],[-72.7,-45.4],[-75.7,-46.7],[-73.8,-52.9],[-68.4,-52.3],[-72.0,-54.6],[-67.3,-54.9],[-67.3,-60.0],[-180.0,-60.0],[-180.0,0.0],[-91.8,1.4],[-80.1,0.0],[-81.1,-4.9]]]]},"properties":{"name":"South Pacific Ocean"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[117.7,39.1],[124.6,40.3],[126.5,34.3],[129.1,35.1],[127.5,39.9],[135.1,43.5],[141.5,52.2],[135.2,54.8],[142.8,59.6],[155.2,59.2],[167.2,62.9],[156.8,57.7],[156.7,50.9],[163.4,56.2],[163.6,60.0],[179.1,62.3],[173.9,64.7],[180.0,65.0],[180.0,0.0],[174.3,0.0],[173.0,3.4],[172.6,0.0],[130.1,0.0],[125.4,3.7],[126.2,9.3],[123.6,8.0],[120.1,13.8],[124.1,12.7],[121.4,15.3],[122.0,25.0],[119.2,26.1],[122.1,29.9],[119.2,35.0],[122.7,37.4],[117.7,39.1]]],[[[-160.8,64.9],[-165.4,60.5],[-156.2,59.2],[-163.4,54.8],[-150.5,61.5],[-152.0,59.3],[-147.7,61.3],[-133.0,58.3],[-122.9,49.5],[-124.4,40.3],[-112.2,24.8],[-109.5,23.2],[-115.0,31.9],[-103.5,18.3],[-87.4,13.4],[-80.9,7.2],[-78.2,8.6],[-77.8,2.5],[-80.1,0.0],[-180.0,0.0],[-180.0,65.4],[-160.8,64.9]]]]},"properties":{"name":"North Pacific Ocean"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[104.3,1.4],[99.2,9.3],[99.9,13.5],[105.1,8.6],[109.5,12.6],[106.6,21.0],[121.5,25.3],[121.9,7.0],[133.6,-4.3],[122.8,-10.9],[105.2,-6.8],[103.7,0.3],[95.4,5.7],[98.7,8.5],[104.3,1.4]]]]},"properties":{"name":"South China and Easter Archipelagic Seas"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[35.5,-24.2],[34.6,-19.6],[40.8,-14.8],[40.2,-2.7],[51.4,10.4],[42.5,11.5],[32.5,29.9],[43.9,12.6],[59.8,22.2],[56.7,26.1],[57.8,25.6],[66.5,25.5],[70.4,20.9],[73.0,22.3],[77.5,8.1],[80.3,15.7],[91.3,22.9],[98.8,12.6],[95.4,4.8],[105.2,-6.8],[122.8,-10.9],[131.1,-8.2],[133.8,-2.9],[138.2,-5.1],[137.6,-8.4],[140.3,-7.7],[140.6,-17.7],[135.4,-15.3],[136.6,-11.9],[132.0,-11.1],[130.0,-15.4],[126.0,-13.9],[114.0,-21.9],[113.2,-26.2],[116.6,-35.1],[131.1,-31.5],[136.0,-35.0],[137.8,-32.4],[136.8,-35.3],[146.9,-43.6],[146.9,-60.0],[20.0,-60.0],[20.0,-34.8],[27.9,-33.0],[35.5,-24.2]]],[[[56.3,26.3],[51.3,24.3],[47.8,30.3],[56.3,26.3]]]]},"properties":{"name":"Indian Ocean"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.2,44.3],[16.1,37.9],[18.5,40.1],[13.6,45.8],[23.2,36.4],[22.6,40.5],[29.1,41.1],[30.1,46.4],[34.0,44.4],[39.1,47.3],[36.6,45.2],[42.4,42.1],[26.2,40.0],[28.0,36.6],[36.2,36.8],[33.9,31.2],[21.7,32.9],[19.2,30.3],[10.3,33.7],[11.0,37.1],[-5.9,35.8],[9.2,44.3]]]]},"properties":{"name":"Mediterranean Region"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.7,55.5],[11.8,58.1],[12.8,55.4],[16.0,56.2],[19.1,59.7],[17.7,63.0],[23.9,66.8],[25.5,65.0],[21.3,60.7],[30.3,60.0],[23.5,59.2],[24.3,56.8],[18.2,53.2],[9.7,55.5]]]]},"properties":{"name":"Baltic Sea"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-97.9,22.6],[-96.6,28.8],[-87.9,31.2],[-80.4,25.1],[-81.8,30.9],[-75.5,35.8],[-77.3,38.7],[-70.0,41.7],[-69.6,44.6],[-61.0,45.3],[-66.7,48.0],[-65.4,48.9],[-55.6,52.2],[-60.7,53.4],[-57.3,54.6],[-62.2,55.9],[-64.2,60.0],[-43.1,60.0],[-41.1,65.1],[-32.6,68.6],[-22.4,66.3],[-24.5,65.5],[-22.7,63.8],[-13.5,65.1],[11.9,58.4],[8.1,55.6],[12.0,52.9],[5.9,53.4],[1.3,51.3],[-3.9,56.1],[-3.0,58.6],[-5.3,56.5],[-2.6,53.4],[-5.3,51.7],[-2.4,51.8],[-5.7,50.0],[0.7,51.1],[-4.5,48.6],[-1.2,47.4],[-1.2,43.5],[-9.3,43.1],[-9.0,37.0],[-6.0,35.6],[-16.0,23.6],[-17.5,14.7],[-7.7,4.4],[8.8,4.8],[9.1,-0.9],[-51.1,0.0],[-51.4,4.4],[-57.3,5.2],[-61.9,10.7],[-70.0,12.2],[-71.5,9.0],[-71.7,12.5],[-77.0,7.7],[-82.2,9.0],[-83.1,15.0],[-88.9,15.9],[-86.8,21.4],[-94.5,17.9],[-97.9,22.6]]]]},"properties":{"name":"North Atlantic Ocean"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-179.4,70.9],[-180.0,90.0],[180.0,90.0],[180.0,69.0],[140.8,72.9],[129.6,70.8],[124.4,73.8],[105.3,72.8],[113.9,75.9],[104.1,77.7],[80.5,73.6],[84.0,69.7],[74.8,72.8],[73.8,69.2],[78.9,67.5],[74.7,68.8],[72.0,66.0],[69.1,66.7],[73.6,68.4],[71.6,72.9],[66.7,71.1],[68.8,68.2],[43.3,68.7],[44.4,65.7],[37.4,63.8],[32.1,67.1],[41.0,67.7],[24.6,71.0],[5.1,62.2],[7.1,60.9],[-29.5,68.3],[-22.0,70.1],[-28.8,72.1],[-21.5,70.5],[-27.7,73.1],[-19.0,74.5],[-22.7,76.7],[-15.7,80.4],[-20.7,80.5],[-11.7,81.5],[-36.0,82.2],[-19.8,82.6],[-36.2,82.9],[-25.4,83.4],[-33.9,83.7],[-61.7,81.8],[-73.0,78.2],[-56.1,74.6],[-55.9,71.7],[-50.6,70.3],[-54.6,70.7],[-50.2,70.0],[-53.8,67.8],[-50.1,67.5],[-53.9,67.3],[-50.5,67.2],[-53.9,67.1],[-52.1,64.1],[-44.5,60.6],[-64.8,60.4],[-67.7,57.9],[-69.5,61.1],[-77.5,62.6],[-78.6,58.7],[-75.9,56.1],[-79.7,54.7],[-77.6,52.2],[-79.8,51.2],[-83.5,52.9],[-82.3,55.1],[-92.5,56.9],[-95.3,60.5],[-90.6,63.1],[-94.2,64.1],[-86.9,65.2],[-90.5,65.9],[-81.5,67.0],[-82.2,69.6],[-87.5,67.1],[-95.2,72.0],[-96.5,70.1],[-93.0,68.7],[-95.3,67.2],[-105.8,68.3],[-107.1,66.3],[-128.0,70.6],[-135.3,68.6],[-156.6,71.3],[-166.8,68.3],[-159.8,66.6],[-161.9,65.9],[-174.4,66.3],[-179.4,70.9]]]]},"properties":{"name":"Arctic Ocean"}}]}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[49.4,-12.1],[50.4,-15.6],[45.2,-25.6],[43.9,-17.5],[49.4,-12.1]]],[[[9.8,37.1],[10.3,33.7],[19.0,30.3],[21.7,32.9],[34.2,31.3],[34.3,27.7],[32.3,29.6],[42.5,11.5],[51.3,11.8],[39.2,-4.7],[40.6,-15.5],[34.6,-19.6],[35.5,-24.2],[25.7,-34.0],[18.4,-34.3],[15.3,-27.3],[9.7,3.9],[3.8,6.6],[-7.7,4.4],[-17.5,14.8],[-15.9,23.8],[-5.9,35.8],[9.8,37.1]]]]},"properties":{"CONTINENT":"Africa"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-180.0,69.0],[-169.7,66.1],[-180.0,65.1],[-180.0,69.0]]],[[[180.0,65.1],[174.5,64.7],[179.1,62.3],[163.6,60.0],[163.3,56.2],[156.7,50.9],[156.8,57.7],[165.6,62.4],[142.6,59.2],[135.2,54.9],[141.4,51.9],[135.4,43.8],[127.5,39.7],[129.2,35.2],[126.5,34.3],[124.4,40.1],[117.8,39.2],[122.6,37.2],[119.2,35.0],[122.1,29.9],[119.6,25.4],[106.6,21.0],[109.5,12.9],[105.1,8.6],[100.0,13.3],[99.2,9.3],[104.2,1.3],[98.3,8.3],[97.7,16.6],[94.3,16.0],[90.6,23.6],[80.3,15.7],[77.5,8.1],[72.9,22.3],[70.8,20.7],[66.4,25.6],[53.7,26.7],[49.0,30.5],[51.3,24.3],[56.4,26.4],[59.8,22.2],[55.0,17.0],[43.5,12.7],[34.6,28.1],[36.2,36.8],[26.3,38.3],[29.2,41.2],[41.4,41.4],[40.2,43.6],[47.9,41.2],[50.0,45.9],[46.5,48.4],[50.8,51.8],[61.4,50.8],[57.2,54.9],[59.6,55.6],[57.2,56.9],[59.5,64.5],[66.1,67.5],[64.9,69.3],[68.5,68.3],[66.6,71.0],[69.4,73.0],[72.8,72.7],[73.6,68.4],[69.0,66.8],[72.0,66.2],[74.6,68.8],[79.0,67.6],[73.7,69.2],[74.8,72.8],[83.1,70.1],[80.5,73.6],[104.3,77.7],[113.9,75.8],[105.2,72.8],[176.1,69.9],[180.0,69.0],[180.0,65.1]]],[[[135.0,-3.3],[137.9,-1.5],[144.5,-3.8],[150.9,-10.2],[138.9,-8.3],[131.0,-1.4],[135.0,-3.3]]],[[[125.1,1.4],[120.2,0.3],[123.4,-0.8],[119.5,-5.6],[120.0,0.7],[125.1,1.4]]],[[[95.7,5.6],[103.7,0.3],[105.7,-5.9],[95.7,5.6]]],[[[116.8,6.6],[119.0,1.0],[116.0,-3.6],[110.3,-3.0],[109.1,1.5],[116.8,6.6]]],[[[126.0,9.3],[125.4,5.6],[121.9,7.0],[126.0,9.3]]],[[[121.3,18.6],[124.1,12.5],[120.1,14.8],[121.3,18.6]]],[[[141.3,41.3],[140.3,35.1],[130.9,33.9],[141.3,41.3]]],[[[145.8,43.4],[140.0,41.4],[141.7,45.4],[145.8,43.4]]],[[[142.8,54.3],[144.7,48.6],[142.1,45.9],[142.8,54.3]]]]},"properties":{"CONTINENT":"Asia"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[142.5,-10.9],[153.2,-25.9],[150.0,-37.5],[141.6,-38.4],[136.8,-35.3],[137.8,-32.6],[136.0,-35.0],[131.1,-31.5],[115.0,-34.3],[114.0,-21.8],[126.0,-13.9],[129.7,-15.2],[132.0,-11.1],[136.6,-11.9],[135.5,-14.9],[140.5,-17.6],[142.5,-10.9]]]]},"properties":{"CONTINENT":"Australia"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[172.9,-40.5],[170.8,-45.9],[166.5,-46.0],[172.9,-40.5]]],[[[173.0,-34.4],[178.6,-37.7],[175.3,-41.6],[173.0,-34.4]]]]},"properties":{"CONTINENT":"Oceania"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-71.5,12.4],[-71.7,9.1],[-70.0,12.2],[-61.9,10.7],[-57.2,5.5],[-52.9,5.5],[-49.9,1.6],[-51.4,-2.3],[-46.8,-0.7],[-34.8,-7.2],[-41.0,-22.0],[-48.7,-25.4],[-54.1,-34.7],[-58.2,-32.4],[-56.7,-36.9],[-65.1,-40.8],[-65.8,-48.0],[-71.3,-53.9],[-75.7,-46.7],[-72.6,-44.5],[-70.3,-18.4],[-75.9,-14.7],[-81.4,-4.7],[-77.5,8.5],[-71.5,12.4]]]]},"properties":{"CONTINENT":"South America"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-180.0,-84.4],[-139.1,-85.2],[-153.0,-84.0],[-156.9,-81.3],[-145.5,-80.5],[-158.1,-77.8],[-135.3,-74.6],[-69.2,-73.2],[-66.8,-72.4],[-67.6,-67.2],[-57.3,-63.2],[-65.6,-67.6],[-59.8,-72.9],[-61.9,-74.8],[-69.4,-78.2],[-83.3,-77.1],[-73.4,-80.9],[-43.0,-79.5],[-72.0,-81.7],[-58.2,-83.0],[-30.6,-80.5],[-36.4,-78.6],[-9.8,-70.9],[38.7,-70.0],[53.8,-65.8],[69.7,-67.8],[68.9,-72.4],[88.2,-66.0],[128.8,-67.1],[134.4,-64.9],[170.5,-71.4],[162.5,-75.1],[167.3,-78.7],[158.1,-80.3],[179.6,-84.2],[180.0,-89.0],[-180.0,-89.0],[-180.0,-84.4]]],[[[-75.6,-71.6],[-70.5,-68.8],[-68.1,-71.6],[-75.6,-71.6]]]]},"properties":{"CONTINENT":"Antarctica"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[14.2,55.4],[10.7,59.9],[5.5,58.7],[7.6,61.5],[5.1,62.2],[19.2,69.8],[28.2,71.1],[41.0,67.7],[31.9,67.2],[37.4,63.8],[44.2,65.9],[43.3,68.7],[66.2,67.7],[59.7,64.8],[57.2,56.9],[61.4,50.8],[46.9,49.9],[50.0,45.9],[47.9,41.2],[36.6,45.1],[39.3,47.3],[33.9,44.4],[31.8,47.3],[28.0,42.0],[22.6,40.5],[23.2,36.4],[13.5,45.8],[18.5,40.1],[16.1,37.9],[8.7,44.4],[3.3,43.2],[-2.1,36.7],[-9.0,37.0],[-9.2,43.2],[-0.5,44.9],[-4.7,48.6],[9.8,53.5],[8.2,56.7],[14.2,55.4]]],[[[55.3,73.3],[57.6,70.7],[51.4,71.7],[55.3,73.3]]],[[[21.5,78.8],[16.6,76.6],[10.7,79.5],[21.5,78.8]]],[[[-3.0,58.6],[1.4,51.2],[-5.7,50.0],[-2.4,51.8],[-5.2,51.7],[-2.8,54.2],[-6.2,56.7],[-3.0,58.6]]],[[[-7.3,55.0],[-6.4,52.2],[-10.1,51.6],[-7.3,55.0]]]]},"properties":{"CONTINENT":"Europe"}},{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-35.4,82.9],[-11.5,81.5],[-20.8,80.5],[-15.7,80.4],[-22.7,76.7],[-19.0,74.5],[-27.7,73.1],[-21.5,70.5],[-28.6,72.1],[-22.1,70.1],[-40.1,65.6],[-43.1,60.1],[-52.0,64.2],[-50.5,65.7],[-53.5,66.0],[-50.0,67.0],[-54.0,67.1],[-50.4,67.2],[-53.9,67.3],[-50.1,67.5],[-53.8,67.6],[-50.2,70.0],[-54.6,70.7],[-50.5,70.5],[-55.9,71.7],[-56.2,74.6],[-73.1,78.2],[-60.8,81.9],[-35.4,82.9]]],[[[-55.9,51.5],[-53.1,46.6],[-59.3,47.6],[-55.9,51.5]]],[[[-94.4,71.9],[-87.5,67.1],[-81.3,69.2],[-83.8,66.2],[-91.4,66.0],[-86.9,65.1],[-93.8,64.2],[-90.6,63.1],[-94.8,59.6],[-82.3,55.1],[-81.0,51.0],[-76.5,56.3],[-77.5,62.6],[-69.5,61.1],[-69.4,57.8],[-64.5,60.3],[-57.3,54.6],[-60.4,53.3],[-55.7,53.2],[-71.0,48.4],[-64.8,49.2],[-66.8,48.0],[-61.0,45.3],[-68.8,44.6],[-76.0,37.2],[-77.1,38.9],[-75.5,35.8],[-81.5,31.1],[-80.4,25.2],[-86.3,30.5],[-97.8,27.4],[-95.9,18.8],[-87.0,21.6],[-88.9,15.9],[-83.4,15.3],[-83.4,10.4],[-77.9,7.2],[-103.5,18.3],[-115.0,32.0],[-109.4,23.2],[-112.1,24.8],[-124.3,40.3],[-122.9,49.4],[-133.8,58.5],[-147.7,61.3],[-152.0,59.3],[-149.6,61.5],[-163.4,54.8],[-156.8,59.2],[-162.2,58.7],[-166.2,61.6],[-160.8,64.7],[-168.1,65.7],[-160.2,66.4],[-166.8,68.3],[-156.6,71.4],[-95.7,66.6],[-94.4,71.9]]],[[[-61.1,82.3],[-78.1,79.4],[-74.4,79.1],[-81.1,76.1],[-89.7,76.6],[-81.5,79.0],[-86.5,80.3],[-76.8,81.4],[-92.0,81.7],[-61.1,82.3]]],[[[-86.1,73.8],[-86.8,71.0],[-81.5,73.7],[-61.3,66.6],[-68.8,66.2],[-64.6,64.0],[-69.0,63.7],[-66.1,61.9],[-77.7,64.3],[-72.3,67.2],[-90.0,71.4],[-86.1,73.8]]],[[[-85.5,65.8],[-80.2,63.8],[-87.2,63.6],[-85.5,65.8]]],[[[-106.8,73.3],[-100.9,69.8],[-113.3,68.5],[-117.4,70.0],[-111.5,70.3],[-119.1,71.8],[-106.8,73.3]]]]},"properties":{"CONTINENT":"North America"}}]}

0 commit comments

Comments
 (0)