1

https://docs.microsoft.com/de-de/ef/core/modeling/spatialの記事を使用して開始して使用しました

  • エンティティ フレームワーク コア
  • MSSQL
  • NetTopologySuite.Core 1.15.3

IGeometry タイプのクラス City があります。データベースにテーブルを作成したため、自動的に作成されました:

CREATE TABLE [dbo].[City] (
    [Location][sys].[geography] NULL,
);

public partial class City
{
    public IGeometry Location { get; set; }
}

最初にデータを作成しました

GeoAPI.Geometries.IGeometryFactory geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);
GeoAPI.Geometries.IPoint point = geometryFactory.CreatePoint(new GeoAPI.Geometries.Coordinate((double)c.Lat, (double)c.Lng));
City city = new City();
city.Location = point;

データベースでは、場所は 0xE6100000010CCC7A319413CD2A4044696FF085314A40 のようになりました

今私はクエリしたい。searchCity の近くにあるすべての都市が必要です。

from city in cityRepository.Table
where city.Location.Distance(searchCity.Location) < 20 // 20 kilometers
select city;

問題は、計算された距離が非常に小さいことです。たとえば、都市から別の都市までの距離が 300 キロメートルの場合、距離は約 4 と計算されます。ドキュメントを読むと、距離は度単位で表示されます。しかし、キロメートルでフィルタリングする必要があります。
ドキュメントには ProjNet4GeoAPI に関するものもあります。しかし、クエリ後に計算したくありません。クエリで半径内の都市のみを取得したい。

4

0 に答える 0