緯度と経度のフィールドを持つエンティティがあります。
これで住所がわかりました。この住所の緯度と経度がわかりました。3 マイル以内のレコードを取得したいと考えています。
FetchXML を使用してそれを行うには?
緯度と経度のフィールドを持つエンティティがあります。
これで住所がわかりました。この住所の緯度と経度がわかりました。3 マイル以内のレコードを取得したいと考えています。
FetchXML を使用してそれを行うには?
ジオコーディングは機能として提供されていないため、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]
すぐに2つのオプションを考えることができます
1) SQL 内でフィルター処理されたビューを使用して、大円距離の式を計算します。これは最もクリーンな方法ですが、フェッチしません。
2) 目的の地点の緯度/経度の +/- .02 以内のすべての結果を取得します。次に、大円距離の式 (および JavaScript) を使用して、必要な項目に焦点を合わせます。したがって、この場合、Fetch はいくつかの追加の結果を返し (ただし、大部分は除外されます)、JavaScript は残りをフィルタリングします。
オプション #2 はうまく機能しますが、2 パスのアプローチです。