Php 搜索城市内及其周围半径内的地方

Php 搜索城市内及其周围半径内的地方,php,mysql,geolocation,gis,distance,Php,Mysql,Geolocation,Gis,Distance,我试图找出如何在城市内和城市周围的半径范围内搜索位置。我已经有了一张关于城市的表格: 城市表: id:INT 姓名:VARCHAR(20) lat:浮动 液化天然气:浮子 我还有一张有位置的桌子 位置表: id:INT 城市标识:INT 姓名:VARCHAR(30) lat:浮动 液化天然气:浮子 通常,城市的坐标表示其中心。这没关系,因为当我搜索特定城市的位置时,我可以使用位置表中的城市id。然而,当我在城市周围半径范围内搜索时,结果不会非常准确。如果这个城市相对较小,这就不会成为问题

我试图找出如何在城市内和城市周围的半径范围内搜索位置。我已经有了一张关于城市的表格:

城市表:

id:INT
姓名:VARCHAR(20)
lat:浮动
液化天然气:浮子

我还有一张有位置的桌子

位置表:

id:INT
城市标识:INT
姓名:VARCHAR(30)
lat:浮动
液化天然气:浮子

通常,城市的坐标表示其中心。这没关系,因为当我搜索特定城市的位置时,我可以使用
位置
表中的城市id。然而,当我在城市周围半径范围内搜索时,结果不会非常准确。如果这个城市相对较小,这就不会成为问题。但是,如果城市很大,搜索范围是城市周围10公里,那么结果很可能只针对城市本身

我的问题是,如何处理这种情况,以便结果更准确

我想的是在
城市
表中存储每个城市的直径(覆盖城市的领土)。当我搜索城市周围的地方时,我会首先取目标城市的半径(我们称之为
cityRadius
)。然后我将它添加到搜索半径中(比如说
searchedRadius=10
)。然后我会执行一个查询,搜索市中心周围
cityRadius+searchedRadius
半径范围内的位置。 我对此有两个问题:

  • 我找不到这种类型的信息(半径覆盖城市的领土,特别是德国的城市)
  • 感觉有点不舒服。我认为有更好的方法,但我在找到它时遇到了一个问题
  • 我的堆栈是:PHP7.2,Mysql 5.7


    提前谢谢

    一,。使用
    数据类型和
    空间
    索引。2.获取将城市边界定义为多边形的地图数据,并将其存储为
    多边形
    类型。3.使用GIS功能@Sammitch谢谢,我已经读过了,多边形如何帮助我在半径范围内搜索?你可以在表示城市边界的多边形内搜索,也可以在距离多边形X距离处搜索点,或者最基本的是能够使用空间索引和GIS功能来更有效地进行半径搜索。@Sammitch I肯定会使用空间索引和GIS功能。但是,我在理解如何在多边形周围执行半径搜索时遇到问题?您可以让用户设置任意点[通过位置搜索、邮政编码查找或单击地图],并指定半径和/或其他条件。我可以想象,无论使用何种方法,这将返回更相关的结果。