right rellenar proper izquierda funcion ejemplos ceros sql-server sql-server-2008 sql-server-2008-r2 geospatial spatial

rellenar - SQL Server 2008 Spatial: encuentra un punto en el polígono



sql server proper case (4)

  1. No deberías estar mezclando Geometría y Geografía. La geometría es para PLANOS PLANOS, la Geografía es para ESFÉRICOS (como la Tierra).
  2. Usted "debería" conciliar los SRID para lidiar con esto. Cada SRID (por ejemplo, 2913 = NZG2000) describe una relación de transformación. Cada SRID se puede usar para asignar a / desde una esfera uniforme, que es cómo se pasa de uno a otro.
  3. Hasta que llegue a un "mismo" SRID en ambos valores, muchos para las funciones .STxXX devolverán NULL (puede tener 0 predeterminado en ambos casos)
  4. Si no son lo mismo pero tú lo haces, puedes tener errores en los casos extremos.
  5. Si gasta un poco de tiempo de "precalcificación", puede determinar los puntos superior / izquierdo e inferior / derecho para las rectas de delimitación involucradas (y almacenarlas), y usar esos valores en índices para limitar los registros a verificar. A menos que AT / L <BB / R y AB / R> BT / L no puedan superponerse, lo que significa que un simple 4 Y control numérico en su DONDE limitará sus comprobaciones STWithin

Aquí hay un ejemplo que utilicé en SRID 2193. Todas las carreteras dentro de un radio de 3 km de un punto determinado, y dentro de una zona escolar específica

DECLARE @g geometry SELECT @g = GEO2193 FROM dbo.schoolzones WHERE schoolID = 319 SELECT DD.full_road_name, MIN(convert(int, dd.address_number)), MAX(convert(int, dd.address_number)) FROM ( select A.* from dbo.[street-address] A WHERE (((A.Shape_X - 1566027.50505) * (A.Shape_X - 1566027.50505)) + ((A.Shape_Y - 5181211.81675) * (A.Shape_Y - 5181211.81675))) < 9250000 and a.shape_y > 5181076.1943481788 and a.shape_y < 5185097.2169968253 and a.shape_x < 1568020.2202472512 and a.shape_x > 1562740.328937705 and a.geo2193.STWithin(@g) = 1 ) DD GROUP BY DD.full_road_name ORDER BY DD.full_road_name

Estoy usando tipos de datos espaciales de SQL Server 2008. Tengo una tabla con todos los estados (como polígonos) como tipo de datos GEOMETRÍA. Ahora quiero verificar si las coordenadas de un punto (latitudes, longitudes) como el tipo de datos GEOGRAPHY, están dentro de ese estado o no.

No pude encontrar ningún ejemplo utilizando los nuevos tipos de datos espaciales. Actualmente, tengo una solución que se implementó hace muchos años, pero tiene algunos inconvenientes.

Tengo SQL Server 2008 y 2012. Si la nueva versión tiene algunas mejoras, también puedo empezar a trabajar en ella.

Gracias.

ACTUALIZACIÓN 1:

Estoy agregando una muestra de código para un poco más de claridad.

declare @s geometry --GeomCol is of this type too. declare @z geography --GeogCol is of this type too. select @s = GeomCol from AllStates where STATE_ABBR = ''NY'' select @z = GeogCol from AllZipCodes where ZipCode = 10101


Creo que el método de geografía STIntersects () hará lo que quieras:

DECLARE @g geography; DECLARE @h geography; SET @g = geography::STGeomFromText(''POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))'', 4326); SET @h = geography::Point(47.653, -122.358, 4326) SELECT @g.STIntersects(@h)


Si no puede cambiar el tipo de datos para los polígonos almacenados a GEOGRAPHY , puede convertir la latitud y la longitud de entrada a GEOMETRY y usar los elementos STContains o STIntersects contra el valor convertido.

DECLARE @PointGeography GEOGRAPHY = geography::Point(43.365267, -80.971974, 4326) DECLARE @PointGeometry GEOMETRY = geometry::STGeomFromWKB(@PointGeography.STAsBinary(), 4326); SELECT @PolygonGeometry.STContains(@PointGeometry);

Ir en la dirección opuesta, intentar convertir los polígonos de GEOMETRY en GEOGRPAHY , es propenso a errores y es probable que falle por mi experiencia.

Y tenga en cuenta que si intenta crear el punto de GEOMETRY directamente desde los valores de latitud y longitud, STContains (o STIntersects ) no funcionarán (es decir, no darán una coincidencia cuando deberían).


declare @g geometry set @g=geometry::STGeomFromText(''POLYGON((-33.229869 -70.891988, -33.251124 -70.476616, -33.703094 -70.508045, -33.693931 -70.891052,-33.229869 -70.891988))'',0) DECLARE @h geometry; SET @h = geometry::STGeomFromText(''POINT(-33.3906300 -70.5725020)'', 0); SELECT @g.STContains(@h);