Esiste un modo semplice per convertire tra SqlGeometry e DbGeometry? Sto usando una libreria di helper spaziale sql e tutte le funzioni in là prevedono SqlGeometry. Ma quando uso Entity Framework contro una feature class ESRI ArcSDE il campo Shape viene restituito come DbGeometry. Non riesco a chiamare nessuno dei metodi che desidero (come LocateAlongGeom) con quel tipo DbGeometry. Forse c'è un modo per serializzarlo come binario o testo e poi leggerlo come SqlGeometry?Conversione tra SqlGeometry e DbGeometry
6
A
risposta
9
//Convert from SqlGeometry to DbGeometry
SqlGeometry sqlGeo = ...
DbGeometry dbGeo = DbGeometry.FromBinary(sqlGeo.STAsBinary().Buffer);
//Convert from DBGeometry to SqlGeometry
SqlGeometry sqlGeo2 = SqlGeometry.STGeomFromWKB(new SqlBytes(dbGeo.AsBinary()), 0);
1
Un modo semplice per gestire più tipi spaziali è via metodi di estensione, in questo modo: (utilizzando versioni leggermente modificate dei campioni di codice da @BizarroDavid)
public static class GeometryExtensions
{
public static DbGeometry ToDbGeometry(this SqlGeometry sqlGeometry)
{
return DbGeometry.FromBinary(sqlGeometry.STAsBinary().Buffer);
}
public static SqlGeometry ToSqlGeometry(this DbGeometry dbGeometry)
{
return SqlGeometry.STGeomFromWKB(new SqlBytes(dbGeometry.AsBinary()), dbGeometry.CoordinateSystemId);
}
}
Una volta li implementato, è li possono utilizzare in questo modo ...
DbGeometry anyDbGeometry;
SqlGeometry anySqlGeometry;
//Convert to DbGeometry
anyDbGeometry = anySqlGeometry.ToDbGeometry();
//Convert to SqlGeometry
anySqlGeometry = anyDbGeometry.ToSqlGeometry();
Problemi correlati
- 1. DbGeometry makevalid?
- 2. Conversione tra LocalDate e XMLGregorianCalendar
- 3. Conversione tra LocalDate e sql.Date
- 4. Conversione tra spazi colore RGB e RYB
- 5. Conversione tra classe scala e Dinamica
- 6. conversione manuale tra caratteri ASCII e .NET
- 7. Conversione tra SQL char e C#
- 8. Conversione tra cv :: Mat e arma :: mat
- 9. Conversione tra Latin1-encoded Data.ByteString e Data.Text
- 10. Conversione tra std :: tuple e boost :: tuple
- 11. Disabilita conversione implicita tra typedef
- 12. Problema di serializzazione DbGeometry in Asp.net web api
- 13. Conversione tra int [ish] e double [ish] in asm.js
- 14. Conversione tra dimensione carattere WPF e dimensione carattere "standard"
- 15. C#: nessuna conversione implicita tra "espressione lambda" e "espressione lambda"?
- 16. Conversione tra testo e varchar (MAX) in SQL Server
- 17. Conversione tra EnumSet e array di valori booleani
- 18. Conversione SSIS tra errore Unicode e non Unicode
- 19. Conversione del puntatore-puntatore tra classi derivate e di base?
- 20. Conversione di JSON tra stringa e byte [] con GSON
- 21. Conversione tra C++ std :: vector e array C senza copiare
- 22. Perché la conversione tra stringa e float è errata?
- 23. Conversione tra fusi orari in C
- 24. Conversione implicita tra tipi di collezione Scala
- 25. Conversione tra tipi numerici dello stesso tipo
- 26. Conversione tra i tipi in Haskell
- 27. Scala e conversione animazione
- 28. Quali sono le differenze tra CV_8U e CV_32F e cosa dovrei preoccuparmi quando si effettua la conversione tra di loro?
- 29. La differenza e la conversione tra Seq [Int] e List [Int] in scala?
- 30. Esiste un'implementazione per SqlGeometryBuilder?
non dovrebbe il DbGeometry' a '' conversione SqlGeometry' essere ... 'SqlGeometry sqlGeo2 = SqlGeometry.STGeomFromWKB (nuove SqlBytes (dbGeo.AsBinary()), dbGeo. CoordinateSystemId); ' Per tenere conto delle geometrie che non sono in SRID-0? – Xharlie
Sì, suppongo che tu voglia passare il SRID nella maggior parte dei casi. Per la maggior parte delle coordinate GPS si usa '4326' per WGS84. http://spatialreference.org/ref/epsg/4326/ – jocull
Credo che si possa anche rilevarlo dinamicamente usando 'dbGeo.CoordinateSystemId' al posto dello zero sopra. – jocull