Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Limitações de tamanho de LineString de geografia do Sql Server 2008


Eu não ouvi sobre nenhuma limitação de tamanho em LINESTRING (certamente não tão curto quanto 567 pontos).

acabei de tentar um exemplo
DECLARE @geom GEOGRAPHY
SET @geom = GEOGRAPHY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608 )', 4326)
SELECT @geom, @geom.STNumPoints()

que funcionou bem (cria o LINESTRING e conta 1.122 pontos).

O seu exemplo falha com QUALQUER 567 pontos - ou apenas um conjunto específico de pontos (você pode compartilhá-los conosco?). Acho que estou me perguntando se seu 568º ponto torna sua instância GEOGRAPHY maior que um hemisfério? Por exemplo, se eu mudar meu exemplo adicionando outro ponto (0,0) que força a GEOGRAFIA a ser muito grande:
DECLARE @geom GEOGRAPHY
SET @geom = GEOGRAPHY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608
   , 0 0 )', 4326)         -- ADDED ANOTHER POINT !
SELECT @geom, @geom.STNumPoints()

Recebo ArgumentException 24205:A entrada especificada não representa uma instância de geografia válida porque excede um único hemisfério. Cada instância de geografia deve caber dentro de um único hemisfério. Um motivo comum para esse erro é que um polígono tem a orientação de anel incorreta. que obviamente não é exatamente o mesmo erro como você - mas pensei em aumentar mesmo assim [Vá para a ATUALIZAÇÃO no final para ter uma ideia melhor]

Minha segunda pergunta para você é:funciona com o tipo de dados GEOMETRY? Por exemplo. se eu alterar meu exemplo de "quebra" acima para usar GEOMETRY, funcionará bem:
DECLARE @geom GEOMETRY    -- using GEOMETRY type instead
SET @geom = GEOMETRY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608
   , 0 0 )', 4326)         -- THIS POINT BREAKS GEOGRAPHY but works now!
SELECT @geom, @geom.STNumPoints()

Se você puder postar mais detalhes sobre seu problema específico, isso pode sugerir o problema subjacente. Além disso, você poderia adicionar se está inserindo os pontos no SQL Management Studio ou via código (é montagem de tipos de dados C # e SQL)? Qual é o texto completo da mensagem de erro que você recebe (se houver mais do que você citou acima - veja meu erro).

Mas a resposta curta é "Eu não acho que haja um limite de 567 pontos".

ATUALIZAÇÃO: Post do Ed contém o erro exato que você obtém (System.ArgumentException:24200) - portanto, se você puder fazer com que seus dados funcionem em GEOMETRY, talvez valha a pena tentar: