大家好,
我需要一种方法来解决以下问题。
输入:
输出
这是我到目前为止所能想到的:
n.b。显然,我将在一个单独的线程上计算每个新路径。
n.b.b。这只是"基本思想",在这个解决方案中存在很多问题,我没有表现出希望简化它,例如,边界需要具有适当的大小一定要包括所有候选人的观点。
由于有很多要点,我想以最有效的方式进行搜索,我想听听你的一些建议,以改善我的解决方案,或者用更好的东西彻底改变它。 / p>
感谢您的时间,如果您想要澄清,请发表评论。
答案 0 :(得分:0)
由于似乎没有人解决(或者可能理解XD)我的问题,我会写下我自己刚刚完成的事情。
基本上我使用了我在问题上发布的相同解决方案,但在这个答案中,我将解释我在实施过程中发现的一些问题,希望有一天会有人发现这个问题很有用。
所以,算法是这样的:
在较小的数组中分解路径数组。每个阵列都有一个总距离,我试着保持不到4公里。如果两个后续点距离超过4公里,则它们将仅在阵列中。要计算使用Location.distanceBetween库的2个LatLng点之间的距离。
对于每个新路径,计算相关区域的边界。要计算边界,表示为SouthOvest边界和NorthEast边界,我只需要检查数组中的所有点并保存纬度和经度的最低点和最大值。要包括路径附近但超出界限的点数,我只需将500米减去SouthOvest纬度和经度,并向NorthEast纬度和经度增加500米,有关如何执行此操作的更多信息here。
对每个路径区域中的所有点进行数据库查询。因为我选择运行所有"小路径"在不同的线程上我使用SQLite时遇到了一些麻烦,没什么太难的,你只需要了解getReadableDatabase是如何工作的,更多信息here。
计算所有结果点与之间的距离 相对领域的细分市场。没有什么困难,需要计算每个点和小路径的每个段的距离点段。有关如何使用LatLng点here
选择较小的一个。当线程停止时,主线程获取所有结果,删除任何副本(只是为了解决问题中提到的交叉区域的可能性)。