我创建了一个 Github 项目,可以根据 GPS 点(纬度; 经度)获取国家或美国州份信息。请参见此处。如果找到,将返回一个 LocationInfo 类,其中包含 ID 和名称。此外,还可以作为nuget 包使用。
你可以使用GeoNames并从这里下载本地数据库。以下是一个示例查询,可用于获取最接近的经纬度坐标的条目。var query = new SQLiteCommand("select name,latitude,longitude,country_code,feature_code from geoloc order by ((latitude - @lat) * (latitude - @lat) + (longitude - @lng) * (longitude - @lng)) LIMIT 1, cn);
你可以做到。如果不需要太高的精度,可以使用带有国家坐标的表格,并确定最近的国家坐标。但这是不好的方法。好的解决方案是获取一个国界KML文件。但您需要一个好的算法来确定您的点在哪个国家的边界上。关于查找点和多边形位置的算法描述在这里。此外,还有一些stackoverflow上的答案1, 2,但这只适用于平面。另一个可能的方法是预先计算具有某些小步骤(例如30'')的坐标的国家,并通过找到离您的点最近的预计算点来确定国家。您可以使用许多在线服务预先计算国家。