2013-04-17 7 views
2

Я создаю приложение, которое анализирует различные форматы файлов внешних карт (например, ShapeFiles, MapPoint, KML и т. Д.) И сохраняет формы в централизованной базе данных, которые будут использоваться для центрального картографической/отчетной базы. У меня есть процедура, которая теперь имеет строку, представленную абстрактным массивом точек, и я пытаюсь превратить это в объект sqlGeography, который будет храниться в моей базе данных (SQL2012 Express на данный момент).Создание sqlGeography LINESTRING с использованием .NET

Вот пример моего 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.

Кто-нибудь был по этой дороге? Я что-то упускаю?

+0

Я также попытался, чтобы убедиться, что моя линия не слишком сложна, используя строку, как это: LINESTRING (0 0,1 1) И я получаю тот же результат. –

+0

привет, я предпочитаю читать MSDN: http://msdn.microsoft.com/en-us/library/ee642119(v=sql.105).aspx – Ali

ответ

0

Вторая ошибка я знаю о:

LINESTRING ((41,942587758675

Два открывающая скобка Единственный раз, когда я получил эту ошибку («число, как ожидается,» вещь), когда я случайно из копии./Вставка имела две открытые круглые скобки.

Что касается ошибки, которую вы получили в библиотеках, то SQL Server Spatial DLL является неуправляемым кодом. Вы можете найти больше информации здесь, но убедитесь, что у вас есть правильная версия (32/64) на вашем проект и выберите опцию «копировать в вывод прямой = всегда».

http://alastaira.wordpress.com/2011/08/19/spatial-applications-in-windows-azure-redux-including-denali/