-4

緯度と経度のフィールドを持つエンティティがあります。

これで住所がわかりました。この住所の緯度と経度がわかりました。3 マイル以内のレコードを取得したいと考えています。

FetchXML を使用してそれを行うには?

4

2 に答える 2

2

ジオコーディングは機能として提供されていないため、FetchXml を介して直接これを行うことはできません。

これは、手で何かを転がす必要があることを意味しますが、これは簡単ではありません。このサイトには、何をする必要があるかについてのかなり良い概要があります (言語が CRM で使用する可能性が高いものとは異なる場合でも)。

1 つのオプションとして、要件を緩和し、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

すぐに2つのオプションを考えることができます

1) SQL 内でフィルター処理されたビューを使用して、大円距離の式を計算します。これは最もクリーンな方法ですが、フェッチしません。

2) 目的の地点の緯度/経度の +/- .02 以内のすべての結果を取得します。次に、大円距離の式 (および JavaScript) を使用して、必要な項目に焦点を合わせます。したがって、この場合、Fetch はいくつかの追加の結果を返し (ただし、大部分は除外されます)、JavaScript は残りをフィルタリングします。

オプション #2 はうまく機能しますが、2 パスのアプローチです。

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

于 2012-06-21T17:49:47.597 に答える