次の選択を使用して、PHP が循環する各行を調べ、現在の場所の半径を取得し、PROC を使用して各「イベント」からその現在の場所までの距離を計算し、次の行に移動する前にデータをdistance_between
入力しようとしています。DISTANCEFROMEVENT
私が落ち込んでいるのは(これのほとんどが機能するため)アクションを追加することです
distance_between 52.5960 , -1.9110 ,
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ,
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE AS DISTANCEFROMEVENT
SELECT
これをステートメントに結合する方法の構文については明確ではありませんが、それ自体で機能することはわかっています。
SELECT * FROM Current
WHERE (GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE <53.319589001447
AND
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE > 51.872410998553
AND
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE > -2.6349916029658
AND
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE < -1.1870083970342
AND
VALIDPERIOD_STARTOFPERIOD < '12-05-06 16:15:31'
AND
VALIDPERIOD_ENDOFPERIOD > '12-05-06 16:15:31' ,
distance_between 52.5960 , -1.9110 , GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE , GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE AS DISTANCEFROMEVENT )
私が得ることができるガイダンスをいただければ幸いです。
テラン
CREATE FUNCTION distance_between (from_lat DECIMAL(6, 3),
from_lng DECIMAL(6, 3),
to_lat DECIMAL(6, 3),
to_lng DECIMAL(6, 3))
RETURNS DECIMAL(11, 3)
RETURN 6371 * 2 * ATAN2(SQRT(POW(SIN(RADIANS(to_lat - from_lat)/2), 2) +
POW(SIN(RADIANS(to_lng - from_lng)/2), 2) * COS(RADIANS(from_lat)) *
COS(RADIANS(to_lat))), SQRT(1 - POW(SIN(RADIANS(to_lat - from_lat)/2), 2) +
POW(SIN(RADIANS(to_lng - from_lng)/2), 2) * COS(RADIANS(from_lat)) * COS(RADIANS(to_lat))));
働く.............
SELECT *, ( 3959 * acos( cos( radians(52.5960) ) * cos( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ) ) * cos( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE ) - radians(-1.9110) ) + sin( radians(52.5960) ) * sin( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ) ) ) ) AS DISTANCEFROMEVENT FROM Current HAVING DISTANCEFROMEVENT < 50 ORDER BY DISTANCEFROMEVENT