-4

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

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

如何使用 FetchXML 做到这一点?

4

2 回答 2

2

您将无法直接通过 FetchXml 执行此操作,因为地理编码不作为一项功能提供。

这意味着你需要开始用手滚动一些东西,这并不容易。这个网站很好地概述了您需要做什么(即使语言与您可能用于 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]
于 2012-06-18T10:12:58.680 回答
0

我可以想到两个选项

1)使用SQL中的过滤视图并计算大圆距离公式。这是最干净的方式,但不是获取。

2) 获取所需点的 lat/lng +/- .02 范围内的所有结果。然后使用大圆距离公式(和 javascript)来磨练你想要的项目。所以在这种情况下,Fetch 将返回一些额外的结果(但会排除大多数),然后 JavaScript 将过滤剩余的结果。

选项 #2 效果很好,但是是 2 次通过的方法。

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

于 2012-06-21T17:49:47.597 回答