0

ジオメトリ クエリを機能させようとしています。同様の Geography クエリは正常に機能しますが、Geometry タイプを使用するテーブルを操作する必要があります。Geography バージョンは期待どおりに多くのレコードを返しますが、Geometry バージョンではレコードを返すことができません。両方のテーブルの緯度と経度のレコードはまったく同じです。

この Geography クエリは正常に機能します。

DECLARE @home GEOGRAPHY
SET @home = GEOGRAPHY::STPointFromText('POINT(-0.7799193 51.3083162 )', 4326);

SELECT OutwardCode, InwardCode, Latitude, Longitude
FROM dbo.PostCodeData
WHERE GeoLocation.STDistance(@home) <= (5 * 1609) -- 1609 = approx metres in 1 mile

テーブル スキーマは次のとおりです。

+-------------+--------------+
|    Field    |     Type     |
+-------------+--------------+
| OutwardCode | Varchar(4)   |
| InwardCode  | Varchar(3)   |
| Latitude    | Decimal(9,6) |
| Longitude   | Decimal(9,6) |
| GeoLocation | Geography    |
+-------------+--------------+

テーブルデータの例:

+-------------+------------+------------+----------+------------------------------------------------+
| OutwardCode | InwardCode | Longitude  | Latitude |                  GeoLocation                   |
+-------------+------------+------------+----------+------------------------------------------------+
| GU14        | 9HL        | -0.7803759 | 51.30818 | 0xE6100000010C01A4367172A7494027C522E1D6F8E8BF |
+-------------+------------+------------+----------+------------------------------------------------+

この Geometry クエリはレコードを返しません (データベースにはまったく同じ緯度と経度のレコードがありますが、通りの中心点として Geometry があり、Postcode は OutwardCode と InwardCode の結合バージョンです):

DECLARE @home GEOMETRY
SET @home = GEOMETRY::STPointFromText('POINT(51.3083162 -0.7799193)', 0);

SELECT Postcode, Latitude, Longitude
FROM dbo.OS_Locator
WHERE Centre.STDistance(@home) <= (5 * 1609) -- 1609 = approx metres in 1 mile

テーブル スキーマは次のとおりです。

+-----------+--------------+
|   Field   |     Type     |
+-----------+--------------+
| Postcode  | nvarchar(10) |
| Latitude  | Decimal(9,6) |
| Longitude | Decimal(9,6) |
| Centre    | Geometry     |
+-----------+--------------+

テーブルデータの例:

+----------+-----------+-----------+------------------------------------------------+
| Postcode | Latitude  | Longitude |                     Centre                     |
+----------+-----------+-----------+------------------------------------------------+
| GU14 9HL | 51.308304 | -0.779928 | 0x346C0000010C00000000549C1D410000000018330341 |
+----------+-----------+-----------+------------------------------------------------+

どこが間違っていますか?

4

1 に答える 1

1

2 つの異なる地理空間タイプがあるのには理由があります。Geography は、座標が地球上のポイント (座標系に特異点を持つ 3 次元オブジェクト) の緯度と経度を表す場合に使用します。ジオメトリは、ポイントが無限平面上の任意の X & Y 位置を表す場合に使用されます。「51.3 度を X 座標にします」と言ってすべてがうまくいくわけではありません。高校の物理の先生がいつも「単位が大事」と言っていました。

于 2015-06-04T12:38:42.037 に答える