Browse Source

update whois driver

tags/v1.5.4
Jonathan Cobb 3 years ago
parent
commit
91c75f7721
3 changed files with 276 additions and 249 deletions
  1. +10
    -4
      bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocateServiceDriverBase.java
  2. +22
    -1
      bubble-server/src/main/java/bubble/cloud/geoLocation/whois/WhoisGeoLocationDriver.java
  3. +244
    -244
      bubble-server/src/main/resources/bubble/cloud/geoLocation/country-locations.json

+ 10
- 4
bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocateServiceDriverBase.java View File

@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import static java.util.Collections.emptyMap;
import static java.util.concurrent.TimeUnit.DAYS;
import static java.util.concurrent.TimeUnit.SECONDS;
import static java.util.function.Function.identity;
@@ -65,10 +66,15 @@ public abstract class GeoLocateServiceDriverBase<T> extends CloudServiceDriverBa

@Getter(lazy=true) private final Map<String, GeoLocation> countryMap = initCountryMap();
private Map<String, GeoLocation> initCountryMap() {
final String countryJson = stream2string("bubble/cloud/geoLocation/country-locations.json");
final GeoLocation[] countryLocations = json(countryJson, GeoLocation[].class);
return Arrays.stream(countryLocations)
.collect(Collectors.toMap(GeoLocation::getCountry, identity()));
try {
final String countryJson = stream2string("bubble/cloud/geoLocation/country-locations.json");
final GeoLocation[] countryLocations = json(countryJson, GeoLocation[].class);
return Arrays.stream(countryLocations)
.collect(Collectors.toMap(GeoLocation::getCountry, identity()));
} catch (Exception e) {
log.warn("initCountryMap: "+shortError(e));
return emptyMap();
}
}

@Override public GeoLocation geolocate (String ip) {


+ 22
- 1
bubble-server/src/main/java/bubble/cloud/geoLocation/whois/WhoisGeoLocationDriver.java View File

@@ -9,6 +9,7 @@ import org.cobbzilla.util.system.CommandResult;

import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;

import static bubble.cloud.geoLocation.GeoLocation.NULL_LOCATION;
import static org.cobbzilla.util.daemon.ZillaRuntime.*;
@@ -20,10 +21,30 @@ import static org.cobbzilla.util.system.CommandShell.execScript;
@Slf4j
public class WhoisGeoLocationDriver extends GeoLocateServiceDriverBase<WhoisConfig> {

// always flush once upon initialization
private static final AtomicBoolean flushed = new AtomicBoolean(false);
public boolean flush() {
if (!flushed.get()) {
synchronized (flushed) {
if (!flushed.get()) {
getCache().flush();
flushed.set(true);
}
}
}
return flushed.get();
}

@Getter(lazy=true) private final String whois = initWhois();
private String initWhois() {
flush();
final String cmd = execScript("which whois");
return empty(cmd) ? die("initWhois: 'whois' command not found") : cmd;
return empty(cmd) ? die("initWhois: 'whois' command not found") : cmd.trim();
}

@Override public boolean test() {
flush();
return super.test();
}

@Override protected GeoLocation _geolocate(String ip) {


+ 244
- 244
bubble-server/src/main/resources/bubble/cloud/geoLocation/country-locations.json View File

@@ -1,246 +1,246 @@
[
{"name": "AD", "lat": 42.546245, "lon": 1.601554},
{"name": "AE", "lat": 23.424076, "lon": 53.847818},
{"name": "AF", "lat": 33.93911, "lon": 67.709953},
{"name": "AG", "lat": 17.060816, "lon": -61.796428},
{"name": "AI", "lat": 18.220554, "lon": -63.068615},
{"name": "AL", "lat": 41.153332, "lon": 20.168331},
{"name": "AM", "lat": 40.069099, "lon": 45.038189},
{"name": "AN", "lat": 12.226079, "lon": -69.060087},
{"name": "AO", "lat": -11.202692, "lon": 17.873887},
{"name": "AQ", "lat": -75.250973, "lon": -0.071389},
{"name": "AR", "lat": -38.416097, "lon": -63.616672},
{"name": "AS", "lat": -14.270972, "lon": -170.132217},
{"name": "AT", "lat": 47.516231, "lon": 14.550072},
{"name": "AU", "lat": -25.274398, "lon": 133.775136},
{"name": "AW", "lat": 12.52111, "lon": -69.968338},
{"name": "AZ", "lat": 40.143105, "lon": 47.576927},
{"name": "BA", "lat": 43.915886, "lon": 17.679076},
{"name": "BB", "lat": 13.193887, "lon": -59.543198},
{"name": "BD", "lat": 23.684994, "lon": 90.356331},
{"name": "BE", "lat": 50.503887, "lon": 4.469936},
{"name": "BF", "lat": 12.238333, "lon": -1.561593},
{"name": "BG", "lat": 42.733883, "lon": 25.48583},
{"name": "BH", "lat": 25.930414, "lon": 50.637772},
{"name": "BI", "lat": -3.373056, "lon": 29.918886},
{"name": "BJ", "lat": 9.30769, "lon": 2.315834},
{"name": "BM", "lat": 32.321384, "lon": -64.75737},
{"name": "BN", "lat": 4.535277, "lon": 114.727669},
{"name": "BO", "lat": -16.290154, "lon": -63.588653},
{"name": "BR", "lat": -14.235004, "lon": -51.92528},
{"name": "BS", "lat": 25.03428, "lon": -77.39628},
{"name": "BT", "lat": 27.514162, "lon": 90.433601},
{"name": "BV", "lat": -54.423199, "lon": 3.413194},
{"name": "BW", "lat": -22.328474, "lon": 24.684866},
{"name": "BY", "lat": 53.709807, "lon": 27.953389},
{"name": "BZ", "lat": 17.189877, "lon": -88.49765},
{"name": "CA", "lat": 56.130366, "lon": -106.346771},
{"name": "CC", "lat": -12.164165, "lon": 96.870956},
{"name": "CD", "lat": -4.038333, "lon": 21.758664},
{"name": "CF", "lat": 6.611111, "lon": 20.939444},
{"name": "CG", "lat": -0.228021, "lon": 15.827659},
{"name": "CH", "lat": 46.818188, "lon": 8.227512},
{"name": "CI", "lat": 7.539989, "lon": -5.54708},
{"name": "CK", "lat": -21.236736, "lon": -159.777671},
{"name": "CL", "lat": -35.675147, "lon": -71.542969},
{"name": "CM", "lat": 7.369722, "lon": 12.354722},
{"name": "CN", "lat": 35.86166, "lon": 104.195397},
{"name": "CO", "lat": 4.570868, "lon": -74.297333},
{"name": "CR", "lat": 9.748917, "lon": -83.753428},
{"name": "CU", "lat": 21.521757, "lon": -77.781167},
{"name": "CV", "lat": 16.002082, "lon": -24.013197},
{"name": "CX", "lat": -10.447525, "lon": 105.690449},
{"name": "CY", "lat": 35.126413, "lon": 33.429859},
{"name": "CZ", "lat": 49.817492, "lon": 15.472962},
{"name": "DE", "lat": 51.165691, "lon": 10.451526},
{"name": "DJ", "lat": 11.825138, "lon": 42.590275},
{"name": "DK", "lat": 56.26392, "lon": 9.501785},
{"name": "DM", "lat": 15.414999, "lon": -61.370976},
{"name": "DO", "lat": 18.735693, "lon": -70.162651},
{"name": "DZ", "lat": 28.033886, "lon": 1.659626},
{"name": "EC", "lat": -1.831239, "lon": -78.183406},
{"name": "EE", "lat": 58.595272, "lon": 25.013607},
{"name": "EG", "lat": 26.820553, "lon": 30.802498},
{"name": "EH", "lat": 24.215527, "lon": -12.885834},
{"name": "ER", "lat": 15.179384, "lon": 39.782334},
{"name": "ES", "lat": 40.463667, "lon": -3.74922},
{"name": "ET", "lat": 9.145, "lon": 40.489673},
{"name": "FI", "lat": 61.92411, "lon": 25.748151},
{"name": "FJ", "lat": -16.578193, "lon": 179.414413},
{"name": "FK", "lat": -51.796253, "lon": -59.523613},
{"name": "FM", "lat": 7.425554, "lon": 150.550812},
{"name": "FO", "lat": 61.892635, "lon": -6.911806},
{"name": "FR", "lat": 46.227638, "lon": 2.213749},
{"name": "GA", "lat": -0.803689, "lon": 11.609444},
{"name": "GB", "lat": 55.378051, "lon": -3.435973},
{"name": "GD", "lat": 12.262776, "lon": -61.604171},
{"name": "GE", "lat": 42.315407, "lon": 43.356892},
{"name": "GF", "lat": 3.933889, "lon": -53.125782},
{"name": "GG", "lat": 49.465691, "lon": -2.585278},
{"name": "GH", "lat": 7.946527, "lon": -1.023194},
{"name": "GI", "lat": 36.137741, "lon": -5.345374},
{"name": "GL", "lat": 71.706936, "lon": -42.604303},
{"name": "GM", "lat": 13.443182, "lon": -15.310139},
{"name": "GN", "lat": 9.945587, "lon": -9.696645},
{"name": "GP", "lat": 16.995971, "lon": -62.067641},
{"name": "GQ", "lat": 1.650801, "lon": 10.267895},
{"name": "GR", "lat": 39.074208, "lon": 21.824312},
{"name": "GS", "lat": -54.429579, "lon": -36.587909},
{"name": "GT", "lat": 15.783471, "lon": -90.230759},
{"name": "GU", "lat": 13.444304, "lon": 144.793731},
{"name": "GW", "lat": 11.803749, "lon": -15.180413},
{"name": "GY", "lat": 4.860416, "lon": -58.93018},
{"name": "GZ", "lat": 31.354676, "lon": 34.308825},
{"name": "HK", "lat": 22.396428, "lon": 114.109497},
{"name": "HM", "lat": -53.08181, "lon": 73.504158},
{"name": "HN", "lat": 15.199999, "lon": -86.241905},
{"name": "HR", "lat": 45.1, "lon": 15.2},
{"name": "HT", "lat": 18.971187, "lon": -72.285215},
{"name": "HU", "lat": 47.162494, "lon": 19.503304},
{"name": "ID", "lat": -0.789275, "lon": 113.921327},
{"name": "IE", "lat": 53.41291, "lon": -8.24389},
{"name": "IL", "lat": 31.046051, "lon": 34.851612},
{"name": "IM", "lat": 54.236107, "lon": -4.548056},
{"name": "IN", "lat": 20.593684, "lon": 78.96288},
{"name": "IO", "lat": -6.343194, "lon": 71.876519},
{"name": "IQ", "lat": 33.223191, "lon": 43.679291},
{"name": "IR", "lat": 32.427908, "lon": 53.688046},
{"name": "IS", "lat": 64.963051, "lon": -19.020835},
{"name": "IT", "lat": 41.87194, "lon": 12.56738},
{"name": "JE", "lat": 49.214439, "lon": -2.13125},
{"name": "JM", "lat": 18.109581, "lon": -77.297508},
{"name": "JO", "lat": 30.585164, "lon": 36.238414},
{"name": "JP", "lat": 36.204824, "lon": 138.252924},
{"name": "KE", "lat": -0.023559, "lon": 37.906193},
{"name": "KG", "lat": 41.20438, "lon": 74.766098},
{"name": "KH", "lat": 12.565679, "lon": 104.990963},
{"name": "KI", "lat": -3.370417, "lon": -168.734039},
{"name": "KM", "lat": -11.875001, "lon": 43.872219},
{"name": "KN", "lat": 17.357822, "lon": -62.782998},
{"name": "KP", "lat": 40.339852, "lon": 127.510093},
{"name": "KR", "lat": 35.907757, "lon": 127.766922},
{"name": "KW", "lat": 29.31166, "lon": 47.481766},
{"name": "KY", "lat": 19.513469, "lon": -80.566956},
{"name": "KZ", "lat": 48.019573, "lon": 66.923684},
{"name": "LA", "lat": 19.85627, "lon": 102.495496},
{"name": "LB", "lat": 33.854721, "lon": 35.862285},
{"name": "LC", "lat": 13.909444, "lon": -60.978893},
{"name": "LI", "lat": 47.166, "lon": 9.555373},
{"name": "LK", "lat": 7.873054, "lon": 80.771797},
{"name": "LR", "lat": 6.428055, "lon": -9.429499},
{"name": "LS", "lat": -29.609988, "lon": 28.233608},
{"name": "LT", "lat": 55.169438, "lon": 23.881275},
{"name": "LU", "lat": 49.815273, "lon": 6.129583},
{"name": "LV", "lat": 56.879635, "lon": 24.603189},
{"name": "LY", "lat": 26.3351, "lon": 17.228331},
{"name": "MA", "lat": 31.791702, "lon": -7.09262},
{"name": "MC", "lat": 43.750298, "lon": 7.412841},
{"name": "MD", "lat": 47.411631, "lon": 28.369885},
{"name": "ME", "lat": 42.708678, "lon": 19.37439},
{"name": "MG", "lat": -18.766947, "lon": 46.869107},
{"name": "MH", "lat": 7.131474, "lon": 171.184478},
{"name": "MK", "lat": 41.608635, "lon": 21.745275},
{"name": "ML", "lat": 17.570692, "lon": -3.996166},
{"name": "MM", "lat": 21.913965, "lon": 95.956223},
{"name": "MN", "lat": 46.862496, "lon": 103.846656},
{"name": "MO", "lat": 22.198745, "lon": 113.543873},
{"name": "MP", "lat": 17.33083, "lon": 145.38469},
{"name": "MQ", "lat": 14.641528, "lon": -61.024174},
{"name": "MR", "lat": 21.00789, "lon": -10.940835},
{"name": "MS", "lat": 16.742498, "lon": -62.187366},
{"name": "MT", "lat": 35.937496, "lon": 14.375416},
{"name": "MU", "lat": -20.348404, "lon": 57.552152},
{"name": "MV", "lat": 3.202778, "lon": 73.22068},
{"name": "MW", "lat": -13.254308, "lon": 34.301525},
{"name": "MX", "lat": 23.634501, "lon": -102.552784},
{"name": "MY", "lat": 4.210484, "lon": 101.975766},
{"name": "MZ", "lat": -18.665695, "lon": 35.529562},
{"name": "NA", "lat": -22.95764, "lon": 18.49041},
{"name": "NC", "lat": -20.904305, "lon": 165.618042},
{"name": "NE", "lat": 17.607789, "lon": 8.081666},
{"name": "NF", "lat": -29.040835, "lon": 167.954712},
{"name": "NG", "lat": 9.081999, "lon": 8.675277},
{"name": "NI", "lat": 12.865416, "lon": -85.207229},
{"name": "NL", "lat": 52.132633, "lon": 5.291266},
{"name": "NO", "lat": 60.472024, "lon": 8.468946},
{"name": "NP", "lat": 28.394857, "lon": 84.124008},
{"name": "NR", "lat": -0.522778, "lon": 166.931503},
{"name": "NU", "lat": -19.054445, "lon": -169.867233},
{"name": "NZ", "lat": -40.900557, "lon": 174.885971},
{"name": "OM", "lat": 21.512583, "lon": 55.923255},
{"name": "PA", "lat": 8.537981, "lon": -80.782127},
{"name": "PE", "lat": -9.189967, "lon": -75.015152},
{"name": "PF", "lat": -17.679742, "lon": -149.406843},
{"name": "PG", "lat": -6.314993, "lon": 143.95555},
{"name": "PH", "lat": 12.879721, "lon": 121.774017},
{"name": "PK", "lat": 30.375321, "lon": 69.345116},
{"name": "PL", "lat": 51.919438, "lon": 19.145136},
{"name": "PM", "lat": 46.941936, "lon": -56.27111},
{"name": "PN", "lat": -24.703615, "lon": -127.439308},
{"name": "PR", "lat": 18.220833, "lon": -66.590149},
{"name": "PS", "lat": 31.952162, "lon": 35.233154},
{"name": "PT", "lat": 39.399872, "lon": -8.224454},
{"name": "PW", "lat": 7.51498, "lon": 134.58252},
{"name": "PY", "lat": -23.442503, "lon": -58.443832},
{"name": "QA", "lat": 25.354826, "lon": 51.183884},
{"name": "RE", "lat": -21.115141, "lon": 55.536384},
{"name": "RO", "lat": 45.943161, "lon": 24.96676},
{"name": "RS", "lat": 44.016521, "lon": 21.005859},
{"name": "RU", "lat": 61.52401, "lon": 105.318756},
{"name": "RW", "lat": -1.940278, "lon": 29.873888},
{"name": "SA", "lat": 23.885942, "lon": 45.079162},
{"name": "SB", "lat": -9.64571, "lon": 160.156194},
{"name": "SC", "lat": -4.679574, "lon": 55.491977},
{"name": "SD", "lat": 12.862807, "lon": 30.217636},
{"name": "SE", "lat": 60.128161, "lon": 18.643501},
{"name": "SG", "lat": 1.352083, "lon": 103.819836},
{"name": "SH", "lat": -24.143474, "lon": -10.030696},
{"name": "SI", "lat": 46.151241, "lon": 14.995463},
{"name": "SJ", "lat": 77.553604, "lon": 23.670272},
{"name": "SK", "lat": 48.669026, "lon": 19.699024},
{"name": "SL", "lat": 8.460555, "lon": -11.779889},
{"name": "SM", "lat": 43.94236, "lon": 12.457777},
{"name": "SN", "lat": 14.497401, "lon": -14.452362},
{"name": "SO", "lat": 5.152149, "lon": 46.199616},
{"name": "SR", "lat": 3.919305, "lon": -56.027783},
{"name": "ST", "lat": 0.18636, "lon": 6.613081},
{"name": "SV", "lat": 13.794185, "lon": -88.89653},
{"name": "SY", "lat": 34.802075, "lon": 38.996815},
{"name": "SZ", "lat": -26.522503, "lon": 31.465866},
{"name": "TC", "lat": 21.694025, "lon": -71.797928},
{"name": "TD", "lat": 15.454166, "lon": 18.732207},
{"name": "TF", "lat": -49.280366, "lon": 69.348557},
{"name": "TG", "lat": 8.619543, "lon": 0.824782},
{"name": "TH", "lat": 15.870032, "lon": 100.992541},
{"name": "TJ", "lat": 38.861034, "lon": 71.276093},
{"name": "TK", "lat": -8.967363, "lon": -171.855881},
{"name": "TL", "lat": -8.874217, "lon": 125.727539},
{"name": "TM", "lat": 38.969719, "lon": 59.556278},
{"name": "TN", "lat": 33.886917, "lon": 9.537499},
{"name": "TO", "lat": -21.178986, "lon": -175.198242},
{"name": "TR", "lat": 38.963745, "lon": 35.243322},
{"name": "TT", "lat": 10.691803, "lon": -61.222503},
{"name": "TV", "lat": -7.109535, "lon": 177.64933},
{"name": "TW", "lat": 23.69781, "lon": 120.960515},
{"name": "TZ", "lat": -6.369028, "lon": 34.888822},
{"name": "UA", "lat": 48.379433, "lon": 31.16558},
{"name": "UG", "lat": 1.373333, "lon": 32.290275},
{"name": "US", "lat": 37.09024, "lon": -95.712891},
{"name": "UY", "lat": -32.522779, "lon": -55.765835},
{"name": "UZ", "lat": 41.377491, "lon": 64.585262},
{"name": "VA", "lat": 41.902916, "lon": 12.453389},
{"name": "VC", "lat": 12.984305, "lon": -61.287228},
{"name": "VE", "lat": 6.42375, "lon": -66.58973},
{"name": "VG", "lat": 18.420695, "lon": -64.639968},
{"name": "VI", "lat": 18.335765, "lon": -64.896335},
{"name": "VN", "lat": 14.058324, "lon": 108.277199},
{"name": "VU", "lat": -15.376706, "lon": 166.959158},
{"name": "WF", "lat": -13.768752, "lon": -177.156097},
{"name": "WS", "lat": -13.759029, "lon": -172.104629},
{"name": "XK", "lat": 42.602636, "lon": 20.902977},
{"name": "YE", "lat": 15.552727, "lon": 48.516388},
{"name": "YT", "lat": -12.8275, "lon": 45.166244},
{"name": "ZA", "lat": -30.559482, "lon": 22.937506},
{"name": "ZM", "lat": -13.133897, "lon": 27.849332},
{"name": "ZW", "lat": -19.015438, "lon": 29.154857}
{"country": "AD", "lat": 42.546245, "lon": 1.601554},
{"country": "AE", "lat": 23.424076, "lon": 53.847818},
{"country": "AF", "lat": 33.93911, "lon": 67.709953},
{"country": "AG", "lat": 17.060816, "lon": -61.796428},
{"country": "AI", "lat": 18.220554, "lon": -63.068615},
{"country": "AL", "lat": 41.153332, "lon": 20.168331},
{"country": "AM", "lat": 40.069099, "lon": 45.038189},
{"country": "AN", "lat": 12.226079, "lon": -69.060087},
{"country": "AO", "lat": -11.202692, "lon": 17.873887},
{"country": "AQ", "lat": -75.250973, "lon": -0.071389},
{"country": "AR", "lat": -38.416097, "lon": -63.616672},
{"country": "AS", "lat": -14.270972, "lon": -170.132217},
{"country": "AT", "lat": 47.516231, "lon": 14.550072},
{"country": "AU", "lat": -25.274398, "lon": 133.775136},
{"country": "AW", "lat": 12.52111, "lon": -69.968338},
{"country": "AZ", "lat": 40.143105, "lon": 47.576927},
{"country": "BA", "lat": 43.915886, "lon": 17.679076},
{"country": "BB", "lat": 13.193887, "lon": -59.543198},
{"country": "BD", "lat": 23.684994, "lon": 90.356331},
{"country": "BE", "lat": 50.503887, "lon": 4.469936},
{"country": "BF", "lat": 12.238333, "lon": -1.561593},
{"country": "BG", "lat": 42.733883, "lon": 25.48583},
{"country": "BH", "lat": 25.930414, "lon": 50.637772},
{"country": "BI", "lat": -3.373056, "lon": 29.918886},
{"country": "BJ", "lat": 9.30769, "lon": 2.315834},
{"country": "BM", "lat": 32.321384, "lon": -64.75737},
{"country": "BN", "lat": 4.535277, "lon": 114.727669},
{"country": "BO", "lat": -16.290154, "lon": -63.588653},
{"country": "BR", "lat": -14.235004, "lon": -51.92528},
{"country": "BS", "lat": 25.03428, "lon": -77.39628},
{"country": "BT", "lat": 27.514162, "lon": 90.433601},
{"country": "BV", "lat": -54.423199, "lon": 3.413194},
{"country": "BW", "lat": -22.328474, "lon": 24.684866},
{"country": "BY", "lat": 53.709807, "lon": 27.953389},
{"country": "BZ", "lat": 17.189877, "lon": -88.49765},
{"country": "CA", "lat": 56.130366, "lon": -106.346771},
{"country": "CC", "lat": -12.164165, "lon": 96.870956},
{"country": "CD", "lat": -4.038333, "lon": 21.758664},
{"country": "CF", "lat": 6.611111, "lon": 20.939444},
{"country": "CG", "lat": -0.228021, "lon": 15.827659},
{"country": "CH", "lat": 46.818188, "lon": 8.227512},
{"country": "CI", "lat": 7.539989, "lon": -5.54708},
{"country": "CK", "lat": -21.236736, "lon": -159.777671},
{"country": "CL", "lat": -35.675147, "lon": -71.542969},
{"country": "CM", "lat": 7.369722, "lon": 12.354722},
{"country": "CN", "lat": 35.86166, "lon": 104.195397},
{"country": "CO", "lat": 4.570868, "lon": -74.297333},
{"country": "CR", "lat": 9.748917, "lon": -83.753428},
{"country": "CU", "lat": 21.521757, "lon": -77.781167},
{"country": "CV", "lat": 16.002082, "lon": -24.013197},
{"country": "CX", "lat": -10.447525, "lon": 105.690449},
{"country": "CY", "lat": 35.126413, "lon": 33.429859},
{"country": "CZ", "lat": 49.817492, "lon": 15.472962},
{"country": "DE", "lat": 51.165691, "lon": 10.451526},
{"country": "DJ", "lat": 11.825138, "lon": 42.590275},
{"country": "DK", "lat": 56.26392, "lon": 9.501785},
{"country": "DM", "lat": 15.414999, "lon": -61.370976},
{"country": "DO", "lat": 18.735693, "lon": -70.162651},
{"country": "DZ", "lat": 28.033886, "lon": 1.659626},
{"country": "EC", "lat": -1.831239, "lon": -78.183406},
{"country": "EE", "lat": 58.595272, "lon": 25.013607},
{"country": "EG", "lat": 26.820553, "lon": 30.802498},
{"country": "EH", "lat": 24.215527, "lon": -12.885834},
{"country": "ER", "lat": 15.179384, "lon": 39.782334},
{"country": "ES", "lat": 40.463667, "lon": -3.74922},
{"country": "ET", "lat": 9.145, "lon": 40.489673},
{"country": "FI", "lat": 61.92411, "lon": 25.748151},
{"country": "FJ", "lat": -16.578193, "lon": 179.414413},
{"country": "FK", "lat": -51.796253, "lon": -59.523613},
{"country": "FM", "lat": 7.425554, "lon": 150.550812},
{"country": "FO", "lat": 61.892635, "lon": -6.911806},
{"country": "FR", "lat": 46.227638, "lon": 2.213749},
{"country": "GA", "lat": -0.803689, "lon": 11.609444},
{"country": "GB", "lat": 55.378051, "lon": -3.435973},
{"country": "GD", "lat": 12.262776, "lon": -61.604171},
{"country": "GE", "lat": 42.315407, "lon": 43.356892},
{"country": "GF", "lat": 3.933889, "lon": -53.125782},
{"country": "GG", "lat": 49.465691, "lon": -2.585278},
{"country": "GH", "lat": 7.946527, "lon": -1.023194},
{"country": "GI", "lat": 36.137741, "lon": -5.345374},
{"country": "GL", "lat": 71.706936, "lon": -42.604303},
{"country": "GM", "lat": 13.443182, "lon": -15.310139},
{"country": "GN", "lat": 9.945587, "lon": -9.696645},
{"country": "GP", "lat": 16.995971, "lon": -62.067641},
{"country": "GQ", "lat": 1.650801, "lon": 10.267895},
{"country": "GR", "lat": 39.074208, "lon": 21.824312},
{"country": "GS", "lat": -54.429579, "lon": -36.587909},
{"country": "GT", "lat": 15.783471, "lon": -90.230759},
{"country": "GU", "lat": 13.444304, "lon": 144.793731},
{"country": "GW", "lat": 11.803749, "lon": -15.180413},
{"country": "GY", "lat": 4.860416, "lon": -58.93018},
{"country": "GZ", "lat": 31.354676, "lon": 34.308825},
{"country": "HK", "lat": 22.396428, "lon": 114.109497},
{"country": "HM", "lat": -53.08181, "lon": 73.504158},
{"country": "HN", "lat": 15.199999, "lon": -86.241905},
{"country": "HR", "lat": 45.1, "lon": 15.2},
{"country": "HT", "lat": 18.971187, "lon": -72.285215},
{"country": "HU", "lat": 47.162494, "lon": 19.503304},
{"country": "ID", "lat": -0.789275, "lon": 113.921327},
{"country": "IE", "lat": 53.41291, "lon": -8.24389},
{"country": "IL", "lat": 31.046051, "lon": 34.851612},
{"country": "IM", "lat": 54.236107, "lon": -4.548056},
{"country": "IN", "lat": 20.593684, "lon": 78.96288},
{"country": "IO", "lat": -6.343194, "lon": 71.876519},
{"country": "IQ", "lat": 33.223191, "lon": 43.679291},
{"country": "IR", "lat": 32.427908, "lon": 53.688046},
{"country": "IS", "lat": 64.963051, "lon": -19.020835},
{"country": "IT", "lat": 41.87194, "lon": 12.56738},
{"country": "JE", "lat": 49.214439, "lon": -2.13125},
{"country": "JM", "lat": 18.109581, "lon": -77.297508},
{"country": "JO", "lat": 30.585164, "lon": 36.238414},
{"country": "JP", "lat": 36.204824, "lon": 138.252924},
{"country": "KE", "lat": -0.023559, "lon": 37.906193},
{"country": "KG", "lat": 41.20438, "lon": 74.766098},
{"country": "KH", "lat": 12.565679, "lon": 104.990963},
{"country": "KI", "lat": -3.370417, "lon": -168.734039},
{"country": "KM", "lat": -11.875001, "lon": 43.872219},
{"country": "KN", "lat": 17.357822, "lon": -62.782998},
{"country": "KP", "lat": 40.339852, "lon": 127.510093},
{"country": "KR", "lat": 35.907757, "lon": 127.766922},
{"country": "KW", "lat": 29.31166, "lon": 47.481766},
{"country": "KY", "lat": 19.513469, "lon": -80.566956},
{"country": "KZ", "lat": 48.019573, "lon": 66.923684},
{"country": "LA", "lat": 19.85627, "lon": 102.495496},
{"country": "LB", "lat": 33.854721, "lon": 35.862285},
{"country": "LC", "lat": 13.909444, "lon": -60.978893},
{"country": "LI", "lat": 47.166, "lon": 9.555373},
{"country": "LK", "lat": 7.873054, "lon": 80.771797},
{"country": "LR", "lat": 6.428055, "lon": -9.429499},
{"country": "LS", "lat": -29.609988, "lon": 28.233608},
{"country": "LT", "lat": 55.169438, "lon": 23.881275},
{"country": "LU", "lat": 49.815273, "lon": 6.129583},
{"country": "LV", "lat": 56.879635, "lon": 24.603189},
{"country": "LY", "lat": 26.3351, "lon": 17.228331},
{"country": "MA", "lat": 31.791702, "lon": -7.09262},
{"country": "MC", "lat": 43.750298, "lon": 7.412841},
{"country": "MD", "lat": 47.411631, "lon": 28.369885},
{"country": "ME", "lat": 42.708678, "lon": 19.37439},
{"country": "MG", "lat": -18.766947, "lon": 46.869107},
{"country": "MH", "lat": 7.131474, "lon": 171.184478},
{"country": "MK", "lat": 41.608635, "lon": 21.745275},
{"country": "ML", "lat": 17.570692, "lon": -3.996166},
{"country": "MM", "lat": 21.913965, "lon": 95.956223},
{"country": "MN", "lat": 46.862496, "lon": 103.846656},
{"country": "MO", "lat": 22.198745, "lon": 113.543873},
{"country": "MP", "lat": 17.33083, "lon": 145.38469},
{"country": "MQ", "lat": 14.641528, "lon": -61.024174},
{"country": "MR", "lat": 21.00789, "lon": -10.940835},
{"country": "MS", "lat": 16.742498, "lon": -62.187366},
{"country": "MT", "lat": 35.937496, "lon": 14.375416},
{"country": "MU", "lat": -20.348404, "lon": 57.552152},
{"country": "MV", "lat": 3.202778, "lon": 73.22068},
{"country": "MW", "lat": -13.254308, "lon": 34.301525},
{"country": "MX", "lat": 23.634501, "lon": -102.552784},
{"country": "MY", "lat": 4.210484, "lon": 101.975766},
{"country": "MZ", "lat": -18.665695, "lon": 35.529562},
{"country": "NA", "lat": -22.95764, "lon": 18.49041},
{"country": "NC", "lat": -20.904305, "lon": 165.618042},
{"country": "NE", "lat": 17.607789, "lon": 8.081666},
{"country": "NF", "lat": -29.040835, "lon": 167.954712},
{"country": "NG", "lat": 9.081999, "lon": 8.675277},
{"country": "NI", "lat": 12.865416, "lon": -85.207229},
{"country": "NL", "lat": 52.132633, "lon": 5.291266},
{"country": "NO", "lat": 60.472024, "lon": 8.468946},
{"country": "NP", "lat": 28.394857, "lon": 84.124008},
{"country": "NR", "lat": -0.522778, "lon": 166.931503},
{"country": "NU", "lat": -19.054445, "lon": -169.867233},
{"country": "NZ", "lat": -40.900557, "lon": 174.885971},
{"country": "OM", "lat": 21.512583, "lon": 55.923255},
{"country": "PA", "lat": 8.537981, "lon": -80.782127},
{"country": "PE", "lat": -9.189967, "lon": -75.015152},
{"country": "PF", "lat": -17.679742, "lon": -149.406843},
{"country": "PG", "lat": -6.314993, "lon": 143.95555},
{"country": "PH", "lat": 12.879721, "lon": 121.774017},
{"country": "PK", "lat": 30.375321, "lon": 69.345116},
{"country": "PL", "lat": 51.919438, "lon": 19.145136},
{"country": "PM", "lat": 46.941936, "lon": -56.27111},
{"country": "PN", "lat": -24.703615, "lon": -127.439308},
{"country": "PR", "lat": 18.220833, "lon": -66.590149},
{"country": "PS", "lat": 31.952162, "lon": 35.233154},
{"country": "PT", "lat": 39.399872, "lon": -8.224454},
{"country": "PW", "lat": 7.51498, "lon": 134.58252},
{"country": "PY", "lat": -23.442503, "lon": -58.443832},
{"country": "QA", "lat": 25.354826, "lon": 51.183884},
{"country": "RE", "lat": -21.115141, "lon": 55.536384},
{"country": "RO", "lat": 45.943161, "lon": 24.96676},
{"country": "RS", "lat": 44.016521, "lon": 21.005859},
{"country": "RU", "lat": 61.52401, "lon": 105.318756},
{"country": "RW", "lat": -1.940278, "lon": 29.873888},
{"country": "SA", "lat": 23.885942, "lon": 45.079162},
{"country": "SB", "lat": -9.64571, "lon": 160.156194},
{"country": "SC", "lat": -4.679574, "lon": 55.491977},
{"country": "SD", "lat": 12.862807, "lon": 30.217636},
{"country": "SE", "lat": 60.128161, "lon": 18.643501},
{"country": "SG", "lat": 1.352083, "lon": 103.819836},
{"country": "SH", "lat": -24.143474, "lon": -10.030696},
{"country": "SI", "lat": 46.151241, "lon": 14.995463},
{"country": "SJ", "lat": 77.553604, "lon": 23.670272},
{"country": "SK", "lat": 48.669026, "lon": 19.699024},
{"country": "SL", "lat": 8.460555, "lon": -11.779889},
{"country": "SM", "lat": 43.94236, "lon": 12.457777},
{"country": "SN", "lat": 14.497401, "lon": -14.452362},
{"country": "SO", "lat": 5.152149, "lon": 46.199616},
{"country": "SR", "lat": 3.919305, "lon": -56.027783},
{"country": "ST", "lat": 0.18636, "lon": 6.613081},
{"country": "SV", "lat": 13.794185, "lon": -88.89653},
{"country": "SY", "lat": 34.802075, "lon": 38.996815},
{"country": "SZ", "lat": -26.522503, "lon": 31.465866},
{"country": "TC", "lat": 21.694025, "lon": -71.797928},
{"country": "TD", "lat": 15.454166, "lon": 18.732207},
{"country": "TF", "lat": -49.280366, "lon": 69.348557},
{"country": "TG", "lat": 8.619543, "lon": 0.824782},
{"country": "TH", "lat": 15.870032, "lon": 100.992541},
{"country": "TJ", "lat": 38.861034, "lon": 71.276093},
{"country": "TK", "lat": -8.967363, "lon": -171.855881},
{"country": "TL", "lat": -8.874217, "lon": 125.727539},
{"country": "TM", "lat": 38.969719, "lon": 59.556278},
{"country": "TN", "lat": 33.886917, "lon": 9.537499},
{"country": "TO", "lat": -21.178986, "lon": -175.198242},
{"country": "TR", "lat": 38.963745, "lon": 35.243322},
{"country": "TT", "lat": 10.691803, "lon": -61.222503},
{"country": "TV", "lat": -7.109535, "lon": 177.64933},
{"country": "TW", "lat": 23.69781, "lon": 120.960515},
{"country": "TZ", "lat": -6.369028, "lon": 34.888822},
{"country": "UA", "lat": 48.379433, "lon": 31.16558},
{"country": "UG", "lat": 1.373333, "lon": 32.290275},
{"country": "US", "lat": 37.09024, "lon": -95.712891},
{"country": "UY", "lat": -32.522779, "lon": -55.765835},
{"country": "UZ", "lat": 41.377491, "lon": 64.585262},
{"country": "VA", "lat": 41.902916, "lon": 12.453389},
{"country": "VC", "lat": 12.984305, "lon": -61.287228},
{"country": "VE", "lat": 6.42375, "lon": -66.58973},
{"country": "VG", "lat": 18.420695, "lon": -64.639968},
{"country": "VI", "lat": 18.335765, "lon": -64.896335},
{"country": "VN", "lat": 14.058324, "lon": 108.277199},
{"country": "VU", "lat": -15.376706, "lon": 166.959158},
{"country": "WF", "lat": -13.768752, "lon": -177.156097},
{"country": "WS", "lat": -13.759029, "lon": -172.104629},
{"country": "XK", "lat": 42.602636, "lon": 20.902977},
{"country": "YE", "lat": 15.552727, "lon": 48.516388},
{"country": "YT", "lat": -12.8275, "lon": 45.166244},
{"country": "ZA", "lat": -30.559482, "lon": 22.937506},
{"country": "ZM", "lat": -13.133897, "lon": 27.849332},
{"country": "ZW", "lat": -19.015438, "lon": 29.154857}
]

Loading…
Cancel
Save