Примечание. @Road — это то же самое, что и geography MULTILINESTRING
<Сильный> SET ИСХОДНЫЙ ROAD СЕГМЕНТ STRONG>
SET @Road EM> = география :: STMLineFromText ( 'MultiLineString ((-79,907603999999992 +32,851905999999985, -79,907708999999983 32,851751, -79,907879999999992 +32,851555999999995, -79,907889999999981 +32,851542999999992 , -79.90799599999983 32.851461, -79908133999999999999999999999999999999999999999999999999999999999999999999999999999992, -79999999999999999929110999999982 32.85097499999982 32.850974)) ', 4269);
ПОЛУЧИТЬ НАЧАЛЬНУЮ/КОНЕЧНУЮ ТОЧКУ СЕГМЕНТА ДОРОЖКИ ДЛЯ НОВОГО РАСЧЕТА СРЕДНЕЙ ТОЧКИ
SET @x1 = CAST(@Road.STStartPoint().Lat AS decimal(11,6) ))
SET @y1 = CAST(@Road.STStartPoint().Long AS decimal(12,6))
SET @x2 = CAST(@Road.STEndPoint().Lat AS decimal(11,6))
SET @y2 = CAST(@Road.STEndPoint().Long AS decimal(12,6) )
НАЗНАЧИТЬ ШИРОТУ/ДОЛГО СЕРЕДИНУ СЕГМЕНТА ДОРОГИ
SET @MidPointLat = CAST( {(@x1 + @x2) / 2) AS nvarchar(11))
SET @MidPointLon = CAST( {(@y1 + @y2) / 2) AS nvarchar(12))
УСТАНОВИТЬ НАЧАЛЬНЫЙ ЦЕНТРАЛЬНЫЙ ВНЕДОРОЖНИК
УСТАНОВИТЬ @RoadMidPt = geography::STPointFromText('POINT(' + @MidPointLon + ' ' + @MidPointLat + ')', 4269)
РАССЧИТАТЬ БУФЕРНОЕ РАССТОЯНИЕ ОБРАТНО ДО ДОРОГИ ДЛЯ .STIntersection (добавить .02, чтобы обеспечить пересечение)
SET @RoadMidPtBuffer = @RoadMidPt.STBuffer(@RoadMidPt.STDistance(@) Дорога) + .02)
Может пересекаться в нескольких точках! Использовать 1-ю точку пересечения дороги как центр тяжести
SET @RoadCentroid = @RoadMidPtBuffer.STIntersection(@Road).STPointN(1);
ПОСЛЕДНИЕ НОВЫЕ ШИРОТА/ДОЛГОТА БЛИЖАЙШЕЙ ДОРОГИ/ЦЕНТРАЛЬНОЙ ЛИНИИ
ВЫБЕРИТЕ @RoadCentroid.Lat, @RoadCentroid.Long
person
Bryon
schedule
10.09.2014