C# - 如何在没有API的情况下从经纬度获取国家

10

是否可以通过C#库或更新的地理坐标国家数据库,无需像Google Maps的JavaScript API那样使用API,从纬度和经度获取国家名称?


1
你需要多高的准确度? - fryday
2
纯C#?不可能。可能是如何从纬度和经度获取国家名称的重复问题。 - MaYaN
1
@MaYaN,有了良好的数据库和智能算法是可能的。 - fryday
@k4st0r42 是的,这是可能的,但你必须先开始实现它,当你遇到困难时我们才能帮助你。 - Oluwafemi
1
@fryday 那不会是纯粹的C#,它将会是C# + 数据库 :-) - MaYaN
@MaYaN,OP说:“是否可以使用C#库或更新数据库实现?” - fryday
3个回答

5
我创建了一个 Github 项目,可以根据 GPS 点(纬度; 经度)获取国家或美国州份信息。请参见此处
如果找到,将返回一个 LocationInfo 类,其中包含 ID 和名称。
此外,还可以作为nuget 包使用。

喜欢它!!干得好! - SunnySonic

3
你可以使用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);

1
如果我理解正确,数据库是关于城市及其坐标和所在国家的数据。我只需要计算距离我的点(纬度、经度)最近的城市,并检查该国家?根据 Fryday 的说法,这不是最佳解决方案。 - k4st0r42
@k4st0r42 对的。我已经更新了我的回复,并提供了一个查询示例来获取最接近的经纬度坐标条目。 - sborfedor
1
它不会正常工作。如果经度为179,最近的城市将在经度-179上,怎么办? - fryday
大多数情况下是的。例如,https://www.google.ru/maps/@68.750916,179.5761591,9z - fryday
你认为这个公式更好吗?https://dev59.com/QHI95IYBdhLWcg3wvwoQ#33166084 - k4st0r42
显示剩余2条评论

1
你可以做到。如果不需要太高的精度,可以使用带有国家坐标的表格,并确定最近的国家坐标。但这是不好的方法。
好的解决方案是获取一个国界KML文件。但您需要一个好的算法来确定您的点在哪个国家的边界上。关于查找点和多边形位置的算法描述在这里。此外,还有一些stackoverflow上的答案1, 2,但这只适用于平面。
另一个可能的方法是预先计算具有某些小步骤(例如30'')的坐标的国家,并通过找到离您的点最近的预计算点来确定国家。您可以使用许多在线服务预先计算国家。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接