2015-08-10 3 views
3
  • система: SQL Server 2008 R2
  • Две геометрические переменные, SRID 4326.

Возвращаемое значение STDistance в градусах, но мне нужно миль. Также представьте, что вы делаете такой расчет не по 2 переменным, а по столбцам геометрии в таблице с 1000 строк. Каковы самые быстрые решения? Есть ли что-нибудь встроенное для SQL Server 2012, 2014, 2016, ...?Геометрия геометрии SQL Server в расчетах миль?

--Geometry 
DECLARE @Point2m geometry = geometry::STGeomFromText('POINT(-80.23 26.2)', 4326), 
@Point3m geometry = geometry::STGeomFromText('POINT(-80.229999999515712 26.193699999712408)', 4326) 

SELECT @Point2m.STDistance(@Point3m) /* degrees */ 
GO 

--Geography, for comparison 
DECLARE @Point2g geography = geography::STGeomFromText('POINT(-80.23 26.2)', 4326), 
@Point3g geography = geography::STGeomFromText('POINT(-80.229999999515712 26.193699999712408)', 4326) 

SELECT @Point2g.STDistance(@Point3g)/1609.344 /*meters to miles*/ 
GO 
+0

Итак, в чем вопрос? Вы пробовали его на 1000 рядов, и это не сработало, оно медленное или что? – Bulat

+0

Нужно расстояние в милях не в градусах для типа геометрии. – user5211471

+0

Отметьте этот ответ - должен помочь: http://gis.stackexchange.com/questions/4844/stdistance-unit-in-sql-server-2008 – mwigdahl

ответ

0

Это может быть использован в качестве шаблона для SP:

DECLARE @geostart ГЕОГРАФИЯ DECLARE @geoend ГЕОГРАФИЯ

ВЫБОР @geostart = ВЫБОР @geoend =

SELECT CAST (@ geostart.STDistance (@geoend) /1609.344 AS DEC (8,1)) AS [Расстояние в милях]

Если вы хотите рассчитать (таблица_значение = 100) в другой таблице (table_b), вы можете использовать примерно следующее:

SELECT , 'miles' = CAST (table_a_geo.STDistance (table_b_geo) /1609.344 AS DEC (8,1)) FROM table_a JOIN table_b ON table_b_id = 100

Смежные вопросы