Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

v-rzhou-msft

如何计算两个位置之间的距离

基本场景 

当我们想要计算两个位置之间的距离时,我们需要知道这两个位置的坐标。

以下是示例数据: 

vrzhoumsft_0-1731999820847.png

 

我们现在拥有当前位置和目的地的坐标,使用以下的公式我们可以得到这些位置之间的距离。

 

距离 (千米) = 

12742 -- 地球的直径 (千米). 

    * ASIN ( 

        -- 返回一个数字的反正弦值. 

        SQRT ( 

            --返回一个数字的平方根. 

            POWER ( 

                -- 返回一个数字的幂. 

                SIN ( -- 返回给定角度的正弦值. 

                '表'[当前纬度] - '表'[目的地纬度] ) 

                    * PI () / 360, 

                2 

            ) -- PI () 返回π的值, 3.14159265358979, 精确到15位. 

                + COS ( -- 返回给定角度的余弦值. 

                    '表'[当前纬度] * PI () / 180 ) 

                    * COS ( '表'[目的地纬度] * PI () / 180 ) 

                    * POWER ( SIN ( '表'[当前经度] - '表'[目的地经度] ) * PI () / 360, 2 ) 

        ) 

    ) 

 

结果如下:

vrzhoumsft_1-1731999862655.png

参考文献: 

https://learn.microsoft.com/zh-cn/dax/sqrt-function-dax 

https://learn.microsoft.com/zh-cn/dax/asin-function-dax 

https://learn.microsoft.com/zh-cn/dax/power-function-dax 

https://learn.microsoft.com/zh-cn/dax/sin-function-dax 

https://learn.microsoft.com/zh-cn/dax/cos-function-dax 

https://learn.microsoft.com/zh-cn/dax/pi-function-dax 

 

高级场景: 

现在我们有两张表。 

客户表包含一些客户的坐标。 

vrzhoumsft_0-1731999995438.png

 

商店表包含一些商店的坐标。 

vrzhoumsft_1-1731999995438.png

 

通过灵活使用上述计算距离的公式,我们可以得到每个用户最近的商店,也可以得到每个用户到最近商店的距离。

最近的商店 = 

CALCULATE ( 

    FIRSTNONBLANK ( '商店'[商店], 0 ), 

    TOPN ( 

        1, 

        '商店', 

        12742 

            * ASIN ( 

                SQRT ( 

                    POWER ( SIN ( '客户'[纬度] - '商店'[纬度] ) * PI () / 360, 2 ) 

                        + COS ( '客户'[纬度] * PI () / 180 ) 

                            * COS ( '商店'[纬度] * PI () / 180 ) 

                            * POWER ( SIN ( '客户'[经度] - '商店'[经度] ) * PI () / 360, 2 ) 

                ) 

            ), ASC 

    ) 

) 
到最近商店的距离(千米) = 

MINX ( 

    '商店', 

    12742到最近商店的距离(千米) =  

MINX ( 

    '商店', 

    12742 

        * ASIN ( 

            SQRT ( 

                POWER ( SIN ( '客户'[纬度] - '商店'[纬度] ) * PI () / 360, 2 ) 

                    + COS ( '客户'[纬度] * PI () / 180 ) 

                        * COS ( '商店'[纬度] * PI () / 180 ) 

                        * POWER ( SIN ( '客户'[经度] - '商店'[经度] ) * PI () / 360, 2 ) 

            ) 

        ) 

) 

        * ASIN ( 

            SQRT ( 

                POWER ( SIN ( '客户'[纬度] - '商店'[纬度] ) * PI () / 360, 2 ) 

                    + COS ( '客户'[纬度] * PI () / 180 ) 

                        * COS ( '商店'[纬度] * PI () / 180 ) 

                        * POWER ( SIN ( '客户'[经度] - '商店'[经度] ) * PI () / 360, 2 ) 

            ) 

        ) 

) 

结果如下:

vrzhoumsft_2-1732000078158.png

 

作者:王杰

审核:Kerry Wang & Ula Huang

翻译:祝心如