Como posso usar os tipos espaciais do SQL Server em um aplicativo .Net?


14

Para um próximo projeto, um dos requisitos é armazenar e usar dados geográficos básicos como parte de um aplicativo SQL-Server / .Net existente.

Parece óbvio que poderíamos usar os tipos espaciais do SQL, no entanto, parece não haver nenhuma maneira de (digamos) lê-los a partir do resultado de uma consulta SQL ou salvar um POI / polígono atualizado.

Os desenvolvedores realmente precisam lidar com a conversão no nível do procedimento Stored, ou existe uma maneira de usar os tipos nativamente?


isso pode ser melhor perguntado no StackOverflow, como você está perguntando sobre programação.
Ian

2
@Ian O espaço para este site foi originalmente definida como "Q & Um site para programadores , DBAs , cartógrafos, geógrafos e qualquer pessoa interessada em GIS profissional" (grifo meu)
Rowland Shaw

Respostas:


16

É um aplicativo de desktop ou, digamos, um aplicativo Silverlight? Se for baseado na Web, você precisará passar por alguns obstáculos. Você pode criar uma exibição que expõe o WKT e, em seguida, analisar o lado do cliente WKT nas geometrias WPF / Silverlight.

Se é um aplicativo de desktop, você fica um pouco mais fácil. Há um bom exemplo no Code Project de um visualizador de SQL Geometry que ajudará tanto na área de trabalho quanto na web.

Você precisa fazer referência ao Microsoft.SqlServer.Types.dll, encontrado em SQL Server Install / 100 / SDK / Assemblies para usar SQLGeometry ou SQLGeography diretamente.

Tecnologias como a RIA não entendem esses tipos, mas há uma solução alternativa. Essencialmente, você cria uma exibição que projeta a geometria como um varbinário (máximo), usa-a no seu mapeador OR, RIA, LINQ etc. e depois a converte novamente no cliente. Há um bom tutorial aqui

Edição muito tardia: o Silverlight também não os aceita porque as DLLs mencionadas anteriormente não são compiladas no Silverlight. Obter versões compatíveis com o Silverlight está no topo da lista de desejos de muitas pessoas!



2

Você pode usar tipos de dados do servidor sql, obtê-los no nuget ou aqui: http://www.microsoft.com/en-us/download/details.aspx?id=16177 (próximo ao final da página)

Depois disso, você pode usar o nhibernate fluente, novamente a partir do nuget ou deste link: (Não foi possível inserir o link aqui porque parece que não tenho 10 repetições ...)

Depois disso, você precisará de um UserType personalizado para mapear o tipo sql para o tipo clr no nhibernate. Para sua sorte, esse cara fez um: http://blogs.ugidotnet.org/mik/archive/2010/03/26/map-sql-server-2008-geography-type-with-fluent-nhibernate.aspx

Espero que isto ajude !




1

A biblioteca Feature Data Objects (FDO) permite acessar vários formatos de dados geoespaciais (incluindo o SQL Server) por meio de um único conjunto unificado de interfaces.

A biblioteca está em C ++, mas a biblioteca também vem com um wrapper .net.

http://fdo.osgeo.org


0

Você deu uma olhada no nHibernate ? Ele usa os tipos espaciais do .NET (conforme descrito por dmbrubac acima), mas também pode conversar com outros sistemas de banco de dados que não o SQL Server.

Não sei se você pediu o nível da interface do usuário também, mas aqui estão os meus 2 centavos: trabalhei com SharpMap, GeoAPI e descansei alguns anos atrás. Eles são ótimos, mas nunca chegaram a um estádio em que você pode dizer que eles são maduros o suficiente para serem usados ​​em um aplicativo de negócios. Eu experimentei as APIs Silverlight e WPF da ESRI há um ano e criei dois protótipos que usavam a API. É ótimo, não é gratuito, mas é realmente sólido, moderno e faz todas as coisas que você deseja que faça e muito mais.


O bit da interface do usuário é fácil, pois temos nosso mecanismo de visualização.
Rowland Shaw

0

Se você estiver escrevendo um cliente da Web, uma opção é usar o ArcGIS Spatial Data Service, que atualmente é fornecido com o produto MapIt da Esri (consulte http://resources.esri.com/MapIt ). O serviço expõe tabelas do SQL Server por meio de um serviço da Web RESTful. O serviço da Web usa o formato ArcGIS JSON, para que as tabelas com dados espaciais do SQL Server possam ser consumidas como FeatureLayers nas APIs da Web do ArcGIS. Se você deseja um cliente de desktop, pode usar a API WPF.

Uma alternativa para o desenvolvimento da área de trabalho é usar os Tipos de CLR do SQL Server incluídos nos feature packs do SQL Server. Você pode encontrar a página de download do feature pack 2008 R2 aqui - http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52 . Role para baixo ou procure "Tipos de CLR" para encontrar o link de download.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.