

SELECT ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10), POINT(10 10), POINT(10 11), POINT(10 10.5),polygon((9 9, 11 9, 11 11,9 11, 9 9)) )'); 這個只是一個簡單的距離情況,當我處理三百萬資料,把地圖進行瓦片分割,然后把這些瓦片區域可視化的時候。我的三百萬個點都被這些POLYGON(瓦片區域)給覆寫住了。
下面是我函式創建,把多邊形和點連接起來用GEOMETRYCOLLECTION函式
CREATE DEFINER=`root`@`localhost` FUNCTION `f_2`(xtile int, ytile int,lon float,lat float) RETURNS varchar(200) CHARSET utf8mb4
BEGIN
declare s varchar(200);
declare s1 varchar(200);
declare a1 varchar(50);
declare a2 varchar(50);
declare a3 varchar(50);
declare a4 varchar(50);
declare lon_deg float;
declare lat_deg float;
declare lon_deg1 float;
declare lat_deg1 float;
declare lon_deg2 float;
declare lat_deg2 float;
declare lon_deg3 float;
declare lat_deg3 float;
declare lon_deg4 float;
declare lat_deg4 float;
set lon_deg = xtile / 16384 * 360.0 - 180.0;
set lat_deg = ATAN((EXP((pi() * (1 - 2 * ytile / 16384)))-EXP(-(pi() * (1 - 2 * ytile / 16384))))/2)* (180.0 / pi());
set lon_deg1 = lon_deg - 180/(2^15);
set lat_deg1 = lat_deg + 180/(2^15);
set lon_deg2 = lon_deg + 180/(2^15);
set lat_deg2 = lat_deg + 180/(2^15);
set lon_deg3 = lon_deg - 180/(2^15);
set lat_deg3 = lat_deg - 180/(2^15);
set lon_deg4 = lon_deg + 180/(2^15);
set lat_deg4 = lat_deg - 180/(2^15);
set a1=concat(cast(lon_deg1 as char),' ',cast(lat_deg1 as char));
set a2=concat(cast(lon_deg2 as char),' ',cast(lat_deg2 as char));
set a3=concat(cast(lon_deg3 as char),' ',cast(lat_deg3 as char));
set a4=concat(cast(lon_deg4 as char),' ',cast(lat_deg4 as char));
set s = concat('POLYGON((',a3,',',a4,',',a2,',',a1,',',a3,'))');
set s1=concat('GEOMETRYCOLLECTION(POINT(',cast(lon as char),' ',cast(lat as char),'),',s,')');
RETURN s1;
END
當我直接執行
SELECT ST_GeomFromText(f_2(bgn_xtile, bgn_ytile, bgn_lon, bgn_lat)) from map;的時候,只能得到下圖顯示的圖形
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/28372.html
標籤:MySQL
