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:
więc obiekt w tabeli jest w porządku i poprawnie zdefiniowane.
Jest kod źródłowy w języku C#:
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:
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:
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:
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:
Wszystkie te wyglądają tak, że biblioteki MySQL nie zapewniają pełnych struktur dla powiązania danych z MySQ L serwer.