FetchXML - 按距离搜索GeoCode距离

时间:2012-06-18 05:31:58

标签: dynamics-crm geocoding dynamics-crm-2011 fetchxml

我有一个拥有纬度和经度字段的实体。

现在我有一个地址,我知道这个地址的纬度和经度,我想要在3英里内检索记录。

如何使用FetchXML进行操作?

2 个答案:

答案 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传球方法。

http://www.meridianworlddata.com/Distance-Calculation.asp