2013-10-02 5 views
8

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:

enter image description here

Così l'oggetto nella tabella è fine e definito correttamente.

C'è un codice sorgente in C#:

http://ideone.com/bn1urQ

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:

enter image description here

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:

enter image description here

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:

enter image description here

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:

enter image description here enter image description here

Tutti questi sembrano, che le librerie MySQL non forniscono una struttura completa per l'associazione dati da MySQ L server.

risposta

Problemi correlati