计算大量 GPS 坐标之间的成对路由距离
Posted
技术标签:
【中文标题】计算大量 GPS 坐标之间的成对路由距离【英文标题】:Calculating pairwise routing distances between a large number of GPS coordinates 【发布时间】:2018-08-08 08:17:48 【问题描述】:我有一个 Web 应用程序,其中每个用户都有 GPS 坐标 (SqlGeography)。到目前为止,我使用Distance
函数将两个 GPS 坐标之间的距离计算为欧几里得距离。
一些用户要求我用更真实的距离替换近似距离(根据航线距离)。我正在考虑使用特定的路由 API(例如,来自 Google、Here 或 Azure)来获得更真实的距离,例如开车时。
目前,我有大约 5000 个不同的 GPS 坐标,我想计算并存储所有这些对的成对距离。这将导致 5000 * 5000 个查询/请求,这是非常昂贵的。有没有什么办法可以通过我没有想到的技巧来降低二次复杂度?
【问题讨论】:
【参考方案1】:一些 API 可以选择在路线的起点和终点之间添加航路点/停靠点(即Sygic web API。
也许 Google 和 Co. 会做类似的事情。
响应包括legs
属性,表示从起点到航点1、wapoint1 到航点N、航点N 到航点结束...等的路线/持续时间。
"routes": [
"route": "oupjIaw|@^ErCUPELEf@@`A[nAjGlBnFfBtERl@~DdNdA~DdBjG|BhKfArELbAd@`EJdFKxF?rBVfKF~BFjH@jEChJC`DMtLCzEApB@bIRdOZlGdAtLr@tErAxGnIj\\fBnIrBxMr@|Gh@fHf@jJPvFDvAHxBBf@X|EA`Br@zLd@|Dz@hF`AzElBhIvClMnA|Ib@dGd@bKb@rYBbBJ|CDxGFjEx@tm@N`ID|CF`PStMI|B[`Hi@vIcA`KkC|PcBtIoBlIaF`RgN~c@oGpTqGrWaFtWyEd\\mAlKcBpQkBbX@~PcAlYG`CClAEdBAj@KdEe@z`@AlBCjDC|XJ~WTrTh@rWZ`Pf@tUTfK`@fQ|@d]v@|O|BpYhBpOrE`\\bC`RDZf@fEvBlULtBZfFJhBNxCBZn@xQ\\~TZb`@JxQ@jNO~PeAfa@mDzdAo@jOsArSmDx_@eAnKAlRs@zNg@rRChUB|ENzKZnR~B~tAvBthAv@nUtAdWbCl\\p[zbDrFhh@nDvZdB`Mb@~C|@xGrJ~n@fIzb@pBlJv@lDzAxGrDtOzEnQ|Rdr@|FzU|ArH|DfU~ArLx@xG^dDtBbQb@nDhAtIFf@\\`CZvBDXbAbHDXbBvKv@`E|BfJd@~BVlAJh@tA~Gb@tB\\~AtDbPrB~IxB~IzB`JvCdLzAdGjAvELb@Nn@|@xDR~@r@jDzAjI`@hCT~AhDbVF\\fAjIlBbOrAlKjAtIr@lFz@nG@JJv@v@`G`@|Cd@jDDhAJp@D^TzB@ZBpCStEYfB_@pAeAlCINo@~@oBbBoCrAaFfB_H`BsGhACh@gMrBBd@oAR_APyOlCwAVEdASF]JcErA_BXe@G]w@EsBNu@l@yBZe@j@]f@GjBTx@JXF@kApAc]ImEO_AWq@uAkAgAe@eCyA_CoDm@s@cA[eCM?mIYiBsAcEy@uBcAA]MeAGu@?e@VsEVw@Ho@JiBHwAEa@SaAKy@Cs@PuAlAc@r@sChECjFkA`DAbGIj@y@bEW`Ai@rAw@tA",
"eta": 1531834797,
"duration":
"value": 1713,
"text": "28 minutes 33 seconds"
,
"distance":
"value": 36430,
"text": "36.43 km"
,
"legs": [
"distance":
"value": 36430,
"text": "36.43 km"
,
"duration":
"value": 1713,
"text": "28 minutes 33 seconds"
,
"start_location":
"latitude": 54.32168,
"longitude": 10.12193
,
"end_location":
"latitude": 54.30731,
"longitude": 9.66195
,
"route": "oupjIaw|@^ErCUPELEf@@`A[nAjGlBnFfBtERl@~DdNdA~DdBjG|BhKfArELbAd@`EJdFKxF?rBVfKF~BFjH@jEChJC`DMtLCzEApB@bIRdOZlGdAtLr@tErAxGnIj\\fBnIrBxMr@|Gh@fHf@jJPvFDvAHxBBf@X|EA`Br@zLd@|Dz@hF`AzElBhIvClMnA|Ib@dGd@bKb@rYBbBJ|CDxGFjEx@tm@N`ID|CF`PStMI|B[`Hi@vIcA`KkC|PcBtIoBlIaF`RgN~c@oGpTqGrWaFtWyEd\\mAlKcBpQkBbX@~PcAlYG`CClAEdBAj@KdEe@z`@AlBCjDC|XJ~WTrTh@rWZ`Pf@tUTfK`@fQ|@d]v@|O|BpYhBpOrE`\\bC`RDZf@fEvBlULtBZfFJhBNxCBZn@xQ\\~TZb`@JxQ@jNO~PeAfa@mDzdAo@jOsArSmDx_@eAnKAlRs@zNg@rRChUB|ENzKZnR~B~tAvBthAv@nUtAdWbCl\\p[zbDrFhh@nDvZdB`Mb@~C|@xGrJ~n@fIzb@pBlJv@lDzAxGrDtOzEnQ|Rdr@|FzU|ArH|DfU~ArLx@xG^dDtBbQb@nDhAtIFf@\\`CZvBDXbAbHDXbBvKv@`E|BfJd@~BVlAJh@tA~Gb@tB\\~AtDbPrB~IxB~IzB`JvCdLzAdGjAvELb@Nn@|@xDR~@r@jDzAjI`@hCT~AhDbVF\\fAjIlBbOrAlKjAtIr@lFz@nG@JJv@v@`G`@|Cd@jDDhAJp@D^TzB@ZBpCStEYfB_@pAeAlCINo@~@oBbBoCrAaFfB_H`BsGhACh@gMrBBd@oAR_APyOlCwAVEdASF]JcErA_BXe@G]w@EsBNu@l@yBZe@j@]f@GjBTx@JXF@kApAc]ImEO_AWq@uAkAgAe@eCyA_CoDm@s@cA[eCM?mIYiBsAcEy@uBcAA]MeAGu@?e@VsEVw@Ho@JiBHwAEa@SaAKy@Cs@PuAlAc@r@sChECjFkA`DAbGIj@y@bEW`Ai@rAw@tA",
"eta": 1531834797
]
],
"status": "OK",
"copyright": "© 2018 Sygic a.s."
【讨论】:
以上是关于计算大量 GPS 坐标之间的成对路由距离的主要内容,如果未能解决你的问题,请参考以下文章