我是iOS上的应用程序,它有Trip Planner。 例如,我使用谷歌方向API来从纽约到波士顿的路线。 我有50种不同的纬度经度来在地图上制作折线。 在那之后,我需要在这条路线上找到我可以在前往波士顿的途中参观的地方。
Google Directions API给了我:
latitude = "30.308399"; longitude = "-89.748299";
latitude = "30.310930"; longitude = "-89.818604";
latitude = "30.350050"; longitude = "-89.916054";
latitude = "30.432850"; longitude = "-90.098549";
....
现在,我在mysql数据库中搜索每个点以获得最近的位置:
选择 ID,标题,TYPE_ID,service_id为,纬度,经度,州,城市,邮编,地址, (3959 * acos(cos(弧度(31.72723))* cos(弧度(纬度))* cos(弧度(经度) - 弧度(-106.3047))+ sin( 弧度(31.72723))* sin(弧度(纬度))))距离的距离 距离< = 10级距离ASC限制10
但是如果这次从纽约到旧金山的旅行,我将获得800分,我将对数据库进行800次查询,总共花费超过2秒。而且我有7个不同的表,它将是14秒。
如果最好做什么?
答案 0 :(得分:2)
这是让它更快的一种方法:
(1)将表中的索引放入纬度和经度。
(2)在查询中,首先仅选择路线上点的水平和垂直距离内的那些位置,足够接近有趣。按纬度范围和经度范围选择。
(3)然后在查询内部或外部按距离对这些点进行排序。
答案 1 :(得分:1)
我最好建议这是Voronoi diagram。但很难实现。
备注:强> 由于您只有80k点,您可以在应用程序中缓存所有这些点并从应用程序所需的点返回。
答案 2 :(得分:-1)
尝试加入最小距离条款,其中Diatance> 100等。
这称为锥形扫描。你从一个低分辨率开始,然后随着你越来越近而不断增加。