问题标签 [sqlgeography]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
9035 浏览

c# - 将 SQLGeography 多边形重新格式化为 JSON

我正在构建一个以 JSON 格式提供地理边界数据的 Web 服务。

地理数据使用表中的地理类型存储在 SQL Server 2008 R2 数据库中。我使用[ColumnName].ToString()方法将多边形数据作为文本返回。

示例输出:

地理定义可以采用定义多边形的纬度/经度对数组的形式,或者在多个定义的情况下,可以采用数组或多边形(多多边形)的形式。

我有以下正则表达式,可根据输出将输出转换为包含在多维数组中的 JSON 对象。

这实际上工作得很好,并将 DB 输出动态转换为 JSON 以响应操作调用。

但是,我不是正则表达式大师,而且对String.Replace()我的调用也似乎效率低下。

有没有人对此性能有任何建议/意见?

0 投票
1 回答
523 浏览

silverlight - 将 XAML 转换为 ShapeFile 或 SqlGeometry 格式

我有一些基于 XAML 的图表,其中包含嵌入在 Canvas 对象中的路径,例如

有没有将 XAML 转换为 ShapeFile 或 SqlGeometry 数据的方法/工具?我需要转换,因为我想在仅绑定到 ShapeFiles 或 SqlGeometry 数据的第三方地图控件中显示图形。

任何帮助,将不胜感激。

0 投票
1 回答
299 浏览

sql - 高效的 SQL 地理通配符名称搜索 20mill+ 记录

我们有一个 SQL 2008 数据库,其中包含 2000 万多个 geoWe 位置(并且还在增长),每个位置都包含标准的名称/地址/地理/ID/等列。

我们需要一种基于距离有效搜索记录的方法,还需要通过全文索引“包含”关键字。基本思想是我们根据最大距离搜索我们附近的位置。

现在,当我们在 1 英里内搜索完整的字符串(例如星巴克)时,搜索会在几秒钟内返回。但是,如果我们在 1 英里内搜索“星”,搜索有时可能需要几分钟才能返回。

我们一直在玩这样的逻辑:

然而,这在搜索中引入了欺骗和其他问题。我们也一直在尝试使用我们在网上找到的 POWER 论坛。

我们还有其他查询效果很好,它们仅基于距离或某个类别 ID,它们会在一秒钟内返回。最大的问题是通配符字符串匹配。

在处理超过 2000 万条记录时,有没有人有一个很棒的 SQL 或 CLR proc 可以接受名称(通配符支持)和距离?

现在我们很困:(

在此先感谢,杰夫

0 投票
1 回答
3302 浏览

sql - 如何将地理批量插入新的 sql server 2008 表

我有一个非常大的形状文件,其中包含数十万行多边形和其他相关数据,例如格式化地址和 APN 编号。如何在不使用 Shape2SQL 之类的东西的情况下将这些数据放入带有地理的表中?我不能很好地为每一行运行插入语句,这将永远花费,最佳解决方案是创建一个 csv 或格式正确的 bin 文件,然后进行批量插入,或bcp,或 openrowset,但尝试,尝试,尽我所能,我无法让 csv 文件或 bin 文件工作。有人可以帮忙吗?

以下代码是我能做到的最好的。

但这只能让我单独导入多边形——我还需要其他所有东西。

0 投票
2 回答
182 浏览

sql - 具有 CTE 和地理数据类型的额外子句

我正在使用 SQL Server 中的 Geography 数据类型创建一个查询,以根据距离人们使用邮政编码进行匹配。我在那里有 99%,但我有两个问题。目前,此搜索按 zip、城市和州进行,但我还需要在 [u.username] 上进行匹配。我无法获得添加“OR Username LIKE @Name”的语法。其次,性能不是很好。有来自美国各地的 21 个测试用户,查询需要 4 秒。

有没有办法加快速度并添加额外的搜索参数。到目前为止我有这个:

0 投票
2 回答
5349 浏览

sql-server-2008 - 使用 SqlGeographyBuilder 时“指定的输入不代表有效的地理实例”异常

我编写了一个小型应用程序,它从一系列 KML 文件中读取数据,然后Microsoft.SqlServer.Types.SqlGeography使用以下代码将它们转换为类型:

基本上,此代码从 KML 文件中检索纬度/经度列表,然后遍历它们以创建多边形。

但是,我正在导入的一些 KML 文件失败,但出现以下异常:

捕获 System.ArgumentException 消息 = 24200:指定的输入不代表有效的地理实例。

这发生在以下行:return geographyBuilder.ConstructedGeography;

我发现了一些对这个异常的引用,但是在我发现他们在 SQL Server 中遇到并处理这个异常的情况下,而不是在 C# 中。

0 投票
0 回答
283 浏览

sql-server-2008 - LINESTRING 的返回百分比(SQL Server 2008 地理)

我想在 SQL 2008 R2 中创建一个函数,给定 3 个参数 ( @path geography, @start_pct float, @end_pct float),它将根据长度的百分比返回一个线串@path

例如
when @start_pct = 0and @end_pct = 0.5,它将返回 的前半部分@path,当@start_pct = 0.5and时@end_pct = 1,它将返回 的后半部分@path,当@start_pct = 0.25and时@end_pct = 0.75,它将返回 50% 的中间部分@path,但是 - @start_pctand@end_pct可以是任何东西(介于 0 和 1 之间)

STPointN我尝试过:我使用并计算我的兴趣点是否位于该部分内,遍历每组点。在我看来,逻辑似乎是合理的,但它没有返回预期的结果(我知道结果)

我有以下症结:

  1. 计算位于 2 点之间的点@path
  2. 我将生成的线串存储为字符串 (nvarchar(max)),但我认为它可能会用完空间(我使用的一些路径有很多点)。我想STLineFromText在最后使用将其转换回地理。

在我发布我令人尴尬的业余代码之前,我有一种感觉,这应该有点容易,也许我把它复杂化了。

有没有人这样做过,他们可以伸出援助之手吗?

编辑: 实际上 - 刚刚解决了它,但似乎仍然比它应该的复杂得多。回到办公室后将发布代码。

0 投票
1 回答
1249 浏览

nhibernate - NHibernate 将地理类型传递给命名查询 SetParameter()

我正在将 NHibernate 3 引入 ASP.NET MVC Web 应用程序的数据访问层。

在 SQL Server 2008 R2 数据库中,geography数据类型用于将纬度/经度坐标存储在映射到应用程序内实体的表中(称为 this EntityA)。

我已经设置了流畅的映射以成功地将数据类型映射到EntityAtype的属性GisSharpBlog.NetTopologySuite.Geometries.Point,并使用自定义映射约定将其映射到派生的MsSql2008GeographyType.

以上所有内容似乎都可以正常工作,但仍有一些存储过程仍在使用,它们期望一个参数为geography. 我已将存储过程映射为命名查询,但我似乎无法弄清楚我应该为 type 的参数传递什么类型geography。查询调用发生的方法采用double纬度和double经度。在旧的 sproc 调用中,映射是通过

运行 SQL Profiler,执行以下命令

当我尝试使用以下映射时

我得到一个 SqlExceptionError converting data type varbinary to geography

[SqlException (0x80131904): 将数据类型 varbinary 转换为地理时出错。将数据类型 varbinary 转换为地理时出错。]
System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection)+2073502
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,Boolean breakConnection)+5064460
System.Data.SqlClient .TdsParser.ThrowExceptionAndWarning() +234
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2275
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33
System. Data.SqlClient.SqlDataReader.get_MetaData() +86
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +311
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +987
System.Data.SqlClient .SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
System.Data。 SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)+141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为) +12
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() +12 NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) +356 NHibernate.Driver .BatcherDataReaderWrapper..ctor(IBatcher batcher, IDbCommand command) +183
NHibernate.Driver.BasicResultSetsCommand.GetReader(Nullable`1 commandTimeout) +432 NHibernate.Impl.MultiQueryImpl.DoList() +683

运行 SQL Profiler,执行以下命令

可以看出,根据传递给SetParameter()命令和传入命令所确定的值是不同的。

是否可以将类型传递给命名查询以执行我想要的操作?

0 投票
2 回答
2249 浏览

mysql - 计算纬度/经度点之间的短距离

我有一个带有空间点的 MySQL 表,需要计算距离。我发现了很多关于使用 Haversine 公式执行此操作的材料,但是所有这些都假设点之间的距离很大。就我而言,我只关心短距离(< 1 英里),所以我不需要校正地球的曲率。我的直觉是使用 Haversine 公式在这么小的距离上会不准确。有什么建议么?

0 投票
1 回答
289 浏览

c# - 使用 STUnion 构建多边形时,是在代码上执行还是让数据库处理更快?

我只是想知道哪个更快:

  1. 使用 SQLGeography 的 STUnion 方法构造一个 wkt 多边形。
  2. 使用 MS SQL Server 中内置的 STUnion 方法构造 wkt 多边形。

我只是问,因为我想确定。我假设如果我选择 2,查询和不断更新数据库会增加处理/创建数据所需的时间。这将通过一个连接进行,因此每次需要添加某些内容时都不需要重新连接。