C# 使用DbGeography进行地理定位

C# 使用DbGeography进行地理定位,c#,asp.net-mvc,geospatial,C#,Asp.net Mvc,Geospatial,我有一个场景需要计算到地址之间的距离。我在System.Data.Entity名称空间中看到了许多使用DbGeography的示例,但是我的应用程序无法加载SqlServerSpatial110.dll库,因此我似乎遇到了麻烦 我已经读过几篇关于这个具体问题的文章,但没有一篇对我有效,因此我希望能从其他角度来看待我的具体情况 环境 我已经从NuGet添加了Microsoft.SqlServer.Types库 我已经从我的文件夹中添加了SqlServerSpatial110.dll`文件:Win

我有一个场景需要计算到地址之间的距离。我在
System.Data.Entity
名称空间中看到了许多使用
DbGeography
的示例,但是我的应用程序无法加载
SqlServerSpatial110.dll
库,因此我似乎遇到了麻烦

我已经读过几篇关于这个具体问题的文章,但没有一篇对我有效,因此我希望能从其他角度来看待我的具体情况

环境

  • 我已经从NuGet添加了
    Microsoft.SqlServer.Types
  • 我已经从我的文件夹中添加了
    SqlServerSpatial110.dll`文件:
    Windows/System32`
我试着这样计算距离:

var loc1 = DbGeography.FromText(string.Format(CultureInfo.InvariantCulture.NumberFormat, "POINT({0} {1})", someLatitude, someLongitude));
var loc2 = DbGeography.FromText(string.Format(CultureInfo.InvariantCulture.NumberFormat, "POINT({0} {1})", someLatitude, someLongitude));

var distance = loc1.Distance(loc2);
问题
每当我尝试运行我的应用程序,并且运行此代码时,我都会遇到一个异常:

无法加载DLL SqlServerSpatial.DLL:找不到指定的模块

我见过这种错误发生在其他人身上,但我还没有找到可能的解决办法

我假设抛出异常是因为它无法加载库(正如它所说的),但我不明白它为什么不能加载库。如前所述,我从我的
Windows/System32
文件夹中获取了
SqlServerSpatial110.dll
,因为很多人认为这是为了找到正确的dll

如有任何建议或可能的修正,我们将不胜感激


到目前为止,我已经能够使用
System.Device
名称空间来解决这个问题。它的工作原理有点不同,我很确定它不是在数据库中驱动的,而是在我的应用程序中驱动的。我宁愿在数据库中执行此操作,因为输入的条目越多,性能可能会严重降低。

与您当前的问题无关,但请注意,您传递lat/long的方式是错误的
POINT()
是构建可能的重复项所需的文本,请确保取消选中Visual Studio项目属性中的“首选32位”默认选项。显然,DLL只能在64位中工作。您可能还需要64位的IIS Express。