什么是最好的&最简单的方法来检查我(例如(的人在哪个国家(地理位置(,而不使用API,如谷歌地图,HereMaps等。
我只有我的(例如(人的经纬度坐标,想自动检查他们目前所在的国家。
-
下载QGIS-伟大的地理坐标程序,如谷歌地图专业版,但有更多的选项和功能。
-
从
naturalearthdata.com
(例如:https://www.naturalearthdata.com/downloads/50m-cultural-vectors/50m-admin-0-countries-2/
(下载.shp文件。
在我的情况下,它是ne_10m_admin_0_countries_pol.shp
编辑:为了更好的准确性(小岛屿/州边界(,请使用:https://ec.europa.eu/eurostat/web/gisco/geodata/reference-data/administrative-units-statistical-units/countries#countries20
(如果WKT文件对您来说太大,请转到矢量-几何工具-简化(
-
将此文件导入QGIS(大小"最大"的文件(
-
我们需要WKT(众所周知的文本->是的,扩展名imo最糟糕的名称(,所以下载扩展名(按照本教程:https://www.youtube.com/watch?v=N6WOzM00FLk)
-
单击";按区域选择特征或单击";(在工具栏中,在中间上方,靠近蓝色刷新图标(
-
单击WKT(从4。扩展名(,并将值复制到新的.txt文件并保存此文件(警告:一个文件,一个国家/地区(。
现在让我们进入编码:
-
在您的类中导入库
using NetTopologySuite.IO;
-
阅读您要检查的所有国家/地区,例如:
var Merica = File.ReadAllText(@"<fileToPatch>America_WKT.txt");
-
使用我们的库并创建GeometryFactory和WKT阅读器变量:
var gf = NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory(4326); //NtsGeometryServices.DefaultSRID var wkt = new WKTReader(); //(longitude, latitude) // I used dictionary (key - value), but you can use just normal list/array/enumerable. var GeomDict = new Dictionary<string, NetTopologySuite.Geometries.Geometry>(); GeomDict.Add("MericaFakYeah", wkt.Read(AmericaWktString));
-
创建您的最终功能:
var pointStart = gf.CreatePoint(new NetTopologySuite.Geometries.Coordinate(longitudeStart, latitudeStart)); foreach (var geom in geomDict) { var isLocation = geom.Value.Contains(pointStart); if (isLocation) { location = geom.Key; break; } }
沃伊拉。希望它能帮助我们很多人!