Lucas's profileLucas Souza [MCP | MCTS ...PhotosBlogListsMore Tools Help

Blog


    August 08

    Utilizando dados espaciais no SQL Server 2008 (Parte 02)

    A Paz do Senhor Esteja Convosco,

    No artigo anterior falamos qual a importância dos dados espaciais em nossas aplicações, porque e quando devemos utilizar, o que é o plano geométrico e suas dimensões, qual diferença dos tipos de dados geometry e geography os quais são novos tipos de dados que estão presente no SQL Server 2008 e por último vimos quais são os tipos específicos para cada tipo de dados existente.

    Ao termos conhecido as diferenças dentre os tipos de dados geometry e geography o que nos resta neste momento é conhecermos quais são os diferentes formatos que podem ser utilizados para representar os dados espaciais, existe exatamente três:

    1.      The Well-Known-Binary (WKB) format

    2.      The Well-Known-Text (WKT) format

    3.      The Geography Markup Language (GML) data format.

    Todos os formatos mostrado acima foram publicados pela Open Geospatial Consortium (OGC) o qual é lider dos padrões geoespaciais e serviços baseados em locazalições.

    1.      The Well-Known-Binary (WKB) format : Este é o formato binário pelo qual representa a instância do tipo de dados geography, é um dos formatos  preferidos serializados das aplicações que necessitam armazenar informações geoespacial em compactação.

     

    2.      The Well-Known-Text (WKT) format: Este formato é compacto, ou melhor nos garante uma leitura fácil, isto porque é um formato amigável e o mais comum para se usar em consultas geoespaciais.

     

    3.      The Geography Markup Language (GML) data format: Este formato representa o padrão (XML), o qual é a melhor alternativa para incluir informações geoespaciais em documentos XML. Este formato é útil em aplicações onde é necessário alterar informações geoespaciais por meios de XML Web Service.

    Os padrões conforme foi ilustrado acima nos oferece vastas vantagens, o que precisa ser analisado é: Qual deles se comportaria de melhor forma em nossas aplicações. Os dados espaciais também suportam algumas funções, atualmente existem mais de 60 nos tipo de dados geometry  e geography.

    STDifference
    Retorna uma nova instância consistindo em pontos da instância base em que não contém pontos da instância parâmetro

    -- Results: POLYGON ((10 10, 40 10, 40 26.666666666666668, 20 20, 26.666666666666668 40, 10 40, 10 10))

    DECLARE @g geometry

            = 'POLYGON((10 10, 40 10, 40 40, 10 40, 10 10))'

    DECLARE @h geometry

            = 'POLYGON((20 20, 50 30, 50 50, 30 50, 20 20))'

           

    SELECT  @G.STDifference(@H).ToString();


    Figura 1.0 (Function - STDifference)

    STIntersects
    Retorna verdadeiro se todos os valores geometric possuír mais de uma interseção, por outro lado este método irá retorna NULL se todos SRID da instância não possuír o valor adequado ao SRID da outra instância ou melhor, este método tem por objetivo conter apenas os pontos comum entre a instância base a instância parâmetro;

    -- Results: POLYGON ((30 30, 40 30, 40 40, 30 40, 30 30))

    DECLARE @g geometry

            = 'POLYGON((10 10, 40 10, 40 40, 10 40, 10 10))'

    DECLARE @h geometry

            = 'POLYGON((30 30, 50 30, 50 50, 30 50, 30 30))'

     

    SELECT @g.STIntersection(@h).ToString();


    Figura 1.1 (Function - STIntersects)

    STSymDifference
    Retorna uma nova instância contendo apenas os pontos únicos da instância base e parâmetro  (i.e., excluindo os pontos que retornam STIntersection() )

    -- Results: MULTIPOLYGON (((50 30, 50 50, 30 50, 40 40, 50 30)),

                             ((10 10, 40 10, 40 40, 10 40, 10 10)))
    DECLARE @g geometry
            = 'POLYGON((10 10, 40 10, 40 40, 10 40, 10 10))'

    DECLARE @h geometry

            = 'POLYGON((40 40, 50 30, 50 50, 30 50, 40 40))'

     

    SELECT  @g.STSymDifference(@h).ToString();


    Figura 1.2 (Function - STSysmDifference)

    STUnion
    Retorna uma nova instância contendo todo os pontos aninhados da instância base e parâmetro.

    -- Results: MULTIPOLYGON (((50 30, 50 50, 30 50, 40 40, 50 30)),

                              ((40 10, 40 40, 10 40, 20 20, 40 10)))

    DECLARE @g geometry

            = 'POLYGON((20 20, 40 10, 40 40, 10 40, 20 20))'

    DECLARE @h geometry

            = 'POLYGON((40 40, 50 30, 50 50, 30 50, 40 40))'

     

    SELECT @g.STUnion(@h).ToString(); 

     
    Figura 1.3 (Function - STUnion)

    Blended Types
    Este método descreve não justamente os polígonos, no entanto é possível usar diferentes tipos específicos em cada coleção ou em cada tipo de definido.

    -- Results: MULTILINESTRING ((40 40, 30 30), (25 25, 8 8))

    DECLARE @g geometry = 'LINESTRING(8 8, 40 40)'

    DECLARE @h geometry = 'POLYGON((25 25, 15 30, 30 30, 30 15, 25 25))'

     

    SELECT @g.STDifference(@h).ToString();


    Figura 1.4 (Function – Blended Types)


    STArea, STLength
    Retorna a soma de todas as áreas calculadas na superfície definida pelo usuário do tipo geometric
    STArea() retorna o tipo float indicando a área quadrangular da instância
    STLength() retorna o tipo float indicando o tamanho de unidade da instância (0 ou se a instância é um ponto ou se não possui tamanho)

    -- Results: 400           |         121.28990204492
    DECLARE
    @g GEOMETRY = 'POLYGON((10 10, 30 50, 50 50, 10 10))'

    SELECT  @g.STArea(), @g.STLength()


    Figura 1.5 (Function – STArea, STLength)

    STCentroid
    Este é um dos métodos padrões OGC que retorna ‘Point’ indicando o centro da forma quandrangular, se a instância adotada não for Polygon ou MultiPolygon o valor NULL será retornado.

    -- Results: POINT (20 30)

    DECLARE @g GEOMETRY = 'POLYGON((10 10, 10 40, 40 40, 10 10))'

    SELECT  @g.STCentroid().ToString()


    Figura 1.6 (Function - STCentroid)

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://souzalucas.spaces.live.com/blog/cns!289B02192542DA52!540.trak
    Weblogs that reference this entry
    • None