【发布时间】:2019-09-05 06:20:51
【问题描述】:
我正在使用 Entity Framework Core 2.2.3 和 MySql、ASP.NET Core 2.2 WebApi
是的,我知道这个问题(地理编码和反向地理编码)已被问过数百次,但它们已经过时了。在 2019 年,我想找出计算地理位置的最新和最佳方法。
在我的项目中,我在属性表中有地址,我需要
- 将地址转换为 lat 和 lng
- 计算两个地址之间的距离
- 最好不要依赖第 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