代码之家  ›  专栏  ›  技术社区  ›  citronas

计算大量gps坐标之间的成对路由距离

  •  1
  • citronas  · 技术社区  · 6 年前

    我有一个web应用程序,每个用户都有gps坐标(sqlgeography)。到现在为止,我用 Distance 功能。

    一些用户要求我用更真实的距离来代替近似的距离(在空气线距离方面)。我正在考虑使用特定的路由api(例如,来自google、here或azure)来获得更真实的距离,例如汽车旅行。

    目前,我有大约5000个不同的GPS坐标,我想计算并存储所有这些对的成对距离。这将导致5000*5000个查询/请求,这非常昂贵。有没有什么方法可以用我没想到的技巧来降低二次复杂度?

    1 回复  |  直到 6 年前
        1
  •  0
  •   nilsK    6 年前

    有些API可以选择在路线的起点和终点之间添加航路点/站点(即 Sygic web API .

    也许谷歌和co.也会做类似的事情。

    响应包括 legs 属性,表示从起点到航路点1、wapoint1到航路点n、航路点n到航路终点的航路/持续时间…等.

    {
        "routes": [
            {
                "route": "oupjIa}w|@^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_@eAnK}AlRs@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`BsGhA}Ch@gMrB}Bd@oAR_APyOlCwAV}EdASF]JcErA_BXe@G]w@EsBNu@l@yBZe@j@]f@GjBTx@JXF@kApAc]ImEO_AWq@uAkAgAe@eCyA_CoDm@s@cA[eCM?mIYiBsAcEy@uBcA}A]MeAGu@?e@VsEVw@Ho@JiBHwAEa@SaAKy@Cs@PuAlAc@r@sChE{CjFkA`D}AbGIj@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": "oupjIa}w|@^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_@eAnK}AlRs@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`BsGhA}Ch@gMrB}Bd@oAR_APyOlCwAV}EdASF]JcErA_BXe@G]w@EsBNu@l@yBZe@j@]f@GjBTx@JXF@kApAc]ImEO_AWq@uAkAgAe@eCyA_CoDm@s@cA[eCM?mIYiBsAcEy@uBcA}A]MeAGu@?e@VsEVw@Ho@JiBHwAEa@SaAKy@Cs@PuAlAc@r@sChE{CjFkA`D}AbGIj@y@bEW`Ai@rAw@tA",
                        "eta": 1531834797
                    }
                ]
            }
        ],
        "status": "OK",
        "copyright": "© 2018 Sygic a.s."
    }