Создание sqlGeography LINESTRING с использованием.NET
Я создаю приложение, которое анализирует различные форматы файлов внешних карт (например, ShapeFiles, MapPoint, KML и т. Д.) И сохраняет фигуры в централизованной базе данных, которая будет использоваться для центральной базы карт / отчетности. У меня есть подпрограмма, в которой теперь есть строка, представленная абстрактным массивом точек, и я пытаюсь превратить ее в объект sqlGeography, который будет храниться в моей базе данных (на данный момент SQL2012 Express).
Вот пример моего оператора LINESTRING (хранится в строке strGeo):
LINESTRING(41.942587758675 -85.636084221926,41.9425261573997 -85.6360833224383,41.9423450573927 -85.6360807217602,41.9423035553449 -85.6360801225198,41.9421639573891 -85.6360781210972,41.9421098574371 -85.6360773225739,41.9420307561342 -85.6360762213003)
Затем я выполняю эту операцию над этой строкой (VB.NET).
Dim strSql As New SqlChars(New SqlString(strGeo))
Dim geo As SqlGeography = SqlGeography.STLineFromText(strSql, 4326)
Я добавил соответствующие ссылки на Microsoft.SqlServer.Types из пакета компонентов SQL Server 2012, но когда мой отладчик попадает в строку SqlGeography, я получаю следующее:
System.DllNotFoundException: Unable to load DLL 'SqlServerSpatial110.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticIsValid(GeoMarshalData g, Double eccentricity, Boolean forceKatmai, Boolean& result, Boolean& isSmallerThanAHemisphere)
at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticIsValid(GeoData& g, Double eccentricity, Boolean forceKatmai)
at Microsoft.SqlServer.Types.SqlGeography.IsValidExpensive(Boolean forceKatmai)
at Microsoft.SqlServer.Types.SqlGeography..ctor(GeoData g, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.STLineFromText(SqlChars lineStringTaggedText, Int32 srid)
at ShpFileProcessor.Module1.ProcessFile(FileInfo fil) in C:\Users\Chet Cromer\documents\visual studio 2010\Projects\NorthernLights\ShpFileProcessor\ShpFileProcessor\Module1.vb:line 180
Я не могу найти SqlServerSpatial110.dll в любом месте на моем компьютере. У меня установлен SQL Express 2012 и я могу найти SqlerverSpatial.dll как в SYSTEM32, так и в SYSWOW64, но VS не позволит мне зарегистрировать ни один из этих файлов.
Я заметил, что если я использую ДВЕ круглые скобки в моей LINESTRING, как это, я получаю другую ошибку:
LINESTRING((41.942587758675 -85.636084221926,41.9425261573997 -85.6360833224383,41.9423450573927 -85.6360807217602,41.9423035553449 -85.6360801225198,41.9421639573891 -85.6360781210972,41.9421098574371 -85.6360773225739,41.9420307561342 -85.6360762213003))
System.FormatException: 24141: A number is expected at position 27 of the input. The input has (41.942587758675.
at Microsoft.SqlServer.Types.WellKnownTextReader.RecognizeDouble()
at Microsoft.SqlServer.Types.WellKnownTextReader.ParseLineStringText()
at Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type)
at Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.ParseText(OpenGisType type, SqlChars taggedText, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.STLineFromText(SqlChars lineStringTaggedText, Int32 srid)
at ShpFileProcessor.Module1.ProcessFile(FileInfo fil) in C:\Users\Chet Cromer\documents\visual studio 2010\Projects\NorthernLights\ShpFileProcessor\ShpFileProcessor\Module1.vb:line 180
(Перед тем, как считать символы, позиция 27 - это пробел между первой комбинацией лат / долг)
Я ожидаю, что мой первый формат строки - правильный формат, но на данный момент я не уверен, и я не уверен, что делать с проблемой SqlServerSpatial110.dll.
Кто-нибудь был на этом пути? Я что-то пропустил?
1 ответ
Вторая ошибка, о которой я знаю:
LINESTRING ((+41,942587758675
Две открытые скобки. Единственный раз, когда я получил эту ошибку ("число ожидается"), был случай, когда у меня случайно из копирования / вставки было две открытых скобки.
Что касается ошибки, которую вы получили в библиотеках, SQL Server Spatial DLL - это неуправляемый код. Вы можете найти больше информации здесь, но убедитесь, что у вас есть правильная версия (32/64) в вашем проекте и выберите опцию "копировать на выход direct = всегда".