[Pkg-javascript-commits] [node-tilelive] 01/25: Imported Upstream version 4.5.0

Jérémy Lal kapouer at alioth.debian.org
Sat Aug 31 16:11:20 UTC 2013


This is an automated email from the git hooks/post-receive script.

kapouer pushed a commit to branch master
in repository node-tilelive.

commit 95e26c10119f4894335e97ee1a71fe62333b74cd
Author: Jérémy Lal <kapouer at melix.org>
Date:   Sat Aug 31 15:58:54 2013 +0200

    Imported Upstream version 4.5.0
---
 .npmignore => .gitignore             |    0
 CHANGELOG.md                         |   74 +++++
 Makefile                             |   12 +-
 README.md                            |   50 +---
 bin/benchmark.sh                     |   29 --
 bin/copy                             |  177 +++++++-----
 bin/tilelive                         |  187 -------------
 examples/data/world_merc.dbf         |  Bin 0 -> 24641 bytes
 examples/data/world_merc.index       |  Bin 0 -> 9092 bytes
 examples/data/world_merc.json        |  495 ++++++++++++++++++++++++++++++++++
 examples/data/world_merc.prj         |    1 +
 examples/data/world_merc.shp         |  Bin 0 -> 428328 bytes
 examples/data/world_merc.shx         |  Bin 0 -> 2060 bytes
 examples/data/world_merc_license.txt |   85 ++++++
 lib/copytask.js                      |  179 ++++++++----
 lib/filescheme.js                    |   43 ++-
 lib/pyramidscheme.js                 |    7 +-
 lib/scanlinescheme.js                |   11 +-
 lib/scheme.js                        |    5 +-
 lib/tilelive.js                      |  235 +++-------------
 package.json                         |   17 +-
 test/copy.mbtiles-journal            |  Bin 1544 -> 0 bytes
 test/copy.test.js                    |   25 +-
 test/file.test.js                    |   75 ++++++
 test/fixtures/filescheme.flat        |    5 +
 test/fixtures/filescheme.json        |    5 +
 test/fixtures/resume.job             |  158 +++++++++++
 test/fixtures/resume.mbtiles         |  Bin 0 -> 16384 bytes
 test/list.test.js                    |    1 +
 test/load.test.js                    |   26 +-
 test/resume.test.js                  |   60 +++++
 31 files changed, 1328 insertions(+), 634 deletions(-)

diff --git a/.npmignore b/.gitignore
similarity index 100%
rename from .npmignore
rename to .gitignore
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..69db88c
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,74 @@
+## 4.4.0
+
+* Remove deprecated tilelive.copy method in favor of CopyTask.
+* Rewrite tilelive-copy with better interface and detection of protocols.
+
+## 4.3.3
+
+* Remove uncaughtException handler from CopyTask.
+
+## 4.3.2
+
+* More lenient validation of north and south bbox values.
+* CopyTask treats 'Tile|Grid does not exist' errors as skips.
+* CopyTask can now accept loaded tilelive sources.
+* Add "all" and "clean" rules to Makefile, by @strk.
+
+## 4.3.1
+
+* Node v0.8 support.
+
+## 4.3.0
+
+* Bug fixes for CopyTask.
+* Removes use of `putDuplicateTile` from TileSink interface.
+
+## 4.2.0
+
+* Rewritten copy command with swappable schemes.
+
+## 4.1.0
+
+* Tilesources are not verify()'ed automatically during info(). Clients must now
+  do this.
+
+## 4.0.0
+
+* Updated to use Tilestore/Tilesink/Tilesource interface
+* Uses the TileJSON format internally
+* Switched to Tilestore URIs
+* Interfaces updated to XYZ. Order of parameters is now z, x, y
+* Added copy command
+
+## 3.0.0
+
+Split out `tilelive-mapnik`, `mbtiles` backends.
+
+## 2.0.3
+
+This release is all distribution fixes:
+
+* Uses devDependencies to support docs and testing
+* Fixes test that depended on node-get
+* Removes tilelive_server example: replaced by [geode](https://github.com/mapbox/geode).
+
+## 2.0.2
+
+* Now uses and requires node-mapnik 0.3.0
+
+## 2.0.1
+
+Minor release: adds `Pool` argument to `Tile.getMap()`, to let users dispose of used maps.
+
+## 2.0.0
+
+* `node-sqlite3` replaces `node-sqlite` for better performance and stability.
+* deep render grid support - `layer.json` now supports legends and interaction.
+* `server.js` removed from examples
+* `tilelive_server.js` added to `bin/`
+
+## 1.1.0
+
+* Tiles no longer accept `tile` as a scheme. TMS or XYZ are required; TMS is default.
+* options.mapfile is now options.datasource, and can accept a Carto MML object.
+
diff --git a/Makefile b/Makefile
index e1902b2..137b257 100644
--- a/Makefile
+++ b/Makefile
@@ -4,10 +4,16 @@
 
 docco = ./node_modules/docco/bin/docco
 
+all:
+	npm install
+
+clean:
+	rm -rf node_modules/*
+	: TODO clean docs
+
 test:
-	mocha -R spec
+	./node_modules/mocha/bin/_mocha -R spec -t 10000
 
-doc:
-	$(docco) lib/tilelive/*.js
+check: test
 
 .PHONY: test
diff --git a/README.md b/README.md
index 10edc86..b8fee29 100644
--- a/README.md
+++ b/README.md
@@ -70,52 +70,4 @@ To run the tests
 
 ## Usage
 
-See `examples` or [geode](https://github.com/mapbox/geode) for examples of a tilelive powered server.
-
-# Changelog
-
-## 4.1.0
-
-* Tilesources are not verify()'ed automatically during info(). Clients must now
-  do this.
-
-## 4.0.0
-
-* Updated to use Tilestore/Tilesink/Tilesource interface
-* Uses the TileJSON format internally
-* Switched to Tilestore URIs
-* Interfaces updated to XYZ. Order of parameters is now z, x, y
-* Added copy command
-
-## 3.0.0
-
-Split out `tilelive-mapnik`, `mbtiles` backends.
-
-## 2.0.3
-
-This release is all distribution fixes:
-
-* Uses devDependencies to support docs and testing
-* Fixes test that depended on node-get
-* Removes tilelive_server example: replaced by [geode](https://github.com/mapbox/geode).
-
-## 2.0.2
-
-* Now uses and requires node-mapnik 0.3.0
-
-## 2.0.1
-
-Minor release: adds `Pool` argument to `Tile.getMap()`, to let users dispose of used maps.
-
-## 2.0.0
-
-* `node-sqlite3` replaces `node-sqlite` for better performance and stability.
-* deep render grid support - `layer.json` now supports legends and interaction.
-* `server.js` removed from examples
-* `tilelive_server.js` added to `bin/`
-
-## 1.1.0
-
-* Tiles no longer accept `tile` as a scheme. TMS or XYZ are required; TMS is default.
-* options.mapfile is now options.datasource, and can accept a Carto MML object.
-
+See `examples` for examples of a tilelive powered server.
diff --git a/bin/benchmark.sh b/bin/benchmark.sh
deleted file mode 100755
index e9d4de0..0000000
--- a/bin/benchmark.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-STYLESHEET="/home/mapbox/benchmarking/data/devseed-appliance.xml"
-BBOX="-77.1292,38.8506,-76.9541,38.9644"
-
-for buffersize in 128 0 256
-do
-  for metatile in 2 3 4
-  do
-    for zoom in 15 16 17
-    do
-      for concurrency in 25 50 100 200
-      do
-        rm out.mbtiles
-        bin/tilelive copy "mapnik://$STYLESHEET?metatile=$metatile&bufferSize=$buffersize" \
-            mbtiles://./out.mbtiles \
-            --bbox="$BBOX" \
-            --zoom=$zoom \
-            --copy-tiles \
-            --concurrency=$concurrency \
-            --benchmark
-
-        if [ $? -ne 0 ] ; then exit ; fi
-      done
-    done
-  done
-done
-
-
diff --git a/bin/copy b/bin/copy
index a531ae4..1f0d7e9 100755
--- a/bin/copy
+++ b/bin/copy
@@ -1,85 +1,106 @@
 #!/usr/bin/env node
 var fs = require('fs');
+var url = require('url');
 var util = require('util');
 var path = require('path');
 var Scheme = require('../lib/scheme');
 var CopyTask = require('../lib/copytask');
-
+var optimist = require('optimist');
 var tilelive = require('../');
-require('../lib/dummyprotocol').registerProtocols(tilelive);
-require('tilelive-mapnik').registerProtocols(tilelive);
-require('bigtiles').registerProtocols(tilelive);
 
-var optimist = require('optimist');
 var argv = optimist
-    .options('job', { 'alias': 'j', 'describe': 'Job file (will be resumed if it exists)', 'demand': true })
-    .options('scheme', { 'alias': 's', 'describe': 'One of [file, scanline, pyramid]' })
-    .options('from', { 'describe': 'Source tilesource URI' })
-    .options('to', { 'describe': 'Destination tilesink URI' })
-    .options('list', { 'alias': 'l', 'describe': 'If scheme=file, the coordinates file' })
-    .options('concurrency', { 'alias': 'c', 'default': 8, 'describe': 'Number of parallel copy operations' })
-    .options('bbox', { 'describe': 'WGS84 bounding box' })
-    .options('minzoom', { 'describe': 'Zoom level from which to start copying (inclusive)' })
-    .options('maxzoom', { 'describe': 'Zoom level until which to copy (inclusive)' })
-    .options('metatile', { 'describe': 'Metatile side length in number of tiles' })
+    .options('job', {
+        'alias': 'j',
+        'describe': 'Job file (will be resumed if it exists)'
+    })
+    .options('scheme', {
+        'alias': 's',
+        'default': 'scanline',
+        'describe': 'One of [file, scanline, pyramid]'
+    })
+    .options('list', {
+        'alias': 'l',
+        'describe': 'If scheme=file, the coordinates file'
+    })
+    .options('concurrency', {
+        'alias': 'c',
+        'default': 8,
+        'describe': 'Number of parallel copy operations'
+    })
+    .options('bbox', {
+        'describe': 'WGS84 bounding box',
+        'default': [-180, -85.0511, 180, 85.0511]
+    })
+    .options('minzoom', {
+        'describe': 'Zoom level from which to start copying (inclusive)',
+        'default': 0
+    })
+    .options('maxzoom', {
+        'describe': 'Zoom level until which to copy (inclusive)',
+        'default': 8
+    })
+    .options('metatile', {
+        'describe': 'Metatile side length in number of tiles',
+        'default': 1
+    })
     .argv;
 
-argv.job = path.resolve(argv.job);
-
-try {
-    var job = fs.readFileSync(argv.job, 'utf8');
-} catch(err) {
-    if (err.code !== 'EBADF') throw err;
-}
-
-if (job) {
-    job = JSON.parse(job);
+if (argv.job) {
+    try {
+        var job = JSON.parse(fs.readFileSync(path.resolve(argv.job), 'utf8'));
+    } catch(err) {
+        if (err.code !== 'EBADF' && err.code !== 'ENOENT') throw err;
+    }
     console.warn('Continuing job ' + argv.job);
+    auto(job.from);
+    auto(job.to);
     var scheme = Scheme.unserialize(job.scheme);
-    var task = new CopyTask(job.source, job.sink, scheme, argv.job);
+    var task = new CopyTask(job.from, job.to, scheme, argv.job);
 } else {
-    optimist.demand('scheme').demand('from').demand('to').argv;
-    console.warn('Creating new job ' + argv.job);
+    optimist.demand(0).demand(1).argv;
+    if (argv.bbox && !Array.isArray(argv.bbox))
+        argv.bbox = argv.bbox.split(',').map(parseFloat);
+    var from = auto(argv._[0]);
+    var to = auto(argv._[1]);
     var scheme = Scheme.create(argv.scheme, argv);
-    var task = new CopyTask(argv.from, argv.to, scheme, argv.job);
+    var task = new CopyTask(from, to, scheme, argv.job);
 }
 
-var errorfile = path.join(path.dirname(argv.job), path.basename(argv.job) + '-failed');
-console.warn('Writing errors to ' + errorfile);
-
-fs.open(errorfile, 'a', function(err, fd) {
+task.on('progress', report);
+task.on('finished', function() {
+    console.log('\nFinished.');
+    process.exit(0);
+});
+task.start(function(err) {
     if (err) throw err;
-
-    task.on('error', function(err, tile) {
-        util.print('\r\033[K');
-        console.warn(tile.toString() + ': ' + err.message);
-        fs.write(fd, JSON.stringify(tile) + '\n');
-        report(task.stats.snapshot());
-    });
-
-    task.start(function(err) {
+    task.source.getInfo(function(err, info) {
         if (err) throw err;
+        task.sink.putInfo(info, function(err) {
+            if (err) throw err;
+        });
     });
 });
 
-
-task.on('progress', report);
-
-task.on('finished', function() {
-    console.warn('\nfinished');
-});
-
-
 function report(stats) {
-    util.print('\r\033[K');
-    util.print(formatDuration(stats.date - task.started));
-    util.print('\tcopied: ' + formatNumber(stats.processed) + '/' + formatNumber(stats.total));
-    util.print('\tspeed: ' + formatNumber(stats.speed) + '/s');
-    util.print('\tremaining: ' + formatNumber(stats.remaining));
-    util.print('\tunique: ' + formatNumber(stats.unique));
-    util.print('\tdupes: ' + formatNumber(stats.duplicate));
-    util.print('\tskipped: ' + formatNumber(stats.skipped));
-    util.print('\tfailed: ' + formatNumber(stats.failed));
+    var progress = stats.processed / stats.total;
+    var remaining = timeRemaining(progress, task.started);
+    util.print(util.format('\r\033[K[%s] %s%% %s/%s @ %s/s | ✓ %s ■ %s □ %s ✕ %s | %s left',
+        pad(formatDuration(stats.date - task.started), 4, true),
+        pad(((progress || 0) * 100).toFixed(4), 8, true),
+        pad(formatNumber(stats.processed),6,true),
+        pad(formatNumber(stats.total),6,true),
+        pad(formatNumber(stats.speed),4,true),
+        formatNumber(stats.unique),
+        formatNumber(stats.duplicate),
+        formatNumber(stats.skipped),
+        formatNumber(stats.failed),
+        formatDuration(remaining)
+    ));
+}
+
+function pad(str, len, r) {
+    while (str.length < len) str = r ? ' ' + str : str + ' ';
+    return str;
 }
 
 function formatDuration(duration) {
@@ -92,13 +113,41 @@ function formatDuration(duration) {
     duration -= hours * 3600;
     var days = duration / 86400;
 
-    return days + 'd ' + hours + 'h ' + minutes + 'm ' + seconds + 's';
+    return (days > 0 ? days + 'd ' : '') +
+           (hours > 0 || days > 0 ? hours + 'h ' : '') +
+           (minutes > 0 || hours > 0 || days > 0 ? minutes + 'm ' : '') +
+           seconds + 's';
 }
 
-function formatNumber(number, decimals) {
-    var num = parseFloat(number).toFixed(decimals || 0).split('.');
-    for (var i = num[0].length - 3; i > 0; i -= 3) {
-        num[0] = num[0].substring(0, i) + ',' + num[0].substring(i);
+function formatNumber(num) {
+    num = num || 0;
+    if (num >= 1e6) {
+        return (num / 1e6).toFixed(2) + 'm';
+    } else if (num >= 1e3) {
+        return (num / 1e3).toFixed(1) + 'k';
+    } else {
+        return num.toFixed(0);
     }
     return num.join('.');
 }
+
+function timeRemaining(progress, started) {
+    return Math.floor(
+        (Date.now() - started) * (1 / progress) -
+        (Date.now() - started)
+    );
+}
+
+function auto(uri) {
+    uri = url.parse(uri);
+
+    // Attempt to load any modules that may match keyword pattern.
+    var keyword = uri.protocol
+        ? uri.protocol.replace(':','')
+        : path.extname(uri.pathname).replace('.','');
+    try { require(keyword).registerProtocols(tilelive); } catch(err) {};
+    try { require('tilelive-' + keyword).registerProtocols(tilelive); } catch(err) {};
+
+    uri.protocol = uri.protocol || keyword + ':';
+    return uri;
+}
diff --git a/bin/tilelive b/bin/tilelive
deleted file mode 100755
index 5742947..0000000
--- a/bin/tilelive
+++ /dev/null
@@ -1,187 +0,0 @@
-#!/usr/bin/env node
-
-var url = require('url');
-var util = require('util');
-var os = require('os');
-var argv = require('optimist').argv;
-var tilelive = require('..');
-
-require('mbtiles').registerProtocols(tilelive);
-require('tilejson').registerProtocols(tilelive);
-require('tilelive-mapnik').registerProtocols(tilelive);
-
-var commands = {
-    'copy': '[from] [to] [--bbox="..."] [--zoom=0-4] [--concurrency=100] [--copy-tiles] [--copy-grids]'
-};
-
-function lpad(str, len, chr) {
-    if (!chr) chr = ' ';
-    str = String(str);
-    len = Math.max(0, len - str.length + 1);
-    return Array(len).join(chr) + str;
-}
-
-function formatHMS(ms) {
-    var seconds = ms / 1000 | 0;
-    var hours = (seconds / 3600) | 0;
-    seconds -= hours * 3600;
-    var minutes = (seconds / 60) | 0;
-    seconds -= minutes * 60;
-    return lpad(hours, 2, '0') + ':' + lpad(minutes, 2, '0') + ':' + lpad(seconds, 2, '0');
-}
-
-switch (argv._[0]) {
-    case 'copy':
-        // if (!argv._[1]) usage();
-        var from = url.parse(argv._[1] || '', true);
-        if (!from.protocol) usage('Invalid from protocol: ' + argv._[1]);
-
-        var to = url.parse(argv._[2] || '');
-        if (!to.protocol) usage('Invalid to protocol: ' + argv._[2]);
-
-        var bbox = String(argv.bbox || '-180,-85.05112877980659,180,85.05112877980659').split(/\s*[, ]\s*/).map(parseFloat);
-        if (bbox.length !== 4) usage('Invalid bounding box: ' + util.inspect(argv.bbox));
-
-        var zoom = String(argv.zoom || 0).split(/\s*[,-]\s*/).map(parseFloat);
-        if (zoom.length === 1) zoom[1] = zoom[0];
-        if (zoom.length != 2 || isNaN(zoom[0]) || isNaN(zoom[1])) usage('Invalid zoom range: ' + util.inspect(argv.zoom));
-
-        var concurrency = parseInt(argv.concurrency || os.cpus().length * 25, 10);
-        if (isNaN(concurrency)) usage('Invalid concurrency: ' + util.inspect(argv.concurrency));
-
-        var benchmark = argv.benchmark;
-
-        var tiles = Boolean(argv['copy-tiles']);
-        var grids = Boolean(argv['copy-grids']);
-
-        tilelive.load(from, function(err, source) {
-            if (err) throw err;
-            tilelive.load(to, function(err, sink) {
-                if (err) throw err;
-
-                var copy = tilelive.copy({
-                    source: source,
-                    sink: sink,
-                    bbox: bbox,
-                    minZoom: zoom[0],
-                    maxZoom: zoom[1],
-                    concurrency: concurrency,
-                    tiles: tiles,
-                    grids: grids
-                });
-                copy.notFound = 0;
-                copy.peakMemory = 0;
-
-                if (!benchmark) {
-                    console.warn('Starting...');
-                    console.warn('         from: %s', url.format(from));
-                    console.warn('           to: %s', url.format(to));
-                    console.warn('         bbox: %s', util.inspect(bbox));
-                    console.warn('         zoom: %s', util.inspect(zoom));
-                    console.warn('  concurrency: %s', util.inspect(concurrency));
-                    console.warn('     metatile: %s', util.inspect(source.metatile));
-                    console.warn('');
-                    console.warn('|0% --------- 50% -------- 100%|  done |   copied |   failed |    total |   speed |  elapsed |   ETA in');
-
-                    var spinner = '-\\|/', spinnerPos = 3;
-                    var lastProgress = 0;
-                    function progress() {
-                        var progress = (copy.copied + copy.failed) / copy.total;
-                        util.print('\r|');
-                        var bits = Math.floor(progress * 30) + 1;
-                        util.print(Array(Math.max(0, bits)).join('='));
-                        if (progress < 1) util.print(spinner[spinnerPos = (spinnerPos + 1) % 4]);
-                        util.print(Array(Math.max(0, 31 - bits)).join(' '));
-                        util.print('| ');
-                        util.print(lpad((progress * 100).toFixed(progress < 1 ? 1 : 0), 4));
-                        util.print('% | ');
-                        util.print(lpad(copy.copied, 8));
-                        util.print(' | ');
-                        util.print(lpad(copy.failed, 8));
-                        util.print(' | ');
-                        util.print(lpad(copy.total, 8));
-                        util.print(' | ');
-                        var speed = copy.copied + copy.failed - lastProgress;
-                        if (speed >= 1000) util.print(lpad(speed.toFixed(0), 5));
-                        else util.print(lpad(speed.toFixed(1), 5));
-                        util.print('/s | ');
-                        util.print(formatHMS(Date.now() - copy.started));
-                        util.print(' | ');
-                        var remaining = (Date.now() - copy.started) / (copy.copied + copy.failed) * (copy.total - copy.copied - copy.failed);
-                        util.print(formatHMS(remaining));
-                        lastProgress = copy.copied + copy.failed;
-                    }
-
-                    var timeout = setInterval(progress, 1000);
-                    progress();
-                }
-
-                var memoryTimeout = setInterval(function() {
-                    copy.peakMemory = Math.max(copy.peakMemory, process.memoryUsage().rss);
-                }, 1000);
-
-                copy.on('warning', function(err) {
-                    if (err.message === 'Tile does not exist') copy.notFound++;
-                    else if (err.message === 'Grid does not exist') copy.notFound++;
-                });
-
-                var finished = false;
-                copy.on('finished', function() {
-                    clearTimeout(timeout);
-                    clearTimeout(memoryTimeout);
-                    finished = true;
-                    if (!benchmark) progress();
-                    process.exit(0);
-                });
-                copy.on('error', function(err) {
-                    clearTimeout(timeout);
-                    console.warn(err);
-                });
-
-                function exit() {
-                    if (!benchmark) {
-                        console.warn('');
-                        console.warn(finished ? 'Finished.' : 'Aborted.');
-                        console.warn('       copied: %d', copy.copied);
-                        console.warn('       failed: %d (%d not found)', copy.failed, copy.notFound);
-                        console.warn('     duration: %s', formatHMS(Date.now() - copy.started));
-                        console.warn('  peak memory: %d bytes', copy.peakMemory);
-                        console.warn('    avg speed: %d tiles/s', ((copy.copied + copy.failed) / (Date.now() - copy.started) * 1000).toFixed(1));
-                    } else {
-                        console.log('%d,%d,%d,%d,%d,%d,%d',
-                            concurrency,
-                            source.metatile,
-                            source.bufferSize,
-                            copy.peakMemory,
-                            zoom[0],
-                            zoom[1],
-                            ((copy.copied + copy.failed) / (Date.now() - copy.started) * 1000)
-                        );
-                    }
-                }
-
-                // Make sure we always report the status when exiting, even when force-quitting.
-                process.on('exit', exit).on('SIGINT', function() {
-                    process.exit(1);
-                });
-            });
-        });
-
-        break;
-    default:
-        usage();
-}
-
-function usage(msg) {
-    if (msg) console.warn(msg);
-    if (commands[argv._[0]]) {
-        console.warn('Usage: %s %s %s', argv.$0, argv._[0], commands[argv._[0]]);
-    } else {
-        console.warn('Usage: %s [command]', argv.$0);
-        console.warn('Commands:');
-        for (var cmd in commands) {
-            console.warn('    %s %s', cmd, commands[cmd]);
-        }
-    }
-    process.exit(1);
-}
\ No newline at end of file
diff --git a/examples/data/world_merc.dbf b/examples/data/world_merc.dbf
new file mode 100644
index 0000000..2de17d7
Binary files /dev/null and b/examples/data/world_merc.dbf differ
diff --git a/examples/data/world_merc.index b/examples/data/world_merc.index
new file mode 100644
index 0000000..8158677
Binary files /dev/null and b/examples/data/world_merc.index differ
diff --git a/examples/data/world_merc.json b/examples/data/world_merc.json
new file mode 100644
index 0000000..7ad4161
--- /dev/null
+++ b/examples/data/world_merc.json
@@ -0,0 +1,495 @@
+{
+"type": "FeatureCollection",
+"features": [
+{ "type": "Feature", "properties": { "FIPS": "AC", "ISO2": "AG", "ISO3": "ATG", "UN": 28, "NAME": "Antigua and Barbuda", "AREA": 44, "POP2005": 83039, "REGION": 19, "SUBREGION": 29, "LON": -61.783000, "LAT": 17.078000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6866928.470494, 1923670.301967 ], [ -6889254.039650, 1933083.002474 ], [ -6878926.596531, 1939845.927363 ], [ -6866928.470494, 1923670.301967 ] ] ], [ [ [ -6871659.994130, 1991787.210604 ], [ -6885450.920567,  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AG", "ISO2": "DZ", "ISO3": "DZA", "UN": 12, "NAME": "Algeria", "AREA": 238174, "POP2005": 32854159, "REGION": 2, "SUBREGION": 15, "LON": 2.632000, "LAT": 28.163000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 329907.556110, 4411573.988064 ], [ 532756.381262, 4424442.533321 ], [ 593116.369519, 4389083.533493 ], [ 712259.171486, 4451155.010687 ], [ 959799.989204, 4430937.390572 ], [ 910995.409370, 4372987.028533 ], [ 918571.145997,  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AJ", "ISO2": "AZ", "ISO3": "AZE", "UN": 31, "NAME": "Azerbaijan", "AREA": 8260, "POP2005": 8352021, "REGION": 142, "SUBREGION": 145, "LON": 47.395000, "LAT": 40.430000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5018652.506755, 4832292.302982 ], [ 5100657.547900, 4800723.337221 ], [ 5140538.992058, 4698943.188677 ], [ 5009870.741505, 4781491.689781 ], [ 4988565.193821, 4812437.537964 ], [ 4984760.328413, 4823366.185544 ],  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AL", "ISO2": "AL", "ISO3": "ALB", "UN": 8, "NAME": "Albania", "AREA": 2740, "POP2005": 3153731, "REGION": 150, "SUBREGION": 39, "LON": 20.068000, "LAT": 41.143000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2163629.445429, 5015449.243221 ], [ 2181923.801866, 5130568.746689 ], [ 2156010.405521, 5138386.995587 ], [ 2186964.014450, 5254014.690410 ], [ 2234340.587856, 5245375.355834 ], [ 2292028.463056, 5143347.932344 ], [ 2281245.27 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AM", "ISO2": "AM", "ISO3": "ARM", "UN": 51, "NAME": "Armenia", "AREA": 2820, "POP2005": 3017661, "REGION": 142, "SUBREGION": 145, "LON": 44.563000, "LAT": 40.534000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5026505.986761, 5041679.794882 ], [ 5120912.511095, 4898772.884491 ], [ 5075703.406066, 4862752.280264 ], [ 5180963.139117, 4802848.266527 ], [ 5180851.031475, 4703866.452626 ], [ 5140538.992058, 4698943.188677 ], [ 5100657. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AO", "ISO2": "AO", "ISO3": "AGO", "UN": 24, "NAME": "Angola", "AREA": 124670, "POP2005": 16095214, "REGION": 2, "SUBREGION": 17, "LON": 17.544000, "LAT": -12.296000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1308096.802880, -1892356.638374 ], [ 1301726.625873, -1866827.414852 ], [ 1310786.961626, -1898105.749228 ], [ 1308096.802880, -1892356.638374 ] ] ], [ [ [ 1558194.512928, -652198.107987 ], [ 1845646.149398, -658042.0 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AQ", "ISO2": "AS", "ISO3": "ASM", "UN": 16, "NAME": "American Samoa", "AREA": 20, "POP2005": 64051, "REGION": 9, "SUBREGION": 61, "LON": -170.730000, "LAT": -14.318000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -18984705.483126, -1608370.555606 ], [ -18986743.854322, -1607253.739192 ], [ -18984430.301345, -1606807.003167 ], [ -18984705.483126, -1608370.555606 ] ] ], [ [ [ -18995253.784115, -1607445.002926 ], [ -19016275.6 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AR", "ISO2": "AR", "ISO3": "ARG", "UN": 32, "NAME": "Argentina", "AREA": 273669, "POP2005": 38747148, "REGION": 19, "SUBREGION": 5, "LON": -65.167000, "LAT": -35.377000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7637475.751873, -7340816.756545 ], [ -7641316.274306, -7340277.721742 ], [ -7640538.373704, -7324067.965228 ], [ -7637475.751873, -7340816.756545 ] ] ], [ [ [ -7103699.016159, -7309908.330113 ], [ -7199960.430752 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AS", "ISO2": "AU", "ISO3": "AUS", "UN": 36, "NAME": "Australia", "AREA": 768230, "POP2005": 20310208, "REGION": 9, "SUBREGION": 53, "LON": 136.189000, "LAT": -24.973000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 17686682.654402, -7306052.621213 ], [ 17681243.735189, -7313443.632219 ], [ 17695063.549903, -7260579.465116 ], [ 17686682.654402, -7306052.621213 ] ] ], [ [ [ 16404344.493078, -5372757.638423 ], [ 16377659.477204 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BA", "ISO2": "BH", "ISO3": "BHR", "UN": 48, "NAME": "Bahrain", "AREA": 71, "POP2005": 724788, "REGION": 142, "SUBREGION": 145, "LON": 50.562000, "LAT": 26.019000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5656420.735377, 2954835.414625 ], [ 5653050.760433, 2956962.274770 ], [ 5657411.033567, 2956036.065570 ], [ 5656420.735377, 2954835.414625 ] ] ], [ [ [ 5656514.243750, 2959329.312649 ], [ 5655493.332699, 2959569.557698 ] [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BB", "ISO2": "BB", "ISO3": "BRB", "UN": 52, "NAME": "Barbados", "AREA": 43, "POP2005": 291933, "REGION": 19, "SUBREGION": 29, "LON": -59.559000, "LAT": 13.153000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6627189.701926, 1465508.536703 ], [ -6639218.329504, 1497618.083704 ], [ -6615624.831347, 1478589.315298 ], [ -6627189.701926, 1465508.536703 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "BD", "ISO2": "BM", "ISO3": "BMU", "UN": 60, "NAME": "Bermuda", "AREA": 5, "POP2005": 64174, "REGION": 19, "SUBREGION": 21, "LON": -64.709000, "LAT": 32.336000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7219718.527173, 3799938.338933 ], [ -7221790.850813, 3801840.159286 ], [ -7217739.600585, 3804620.419721 ], [ -7219718.527173, 3799938.338933 ] ] ], [ [ [ -7196063.803296, 3809926.707166 ], [ -7200794.436377, 3810292.65875 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BF", "ISO2": "BS", "ISO3": "BHS", "UN": 44, "NAME": "Bahamas", "AREA": 1001, "POP2005": 323295, "REGION": 19, "SUBREGION": 29, "LON": -78.014000, "LAT": 24.628000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -8130467.413443, 2408513.625043 ], [ -8202669.830361, 2384196.035348 ], [ -8129043.986116, 2431569.935728 ], [ -8130467.413443, 2408513.625043 ] ] ], [ [ [ -8117943.631008, 2449638.240225 ], [ -8130560.836477, 2443823.8 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BG", "ISO2": "BD", "ISO3": "BGD", "UN": 50, "NAME": "Bangladesh", "AREA": 13017, "POP2005": 15328112, "REGION": 142, "SUBREGION": 34, "LON": 89.941000, "LAT": 24.218000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 10229982.166284, 2448807.234423 ], [ 10228156.170608, 2482168.626758 ], [ 10239412.796973, 2466427.954111 ], [ 10229982.166284, 2448807.234423 ] ] ], [ [ [ 10073360.996727, 2487962.518199 ], [ 10070794.411177, 248 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BH", "ISO2": "BZ", "ISO3": "BLZ", "UN": 84, "NAME": "Belize", "AREA": 2281, "POP2005": 275546, "REGION": 19, "SUBREGION": 13, "LON": -88.602000, "LAT": 17.219000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9774223.655346, 1955094.861010 ], [ -9776635.614753, 1954803.037176 ], [ -9776851.351926, 1967469.728947 ], [ -9774223.655346, 1955094.861010 ] ] ], [ [ [ -9776139.686422, 1970580.638437 ], [ -9787953.467382, 1952924.98 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BK", "ISO2": "BA", "ISO3": "BIH", "UN": 70, "NAME": "Bosnia and Herzegovina", "AREA": 5120, "POP2005": 3915238, "REGION": 150, "SUBREGION": 39, "LON": 17.786000, "LAT": 44.169000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1964771.312702, 5295103.294702 ], [ 1956832.563216, 5303425.344103 ], [ 1797036.662448, 5496358.035357 ], [ 1757363.509124, 5648631.289131 ], [ 2031796.889428, 5643412.651252 ], [ 2119491.823927, 5599725.253484 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BL", "ISO2": "BO", "ISO3": "BOL", "UN": 68, "NAME": "Bolivia", "AREA": 108438, "POP2005": 9182015, "REGION": 19, "SUBREGION": 5, "LON": -64.671000, "LAT": -16.715000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -7256939.980031, -2522902.507866 ], [ -7319040.782485, -2524937.601259 ], [ -7371911.418039, -2485194.466797 ], [ -7478846.813327, -2610466.477102 ], [ -7555966.730159, -2611238.120967 ], [ -7590721.788379, -2427321.771621  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BM", "ISO2": "MM", "ISO3": "MMR", "UN": 104, "NAME": "Burma", "AREA": 65755, "POP2005": 47967266, "REGION": 142, "SUBREGION": 35, "LON": 96.041000, "LAT": 21.718000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 10913296.671345, 1094751.614979 ], [ 10912092.417094, 1100619.953106 ], [ 10916017.876298, 1097827.053925 ], [ 10913296.671345, 1094751.614979 ] ] ], [ [ [ 10941962.330780, 1120051.672155 ], [ 10922233.066108, 1102220 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BN", "ISO2": "BJ", "ISO3": "BEN", "UN": 204, "NAME": "Benin", "AREA": 11062, "POP2005": 8490301, "REGION": 2, "SUBREGION": 11, "LON": 2.469000, "LAT": 10.541000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 276564.146678, 707264.695543 ], [ 182052.340521, 693628.054693 ], [ 155684.983293, 1054503.227289 ], [ 150837.910025, 1118356.106057 ], [ 86458.174956, 1161491.974549 ], [ 102187.952964, 1231698.440102 ], [ 159774.416107, 128418 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BP", "ISO2": "SB", "ISO3": "SLB", "UN": 90, "NAME": "Solomon Islands", "AREA": 2799, "POP2005": 472419, "REGION": 9, "SUBREGION": 54, "LON": 160.109000, "LAT": -9.611000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 18573715.683044, -1311238.033893 ], [ 18563792.458172, -1297883.399165 ], [ 18582776.018797, -1307859.387455 ], [ 18573715.683044, -1311238.033893 ] ] ], [ [ [ 17820114.528178, -1288636.172870 ], [ 17869835.96577 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BR", "ISO2": "BR", "ISO3": "BRA", "UN": 76, "NAME": "Brazil", "AREA": 845942, "POP2005": 186830759, "REGION": 19, "SUBREGION": 5, "LON": -53.089000, "LAT": -10.772000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -5404623.616657, -3226474.019711 ], [ -5400913.023583, -3177402.869500 ], [ -5389904.392910, -3172142.913312 ], [ -5404623.616657, -3226474.019711 ] ] ], [ [ [ -5408025.064415, -3047672.406468 ], [ -5422125.148233,  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BU", "ISO2": "BG", "ISO3": "BGR", "UN": 100, "NAME": "Bulgaria", "AREA": 11063, "POP2005": 7744591, "REGION": 150, "SUBREGION": 151, "LON": 25.231000, "LAT": 42.761000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3103494.562861, 5287817.292238 ], [ 3055534.118726, 5231644.346472 ], [ 3118398.906844, 5158315.859241 ], [ 3049597.116323, 5162184.022967 ], [ 2934503.672153, 5117794.226290 ], [ 2927053.281273, 5117347.175187 ], [ 29016 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BX", "ISO2": "BN", "ISO3": "BRN", "UN": 96, "NAME": "Brunei Darussalam", "AREA": 527, "POP2005": 373831, "REGION": 142, "SUBREGION": 35, "LON": 114.591000, "LAT": 4.468000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 12826569.917814, 535518.016197 ], [ 12839959.982764, 480457.041356 ], [ 12804984.066674, 537217.399596 ], [ 12817969.819233, 546493.632375 ], [ 12826569.917814, 535518.016197 ] ] ], [ [ [ 12799667.447793, 54529 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CA", "ISO2": "CA", "ISO3": "CAN", "UN": 124, "NAME": "Canada", "AREA": 909351, "POP2005": 32270507, "REGION": 19, "SUBREGION": 21, "LON": -109.433000, "LAT": 59.081000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7304074.427240, 5376162.311368 ], [ -7306238.444440, 5384509.029741 ], [ -7298784.984882, 5389668.215571 ], [ -7304074.427240, 5376162.311368 ] ] ], [ [ [ -6658792.185156, 5454357.988823 ], [ -6693640.675651, 5456 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CB", "ISO2": "KH", "ISO3": "KHM", "UN": 116, "NAME": "Cambodia", "AREA": 17652, "POP2005": 13955507, "REGION": 142, "SUBREGION": 35, "LON": 104.564000, "LAT": 12.714000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 11552208.566167, 1168943.238597 ], [ 11549239.412269, 1172779.576571 ], [ 11550044.548967, 1176773.544817 ], [ 11554836.301340, 1175452.824534 ], [ 11552208.566167, 1168943.238597 ] ] ], [ [ [ 11500878.553773, 120 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CE", "ISO2": "LK", "ISO3": "LKA", "UN": 144, "NAME": "Sri Lanka", "AREA": 6463, "POP2005": 19120763, "REGION": 142, "SUBREGION": 34, "LON": 80.704000, "LAT": 7.612000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9096471.744894, 857661.267702 ], [ 9095729.466530, 856850.045811 ], [ 9094987.188165, 857630.040684 ], [ 9096223.836388, 860313.504713 ], [ 9096471.744894, 857661.267702 ] ] ], [ [ [ 9106705.902280, 834795.596160 ], [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CF", "ISO2": "CG", "ISO3": "COG", "UN": 178, "NAME": "Congo", "AREA": 34150, "POP2005": 3609851, "REGION": 2, "SUBREGION": 17, "LON": 15.986000, "LAT": -0.055000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1422557.004863, -489058.770261 ], [ 1338742.779133, -558981.111946 ], [ 1240172.709620, -437302.049158 ], [ 1279833.951759, -390635.319699 ], [ 1327577.656846, -405135.024419 ], [ 1288430.154157, -259817.267957 ], [ 1389050.617 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CG", "ISO2": "CD", "ISO3": "COD", "UN": 180, "NAME": "Democratic Republic of the Congo", "AREA": 226705, "POP2005": 58740547, "REGION": 2, "SUBREGION": 17, "LON": 23.654000, "LAT": -2.876000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2882247.333138, 578819.223314 ], [ 3056307.610698, 559136.758948 ], [ 3157360.759292, 478007.774518 ], [ 3299880.571081, 517491.560706 ], [ 3435188.124601, 389124.105091 ], [ 3420817.113983, 272599. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BY", "ISO2": "BI", "ISO3": "BDI", "UN": 108, "NAME": "Burundi", "AREA": 2568, "POP2005": 7858791, "REGION": 2, "SUBREGION": 14, "LON": 29.887000, "LAT": -3.356000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3253857.249980, -417853.988194 ], [ 3230985.992679, -305657.983549 ], [ 3322979.195357, -307329.704203 ], [ 3334265.989848, -257155.883861 ], [ 3403407.527455, -267152.129982 ], [ 3386060.611204, -318722.825285 ], [ 3433500.74 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CH", "ISO2": "CN", "ISO3": "CHN", "UN": 156, "NAME": "China", "AREA": 932743, "POP2005": 1312978855, "REGION": 142, "SUBREGION": 30, "LON": 106.514000, "LAT": 33.420000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 12325354.669167, 2280535.162033 ], [ 12359925.438459, 2230432.097875 ], [ 12250460.819553, 2082139.981837 ], [ 12196906.489635, 2057325.876253 ], [ 12098818.248438, 2096776.065928 ], [ 12092448.496081, 2187962.198 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AF", "ISO2": "AF", "ISO3": "AFG", "UN": 4, "NAME": "Afghanistan", "AREA": 65209, "POP2005": 25067407, "REGION": 142, "SUBREGION": 34, "LON": 65.216000, "LAT": 33.677000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 8339582.140521, 4472239.080136 ], [ 8281303.158825, 4463537.741853 ], [ 8300585.698381, 4442984.827904 ], [ 8076968.329790, 4414222.768396 ], [ 7930798.602612, 4318484.666598 ], [ 7975977.951909, 4221787.306636 ], [ 7902 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BT", "ISO2": "BT", "ISO3": "BTN", "UN": 64, "NAME": "Bhutan", "AREA": 4700, "POP2005": 637013, "REGION": 142, "SUBREGION": 34, "LON": 90.429000, "LAT": 27.415000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 10070671.912108, 3258011.862420 ], [ 10163622.685045, 3259203.506605 ], [ 10203295.281772, 3219342.743964 ], [ 10254039.269774, 3160689.488808 ], [ 10249184.626781, 3106233.789391 ], [ 9979018.790475, 3087943.438079 ], [ 989562 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CI", "ISO2": "CL", "ISO3": "CHL", "UN": 152, "NAME": "Chile", "AREA": 74880, "POP2005": 16295102, "REGION": 19, "SUBREGION": 5, "LON": -69.433000, "LAT": -23.389000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7513292.765260, -7524483.170896 ], [ -7526528.261358, -7538976.845951 ], [ -7553863.841273, -7528447.454904 ], [ -7513292.765260, -7524483.170896 ] ] ], [ [ [ -7482092.868915, -7537266.638989 ], [ -7504480.425199, -7 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CJ", "ISO2": "KY", "ISO3": "CYM", "UN": 136, "NAME": "Cayman Islands", "AREA": 26, "POP2005": 45591, "REGION": 19, "SUBREGION": 29, "LON": -81.198000, "LAT": 19.314000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9027702.237025, 2191336.325995 ], [ -9061531.562361, 2188911.688341 ], [ -9045204.666604, 2196644.890065 ], [ -9027702.237025, 2191336.325995 ] ] ], [ [ [ -8916413.359092, 2232106.475886 ], [ -8914001.288366, 2237 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CM", "ISO2": "CM", "ISO3": "CMR", "UN": 120, "NAME": "Cameroon", "AREA": 46540, "POP2005": 17795149, "REGION": 2, "SUBREGION": 17, "LON": 12.277000, "LAT": 5.133000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1078376.620241, 398194.651755 ], [ 1071573.663520, 395561.197191 ], [ 1073398.189974, 398628.418138 ], [ 1078376.620241, 398194.651755 ] ] ], [ [ [ 1622728.818901, 1429884.576520 ], [ 1674534.238248, 1354687.687247 ], [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CD", "ISO2": "TD", "ISO3": "TCD", "UN": 148, "NAME": "Chad", "AREA": 125920, "POP2005": 10145609, "REGION": 2, "SUBREGION": 17, "LON": 18.665000, "LAT": 15.361000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1614230.021057, 1459882.393691 ], [ 1566790.663458, 1469063.844849 ], [ 1516741.420397, 1541921.860992 ], [ 1499349.642392, 1627172.326532 ], [ 1724246.071932, 1910835.625941 ], [ 1780740.713510, 2314902.256458 ], [ 1692334.44 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CN", "ISO2": "KM", "ISO3": "COM", "UN": 174, "NAME": "Comoros", "AREA": 223, "POP2005": 797902, "REGION": 2, "SUBREGION": 14, "LON": 43.337000, "LAT": -11.758000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4882534.091913, -1386263.301194 ], [ 4861167.428850, -1386421.476965 ], [ 4856064.766031, -1375122.790581 ], [ 4882534.091913, -1386263.301194 ] ] ], [ [ [ 4952325.290068, -1356300.613056 ], [ 4955232.509890, -1389017.59 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CO", "ISO2": "CO", "ISO3": "COL", "UN": 170, "NAME": "Colombia", "AREA": 103870, "POP2005": 4494579, "REGION": 19, "SUBREGION": 5, "LON": -73.076000, "LAT": 3.900000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -8696434.348476, 278479.950439 ], [ -8706916.412955, 287053.988576 ], [ -8703979.532468, 294049.283942 ], [ -8697146.062140, 294328.150824 ], [ -8693125.474452, 282782.420642 ], [ -8696434.348476, 278479.950439 ] ] ] [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CS", "ISO2": "CR", "ISO3": "CRI", "UN": 188, "NAME": "Costa Rica", "AREA": 5106, "POP2005": 4327228, "REGION": 19, "SUBREGION": 13, "LON": -83.946000, "LAT": 9.971000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9475052.523839, 1127211.556631 ], [ -9481761.972188, 1127651.259263 ], [ -9484204.544455, 1131388.776402 ], [ -9480185.688199, 1132739.487833 ], [ -9474310.245475, 1130854.951099 ], [ -9475052.523839, 1127211.55663 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CT", "ISO2": "CF", "ISO3": "CAF", "UN": 140, "NAME": "Central African Republic", "AREA": 62298, "POP2005": 4191429, "REGION": 2, "SUBREGION": 17, "LON": 20.483000, "LAT": 6.571000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2121615.020575, 958528.961673 ], [ 2113833.342891, 1001982.628906 ], [ 2267763.485731, 1018232.684403 ], [ 2417364.302254, 1151748.095033 ], [ 2417797.446393, 1191243.378906 ], [ 2545487.692822, 1223313.211277 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CU", "ISO2": "CU", "ISO3": "CUB", "UN": 192, "NAME": "Cuba", "AREA": 10982, "POP2005": 11259905, "REGION": 19, "SUBREGION": 29, "LON": -77.781000, "LAT": 21.297000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -8719409.620578, 2333975.701382 ], [ -8733942.847556, 2344906.853370 ], [ -8721419.065122, 2340612.886159 ], [ -8719409.620578, 2333975.701382 ] ] ], [ [ [ -8725439.652809, 2348739.440901 ], [ -8728809.676457, 2349863. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CV", "ISO2": "CV", "ISO3": "CPV", "UN": 132, "NAME": "Cape Verde", "AREA": 403, "POP2005": 506807, "REGION": 2, "SUBREGION": 11, "LON": -23.634000, "LAT": 15.071000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -2712670.754999, 1667568.855651 ], [ -2730141.681162, 1680110.023616 ], [ -2714154.866451, 1694674.837887 ], [ -2712670.754999, 1667568.855651 ] ] ], [ [ [ -2610071.031239, 1687215.330466 ], [ -2636200.610035, 1681774 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CW", "ISO2": "CK", "ISO3": "COK", "UN": 184, "NAME": "Cook Islands", "AREA": 24, "POP2005": 13984, "REGION": 9, "SUBREGION": 61, "LON": -159.782000, "LAT": -21.219000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -17576297.185543, -2504089.380466 ], [ -17584338.348960, -2500023.219694 ], [ -17579792.951512, -2497157.832910 ], [ -17576297.185543, -2504089.380466 ] ] ], [ [ [ -17782300.025828, -2422211.458551 ], [ -17792627.58 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CY", "ISO2": "CY", "ISO3": "CYP", "UN": 196, "NAME": "Cyprus", "AREA": 924, "POP2005": 836321, "REGION": 142, "SUBREGION": 145, "LON": 33.219000, "LAT": 35.043000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3746192.299621, 4212107.058118 ], [ 3850571.354121, 4258087.228961 ], [ 3776111.527842, 4201012.104896 ], [ 3794138.717500, 4158370.838905 ], [ 3676976.066635, 4104591.203652 ], [ 3592743.279620, 4169846.404694 ], [ 3746192.29 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "DA", "ISO2": "DK", "ISO3": "DNK", "UN": 208, "NAME": "Denmark", "AREA": 4243, "POP2005": 5416945, "REGION": 150, "SUBREGION": 154, "LON": 9.264000, "LAT": 56.058000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1281720.037891, 7328888.124797 ], [ 1319816.127989, 7300647.324001 ], [ 1223389.069994, 7321379.328154 ], [ 1281720.037891, 7328888.124797 ] ] ], [ [ [ 1340070.152741, 7341029.283921 ], [ 1331875.702385, 7277254.02607 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "DJ", "ISO2": "DJ", "ISO3": "DJI", "UN": 262, "NAME": "Djibouti", "AREA": 2318, "POP2005": 804206, "REGION": 2, "SUBREGION": 14, "LON": 42.516000, "LAT": 11.900000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4771911.015854, 1298563.280993 ], [ 4814481.370245, 1285396.428546 ], [ 4780514.454019, 1232383.279612 ], [ 4652010.239474, 1233020.275737 ], [ 4656339.120512, 1316132.895230 ], [ 4719915.128858, 1399212.911602 ], [ 4800250.50 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "DO", "ISO2": "DM", "ISO3": "DMA", "UN": 212, "NAME": "Dominica", "AREA": 75, "POP2005": 67827, "REGION": 19, "SUBREGION": 29, "LON": -61.356000, "LAT": 15.475000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6830966.597673, 1712035.891395 ], [ -6840830.395114, 1762138.618423 ], [ -6818689.950270, 1742431.479163 ], [ -6830966.597673, 1712035.891395 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "DR", "ISO2": "DO", "ISO3": "DOM", "UN": 214, "NAME": "Dominican Republic", "AREA": 4838, "POP2005": 9469601, "REGION": 19, "SUBREGION": 29, "LON": -70.729000, "LAT": 19.015000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7962931.084949, 1983808.105489 ], [ -7961818.446638, 1992565.992318 ], [ -7955231.227090, 1988673.305470 ], [ -7962931.084949, 1983808.105489 ] ] ], [ [ [ -7633672.632790, 2052705.313664 ], [ -7651205.5639 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "EC", "ISO2": "EC", "ISO3": "ECU", "UN": 218, "NAME": "Ecuador", "AREA": 27684, "POP2005": 13060993, "REGION": 19, "SUBREGION": 5, "LON": -78.497000, "LAT": -1.385000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -8927082.232026, -337981.703177 ], [ -8928566.808976, -303367.188589 ], [ -8894768.053669, -302871.699801 ], [ -8927082.232026, -337981.703177 ] ] ], [ [ [ -8887594.863214, -294204.233535 ], [ -8892974.331405, -29253 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "EG", "ISO2": "EG", "ISO3": "EGY", "UN": 818, "NAME": "Egypt", "AREA": 99545, "POP2005": 72849793, "REGION": 2, "SUBREGION": 15, "LON": 29.872000, "LAT": 26.494000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 3787799.779783, 3185871.263661 ], [ 3789531.503124, 3178830.855136 ], [ 3775678.565698, 3189392.334696 ], [ 3787799.779783, 3185871.263661 ] ] ], [ [ [ 3567480.237355, 3651377.493920 ], [ 3566985.095272, 3653292.814055  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "EI", "ISO2": "IE", "ISO3": "IRL", "UN": 372, "NAME": "Ireland", "AREA": 6889, "POP2005": 4143294, "REGION": 150, "SUBREGION": 154, "LON": -8.152000, "LAT": 53.177000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1074944.332703, 7024209.465105 ], [ -1082551.303293, 7032735.218443 ], [ -1075439.050136, 7034959.348515 ], [ -1074944.332703, 7024209.465105 ] ] ], [ [ [ -1109206.169007, 7173681.593473 ], [ -1108185.734679, 714683 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "EK", "ISO2": "GQ", "ISO3": "GNQ", "UN": 226, "NAME": "Equatorial Guinea", "AREA": 2805, "POP2005": 484098, "REGION": 2, "SUBREGION": 17, "LON": 10.488000, "LAT": 1.607000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 627996.439527, -164183.431238 ], [ 625089.776303, -163564.847348 ], [ 627161.543346, -158151.774350 ], [ 627996.439527, -164183.431238 ] ] ], [ [ [ 1116101.459837, 241404.505742 ], [ 1262336.754196, 241466.33232 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "EN", "ISO2": "EE", "ISO3": "EST", "UN": 233, "NAME": "Estonia", "AREA": 4239, "POP2005": 1344312, "REGION": 150, "SUBREGION": 154, "LON": 25.793000, "LAT": 58.674000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 2670646.867989, 7988353.393933 ], [ 2665853.895993, 7998307.021139 ], [ 2674137.513261, 7997363.981797 ], [ 2670646.867989, 7988353.393933 ] ] ], [ [ [ 2559327.377195, 8093953.009244 ], [ 2597392.631794, 8060674.0315 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ER", "ISO2": "ER", "ISO3": "ERI", "UN": 232, "NAME": "Eritrea", "AREA": 10100, "POP2005": 4526722, "REGION": 2, "SUBREGION": 14, "LON": 38.219000, "LAT": 16.045000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4462488.806398, 1787551.095922 ], [ 4499471.590269, 1755428.812517 ], [ 4450305.667368, 1759024.345372 ], [ 4462488.806398, 1787551.095922 ] ] ], [ [ [ 4465395.135664, 1811189.329218 ], [ 4450522.183777, 1806137.722392 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ES", "ISO2": "SV", "ISO3": "SLV", "UN": 222, "NAME": "El Salvador", "AREA": 2072, "POP2005": 6668356, "REGION": 19, "SUBREGION": 13, "LON": -88.866000, "LAT": 13.736000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9761205.508815, 1478970.474551 ], [ -9765132.749130, 1478938.692027 ], [ -9765287.260584, 1484274.431896 ], [ -9761205.508815, 1478970.474551 ] ] ], [ [ [ -9945254.030445, 1621999.569592 ], [ -9848528.858853, 155 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ET", "ISO2": "ET", "ISO3": "ETH", "UN": 231, "NAME": "Ethiopia", "AREA": 100000, "POP2005": 78985857, "REGION": 2, "SUBREGION": 14, "LON": 39.616000, "LAT": 8.626000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4067927.669272, 1604298.463535 ], [ 4151289.047314, 1626118.493599 ], [ 4182519.507817, 1585950.384389 ], [ 4220276.073468, 1675790.249115 ], [ 4280172.082087, 1622159.219720 ], [ 4344134.146426, 1649490.566522 ], [ 4478166 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AU", "ISO2": "AT", "ISO3": "AUT", "UN": 40, "NAME": "Austria", "AREA": 8245, "POP2005": 8291979, "REGION": 150, "SUBREGION": 155, "LON": 14.912000, "LAT": 47.683000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1539950.532352, 6236533.842640 ], [ 1636427.684119, 6204126.388453 ], [ 1672668.078305, 6278066.051609 ], [ 1886440.351130, 6210469.981992 ], [ 1910953.348281, 6108934.142271 ], [ 1898429.905567, 6058651.746373 ], [ 1831267. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "EZ", "ISO2": "CZ", "ISO3": "CZE", "UN": 203, "NAME": "Czech Republic", "AREA": 7727, "POP2005": 10191762, "REGION": 150, "SUBREGION": 151, "LON": 15.338000, "LAT": 49.743000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1636427.684119, 6204126.388453 ], [ 1539950.532352, 6236533.842640 ], [ 1410912.652168, 6347284.249941 ], [ 1346264.971085, 6502321.378543 ], [ 1592950.855114, 6630781.132680 ], [ 1650682.478873, 6597594.654530 ], [ [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FG", "ISO2": "GF", "ISO3": "GUF", "UN": 254, "NAME": "French Guiana", "AREA": 8815, "POP2005": 192099, "REGION": 19, "SUBREGION": 5, "LON": -53.241000, "LAT": 3.924000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -5954962.577803, 621290.478166 ], [ -5820370.522945, 550321.432824 ], [ -5793066.412201, 482627.821021 ], [ -5771978.270505, 518577.065981 ], [ -5753444.020565, 449452.483681 ], [ -5889884.090290, 244498.870795 ], [ -6078 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FI", "ISO2": "FI", "ISO3": "FIN", "UN": 246, "NAME": "Finland", "AREA": 30459, "POP2005": 5246004, "REGION": 150, "SUBREGION": 154, "LON": 26.272000, "LAT": 64.504000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 2541826.110016, 8390033.809706 ], [ 2568418.976807, 8388861.715081 ], [ 2551164.591622, 8377137.463006 ], [ 2541826.110016, 8390033.809706 ] ] ], [ [ [ 2497885.435006, 8398809.238474 ], [ 2488207.233275, 8414656.940 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FJ", "ISO2": "FJ", "ISO3": "FJI", "UN": 242, "NAME": "Fiji", "AREA": 1827, "POP2005": 828046, "REGION": 9, "SUBREGION": 54, "LON": 177.974000, "LAT": -17.819000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -19893657.289285, -2353101.340311 ], [ -19896935.536969, -2352110.606678 ], [ -19896194.928397, -2349731.140343 ], [ -19893657.289285, -2353101.340311 ] ] ], [ [ [ -19838405.195863, -2255566.280730 ], [ -19838218.290438,  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FK", "ISO2": "FK", "ISO3": "FLK", "UN": 238, "NAME": "Falkland Islands (Malvinas)", "AREA": 1217, "POP2005": 2975, "REGION": 19, "SUBREGION": 5, "LON": -58.694000, "LAT": -51.665000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6644846.642959, -6844143.341865 ], [ -6652577.002358, -6849750.198370 ], [ -6651710.714080, -6830923.283857 ], [ -6643980.354681, -6831427.333237 ], [ -6644846.642959, -6844143.341865 ] ] ], [ [ [ -6 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FM", "ISO2": "FM", "ISO3": "FSM", "UN": 583, "NAME": "Micronesia, Federated States of", "AREA": 70, "POP2005": 110058, "REGION": 9, "SUBREGION": 57, "LON": 158.235000, "LAT": 6.883000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 17106956.846518, 589376.781198 ], [ 17105349.949668, 589904.791461 ], [ 17111070.880939, 593041.298124 ], [ 17106956.846518, 589376.781198 ] ] ], [ [ [ 18145909.335136, 586706.271330 ], [ 18134406.3 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FP", "ISO2": "PF", "ISO3": "PYF", "UN": 258, "NAME": "French Polynesia", "AREA": 366, "POP2005": 255632, "REGION": 9, "SUBREGION": 61, "LON": -149.462000, "LAT": -17.626000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -15972396.945315, -3238191.915219 ], [ -15975338.896817, -3235218.042957 ], [ -15972556.577464, -3236406.682657 ], [ -15972396.945315, -3238191.915219 ] ] ], [ [ [ -16064240.311957, -3204010.212531 ], [ -16066 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FR", "ISO2": "FR", "ISO3": "FRA", "UN": 250, "NAME": "France", "AREA": 55010, "POP2005": 60990544, "REGION": 150, "SUBREGION": 155, "LON": 2.550000, "LAT": 46.565000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1055957.987991, 5253594.614132 ], [ 1056947.395625, 5251830.105066 ], [ 1052834.919676, 5257839.047881 ], [ 1055957.987991, 5253594.614132 ] ] ], [ [ [ 1051597.937495, 5263222.046282 ], [ 1063472.164939, 5178304.7701 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GA", "ISO2": "GM", "ISO3": "GMB", "UN": 270, "NAME": "Gambia", "AREA": 1000, "POP2005": 1617029, "REGION": 2, "SUBREGION": 11, "LON": -15.386000, "LAT": 13.453000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1862560.984521, 1511158.862947 ], [ -1803468.813945, 1488499.087538 ], [ -1799170.545767, 1508361.408812 ], [ -1702724.452138, 1515960.249061 ], [ -1797129.614223, 1511667.750540 ], [ -1825052.550015, 1497522.786732 ], [ -184 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GB", "ISO2": "GA", "ISO3": "GAB", "UN": 266, "NAME": "Gabon", "AREA": 25767, "POP2005": 1290693, "REGION": 2, "SUBREGION": 17, "LON": 11.797000, "LAT": -0.591000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1002741.066485, -85471.258160 ], [ 995938.170967, -73286.887415 ], [ 1002617.493289, -66669.165436 ], [ 1002741.066485, -85471.258160 ] ] ], [ [ [ 1394122.007064, 254246.966015 ], [ 1479869.065394, 240909.276535 ], [ 146 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GG", "ISO2": "GE", "ISO3": "GEO", "UN": 268, "NAME": "Georgia", "AREA": 6949, "POP2005": 4473409, "REGION": 142, "SUBREGION": 145, "LON": 43.518000, "LAT": 42.176000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4625060.236031, 5221958.012412 ], [ 4611810.211000, 5272184.242246 ], [ 4453110.027980, 5369879.177816 ], [ 4480986.543545, 5401061.861153 ], [ 4770039.178616, 5339280.637674 ], [ 4888254.132628, 5248762.587996 ], [ 5002108 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GH", "ISO2": "GH", "ISO3": "GHA", "UN": 288, "NAME": "Ghana", "AREA": 22754, "POP2005": 2253501, "REGION": 2, "SUBREGION": 11, "LON": -1.207000, "LAT": 7.960000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 71192.153947, 651848.322199 ], [ 73718.215832, 641630.431289 ], [ 28479.199288, 642034.331085 ], [ -88560.888818, 580558.048495 ], [ -179595.408040, 559633.271964 ], [ -229194.475080, 527233.336951 ], [ -345428.944031, 566806.63 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GJ", "ISO2": "GD", "ISO3": "GRD", "UN": 308, "NAME": "Grenada", "AREA": 34, "POP2005": 105237, "REGION": 19, "SUBREGION": 29, "LON": -61.678000, "LAT": 12.118000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6873638.809399, 1345423.779837 ], [ -6858610.455503, 1372021.566570 ], [ -6860466.151414, 1351177.750979 ], [ -6873638.809399, 1345423.779837 ] ] ], [ [ [ -6855054.465689, 1379363.072194 ], [ -6856075.265419, 1379647.79 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GL", "ISO2": "GL", "ISO3": "GRL", "UN": 304, "NAME": "Greenland", "AREA": 41045, "POP2005": 57475, "REGION": 19, "SUBREGION": 21, "LON": -41.391000, "LAT": 74.719000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -4858879.371406, 8365861.279869 ], [ -4910921.097464, 8361801.068566 ], [ -4893388.141776, 8395223.119401 ], [ -4858879.371406, 8365861.279869 ] ] ], [ [ [ -4819577.999363, 8382132.988285 ], [ -4823226.593513, 839911 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GM", "ISO2": "DE", "ISO3": "DEU", "UN": 276, "NAME": "Germany", "AREA": 34895, "POP2005": 82652369, "REGION": 150, "SUBREGION": 155, "LON": 9.851000, "LAT": 51.110000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 969621.326779, 6056562.189552 ], [ 966096.730475, 6055989.323614 ], [ 965201.992594, 6058927.241658 ], [ 969621.326779, 6056562.189552 ] ] ], [ [ [ 757683.953803, 7095178.684864 ], [ 751066.630404, 7087313.445040 ], [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GQ", "ISO2": "GU", "ISO3": "GUM", "UN": 316, "NAME": "Guam", "AREA": 55, "POP2005": 16857, "REGION": 9, "SUBREGION": 57, "LON": 144.707000, "LAT": 13.385000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 16108978.056834, 1486592.921546 ], [ 16102947.991337, 1508647.298706 ], [ 16127438.390631, 1534505.809113 ], [ 16108978.056834, 1486592.921546 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "GR", "ISO2": "GR", "ISO3": "GRC", "UN": 300, "NAME": "Greece", "AREA": 12890, "POP2005": 11099737, "REGION": 150, "SUBREGION": 39, "LON": 21.766000, "LAT": 39.666000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 2685984.467430, 4144419.781499 ], [ 2685984.467430, 4137939.478070 ], [ 2676645.986667, 4143515.109616 ], [ 2685984.467430, 4144419.781499 ] ] ], [ [ [ 2994556.084656, 4212760.042086 ], [ 2994277.451971, 4221104.6912 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GT", "ISO2": "GT", "ISO3": "GTM", "UN": 320, "NAME": "Guatemala", "AREA": 10843, "POP2005": 12709564, "REGION": 19, "SUBREGION": 13, "LON": -90.398000, "LAT": 15.256000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -10088621.066804, 1566250.506594 ], [ -10172902.166478, 1571794.534821 ], [ -10268864.576919, 1637456.122840 ], [ -10211244.717929, 1813409.471891 ], [ -10067952.488268, 1814954.488448 ], [ -10063994.746411, 1852993.3355 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GV", "ISO2": "GN", "ISO3": "GIN", "UN": 324, "NAME": "Guinea", "AREA": 24572, "POP2005": 9002656, "REGION": 2, "SUBREGION": 11, "LON": -10.942000, "LAT": 10.439000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1514254.876931, 1088884.194454 ], [ -1632438.661485, 1172810.829402 ], [ -1635623.512117, 1236107.446612 ], [ -1671667.872680, 1227168.577926 ], [ -1634943.238709, 1289961.619205 ], [ -1526097.489640, 1313322.067048 ], [ -15 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GY", "ISO2": "GY", "ISO3": "GUY", "UN": 328, "NAME": "Guyana", "AREA": 19685, "POP2005": 739472, "REGION": 19, "SUBREGION": 5, "LON": -58.974000, "LAT": 4.792000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6506686.798421, 769625.188863 ], [ -6502543.041695, 777724.126177 ], [ -6493049.492882, 776322.293776 ], [ -6506686.798421, 769625.188863 ] ] ], [ [ [ -6655699.848033, 931825.394648 ], [ -6509159.872228, 820451.493289 ] [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "HA", "ISO2": "HT", "ISO3": "HTI", "UN": 332, "NAME": "Haiti", "AREA": 2756, "POP2005": 9296291, "REGION": 19, "SUBREGION": 29, "LON": -72.278000, "LAT": 19.142000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -8191414.902596, 2044214.804725 ], [ -8200629.811006, 2044247.410058 ], [ -8204927.270596, 2049419.359845 ], [ -8191414.902596, 2044214.804725 ] ] ], [ [ [ -8105791.842112, 2119516.822176 ], [ -8159719.014867, 2146369.2 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "HO", "ISO2": "HN", "ISO3": "HND", "UN": 340, "NAME": "Honduras", "AREA": 11189, "POP2005": 683411, "REGION": 19, "SUBREGION": 13, "LON": -86.863000, "LAT": 14.819000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9754093.529187, 1487895.477059 ], [ -9759349.033667, 1491549.018958 ], [ -9753227.240910, 1492438.659659 ], [ -9754093.529187, 1487895.477059 ] ] ], [ [ [ -9748464.325177, 1501876.695134 ], [ -9749548.020419, 149444 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "HR", "ISO2": "HR", "ISO3": "HRV", "UN": 191, "NAME": "Croatia", "AREA": 5592, "POP2005": 455149, "REGION": 150, "SUBREGION": 39, "LON": 16.693000, "LAT": 45.723000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1881732.495102, 5270374.972345 ], [ 1871713.723944, 5276733.531937 ], [ 1885721.234028, 5276775.180924 ], [ 1881732.495102, 5270374.972345 ] ] ], [ [ [ 1975364.457550, 5265199.241895 ], [ 1928238.906361, 5279767.449735 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "HU", "ISO2": "HU", "ISO3": "HUN", "UN": 348, "NAME": "Hungary", "AREA": 9210, "POP2005": 10086387, "REGION": 150, "SUBREGION": 151, "LON": 19.134000, "LAT": 47.070000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2094701.084647, 5766412.593437 ], [ 1966953.174722, 5753947.005779 ], [ 1848779.854200, 5856997.273869 ], [ 1793557.928361, 5920834.926131 ], [ 1837946.575314, 5943161.221704 ], [ 1860581.278697, 6031306.072342 ], [ 183126 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IC", "ISO2": "IS", "ISO3": "ISL", "UN": 352, "NAME": "Iceland", "AREA": 10025, "POP2005": 295732, "REGION": 150, "SUBREGION": 154, "LON": -18.480000, "LAT": 64.764000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1677677.678029, 9916258.765292 ], [ -1627367.502082, 9875321.886103 ], [ -1652908.868689, 9803712.660212 ], [ -1595950.581432, 9817720.186469 ], [ -1621213.871951, 9739979.949803 ], [ -1515212.892469, 9744006.907109 ], [  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IN", "ISO2": "IN", "ISO3": "IND", "UN": 356, "NAME": "India", "AREA": 297319, "POP2005": 1134403141, "REGION": 142, "SUBREGION": 34, "LON": 78.500000, "LAT": 21.000000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 10454321.447099, 784391.320669 ], [ 10444425.399837, 752652.381263 ], [ 10427419.010344, 801592.232570 ], [ 10454321.447099, 784391.320669 ] ] ], [ [ [ 10426428.726178, 826718.715034 ], [ 10425564.138458, 828028.66 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IR", "ISO2": "IR", "ISO3": "IRN", "UN": 364, "NAME": "Iran (Islamic Republic of)", "AREA": 163620, "POP2005": 69420607, "REGION": 142, "SUBREGION": 34, "LON": 54.301000, "LAT": 32.565000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 6015086.234780, 3059240.261077 ], [ 6000521.637883, 3065633.411664 ], [ 6013354.548781, 3067880.128161 ], [ 6015086.234780, 3059240.261077 ] ] ], [ [ [ 5935338.621368, 3098229.046329 ], [ 5922566 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IS", "ISO2": "IL", "ISO3": "ISR", "UN": 376, "NAME": "Israel", "AREA": 2171, "POP2005": 6692037, "REGION": 142, "SUBREGION": 145, "LON": 34.851000, "LAT": 31.026000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 3925094.075913, 3735412.239356 ], [ 3924197.174776, 3735521.593565 ], [ 3923888.040550, 3738250.137186 ], [ 3925094.075913, 3735412.239356 ] ] ], [ [ [ 3965604.797086, 3927965.851046 ], [ 3968416.059506, 3853603.20959 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IT", "ISO2": "IT", "ISO3": "ITA", "UN": 380, "NAME": "Italy", "AREA": 29411, "POP2005": 5864636, "REGION": 150, "SUBREGION": 39, "LON": 12.800000, "LAT": 42.700000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1350057.960094, 5942345.520583 ], [ 1384876.136466, 5891754.213365 ], [ 1527153.688969, 5865144.367665 ], [ 1489794.867858, 5828107.214579 ], [ 1521644.710008, 5808839.167054 ], [ 1500586.735893, 5782129.463760 ], [ 15 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IV", "ISO2": "CI", "ISO3": "CIV", "UN": 384, "NAME": "Cote d'Ivoire", "AREA": 31800, "POP2005": 18584701, "REGION": 2, "SUBREGION": 11, "LON": -5.556000, "LAT": 7.632000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -345343.339342, 569547.363242 ], [ -345428.944031, 566806.636539 ], [ -352697.327543, 570405.377636 ], [ -345343.339342, 569547.363242 ] ] ], [ [ [ -532917.349246, 576115.677797 ], [ -461573.912111, 588290.029574 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "IZ", "ISO2": "IQ", "ISO3": "IRQ", "UN": 368, "NAME": "Iraq", "AREA": 43737, "POP2005": 27995984, "REGION": 142, "SUBREGION": 145, "LON": 43.772000, "LAT": 33.048000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5098180.317046, 4152205.650588 ], [ 5054022.212758, 4026058.837576 ], [ 5140949.822007, 3929902.560050 ], [ 5132631.807015, 3890989.731915 ], [ 5280346.314768, 3815638.651871 ], [ 5328245.199225, 3736903.601578 ], [ 5309258. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "JA", "ISO2": "JP", "ISO3": "JPN", "UN": 392, "NAME": "Japan", "AREA": 36450, "POP2005": 127896740, "REGION": 142, "SUBREGION": 30, "LON": 139.068000, "LAT": 36.491000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 17138591.792383, 2789396.576953 ], [ 17136488.924805, 2790108.972274 ], [ 17137942.926943, 2792619.623152 ], [ 17138591.792383, 2789396.576953 ] ] ], [ [ [ 13789236.717770, 2784206.723335 ], [ 13767868.321862, 27919 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "JM", "ISO2": "JM", "ISO3": "JAM", "UN": 388, "NAME": "Jamaica", "AREA": 1083, "POP2005": 2682469, "REGION": 19, "SUBREGION": 29, "LON": -77.320000, "LAT": 18.151000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8586290.288448, 2023377.336773 ], [ -8653235.492502, 2019836.193304 ], [ -8720739.631719, 2080022.369731 ], [ -8565509.611185, 2083769.600101 ], [ -8484895.709496, 2026334.034580 ], [ -8586290.288448, 2023377.336773 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "JO", "ISO2": "JO", "ISO3": "JOR", "UN": 400, "NAME": "Jordan", "AREA": 8824, "POP2005": 5544066, "REGION": 142, "SUBREGION": 145, "LON": 36.319000, "LAT": 30.703000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3891883.909586, 3421652.515858 ], [ 3893953.561559, 3445293.244791 ], [ 3949414.601664, 3697505.699462 ], [ 3957693.654834, 3815166.935355 ], [ 3968416.059506, 3853603.209599 ], [ 4100762.466277, 3804547.052563 ], [ 4318606. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KE", "ISO2": "KE", "ISO3": "KEN", "UN": 404, "NAME": "Kenya", "AREA": 56914, "POP2005": 35598952, "REGION": 2, "SUBREGION": 14, "LON": 37.858000, "LAT": 0.530000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4579467.223506, -236546.231859 ], [ 4558563.426886, -242023.329626 ], [ 4571211.213472, -227603.920075 ], [ 4579467.223506, -236546.231859 ] ] ], [ [ [ 4000883.947469, 515133.364663 ], [ 4123242.658206, 487558.696023 ],  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KG", "ISO2": "KG", "ISO3": "KGZ", "UN": 417, "NAME": "Kyrgyzstan", "AREA": 19180, "POP2005": 5203547, "REGION": 142, "SUBREGION": 143, "LON": 74.555000, "LAT": 41.465000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 8931610.695975, 5190417.717318 ], [ 8691917.791038, 5018359.599737 ], [ 8557560.175028, 5014422.665855 ], [ 8498778.363192, 4916966.577298 ], [ 8426574.315074, 4909503.807669 ], [ 8413309.929829, 4960558.834070 ], [ 833 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KN", "ISO2": "KP", "ISO3": "PRK", "UN": 408, "NAME": "Korea, Democratic People's Republic of", "AREA": 12041, "POP2005": 23615611, "REGION": 142, "SUBREGION": 30, "LON": 126.451000, "LAT": 39.778000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13897804.279526, 4793145.685266 ], [ 13902597.696800, 4808786.792076 ], [ 13907605.181454, 4809188.037892 ], [ 13897804.279526, 4793145.685266 ] ] ], [ [ [ 14542654.156001, 5222132.89 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KR", "ISO2": "KI", "ISO3": "KIR", "UN": 296, "NAME": "Kiribati", "AREA": 73, "POP2005": 92003, "REGION": 9, "SUBREGION": 57, "LON": 175.036000, "LAT": -1.508000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -16896476.402355, -1285039.424162 ], [ -16899194.156403, -1283146.106479 ], [ -16899907.603019, -1276647.725792 ], [ -16896476.402355, -1285039.424162 ] ] ], [ [ [ -16964135.053025, -1130792.195197 ], [ -16965837.128039,  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KS", "ISO2": "KR", "ISO3": "KOR", "UN": 410, "NAME": "Korea, Republic of", "AREA": 9873, "POP2005": 47869837, "REGION": 142, "SUBREGION": 30, "LON": 128.103000, "LAT": 36.504000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 14095519.717680, 3927202.118382 ], [ 14043881.388888, 3937151.742108 ], [ 14126225.306784, 3964974.138213 ], [ 14095519.717680, 3927202.118382 ] ] ], [ [ [ 14111476.364810, 4066572.313234 ], [ 14098767.35 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KU", "ISO2": "KW", "ISO3": "KWT", "UN": 414, "NAME": "Kuwait", "AREA": 1782, "POP2005": 2700, "REGION": 142, "SUBREGION": 145, "LON": 47.376000, "LAT": 29.476000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5383687.537656, 3433081.352828 ], [ 5386564.144617, 3426088.174393 ], [ 5373050.069755, 3431910.022267 ], [ 5383687.537656, 3433081.352828 ] ] ], [ [ [ 5368350.049534, 3451560.403921 ], [ 5360280.833605, 3502513.847723 ] [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KZ", "ISO2": "KZ", "ISO3": "KAZ", "UN": 398, "NAME": "Kazakhstan", "AREA": 269970, "POP2005": 15210609, "REGION": 142, "SUBREGION": 143, "LON": 67.301000, "LAT": 48.160000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5578899.177823, 5596060.605320 ], [ 5563622.024865, 5614657.493872 ], [ 5578528.038640, 5633729.276658 ], [ 5578899.177823, 5596060.605320 ] ] ], [ [ [ 5598442.427626, 5613652.969218 ], [ 5595535.319124, 562729 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LA", "ISO2": "LA", "ISO3": "LAO", "UN": 418, "NAME": "Lao People's Democratic Republic", "AREA": 23080, "POP2005": 566391, "REGION": 142, "SUBREGION": 35, "LON": 102.471000, "LAT": 19.905000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 11972032.748548, 1655642.122618 ], [ 11894887.450872, 1609008.134459 ], [ 11860061.036858, 1642997.479292 ], [ 11800390.004930, 1617051.023507 ], [ 11806171.271365, 1566186.622777 ], [ 11711990.6406 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LE", "ISO2": "LB", "ISO3": "LBN", "UN": 422, "NAME": "Lebanon", "AREA": 1023, "POP2005": 401074, "REGION": 142, "SUBREGION": 145, "LON": 35.888000, "LAT": 33.920000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3965604.797086, 3927965.851046 ], [ 3907406.522021, 3907735.062631 ], [ 4004470.550143, 4116080.251672 ], [ 4058708.523003, 4114426.545731 ], [ 4076936.199065, 4056361.037777 ], [ 3965604.797086, 3927965.851046 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "LG", "ISO2": "LV", "ISO3": "LVA", "UN": 428, "NAME": "Latvia", "AREA": 6205, "POP2005": 2301793, "REGION": 150, "SUBREGION": 154, "LON": 25.641000, "LAT": 56.858000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2345346.602964, 7645613.878261 ], [ 2343676.921921, 7726749.435328 ], [ 2419343.228842, 7878966.436055 ], [ 2516964.299696, 7916315.011886 ], [ 2647826.595015, 7754044.136594 ], [ 2717030.137578, 7812759.691454 ], [ 2706731. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BO", "ISO2": "BY", "ISO3": "BLR", "UN": 112, "NAME": "Belarus", "AREA": 20748, "POP2005": 9795287, "REGION": 150, "SUBREGION": 151, "LON": 28.047000, "LAT": 53.540000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2962568.874255, 7493954.958274 ], [ 3135648.641179, 7588365.324599 ], [ 3442694.068187, 7479701.999200 ], [ 3454212.629858, 7370279.545014 ], [ 3426568.326751, 7321912.617708 ], [ 3544875.898579, 7182369.537648 ], [ 353597 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LH", "ISO2": "LT", "ISO3": "LTU", "UN": 440, "NAME": "Lithuania", "AREA": 6268, "POP2005": 3425077, "REGION": 150, "SUBREGION": 154, "LON": 23.897000, "LAT": 55.336000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 2342656.456149, 7425470.206824 ], [ 2336018.808872, 7415724.883635 ], [ 2331345.505329, 7417806.677380 ], [ 2347727.615552, 7502873.541630 ], [ 2342656.456149, 7425470.206824 ] ] ], [ [ [ 2782987.269832, 7617477.09 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LI", "ISO2": "LR", "ISO3": "LBR", "UN": 430, "NAME": "Liberia", "AREA": 9632, "POP2005": 3441796, "REGION": 2, "SUBREGION": 11, "LON": -9.657000, "LAT": 6.682000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1202926.655154, 714266.977232 ], [ -1279320.434948, 773005.706783 ], [ -1142878.361472, 948397.490228 ], [ -1055715.088862, 932480.318038 ], [ -1055883.292612, 821797.290175 ], [ -1013780.480082, 803493.505485 ], [ -964088.795 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LO", "ISO2": "SK", "ISO3": "SVK", "UN": 703, "NAME": "Slovakia", "AREA": 4808, "POP2005": 5386995, "REGION": 150, "SUBREGION": 151, "LON": 19.491000, "LAT": 48.707000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1920445.561261, 6111013.953630 ], [ 1910953.348281, 6108934.142271 ], [ 1886440.351130, 6210469.981992 ], [ 2098511.105539, 6363106.367966 ], [ 2168008.865516, 6377288.574204 ], [ 2234676.884038, 6304654.905052 ], [ 240660 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LS", "ISO2": "LI", "ISO3": "LIE", "UN": 438, "NAME": "Liechtenstein", "AREA": 16, "POP2005": 34598, "REGION": 150, "SUBREGION": 155, "LON": 9.555000, "LAT": 47.153000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1061272.046523, 5987002.343460 ], [ 1068515.160510, 5952499.800695 ], [ 1054711.766291, 5951457.565161 ], [ 1061272.046523, 5987002.343460 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "LY", "ISO2": "LY", "ISO3": "LBY", "UN": 434, "NAME": "Libyan Arab Jamahiriya", "AREA": 175954, "POP2005": 5918217, "REGION": 2, "SUBREGION": 15, "LON": 18.023000, "LAT": 27.044000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1107443.252482, 3226858.170154 ], [ 1087189.339050, 3430205.818390 ], [ 1035704.074558, 3519305.557435 ], [ 1061666.562798, 3533714.212910 ], [ 1136973.864361, 3597841.541590 ], [ 1145168.314717, 3723231.51342 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MA", "ISO2": "MG", "ISO3": "MDG", "UN": 450, "NAME": "Madagascar", "AREA": 58154, "POP2005": 18642586, "REGION": 2, "SUBREGION": 14, "LON": 46.706000, "LAT": -19.374000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5547452.361435, -1931271.898201 ], [ 5550451.240844, -1910803.726544 ], [ 5567149.334323, -1888901.770038 ], [ 5547452.361435, -1931271.898201 ] ] ], [ [ [ 5256475.279360, -1739576.550598 ], [ 5255145.275068, -173 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MB", "ISO2": "MQ", "ISO3": "MTQ", "UN": 474, "NAME": "Martinique", "AREA": 106, "POP2005": 395896, "REGION": 19, "SUBREGION": 29, "LON": -61.021000, "LAT": 14.653000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6774997.718051, 1620467.024949 ], [ -6809939.570377, 1675022.444712 ], [ -6783902.609397, 1659350.055419 ], [ -6774997.718051, 1620467.024949 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "MG", "ISO2": "MN", "ISO3": "MNG", "UN": 496, "NAME": "Mongolia", "AREA": 156650, "POP2005": 2580704, "REGION": 142, "SUBREGION": 30, "LON": 102.876000, "LAT": 46.056000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 10132327.659237, 5877044.211850 ], [ 10027039.903733, 6087973.785626 ], [ 9868842.439533, 6137315.291574 ], [ 9793144.295238, 6203379.810398 ], [ 9778381.772286, 6304258.674861 ], [ 10277323.633705, 6588633.495345 ], [ 1 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MH", "ISO2": "MS", "ISO3": "MSR", "UN": 500, "NAME": "Montserrat", "AREA": 10, "POP2005": 5628, "REGION": 19, "SUBREGION": 29, "LON": -62.187000, "LAT": 16.736000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6920887.921988, 1882605.846045 ], [ -6928154.524388, 1887318.883971 ], [ -6924289.400349, 1899138.893808 ], [ -6920887.921988, 1882605.846045 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "MK", "ISO2": "MK", "ISO3": "MKD", "UN": 807, "NAME": "The former Yugoslav Republic of Macedonia", "AREA": 2543, "POP2005": 2033655, "REGION": 150, "SUBREGION": 39, "LON": 21.698000, "LAT": 41.600000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2317795.362951, 4998911.055321 ], [ 2281245.277941, 5061303.374974 ], [ 2292028.463056, 5143347.932344 ], [ 2489691.135771, 5209619.696570 ], [ 2561987.022469, 5125426.687669 ], [ 2553179.75 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ML", "ISO2": "ML", "ISO3": "MLI", "UN": 466, "NAME": "Mali", "AREA": 122019, "POP2005": 1161109, "REGION": 2, "SUBREGION": 11, "LON": -3.524000, "LAT": 17.350000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -949987.176091, 1288165.363699 ], [ -1019191.831849, 1401081.577141 ], [ -1080015.688424, 1349027.525150 ], [ -1149250.511764, 1371325.273233 ], [ -1185858.482909, 1333489.048392 ], [ -1216598.469736, 1371262.057475 ], [ -12596 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MO", "ISO2": "MA", "ISO3": "MAR", "UN": 504, "NAME": "Morocco", "AREA": 44630, "POP2005": 30494991, "REGION": 2, "SUBREGION": 15, "LON": -5.758000, "LAT": 32.706000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1007794.163145, 3860156.037021 ], [ -761765.509390, 4031300.899657 ], [ -658871.568216, 4271853.101841 ], [ -600630.657786, 4289115.432863 ], [ -595095.518745, 4278855.848076 ], [ -522737.849730, 4192304.138311 ], [ -328052 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MP", "ISO2": "MU", "ISO3": "MUS", "UN": 480, "NAME": "Mauritius", "AREA": 203, "POP2005": 1241173, "REGION": 2, "SUBREGION": 14, "LON": 57.583000, "LAT": -20.255000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 6408940.827098, -2334041.696791 ], [ 6379132.027812, -2326317.766170 ], [ 6414723.652006, -2271418.586878 ], [ 6408940.827098, -2334041.696791 ] ] ], [ [ [ 7065045.660690, -2241763.191885 ], [ 7049708.172568, -2242025 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MR", "ISO2": "MR", "ISO3": "MRT", "UN": 478, "NAME": "Mauritania", "AREA": 102522, "POP2005": 2963105, "REGION": 2, "SUBREGION": 11, "LON": -10.332000, "LAT": 20.260000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1828701.157645, 2226131.856941 ], [ -1832319.152416, 2237492.124269 ], [ -1819455.628657, 2257209.213760 ], [ -1828701.157645, 2226131.856941 ] ] ], [ [ [ -741697.054229, 3015087.520628 ], [ -535013.829216, 28757 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MT", "ISO2": "MT", "ISO3": "MLT", "UN": 470, "NAME": "Malta", "AREA": 32, "POP2005": 402617, "REGION": 150, "SUBREGION": 39, "LON": 14.442000, "LAT": 35.890000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1621059.137859, 4275919.448610 ], [ 1600217.457514, 4279657.296103 ], [ 1594806.105747, 4297715.956746 ], [ 1621059.137859, 4275919.448610 ] ] ], [ [ [ 1588250.834893, 4302187.768352 ], [ 1578633.944083, 4308994.579944 ],  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MU", "ISO2": "OM", "ISO3": "OMN", "UN": 512, "NAME": "Oman", "AREA": 30950, "POP2005": 2507042, "REGION": 142, "SUBREGION": 145, "LON": 57.407000, "LAT": 21.656000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 6219945.155978, 1978036.538624 ], [ 6214873.996575, 1978360.660992 ], [ 6218275.363616, 1981051.873285 ], [ 6219945.155978, 1978036.538624 ] ] ], [ [ [ 6236581.185960, 1977258.291659 ], [ 6229160.072106, 1981343.589658 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MV", "ISO2": "MV", "ISO3": "MDV", "UN": 462, "NAME": "Maldives", "AREA": 30, "POP2005": 295297, "REGION": 142, "SUBREGION": 34, "LON": 72.920000, "LAT": 3.548000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 8145956.914417, -76781.356268 ], [ 8143730.079323, -76131.983025 ], [ 8145460.986086, -75884.613553 ], [ 8145956.914417, -76781.356268 ] ] ], [ [ [ 8148740.903562, -75791.766534 ], [ 8147285.289901, -76224.718775 ], [ 81 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MX", "ISO2": "MX", "ISO3": "MEX", "UN": 484, "NAME": "Mexico", "AREA": 190869, "POP2005": 104266392, "REGION": 19, "SUBREGION": 13, "LON": -102.535000, "LAT": 23.951000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -12773108.130431, 2075364.043914 ], [ -12779819.301514, 2076536.528439 ], [ -12771005.262853, 2078947.469880 ], [ -12773108.130431, 2075364.043914 ] ] ], [ [ [ -9726294.210971, 2084454.028972 ], [ -9721718.180878, [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MY", "ISO2": "MY", "ISO3": "MYS", "UN": 458, "NAME": "Malaysia", "AREA": 32855, "POP2005": 25652985, "REGION": 142, "SUBREGION": 35, "LON": 102.195000, "LAT": 4.201000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 11590612.227779, 258208.324572 ], [ 11594478.242809, 254742.077319 ], [ 11588477.936089, 255453.935317 ], [ 11590612.227779, 258208.324572 ] ] ], [ [ [ 12397743.082854, 262819.197711 ], [ 12390259.048484, 272599.43 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MZ", "ISO2": "MZ", "ISO3": "MOZ", "UN": 508, "NAME": "Mozambique", "AREA": 78409, "POP2005": 20532675, "REGION": 2, "SUBREGION": 14, "LON": 37.923000, "LAT": -14.422000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 3668471.146219, -3006342.227380 ], [ 3661884.817227, -3004139.536617 ], [ 3671378.366041, -2995709.772677 ], [ 3668471.146219, -3006342.227380 ] ] ], [ [ [ 3950542.490745, -2473747.595268 ], [ 3944667.938577, -248 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MI", "ISO2": "MW", "ISO3": "MWI", "UN": 454, "NAME": "Malawi", "AREA": 9408, "POP2005": 13226091, "REGION": 2, "SUBREGION": 14, "LON": 33.808000, "LAT": -13.400000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 3866372.599242, -1356585.229103 ], [ 3865445.196564, -1349438.982745 ], [ 3868877.176465, -1350735.423365 ], [ 3866372.599242, -1356585.229103 ] ] ], [ [ [ 3854313.358804, -1349881.633069 ], [ 3851963.404354, -1347067. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NC", "ISO2": "NC", "ISO3": "NCL", "UN": 540, "NAME": "New Caledonia", "AREA": 1828, "POP2005": 234185, "REGION": 9, "SUBREGION": 54, "LON": 165.447000, "LAT": -21.359000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 18649846.770024, -2595041.548114 ], [ 18646908.158106, -2594370.926928 ], [ 18649507.022939, -2589880.709699 ], [ 18649846.770024, -2595041.548114 ] ] ], [ [ [ 18646198.162394, -2592427.268521 ], [ 18638744.65456 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NE", "ISO2": "NU", "ISO3": "NIU", "UN": 570, "NAME": "Niue", "AREA": 26, "POP2005": 1632, "REGION": 9, "SUBREGION": 61, "LON": -169.869000, "LAT": -19.052000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -18912501.323688, -2172080.411269 ], [ -18916707.085370, -2156898.164820 ], [ -18903998.184384, -2151207.640369 ], [ -18912501.323688, -2172080.411269 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "NG", "ISO2": "NE", "ISO3": "NER", "UN": 562, "NAME": "Niger", "AREA": 126670, "POP2005": 1326419, "REGION": 2, "SUBREGION": 11, "LON": 9.398000, "LAT": 17.426000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 472551.238417, 2113216.979913 ], [ 472582.073916, 2172210.857546 ], [ 647044.428916, 2207529.202363 ], [ 829420.041239, 2374342.695327 ], [ 1334328.293406, 2695305.993377 ], [ 1507698.715521, 2652421.940333 ], [ 1584632.840123, [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AA", "ISO2": "AW", "ISO3": "ABW", "UN": 533, "NAME": "Aruba", "AREA": 0, "POP2005": 102897, "REGION": 19, "SUBREGION": 29, "LON": -69.977000, "LAT": 12.517000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -7779254.593057, 1392531.488575 ], [ -7798982.076618, 1407004.627414 ], [ -7799384.719216, 1417333.370965 ], [ -7779254.593057, 1392531.488575 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "AV", "ISO2": "AI", "ISO3": "AIA", "UN": 660, "NAME": "Anguilla", "AREA": 0, "POP2005": 12256, "REGION": 19, "SUBREGION": 29, "LON": -63.032000, "LAT": 18.237000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -7031804.881503, 2056805.432260 ], [ -7009788.446572, 2069436.273110 ], [ -7012355.028752, 2064161.347957 ], [ -7031804.881503, 2056805.432260 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "BE", "ISO2": "BE", "ISO3": "BEL", "UN": 56, "NAME": "Belgium", "AREA": 0, "POP2005": 10398049, "REGION": 150, "SUBREGION": 155, "LON": 4.664000, "LAT": 50.643000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 478938.194202, 6667980.628747 ], [ 473371.440426, 6687922.735962 ], [ 561204.856371, 6707834.658028 ], [ 651126.737283, 6649002.290180 ], [ 627934.657210, 6592991.220435 ], [ 669230.292112, 6578469.565869 ], [ 712244.811271, 65 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "HK", "ISO2": "HK", "ISO3": "HKG", "UN": 344, "NAME": "Hong Kong", "AREA": 0, "POP2005": 7057418, "REGION": 142, "SUBREGION": 30, "LON": 114.129000, "LAT": 22.423000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 12717817.009200, 2535954.637240 ], [ 12704334.326434, 2545175.822965 ], [ 12712808.633990, 2546445.646901 ], [ 12717817.009200, 2535954.637240 ] ] ], [ [ [ 12678917.303699, 2535052.898185 ], [ 12670971.318446, 2539428 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "CQ", "ISO2": "MP", "ISO3": "MNP", "UN": 580, "NAME": "Northern Mariana Islands", "AREA": 0, "POP2005": 80258, "REGION": 9, "SUBREGION": 57, "LON": 145.623000, "LAT": 15.005000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 16172678.965648, 1592387.963032 ], [ 16154680.607738, 1588274.181135 ], [ 16167729.255809, 1596597.699016 ], [ 16172678.965648, 1592387.963032 ] ] ], [ [ [ 16200909.699833, 1669423.810243 ], [ 16200291.4313 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "FO", "ISO2": "FO", "ISO3": "FRO", "UN": 234, "NAME": "Faroe Islands", "AREA": 0, "POP2005": 48205, "REGION": 150, "SUBREGION": 154, "LON": -6.864000, "LAT": 62.050000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -740862.074803, 8715798.890920 ], [ -775092.911645, 8769399.719977 ], [ -748561.831452, 8758672.807534 ], [ -740862.074803, 8715798.890920 ] ] ], [ [ [ -735172.399672, 8816979.789986 ], [ -740521.930027, 8798406.775 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AN", "ISO2": "AD", "ISO3": "AND", "UN": 20, "NAME": "Andorra", "AREA": 0, "POP2005": 73483, "REGION": 150, "SUBREGION": 39, "LON": 1.576000, "LAT": 42.549000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 198340.163136, 5246743.071889 ], [ 191871.498846, 5237598.909320 ], [ 160949.393332, 5251578.599438 ], [ 198340.163136, 5246743.071889 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "GI", "ISO2": "GI", "ISO3": "GIB", "UN": 292, "NAME": "Gibraltar", "AREA": 0, "POP2005": 291, "REGION": 150, "SUBREGION": 39, "LON": -5.345000, "LAT": 36.138000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -593834.714193, 4323012.493332 ], [ -594249.045337, 4316067.477122 ], [ -596204.817471, 4323115.492602 ], [ -593834.714193, 4323012.493332 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "IM", "ISO2": "IM", "ISO3": "IMN", "UN": 833, "NAME": "Isle of Man", "AREA": 0, "POP2005": 78357, "REGION": 150, "SUBREGION": 154, "LON": -4.527000, "LAT": 54.229000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -531859.925403, 7180683.826462 ], [ -484703.653269, 7248349.355471 ], [ -489187.268400, 7205534.895755 ], [ -531859.925403, 7180683.826462 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "LU", "ISO2": "LU", "ISO3": "LUX", "UN": 442, "NAME": "Luxembourg", "AREA": 0, "POP2005": 456613, "REGION": 150, "SUBREGION": 155, "LON": 6.088000, "LAT": 49.771000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 670839.749310, 6477724.866481 ], [ 682879.842795, 6468446.025077 ], [ 726297.783789, 6413196.030588 ], [ 708233.524740, 6353172.645691 ], [ 646530.244188, 6367855.122981 ], [ 670839.749310, 6477724.866481 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "MC", "ISO2": "MO", "ISO3": "MAC", "UN": 446, "NAME": "Macau", "AREA": 0, "POP2005": 47309, "REGION": 142, "SUBREGION": 30, "LON": 113.545000, "LAT": 22.200000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12638286.802754, 2534921.729223 ], [ 12640821.102281, 2537085.245622 ], [ 12640602.804760, 2533517.046861 ], [ 12638286.802754, 2534921.729223 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "MN", "ISO2": "MC", "ISO3": "MCO", "UN": 492, "NAME": "Monaco", "AREA": 0, "POP2005": 325, "REGION": 150, "SUBREGION": 155, "LON": 7.412000, "LAT": 43.750000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 828138.308622, 5427994.666008 ], [ 822830.150023, 5423375.807338 ], [ 822403.573734, 5426620.138185 ], [ 825557.700186, 5430003.272109 ], [ 828138.308622, 5427994.666008 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "", "ISO2": "PS", "ISO3": "PSE", "UN": 275, "NAME": "Palestine", "AREA": 0, "POP2005": 3762005, "REGION": 142, "SUBREGION": 145, "LON": 35.278000, "LAT": 32.037000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 3822061.208015, 3666524.863170 ], [ 3814649.333679, 3660903.160403 ], [ 3808981.167847, 3674811.273815 ], [ 3839470.129221, 3710407.945514 ], [ 3822061.208015, 3666524.863170 ] ] ], [ [ [ 3927629.265997, 3831359.567314  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MJ", "ISO2": "ME", "ISO3": "MNE", "UN": 499, "NAME": "Montenegro", "AREA": 0, "POP2005": 607969, "REGION": 150, "SUBREGION": 39, "LON": 19.254000, "LAT": 42.792000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2054462.984907, 5246117.909291 ], [ 2081674.143876, 5350951.019472 ], [ 2140541.226441, 5390417.379703 ], [ 2265227.850369, 5294694.139487 ], [ 2234340.587856, 5245375.355834 ], [ 2186964.014450, 5254014.690410 ], [ 2156010.4 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MF", "ISO2": "YT", "ISO3": "MYT", "UN": 175, "NAME": "Mayotte", "AREA": 0, "POP2005": 0, "REGION": 2, "SUBREGION": 14, "LON": 45.155000, "LAT": -12.777000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5040824.173929, -1437367.590898 ], [ 5038598.118072, -1433340.712274 ], [ 5040886.178886, -1430899.426128 ], [ 5040824.173929, -1437367.590898 ] ] ], [ [ [ 5032196.913393, -1442568.768181 ], [ 5020230.290772, -1458113.885833 ], [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "", "ISO2": "AX", "ISO3": "ALA", "UN": 248, "NAME": "�land Islands", "AREA": 0, "POP2005": 0, "REGION": 150, "SUBREGION": 154, "LON": 19.952000, "LAT": 60.198000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 2249859.415429, 8395285.565611 ], [ 2226296.864091, 8412054.554649 ], [ 2249241.035658, 8413912.699890 ], [ 2249859.415429, 8395285.565611 ] ] ], [ [ [ 2256507.749378, 8412549.657339 ], [ 2250385.066064, 8430785.713013 ], [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NF", "ISO2": "NF", "ISO3": "NFK", "UN": 574, "NAME": "Norfolk Island", "AREA": 0, "POP2005": 0, "REGION": 9, "SUBREGION": 53, "LON": 167.953000, "LAT": -29.037000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 18697774.486230, -3385973.831205 ], [ 18691931.326158, -3376318.077774 ], [ 18701423.093860, -3378828.614312 ], [ 18697774.486230, -3385973.831205 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "CK", "ISO2": "CC", "ISO3": "CCK", "UN": 166, "NAME": "Cocos (Keeling) Islands", "AREA": 1, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 96.839000, "LAT": -12.173000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 10788434.273941, -1368256.671341 ], [ 10787134.841525, -1368478.075860 ], [ 10788495.388341, -1363005.622936 ], [ 10788434.273941, -1368256.671341 ] ] ], [ [ [ 10782713.342670, -1368035.382336 ], [ 10777891.09364 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BV", "ISO2": "BV", "ISO3": "BVT", "UN": 74, "NAME": "Bouvet Island", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 3.412000, "LAT": -54.422000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 374188.111838, -7258293.838295 ], [ 374806.491609, -7246226.235864 ], [ 387793.802642, -7246704.705227 ], [ 374188.111838, -7258293.838295 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "FS", "ISO2": "TF", "ISO3": "ATF", "UN": 260, "NAME": "French Southern and Antarctic Lands", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 69.117000, "LAT": -49.302000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 7771522.738142, -6390707.479225 ], [ 7765863.000847, -6387409.795257 ], [ 7769543.868410, -6385404.000911 ], [ 7771522.738142, -6390707.479225 ] ] ], [ [ [ 7657573.813576, -6336453.780708 ], [ 7641464 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "HM", "ISO2": "HM", "ISO3": "HMD", "UN": 334, "NAME": "Heard Island and McDonald Islands", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 73.507000, "LAT": -53.111000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 8212470.755444, -7006158.841587 ], [ 8179137.469760, -7018994.817226 ], [ 8152420.124053, -6980738.795535 ], [ 8212470.755444, -7006158.841587 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "IO", "ISO2": "IO", "ISO3": "IOT", "UN": 86, "NAME": "British Indian Ocean Territory", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 72.416000, "LAT": -7.335000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 8069237.970391, -824037.185465 ], [ 8054983.286956, -810943.162346 ], [ 8064971.094309, -807483.186820 ], [ 8069237.970391, -824037.185465 ] ] ], [ [ [ 7942459.541911, -742938.496478 ], [ 7941902.387860, -74 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "KT", "ISO2": "CX", "ISO3": "CXR", "UN": 162, "NAME": "Christmas Island", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 105.704000, "LAT": -10.444000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 11766626.135456, -1176694.602383 ], [ 11758566.270364, -1168355.860109 ], [ 11770544.804171, -1162331.143033 ], [ 11766626.135456, -1176694.602383 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "", "ISO2": "UM", "ISO3": "UMI", "UN": 581, "NAME": "United States Minor Outlying Islands", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": -160.027000, "LAT": -0.385000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -17813472.822835, -44311.747689 ], [ -17816530.323969, -42703.700228 ], [ -17813099.123304, -41714.159606 ], [ -17813472.822835, -44311.747689 ] ] ], [ [ [ -19643008.320064, 24026.476480 ], [ -1964436 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NH", "ISO2": "VU", "ISO3": "VUT", "UN": 548, "NAME": "Vanuatu", "AREA": 1219, "POP2005": 215366, "REGION": 9, "SUBREGION": 54, "LON": 166.899000, "LAT": -15.376000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 18907177.914319, -2302934.381648 ], [ 18895984.182922, -2290743.167724 ], [ 18911696.261131, -2293246.491162 ], [ 18907177.914319, -2302934.381648 ] ] ], [ [ [ 18948521.861880, -2220913.402420 ], [ 18947159.645272, -22 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NI", "ISO2": "NG", "ISO3": "NGA", "UN": 566, "NAME": "Nigeria", "AREA": 91077, "POP2005": 141356083, "REGION": 2, "SUBREGION": 11, "LON": 8.105000, "LAT": 9.594000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 831154.621545, 495343.165504 ], [ 816621.194104, 495095.067644 ], [ 825093.831868, 500119.698022 ], [ 831154.621545, 495343.165504 ] ] ], [ [ [ 801902.197073, 488116.922347 ], [ 804406.885616, 503686.815116 ], [ 814487 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NL", "ISO2": "NL", "ISO3": "NLD", "UN": 528, "NAME": "Netherlands", "AREA": 3388, "POP2005": 1632769, "REGION": 150, "SUBREGION": 155, "LON": 5.389000, "LAT": 52.077000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 419025.028833, 6682598.128098 ], [ 375243.172982, 6687693.133638 ], [ 471871.891589, 6683515.973616 ], [ 419025.028833, 6682598.128098 ] ] ], [ [ [ 641633.010958, 6875564.075371 ], [ 620389.886847, 6866949.442317  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NO", "ISO2": "NO", "ISO3": "NOR", "UN": 578, "NAME": "Norway", "AREA": 30625, "POP2005": 4638836, "REGION": 150, "SUBREGION": 154, "LON": 8.740000, "LAT": 61.152000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 973334.467753, 8053884.631158 ], [ 971479.171216, 8054533.176435 ], [ 972654.178201, 8059257.902471 ], [ 975313.337485, 8059611.606457 ], [ 975313.337485, 8056363.998583 ], [ 973334.467753, 8053884.631158 ] ] ], [ [ [ [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NP", "ISO2": "NP", "ISO3": "NPL", "UN": 524, "NAME": "Nepal", "AREA": 14300, "POP2005": 27093656, "REGION": 142, "SUBREGION": 34, "LON": 83.939000, "LAT": 28.253000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9135589.747918, 3238154.877959 ], [ 8911772.783479, 3354802.874318 ], [ 8947518.139890, 3471275.989599 ], [ 9019701.816542, 3529844.654425 ], [ 9041770.015036, 3504870.924444 ], [ 9063755.057870, 3553169.851136 ], [ 9139390. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NR", "ISO2": "NR", "ISO3": "NRU", "UN": 520, "NAME": "Nauru", "AREA": 2, "POP2005": 10111, "REGION": 9, "SUBREGION": 57, "LON": 166.930000, "LAT": -0.522000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 18582466.640720, -61474.023601 ], [ 18582622.933285, -54918.256935 ], [ 18585744.999724, -56371.699522 ], [ 18582466.640720, -61474.023601 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "NS", "ISO2": "SR", "ISO3": "SUR", "UN": 740, "NAME": "Suriname", "AREA": 15600, "POP2005": 452468, "REGION": 19, "SUBREGION": 5, "LON": -55.912000, "LAT": 4.127000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6136817.326228, 649239.620079 ], [ -6014592.755478, 649120.785889 ], [ -6029836.846547, 596084.925146 ], [ -6064407.671010, 529126.005553 ], [ -6011376.512750, 384098.624407 ], [ -6078465.318946, 259356.246339 ], [ -6230088. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NU", "ISO2": "NI", "ISO3": "NIC", "UN": 558, "NAME": "Nicaragua", "AREA": 12140, "POP2005": 5462539, "REGION": 19, "SUBREGION": 13, "LON": -85.034000, "LAT": 12.840000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9318833.874907, 1330727.388158 ], [ -9320997.925808, 1334708.934985 ], [ -9319049.612080, 1344348.906858 ], [ -9318833.874907, 1330727.388158 ] ] ], [ [ [ -9244960.034427, 1362277.995838 ], [ -9245919.719757, 1366 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NZ", "ISO2": "NZ", "ISO3": "NZL", "UN": 554, "NAME": "New Zealand", "AREA": 26799, "POP2005": 4097112, "REGION": 9, "SUBREGION": 53, "LON": 172.235000, "LAT": -42.634000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 18833645.490717, -6905125.307694 ], [ 18813085.671324, -6892363.012296 ], [ 18835840.154478, -6880330.024168 ], [ 18833645.490717, -6905125.307694 ] ] ], [ [ [ 18489791.049564, -6607694.842322 ], [ 18470528.88147 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PA", "ISO2": "PY", "ISO3": "PRY", "UN": 600, "NAME": "Paraguay", "AREA": 39730, "POP2005": 5904342, "REGION": 19, "SUBREGION": 5, "LON": -58.391000, "LAT": -23.236000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6048050.162394, -2836423.220938 ], [ -6077923.415665, -2946318.081977 ], [ -6088990.688120, -3053472.681384 ], [ -6204515.940595, -3178482.694438 ], [ -6523836.679172, -3163122.944037 ], [ -6409405.363333, -2943384.068665 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PE", "ISO2": "PE", "ISO3": "PER", "UN": 604, "NAME": "Peru", "AREA": 128000, "POP2005": 27274266, "REGION": 19, "SUBREGION": 5, "LON": -75.552000, "LAT": -9.326000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8761849.140432, -510921.696168 ], [ -8720491.611893, -381248.733064 ], [ -8533822.184172, -286424.980557 ], [ -8411208.774440, -170803.100522 ], [ -8373015.725066, -107465.796380 ], [ -8418865.996934, -12118.135739 ], [ -838 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PK", "ISO2": "PK", "ISO3": "PAK", "UN": 586, "NAME": "Pakistan", "AREA": 77088, "POP2005": 158080591, "REGION": 142, "SUBREGION": 34, "LON": 69.386000, "LAT": 29.967000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 7508434.754743, 2753746.502555 ], [ 7504261.275714, 2754118.901917 ], [ 7500643.280944, 2759704.613761 ], [ 7509487.948446, 2760348.276638 ], [ 7512023.917765, 2758621.174368 ], [ 7509487.948446, 2754288.044339 ], [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PL", "ISO2": "PL", "ISO3": "POL", "UN": 616, "NAME": "Poland", "AREA": 30629, "POP2005": 38195558, "REGION": 150, "SUBREGION": 151, "LON": 19.401000, "LAT": 52.125000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2098511.105539, 6363106.367966 ], [ 2068006.782074, 6431472.211575 ], [ 1965654.632862, 6465010.135651 ], [ 1972890.288444, 6501830.409875 ], [ 1880216.701039, 6522729.452851 ], [ 1892678.472755, 6483931.486576 ], [ 185257 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PM", "ISO2": "PA", "ISO3": "PAN", "UN": 591, "NAME": "Panama", "AREA": 7443, "POP2005": 3231502, "REGION": 19, "SUBREGION": 13, "LON": -80.920000, "LAT": 8.384000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -9103554.734804, 812189.966182 ], [ -9105656.116107, 806517.133635 ], [ -9108006.979377, 813717.870235 ], [ -9103554.734804, 812189.966182 ] ] ], [ [ [ -9039792.876734, 835793.582116 ], [ -9044678.052142, 835980.750158  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PO", "ISO2": "PT", "ISO3": "PRT", "UN": 620, "NAME": "Portugal", "AREA": 9150, "POP2005": 10528226, "REGION": 150, "SUBREGION": 39, "LON": -8.058000, "LAT": 40.309000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1903841.693208, 3871877.123370 ], [ -1860767.304519, 3863344.219580 ], [ -1886154.164863, 3847286.257118 ], [ -1903841.693208, 3871877.123370 ] ] ], [ [ [ -1812930.888967, 3907809.325672 ], [ -1825701.817793, 39004 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PP", "ISO2": "PG", "ISO3": "PNG", "UN": 598, "NAME": "Papua New Guinea", "AREA": 45286, "POP2005": 6069715, "REGION": 9, "SUBREGION": 54, "LON": 143.459000, "LAT": -5.949000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 17117688.813048, -1302081.641038 ], [ 17073746.014787, -1296494.583673 ], [ 17053926.742653, -1268888.774136 ], [ 17117688.813048, -1302081.641038 ] ] ], [ [ [ 17176348.287155, -1276584.461632 ], [ 17143572.0 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PU", "ISO2": "GW", "ISO3": "GNB", "UN": 624, "NAME": "Guinea-Bissau", "AREA": 2812, "POP2005": 1596929, "REGION": 2, "SUBREGION": 11, "LON": -14.651000, "LAT": 12.125000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1768402.951706, 1238029.346665 ], [ -1779009.250150, 1237714.372026 ], [ -1775144.014791, 1254227.752130 ], [ -1768402.951706, 1238029.346665 ] ] ], [ [ [ -1781761.513241, 1239856.870920 ], [ -1787945.756232, 12 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "QA", "ISO2": "QA", "ISO3": "QAT", "UN": 634, "NAME": "Qatar", "AREA": 1100, "POP2005": 796186, "REGION": 142, "SUBREGION": 145, "LON": 51.191000, "LAT": 25.316000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5734911.885697, 2922912.501482 ], [ 5745384.155474, 2877006.975041 ], [ 5701245.977374, 2829250.608742 ], [ 5658476.138455, 2845064.689017 ], [ 5682024.663538, 3005205.836619 ], [ 5740529.512480, 2987732.015527 ], [ 5734911.88 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RE", "ISO2": "RE", "ISO3": "REU", "UN": 638, "NAME": "Reunion", "AREA": 250, "POP2005": 785159, "REGION": 2, "SUBREGION": 14, "LON": 55.538000, "LAT": -21.122000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 6201608.720774, -2391647.026700 ], [ 6197619.586821, -2436517.224631 ], [ 6147031.000828, -2395191.245283 ], [ 6201608.720774, -2391647.026700 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "RO", "ISO2": "RO", "ISO3": "ROU", "UN": 642, "NAME": "Romania", "AREA": 22987, "POP2005": 21627557, "REGION": 150, "SUBREGION": 151, "LON": 24.969000, "LAT": 45.844000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2307314.076295, 5808527.605688 ], [ 2357375.675819, 5827839.278829 ], [ 2452646.346944, 6029061.752163 ], [ 2548637.923092, 6099295.240128 ], [ 2774019.482973, 6059019.019339 ], [ 2964994.080681, 6149744.894342 ], [ 31302 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "MD", "ISO2": "MD", "ISO3": "MDA", "UN": 498, "NAME": "Republic of Moldova", "AREA": 3288, "POP2005": 3876661, "REGION": 150, "SUBREGION": 151, "LON": 28.599000, "LAT": 47.193000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3130272.577691, 5918341.395390 ], [ 2964994.080681, 6149744.894342 ], [ 3089734.137965, 6182280.451739 ], [ 3244065.587570, 6104541.351057 ], [ 3248797.111206, 6014692.848219 ], [ 3334018.415300, 5911792.183055  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RP", "ISO2": "PH", "ISO3": "PHL", "UN": 608, "NAME": "Philippines", "AREA": 29817, "POP2005": 84566163, "REGION": 142, "SUBREGION": 35, "LON": 122.466000, "LAT": 11.118000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13299586.210377, 517987.482889 ], [ 13297762.762602, 547124.661559 ], [ 13303852.245855, 530925.603577 ], [ 13299586.210377, 517987.482889 ] ] ], [ [ [ 13360470.851307, 560688.871652 ], [ 13360441.125796, 56050 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RQ", "ISO2": "PR", "ISO3": "PRI", "UN": 630, "NAME": "Puerto Rico", "AREA": 887, "POP2005": 3946779, "REGION": 19, "SUBREGION": 29, "LON": -66.466000, "LAT": 18.221000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7556430.375838, 2043206.496348 ], [ -7562027.297196, 2050395.316729 ], [ -7552657.869614, 2050134.840545 ], [ -7556430.375838, 2043206.496348 ] ] ], [ [ [ -7284902.322924, 2048117.784586 ], [ -7300364.711514, 2050 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RW", "ISO2": "RW", "ISO3": "RWA", "UN": 646, "NAME": "Rwanda", "AREA": 2467, "POP2005": 9233793, "REGION": 2, "SUBREGION": 14, "LON": 29.917000, "LAT": -1.998000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3334265.989848, -257155.883861 ], [ 3322979.195357, -307329.704203 ], [ 3230985.992679, -305657.983549 ], [ 3213608.018291, -266625.907669 ], [ 3294716.623798, -154285.379500 ], [ 3336801.513889, -163039.024412 ], [ 3393265.208 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SA", "ISO2": "SA", "ISO3": "SAU", "UN": 682, "NAME": "Saudi Arabia", "AREA": 214969, "POP2005": 2361236, "REGION": 142, "SUBREGION": 145, "LON": 44.585000, "LAT": 24.023000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4670717.948403, 1886963.936039 ], [ 4647990.671993, 1906408.501039 ], [ 4695455.518657, 1870472.689595 ], [ 4670717.948403, 1886963.936039 ] ] ], [ [ [ 4673934.248693, 1892130.243957 ], [ 4657298.154137, 19055 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SC", "ISO2": "KN", "ISO3": "KNA", "UN": 659, "NAME": "Saint Kitts and Nevis", "AREA": 36, "POP2005": 49138, "REGION": 19, "SUBREGION": 29, "LON": -62.769000, "LAT": 17.340000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6963343.617304, 1931789.275665 ], [ -6971043.363843, 1933794.771477 ], [ -6968569.399479, 1943794.740592 ], [ -6963343.617304, 1931789.275665 ] ] ], [ [ [ -6979917.753649, 1960082.479740 ], [ -6971414.50302 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SE", "ISO2": "SC", "ISO3": "SYC", "UN": 690, "NAME": "Seychelles", "AREA": 46, "POP2005": 85532, "REGION": 2, "SUBREGION": 14, "LON": 55.474000, "LAT": -4.647000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5175397.415794, -1091143.740530 ], [ 5173696.342655, -1089982.720153 ], [ 5177283.724565, -1087002.340423 ], [ 5175397.415794, -1091143.740530 ] ] ], [ [ [ 5177530.853835, -1050784.618142 ], [ 5150659.887230, -1058244.87 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SF", "ISO2": "ZA", "ISO3": "ZAF", "UN": 710, "NAME": "South Africa", "AREA": 121447, "POP2005": 47938663, "REGION": 2, "SUBREGION": 18, "LON": 23.121000, "LAT": -30.558000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4213535.121703, -5935049.556154 ], [ 4182984.044052, -5927306.022986 ], [ 4205866.767260, -5914732.603542 ], [ 4213535.121703, -5935049.556154 ] ] ], [ [ [ 4225625.754237, -5886528.289393 ], [ 4214215.395111, - [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "LT", "ISO2": "LS", "ISO3": "LSO", "UN": 426, "NAME": "Lesotho", "AREA": 3035, "POP2005": 1980831, "REGION": 2, "SUBREGION": 18, "LON": 28.243000, "LAT": -29.581000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3068479.128352, -3555704.283231 ], [ 3006862.788322, -3455473.192356 ], [ 3179902.702869, -3326100.928315 ], [ 3276225.231862, -3411155.372611 ], [ 3247065.759166, -3492486.129526 ], [ 3158999.685485, -3524169.025327 ], [ 312 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "BC", "ISO2": "BW", "ISO3": "BWA", "UN": 72, "NAME": "Botswana", "AREA": 56673, "POP2005": 1835938, "REGION": 2, "SUBREGION": 18, "LON": 23.815000, "LAT": -22.182000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3001083.302999, -2723226.338780 ], [ 2988402.454525, -2785665.274725 ], [ 2879989.626956, -2844388.066878 ], [ 2839729.040679, -2959227.039854 ], [ 2747053.338204, -2977771.788768 ], [ 2561999.378933, -2912604.230354 ], [ 25 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SG", "ISO2": "SN", "ISO3": "SEN", "UN": 686, "NAME": "Senegal", "AREA": 19253, "POP2005": 1177034, "REGION": 2, "SUBREGION": 11, "LON": -14.881000, "LAT": 15.013000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1908940.914526, 1644745.586750 ], [ -1952234.845608, 1661108.508179 ], [ -1878887.546319, 1715144.071508 ], [ -1839852.810275, 1811700.991455 ], [ -1812374.150570, 1864988.723823 ], [ -1596909.042248, 1878797.468926 ], [ -1 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SI", "ISO2": "SI", "ISO3": "SVN", "UN": 705, "NAME": "Slovenia", "AREA": 2014, "POP2005": 1999425, "REGION": 150, "SUBREGION": 39, "LON": 14.827000, "LAT": 46.124000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1527153.688969, 5865144.367665 ], [ 1619141.770949, 5845892.627619 ], [ 1793557.928361, 5920834.926131 ], [ 1848779.854200, 5856997.273869 ], [ 1844842.038533, 5856841.931900 ], [ 1742675.681550, 5815585.282502 ], [ 1747468 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SL", "ISO2": "SL", "ISO3": "SLE", "UN": 694, "NAME": "Sierra Leone", "AREA": 7162, "POP2005": 5586403, "REGION": 2, "SUBREGION": 11, "LON": -11.792000, "LAT": 8.560000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1394307.569004, 829587.690333 ], [ -1441896.651318, 844963.770059 ], [ -1401636.176361, 852388.459018 ], [ -1394307.569004, 829587.690333 ] ] ], [ [ [ -1248386.306929, 1118607.270976 ], [ -1176816.891228, 1012731. [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SN", "ISO2": "SG", "ISO3": "SGP", "UN": 702, "NAME": "Singapore", "AREA": 67, "POP2005": 4327468, "REGION": 142, "SUBREGION": 35, "LON": 103.808000, "LAT": 1.351000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 11576173.960118, 154002.211360 ], [ 11537241.971963, 146459.782130 ], [ 11545344.361101, 159141.488070 ], [ 11576173.960118, 154002.211360 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "SO", "ISO2": "SO", "ISO3": "SOM", "UN": 706, "NAME": "Somalia", "AREA": 62734, "POP2005": 8196395, "REGION": 2, "SUBREGION": 14, "LON": 48.316000, "LAT": 9.774000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4780514.454019, 1232383.279612 ], [ 4814481.370245, 1285396.428546 ], [ 4929040.926138, 1169540.664954 ], [ 4998059.344388, 1166459.372416 ], [ 5093979.342103, 1217965.816942 ], [ 5170573.385660, 1196844.306485 ], [ 5276420.07 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SP", "ISO2": "ES", "ISO3": "ESP", "UN": 724, "NAME": "Spain", "AREA": 49904, "POP2005": 43397491, "REGION": 150, "SUBREGION": 39, "LON": -3.649000, "LAT": 40.227000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1994041.633086, 3220216.423462 ], [ -2001833.963470, 3203347.086805 ], [ -2022737.367455, 3215883.794754 ], [ -1994041.633086, 3220216.423462 ] ] ], [ [ [ -1731481.927202, 3218224.846771 ], [ -1747994.448562, 3268670 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ST", "ISO2": "LC", "ISO3": "LCA", "UN": 662, "NAME": "Saint Lucia", "AREA": 61, "POP2005": 16124, "REGION": 19, "SUBREGION": 29, "LON": -60.969000, "LAT": 13.898000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6785449.171083, 1540902.731769 ], [ -6799332.715336, 1560452.730632 ], [ -6782728.077450, 1586775.770600 ], [ -6785449.171083, 1540902.731769 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "SU", "ISO2": "SD", "ISO3": "SDN", "UN": 736, "NAME": "Sudan", "AREA": 237600, "POP2005": 36899747, "REGION": 2, "SUBREGION": 15, "LON": 30.050000, "LAT": 13.832000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4148722.465134, 2362225.737545 ], [ 4145784.743772, 2366359.467516 ], [ 4148193.363594, 2373968.774389 ], [ 4148722.465134, 2362225.737545 ] ] ], [ [ [ 3501430.795629, 2511325.092771 ], [ 4106405.251265, 2511538.561726 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SW", "ISO2": "SE", "ISO3": "SWE", "UN": 752, "NAME": "Sweden", "AREA": 41033, "POP2005": 9038049, "REGION": 150, "SUBREGION": 154, "LON": 15.270000, "LAT": 62.011000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1874249.085776, 7724829.069921 ], [ 1827958.434003, 7600555.986188 ], [ 1904181.449697, 7831649.679873 ], [ 1874249.085776, 7724829.069921 ] ] ], [ [ [ 2026694.671887, 7742141.639091 ], [ 2017016.110080, 7869455.6944 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SY", "ISO2": "SY", "ISO3": "SYR", "UN": 760, "NAME": "Syrian Arab Republic", "AREA": 18378, "POP2005": 18893881, "REGION": 142, "SUBREGION": 145, "LON": 38.506000, "LAT": 35.013000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4715005.382716, 4454021.390973 ], [ 4596412.499034, 4349655.853544 ], [ 4564530.596871, 4085261.776402 ], [ 4318606.360797, 3945531.172577 ], [ 4100762.466277, 3804547.052563 ], [ 3968416.059506, 3853603.2095 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SZ", "ISO2": "CH", "ISO3": "CHE", "UN": 756, "NAME": "Switzerland", "AREA": 4000, "POP2005": 7424389, "REGION": 150, "SUBREGION": 155, "LON": 7.908000, "LAT": 46.861000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 856850.944882, 6031214.217080 ], [ 954722.707229, 6039140.613521 ], [ 953575.114599, 6074796.085684 ], [ 1064962.844240, 6030739.949426 ], [ 1061272.046523, 5987002.343460 ], [ 1054711.766291, 5951457.565161 ], [ 1068515 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TD", "ISO2": "TT", "ISO3": "TTO", "UN": 780, "NAME": "Trinidad and Tobago", "AREA": 513, "POP2005": 1323722, "REGION": 19, "SUBREGION": 29, "LON": -61.253000, "LAT": 10.468000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6781923.794129, 1209119.021766 ], [ -6791385.839527, 1134781.198589 ], [ -6892686.910107, 1123725.554616 ], [ -6841510.668522, 1150365.332123 ], [ -6864207.376861, 1199141.465749 ], [ -6781923.794129, 1209 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TH", "ISO2": "TH", "ISO3": "THA", "UN": 764, "NAME": "Thailand", "AREA": 51089, "POP2005": 63002911, "REGION": 142, "SUBREGION": 35, "LON": 100.844000, "LAT": 15.700000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 11045026.590775, 728775.081138 ], [ 11038439.371227, 730611.448821 ], [ 11049140.625197, 733194.947938 ], [ 11045026.590775, 728775.081138 ] ] ], [ [ [ 11094996.017761, 724728.987155 ], [ 11086863.127083, 735653.9 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TI", "ISO2": "TJ", "ISO3": "TJK", "UN": 762, "NAME": "Tajikistan", "AREA": 13996, "POP2005": 6550213, "REGION": 142, "SUBREGION": 143, "LON": 69.420000, "LAT": 38.665000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 8339582.140521, 4472239.080136 ], [ 8160520.732078, 4503806.377496 ], [ 7979069.405488, 4394042.463681 ], [ 7951487.552615, 4449681.649085 ], [ 7969577.637786, 4565678.121470 ], [ 7931822.853247, 4568417.820237 ], [ 794 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TL", "ISO2": "TK", "ISO3": "TKL", "UN": 772, "NAME": "Tokelau", "AREA": 1, "POP2005": 1401, "REGION": 9, "SUBREGION": 61, "LON": -171.853000, "LAT": -9.193000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -19059535.669352, -1048590.404311 ], [ -19060558.138875, -1048747.234557 ], [ -19060646.526551, -1044986.527930 ], [ -19059535.669352, -1048590.404311 ] ] ], [ [ [ -19129484.050628, -1029414.773036 ], [ -19131427.243660, -1 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TN", "ISO2": "TO", "ISO3": "TON", "UN": 776, "NAME": "Tonga", "AREA": 72, "POP2005": 99361, "REGION": 9, "SUBREGION": 61, "LON": -175.185000, "LAT": -21.202000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -19470987.663951, -2442827.305844 ], [ -19478094.608981, -2435554.140617 ], [ -19471052.210775, -2428416.633964 ], [ -19470987.663951, -2442827.305844 ] ] ], [ [ [ -19497146.113631, -2413122.884667 ], [ -19520926.522430, - [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TO", "ISO2": "TG", "ISO3": "TGO", "UN": 768, "NAME": "Togo", "AREA": 5439, "POP2005": 6238572, "REGION": 2, "SUBREGION": 11, "LON": 1.081000, "LAT": 8.799000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 155684.983293, 1054503.227289 ], [ 182052.340521, 693628.054693 ], [ 133459.935637, 680396.483051 ], [ 58442.732666, 775325.557570 ], [ 80953.982734, 929606.535823 ], [ 42605.865309, 979065.399040 ], [ 61318.449072, 1052414.195292  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TP", "ISO2": "ST", "ISO3": "STP", "UN": 678, "NAME": "Sao Tome and Principe", "AREA": 96, "POP2005": 152622, "REGION": 2, "SUBREGION": 17, "LON": 6.629000, "LAT": 0.201000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 726236.001472, 2040.820260 ], [ 719927.859887, 28912.219803 ], [ 744480.041498, 44775.515997 ], [ 726236.001472, 2040.820260 ] ] ], [ [ [ 826330.702730, 173246.783986 ], [ 815662.621969, 178938.603262 ], [ 8245 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TS", "ISO2": "TN", "ISO3": "TUN", "UN": 788, "NAME": "Tunisia", "AREA": 15536, "POP2005": 10104685, "REGION": 2, "SUBREGION": 15, "LON": 9.596000, "LAT": 35.383000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1223803.067180, 3995282.329624 ], [ 1209486.267469, 3980378.925295 ], [ 1194025.103393, 4012811.475092 ], [ 1223803.067180, 3995282.329624 ] ] ], [ [ [ 1231719.218809, 4115139.847350 ], [ 1228410.580904, 4112020.704802 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TU", "ISO2": "TR", "ISO3": "TUR", "UN": 792, "NAME": "Turkey", "AREA": 76963, "POP2005": 72969723, "REGION": 142, "SUBREGION": 145, "LON": 35.179000, "LAT": 39.061000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 2902995.580840, 4834545.271955 ], [ 2891523.216758, 4841267.123464 ], [ 2902748.006292, 4842678.379790 ], [ 2902995.580840, 4834545.271955 ] ] ], [ [ [ 2874763.956099, 4880523.376885 ], [ 2856890.387338, 4884325.818 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TV", "ISO2": "TV", "ISO3": "TUV", "UN": 798, "NAME": "Tuvalu", "AREA": 3, "POP2005": 10441, "REGION": 9, "SUBREGION": 61, "LON": 179.219000, "LAT": -8.514000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 19950942.521886, -955800.585408 ], [ 19948865.188868, -945478.654532 ], [ 19951914.118401, -950259.484879 ], [ 19950942.521886, -955800.585408 ] ] ], [ [ [ 19855713.929528, -900521.389983 ], [ 19854477.281305, -900365.336201 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TX", "ISO2": "TM", "ISO3": "TKM", "UN": 795, "NAME": "Turkmenistan", "AREA": 46993, "POP2005": 4833266, "REGION": 142, "SUBREGION": 143, "LON": 59.384000, "LAT": 39.122000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5907694.130640, 4707317.649164 ], [ 5908683.565507, 4735128.242852 ], [ 5911065.003588, 4686082.400770 ], [ 5907694.130640, 4707317.649164 ] ] ], [ [ [ 6543420.894888, 5260066.777900 ], [ 6680777.385416, 519361 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TZ", "ISO2": "TZ", "ISO3": "TZA", "UN": 834, "NAME": "United Republic of Tanzania", "AREA": 88359, "POP2005": 38477873, "REGION": 2, "SUBREGION": 14, "LON": 34.823000, "LAT": -6.270000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 4417435.136807, -892714.408805 ], [ 4407292.818000, -887375.165411 ], [ 4441771.024647, -852887.702091 ], [ 4417435.136807, -892714.408805 ] ] ], [ [ [ 4391182.438654, -692713.758039 ], [ 4398912.7 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "UG", "ISO2": "UG", "ISO3": "UGA", "UN": 800, "NAME": "Uganda", "AREA": 19710, "POP2005": 28947181, "REGION": 2, "SUBREGION": 14, "LON": 32.386000, "LAT": 1.280000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3784491.547789, 470503.532367 ], [ 3836440.680599, 408977.124312 ], [ 3897264.203215, 211019.868714 ], [ 3774534.353296, 11472.147629 ], [ 3775987.517929, -111448.837681 ], [ 3526291.888827, -111294.191335 ], [ 3393265.208649, [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "UK", "ISO2": "GB", "ISO3": "GBR", "UN": 826, "NAME": "United Kingdom", "AREA": 24193, "POP2005": 60244834, "REGION": 150, "SUBREGION": 154, "LON": -1.600000, "LAT": 53.000000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -700292.272740, 6431087.417079 ], [ -703260.789663, 6431616.300807 ], [ -700756.203037, 6434833.850218 ], [ -700292.272740, 6431087.417079 ] ] ], [ [ [ -117967.601328, 6566200.138302 ], [ -174771.566573, 656 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "UP", "ISO2": "UA", "ISO3": "UKR", "UN": 804, "NAME": "Ukraine", "AREA": 57935, "POP2005": 46917544, "REGION": 150, "SUBREGION": 151, "LON": 31.388000, "LAT": 49.016000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 3678026.699989, 5782172.259393 ], [ 3646763.956834, 5786137.762548 ], [ 3669677.181582, 5788274.114164 ], [ 3678026.699989, 5782172.259393 ] ] ], [ [ [ 3810186.312654, 5790278.785471 ], [ 3802455.953255, 5796476.77 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "US", "ISO2": "US", "ISO3": "USA", "UN": 840, "NAME": "United States", "AREA": 915896, "POP2005": 299846449, "REGION": 19, "SUBREGION": 21, "LON": -98.606000, "LAT": 39.622000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -8367918.192510, 2264904.989664 ], [ -8373866.691911, 2261372.524806 ], [ -8366681.611253, 2268375.322588 ], [ -8367918.192510, 2264904.989664 ] ] ], [ [ [ -8362475.876096, 2259708.373475 ], [ -8364517.59405 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "UV", "ISO2": "BF", "ISO3": "BFA", "UN": 854, "NAME": "Burkina Faso", "AREA": 27360, "POP2005": 13933363, "REGION": 2, "SUBREGION": 11, "LON": -1.740000, "LAT": 12.278000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -315484.780244, 1232334.402540 ], [ -298955.283014, 1060362.097805 ], [ -404491.726261, 1113740.718988 ], [ -523696.421865, 1084774.776456 ], [ -614466.891255, 1168238.366589 ], [ -586993.908844, 1327946.865337 ], [ -49 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "UY", "ISO2": "UY", "ISO3": "URY", "UN": 858, "NAME": "Uruguay", "AREA": 17502, "POP2005": 3325727, "REGION": 19, "SUBREGION": 5, "LON": -56.012000, "LAT": -32.800000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -6434978.567314, -3600093.576033 ], [ -6412893.448258, -3527342.444110 ], [ -6324215.451336, -3517089.539478 ], [ -6234884.788240, -3643116.254774 ], [ -6187354.037339, -3612744.285743 ], [ -5997863.328443, -3759082.125372  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "UZ", "ISO2": "UZ", "ISO3": "UZB", "UN": 860, "NAME": "Uzbekistan", "AREA": 42540, "POP2005": 26593123, "REGION": 142, "SUBREGION": 143, "LON": 63.170000, "LAT": 41.750000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7167085.670050, 4714959.353473 ], [ 6963156.823198, 4856378.907442 ], [ 6887800.095781, 5030877.787116 ], [ 6694784.677848, 5068717.976794 ], [ 6680777.123682, 5193614.422467 ], [ 6543420.671910, 5260066.503153 ], [ 64 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "VC", "ISO2": "VC", "ISO3": "VCT", "UN": 670, "NAME": "Saint Vincent and the Grenadines", "AREA": 39, "POP2005": 119137, "REGION": 19, "SUBREGION": 29, "LON": -61.194000, "LAT": 13.248000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6836903.154798, 1412960.581296 ], [ -6841046.911523, 1413372.348946 ], [ -6837892.673752, 1415495.382658 ], [ -6836903.154798, 1412960.581296 ] ] ], [ [ [ -6827007.965261, 1424083.770803 ], [ -6 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "VE", "ISO2": "VE", "ISO3": "VEN", "UN": 862, "NAME": "Venezuela", "AREA": 88205, "POP2005": 26725573, "REGION": 19, "SUBREGION": 5, "LON": -66.166000, "LAT": 7.125000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6790891.506739, 955208.603021 ], [ -6820143.957463, 950737.271747 ], [ -6799487.275219, 962119.837780 ], [ -6790891.506739, 955208.603021 ] ] ], [ [ [ -6795808.106258, 964278.083324 ], [ -6811021.622788, 960806.475 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "VI", "ISO2": "VG", "ISO3": "VGB", "UN": 92, "NAME": "British Virgin Islands", "AREA": 15, "POP2005": 22016, "REGION": 19, "SUBREGION": 29, "LON": -64.390000, "LAT": 18.483000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7198012.117024, 2082531.277450 ], [ -7197084.714346, 2089244.773462 ], [ -7186600.867342, 2090516.014663 ], [ -7198012.117024, 2082531.277450 ] ] ], [ [ [ -7171480.006949, 2088951.529808 ], [ -7170336.75577 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "VM", "ISO2": "VN", "ISO3": "VNM", "UN": 704, "NAME": "Viet Nam", "AREA": 32549, "POP2005": 85028643, "REGION": 142, "SUBREGION": 35, "LON": 105.314000, "LAT": 21.491000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 11866688.108784, 966342.205612 ], [ 11861739.289501, 970971.315418 ], [ 11873267.647287, 979514.133684 ], [ 11866688.108784, 966342.205612 ] ] ], [ [ [ 11521411.004539, 1041382.643773 ], [ 11518165.039507, 1037528 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "VQ", "ISO2": "VI", "ISO3": "VIR", "UN": 850, "NAME": "United States Virgin Islands", "AREA": 35, "POP2005": 111408, "REGION": 19, "SUBREGION": 29, "LON": -64.785000, "LAT": 17.741000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7209267.074140, 2011131.916375 ], [ -7186818.274308, 2008112.271350 ], [ -7224202.810220, 1999737.323474 ], [ -7209267.074140, 2011131.916375 ] ] ], [ [ [ -7198506.375563, 2076471.440113 ], [ -72124 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "WA", "ISO2": "NA", "ISO3": "NAM", "UN": 516, "NAME": "Namibia", "AREA": 82329, "POP2005": 2019677, "REGION": 2, "SUBREGION": 18, "LON": 17.218000, "LAT": -22.133000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2592043.284983, -1998082.525371 ], [ 2613348.499687, -1993799.277961 ], [ 2779647.351150, -1986078.618542 ], [ 2812423.594102, -2014415.178231 ], [ 2712020.983132, -2031534.545267 ], [ 2628874.117749, -2094403.931255 ], [ 25 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "WF", "ISO2": "WF", "ISO3": "WLF", "UN": 876, "NAME": "Wallis and Futuna Islands", "AREA": 14, "POP2005": 15079, "REGION": 9, "SUBREGION": 61, "LON": -178.131000, "LAT": -14.289000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -19819601.664076, -1610891.553951 ], [ -19830516.874107, -1610540.226159 ], [ -19835959.172692, -1601319.177739 ], [ -19819601.664076, -1610891.553951 ] ] ], [ [ [ -19610201.575571, -1500065.143319 ], [ [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "WS", "ISO2": "WS", "ISO3": "WSM", "UN": 882, "NAME": "Samoa", "AREA": 283, "POP2005": 183845, "REGION": 9, "SUBREGION": 61, "LON": -172.414000, "LAT": -13.652000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -19083472.365499, -1576479.528255 ], [ -19154161.244028, -1559815.644207 ], [ -19127167.158066, -1552141.073999 ], [ -19083472.365499, -1576479.528255 ] ] ], [ [ [ -19178773.983442, -1515356.037377 ], [ -19170793.934425, [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "WZ", "ISO2": "SZ", "ISO3": "SWZ", "UN": 748, "NAME": "Swaziland", "AREA": 1720, "POP2005": 1124529, "REGION": 2, "SUBREGION": 18, "LON": 31.497000, "LAT": -26.562000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3440000.247829, -3036937.343516 ], [ 3487732.041731, -2968322.217451 ], [ 3558718.254620, -2993860.183273 ], [ 3577073.725457, -3103449.385417 ], [ 3560832.100430, -3163021.708618 ], [ 3468900.457432, -3148863.899074 ], [ 3 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "YM", "ISO2": "YE", "ISO3": "YEM", "UN": 887, "NAME": "Yemen", "AREA": 52797, "POP2005": 21095679, "REGION": 142, "SUBREGION": 145, "LON": 48.355000, "LAT": 15.807000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 5937873.811452, 1358103.188363 ], [ 5928504.272550, 1359937.295748 ], [ 5932400.900006, 1361012.717813 ], [ 5937873.811452, 1358103.188363 ] ] ], [ [ [ 5909487.675258, 1360917.869633 ], [ 5901200.161807, 1363764.4689 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ZA", "ISO2": "ZM", "ISO3": "ZMB", "UN": 894, "NAME": "Zambia", "AREA": 74339, "POP2005": 11478317, "REGION": 2, "SUBREGION": 14, "LON": 26.320000, "LAT": -14.614000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2779647.351150, -1986078.618542 ], [ 2613348.499687, -1993799.277961 ], [ 2449045.384056, -1824610.645811 ], [ 2448843.227861, -1460208.460088 ], [ 2673955.839852, -1460462.323769 ], [ 2670132.237983, -1217419.902090 ], [ 27 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ZI", "ISO2": "ZW", "ISO3": "ZWE", "UN": 716, "NAME": "Zimbabwe", "AREA": 38685, "POP2005": 13119679, "REGION": 2, "SUBREGION": 14, "LON": 29.872000, "LAT": -19.000000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3672185.988946, -1951694.887292 ], [ 3681675.196300, -2078426.444427 ], [ 3640054.397165, -2148396.540048 ], [ 3675645.242123, -2266319.505064 ], [ 3618130.580051, -2344081.443826 ], [ 3616645.132766, -2432998.043290 ], [  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "ID", "ISO2": "ID", "ISO3": "IDN", "UN": 360, "NAME": "Indonesia", "AREA": 181157, "POP2005": 226063044, "REGION": 142, "SUBREGION": 35, "LON": 114.252000, "LAT": -0.976000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13565392.579037, -1187939.906278 ], [ 13546559.344568, -1182969.676934 ], [ 13580636.670378, -1168786.063033 ], [ 13565392.579037, -1187939.906278 ] ] ], [ [ [ 13716198.589342, -1210818.897213 ], [ 13670896.061 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "GP", "ISO2": "GP", "ISO3": "GLP", "UN": 312, "NAME": "Guadeloupe", "AREA": 169, "POP2005": 438403, "REGION": 19, "SUBREGION": 29, "LON": -61.441000, "LAT": 16.286000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6817824.552549, 1789865.728102 ], [ -6827162.588034, 1796456.878625 ], [ -6820205.119860, 1806459.799719 ], [ -6817824.552549, 1789865.728102 ] ] ], [ [ [ -6794632.695115, 1840779.070077 ], [ -6800136.998657, 183900 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "NT", "ISO2": "AN", "ISO3": "ANT", "UN": 530, "NAME": "Netherlands Antilles", "AREA": 80, "POP2005": 186392, "REGION": 19, "SUBREGION": 29, "LON": -68.870000, "LAT": 12.123000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7591464.064787, 1370882.468461 ], [ -7597679.244487, 1348047.845392 ], [ -7616047.911684, 1374964.407548 ], [ -7591464.064787, 1370882.468461 ] ] ], [ [ [ -7677211.123117, 1368351.631208 ], [ -7699258.95927 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "AE", "ISO2": "AE", "ISO3": "ARE", "UN": 784, "NAME": "United Arab Emirates", "AREA": 8360, "POP2005": 4104291, "REGION": 142, "SUBREGION": 145, "LON": 54.163000, "LAT": 23.549000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 6007386.488241, 2774950.454925 ], [ 5969383.683877, 2773255.777341 ], [ 5994677.587255, 2786241.506343 ], [ 6007386.488241, 2774950.454925 ] ] ], [ [ [ 5936018.894777, 2786071.894941 ], [ 5927051.219237, [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TT", "ISO2": "TL", "ISO3": "TLS", "UN": 626, "NAME": "Timor-Leste", "AREA": 1487, "POP2005": 1067285, "REGION": 142, "SUBREGION": 35, "LON": 125.878000, "LAT": -8.822000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13853234.994134, -1026854.857333 ], [ 13841809.825358, -1058281.277795 ], [ 13808755.495878, -1044357.376233 ], [ 13853234.994134, -1026854.857333 ] ] ], [ [ [ 14165744.950530, -947173.162458 ], [ 13929183.994004 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PC", "ISO2": "PN", "ISO3": "PCN", "UN": 612, "NAME": "Pitcairn Islands", "AREA": 0, "POP2005": 5, "REGION": 9, "SUBREGION": 61, "LON": -128.316000, "LAT": -24.366000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -14480098.168150, -2885539.979875 ], [ -14483498.755955, -2883525.909266 ], [ -14478769.792666, -2883525.909266 ], [ -14480098.168150, -2885539.979875 ] ] ], [ [ [ -13890541.016710, -2835980.477013 ], [ -13892210.809 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "PS", "ISO2": "PW", "ISO3": "PLW", "UN": 585, "NAME": "Palau", "AREA": 0, "POP2005": 20127, "REGION": 9, "SUBREGION": 57, "LON": 134.570000, "LAT": 7.501000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 14719400.452994, 590028.996874 ], [ 14717362.081798, 592078.586144 ], [ 14719804.654065, 591643.799369 ], [ 14719400.452994, 590028.996874 ] ] ], [ [ [ 14935299.373371, 768316.973775 ], [ 14932333.599497, 773861.327034 ], [ 14 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RM", "ISO2": "MH", "ISO3": "MHL", "UN": 584, "NAME": "Marshall Islands", "AREA": 0, "POP2005": 5672, "REGION": 9, "SUBREGION": 57, "LON": 168.963000, "LAT": 7.595000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 18714318.788951, 624415.027631 ], [ 18712246.576630, 625875.401623 ], [ 18715521.484730, 629044.691340 ], [ 18714318.788951, 624415.027631 ] ] ], [ [ [ 18711719.924119, 627801.700166 ], [ 18710021.411329, 627957.0727 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SB", "ISO2": "PM", "ISO3": "SPM", "UN": 666, "NAME": "Saint Pierre and Miquelon", "AREA": 0, "POP2005": 6346, "REGION": 19, "SUBREGION": 21, "LON": -56.325000, "LAT": 47.042000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -6250682.137178, 5902670.545175 ], [ -6260298.805349, 5903618.894429 ], [ -6253248.719358, 5911114.565562 ], [ -6250682.137178, 5902670.545175 ] ] ], [ [ [ -6264071.422892, 5941120.235050 ], [ -6274894.015 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SH", "ISO2": "SH", "ISO3": "SHN", "UN": 654, "NAME": "Saint Helena", "AREA": 0, "POP2005": 6399, "REGION": 2, "SUBREGION": 11, "LON": -5.710000, "LAT": -15.953000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -1101197.227174, -4922901.549536 ], [ -1116379.981203, -4911012.843446 ], [ -1107876.396621, -4910607.462629 ], [ -1101197.227174, -4922901.549536 ] ] ], [ [ [ -1358809.119224, -4454799.877608 ], [ -1372754.891072, -445 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "SM", "ISO2": "SM", "ISO3": "SMR", "UN": 674, "NAME": "San Marino", "AREA": 0, "POP2005": 30214, "REGION": 150, "SUBREGION": 39, "LON": 12.460000, "LAT": 43.942000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1382120.311152, 5458937.771847 ], [ 1392606.607185, 5463421.031196 ], [ 1386948.014829, 5449379.171512 ], [ 1382120.311152, 5458937.771847 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "TK", "ISO2": "TC", "ISO3": "TCA", "UN": 796, "NAME": "Turks and Caicos Islands", "AREA": 0, "POP2005": 24459, "REGION": 19, "SUBREGION": 29, "LON": -71.950000, "LAT": 21.902000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -7919300.746366, 2443458.213811 ], [ -7920443.886217, 2448109.761352 ], [ -7918774.205175, 2452928.150986 ], [ -7919300.746366, 2443458.213811 ] ] ], [ [ [ -8066272.196517, 2467126.210657 ], [ -8065840.722 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "WI", "ISO2": "EH", "ISO3": "ESH", "UN": 732, "NAME": "Western Sahara", "AREA": 0, "POP2005": 440428, "REGION": 2, "SUBREGION": 15, "LON": -13.706000, "LAT": 24.554000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1752391.090109, 2432261.354243 ], [ -1887205.561310, 2432267.210344 ], [ -1898256.692439, 2363771.563495 ], [ -1883216.872635, 2504689.558953 ], [ -1861200.437705, 2542869.932999 ], [ -1835782.190455, 2551693.184493 ], [  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RB", "ISO2": "RS", "ISO3": "SRB", "UN": 688, "NAME": "Serbia", "AREA": 0, "POP2005": 9863026, "REGION": 150, "SUBREGION": 39, "LON": 20.806000, "LAT": 44.032000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2234340.587856, 5245375.355834 ], [ 2265227.850369, 5294694.139487 ], [ 2140541.226441, 5390417.379703 ], [ 2171935.660554, 5416010.848919 ], [ 2141455.159461, 5467146.009516 ], [ 2184141.397442, 5472943.615808 ], [ 2126696.8666 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "VT", "ISO2": "VA", "ISO3": "VAT", "UN": 336, "NAME": "Holy See (Vatican City)", "AREA": 0, "POP2005": 783, "REGION": 150, "SUBREGION": 39, "LON": 12.451000, "LAT": 41.904000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1385381.118511, 5146477.948295 ], [ 1386111.709296, 5147206.596616 ], [ 1386669.067215, 5146224.958409 ], [ 1385381.118511, 5146477.948295 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "SV", "ISO2": "SJ", "ISO3": "SJM", "UN": 744, "NAME": "Svalbard", "AREA": 0, "POP2005": 0, "REGION": 150, "SUBREGION": 154, "LON": 18.374000, "LAT": 78.830000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -922938.261054, 11393440.416664 ], [ -1015240.219210, 11353811.183350 ], [ -882429.820939, 11454039.212859 ], [ -922938.261054, 11393440.416664 ] ] ], [ [ [ 2135323.801992, 12662434.453454 ], [ 2091909.693177, 12712980.60899 [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RN", "ISO2": "MF", "ISO3": "MAF", "UN": 663, "NAME": "Saint Martin", "AREA": 0, "POP2005": 0, "REGION": 19, "SUBREGION": 29, "LON": -63.041000, "LAT": 18.094000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -7013870.198341, 2046979.523080 ], [ -7014403.530021, 2045424.586430 ], [ -7028694.726249, 2044408.829797 ], [ -7013870.198341, 2046979.523080 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "TB", "ISO2": "BL", "ISO3": "BLM", "UN": 652, "NAME": "Saint Barthelemy", "AREA": 0, "POP2005": 0, "REGION": 19, "SUBREGION": 29, "LON": -63.043000, "LAT": 18.040000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -7016282.269067, 2039369.076327 ], [ -7028694.726249, 2044408.829797 ], [ -7014403.530021, 2045424.586430 ], [ -7016282.269067, 2039369.076327 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "GK", "ISO2": "GG", "ISO3": "GGY", "UN": 831, "NAME": "Guernsey", "AREA": 0, "POP2005": 0, "REGION": 150, "SUBREGION": 154, "LON": -2.576000, "LAT": 49.459000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -288410.321610, 6346856.058238 ], [ -297253.987236, 6348853.959497 ], [ -278484.296574, 6361463.359402 ], [ -288410.321610, 6346856.058238 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "JE", "ISO2": "JE", "ISO3": "JEY", "UN": 832, "NAME": "Jersey", "AREA": 0, "POP2005": 0, "REGION": 150, "SUBREGION": 154, "LON": -2.129000, "LAT": 49.219000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -224308.773948, 6311279.151919 ], [ -245490.424018, 6305600.688327 ], [ -250159.608739, 6317908.612013 ], [ -224308.773948, 6311279.151919 ] ] ] } }
+,
+{ "type": "Feature", "properties": { "FIPS": "SX", "ISO2": "GS", "ISO3": "SGS", "UN": 239, "NAME": "South Georgia South Sandwich Islands", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": -36.891000, "LAT": -54.209000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -3041898.149021, -8273304.770570 ], [ -3038805.916205, -8283343.693883 ], [ -3051545.764010, -8274886.205778 ], [ -3041898.149021, -8273304.770570 ] ] ], [ [ [ -2959181.422150, -8195533.494254 ], [  [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "TW", "ISO2": "TW", "ISO3": "TWN", "UN": 158, "NAME": "Taiwan", "AREA": 0, "POP2005": 0, "REGION": 0, "SUBREGION": 0, "LON": 120.946000, "LAT": 23.754000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13533822.161243, 2511692.001695 ], [ 13524233.545584, 2520965.803502 ], [ 13530543.913559, 2520899.012109 ], [ 13533822.161243, 2511692.001695 ] ] ], [ [ [ 13321540.456399, 2698668.617869 ], [ 13305651.714159, 2696903.315659 ], [ [...]
+,
+{ "type": "Feature", "properties": { "FIPS": "RS", "ISO2": "RU", "ISO3": "RUS", "UN": 643, "NAME": "Russia", "AREA": 1638094, "POP2005": 143953092, "REGION": 150, "SUBREGION": 151, "LON": 96.689000, "LAT": 61.988000 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 14684956.390027, 5315184.766534 ], [ 14680067.817418, 5305420.214905 ], [ 14669679.175973, 5319500.207751 ], [ 14684956.390027, 5315184.766534 ] ] ], [ [ [ 16277812.335056, 5392311.552655 ], [ 16267950.259806, 53 [...]
+
+]
+}
diff --git a/examples/data/world_merc.prj b/examples/data/world_merc.prj
new file mode 100644
index 0000000..16b8e1e
--- /dev/null
+++ b/examples/data/world_merc.prj
@@ -0,0 +1 @@
+PROJCS["Google Maps Global Mercator",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Mercator_2SP"],PARAMETER["standard_parallel_1",0],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/examples/data/world_merc.shp b/examples/data/world_merc.shp
new file mode 100644
index 0000000..eaf627d
Binary files /dev/null and b/examples/data/world_merc.shp differ
diff --git a/examples/data/world_merc.shx b/examples/data/world_merc.shx
new file mode 100644
index 0000000..c2eeb54
Binary files /dev/null and b/examples/data/world_merc.shx differ
diff --git a/examples/data/world_merc_license.txt b/examples/data/world_merc_license.txt
new file mode 100644
index 0000000..b32fcc9
--- /dev/null
+++ b/examples/data/world_merc_license.txt
@@ -0,0 +1,85 @@
+world_merc
+==========
+
+'world_merc.shp' is a version of TM_WORLD_BORDERS_SIMPL-0.3.shp
+downloaded from http://thematicmapping.org/downloads/world_borders.php.
+
+Coodinates near 180 degress longitude were clipped to faciliate reprojection
+to Google mercator (EPSG:900913).
+
+Details from original readme are below:
+
+-------------
+
+TM_WORLD_BORDERS-0.1.ZIP 
+
+Provided by Bjorn Sandvik, thematicmapping.org
+
+Use this dataset with care, as several of the borders are disputed.
+
+The original shapefile (world_borders.zip, 3.2 MB) was downloaded from the Mapping Hacks website:
+http://www.mappinghacks.com/data/
+
+The dataset was derived by Schuyler Erle from public domain sources.
+Sean Gilles did some clean up and made some enhancements.
+
+
+COLUMN		TYPE			DESCRIPTION
+
+Shape		Polygon			Country/area border as polygon(s)
+FIPS		String(2)		FIPS 10-4 Country Code
+ISO2		String(2)		ISO 3166-1 Alpha-2 Country Code
+ISO3		String(3)		ISO 3166-1 Alpha-3 Country Code
+UN		Short Integer(3)	ISO 3166-1 Numeric-3 Country Code 
+NAME		String(50)		Name of country/area
+AREA		Long Integer(7)		Land area, FAO Statistics (2002) 
+POP2005		Double(10,0)	 	Population, World Polulation Prospects (2005)
+REGION		Short Integer(3) 	Macro geographical (continental region), UN Statistics
+SUBREGION	Short Integer(3)	Geogrpahical sub-region, UN Statistics
+LON		FLOAT (7,3)		Longitude
+LAT		FLOAT (6,3)		Latitude
+
+
+CHANGELOG VERSION 0.3 - 30 July 2008
+
+- Corrected spelling mistake (United Arab Emirates)
+- Corrected population number for Japan
+- Adjusted long/lat values for India, Italy and United Kingdom
+
+
+CHANGELOG VERSION 0.2 - 1 April 2008
+
+- Made new ZIP archieves. No change in dataset.
+
+
+CHANGELOG VERSION 0.1 - 13 March 2008
+
+- Polygons representing each country were merged into one feature
+- ≈land Islands was extracted from Finland
+- Hong Kong was extracted from China
+- Holy See (Vatican City) was added
+- Gaza Strip and West Bank was merged into "Occupied Palestinean Territory"
+- Saint-Barthelemy was extracted from Netherlands Antilles
+- Saint-Martin (Frensh part) was extracted from Guadeloupe
+- Svalbard and Jan Mayen was merged into "Svalbard and Jan Mayen Islands"
+- Timor-Leste was extracted from Indonesia
+- Juan De Nova Island was merged with "French Southern & Antarctic Land"
+- Baker Island, Howland Island, Jarvis Island, Johnston Atoll, Midway Islands
+  and Wake Island was merged into "United States Minor Outlying Islands"
+- Glorioso Islands, Parcel Islands, Spartly Islands was removed 
+  (almost uninhabited and missing ISO-3611-1 code)
+
+- Added ISO-3166-1 codes (alpha-2, alpha-3, numeric-3). Source:
+  https://www.cia.gov/library/publications/the-world-factbook/appendix/appendix-d.html
+  http://unstats.un.org/unsd/methods/m49/m49alpha.htm
+  http://www.fysh.org/~katie/development/geography.txt
+- AREA column has been replaced with data from UNdata:
+  Land area, 1000 hectares, 2002, FAO Statistics
+- POPULATION column (POP2005) has been replaced with data from UNdata:
+  Population, 2005, Medium variant, World Population Prospects: The 2006 Revision
+- Added region and sub-region codes from UN Statistics Division. Source:
+  http://unstats.un.org/unsd/methods/m49/m49regin.htm
+- Added LAT, LONG values for each country
+
+
+
diff --git a/lib/copytask.js b/lib/copytask.js
index 56a5ec6..fc09926 100644
--- a/lib/copytask.js
+++ b/lib/copytask.js
@@ -6,16 +6,26 @@ var Scheme = require('./scheme');
 module.exports = CopyTask;
 require('util').inherits(CopyTask, process.EventEmitter);
 function CopyTask(from, to, scheme, job) {
+    if (typeof from.getInfo === 'function') {
+        this.source = from;
+        from = 'temporary://';
+    }
+    if (typeof to.putInfo === 'function') {
+        this.sink = to;
+        to = 'temporary://';
+    }
     this.from = typeof from === 'string' ? url.parse(from) : from;
     this.to = typeof to === 'string' ? url.parse(to) : to;
     this.scheme = scheme;
     this.started = null;
     this.ended = null;
-    this.job = job;
-    this.initialize(from, to);
+    this.job = job || '/tmp/tilelive-' + (+new Date) + '.job';
+    this.formats = [];
+    this.cache = { tile: {}, grid: {} };
+    this.initialize();
 }
 
-CopyTask.prototype.initialize = function(from, to) {
+CopyTask.prototype.initialize = function() {
     var task = this;
 
     this.stats = this.scheme.stats;
@@ -25,24 +35,18 @@ CopyTask.prototype.initialize = function(from, to) {
     Object.defineProperty(this.scheme, 'task', { value: this });
 
     // State persistence
-    console.warn('Persisting state in ' + this.job + ' every minute and on SIGINT');
-
-    process.on('uncaughtException', function(err) {
-        if (err.stack) console.warn('\n' + err.stack);
-        else console.warn('\n' + err.message);
-        console.warn('Trying to exit cleanly...');
-        task.pause(function(err) {
-            if (err) throw err;
-            console.warn('\nWrote state to ' + task.job);
-        });
-    });
-
-    process.on('SIGINT', function() {
-        task.pause(function(err) {
-            if (err) throw err;
-            console.warn('\nWrote state to ' + task.job);
+    console.warn('Persisting state in ' + this.job + ' every minute');
+
+    // NOTE - This will no longer throw as of node v0.8.9
+    // https://github.com/joyent/node/commit/ea1cba6246a8b1784e22d076139b9244a9ff42f8
+    if ((process.platform !== 'win32')) {
+        process.on('SIGINT', function() {
+            task.pause(function(err) {
+                if (err) throw err;
+                console.warn('\nWrote state to ' + task.job);
+            });
         });
-    });
+    }
 };
 
 CopyTask.prototype.toJSON = function() {
@@ -57,13 +61,22 @@ CopyTask.prototype.toJSON = function() {
 
 CopyTask.prototype.finished = function() {
     var task = this;
-    this.pause(function() {
+    this.pause(function(err) {
+        if (err) {
+            if (err.stack) console.warn('\n' + err.stack);
+            else console.warn('\n' + err.message);
+        }
         task.emit('finished');
     });
 };
 
 CopyTask.prototype.pause = function(callback) {
+    // Don't call the callback if already pausing as callers often
+    // expect they are the only ones doing teardown operations.
+    if (this.pausing) return;
+
     var task = this;
+    this.pausing = true;
 
     this.scheme.once('paused', function() {
         clearInterval(task.progressInterval);
@@ -88,6 +101,8 @@ CopyTask.prototype.pause = function(callback) {
 };
 
 CopyTask.prototype.start = function(callback) {
+    callback = callback || new Function;
+
     var task = this
     if (!this.started) this.started = Date.now();
 
@@ -99,25 +114,55 @@ CopyTask.prototype.start = function(callback) {
         fs.writeFile(task.job, JSON.stringify(task));
     }, 60000);
 
-    tilelive.load(task.from, function(err, source) {
-        if (err) return callback(err);
-        task.source = source;
-        tilelive.load(task.to, function(err, sink) {
+    var init = function() {
+        if (!task.source) return tilelive.load(task.from, function(err, source) {
+            if (err) return callback(err);
+            task.source = source;
+            init();
+        });
+        if (!task.formats.length) return task.source.getInfo(function(err, info) {
+            if (err) return callback(err);
+            // @TODO the tilelive API currently has no standard way
+            // of determining whether a tilesource has tiles, grids
+            // or both. See issue #44.
+            task.formats.push('tile');
+            // Use template as an indicator that grids are present.
+            if (info.template) {
+                task.formats.push('grid');
+                task.stats.total = (task.stats.total || 0) * 2;
+            }
+            init();
+        });
+        if (!task.sink) return tilelive.load(task.to, function(err, sink) {
             if (err) return callback(err);
             task.sink = sink;
-            task.sink.startWriting(function(err) {
-                if (err) return callback(err);
-                task.scheme.start();
-                callback(null);
-            });
+            init();
         });
-    });
+        task.sink.startWriting(function(err) {
+            if (err) return callback();
+
+            // It is possible for a CopyTask to be paused before it
+            // ever starts (SIGINT, exceptions, etc.) In these cases
+            // respect the pause rather than forging ahead.
+            if (task.pausing) return callback(null);
+
+            task.scheme.start();
+            callback(null);
+        });
+    };
+    init();
 };
 
-CopyTask.prototype.render = function(tile) {
+CopyTask.prototype.render = function(tile, type) {
+    var get = type === 'grid' ? 'getGrid' : 'getTile';
+    var put = type === 'grid' ? 'putGrid' : 'putTile';
     var task = this;
-    if (tile.key !== false) {
-        task.sink.putDuplicateTile(tile.z, tile.x, tile.y, tile.key, function(err) {
+
+    // If tile key is set and we have cached its buffer in memory,
+    // skip rendering and use the existing buffer.
+    if (tile.key !== false && task.cache[type][tile.key]) {
+        var data = task.cache[type][tile.key];
+        task.sink[put](tile.z, tile.x, tile.y, data, function(err) {
             if (err) {
                 task.emit('error', err, tile);
                 task.scheme.error(tile);
@@ -125,33 +170,55 @@ CopyTask.prototype.render = function(tile) {
                 task.scheme.duplicate(tile);
             }
         });
+    // Render the tile.
     } else {
-        task.source.getTile(tile.z, tile.x, tile.y, function(err, data) {
+        task.source[get](tile.z, tile.x, tile.y, function(err, data) {
             if (err) {
-                task.emit('error', err, tile);
-                task.scheme.error(tile);
-            } else {
-                if (data.solid) {
-                    var color = data.solid.split(',');
-                    tile.key = -(color[0]*(1<<24) + ((color[1]<<16) | (color[2]<<8) | color[3]));
-                    data.key = tile.key;
-                }
-                if (tile.key === 0) {
+                if (err.message.match(/Tile|Grid does not exist/)) {
                     task.scheme.skip(tile);
                 } else {
-                    task.sink.putTile(tile.z, tile.x, tile.y, data, function(err) {
-                        if (err) {
-                            task.emit('error', err, tile);
-                            task.scheme.error(tile);
-                        }
-                        else if (tile.key === false) {
-                            // This is a unique tile
-                            task.scheme.unique(tile);
-                        } else {
-                            task.scheme.duplicate(tile);
-                        }
-                    });
+                    task.emit('error', err, tile);
+                    task.scheme.error(tile);
                 }
+                return;
+            }
+            if (data.solid) switch(type) {
+            case 'grid':
+                // Empty grid.
+                if (data.solid === '0') {
+                    data.key = tile.key = 0;
+                // String grid key.
+                } else {
+                    data.key = tile.key = data.solid;
+                }
+                task.cache[type][tile.key] = data;
+                break;
+            case 'tile':
+                var color = data.solid.split(',');
+                // Empty tile.
+                if (color[3] === '0') {
+                    data.key = tile.key = 0;
+                // Negative encoded RGBA value.
+                } else {
+                    data.key = tile.key = -(color[0]*(1<<24) + ((color[1]<<16) | (color[2]<<8) | color[3]));
+                }
+                task.cache[type][tile.key] = data;
+                break;
+            }
+            if (tile.key === 0) {
+                task.scheme.skip(tile);
+            } else {
+                task.sink[put](tile.z, tile.x, tile.y, data, function(err) {
+                    if (err) {
+                        task.emit('error', err, tile);
+                        task.scheme.error(tile);
+                    } else if (tile.key === false) {
+                        // This is a unique tile
+                        task.scheme.unique(tile);
+                    } else {
+                        task.scheme.duplicate(tile);
+                    }
+                });
             }
         });
     }
diff --git a/lib/filescheme.js b/lib/filescheme.js
index f1d3d5c..91d97a5 100644
--- a/lib/filescheme.js
+++ b/lib/filescheme.js
@@ -11,18 +11,38 @@ function FileScheme(options) {
     if (!options.list) throw new Error('Parameter list required');
     this.concurrency = options.concurrency || 8;
 
-    // TODO: don't read everything at once.
-    this.list = unserialize(fs.readFileSync(options.list, 'utf8')
-        .split('\n')
-        .filter(function(line) { return line.trim().length; })
-        .map(function(line) { return JSON.parse(line); }));
+    this.list = [];
+    this.raw = fs.readFileSync(options.list, 'utf8');
+    this.last = '';
+    this.offset = 0;
+    this.chunk = options.chunk || 1e6;
+    this.readlines();
 
     this.stats = new Statistics();
-    this.stats.total = this.list.length;
+    this.stats.total = this.raw.split('\n').filter(function(line) { return line.trim().length; }).length;
 
     this.initialize();
 }
 
+FileScheme.prototype.readlines = function() {
+    var rest = this.raw.substr(this.offset, this.chunk);
+    var read = this.last + rest;
+    var lines = read.split('\n').filter(function(line) { return line.trim().length; });
+    this.last = rest.length === this.chunk ? lines.pop() : '';
+    this.offset += this.chunk;
+    if (/[\d]+\/[\d]+\/[\d]+/.test(lines[0])) {
+        for (var i = 0; i < lines.length; i++) {
+            var coords = lines[i].split('/');
+            this.list.push(new Tile(+coords[0], +coords[1], +coords[2]));
+        }
+    } else {
+        for (var i = 0; i < lines.length; i++) {
+            var state = JSON.parse(lines[i]);
+            this.list.push(new Tile(state.z, state.x, state.y, state.key));
+        }
+    }
+}
+
 FileScheme.unserialize = function(state) {
     var scheme = Object.create(FileScheme.prototype);
     for (var key in state) scheme[key] = state[key];
@@ -33,13 +53,18 @@ FileScheme.unserialize = function(state) {
 };
 
 FileScheme.prototype.next = function() {
+    if (!this.list.length) this.readlines();
+
+    var formats = (this.task.formats && this.task.formats.length > 0) ? this.task.formats : ['tile'];
     while (!this.paused && this.list.length && this.pending.length < this.concurrency) {
         var tile = this.list.shift();
-        this.addPending(tile);
-        this.task.render(tile);
+        for (var key in formats) {
+            this.addPending(tile);
+            this.task.render(tile,formats[key]);
+        }
     }
 
-    if (!this.paused && !this.finished && !this.list.length && !this.pending.length) {
+    if (!this.paused && !this.finished && !this.list.length && !this.pending.length && !this.last) {
         this.finished = true;
         this.task.finished();
     }
diff --git a/lib/pyramidscheme.js b/lib/pyramidscheme.js
index db299f9..7a64062 100644
--- a/lib/pyramidscheme.js
+++ b/lib/pyramidscheme.js
@@ -73,6 +73,7 @@ PyramidScheme.prototype.next = function() {
     // haven't processed yet, even if this goes above our concurrency.
     // The idea is that a metatile render only actually renders one image for
     // all of its members.
+    var formats = (this.task.formats && this.task.formats.length > 0) ? this.task.formats : ['tile'];
     while (!this.finished && !this.paused && (this.pending.length < this.concurrency || this.box.length)) {
         var tile;
         if (this.box.length) {
@@ -101,8 +102,10 @@ PyramidScheme.prototype.next = function() {
         if (tile === false) break;
 
         if (tile) {
-            this.addPending(tile);
-            this.task.render(tile);
+            for (var key in formats) {
+                this.addPending(tile);
+                this.task.render(tile,formats[key]);
+            }
         }
     }
 
diff --git a/lib/scanlinescheme.js b/lib/scanlinescheme.js
index 1237696..40aba98 100644
--- a/lib/scanlinescheme.js
+++ b/lib/scanlinescheme.js
@@ -13,9 +13,9 @@ function ScanlineScheme(options) {
     if (!options.bbox) options.bbox = [ -180, -85.05112877980659, 180, 85.05112877980659 ];
     if (!Array.isArray(options.bbox) || options.bbox.length !== 4) throw new Error('bbox must have four lat/long coordinates');
     if (options.bbox[0] < -180) throw new Error('bbox has invalid west value');
-    if (options.bbox[1] < -85.05112877980659) throw new Error('bbox has invalid south value');
+    if (options.bbox[1] < -90) throw new Error('bbox has invalid south value');
     if (options.bbox[2] > 180) throw new Error('bbox has invalid east value');
-    if (options.bbox[3] > 85.05112877980659) throw new Error('bbox has invalid north value');
+    if (options.bbox[3] > 90) throw new Error('bbox has invalid north value');
     if (options.bbox[0] > options.bbox[2]) throw new Error('bbox is invalid');
     if (options.bbox[1] > options.bbox[3]) throw new Error('bbox is invalid');
     if (typeof options.minzoom !== 'number') throw new Error('minzoom must be a number');
@@ -174,6 +174,7 @@ ScanlineScheme.prototype.next = function() {
     // haven't processed yet, even if this goes above our concurrency.
     // The idea is that a metatile render only actually renders one image for
     // all of its members.
+    var formats = (this.task.formats && this.task.formats.length > 0) ? this.task.formats : ['tile'];
     while (!this.finished && !this.paused && (this.pending.length < this.concurrency || this.box.length)) {
         var tile;
         if (this.box.length) {
@@ -191,8 +192,10 @@ ScanlineScheme.prototype.next = function() {
         if (tile === false) break;
 
         if (tile) {
-            this.addPending(tile);
-            this.task.render(tile);
+            for (var key in formats) {
+                this.addPending(tile);
+                this.task.render(tile,formats[key]);
+            }
         }
     }
 
diff --git a/lib/scheme.js b/lib/scheme.js
index 36d08c0..7945bb0 100644
--- a/lib/scheme.js
+++ b/lib/scheme.js
@@ -24,10 +24,10 @@ Scheme.create = function(type, options) {
     return new Scheme.types[type](options);
 };
 
+Scheme.prototype.started = false;
 Scheme.prototype.finished = false;
 Scheme.prototype.paused = true;
 
-
 Scheme.prototype.initialize = function() {
     this.pending = [];
     Object.defineProperty(this, 'next', { value: this.next.bind(this) });
@@ -38,6 +38,7 @@ Scheme.prototype.start = function() {
         this.task.finished();
     } else {
         this.paused = false;
+        this.started = true;
         this.next();
     }
 };
@@ -48,6 +49,8 @@ Scheme.prototype.pause = function() {
         if (!this.pending.length) {
             this.emit('paused');
         }
+    } else if (!this.started) {
+        this.emit('paused');
     }
 };
 
diff --git a/lib/tilelive.js b/lib/tilelive.js
index de6260d..4dc6f77 100644
--- a/lib/tilelive.js
+++ b/lib/tilelive.js
@@ -1,12 +1,10 @@
 var tilelive = exports;
-var _ = require('underscore');
 var path = require('path');
 var url = require('url');
 var util = require('util');
 var os = require('os');
 var Queue = require('./queue');
 var EventEmitter = require('events').EventEmitter;
-var Step = require('step');
 var CopyTask = require('./copytask');
 var Scheme = require('./scheme');
 var sm = new (require('sphericalmercator'));
@@ -42,21 +40,19 @@ tilelive.list = function(source, callback) {
         return callback(new Error('No tilesource protocols defined'));
     }
 
-    Step(function() {
-        var group = this.group();
-        for (var name in tilelive.protocols) {
-            tilelive.protocols[name].list(source, group());
-        }
-    }, function(err, uris) {
-        if (err) return callback(err);
-
-        // Combine lists from all protocol sources, eliminating duplicate IDs.
-        var result = {};
-        for (var i = 0; i < uris.length; i++) {
-            _.defaults(result, uris[i]);
-        }
-        callback(null, result);
-    });
+    var result = {};
+    var queue = Object.keys(tilelive.protocols);
+    var load = function() {
+        if (!queue.length) return callback(null, result);
+        tilelive.protocols[queue.shift()].list(source, function(err, uris) {
+            if (err) return callback(err);
+            if (uris) for (var key in uris) {
+                if (result[key] == null) result[key] = uris[key];
+            }
+            load();
+        });
+    };
+    load();
 };
 
 // Obtains a tile source URI from an ID, checking all tile source protocols
@@ -111,7 +107,9 @@ tilelive.info = function(uri, callback) {
         if (err) return callback(err);
         handler.getInfo(function(err, data) {
             if (data) {
-                _(data).defaults(tilelive.defaults);
+                for (var key in tilelive.defaults) {
+                    if (data[key] == null) data[key] = tilelive.defaults[key];
+                }
                 callback(err, data, handler);
             } else {
                 callback(err);
@@ -128,28 +126,26 @@ tilelive.all = function(source, callback) {
         throw new Error('Callback required as second argument');
     }
 
-    var handlers = [], models = [];
     tilelive.list(source, function(err, uris) {
         if (err) return callback(err);
-        if (!uris) return callback(null, []);
-
-        Step(function() {
-            var group = this.group();
-            for (var id in uris) {
-                var next = group();
-                tilelive.info(uris[id], function(err, data, handler) {
-                    if (!err && data && handler) {
-                        models.push(data);
-                        handlers.push(handler);
-                    }
-                    next(err);
-                });
-            }
-        }, function(err) {
-            if (err) console.error(err.stack);
-            var sorted = _.sortBy(_.zip(models, handlers), function(m) { return (m[0].name || m[0].id).toLowerCase(); });
-            callback(null, _(sorted).pluck(0), _(sorted).pluck(1));
-        });
+        if (!uris || !Object.keys(uris).length) return callback(null, []);
+
+        var result = [];
+        var remaining = Object.keys(uris).length;
+        for (var id in uris) {
+            tilelive.info(uris[id], function(err, data, handler) {
+                if (err) console.error(err.stack);
+                if (!err && data && handler) result.push([data, handler]);
+                if (!--remaining) {
+                    result.sort(function(a, b) {
+                        return (a[0].name||a[0].id).toLowerCase() < (b[0].name||b[0].id).toLowerCase() ? -1 : 1;
+                    });
+                    var models = result.map(function(r) { return r[0] });
+                    var handlers = result.map(function(r) { return r[1] });
+                    callback(null, models, handlers);
+                }
+            });
+        }
     });
 };
 
@@ -215,166 +211,3 @@ tilelive.verify = function(ts) {
     }
 };
 
-function totalTiles(x, y, z) {
-    for (var total = 0, i = 0; i <= z; i++, x *= 2, y *= 2) {
-        total += x * y;
-    }
-    return total;
-}
-
-tilelive.copy = function(args, callback) {
-    if (typeof args.source.getTile !== 'function') throw new Error('source must implement the tilesource interface');
-    if (typeof args.sink.putTile !== 'function') throw new Error('sink must implement the tilesink interface');
-    if (!Array.isArray(args.bbox) || args.bbox.length !== 4) throw new Error('bbox must have four lat/long coordinates');
-    if (args.bbox[0] < -180) throw new Error('bbox has invalid west value');
-    if (args.bbox[1] < -85.05112877980659) throw new Error('bbox has invalid south value');
-    if (args.bbox[2] > 180) throw new Error('bbox has invalid east value');
-    if (args.bbox[3] > 85.05112877980659) throw new Error('bbox has invalid north value');
-    if (args.bbox[0] > args.bbox[2]) throw new Error('bbox is invalid');
-    if (args.bbox[1] > args.bbox[3]) throw new Error('bbox is invalid');
-    if (typeof args.minZoom !== 'number') throw new Error('minZoom must be a number');
-    if (typeof args.maxZoom !== 'number') throw new Error('maxZoom must be a number');
-    if (typeof args.concurrency !== 'number') args.concurrency = os.cpus().length * 25;
-    if (typeof callback !== 'function') callback = function() {};
-
-    if (!args.tiles && !args.grids) throw new Error('You must copy at least grids or tiles (or both)');
-
-    if (args.minZoom < 0) throw new Error('minZoom must be >= 0');
-    if (args.maxZoom > 22) throw new Error('maxZoom must be <= 22');
-    if (args.minZoom > args.maxZoom) throw new Error('maxZoom must be >= minZoom');
-
-    var action = new EventEmitter;
-
-    action.copied = 0;
-    action.failed = 0;
-    action.total = 0;
-    action.started = Date.now();
-    action.on('finished', callback);
-
-    // Precalculate the tile int bounds for each zoom level.
-    var bounds = {};
-    for (var z = args.minZoom; z <= args.maxZoom; z++) {
-        bounds[z] = sm.xyz(args.bbox, z);
-        action.total += (bounds[z].maxX - bounds[z].minX + 1) *
-                        (bounds[z].maxY - bounds[z].minY + 1);
-    }
-
-    // We have twice the amount of things to copy when we copy both.
-    if (args.grids && args.tiles) action.total *= 2;
-
-    // Sets z, x and y to the next tile.
-    var z = args.minZoom;
-
-    // Start out one tile left to the starting position because we increment
-    // as the first action in the id() function.
-    var x = bounds[z].minX - 1;
-    var y = bounds[z].minY;
-
-    if (args.source.metatile > 1) {
-        var boxSize = args.source.metatile, boxLeft, boxTop, boxLeft, boxBottom;
-        var resetID = function() {
-            boxLeft = x - x % boxSize;
-            boxRight = boxLeft + boxSize;
-            boxTop = y - y % boxSize;
-            boxBottom = boxTop + boxSize;
-        }
-        resetID(); // Initialize.
-        var id = function() {
-            if (z > args.maxZoom) return false;
-
-            ++x;
-            if (x >= boxRight || x > bounds[z].maxX) { // Start the next row in this metatile.
-                x = Math.max(boxLeft, bounds[z].minX);
-                y++;
-            }
-            if (y >= boxBottom || y > bounds[z].maxY) { // Start the next metatile in this row.
-                boxLeft += boxSize;
-                boxRight = boxLeft + boxSize;
-                x = boxLeft;
-                y = Math.max(boxTop, bounds[z].minY);
-            }
-            if (x > bounds[z].maxX) { // Start the next metatile row.
-                x = bounds[z].minX;
-                y = boxBottom;
-                resetID();
-            }
-            if (y > bounds[z].maxY) { // All rows in this zoom level are exhausted.
-                if (++z > args.maxZoom) return false;
-                x = bounds[z].minX;
-                y = bounds[z].minY;
-                resetID();
-            }
-            return true;
-        };
-
-    } else {
-        var id = function() {
-            if (z > args.maxZoom) return false;
-
-            if (++x > bounds[z].maxX) {
-                x = bounds[z].minX;
-                y++;
-            }
-            if (y > bounds[z].maxY) {
-                if (++z > args.maxZoom) return false;
-                x = bounds[z].minX;
-                y = bounds[z].minY;
-            }
-            return true;
-        };
-    }
-
-    function copy(type, z, x, y, callback) {
-        var get = type === 'grid' ? 'getGrid' : 'getTile';
-        var put = type === 'grid' ? 'putGrid' : 'putTile';
-        args.source[get](z, x, y, function(err, data) {
-            if (err) {
-                action.failed++;
-                action.emit('warning', err);
-                return callback();
-            } else {
-                args.sink[put](z, x, y, data, function(err) {
-                    if (err) {
-                        action.failed++;
-                        action.emit('warning', err);
-                    } else {
-                        action.copied++;
-                    }
-                    callback();
-                });
-            }
-        });
-    }
-
-    var q = new Queue(function(coords, next) {
-        // Make sure there's something in the queue.
-        if (id()) q.add([z, x, y]);
-
-        Step(function() {
-            if (args.tiles) copy('tile', coords[0], coords[1], coords[2], this.parallel());
-            if (args.grids) copy('grid', coords[0], coords[1], coords[2], this.parallel());
-        }, next);
-    }, args.concurrency);
-
-    args.sink.startWriting(function(err) {
-        if (err) return action.emit('error', err);
-
-        // Once the queue is empty, all tiles have been copied.
-        q.on('empty', function() {
-            args.sink.stopWriting(function(err) {
-                if (err) {
-                    action.emit('error', err);
-                } else {
-                    action.emit('finished');
-                }
-            });
-        });
-
-        // Fill the queue.
-        for (var i = args.concurrency; i && id(); i--) {
-            q.add([z, x, y]);
-        }
-    });
-
-    return action;
-};
diff --git a/package.json b/package.json
index f85d891..d68316e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name"          : "tilelive",
-    "version"       : "4.2.1",
+    "version"       : "4.5.0",
     "main"          : "./lib/tilelive.js",
     "description"   : "Frontend for various tile backends, mapnik and mbtiles",
     "url"           : "http://github.com/mapbox/tilelive.js",
@@ -25,25 +25,22 @@
         "Konstantin Käfer <kkaefer>"
     ],
     "dependencies": {
-        "generic-pool": "~1.0.9",
         "optimist": "~0.3.1",
-        "step": "~0.0.5",
-        "sphericalmercator": "~1.0.1",
-        "underscore": "~1.3.1"
+        "sphericalmercator": "~1.0.1"
     },
     "devDependencies": {
         "docco": "~0.3.0",
-        "mocha": "~0.14",
-        "jshint": "~0.5.9",
+        "mocha": "~1.3",
+        "jshint": "~0.7",
         "mbtiles": "~0.2.0",
         "tilejson": "~0.1.0",
-        "tilelive-mapnik": "~0.3.0"
+        "tilelive-mapnik": "~0.4.2"
     },
     "bin": {
-        "tilelive": "./bin/tilelive"
+        "tilelive-copy": "./bin/copy"
     },
     "engines": {
-        "node": "~0.6.x"
+        "node": ">= 0.6.0 && < 0.9.0"
     },
     "scripts": {
         "test": "make test"
diff --git a/test/copy.mbtiles-journal b/test/copy.mbtiles-journal
deleted file mode 100644
index b61644d..0000000
Binary files a/test/copy.mbtiles-journal and /dev/null differ
diff --git a/test/copy.test.js b/test/copy.test.js
index edb42c7..e44fb51 100644
--- a/test/copy.test.js
+++ b/test/copy.test.js
@@ -1,4 +1,3 @@
-var Step = require('step');
 var assert = require('assert');
 var fs = require('fs');
 
@@ -30,29 +29,29 @@ describe('copying', function() {
         });
 
         it('should copy', function(done) {
-            tilelive.copy({
-                source: source,
-                sink: sink,
+            var scheme = tilelive.Scheme.create('scanline', {
                 bbox: [ -10, -10, 10, 10 ],
-                minZoom: 3,
-                maxZoom: 5,
-                tiles: true
-            }, function(err) {
-                source.close(function(err) {
-                    if (err) done(err);
-                    else sink.close(done);
-                });
+                minzoom: 3,
+                maxzoom: 5
             });
+            var task = new tilelive.CopyTask(source, sink, scheme);
+            task.on('error', done);
+            task.on('finished', done);
+            task.start();
         });
 
         it('should verify the information', function(done) {
             tilelive.info('mbtiles://' + __dirname + '/copy.mbtiles', function(err, info) {
                 if (err) throw err;
+                // There is some variance in the MBTiles size generated --
+                // possibly related to the timing in which data is inserted.
+                assert.ok(info.filesize > 39900 && info.filesize < 41000);
+                delete info.filesize;
                 assert.deepEqual({
                     scheme: 'tms',
                     basename: 'copy.mbtiles',
                     id: 'copy',
-                    filesize: 39936,
+                    // filesize: 39936,
                     minzoom: 3,
                     maxzoom: 4,
                     bounds: [ -45, -40.97989806962013, 45, 40.97989806962013 ],
diff --git a/test/file.test.js b/test/file.test.js
new file mode 100644
index 0000000..d2e4ae0
--- /dev/null
+++ b/test/file.test.js
@@ -0,0 +1,75 @@
+var assert = require('assert');
+var Scheme = require('../lib/scheme');
+var FileScheme = require('../lib/filescheme');
+
+describe('file enumeration scheme', function() {
+    ['flat', 'json'].forEach(function(format) {
+        it('should parse ' + format + ' input', function(done) {
+            var scheme = new FileScheme({ list: __dirname + '/fixtures/filescheme.' + format });
+            assert.deepEqual(scheme, {
+                type: 'file',
+                concurrency: 8,
+                list: [
+                    { z: 0, x: 0, y: 0, key: false, id: 0 },
+                    { z: 1, x: 0, y: 0, key: false, id: 1 },
+                    { z: 1, x: 1, y: 0, key: false, id: 3 },
+                    { z: 1, x: 0, y: 1, key: false, id: 2 },
+                    { z: 1, x: 1, y: 1, key: false, id: 4 }
+                ],
+                stats: {
+                    history: [],
+                    total: 5
+                },
+                raw: require('fs').readFileSync(__dirname + '/fixtures/filescheme.' + format, 'utf8'),
+                last: '',
+                chunk: 1e6,
+                offset: 1e6,
+                pending: []
+            });
+            var tiles = [];
+            scheme.task = {
+                render: function(tile) {
+                    tiles.push(tile.toString());
+                    scheme.unique(tile);
+                },
+                finished: function() {
+                    assert.deepEqual(tiles, ['0/0/0', '1/0/0', '1/1/0', '1/0/1', '1/1/1']);
+                    done();
+                }
+            };
+            scheme.start()
+        });
+    });
+    it('should read in chunks', function(done) {
+        var scheme = new FileScheme({ list: __dirname + '/fixtures/filescheme.flat', chunk:10 });
+        assert.deepEqual(scheme, {
+            type: 'file',
+            concurrency: 8,
+            list: [
+                { z: 0, x: 0, y: 0, key: false, id: 0 }
+            ],
+            stats: {
+                history: [],
+                total: 5
+            },
+            raw: require('fs').readFileSync(__dirname + '/fixtures/filescheme.flat', 'utf8'),
+            last: '1/0/',
+            chunk: 10,
+            offset: 10,
+            pending: []
+        });
+        var tiles = [];
+        scheme.task = {
+            render: function(tile) {
+                tiles.push(tile.toString());
+                scheme.unique(tile);
+            },
+            finished: function() {
+                assert.deepEqual(tiles, ['0/0/0', '1/0/0', '1/1/0', '1/0/1', '1/1/1']);
+                done();
+            }
+        };
+        scheme.start()
+    });
+});
+
diff --git a/test/fixtures/filescheme.flat b/test/fixtures/filescheme.flat
new file mode 100644
index 0000000..efadca9
--- /dev/null
+++ b/test/fixtures/filescheme.flat
@@ -0,0 +1,5 @@
+0/0/0
+1/0/0
+1/1/0
+1/0/1
+1/1/1
diff --git a/test/fixtures/filescheme.json b/test/fixtures/filescheme.json
new file mode 100644
index 0000000..ee29ef9
--- /dev/null
+++ b/test/fixtures/filescheme.json
@@ -0,0 +1,5 @@
+{ "z":0, "x":0, "y":0, "key":false }
+{ "z":1, "x":0, "y":0, "key":false }
+{ "z":1, "x":1, "y":0, "key":false }
+{ "z":1, "x":0, "y":1, "key":false }
+{ "z":1, "x":1, "y":1, "key":false }
diff --git a/test/fixtures/resume.job b/test/fixtures/resume.job
new file mode 100644
index 0000000..74e7962
--- /dev/null
+++ b/test/fixtures/resume.job
@@ -0,0 +1,158 @@
+{
+    "started": 1335822062812,
+    "ended": 1335822066903,
+    "from": {
+        "protocol": "mbtiles:",
+        "slashes": true,
+        "host": "",
+        "hostname": "",
+        "href": "mbtiles://{DIRNAME}/fixtures/plain_1.mbtiles",
+        "pathname": "{DIRNAME}/fixtures/plain_1.mbtiles",
+        "path": "{DIRNAME}/fixtures/plain_1.mbtiles",
+        "query": {
+            "batch": 100
+        }
+    },
+    "to": {
+        "protocol": "mbtiles:",
+        "slashes": true,
+        "host": "",
+        "hostname": "",
+        "href": "mbtiles://{DIRNAME}/resumed.mbtiles",
+        "pathname": "{DIRNAME}/resumed.mbtiles",
+        "path": "{DIRNAME}/resumed.mbtiles",
+        "query": {
+            "batch": 100
+        }
+    },
+    "scheme": {
+        "type": "scanline",
+        "concurrency": 8,
+        "minzoom": 0,
+        "maxzoom": 4,
+        "metatile": 1,
+        "bounds": {
+            "0": {
+                "minX": 0,
+                "minY": 0,
+                "maxX": 0,
+                "maxY": 0
+            },
+            "1": {
+                "minX": 0,
+                "minY": 0,
+                "maxX": 1,
+                "maxY": 1
+            },
+            "2": {
+                "minX": 0,
+                "minY": 0,
+                "maxX": 3,
+                "maxY": 3
+            },
+            "3": {
+                "minX": 0,
+                "minY": 0,
+                "maxX": 7,
+                "maxY": 7
+            },
+            "4": {
+                "minX": 0,
+                "minY": 0,
+                "maxX": 15,
+                "maxY": 15
+            }
+        },
+        "stats": {
+            "history": [
+                {
+                    "date": 1335822062812,
+                    "total": 341,
+                    "pending": 0,
+                    "unique": 0,
+                    "duplicate": 0,
+                    "failed": 0,
+                    "skipped": 0,
+                    "remaining": 341,
+                    "processed": 0,
+                    "speed": 0
+                },
+                {
+                    "date": 1335822063814,
+                    "total": 341,
+                    "pending": 0,
+                    "unique": 0,
+                    "duplicate": 0,
+                    "failed": 0,
+                    "skipped": 0,
+                    "remaining": 341,
+                    "processed": 0,
+                    "speed": 0
+                },
+                {
+                    "date": 1335822064814,
+                    "total": 341,
+                    "pending": 0,
+                    "unique": 0,
+                    "duplicate": 0,
+                    "failed": 0,
+                    "skipped": 0,
+                    "remaining": 341,
+                    "processed": 0,
+                    "speed": 0
+                },
+                {
+                    "date": 1335822065815,
+                    "total": 341,
+                    "pending": 0,
+                    "unique": 0,
+                    "duplicate": 0,
+                    "failed": 0,
+                    "skipped": 0,
+                    "remaining": 341,
+                    "processed": 0,
+                    "speed": 0
+                },
+                {
+                    "date": 1335822066179,
+                    "total": 341,
+                    "pending": 0,
+                    "unique": 0,
+                    "duplicate": 0,
+                    "failed": 0,
+                    "skipped": 0,
+                    "remaining": 341,
+                    "processed": 0,
+                    "speed": 0
+                },
+                {
+                    "date": 1335822066903,
+                    "total": 341,
+                    "pending": 0,
+                    "unique": 0,
+                    "duplicate": 0,
+                    "failed": 0,
+                    "skipped": 0,
+                    "remaining": 341,
+                    "processed": 0,
+                    "speed": 0
+                }
+            ],
+            "total": 341,
+            "pending": 0,
+            "unique": 0,
+            "duplicate": 0,
+            "failed": 0,
+            "skipped": 0
+        },
+        "pos": {
+            "z": 0,
+            "x": -1,
+            "y": 0
+        },
+        "box": [],
+        "finished": false,
+        "pending": [],
+        "paused": true
+    }
+}
diff --git a/test/fixtures/resume.mbtiles b/test/fixtures/resume.mbtiles
new file mode 100644
index 0000000..7144db5
Binary files /dev/null and b/test/fixtures/resume.mbtiles differ
diff --git a/test/list.test.js b/test/list.test.js
index b1a903a..2ba6edf 100644
--- a/test/list.test.js
+++ b/test/list.test.js
@@ -11,6 +11,7 @@ describe('listing', function() {
                 'plain_1': 'mbtiles://' + __dirname + '/fixtures/plain_1.mbtiles',
                 'plain_2': 'mbtiles://' + __dirname + '/fixtures/plain_2.mbtiles',
                 'plain_4': 'mbtiles://' + __dirname + '/fixtures/plain_4.mbtiles',
+                'resume': 'mbtiles://' + __dirname + '/fixtures/resume.mbtiles',
                 'mapquest': 'tilejson://' + __dirname + '/fixtures/mapquest.tilejson'
             }, sources);
             done(err);
diff --git a/test/load.test.js b/test/load.test.js
index 930a857..041a3c5 100644
--- a/test/load.test.js
+++ b/test/load.test.js
@@ -1,5 +1,4 @@
 var assert = require('assert');
-var Step = require('step');
 
 var tilelive = require('..');
 tilelive.protocols['mbtiles:'] = require('mbtiles');
@@ -92,6 +91,20 @@ var data = [
         maxzoom: 4,
         center: [ 0, 5.0000000006793215, 2 ],
         legend: null
+    },
+    {
+        scheme: 'tms',
+        basename: 'resume.mbtiles',
+        id: 'resume',
+        filesize: 16384,
+        name: '',
+        description: '',
+        version: '1.0.0',
+        legend: null,
+        minzoom: 0,
+        maxzoom: 22,
+        bounds: [ -180, -85.05112877980659, 180, 85.05112877980659 ],
+        center: null
     }
 ];
 
@@ -141,11 +154,12 @@ describe('loading', function() {
 
             assert.deepEqual(data, info);
 
-            Step(function() {
-                for (var i = 0; i < handlers.length; i++) {
-                    handlers[i].close(this.parallel());
-                }
-            }, done);
+            var doit = function(err) {
+                if (err) return done(err);
+                if (!handlers.length) return done();
+                handlers.shift().close(doit);
+            };
+            doit();
         });
     });
 });
diff --git a/test/resume.test.js b/test/resume.test.js
new file mode 100644
index 0000000..c6af851
--- /dev/null
+++ b/test/resume.test.js
@@ -0,0 +1,60 @@
+var assert = require('assert');
+var fs = require('fs');
+var CopyTask = require('../lib/copytask');
+var Scheme = require('../lib/scheme');
+
+var tilelive = require('..');
+tilelive.protocols['mbtiles:'] = require('mbtiles');
+tilelive.protocols['tilejson:'] = require('tilejson');
+
+describe('resume', function() {
+    var job;
+
+    before(function() {
+        try { fs.unlinkSync(__dirname + '/resumed.mbtiles'); }
+        catch(err) { if (err.code !== 'ENOENT') throw err; }
+        try { fs.unlinkSync(__dirname + '/resumed.job'); }
+        catch(err) { if (err.code !== 'ENOENT') throw err; }
+
+        // Write resumed.mbtiles.
+        fs.writeFileSync(__dirname + '/resumed.mbtiles', fs.readFileSync(__dirname + '/fixtures/resume.mbtiles'));
+
+        // Write resumed.job.
+        job = JSON.parse(fs.readFileSync(__dirname + '/fixtures/resume.job', 'utf8'));
+        job.from.href = job.from.href.replace('{DIRNAME}', __dirname);
+        job.from.path = job.from.path.replace('{DIRNAME}', __dirname);
+        job.from.pathname = job.from.pathname.replace('{DIRNAME}', __dirname);
+        job.to.href = job.to.href.replace('{DIRNAME}', __dirname);
+        job.to.path = job.to.path.replace('{DIRNAME}', __dirname);
+        job.to.pathname = job.to.pathname.replace('{DIRNAME}', __dirname);
+        fs.writeFileSync(__dirname + '/resumed.job', JSON.stringify(job));
+    });
+
+    it('should copy', function(done) {
+        var scheme = Scheme.unserialize(job.scheme);
+        var task = new CopyTask(job.from, job.to, scheme, __dirname + '/resumed.job');
+        task.start(function() {});
+        task.on('error', function(err) {
+            if (err.message === 'Tile does not exist') return;
+            throw err;
+        });
+        task.on('finished', done);
+    });
+
+    it('should verify the information', function(done) {
+        tilelive.load('mbtiles://' + __dirname + '/resumed.mbtiles', function(err, source) {
+            source._db.get('SELECT COUNT(*) AS count FROM tiles', function(err, res) {
+                if (err) throw err;
+                assert.equal(res.count, 285);
+                done();
+            });
+        });
+    })
+
+    after(function() {
+        try { fs.unlinkSync(__dirname + '/resumed.mbtiles'); }
+        catch(err) { if (err.code !== 'ENOENT') throw err; }
+        try { fs.unlinkSync(__dirname + '/resumed.job'); }
+        catch(err) { if (err.code !== 'ENOENT') throw err; }
+    });
+});

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/node-tilelive.git



More information about the Pkg-javascript-commits mailing list