2008-12-17 31 views
21

Juego con la nueva columna de geografía en SQL Server 2008 y la función STGeomFromText. Aquí está mi código (funciona con AdventureWorks2008)Columna de geometría: STGeomFromText y SRID (¿qué es un SRID?)

DECLARE @region geography; 
set @region = geography::STGeomFromText('POLYGON((
     -80.0 50.0, -90.0 50.0, 
     -90.0 25.0, -80.0 25.0, 
     -80.0 50.0))', 4326); 

SELECT @region; 

Mi pregunta es acerca de 4326 en el código. Se supone que es una ID de referencia espacial. Cuando voy a MSDN, no tengo mucho. Si cambio el valor a 56, aparece un error diciéndome que el valor debe estar en la tabla sys.spatial_reference_systems.

Usted puede mirar en esa mesa ejecutando:

select * from sys.spatial_reference_systems 

hay una columna well_known_text en dicha tabla, pero no me dice mucho. El valor para 4326 es:

GEOGCS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84", 6378137, 298.257223563]], PRIMEM["Greenwich", 0], UNIT["Degree", 0.0174532925199433]] 

¿Alguien puede explicarme este misterio? ¿Que es el SRID?

Respuesta

15

Así que terminé hablando ayer con un ex militar que era especialista en mapas/radar. Básicamente, sabía exactamente cuál era ese número (4326), de dónde venía y por qué estaba allí.

Es un estándar de la industria para la geografía informática. El problema es que la Tierra no es una esfera perfecta (sobresale en el medio), y SRID 4326 es responsable de eso.

Como indiqué, la tabla sys.spatial_reference_systems enumera todo el código y lo que son. Pero la versión corta es que realmente solo usará 4326 a menos que tenga una razón muy específica para usar algo diferente.

+1

No estoy de acuerdo con su declaración "Realmente solo usará 4326 a menos que tenga un motivo muy específico". Cada vez que trabaje con datos en un área pequeña (piense en un estado o condado en oposición al mundo) va a utilizar un sistema de coordenadas proyectado local. Estos sistemas están diseñados para representar mejor la superficie de la Tierra en un plano 2D en comparación con el globo 3D. La mayoría de las veces terminarás obteniendo datos en una proyección que no sea WGS84, y necesitarás convertir. Si solo está tratando con puntos de GPS, tiene razón al suponer que los datos están en 4326 el 99% del tiempo. – Roy

16

Hay muchos sistemas para mapear la tierra. Por ejemplo, desea mapear algún estado en EE. UU. Puede establecer el punto más al sureste como 0,0 y asignar todas las demás coordenadas espaciales según este punto. Por otro lado, es posible que desee asignar algunos datos espaciales que abarcan todo el mapa. En cualquier caso, debe elegir un punto como 0,0. Además, debe seleccionar algún tipo de unidad de medida: millas/kilómetros/grados/alguna otra unidad mágica que le convenga mejor. Con los años, muchos de esos sistemas se desarrollaron. Cada uno tiene su propio punto cero, sus propias coordenadas, sus propias reglas sobre si la tierra es plana o no. SRID o SRS es la identificación de dicho sistema. Usando esta identificación, puede mapear el punto expresado en un sistema a otro sistema, aunque algunas veces involucra algunas matemáticas bastante complejas.

Y sobre 4326 SRID. También llamó al sistema "WGS 84" (http://en.wikipedia.org/wiki/World_Geodetic_System). Es el sistema más común para representar el punto en tierra esférica (no plana). Utiliza grados, minutos, segunda notación y sus coordenadas xey se llaman generalmente latitud y longitud.

La proyección de tierra no esférica más utilizada se denomina UTM. Puede leer sobre esto aquí: http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

De todos modos, mientras no haga conversiones espaciales de un sistema a otro, realmente no se preocupa por el sistema que utilizan los datos.

+1

Esa última línea realmente me molesta, promoviendo la ignorancia porque * probablemente no importe *? – Stijn

2

He encontrado este sitio web: http://spatialreference.org/ref/epsg/4326/ bastante útil para comprender el SRID que piensa utilizar.Proporciona un mapa útil, información de cuadro delimitador y otros enlaces.

Para otros SRID, simplemente cambie los dígitos al final de la URL por lo que está buscando.

1

La distancia devuelta depende del "Spatial Reference Identifier (SRID)" que defina para sus tipos de geografía.

En el ejemplo siguiente, se utiliza el valor predeterminado SRID de 4336, consulte el segundo argumento de STGeomFromText. Esto significa que la distancia es devuelto en metros, se encuentra este a través de la consulta de la vista de catálogo spatial_reference_systems es decir select srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326

Como alternativa a STGeomFromText, puede utilizar parse que asume una SRID de 4326 y que no tiene que especificar una forma explícita .

Al calcular la distancia entre dos puntos, debe usar el mismo SRID para los dos tipos de geografía, de lo contrario recibirá un error. Ejemplo:

DECLARE @address1 GEOGRAPHY 
DECLARE @address2 GEOGRAPHY 
DECLARE @distance float 
SET @address1 = GEOGRAPHY::STGeomFromText ('point(53.046908 -2.991673)',4326) 
SET @address2 = GEOGRAPHY::STGeomFromText ('point(51.500152 -0.126236)',4326) 
SET @distance = @address1.STDistance(@address2) 
SELECT @distance --this is the distance in meters 
Cuestiones relacionadas