欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql判斷在多邊形內

林玟書2年前8瀏覽0評論

MySQL是一種流行的關系型數據庫,它不僅可以存儲和管理大量的數據,還可以執行各種數據操作,如查詢、插入、更新和刪除。其中,判斷一個點是否在一個多邊形內是我們經常需要用到的操作之一。下面我們來看一下如何使用MySQL實現該功能。

-- 創建表格
CREATE TABLE `points` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`x` decimal(9,6) NOT NULL COMMENT 'x坐標',
`y` decimal(9,6) NOT NULL COMMENT 'y坐標',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='點表';
-- 創建多邊形表格
CREATE TABLE `polygons` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(50) NOT NULL COMMENT '多邊形名稱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='多邊形表';
-- 創建多邊形的點坐標表格
CREATE TABLE `polygon_points` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`polygons_id` bigint(20) NOT NULL COMMENT '多邊形ID',
`points_id` bigint(20) NOT NULL COMMENT '點ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='多邊形點表';
-- 插入一些點和多邊形數據
INSERT INTO `points` VALUES (1,113.261165,23.108677),(2,113.261203,23.108737),(3,113.260356,23.108267),(4,113.260462,23.10816);
INSERT INTO `polygons` VALUES (1,'多邊形1');
INSERT INTO `polygon_points` VALUES (1,1,1),(2,1,2),(3,1,3),(4,1,4);
-- 判斷點是否在多邊形內的函數
CREATE FUNCTION IsPointInPolygon(p_x decimal(9,6), p_y decimal(9,6), p_polygon_id bigint(20))
RETURNS int(11)
BEGIN
DECLARE p_count int DEFAULT 0;
SELECT COUNT(*)
INTO p_count
FROM polygon_points pp
INNER JOIN points p ON pp.points_id = p.id
WHERE pp.polygons_id = p_polygon_id AND (
(p.y< p_y AND (SELECT MAX(p2.y) FROM points p2 WHERE p2.y >p.y AND pp.polygons_id = p_polygon_id AND pp.points_id<>p.id AND ((p2.x - p.x) * (p_y - p.y) / (p2.y - p.y) + p.x)< p_x) >p_y) OR
(p.y >p_y AND (SELECT MIN(p2.y) FROM points p2 WHERE p2.y< p.y AND pp.polygons_id = p_polygon_id AND pp.points_id<>p.id AND ((p2.x - p.x) * (p_y - p.y) / (p2.y - p.y) + p.x)< p_x)< p_y));
IF (p_count % 2 = 1) THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END

在上面的代碼中,我們首先創建了三個表格,分別用于存儲點、多邊形和多邊形的點坐標。然后,我們向這三個表格中插入了一些數據。最后,我們定義了一個函數,該函數可以判斷一個點是否在一個多邊形內。該函數的實現基于射線法,具體可以參考網上的資料。接下來,我們可以使用該函數來判斷某個點是否在某個多邊形內。