我正在尝试生成我的城市、州查找值 50 英里半径内的美国附近取货地点列表。我在表 A 中记录了纬度和经度,在表 B 中列出了美国城市的纬度和经度。我已经找到了使用固定起始位置作为距离半径的测量公式,但我无法找到适用于动态起始位置的公式。我的起始位置是城邦查找值。
我已经尝试过这个措施 `= var Lat1 = MIN('tableB'[lat]) var Lng1 = MIN('tableB'[lng])
var Lat2 = MIN('tableA'[lat])
var Lng2 = MIN('tableA'[lng])
var P = DIVIDE( PI(), 180 )
var A = 0.5 - COS((Lat2-Lat1) * p)/2 +
COS(Lat1 * p) * COS(lat2 * P) * (1-COS((Lng2- Lng1) * p))/2
var final = 12742 * ASIN((SQRT(A)))
return final`
这只是返回总距离,而不是每个位置的距离
我已经尝试过这个计算列
= ACOS(SIN('tableA'[PICKUP_LAT]*PI()/180) * SIN('tableA'[DELIVERY_LAT]*PI()/180) + COS('tableA'[PICKUP_LAT]*PI()/180) * COS('tableA'[DELIVERY_LAT]*PI()/180) *COS('tableA'[DELIVERY_LON]*PI()/180-'tableA'[PICKUP_LON]*PI()/180)) * 3959
这是我在认为起始位置应该基于单独的表之前尝试过的方法。
以下是我建议采取的步骤的摘要:
1。创建一个仅包含切片器使用的位置的表。
Locations = DISTINCT('Table'[Location])
2。创建一个度量来计算距离。
HaversineDistance =
VAR __FromCity = SELECTEDVALUE(Locations[Location])
VAR __ToCity = SELECTEDVALUE('Table'[Location])
VAR __FromLat = LOOKUPVALUE('Table'[Latitude],'Table'[Location],__FromCity)
VAR __ToLat = LOOKUPVALUE('Table'[Latitude],'Table'[Location],__ToCity)
VAR __FromLong = LOOKUPVALUE('Table'[Longitude],'Table'[Location],__FromCity)
VAR __ToLong = LOOKUPVALUE('Table'[Longitude],'Table'[Location],__ToCity)
VAR __distanceLong = RADIANS(__ToLong - __FromLong)
VAR __distanceLat = RADIANS(__ToLat - __FromLat)
VAR __a = (SIN(__distanceLat/2))^2 + COS(RADIANS(__FromLat)) * COS(RADIANS(__ToLat)) * SIN((__distanceLong/2))^2
VAR __y = SQRT(__a)
VAR __x = SQRT(1 - __a)
VAR __atan2 =
SWITCH(
TRUE(),
__x > 0, ATAN(__y/__x),
__x < 0 && __y >= 0, ATAN(__y/__x) + PI(),
__x < 0 && __y < 0, ATAN(__y/__x) - PI(),
__x = 0 && __y > 0, PI()/2,
__x = 0 && __y < 0, PI()/2 * (0-1),
BLANK()
)
VAR __c = 2 * __atan2
VAR earthRadius = 3958.8 -- Earth's radius in miles; use 6371 for kilometers
RETURN
__c * earthRadius
来源:链接
3.将测量添加到表中并按小于或等于 50 英里进行筛选。
模拟数据:
地点 | 纬度 | 经度 |
---|---|---|
纽约州纽约 | 40.7128 | -74.0060 |
宾夕法尼亚州费城 | 39.9526 | -75.1652 |
新泽西州纽瓦克 | 40.7357 | -74.1724 |
康涅狄格州斯坦福 | 41.0534 | -73.5387 |
新泽西州特伦顿 | 40.2171 | -74.7429 |
宾夕法尼亚州阿伦敦 | 40.6084 | -75.4902 |
新泽西州新不伦瑞克省 | 40.4862 | -74.4518 |
纽约州扬克斯 | 40.9312 | -73.8988 |
纽约州怀特普莱恩斯 | 41.0330 | -73.7629 |
新泽西州普林斯顿 | 40.3573 | -74.6672 |