-->

FetchXML - 按距离地理编码搜索距离(FetchXML - GeoCode Distanc

2019-09-18 05:35发布

我有一个具有经度和纬度领域的实体。

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

如何使用FetchXML办呢?

Answer 1:

你将不能够直接通过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]


Answer 2:

我能想到的副手两个选项

1)使用SQL内部的过滤视图和计算大圆距离计算公式。 这是最彻底的方法,但不取。

2)获取所有的结果在+/- 0.02的期望点的纬度/经度。 然后用大圆距离公式(和JavaScript)来磨练你想要的物品。 因此,在这种情况下,获取是否会返回一些额外的结果(但将排除大部分),然后用JavaScript过滤剩余。

方案2的伟大工程,但它是一个2个回合方法。

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



文章来源: FetchXML - GeoCode Distance search by distance