sql >> Base de Datos >  >> RDS >> Sqlserver

Sql Server 2008 geografía Limitaciones de tamaño de LineString

No he oído hablar de ninguna limitación de tamaño en LINESTRING (ciertamente no tan corto como 567 puntos).

Acabo de probar un ejemplo

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 funcionó bien (crea LINESTRING y cuenta 1122 puntos).

¿Su ejemplo falla con ALGÚN 567 puntos, o solo con un conjunto específico de puntos (¿puede compartirlos con nosotros?). Supongo que me pregunto si su punto 568 hace que su instancia de GEOGRAFÍA sea más grande que un hemisferio. Por ejemplo, si cambio mi ejemplo agregando otro punto (0,0) que obliga a que la GEOGRAFÍA sea demasiado 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()

Obtengo ArgumentException 24205:la entrada especificada no representa una instancia de geografía válida porque excede un solo hemisferio. Cada instancia de geografía debe caber dentro de un solo hemisferio. Una razón común de este error es que un polígono tiene una orientación de anillo incorrecta. que obviamente no es exactamente el mismo error como usted, pero pensé en plantearlo de todos modos [Pase a la ACTUALIZACIÓN al final para una mejor idea]

Mi segunda pregunta para usted es:¿funciona con el tipo de datos GEOMETRÍA? P.ej. si cambio mi ejemplo de "ruptura" anterior para usar GEOMETRÍA, entonces funciona bien:

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()

Si puede publicar más detalles sobre su problema específico, podría sugerir el problema subyacente. ¿También podría agregar si está ingresando los puntos en SQL Management Studio o mediante código (es un ensamblaje de tipos de datos C # y SQL)? ¿Cuál es el texto completo del mensaje de error que recibe (si hay más de lo que citó anteriormente, vea mi error).

Pero la respuesta corta es "No creo que haya un límite de 567 puntos".

ACTUALIZACIÓN: Publicación de Ed contiene el error exacto que obtiene (System.ArgumentException:24200), por lo que si puede hacer que sus datos funcionen en GEOMETRÍA, podría valer la pena intentarlo: