1

Google マップを使用して店舗検索を作成しています。

ユーザーは郵便番号を入力し、ドロップダウン メニューから場所からの距離 (5、10、15、20 マイル) を選択します。

その場所から指定された距離にある店舗を返し、地図上にマーカーを置きます。

次の列を持つ郵便番号テーブルがあります。

 PostCode Latitude Longitude Easting Northing Grid Ref Country District Ward

およびこのテーブルと外部キーの関係を持つstoresテーブル

私は MVC3 と linq-sql を使用していますが、入力された郵便番号から 5 マイル離れた店舗だけを引き戻すクエリを作成する方法がわかりません。

編集

私は以下を見つけました:

select *,
    acos(cos(51.720663 * (PI()/180)) *
     cos(-0.299929 * (PI()/180)) *
     cos(latitude * (PI()/180)) *
     cos(longitude * (PI()/180))
     +
     cos(51.720663 * (PI()/180)) *
     sin(-0.299929 * (PI()/180)) *
     cos(latitude * (PI()/180)) *
     sin(longitude * (PI()/180))
     +
     sin(51.720663 * (PI()/180)) *
     sin(latitude * (PI()/180))
    ) * 3959 as Dist
from postcodes
having Dist < radius
order by Dist

しかし、この部分は機能しません:

having Dist < radius
    order by Dist

私は何かが足りない..?

そして本当に可能であればlinqでこれをやりたい....

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

0

以下は、LINQ over EF を使用して都市ごとに同様のことを行った方法の小さなスニペットです。

            var cityloc = _db.Cities.Find(t.CityId).location;
            var radius = Int32.Parse(t.CityRadius);
            results = results.Where(x => x.City.location.Distance(cityloc) < radius * metersPerMile || x.city_id == t.CityId);

t.CityId はあなたがいる都市で、あなたから t.CityRadius マイル以内の結果を見つけます。Results は、City クラスの city プロパティを持つオブジェクトです。City クラスには、DbGeography 型のプロパティ location があります。

LINQ over SQL での空間サポートは存在しません。ただし、EF 5 ではサポートされています。SQL 上の LINQ と、空間型との間で変換する方法について説明しているこの投稿をチェックしてみてください: Is it possible to use SqlGeography with Linq to Sql?

幸いなことに、郵便番号テーブルをクラスに取り込むと、組み込みの .NET 空間要素を使用して距離計算を行うことができる場合があります (または、これまでのように手動で行うことができます)。

開発にあまり慣れていない場合は、LINQ over SQL を LINQ over Entity Frameworks に切り替えることを検討することもできます。これは非常に似ており、空間データ型を完全にサポートしています。

于 2013-05-31T06:42:35.297 に答える