12

Google マップのマッシュアップを作成しており、SQL 2008 を使用しています。

地球上に多数のポイントがあり、特定のポリゴン内に含まれるすべてのポイントを選択したり、XY から 10 km 以内のすべてのポイントを選択したりするなど、SQL でさまざまな計算を実行したいと考えています。

以前に SQL 空間機能を使用したことがありません。geographyこれにはまたはgeometryデータ型を使用する必要がありますか?

4

3 に答える 3

16

地理は、地球上の点をプロットすることを目的としたタイプです。

次のような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;
于 2009-12-08T16:46:00.323 に答える
6

あなたはPostGISFAQで与えられた答えに従うことができます

私はすべて混乱しています。ジオメトリまたは地理を使用する必要があるデータストアはどれですか?

簡単な回答:地理は、長距離距離測定をサポートする新しいデータタイプです。地理を使用する場合、平面座標系について多くを学ぶ必要はありません。距離と長さを測定するだけで、世界中のデータがある場合は、地理が一般的に最適です。Geometryデータ型は、それをサポートする多くの機能を備え、サードパーティのツールからの優れたサポートを享受している古いデータ型です。空間参照系にかなり慣れている場合、すべてのデータが単一の空間参照系(SRID)に収まるローカライズされたデータを扱っている場合、または多くの空間処理を行う必要がある場合に最適です。現在サポートされているものとサポートされていないものについては、8.8項「PostGIS関数サポートマトリックス」を参照してください。

PostGISとSQLServerの両方のデータベースのジオメトリと地理タイプは同じ概念に従うため、PostGISFAQに記載されている回答が問題に当てはまります。

于 2010-01-25T00:40:22.770 に答える
4

地球の曲率を考慮しているため、地理タイプが必要になる可能性があります。ジオメトリは、物事を「フラット」に表示するためのものです。詳細については、この記事をチェックしてください http://www.mssqltips.com/tip.asp?tip=1847

于 2009-12-08T16:15:44.083 に答える