Mam plik danych CSV od strony trzeciej, który jest eksportowaną tabelą SQL Server. Po prostu zrobili select * from foo
i wyrzucili wynik do pliku tekstowego i przesłali go.
W ich tabeli znajduje się kolumna typu Geometria, więc w moim surowym tekście mam coś takiego jak „0xE610000010C47 ...” itp. W tej chwili załadowałem go do tabeli w SQL Server jako nvarchar.
Spodziewałem się, że po mojej stronie będę mógł wrócić do pola geometrii, ale nie wydaje się to takie łatwe. STGeomFromWKB
nie działa, ponieważ tak naprawdę nie jest to WKB. Nie mogę rzucić sznurka jako geometrii, ponieważ narzeka, że to nie jest WKT.
Czy jest jakiś sposób, aby uzyskać tę wartość do programu SQL Server, tak jakby to był normalny BLOB geometrii? Czy mogę powiedzieć SQL Serverowi, aby traktował go jako taki?
Znalazłem ten link, który pomógł przynajmniej odpowiedzieć na moje pytanie dotyczące tego, co jest w SQL Server, ale nie doprowadził mnie do końca: jaki jest format typu danych geometrii SQLServer 2008
Odpowiedzi:
Podczas importowania danych do programu SQL Server umieść je w kolumnie VARBINARY (MAX). Powinieneś być w stanie CAST to jako Geometria lub Geografia, zgodnie z wymaganiami. Trzeba uważać, aby łańcuch 0xE6 ... nie został zmieniony podczas importu.
Inną opcją jest wykonanie dynamicznego zapytania, aby uzyskać wybór. Poniżej podaję kilka przykładów konwersji.
źródło
Opierając się na odpowiedzi @ MickyT, ponieważ będziesz mieć tabelę ze swoimi wartościami już w WKB (lub jakkolwiek to nazwiemy), powinieneś napisać sql, który skonwertuje wszystkie rekordy na geometrię, zamiast konieczności zadeklarować zmienną itp. itd.
Więc jeśli zaczniesz od prostej tabeli tymczasowej, która replikowałaby WKB w jednym rekordzie, wyglądałoby to tak:
Teraz, jeśli traktujesz to jako tabelę tymczasową i otaczasz trochę SQL, masz tam kolumnę z WKB i możesz przekonwertować ją na varbinary, jak sugerowano powyżej:
gdzie temp.wkb może być kolumną w twojej większej tabeli zawierającą wartości WKB z CSV
Na koniec użyj metody opisanej przez MickyT i przekonwertuj varbinary na geometrię:
Która zwraca geometrię i wynik przestrzenny:
EDYCJA gdzie deklarowany jest SRID? Jak odpowiedział MickyT, jest w pliku binarnym i możesz owinąć jeszcze jedno zapytanie SQL, aby przetestować:
co daje i jest poprawne w moim przykładzie 2877 (płaszczyzna stanu Kolorado):
źródło
Oryginalny plakat tutaj, kiedy próbowałem dokończyć rejestrację, nie łączyłem logowania do oryginalnego postu. Tak czy inaczej....
Dzięki za wszelką pomoc! Będę głosować za każdą odpowiedzą, gdy będę w stanie, a może jeśli uda mi się dowiedzieć, jak połączyć to konto z oryginalnym, mogę zaznaczyć odpowiedź. Poza tym po twoich wskazówkach nie mogę uwierzyć, że przegapiłem użycie
CONVERT
zamiastCAST
. To znacznie ułatwia.Myślę, że moim głównym problemem było doprowadzenie surowego binarnego „łańcucha” do czegoś, czego mógłbym użyć. Oto próbka rozwiązania tego problemu:
źródło