标签: sqlgeometry

SQL Server 2012版本的Microsoft.SqlServer.Types几何UDT是否与SQL Server 2008向后兼容?

如果我在本地安装了SQL Server 2008和SQL Server 2012,我只想亲自尝试一下; 但是我只安装了新版本,并希望保持这种方式.

  • SQL Server 2008附带一个程序集Microsoft.SqlServer.Types.dll,主要版本10.
  • SQL Server 2012附带了一个程序集Microsoft.SqlServer.Types.dll,主要版本为11.

除其他外,两个程序集都暴露了一种SqlGeometryBuilder类型.两个程序集版本之间的一个显着区别是2012类型有一个额外的重载方法AddCircularArc,而2008类型没有.

因为并行引用这两个程序集并不是一件容易的事(也许是一个坏主意),我想知道我是否可以使用2012版本 - 即使是针对SQL Server 2008实例,只要我不使用它AddCircularArc.

任何人都可以分享他们的经验吗?

spatial backwards-compatibility sql-server-2008 sql-server-2012 sqlgeometry

11
推荐指数
2
解决办法
8696
查看次数

Microsoft.SqlServer.Types 与 .NET Standard 不兼容

我正在尝试将我们所有的 C# 类库从 .NET Framework 转换为 .NET Standard 项目,因为我们开始利用 .NET Core,因此需要这些可以被 .NET Core 和 .NET Framework 应用程序使用(使用后者将在未来几个月内移植到 Core。)

我在转换数据访问层代码时遇到问题,因为我们广泛利用 Microsoft.SqlServer.Types,而官方 NuGet 包不支持 .NET Standard。我尝试了dotmorten非官方 NuGet 包,但它缺少很多功能。下面是我们需要的所有缺失的列表(放在一起以获得代码构建......)

public static class SqlMockExtensions
{
    public static SqlBytes STAsBinary(this SqlGeography geography) => throw new NotImplementedException();

    public static SqlGeography MakeValid(this SqlGeography geography) => throw new NotImplementedException();

    public static int STDimension(this SqlGeography geography) => throw new NotImplementedException();

    public static bool STIsValid(this SqlGeography geography) => throw new NotImplementedException();

    public static Nullable<double> …
Run Code Online (Sandbox Code Playgroud)

c# sql-server sqlgeography sqlgeometry .net-standard

9
推荐指数
1
解决办法
3333
查看次数

带有WellKnownText空间数据列的SqlBulkCopy DataTable

我正在尝试批量复制DataTable包含以下列的内容:

  • "ID" - System.Int32
  • "Geom" - System.String

使用以下列进入SQL数据库:

  • "ID" - int
  • "形状" - geometry

谁能建议最好的方法来做到这一点?

一些测试代码,如果它有帮助......

DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(Int32));
dataTable.Columns.Add("Geom", typeof(String));

dataTable.Rows.Add(1, "POINT('20,20')");
dataTable.Rows.Add(1, "POINT('40,25')");
dataTable.Rows.Add(1, "POINT('60,30')");

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection);
sqlBulkCopy.DestinationTableName = "MySpatialDataTable";
sqlBulkCopy.WriteToServer(dataTable);
Run Code Online (Sandbox Code Playgroud)

我的原始帖子未能解释执行上述操作会导致抛出以下异常.

InvalidOperationException:数据源中String类型的给定值无法转换为指定目标列的类型udt.

我假设从这里SqlBulkCopy不知道geometry列类型,因此不知道如何从a转换为它string.谁能证实这一点?

.net c# sql-server sqlbulkcopy sqlgeometry

8
推荐指数
1
解决办法
4978
查看次数

在SqlGeometry和DbGeometry之间转换

有没有一种简单的方法在SqlGeometry和DbGeometry之间进行转换?我正在使用一个流行的sql空间助手库,并且那里的所有函数都需要SqlGeometry.但是当我对ESRI ArcSDE要素类使用Entity Framework时,Shape字段将作为DbGeometry返回.我不能使用该DbGeometry类型调用我想要的任何方法(例如LocateAlongGeom).也许有一种方法可以将它序列化为二进制或文本,然后将其作为SqlGeometry读回来?

c# geospatial sqlgeometry

8
推荐指数
1
解决办法
3655
查看次数

带有 .Net Core 2.1 的 SQL Server Geography 数据类型

我知道 .Net EF Core 目前不支持 SQL Server 地理和几何数据类型,但我仍然希望在标准 .Net Core 2.1 中使用它们。Microsoft.SqlServer.Types 包似乎在 Core 中不起作用,至少不能作为通过 NuGet 的默认安装。

是否直接或作为解决方法支持 Core 中的地理?到目前为止,找到的参考是 Core 2 之前的版本。

c# sqlgeography sqlgeometry .net-core asp.net-core

6
推荐指数
0
解决办法
992
查看次数

Postgres / Postgis-确保所有多边形均已关闭

我需要编写一个查询,该查询查找所有未闭合的多边形,并通过复制第一个点并创建另一个终点来关闭它们。

我可以选择无效的行:

SELECT delivery_zone_id, polygon from delivery_zone WHERE ST_IsClosed(polygon::geometry) = FALSE;
Run Code Online (Sandbox Code Playgroud)

而且我能够转储来自每个多边形的各个点:

SELECT delivery_zone_id, ST_AsText((dp).geom) FROM
    (SELECT delivery_zone_id, ST_DumpPoints(polygon::geometry) AS dp 
        FROM delivery_zone 
        WHERE ST_IsClosed(polygon::geometry) = FALSE
    ) AS coords;
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样:

1   POINT(-96.80037 33.09812)  ## Copy this point and add it to the set
1   POINT(-96.80427 33.0956)
1   POINT(-96.80401 33.09219)
1   POINT(-96.79603 33.09222)
1   POINT(-96.79346 33.09647)
1   POINT(-96.80037 33.09857)

4   POINT(-96.80037 33.099)    ## Copy this point and add it to the set
4   POINT(-96.80427 33.0956)
4   POINT(-96.80401 33.09219)
4   POINT(-96.79603 …
Run Code Online (Sandbox Code Playgroud)

postgresql postgis sqlgeography sqlgeometry

5
推荐指数
1
解决办法
325
查看次数

按值分组并根据T-SQL中每个组的点(纬度和经度)创建地理折线

这里也提出了类似的问题:

从T-SQL中的点创建地理折线

进一步提出这个问题,我有一个如下所示的表模式:

CREATE TABLE [dbo].[LongAndLats](
[Longitude] [float] NULL,
[Latitude] [float] NULL,
[SortOrder] [bigint] NULL,
[SensorID] [bigint] NULL,
)
Run Code Online (Sandbox Code Playgroud)

示例数据如下所示:

在此输入图像描述

如何使用TSQL 将这些点转换为每个SensorID的地理折线(以便我为每个SensorID设置SensorID/Polyline记录)?

我尝试过使用db_cursor,但我为每个组获得了一个单独的结果集(我认为这些地理位置可能是相同的).这段代码:

DECLARE @SensorID VARCHAR(2000)
DECLARE @LineFromPoints geography
DECLARE @BuildString NVARCHAR(MAX)

DECLARE db_cursor CURSOR FOR  
SELECT Distinct([SensorId]) 
FROM [dbo].[LongAndLats]

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO LongAndLats 

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SELECT @BuildString = COALESCE(@BuildString + ',', '') + CAST([Longitude] AS NVARCHAR(50)) + ' ' + CAST([Latitude] AS NVARCHAR(50))
       FROM [LongAndLats]
       WHERE SensorID = @SensorID
       ORDER …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server geospatial sqlgeography sqlgeometry

3
推荐指数
1
解决办法
546
查看次数

为什么 STContains 会返回 null?

当使用的值不为 null 时,为什么 SQLGeometry.STContains 会返回 null?

sql-server sqlgeometry

2
推荐指数
1
解决办法
499
查看次数