2016-12-10 2 views
1

Я внедрил плагин cordova-plugin-geolocation в мое приложение cordova. Я просто пытался вывести страну пользователя без необходимости в стороннем APi. Мое приложение связывается с WebApi, написанным на C#, поэтому я не против, если для этого есть решение C#. Я бы предпочел не исследовать использование сторонних инструментов, включая Google, но если это лучший вариант, то я буду исследовать.Cordova - Определить страну пользователей на основе геолокации

С точки зрения точности, мне нужно только выяснить, находятся ли они вне Великобритании.

ответ

0

Существует еще одна возможность, которая не требует каких-либо сторонних-apis, соответственно, интернет-соединений.

Этот ответ основан на point-in-polygon-aglorithm.

Вам нужна страна/страны, как многоугольник (ы), состоящий из лат/lng-точек, вы можете получить все lat/lng-точки Австрии (например), используя GGIS-Editor и соответствующие данные (в виде шейп-файла) от here или из натуральной земли (выберите Администратор 0 - Страна) here

  1. Установите GGIS-редактор
  2. Распаковка AUT_adm_shp.zip
  3. Start GGIS-редактор
  4. Select Tab: Layer -> Add Layer -> добавить Vectorlayer
  5. Выберите AUT_adm0.shp (шейпфайл), он shoudl выглядеть это сейчас: enter image description here

  6. Отметить весь многоугольник с помощью Mark-Tools (желтая кнопка с курсором): enter image description here

  7. Выберите Tab: Layer -> Сохранить как

  8. Сохранить как GeoJSON-File
  9. Скопировать все LNG/Lat координаты из этого GeoJSON-File: enter image description here

  10. Когда вы скопировали все 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), чтобы выяснить, являетесь ли вы расположенных внутри или за пределами Австрии. Конечно, он также работает с другими странами или «объединенными странами», чтобы выяснить, является ли пользователь в пределах Европы, например.

Надеюсь, это поможет.

Смежные вопросы