【问题标题】:C# - Get Country from latitude/longitude without APIC# - 无需 API 从纬度/经度获取国家/地区
【发布时间】:2016-04-26 01:31:49
【问题描述】:

是否可以使用 C# 库或有关地理坐标国家的更新数据库从纬度和经度中获取国家/地区名称无需 API(如 Google 地图的 JavaScript API)?

【问题讨论】:

  • 您需要多少精度?
  • 纯C#?你不能。how to get country name from latitude and longitude的可能重复
  • @MaYaN,可以通过良好的数据库和智能算法实现。
  • @k4st0r42 是的,这是可能的,但您必须先开始实施它,然后当您遇到困难时我们可以帮助您。
  • @fryday 那不是纯 C#,而是 C# + 数据库:-)

标签: c# geolocation geonames


【解决方案1】:

您可以使用GeoNames 并下载本地数据库here

因此,这是一个示例查询,您可以使用它从纬度/经度坐标中获取最近的条目。

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

【讨论】:

  • 如果我理解得很好,数据库是关于城市的数据及其坐标和国家。我只需要从我的点(纬度,经度)计算最近的城市并检查国家吗?根据fryday的说法,这不是最好的解决方案。
  • @k4st0r42,例如,这种方法在 ocens 中会很糟糕。最好使用带国家边界的方法。
  • @k4st0r42 对。我已经使用示例查询更新了我的响应,以从纬度/经度坐标获取最近的条目。
  • 它无法正常工作。经度 179 的点和最近的城市将在 -179 经度上呢?
  • @fryday 这是一个近似值。在大多数情况下效果很好。
【解决方案2】:

你可以做到。如果您不需要很高的准确性,则可以使用带有国家坐标的表格。并确定最近的国家坐标。但这是不好的方式。

好的解决方案是您获得国家边界的 KML 文件。但是你需要好的算法来确定你的点在哪个国家的边界​​。用于查找点和多边形位置的算法在here 中进行了描述。在stackoverflow上也有一些答案12,但它是针对飞机的。

也可能的方法是通过一些小步骤(例如 30'')预先计算国家的坐标,并通过找到离您最近的预先计算点来确定国家。您可以通过大量在线服务预先计算国家/地区。

【讨论】:

    【解决方案3】:

    我创建了一个 github 项目,它将根据 gps 点 (lat ; lon) 获取国家或美国状态 见here

    如果找到,将返回一个带有 Id 和 Name 的 locationInfo 类

    也可作为nuget package使用

    【讨论】:

    • 爱它!干得好!
    猜你喜欢
    • 2017-02-22
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多