Существует еще одна возможность, которая не требует каких-либо сторонних-apis, соответственно, интернет-соединений.
Этот ответ основан на point-in-polygon-aglorithm.
Вам нужна страна/страны, как многоугольник (ы), состоящий из лат/lng-точек, вы можете получить все lat/lng-точки Австрии (например), используя GGIS-Editor и соответствующие данные (в виде шейп-файла) от here или из натуральной земли (выберите Администратор 0 - Страна) here
- Установите GGIS-редактор
- Распаковка AUT_adm_shp.zip
- Start GGIS-редактор
- Select Tab: Layer -> Add Layer -> добавить Vectorlayer
Выберите AUT_adm0.shp (шейпфайл), он shoudl выглядеть это сейчас:
Отметить весь многоугольник с помощью Mark-Tools (желтая кнопка с курсором):
Выберите Tab: Layer -> Сохранить как
- Сохранить как GeoJSON-File
Скопировать все LNG/Lat координаты из этого GeoJSON-File:
Когда вы скопировали все LNG/Lat-поинты как массив элементов в этом формате:
[[LNG, Lat], .....]
Затем вы можете использовать мою скрипку-код:
var countryLngLatsOfAustria = [ [ lng, lat ], .....];
function pointInPoly(verties, testx, testy) {
var i,
j,
c = 0,
nvert = verties.length;
for (i = 0, j = nvert - 1; i < nvert; j = i++) {
if (((verties[i][0] > testy) != (verties[j][0] > testy)) && (testx < (verties[j][1] - verties[i][1]) * (testy - verties[i][0])/(verties[j][0] - verties[i][0]) + verties[i][1]))
c = !c;
}
return c;
}
// use current location
navigator.geolocation.getCurrentPosition(
function (position) {
alert(position.coords.longitude +", "+ position.coords.latitude);
var isInAustria = pointInPoly(countryLngLatsOfAustria, position.coords.latitude, position.coords.longitude);
if (isInAustria) alert('User is located within austria!');
else alert('User is located outside from austria!');
},
function (err) {
console.log(err);
},
{
timeout: 5000,
enableHighAccuracy: true
}
);
(Link: https://jsfiddle.net/pfa028n8), чтобы выяснить, являетесь ли вы расположенных внутри или за пределами Австрии. Конечно, он также работает с другими странами или «объединенными странами», чтобы выяснить, является ли пользователь в пределах Европы, например.
Надеюсь, это поможет.