如果我在本地安装了SQL Server 2008和SQL Server 2012,我只想亲自尝试一下; 但是我只安装了新版本,并希望保持这种方式.
Microsoft.SqlServer.Types.dll,主要版本10.Microsoft.SqlServer.Types.dll,主要版本为11.除其他外,两个程序集都暴露了一种SqlGeometryBuilder类型.两个程序集版本之间的一个显着区别是2012类型有一个额外的重载方法AddCircularArc,而2008类型没有.
因为并行引用这两个程序集并不是一件容易的事(也许是一个坏主意),我想知道我是否可以使用2012版本 - 即使是针对SQL Server 2008实例,只要我不使用它AddCircularArc.
任何人都可以分享他们的经验吗?
spatial backwards-compatibility sql-server-2008 sql-server-2012 sqlgeometry
我正在尝试将我们所有的 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) 我正在尝试批量复制DataTable包含以下列的内容:
System.Int32System.String使用以下列进入SQL数据库:
intgeometry谁能建议最好的方法来做到这一点?
一些测试代码,如果它有帮助......
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.谁能证实这一点?
有没有一种简单的方法在SqlGeometry和DbGeometry之间进行转换?我正在使用一个流行的sql空间助手库,并且那里的所有函数都需要SqlGeometry.但是当我对ESRI ArcSDE要素类使用Entity Framework时,Shape字段将作为DbGeometry返回.我不能使用该DbGeometry类型调用我想要的任何方法(例如LocateAlongGeom).也许有一种方法可以将它序列化为二进制或文本,然后将其作为SqlGeometry读回来?
我知道 .Net EF Core 目前不支持 SQL Server 地理和几何数据类型,但我仍然希望在标准 .Net Core 2.1 中使用它们。Microsoft.SqlServer.Types 包似乎在 Core 中不起作用,至少不能作为通过 NuGet 的默认安装。
是否直接或作为解决方法支持 Core 中的地理?到目前为止,找到的参考是 Core 2 之前的版本。
我需要编写一个查询,该查询查找所有未闭合的多边形,并通过复制第一个点并创建另一个终点来关闭它们。
我可以选择无效的行:
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) 这里也提出了类似的问题:
进一步提出这个问题,我有一个如下所示的表模式:
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) 当使用的值不为 null 时,为什么 SQLGeometry.STContains 会返回 null?
sqlgeometry ×8
c# ×4
sql-server ×4
sqlgeography ×4
geospatial ×2
.net ×1
.net-core ×1
asp.net-core ×1
postgis ×1
postgresql ×1
spatial ×1
sqlbulkcopy ×1
t-sql ×1