#sql #sql-server #sql-server-2014 #spatial
#sql #sql-сервер #sql-server-2014 #пространственный
Вопрос:
У меня есть две геометрии, когда я пытаюсь получить STIntersection из этих двух геометрий, sql server возвращает вывод исключения.
Msg 6522, Level 16, State 1, Line 6
A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry":
System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.
System.Runtime.InteropServices.COMException:
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at Microsoft.SqlServer.Types.GLNativeMethods.Combine(CombineMode combineMode, GeoData g1, GeoData g2)
at Microsoft.SqlServer.Types.SqlGeometry.STIntersection(SqlGeometry other).
Я пытаюсь выполнить пересечение на двух полигонах, один из которых имеет 51536 точек из stnump точек, а другой — 3125.
Я попробовал это с помощью этого выбора:
declare @geomHnv geometry = ( select top 1 Shape from dbo.hnv)
declare @geomSaps geometry = ( select top 1 Shape from dbo.Saps)
select @geomSaps.STNumPoints()
select o1.Shape.STIntersection(o2.Shape)
from dbo.hnv o1
cross join dbo.saps o2
Полигон настолько большой, что я не могу скопировать его сюда, поэтому я сделал резервную копию базы данных только с двумя полигонами сверху.
Ссылка: https://drive.google.com/open?id=0B8Vv9ogG99P-YmZSNkFDLUpZb3M
Дамп состоит из двух таблиц, где каждая таблица содержит один столбец геометрии.
Я попробовал это на SQL Server 2014.
Комментарии:
1. «Полигон настолько большой, что я не могу скопировать его сюда» — очевидная вещь, которую нужно сделать, это определить, является ли размер фактором или чем-то еще. Вы можете воспроизвести проблему, используя более простой полигон? (Если вы пробовали это, по крайней мере, стоило бы упомянуть об этом)
2. @Damien_The_Unbeliever — Я попытался запустить пересечение на большом полигоне (51 тыс. точек) и простом полигоне (4 точки), и это не вызвало исключения. Когда я запускаю другие пространственные функции (пересечения, пересечения, касания) с исходными полигонами, они работают так, как должны. Только функция пересечения выдает исключение. я также пробовал разные SRID для полигонов
3. Есть ли шанс, что вы могли бы где-нибудь поместить поток WKB или WKT для этих полигонов? Я застрял на SQL 2012 здесь и хотел бы помочь!