Eu tenho um arquivo de dados CSV de terceiros que é uma tabela exportada do SQL Server. Eles simplesmente fizeram select * from foo
e enviaram o resultado para um arquivo de texto e o enviaram.
Na tabela deles, há uma coluna do tipo Geometria, portanto, no meu texto bruto, tenho algo como "0xE610000010C47 ..." etc. No momento, carreguei-o em uma tabela no SQL Server como um nvarchar.
Eu previ que seria capaz de voltar ao campo Geometria do meu lado, mas isso não parece ser tão fácil. STGeomFromWKB
não funciona porque na verdade não é um WKB. Não consigo converter a string como Geometry porque ela reclama que não é uma WKT.
Portanto, existe alguma maneira de obter esse valor no SQL Server como se fosse um BLOB de geometria normal? Posso dizer ao SQL Server para tratá-lo como tal?
Encontrei este link que ajudou pelo menos a responder à minha pergunta sobre o que há no SQL Server, mas não me levou até lá: qual é o formato do tipo de dados Geometry do SQLServer 2008
Respostas:
Ao importar os dados para o SQL Server, coloque-os em uma coluna VARBINARY (MAX). Você deve então CASTAR isso como uma geometria ou geografia, conforme necessário. Você precisará ter cuidado para que a sequência 0xE6 ... não seja alterada durante a importação.
Outra opção é fazer uma consulta dinâmica para obter a seleção. Eu coloquei alguns exemplos de conversão abaixo.
fonte
Com base na resposta do @ MickyT, como você terá uma tabela com seus valores já no WKB (ou o que quer que a chamemos), você gostaria de escrever sql que converterá todos os registros em geometria, em vez de precisar declarar uma variável, etc. etc.
Portanto, se você começar com uma tabela temporária simples que replicaria o WKB em um registro, seria assim:
Agora, se você tratar isso como uma tabela temporária e envolver um pouco de SQL, terá uma coluna com o WKB e poderá convertê-lo em varbinário, como sugerido acima:
em que temp.wkb pode ser a coluna da tabela maior que contém os valores WKB do CSV
Por fim, use o método descrito por MickyT e converta o varbinário em geometria:
O que retorna geometria e um resultado espacial:
EDITAR onde o SRID é declarado? Como o MickyT respondeu, está no binário e você pode agrupar mais uma consulta sql por lá para testar:
que produz, e está correto no meu exemplo, 2877 (plano de estado de colorado):
fonte
Pôster original aqui, quando tentei concluir a inscrição, ele não vinculava o logon da postagem original. De qualquer forma....
Obrigado por toda a ajuda! Eu votarei cada resposta assim que possível e, se puder descobrir como vincular esta conta e a original, posso marcar uma resposta. Além disso, depois de suas dicas, não acredito que perdi o uso em
CONVERT
vez deCAST
. Isso torna muito mais fácil.Eu acho que meu principal problema foi obter a "string" binária bruta para algo que eu poderia usar. Aqui está uma amostra de como eu o resolvi:
fonte