1
0
Fork 0

WS30: Unit tests for VPBRasterRenderer

This commit is contained in:
Stuart Buchanan 2023-11-30 13:36:57 +00:00
parent f611379ce2
commit fc62588fef
6 changed files with 201 additions and 0 deletions

View file

@ -3,6 +3,7 @@ foreach( simgear_test_category
math
props
canvas
scene
structure
timing
)

View file

@ -0,0 +1,12 @@
set(TESTSUITE_SOURCES
${TESTSUITE_SOURCES}
${CMAKE_CURRENT_SOURCE_DIR}/TestSuite.cxx
${CMAKE_CURRENT_SOURCE_DIR}/testVPBRasterRender.cxx
PARENT_SCOPE
)
set(TESTSUITE_HEADERS
${TESTSUITE_HEADERS}
${CMAKE_CURRENT_SOURCE_DIR}/testVPBRasterRender.hxx
PARENT_SCOPE
)

View file

@ -0,0 +1,24 @@
/*
* Copyright (C) 2016 Edward d'Auvergne
*
* This file is part of the program FlightGear.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "testVPBRasterRender.hxx"
// Set up the tests.
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(VPBRasterRenderTests, "Simgear unit tests");

View file

@ -0,0 +1,107 @@
// do some test relating to the VPBRasterRenderer
#include <iostream>
#include <config.h>
#include <osgTerrain/TerrainTile>
#include <osg/Texture2D>
#include <osgDB/WriteFile>
#include <osgDB/Registry>
#include <simgear/scene/tgdb/CoastlineBin.hxx>
#include <simgear/scene/tgdb/VPBRasterRenderer.hxx>
#include "testVPBRasterRender.hxx"
using std::cout;
using std::endl;
using namespace simgear;
void VPBRasterRenderTests::setUp()
{
CoastlineBinList coastlineBinList;
SGPath test_data = SGPath(SGPath::fromUtf8(FG_TEST_SUITE_DATA), "/scenery/2892939_Coastline.txt");
CPPUNIT_ASSERT(test_data.exists());
osg::ref_ptr<CoastlineBin> coastlineBinA = new CoastlineBin(test_data);
coastlineBinList.push_back(coastlineBinA);
_bucket = SGBucket(2892939);
VPBRasterRenderer::addCoastlineList(_bucket, coastlineBinList);
}
// The VPBRasterRenderer unit test.
void VPBRasterRenderTests::testRaster()
{
// Generate a raster that includes some coastline
osg::ref_ptr<osgTerrain::TerrainTile> tile = new osgTerrain::TerrainTile();
float frac = 1.0/32.0;
//unsigned int x = (unsigned int) ((_bucket.get_corner(0).getLongitudeDeg() - _bucket.get_chunk_lon()) * 32.0);
//unsigned int y = (unsigned int) ((_bucket.get_corner(0).getLatitudeDeg() - _bucket.get_chunk_lat()) * 32.0);
unsigned int x = 28;
unsigned int y = 4;
SGVec3d center, bottom_left, top_right, bottom_right, top_left;
float lat[] = { _bucket.get_chunk_lat() + y * frac, _bucket.get_chunk_lat() + y * frac + frac};
float lon[] = { _bucket.get_chunk_lon() + x * frac, _bucket.get_chunk_lon() + x * frac + frac};
SGGeodesy::SGGeodToCart(SGGeod::fromDeg(_bucket.get_chunk_lon() + x * frac + 0.5 * frac, _bucket.get_chunk_lat() + y * frac + 0.5 * frac), center);
SGGeodesy::SGGeodToCart(SGGeod::fromDeg(lon[0], lat[0]), bottom_left);
SGGeodesy::SGGeodToCart(SGGeod::fromDeg(lon[1], lat[0]), bottom_right);
SGGeodesy::SGGeodToCart(SGGeod::fromDeg(lon[0], lat[1]), top_left);
SGGeodesy::SGGeodToCart(SGGeod::fromDeg(lon[1], lat[1]), top_right);
SGVec3d s = bottom_right - bottom_left;
SGVec3d t = top_left - bottom_left;
SGVec3d u = top_right - top_left;
SGVec3d v = top_right - bottom_right;
auto width = 0.5 * (length(s) + length(u));
auto height = 0.5 * (length(t) + length(v));
osgTerrain::TileID tileID = osgTerrain::TileID(6, x, y);
osgTerrain::Locator* locator = new osgTerrain::Locator();
locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
// Do some matrix math.
// We need (0,0,0) to map to bottom_left
// (1,0,0) to map to bottom_right
// (0,1,0) to map to top_left
// (1,1,0) to map to top_right
SGVec3d o = bottom_left;
osg::Matrixd matrix = osg::Matrixd(s.x(), s.y(), s.z(), 0.0,
t.x(), t.y(), t.z(), 0.0,
0.0, 0.0, 1.0, 0.0,
o.x(), o.y(), o.z(), 1.0);
locator->setTransform(matrix);
tile->setTileID(tileID);
tile->setLocator(locator);
osg::Texture2D* texture;
VPBRasterRenderer* renderer = new VPBRasterRenderer(0, tile, toOsg(center), width, height);
texture = renderer->generateCoastTexture();
CPPUNIT_ASSERT(texture != renderer->getDefaultCoastlineTexture());
// Uncomment these next lines to output the raster as a png file.
// auto image = renderer->generateCoastImage();
// osgDB::Registry* registry = osgDB::Registry::instance();
// osgDB::Options* nopt = registry->getOptions();
//osgDB::ReaderWriter::WriteResult res = registry->writeImage(*image, "/tmp/raster.png", nopt);
// Generate a raster at a higher LOD. which should generate the default raster.
tileID = osgTerrain::TileID(1, x, y);
tile->setTileID(tileID);
renderer = new VPBRasterRenderer(0, tile, toOsg(center), width, height);
texture = renderer->generateCoastTexture();
CPPUNIT_ASSERT(texture == renderer->getDefaultCoastlineTexture());
// Generate a raster where we know there is no coastline, which should generate the default raster
tileID = osgTerrain::TileID(1, 0, 0);
tile->setTileID(tileID);
renderer = new VPBRasterRenderer(0, tile, toOsg(center), width, height);
texture = renderer->generateCoastTexture();
CPPUNIT_ASSERT(texture == renderer->getDefaultCoastlineTexture());
}

View file

@ -0,0 +1,51 @@
/*
* Copyright (C) 2023 Stuart Buchanan
*
* This file is part of the program FlightGear.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _FG_SCENE_VPBRASTERRENDER_SIMGEAR_UNIT_TESTS_HXX
#define _FG_SCENE_VPBRASTERRENDER_SIMGEAR_UNIT_TESTS_HXX
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestFixture.h>
#include <simgear/bucket/newbucket.hxx>
// The unit tests.
class VPBRasterRenderTests : public CppUnit::TestFixture
{
// Set up the test suite.
CPPUNIT_TEST_SUITE(VPBRasterRenderTests);
CPPUNIT_TEST(testRaster);
CPPUNIT_TEST_SUITE_END();
SGBucket _bucket;
public:
// Set up function for each test.
void setUp();
// Clean up after each test.
void tearDown() {}
// The tests.
void testRaster();
};
#endif // _FG_SCENE_VPBRASTERRENDER_SIMGEAR_UNIT_TESTS_HXX

View file

@ -0,0 +1,6 @@
-3.0733006 56.1500263 -3.0728519 56.1504419 -3.0724866 56.1506483 -3.0716570 56.1512179 -3.0709526 56.1516103 -3.0698517 56.1521479 -3.0691786 56.1524095 -3.0689073 56.1526158 -3.0683646 56.1535865 -3.0678116 56.1543944 -3.0676057 56.1546419 -3.0667552 56.1553975 -3.0665413 56.1556213 -3.0659882 56.1562170 -3.0658474 56.1563274 -3.0654091 56.1567720 -3.0654238 56.1568503 -3.0651843 56.1570566 -3.0647637 56.1574189 -3.0643601 56.1576744 -3.0640744 56.1579066 -3.0638727 56.1581120 -3.0636557 56.1582490 -3.0634522 56.1583718 -3.0633156 56.1584153 -3.0632239 56.1585243 -3.0630915 56.1586026 -3.0630491 56.1586706 -3.0628999 56.1587682 -3.0628255 56.1587850 -3.0624691 56.1590072 -3.0624424 56.1590844 -3.0623992 56.1591084 -3.0622399 56.1591968 -3.0618303 56.1594251 -3.0611892 56.1596645 -3.0606143 56.1598409 -3.0602153 56.1599858 -3.0599631 56.1600924 -3.0597464 56.1602328 -3.0596259 56.1603485 -3.0591538 56.1606612 -3.0587972 56.1609168 -3.0584723 56.1611335 -3.0581462 56.1613102 -3.0578076 56.1614750 -3.0574827 56.1616003 -3.0573707 56.1616688 -3.0569845 56.1619830 -3.0566786 56.1622355 -3.0564781 56.1623381 -3.0562413 56.1624407 -3.0561100 56.1624444 -3.0560869 56.1625079 -3.0559855 56.1625516 -3.0559172 56.1625436 -3.0558203 56.1625839 -3.0558388 56.1626453 -3.0557367 56.1627518 -3.0556181 56.1628439 -3.0554519 56.1629315 -3.0552332 56.1630150 -3.0551051 56.1630277 -3.0550945 56.1631039 -3.0547600 56.1632831 -3.0543714 56.1635131 -3.0542608 56.1635129 -3.0542473 56.1635406 -3.0538331 56.1637805 -3.0537283 56.1638504 -3.0536333 56.1639366 -3.0535604 56.1639567 -3.0535244 56.1640251 -3.0531983 56.1641322 -3.0527961 56.1642592 -3.0525337 56.1642833 -3.0523761 56.1642729 -3.0522280 56.1642353 -3.0522220 56.1643861 -3.0520949 56.1643719 -3.0519179 56.1644009 -3.0518936 56.1644381 -3.0518078 56.1644369 -3.0517313 56.1644877 -3.0515811 56.1645584 -3.0515361 56.1646146 -3.0512008 56.1648168 -3.0508665 56.1649805 -3.0505125 56.1651929 -3.0500088 56.1655478 -3.0492634 56.1659901 -3.0487022 56.1662874 -3.0486154 56.1662893 -3.0485442 56.1663527 -3.0482622 56.1664867 -3.0473758 56.1669772 -3.0469750 56.1671747 -3.0462916 56.1675494 -3.0454601 56.1678217 -3.0448604 56.1680203 -3.0443276 56.1681395 -3.0437569 56.1681980 -3.0433375 56.1682590 -3.0431041 56.1682584 -3.0427317 56.1682089 -3.0421502 56.1681018 -3.0416704 56.1679776 -3.0412444 56.1677347 -3.0405005 56.1673865 -3.0401451 56.1672777 -3.0396338 56.1671964 -3.0392850 56.1671126 -3.0387752 56.1668606 -3.0386735 56.1667696 -3.0386087 56.1666370 -3.0385398 56.1664822 -3.0384608 56.1663873 -3.0383567 56.1663198 -3.0382619 56.1662775 -3.0381437 56.1662526 -3.0381287 56.1662113 -3.0380560 56.1662042 -3.0380577 56.1662315 -3.0373610 56.1664190 -3.0363557 56.1666629 -3.0363772 56.1665898 -3.0362544 56.1665652 -3.0362214 56.1666328 -3.0355756 56.1669937 -3.0350651 56.1672273 -3.0344474 56.1675686 -3.0339593 56.1678801 -3.0335998 56.1682101 -3.0330368 56.1687114 -3.0325297 56.1690890 -3.0319756 56.1693895 -3.0311993 56.1696905 -3.0306781 56.1698546 -3.0303246 56.1700074 -3.0300283 56.1701897 -3.0298597 56.1703654 -3.0295570 56.1706075 -3.0292252 56.1708309 -3.0290704 56.1709183 -3.0280600 56.1711768 -3.0276971 56.1714747 -3.0275544 56.1715856 -3.0273125 56.1716748 -3.0268468 56.1718046 -3.0262308 56.1719065 -3.0257847 56.1720417 -3.0253025 56.1721636 -3.0247229 56.1722475 -3.0241759 56.1723398 -3.0236014 56.1724056 -3.0231025 56.1724625 -3.0226197 56.1725314 -3.0222032 56.1726771 -3.0217456 56.1729043 -3.0213752 56.1730776 -3.0209793 56.1732358 -3.0205614 56.1733669 -3.0201961 56.1735165 -3.0198351 56.1737080 -3.0195271 56.1739307 -3.0191337 56.1741692 -3.0185278 56.1743139 -3.0179473 56.1744034 -3.0176578 56.1743559 -3.0176430 56.1746569 -3.0175981 56.1760626 -3.0161513 56.1775147 -3.0165410 56.1777168 -3.0154236 56.1785316 -3.0151355 56.1788640 -3.0141680 56.1795850 -3.0139370 56.1797130 -3.0137090 56.1798410 -3.0134780 56.1799690 -3.0129994 56.1803219 -3.0125600 56.1806090 -3.0112963 56.1811129 -3.0109473 56.1810926 -3.0089440 56.1809759 -3.0087600 56.1808528 -3.0087517 56.1807159 -3.0086383 56.1807195 -3.0078204 56.1805228 -3.0078947 56.1803335 -3.0079712 56.1800430 -3.0080195 56.1797517 -3.0080458 56.1793949 -3.0080967 56.1793647 -3.0080991 56.1793034 -3.0080533 56.1792812 -3.0080012 56.1792763 -3.0079591 56.1792805 -3.0079297 56.1793026 -3.0079155 56.1793812 -3.0078892 56.1796513 -3.0078534 56.1798768 -3.0077986 56.1801127 -3.0077456 56.1802984 -3.0076910 56.1804602 -3.0076603 56.1805024 -3.0075404 56.1806181 -3.0074936 56.1806648 -3.0073838 56.1808231 -3.0071620 56.1810995 -3.0064882 56.1818003 -3.0059279 56.1823901 -3.0053893 56.1829578 -3.0050763 56.1832424
-3.0050763 56.1832424 -3.0048923 56.1833988 -3.0047367 56.1835167 -3.0045543 56.1836436 -3.0043526 56.1837754 -3.0041461 56.1839053 -3.0039616 56.1840063 -3.0036928 56.1841337 -3.0032931 56.1842964 -3.0028506 56.1844561 -3.0023039 56.1846587 -3.0018018 56.1848606 -3.0014027 56.1850333 -3.0008979 56.1852636 -3.0005118 56.1854531 -3.0002746 56.1855788
-3.1485675 56.1143385 -3.1484460 56.1143833 -3.1474916 56.1152179 -3.1465544 56.1162064 -3.1459560 56.1168528 -3.1452502 56.1174114 -3.1448877 56.1176277 -3.1446603 56.1177201 -3.1445409 56.1177979 -3.1441419 56.1179532 -3.1434180 56.1183204 -3.1425139 56.1188121 -3.1421752 56.1190149 -3.1418131 56.1191742 -3.1414902 56.1193072 -3.1411912 56.1194289 -3.1408911 56.1195284 -3.1402170 56.1196774 -3.1398828 56.1197223 -3.1394457 56.1197392 -3.1390548 56.1197276 -3.1386537 56.1197087 -3.1382502 56.1196760 -3.1380069 56.1196325 -3.1377209 56.1195726 -3.1374844 56.1194775 -3.1373108 56.1194169 -3.1371579 56.1193610 -3.1370281 56.1192663 -3.1367413 56.1191871 -3.1361145 56.1190923 -3.1361014 56.1187268 -3.1360223 56.1189424 -3.1356084 56.1189568 -3.1349343 56.1191489 -3.1346735 56.1191425 -3.1346352 56.1189750 -3.1344007 56.1190805 -3.1341423 56.1191716 -3.1339358 56.1193455 -3.1337280 56.1193677 -3.1336687 56.1192170 -3.1336054 56.1192144 -3.1335257 56.1192203 -3.1334704 56.1193763 -3.1328915 56.1193502 -3.1329897 56.1192754 -3.1329244 56.1191499 -3.1328533 56.1192704 -3.1327516 56.1192788 -3.1326889 56.1192370 -3.1325737 56.1193778 -3.1323968 56.1193974 -3.1324094 56.1193392 -3.1323827 56.1193501 -3.1323678 56.1193784 -3.1323249 56.1193821 -3.1322997 56.1193563 -3.1322606 56.1193454 -3.1322427 56.1193328 -3.1321999 56.1193490 -3.1321997 56.1194219 -3.1321646 56.1194301 -3.1317216 56.1194393 -3.1315999 56.1192667 -3.1315624 56.1192668 -3.1315456 56.1195477 -3.1304148 56.1202478 -3.1304066 56.1203652 -3.1304947 56.1204111 -3.1302694 56.1205560 -3.1300667 56.1206083 -3.1299247 56.1205610 -3.1297690 56.1205533 -3.1295782 56.1206712 -3.1293830 56.1206985 -3.1293346 56.1207759 -3.1293999 56.1208638 -3.1294563 56.1210152 -3.1293938 56.1211163 -3.1292513 56.1212160 -3.1289433 56.1213178 -3.1283435 56.1214147 -3.1280678 56.1214095 -3.1273403 56.1214310 -3.1268038 56.1213396 -3.1266658 56.1212363 -3.1266210 56.1211619 -3.1264271 56.1211700 -3.1263795 56.1213217 -3.1261433 56.1214676 -3.1258602 56.1216451 -3.1253723 56.1218230 -3.1249360 56.1220358 -3.1247427 56.1219085 -3.1244637 56.1216451 -3.1243406 56.1216421 -3.1243392 56.1216956 -3.1246946 56.1219966 -3.1247189 56.1221598 -3.1245832 56.1223019 -3.1242908 56.1223303 -3.1243189 56.1224044 -3.1245294 56.1223829 -3.1245937 56.1224039 -3.1246186 56.1224477 -3.1245139 56.1226378 -3.1246346 56.1228082 -3.1248323 56.1229039 -3.1248101 56.1232705 -3.1247536 56.1235639 -3.1247292 56.1235796 -3.1244040 56.1235644 -3.1241225 56.1232033 -3.1239987 56.1231069 -3.1243912 56.1228717 -3.1244549 56.1228967 -3.1245071 56.1228677 -3.1241571 56.1224107 -3.1240461 56.1224617 -3.1241958 56.1227219 -3.1241647 56.1228347 -3.1239358 56.1229938 -3.1234434 56.1229019 -3.1235043 56.1225495 -3.1235047 56.1220108 -3.1235627 56.1216622 -3.1240989 56.1215219 -3.1240890 56.1214549 -3.1240045 56.1213966 -3.1238347 56.1213897 -3.1237088 56.1214482 -3.1236637 56.1215070 -3.1235568 56.1215446 -3.1234117 56.1216152 -3.1233058 56.1220159 -3.1231250 56.1221117 -3.1220208 56.1232294 -3.1215981 56.1234975 -3.1209221 56.1237687 -3.1203519 56.1239430 -3.1199126 56.1242083 -3.1195153 56.1243383 -3.1188103 56.1251497 -3.1189153 56.1253654 -3.1189039 56.1254827 -3.1187659 56.1256008 -3.1185086 56.1257332 -3.1184408 56.1259502 -3.1182343 56.1262459 -3.1180175 56.1267462 -3.1176728 56.1272607 -3.1172229 56.1278562 -3.1167020 56.1282564 -3.1162685 56.1285465 -3.1156930 56.1291374 -3.1154007 56.1292556 -3.1151691 56.1294572 -3.1147482 56.1295850 -3.1140621 56.1299344 -3.1133760 56.1301783 -3.1125315 56.1305927 -3.1122036 56.1307038 -3.1117686 56.1306839 -3.1112082 56.1307823 -3.1110600 56.1308622 -3.1110438 56.1311043 -3.1106114 56.1315738 -3.1101347 56.1319382 -3.1090447 56.1325461 -3.1084923 56.1327671 -3.1081579 56.1328497 -3.1076540 56.1328937 -3.1069731 56.1328874 -3.1066501 56.1329025 -3.1055404 56.1332657 -3.1050013 56.1334912 -3.1047994 56.1336319 -3.1045280 56.1339865 -3.1042445 56.1343425
-3.1042445 56.1343425 -3.1040040 56.1345886 -3.1034643 56.1349923 -3.1030004 56.1353221 -3.1026427 56.1356834 -3.1023019 56.1360448 -3.1019864 56.1363824 -3.1017742 56.1366302 -3.1015860 56.1368693 -3.1014513 56.1369441 -3.1011564 56.1371804 -3.1009220 56.1373249 -3.1007546 56.1375123 -3.1005101 56.1376542 -3.0996834 56.1380809 -3.0994490 56.1381943 -3.0991859 56.1382318 -3.0990349 56.1383063 -3.0988532 56.1383477 -3.0983816 56.1386275 -3.0982093 56.1386218 -3.0980213 56.1387329 -3.0978525 56.1387867 -3.0977432 56.1389447 -3.0974270 56.1391094 -3.0970236 56.1394077 -3.0965611 56.1396425 -3.0961059 56.1397968 -3.0956976 56.1399018 -3.0948998 56.1400315 -3.0942530 56.1400843 -3.0935851 56.1400503 -3.0933159 56.1399745 -3.0930922 56.1399334 -3.0927491 56.1399196 -3.0924821 56.1398936 -3.0920700 56.1397920 -3.0915872 56.1396653 -3.0913760 56.1396447 -3.0910290 56.1395850 -3.0909732 56.1396567 -3.0908951 56.1397096 -3.0907439 56.1397438 -3.0899682 56.1397445 -3.0898316 56.1394608 -3.0895666 56.1395047 -3.0895108 56.1394840 -3.0894880 56.1394641 -3.0895087 56.1394320 -3.0895570 56.1394119 -3.0897917 56.1393812 -3.0897669 56.1393264 -3.0902395 56.1392767 -3.0909896 56.1393662 -3.0910272 56.1393559 -3.0910081 56.1392910 -3.0902753 56.1391793 -3.0897389 56.1392529 -3.0888153 56.1393412 -3.0879128 56.1394153 -3.0873051 56.1394623 -3.0869213 56.1394698 -3.0860131 56.1394468 -3.0859182 56.1394120 -3.0855287 56.1394182 -3.0849066 56.1394880 -3.0845470 56.1395716 -3.0842338 56.1396944 -3.0834766 56.1402690 -3.0830362 56.1406364 -3.0829138 56.1407929 -3.0827932 56.1410764 -3.0827462 56.1411867 -3.0824286 56.1416258 -3.0820714 56.1419518 -3.0818906 56.1421228 -3.0815153 56.1425123 -3.0811543 56.1428245 -3.0810262 56.1430080 -3.0806348 56.1435365 -3.0803657 56.1438136 -3.0801257 56.1440198 -3.0795935 56.1443444 -3.0792160 56.1446034 -3.0789762 56.1449023 -3.0787510 56.1452595 -3.0784911 56.1455760 -3.0782152 56.1458394 -3.0779210 56.1460870 -3.0777078 56.1462462 -3.0774826 56.1463753 -3.0773054 56.1464997 -3.0772610 56.1465743 -3.0772146 56.1466827 -3.0771007 56.1467675 -3.0769211 56.1468584 -3.0766563 56.1469456 -3.0763933 56.1470002 -3.0764282 56.1470602 -3.0765639 56.1470959 -3.0763897 56.1471678 -3.0761959 56.1472809 -3.0760593 56.1474211 -3.0759009 56.1477117 -3.0754921 56.1482098 -3.0750172 56.1487533 -3.0745633 56.1491428 -3.0739685 56.1495816 -3.0733006 56.1500263
-3.0002746 56.1855788 -2.9997050 56.1859870 -2.9976066 56.1877293 -2.9970182 56.1882765 -2.9966121 56.1886824 -2.9965093 56.1888593 -2.9963962 56.1891703 -2.9963406 56.1893233 -2.9966845 56.1905659 -2.9968734 56.1908132 -2.9969983 56.1907908 -2.9971822 56.1909975 -2.9970808 56.1910269 -2.9972631 56.1911770 -2.9975612 56.1913695 -2.9980980 56.1916210 -2.9985025 56.1917456 -2.9986878 56.1917331 -3.0001535 56.1919587 -3.0007463 56.1919050 -3.0007137 56.1917989 -3.0009456 56.1916988 -3.0011011 56.1917185 -3.0011951 56.1917843 -3.0012385 56.1918147 -3.0014470 56.1919816 -3.0015336 56.1920510 -3.0012872 56.1921360 -2.9998303 56.1923202 -2.9989616 56.1924302 -2.9982947 56.1925008 -2.9981752 56.1925119 -2.9980804 56.1925093 -2.9977298 56.1924598 -2.9974754 56.1923949 -2.9971873 56.1922694 -2.9970362 56.1923415 -2.9967675 56.1924441 -2.9965408 56.1923495 -2.9964192 56.1923542 -2.9961997 56.1924197 -2.9956720 56.1926247 -2.9950134 56.1929189 -2.9944471 56.1931938 -2.9939089 56.1934758 -2.9934811 56.1937036 -2.9932234 56.1938586 -2.9926867 56.1941373 -2.9923834 56.1942956 -2.9921266 56.1944296 -2.9919549 56.1945258 -2.9909589 56.1951586 -2.9904655 56.1954844 -2.9902162 56.1956490 -2.9893094 56.1962321 -2.9886079 56.1966724 -2.9882508 56.1969070 -2.9880523 56.1970374 -2.9877267 56.1972442 -2.9874447 56.1974264 -2.9871071 56.1976458 -2.9868314 56.1978050 -2.9866276 56.1979522 -2.9864845 56.1980751 -2.9864253 56.1981845 -2.9863262 56.1982442 -2.9861525 56.1983317 -2.9857952 56.1985751 -2.9852708 56.1988913 -2.9847539 56.1992083 -2.9845664 56.1993232 -2.9838637 56.1997562 -2.9831671 56.2001908 -2.9826414 56.2005237 -2.9823319 56.2006578 -2.9819396 56.2008278 -2.9812407 56.2011110 -2.9804888 56.2014032 -2.9794891 56.2017801 -2.9784334 56.2021738 -2.9779202 56.2024259 -2.9773861 56.2026992 -2.9772631 56.2027622 -2.9765937 56.2031560 -2.9757774 56.2036376 -2.9752172 56.2039728 -2.9742813 56.2044631 -2.9733730 56.2049103 -2.9725057 56.2052861 -2.9719744 56.2055136 -2.9718119 56.2055647 -2.9715848 56.2056415
-3.0002746 56.1855788 -2.9997050 56.1859870 -2.9976066 56.1877293 -2.9970182 56.1882765 -2.9966121 56.1886824 -2.9965093 56.1888593 -2.9963962 56.1891703 -2.9963406 56.1893233 -2.9966845 56.1905659 -2.9968734 56.1908132 -2.9969983 56.1907908 -2.9971822 56.1909975 -2.9970808 56.1910269 -2.9972631 56.1911770 -2.9975612 56.1913695 -2.9980980 56.1916210 -2.9985025 56.1917456 -2.9986878 56.1917331 -3.0001535 56.1919587 -3.0007463 56.1919050 -3.0007137 56.1917989 -3.0009456 56.1916988 -3.0011011 56.1917185 -3.0011951 56.1917843 -3.0012385 56.1918147 -3.0014470 56.1919816 -3.0015336 56.1920510 -3.0012872 56.1921360 -2.9998303 56.1923202 -2.9989616 56.1924302 -2.9982947 56.1925008 -2.9981752 56.1925119 -2.9980804 56.1925093 -2.9977298 56.1924598 -2.9974754 56.1923949 -2.9971873 56.1922694 -2.9970362 56.1923415 -2.9967675 56.1924441 -2.9965408 56.1923495 -2.9964192 56.1923542 -2.9961997 56.1924197 -2.9956720 56.1926247 -2.9950134 56.1929189 -2.9944471 56.1931938 -2.9939089 56.1934758 -2.9934811 56.1937036 -2.9932234 56.1938586 -2.9926867 56.1941373 -2.9923834 56.1942956 -2.9921266 56.1944296 -2.9919549 56.1945258 -2.9909589 56.1951586 -2.9904655 56.1954844 -2.9902162 56.1956490 -2.9893094 56.1962321 -2.9886079 56.1966724 -2.9882508 56.1969070 -2.9880523 56.1970374 -2.9877267 56.1972442 -2.9874447 56.1974264 -2.9871071 56.1976458 -2.9868314 56.1978050 -2.9866276 56.1979522 -2.9864845 56.1980751 -2.9864253 56.1981845 -2.9863262 56.1982442 -2.9861525 56.1983317 -2.9857952 56.1985751 -2.9852708 56.1988913 -2.9847539 56.1992083 -2.9845664 56.1993232 -2.9838637 56.1997562 -2.9831671 56.2001908 -2.9826414 56.2005237 -2.9823319 56.2006578 -2.9819396 56.2008278 -2.9812407 56.2011110 -2.9804888 56.2014032 -2.9794891 56.2017801 -2.9784334 56.2021738 -2.9779202 56.2024259 -2.9773861 56.2026992 -2.9772631 56.2027622 -2.9765937 56.2031560 -2.9757774 56.2036376 -2.9752172 56.2039728 -2.9742813 56.2044631 -2.9733730 56.2049103 -2.9725057 56.2052861 -2.9719744 56.2055136 -2.9718119 56.2055647 -2.9715848 56.2056415