我有一个拥有纬度和经度字段的实体。
现在我有一个地址,我知道这个地址的纬度和经度,我想要在3英里内检索记录。
如何使用FetchXML进行操作?
答案 0 :(得分:2)
您将无法通过FetchXml直接执行此操作,因为地理编码不是作为功能提供的。
这意味着您需要手动开始滚动,这并不容易。 This site可以很好地概述您需要做什么(即使语言与您可能使用CRM的语言不同)。
一个选项可能是放宽您的要求,只需使用FetchXml查找经度+/- 1.5英里和纬度+/- 1.5英里的记录(当然查询形状类似的区域一个正方形而不是一个半径。)
如果您需要更严格,可以尝试重写以下 MySQL (即不是MSSQL!)查询并将其与某种QueryExpression一起使用?因此,例如,一个查询表达式,用于确定粗略的数据子集,如上所述(例如,经度和纬度为1.5英里的中心点),然后在返回这些结果后,为每个结果计算它是否落在所需的半径范围内...
SELECT id, X(gm_coor) AS latitude, Y(gm_coor) AS longitude,
ATAN2(
SQRT(
POW(COS(RADIANS(__LAT__)) *
SIN(RADIANS(Y(gm_coor) - __LNG__)), 2) +
POW(COS(RADIANS(X(gm_coor))) * SIN(RADIANS(__LAT__)) -
SIN(RADIANS(X(gm_coor))) * COS(RADIANS(__LAT__)) *
COS(RADIANS(Y(gm_coor) - __LNG__)), 2)),
(SIN(RADIANS(X(gm_coor))) * SIN(RADIANS(__LAT__)) +
COS(RADIANS(X(gm_coor))) * COS(RADIANS(__LAT__)) *
COS(RADIANS(Y(gm_coor) - __LNG__)))
) * 6372.795 AS distance
FROM geocoded
HAVING distance < [RANGE IN KILOMETRES]
答案 1 :(得分:0)
我可以想到两个选择
1)使用SQL中的过滤视图并计算大圆距离公式。这是最干净的方式,但不是提取。
2)在+/- .02范围内获取所需结果的lat / lng的所有结果。然后使用大圆距离公式(和javascript)来磨练你想要的项目。因此,在这种情况下,Fetch将返回一些额外的结果(但将排除多数),然后JavaScript将过滤剩余的结果。
选项#2效果很好,但是是2传球方法。