Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找坐标是否在区域中_Php_Arrays_Coordinates - Fatal编程技术网

Php 查找坐标是否在区域中

Php 查找坐标是否在区域中,php,arrays,coordinates,Php,Arrays,Coordinates,我正在为突发事件的紧急护理构建这个工具,我陷入了一个问题。我有这张地图,如果某个团队在他们的区域内发生了什么事情,有一些区域标记为某个团队可以进行干预 现在,在创建干预时,可以在地图x、y上输入坐标。我想知道我该怎么做 团队的区域不一定是正方形。我把它们像这样储存起来 x1,y1,x2,y2,x3,y3,x,y 你认为最好的做法是什么 添加4个字段,start_x、end_x、start_y和end_y,然后执行SELECT*FROM tble,其中start_x和end_x之间的坐标_x查询以

我正在为突发事件的紧急护理构建这个工具,我陷入了一个问题。我有这张地图,如果某个团队在他们的区域内发生了什么事情,有一些区域标记为某个团队可以进行干预

现在,在创建干预时,可以在地图x、y上输入坐标。我想知道我该怎么做

团队的区域不一定是正方形。我把它们像这样储存起来

x1,y1,x2,y2,x3,y3,x,y

你认为最好的做法是什么

添加4个字段,start_x、end_x、start_y和end_y,然后执行SELECT*FROM tble,其中start_x和end_x之间的坐标_x查询以获取x侧,y侧也是如此。 像上面那样做,但是不要添加字段,只需在PHP代码中这样做,在每个团队区域中运行 你的解决方案?
提前感谢:

您应该将每个区域划分为三角形。然后,您可以使用此处提到的方法:

像这样,你不必把你的头绕在复杂的形状上,这些形状的边和角是多个的——因为每个有有限个角的形状都可以分成三角形

另一种可能的方法:

假设您在任何事件发生之前定义了形状。假设这些形状在可能的时间内不发生变化:

以与HTML地图标记兼容的格式存储形状,并将其与负责以下事项的团队关联: 当记者创建事件时,不要使用坐标来确定团队,而是使用他在定义的地图上单击的形状。这样就不必解析任何点/区域边界。
如果可以使用PostgreSQL/PostGIS,则可以使用“多边形几何体”列定义分区。然后,使用PostGIS功能使用点坐标选择分区是很简单的

MySQL中存在与相同的功能。 下面是MySQL的一个例子

EDIT:一个快速的Mysql实现

CREATE TABLE `geozones` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50) NULL DEFAULT NULL,
    `geom` GEOMETRY NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

insert into geozones (name, geom) 
VALUES ('test', GeomFromText('Polygon((46 -123, 48 -123, 48 -121, 46 -121, 46 -123))') );

select name from geozones where Contains(geom, GeomFromText('POINT(47 -122)'));

如果您不能/不愿意使用上述任何一项,那么我没有使用的一个可能的替代方案是GitHub上的这个项目。根据Wiki,它支持应该执行的contains操作

嘿,是的,图像地图是一种方法,但也可以从“创建干预”字段中的列表中选择一个位置,然后它应该给出最近的团队-因此对于此图像地图不起作用-但从地图图像地图中选择是完美的!谢谢:D@JELLEJ嗯,这些位置也需要定义——如果您使用x=324、y=24t53或relatedShape=blueTeam预定义它们——应该没关系,除非您可以在更改形状时重用定义的位置n……谢谢!好主意:我选择了你的解决方案作为我的解决方案。谢谢谢谢我可能会在以后的软件更新中使用它