【问题标题】:ASP.NET Core WebAPI Latest And Best approach in 2019 to do geocoding and Reverse geocodingASP.NET Core WebAPI 2019 年进行地理编码和反向地理编码的最新和最佳方法
【发布时间】:2019-09-05 06:20:51
【问题描述】:

我正在使用 Entity Framework Core 2.2.3 和 MySql、ASP.NET Core 2.2 WebApi

是的,我知道这个问题(地理编码和反向地理编码)已被问过数百次,但它们已经过时了。在 2019 年,我想找出计算地理位置的最新和最佳方法。

在我的项目中,我在属性表中有地址,我需要

  1. 将地址转换为 lat 和 lng
  2. 计算两个地址之间的距离
  3. 最好不要依赖第 3 方 Lib,例如谷歌地图 API

我知道我们可以使用 EF Core 进行地理编码并可能计算距离,但我发现 document 说它仅适用于 SqlServer、InMemory、PostgreSql 等。MySql 不在列表中。

然后我找到了System.Spatial,但它针对的是旧的 .Net 框架。 然后Microsoft.Spatial(它针对.NET Platform Standard 1.1,所以我想.Net Core 2.2 应该没问题,对吗?),但是当我打开git sample 时,它大约有2 年了。

如果有人能指出正确的方向,我真的很感激。

谢谢。

更新

看完OData Spatial Data,发现它与MS SQL紧密绑定,有一定的局限性(https://devblogs.microsoft.com/odata/using-geospatial-data/)?但是我正在使用 MySql,似乎这不是我可以使用的方法。另外这篇文章是 2011 年写的,看不到最近的更新。

更新 2 我找到了一个NuGet Package
只是想知道这是否可以在 .Net Core 2.2 中使用?

在它的 github 上它说是 .NET Core,但是当我尝试从 NuGet 包管理器安装它时,我看到它依赖于 .NetFramework v4.5。

.NetFramework 不是跨平台的,这是否意味着这个 NuGet 包不能在 Linux 上正常运行?

【问题讨论】:

  • 您打算如何在没有 3rd 方库的情况下将地址转换为经纬度?您需要一个带有地址和纬度/经度的图书馆或数据库。
  • 嗨@jdweng,如果您选择了我在问题中提供的Microsoft.Spatial 链接,您可能会找到答案。
  • 我不会通过源代码来查找地址的来源。我要求您提供答案,因为您不想使用 Google Map API。包含“BOTH”地址和纬度/经度的地址来自的连接字符串是什么?
  • 地址,比如说 2,来自数据库,然后我需要找出如何将它们地理编码成 2 对 lat 和 lng。然后想办法计算距离。 Microsoft.Spatial 提供了这个功能,但不确定它是否是最新最好的方法,所以我在这里问这个问题。
  • 首先确定你是否真的有一个包含地址和纬度/经度的数据库。 Google API 是一个非常大的数据库,其中包含地址和纬度/经度。 Microsoft Spatial 并非凭空获取数据库。拥有数据库后,您需要创建一个查询,该查询从地址返回纬度/经度。在计算距离之前,您首先需要一个纬度/经度。距离是最容易的部分。困难的部分是获得纬度/经度。

标签: c# asp.net asp.net-core geospatial geocoding


【解决方案1】:

空间数据类型仅用于计算纬度/经度对之间的距离,以及计算某个纬度/经度是否位于另一个纬度/经度的某个半径内。

地址(街道名称、门牌号、城市名称、邮政编码及其任意组合)每天都会随着新街道和新建筑物的建造而更新。

因此,您需要一个经常更新的数据库,将地址映射到纬度/经度。如果您不想使用第三方 API such as Google offers,则必须下载并合并一个包含此数据的数据库。

其中一个实例是OpenStreetMap,您可以在其中下载数据并托管搜索 API nomatim。在您阅读操作指南时,您会决定确实想将其卸载给第三方。

【讨论】:

  • 有道理。我居然找到了这个:github.com/vivet/GoogleApi 只是想知道这是否可以在.Net Core 2.2 中使用?在它的 github 上它说是 .NET Core,但是当我尝试从 NuGet 包管理器安装它时,我看到它依赖于 .NetFramework v4.5。由于 .NetFramework 不是跨平台的,这是否意味着这个 NuGet 包无法在 Linux 上正常运行?
【解决方案2】:

最后,我使用 Google Api 进行地理编码,使用 RestSharp 进行 api 调用。

Google Api 确实有 NuGet 包,但它不包含所讨论的地理编码 API here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2021-01-26
    • 1970-01-01
    • 2013-08-17
    • 2018-09-04
    相关资源
    最近更新 更多