我已将cordova-plugin-geolocation插件应用到我的cordova应用程序中。我只是试图在不需要第三方APi的情况下派生用户的国家。我的应用程序正在与用C#编写的WebApi进行通信,因此我不介意是否有针对此的C#解决方案。我宁愿不使用包括谷歌在内的第三方工具进行探索,但如果这是最佳选择,那么我将探索。
就准确性而言,我只需要检测它们是否在英国境外。
答案 0 :(得分:0)
还有另一种可能性,根本不需要任何第三方api互联网连接。
此答案基于point-in-polygon-aglorithm。
您需要一个国家/国家/地区作为由纬度/经度点组成的多边形,您可以使用GGIS-Editor和相关数据(例如)获取奥地利的所有纬度/经度点(例如) shapefile)来自here或来自自然地球(选择Admin 0 - Countries)here
选择标签:图层 - >保存为
当您将所有Lng / Lat-Points复制为此格式的数组元素时:
[[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
}
);
(链接:https://jsfiddle.net/pfa028n8)了解您是否位于奥地利境内或境外。当然,它也适用于其他国家或联合国家&#34;例如,找出用户是否在欧洲境内。
希望这有帮助。