2 点間の距離を取得しようとしていますが、問題はありませんが、次の警告メッセージに問題があります。
行 32 の列 'x' のデータが切り捨てられ
ました 行 82 の列 'x' の
データが切り捨てられました 行 89 の列 'x' のデータが切り捨てられました
これは私が作成した関数です:
CREATE FUNCTION `GetDistance`(`lat1` numeric(10, 7), `lon1` numeric(10, 7), `lat2` numeric(10, 7), `lon2` numeric(10, 7))
RETURNS decimal(10,7)
BEGIN
DECLARE x decimal(10, 7);
DECLARE pi decimal(21, 20);
SET pi = 3.14159265358979323846;
SET x = round(sin(lat1 * pi / 180)
* sin(lat2 * pi / 180)
+ cos(lat1 * pi / 180)
* cos(lat2 * pi / 180)
* cos((lon2 * pi / 180) - (lon1 * pi / 180)), 7);
SET x = round(atan((sqrt( 1- power( x, 2))) / x), 7);
RETURN round((1.852 * 60.0 * ((x / pi) * 180)) / 1.609344, 7);
END
lat1
、lon1
およびlat2
の2 つの列を次に示します。lon2
CREATE TABLE `world_cities` (
`latitude` DECIMAL(10,7) NULL DEFAULT NULL,
`longitude` DECIMAL(10,7) NULL DEFAULT NULL,
)
最大/最小値は次のとおりです。
"max(latitude)" "min(latitude)" "max(longitude)" "min(longitude)"
"82.4833330" "-54.9333330" "180.0000000" "-179.9833333"
では、この警告メッセージの原因は何ですか?
関数を呼び出すクエリは次のとおりです。
SELECT city, region, population, latitude, longitude,
GetDistance(@lat, @lon, latitude, longitude) as dist
FROM world_cities
WHERE MBRContains(LineString(Point(@lat + @kmRange / 111.1, @lon + @kmRange / (111.1 / COS(RADIANS(@lat)))), Point(@lat - @kmRange / 111.1, @lon - @kmRange / (111.1 / COS(RADIANS(@lat))))), location)
and city_id != @city_id
order By dist;