如何在不使用 API 的情况下进入哪个国家/地区?经纬度国家坐标
How to get in which country somebody is without using any API? Latitude and longitude countries coordinates
在不使用 GoogleMaps、HereMaps 等 API 的情况下,检查我的(例如)人在哪个国家(地理位置)的最好和最简单的方法是什么
我只有我的(例如)人的经纬度坐标,并且想自动检查他们当前所在的国家/地区。
下载 QGIS - 很棒的地理坐标程序,例如 Google Maps Pro,但有更多的选项和功能。
从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)
单击“Select 按区域划分的要素或单击”(在工具栏中,在顶部中间,蓝色刷新图标附近)
单击 WKT(来自 4. 扩展名)并将值复制到新的 .txt 文件并保存此文件(警告:一个文件,一个国家/地区)。
现在让我们开始编码:
在您的 class 导入库中
using NetTopologySuite.IO;
阅读所有你想查看的国家,例如:
var Merica = File.ReadAllText(@"<fileToPatch>\America_WKT.txt");
使用我们的库并创建 GeometryFactory 和 WKT reader 变量:
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;
}
}
瞧。希望对大家有帮助!
在不使用 GoogleMaps、HereMaps 等 API 的情况下,检查我的(例如)人在哪个国家(地理位置)的最好和最简单的方法是什么
我只有我的(例如)人的经纬度坐标,并且想自动检查他们当前所在的国家/地区。
下载 QGIS - 很棒的地理坐标程序,例如 Google Maps Pro,但有更多的选项和功能。
从
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)
单击“Select 按区域划分的要素或单击”(在工具栏中,在顶部中间,蓝色刷新图标附近)
单击 WKT(来自 4. 扩展名)并将值复制到新的 .txt 文件并保存此文件(警告:一个文件,一个国家/地区)。
现在让我们开始编码:
在您的 class 导入库中
using NetTopologySuite.IO;
阅读所有你想查看的国家,例如:
var Merica = File.ReadAllText(@"<fileToPatch>\America_WKT.txt");
使用我们的库并创建 GeometryFactory 和 WKT reader 变量:
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; } }
瞧。希望对大家有帮助!