php-输入起点和终点地理位置(经纬度),并从数据库(mysql)中搜索输入的起点和终点之间有多少地方?

php-输入起点和终点地理位置(经纬度),并从数据库(mysql)中搜索输入的起点和终点之间有多少地方?,第1张

概述我很困惑,也很疲倦地闲逛以找到上述技巧.实际上,我有一个数据库表,其中包含六个字段id,Sratlatitude,Startlongitude,EndLatitude,EndLongitude和用户名.现在我想在数据库中查询SELECT*FROMLOCATIONS(tablename)WHEREUSERSBETWEENSTARTINGPOINT(InputedStartlatitudeand

我很困惑,也很疲倦地闲逛以找到上述技巧.实际上,我有一个数据库表,其中包含六个字段ID,Sratlatitude,Startlongitude,EndLatitude,EndLongitude和用户名.现在我想在数据库中查询

SELECT * FROM LOCATIONS(table name) WHERE USERS BETWEEN STARTING POINT(inputedStartlatitude and inputedStartlongitude) AND ENDING POINT(inputedEndlatitude and inputedEndlongitude);

例如:USERXXX输入的起点(inputdStartlatitude = 18.9647和inputdStartlongitude = 72.8258)=孟买和终点(inputedEndlatitude = 18.9647 and inputedEndlongitude = 72.8258)= Delhi.现在,他想使用Inutelatitudes和inputdlongitudes在此输入路线(行驶方向)之间搜索多少个USERS.搜索查询将触发MysqL数据库,并从存储的孟买到德里之间的起始纬度和经度进行比较.

我已经找到一种解决方案,例如对数据库进行查询:

SELECT * FROM lOCATIONS(tablename) WHERE (inputStartLatitude >= StartLatitude and IntartLongitude >= StartLong) and (inputEndLatitude <= EndLatitude and InuteEndLongitude <= EndLongitude);

但是我在上面的查询中遇到了一些问题.
以下是一些地方的坐标.请看看:

起始和结束坐标为红色.起始位置是:波潘达尔,终点是:孟买.现在的问题是,当我试图搜索波班达尔与孟买之间的城市时,由于我的查询,并非所有城市都位于行驶方向上.我仅在查询中称呼那些城市,它们比开始时的纬度和经度长多少而在开始时小于结束的纬度和经度长多少.但是这里的孟买纬度和经度几乎不及所有城市.那么我该如何进行正确的搜索查询呢?
希望我能很好地解释上述情况.

任何回应对我都会非常有帮助.
    我在客户端使用PHP-MysqL作为后端和androID.

解决方法:

您的问题可能是,如果起始值高于终止值,则搜索表达式将无法正常工作.您必须先对边界值进行排序,然后再将它们与表字段进行比较.

这是一个始终有效的查询-无论您的开始位置是结束位置的东边还是西边(以及北边还是南边).为了方便起见,我使用MysqL的BETWEEnoperator代替了> =和< =,但是此查询的主要细节是使用LEAST和GREATEST运算符对边界值进行了排序:

SELECT *   FROM `locationtable`   WHERE  ( `lat` BETWEEN LEAST(inputStartLatitude, inputEndLatitude) AND GREATEST(inputStartLatitude, inputEndLatitude) )    AND    ( `long` BETWEEN LEAST(inputStartLongitude, inputEndLongitude) AND GREATEST(inputStartLongitude, inputEndLongitude) );

希望这就是您想要的.

编辑:

在指定了“之间”的真正含义之后,很明显,您首先必须考虑一种算法来解决您的任务-在考虑该算法(在MysqL或其他地方)的实现之前很久.

这是我将如何解决您的难题的简要速览:

>获取所请求的游乐设施以及所有提供的游乐设施的Google驾车路线.
>这些行驶方向包含“阶梯”(请参见Maps API),这些阶梯基本上是经计算出的行程都经过的经纬度列表.您将必须将所有提供的游乐设施的行车路线存储在数据库中,因为您将一再需要它们来检查每个新请求的游乐设施.
>现在最基本的魔术就是找到请求的骑行步骤是否是数据库中任何提供的骑行步骤的子集.不幸的是,情况几乎不会如此,因为所请求的行程的第一英里和最后一英里总是非常特定于请求者的位置(例如,从他的家到下一条高速公路的道路).因此,您必须在此处实现一些容忍度.您可以通过多种方法来做到这一点.让我举两个例子:

a)您可以尝试查找所请求的旅程与所提供的旅程共有哪些步骤,而不是检查所请求的旅程是否完全包含在所提供的旅程中(上述情况从未发生).从结果中得出最长的结果(步骤数最多).可以“按原样”将最长的时间提供给请求者-这是针对其请求的最佳可用解决方案.查找共同的子部分可以通过以下步骤完成:1.)在请求的行驶方向和提供的任何行驶方向上寻找第一个共同的经纬度坐标; 2.从那里开始计算两个行驶方向相同的所有其他步骤.由于您必须将请求的游乐设施与所有提供的游乐设施相匹配,因此找到第一个共同的经纬度坐标的过程确实非常昂贵!

b)另一个容忍算法(更简单,更便宜)是首先丢弃仅覆盖短距离的所有行驶方向(乘车请求和乘车要约)的起点和终点的所有步骤.这些步骤很可能是在来往下一高速公路的本地驾驶.然后,您可以直接匹配缩短的列表,而无需进一步容忍.如果(缩短的)请求完全包含在任何(缩短的)报价中,则该报价很受欢迎.这样做很便宜.如果创建聪明的数据表示,您甚至可以在MysqL中做到这一点.例如,您可以在简化列表中创建所有纬度/经度对的字符串表示形式,并检查数据库中是否包含所提供游乐设施的完整游乐设施(使用MysqL的liKE’%string%’模式匹配).

我希望这可以阐明您的问题,并使您走上正确的道路.

总结

以上是内存溢出为你收集整理的php-输入起点和终点地理位置(经纬度),并从数据库(mysql)中搜索输入的起点和终点之间有多少地方?全部内容,希望文章能够帮你解决php-输入起点和终点地理位置(经纬度),并从数据库(mysql)中搜索输入的起点和终点之间有多少地方?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1086171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存