gpt4 book ai didi

给定地理区域内的Mysql查询

转载 作者:行者123 更新时间:2023-11-30 01:15:28 25 4
gpt4 key购买 nike

我的数据库中的一个表包含许多邮政地址,这些地址也包含如下经度和纬度信息:

姓名 ---- 街道地址 -------- 邮政编码 ---- 经度 ---- 纬度

弗雷德 ---- 君主街 11 号 ----- 4114 ---------- 57.317715 ---- 10.154355

巴尼 - 4 统治街 -------- 4114 ------------ 56.151112 ---- 10.087925

我有一个给定的区域(通过谷歌地图获取的 kml 坐标),定义如下:

        12.548740,55.694469,0.000000
12.541320,55.687840,0.000000
12.537410,55.690552,0.000000
12.535310,55.694641,0.000000
12.534499,55.695293,0.000000
12.535787,55.696625,0.000000
12.538100,55.696911,0.000000
12.543890,55.697659,0.000000
12.548740,55.694469,0.000000

我使用什么 mysql 查询来查找位于该区域内的地址?

最佳答案

我不知道任何 MySQL 查询。

在此Answer我使用 PHP 函数来查找一个点是否在多边形(4 个点)中。该函数基于 C 代码 Point in Polygon作者:达雷尔·雷克斯·芬利

您可以将其用于 8 点多边形。

$polySides  = 8; //how many corners the polygon has
$polyX = array(12.548740,12.541320,12.537410,12.535310,12.534499,12.535787,12.538100,12.543890,12.548740);//horizontal coordinates of corners
$polyY = array(55.694469,55.687840,55.690552,55.694641,55.695293,55.696625,55.696911,55.697659,55.694469);//vertical coordinates of corners
$x = 12.548740;
$y = 55.694469;//Inside
//$y = 12.528740;//Outside

function pointInPolygon($polySides,$polyX,$polyY,$x,$y) {
$j = $polySides-1 ;
$oddNodes = 0;
for ($i=0; $i<$polySides; $i++) {
if ($polyY[$i]<$y && $polyY[$j]>=$y
|| $polyY[$j]<$y && $polyY[$i]>=$y) {
if ($polyX[$i]+($y-$polyY[$i])/($polyY[$j]-$polyY[$i])*($polyX[$j]-$polyX[$i])<$x) {
$oddNodes=!$oddNodes; }}
$j=$i; }

return $oddNodes; }


if (pointInPolygon($polySides,$polyX,$polyY,$x,$y)){
echo "Is in polygon!";
}
else echo "Is not in polygon";

您可以循环遍历数据库,将 lat,lng 插入函数中。

如果数据库很大,您可以创建一个包含 North_west 和 South_east 的边界框坐标来限制函数要过滤的数据。

$sql = "SELECT lat,lng FROM `table` WHERE (lng BETWEEN '$west_lng' AND '$east_lng') AND (lat BETWEEN '$north_lat' AND '$south_lat')";

另一个解决方案是使用 mysql spatial extension

关于给定地理区域内的Mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com