要根據(jù)經(jīng)緯度判斷一個坐標是否在一個多邊形區(qū)域內,MySQL提供了幾種函數(shù)來處理地理空間數(shù)據(jù),其中包括用于處理多邊形區(qū)域的函數(shù)。
1.創(chuàng)建一個包含多邊形區(qū)域的表:
首先,創(chuàng)建一個表來存儲多邊形區(qū)域??梢允褂?code>ST_GeomFromText函數(shù)將多邊形的坐標轉換為地理空間對象。我們給他插入兩條數(shù)據(jù),默認id第一條為1,第二條id為2。在下邊創(chuàng)建表的SQL語句中,大寫的'POLYGON'是一個函數(shù),用于創(chuàng)建一個地理空間對象,表示一個多邊形。這個函數(shù)需要傳入一個坐標集,該坐標集定義了多邊形的頂點。在下邊SQL中,'POLYGON((0 0, 0 100, 100 100, 100 0, 0 0))'創(chuàng)建了一個四邊形,它的頂點坐標分別是(0,0),(0,100),(100,100)和(100,0),最后回到原點(0,0)。
CREATE TABLE polygon_table (
id INT AUTO_INCREMENT PRIMARY KEY,
polygon GEOMETRY NOT NULL
);
INSERT INTO polygon_table (polygon) VALUES
(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'));
INSERT INTO polygon_table (polygon) VALUES
(ST_GeomFromText('POLYGON((0 0, 0 100, 100 100, 100 0, 0 0))'));
2.創(chuàng)建一個包含要檢查坐標點的表:
創(chuàng)建一個表來存儲你要檢查的坐標,也給他插入兩條數(shù)據(jù),id為1和2
CREATE TABLE coordinate_table (
id INT AUTO_INCREMENT PRIMARY KEY,
coordinate GEOMETRY NOT NULL
);
INSERT INTO coordinate_table (coordinate) VALUES
(ST_GeomFromText('POINT(5 5)'));
INSERT INTO coordinate_table (coordinate) VALUES
(ST_GeomFromText('POINT(12 14)'))
3.使用ST_Within函數(shù)檢查坐標是否在多邊形區(qū)域內
我們可以使用ST_Within
函數(shù)來檢查一個坐標是否在一個多邊形區(qū)域內。這個函數(shù)返回1表示坐標在多邊形區(qū)域內,返回0表示不在。下面是一個示例查詢,可以判斷coordinate_table表中id為2的點位是否在polygon_table表中id為1的區(qū)域范圍內:
SELECT ST_Within(c.coordinate, p.polygon) AS within_polygon
FROM coordinate_table c
JOIN polygon_table p ON c.id = 2 AND p.id = 1;
?如果要查詢的坐標點沒有存儲在表中,而是通過參數(shù)的方法傳入,想要確認傳入的坐標點是否在多邊形區(qū)域內,我們也可以通過以下方式來查詢,結果同樣返回1表示坐標在多邊形區(qū)域內,返回0表
示不在。
SELECT ST_Within(ST_GeomFromText('POINT(5 11)'), polygon) AS within_polygon
FROM polygon_table
WHERE id = 1;
?4.使用ST_Within函數(shù)檢查坐標是否在圓形區(qū)域內
SELECT *
FROM coordinate_table
WHERE ST_Distance(coordinate, POINT(lng, lat)) < 3
AND ST_Within(POINT(lng, lat), ST_Buffer(coordinate, 3))
?這個查詢會返回所有的距離給定坐標點小于3公里且在給定坐標點的3公里圓形區(qū)域內的記錄
?5.查詢GEOMETRY 類型的值
注意,如果用普通的方式查詢GEOMETRY 類型的值,結果將是亂碼的值,所以需要將類型轉換一下才可以變成我們可讀的類型
SELECT
ST_AsText(polygon) as polygon
FROM
table_name
6.mapper.xml中,插入坐標的SQL寫法
mapper.xml文件中,可以在mapper.xml中按照以下方式編寫:文章來源:http://www.zghlxwxcb.cn/news/detail-712514.html
<mapper namespace="com.example.demo.mapper.PolygonMapper">
<insert id="insertPolygon" parameterType="java.lang.String">
INSERT INTO polygon_table (polygon) VALUES (ST_GeomFromText('#{polygon}'))
</insert>
</mapper>
其中,#{polygon} 的數(shù)據(jù)類型我們可以使用String類型來傳入文章來源地址http://www.zghlxwxcb.cn/news/detail-712514.html
到了這里,關于mysql如何實現(xiàn)根據(jù)經(jīng)緯度判斷某一個坐標是否在一個多邊形區(qū)域范圍內的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!