Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm FetchXML-按距离进行地理编码距离搜索_Dynamics Crm_Geocoding_Dynamics Crm 2011_Fetchxml - Fatal编程技术网

Dynamics crm FetchXML-按距离进行地理编码距离搜索

Dynamics crm FetchXML-按距离进行地理编码距离搜索,dynamics-crm,geocoding,dynamics-crm-2011,fetchxml,Dynamics Crm,Geocoding,Dynamics Crm 2011,Fetchxml,我有一个实体,它有纬度和经度字段 现在我有一个地址,我知道这个地址的纬度和经度,我想检索3英里内的记录 如何使用FetchXML实现这一点?您无法通过FetchXML直接实现这一点,因为地理编码并不是一项功能 这意味着你需要开始用手滚动一些不容易的东西。对您需要做的事情有一个很好的概述(即使语言与您可能使用的CRM不同) 一种选择可能是放宽您的要求,只需使用FetchXml查找经度+/-1.5英里和纬度+/-1.5英里的记录(当然,它查询的是形状像正方形而不是半径的区域) 如果您需要更加严格,您

我有一个实体,它有纬度和经度字段

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


如何使用FetchXML实现这一点?

您无法通过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]
选择id,X(gm_-coor)作为纬度,Y(gm_-coor)作为经度,
ATAN2(
SQRT(
功率(COS(弧度)*
SIN(弧度(Y(gm_coor)),2)+
功率(COS(弧度(X(gm_coor)))*SIN(弧度(uu LAT_uu))-
SIN(弧度(X(gm_-coor))*COS(弧度(u-LAT_u))*
COS(弧度(Y(gm_coor)-(2)),
(SIN(弧度)(X(gm_coor)))SIN(弧度(LAT))+
COS(弧度X(gm_-coor))*COS(弧度(u-LAT_u))*
弧度
)*6372.795作为距离
从地理编码
距离小于[公里范围]

我可以马上想到两个选择

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

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

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

也可以看到这一点: