2013-10-02 13 views
8

Próbuję pobrać dane z MySQL Polygon do mojej aplikacji C#.Sterowniki MySql dla .NET nie obsługują struktury Polygon, prawda?

Mam dokładnie zdefiniowane w jednej tabeli pole Polygon, w którym przechowywana jest geodata.

Dowód:

SELECT GeometryType(GeomFromText(AsWKT(object))) as `type` FROM geo.data; 

Powroty:

enter image description here

więc obiekt w tabeli jest w porządku i poprawnie zdefiniowane.

Jest kod źródłowy w języku C#:

http://ideone.com/bn1urQ

i głównej linii są (73-76):

//var polygon = (byte[])reader["object"]; 
//var obj = new MySqlGeometry(MySqlDbType.Blob, polygon); 
var polygon = reader["object"].ToString(); 
var obj = MySqlGeometry.Parse(polygon); 

mam skomentował, ale nie jest to przeszkoda do opowiedzenia o obu operacjach:

  • pobieranie jako BLOB z następnymi deserializatami na
  • parsowanie pobranego ciąg poprzez MySqlGeometry.Parse(System.String) metody

BLOB pobierania

dobrze, powinien zacząć skomentował części kodu, wyobraźmy sobie, że te linie są komentarzem i nie są linie 75 i 76 z parsowaniem ciągów.

Ponadto istnieje inna korekta, zapytanie SQL, które wysyła do serwera MySQL musi wyglądać następująco:

SELECT AsWKB(object) as 'object' FROM geo.data 

Właśnie zmienił się w zapytaniu SQL funkcję AsWKT() do AsWKB() (z tekstem na binarny formatter w MySQL).

więc wynikiem tego zapytania będzie:

enter image description here

Na liniach:

var polygon = (byte[])reader["object"]; 
var obj = new MySqlGeometry(MySqlDbType.Blob, polygon); 

Jesteś w stanie zobaczyć, że ja ściągam że BLOB przedmiot następnie przekształcenie go do tablica System.Byte[] i dopiero wtedy próbuję zbudować MySqlGeomerty, ale to bardzo szkoda i wydaje się, że biblioteki MySQL identyfikują ten obiekt jako POINT, a nie POLYGON.

Dowód:

enter image description here

Ale !!!Mam dokładnie ten obiekt POLYGON w MySQL, przy kolejnym zapytaniu SQL:

SELECT GeometryType(GeomFromText(AsWKT(object))) as `type`, 
        AsWKT(object) as `data` FROM geo.data 

Dowód:

enter image description here

To było o obiekcie BLOB.

Geometria parsowania z System.String

teraz ... Wyobraźmy sobie oryginalnego źródła z skomentował BLOB sprowadzania.

Spójrzmy na liniach:

var polygon = reader["object"].ToString(); 
var obj = MySqlGeometry.Parse(polygon); 

I powinien zmienić zapytanie SQL w C# kodu źródłowego aplikacji do:

SELECT AsWKT(object) as 'object' FROM geo.data 

... Tak biblioteki MySQL dla .NET dostarczają rzekomo inny styl budowania geomerty, z System.String.

Ale gdy próbuję analizować var polygon, który pobiera prawidłowo, jak widzieliśmy powyżej, dostaję kolejny błąd:

System.FormatException: String does not contain a valid geometry value 

Dowód:

enter image description here enter image description here

Wszystkie te wyglądają tak, że biblioteki MySQL nie zapewniają pełnych struktur dla powiązania danych z MySQ L serwer.

Odpowiedz

Powiązane problemy