Sto cercando di recuperare i dati Polygon
da MySQL nella mia applicazione C#.I driver MySql per .NET non supportano la struttura Polygon, vero?
Ho esattamente definito in una tabella il campo Polygon
in cui sono conservati i dati geografici.
Dimostrazione:
SELECT GeometryType(GeomFromText(AsWKT(object))) as `type` FROM geo.data;
Ritorni:
Così l'oggetto nella tabella è fine e definito correttamente.
C'è un codice sorgente in C#:
e le linee principali sono (73-76):
//var polygon = (byte[])reader["object"];
//var obj = new MySqlGeometry(MySqlDbType.Blob, polygon);
var polygon = reader["object"].ToString();
var obj = MySqlGeometry.Parse(polygon);
Ho commentato, ma questo non è un ostacolo per dirvi su entrambe le operazioni:
- recupero come
BLOB
con il prossimo deserializati su - parsing della stringa recuperata tramite
MySqlGeometry.Parse(System.String)
metodo
BLOB recupero
Beh, inizierò con una parte commentato di codice, immaginiamo, che queste linee sono commentate e non ci sono linee 75 e 76 con analisi delle stringhe.
Inoltre c'è un altro la correzione, la query SQL che sta inviando al server MySQL deve essere simile:
SELECT AsWKB(object) as 'object' FROM geo.data
ho appena cambiato nella query SQL la funzione AsWKT()
al AsWKB()
(da testo a binario formattatore su MySQL).
Quindi, il risultato di questa query sarebbe:
Al linee:
var polygon = (byte[])reader["object"];
var obj = new MySqlGeometry(MySqlDbType.Blob, polygon);
Siete in grado di vedere che sto recupero che BLOB
oggetto poi convertirlo in l'array System.Byte[]
e solo allora sto cercando di creare lo MySqlGeomerty
, ma è un vero peccato e sembra che le librerie MySQL stiano identificando questo oggetto come un POINT
, non uno POLYGON
.
Dimostrazione:
Ma !!!Ho esattamente l'oggetto POLYGON
in MySQL, dal prossimo query SQL:
SELECT GeometryType(GeomFromText(AsWKT(object))) as `type`,
AsWKT(object) as `data` FROM geo.data
Dimostrazione:
che era circa l'oggetto BLOB
.
Geometry parsing da System.String
Ora ... Immaginiamo la fonte originale con commentato BLOB
recupero.
Guardiamo le linee:
var polygon = reader["object"].ToString();
var obj = MySqlGeometry.Parse(polygon);
e deve modificare la query SQL nel codice sorgente C# app per il:
SELECT AsWKT(object) as 'object' FROM geo.data
Sì ... librerie di MySQL per .NET stanno fornendo presumibilmente un altro stile di geomerty bulding, dal System.String
.
Ma, quando sto cercando di analizzare il var polygon
, che sta recuperando correttamente come si è visto sopra, sto ottenendo l'errore successivo:
System.FormatException: String does not contain a valid geometry value
Dimostrazione:
Tutti questi sembrano, che le librerie MySQL non forniscono una struttura completa per l'associazione dati da MySQ L server.