如何在不使用 API 的情况下进入哪个国家/地区?经纬度国家坐标

How to get in which country somebody is without using any API? Latitude and longitude countries coordinates

在不使用 GoogleMaps、HereMaps 等 API 的情况下,检查我的(例如)人在哪个国家(地理位置)的最好和最简单的方法是什么

我只有我的(例如)人的经纬度坐标,并且想自动检查他们当前所在的国家/地区。

  1. 下载 QGIS - 很棒的地理坐标程序,例如 Google Maps Pro,但有更多的选项和功能。

  2. 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 文件对您来说太大,转到矢量 -> 几何工具 -> 简化

  1. 将此文件导入QGIS(大小“最大”的那个)

  2. 我们需要 .WKT(知名文本 -> 是的,扩展名 imo 的最糟糕名称) ,所以下载扩展(按照本教程:https://www.youtube.com/watch?v=N6WOzM00FLk

  3. 单击“Select 按区域划分的要素或单击”(在工具栏中,在顶部中间,蓝色刷新图标附近)

  4. 单击 WKT(来自 4. 扩展名)并将值复制到新的 .txt 文件并保存此文件(警告:一个文件,一个国家/地区)。

现在让我们开始编码:

  1. 在您的 class 导入库中

    using NetTopologySuite.IO;
    
  2. 阅读所有你想查看的国家,例如:

    var Merica = File.ReadAllText(@"<fileToPatch>\America_WKT.txt"); 
    
  3. 使用我们的库并创建 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));
    
  4. 创建最终函数:

    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;
         }
     }
    

瞧。希望对大家有帮助!