[ vujkev @ 16.08.2012. 21:48 ] @
Prilikom snimanja poligona (Geography tip podatka) u SQL2008R2 server dobijam sledeću grešku
Citat:

The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 2 (\"@Region\"): The supplied value is not a valid instance of data type geography. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision.

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)\r\n
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)\r\n
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\r\n
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\r\n
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)\r\n
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)\r\n
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)\r\n
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()\r\n


jasno mi je da je probelem u tome što je orijentacija poligona u smeru kazaljke na satu i ukoliko isti poligon napravim u suprotnom smeru podatak se uspešno snimi u bazu. Zanima me kako u .NET-u proveriti da li je orijentacija poligona ispravna ili ne? Kod koji imam i koji od zadatih tačaka pravi SQLGeography objekat ne pravi nikakav problem sa orijentacijom i ne mogu da ustanovim da li je redosled ispravan ili ne. Na netu sam našao nekoliko T-SQL procedura koje navodno rade proveru, ali ja ne mogu da dođem do toga da SQL prihvati neispravan podatak. Primera radi poligon

Code (tsql):

declare @g geography
set @g = geography::STGeomFromText('POLYGON (
(20.406111698286622 44.710324998638526,
20.406068782942384 44.708983037471732,
20.408386211531251 44.70889153898645,
20.408386211531251 44.710477492256935,
20.406111698286622 44.710324998638526))'
, 4326)

je ispravan
dok je poligon
Code (tsql):

declare @g geography
set @g = geography::STGeomFromText('POLYGON (
(20.406111698286622 44.710324998638526,
20.408386211531251 44.710477492256935,
20.408386211531251 44.70889153898645,
20.406068782942384 44.708983037471732,
20.406111698286622 44.710324998638526))'
, 4326)
 

neispravan i SQL server ga ne prihvata
Jedina razlika između poligona je što su druga i četvrta tačka zamenile mesta (okrenuta orijentacija)

Hvala unapred