Google マップのマッシュアップを作成しており、SQL 2008 を使用しています。
地球上に多数のポイントがあり、特定のポリゴン内に含まれるすべてのポイントを選択したり、XY から 10 km 以内のすべてのポイントを選択したりするなど、SQL でさまざまな計算を実行したいと考えています。
以前に SQL 空間機能を使用したことがありません。geography
これにはまたはgeometry
データ型を使用する必要がありますか?
Google マップのマッシュアップを作成しており、SQL 2008 を使用しています。
地球上に多数のポイントがあり、特定のポリゴン内に含まれるすべてのポイントを選択したり、XY から 10 km 以内のすべてのポイントを選択したりするなど、SQL でさまざまな計算を実行したいと考えています。
以前に SQL 空間機能を使用したことがありません。geography
これにはまたはgeometry
データ型を使用する必要がありますか?
地理は、地球上の点をプロットすることを目的としたタイプです。
次のようなGoogleマップポイントを格納するテーブルがある場合:
CREATE TABLE geo_locations (
location_id uniqueidentifier NOT NULL,
position_point geography NOT NULL
);
次に、このストアドプロシージャを使用してポイントを埋めることができます。
CREATE PROCEDURE proc_AddPoint
@latitude decimal(9,6),
@longitude decimal(9,6),
@altitude smallInt
AS
DECLARE @point geography = NULL;
BEGIN
SET NOCOUNT ON;
SET @point = geography::STPointFromText('POINT(' + CONVERT(varchar(15), @longitude) + ' ' +
CONVERT(varchar(15), @latitude) + ' ' +
CONVERT(varchar(10), @altitude) + ')', 4326)
INSERT INTO geo_locations
(
location_id,
position_point
)
VALUES
(
NEWID(),
@point
);
END
次に、緯度、経度、高度をクエリする場合は、次のクエリ形式を使用します。
SELECT
geo_locations.position_point.Lat AS latitude,
geo_locations.position_point.Long AS longitude,
geo_locations.position_point.Z AS altitude
FROM
geo_locations;
あなたはPostGISFAQで与えられた答えに従うことができます
私はすべて混乱しています。ジオメトリまたは地理を使用する必要があるデータストアはどれですか?
簡単な回答:地理は、長距離距離測定をサポートする新しいデータタイプです。地理を使用する場合、平面座標系について多くを学ぶ必要はありません。距離と長さを測定するだけで、世界中のデータがある場合は、地理が一般的に最適です。Geometryデータ型は、それをサポートする多くの機能を備え、サードパーティのツールからの優れたサポートを享受している古いデータ型です。空間参照系にかなり慣れている場合、すべてのデータが単一の空間参照系(SRID)に収まるローカライズされたデータを扱っている場合、または多くの空間処理を行う必要がある場合に最適です。現在サポートされているものとサポートされていないものについては、8.8項「PostGIS関数サポートマトリックス」を参照してください。
PostGISとSQLServerの両方のデータベースのジオメトリと地理タイプは同じ概念に従うため、PostGISFAQに記載されている回答が問題に当てはまります。
地球の曲率を考慮しているため、地理タイプが必要になる可能性があります。ジオメトリは、物事を「フラット」に表示するためのものです。詳細については、この記事をチェックしてください http://www.mssqltips.com/tip.asp?tip=1847