2017-04-12 2 views
0

私は2つのテーブル(エリア&ロケーション)を持っていて、あるテーブルの長い座標が&であることを確認したいのですが、別のテーブルのエリアにあります。SQL Server 2012空間テーブルの列をジオメトリから地理に変換する方法?

テーブル名:AREA カラム: OBJECTID(INT)、
AREA_NAME(VARCHAR(50))、 GEOM(ジオメトリ

テーブル名:LOCATION カラム: ID(INT)エリアテーブルから、 LATITUDE(VARCHAR(50))、 LONGITUDE(VARCHAR(50))

サンプルデータ:

SELECT OBJECTID 
,AREA 
,GEOM 
,GEOM.STAsText() 
FROM AREA 

AREA TABLE

SELECT 
ID 
,LATITUDE 
,LONGITUDE 
FROM LOCATION 

LOCATION TABLE

Iは、位置(即ち、緯度及び経度座標)かどうかをチェックしたい領域またはしないです。領域テーブルには列GEOMETRY列があります。 このジオメトリカラムをgeographyカラムに変換したいと思います。地理に変換すると、STIntersects()を使用して、その場所がそのエリア内にあるかどうかを確認できます。

しかし、変換しようとすると、Latitudeの値は-90〜90度の間でなければなりません。

SELECT GEOGRAPHY::STGeomFromText(CAST(GEOM AS VARCHAR(MAX)), 4326) FROM AREA 

完全なエラーメッセージ: システム:

6522、レベル16、状態1、行70 Aの.NET Frameworkエラーは、ユーザー定義のルーチンまたは集計 "地理" の実行中に を発生しました.FormatException:24201:緯度の値は、-90〜 の間にある必要があります。にSystem.FormatException: Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(ダブルX、 ダブルY、NULL可能1 z, Nullable 1メートル)で Microsoft.SqlServer.Types.Validator.BeginFigure(ダブルX、ダブルY、 でNULL可能1 z, Nullable Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(ダブル X、ダブルY、NULL可能1 z, Nullable 1メートルで Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(ダブルX、 ダブルY、NULL可能1 z, Nullable 1メートル)で1 M) ) Microsoft.SqlServer.Types.WellKnownTextReader.ParseLineStringText()
(Microsoft.SqlServ) er.Types.WellKnownTextReader.ParsePolygonText() Microsoftの Microsoft.SqlServer.Types.WellKnownTextReader.Readで Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType タイプ)(OpenGisTypeタイプ、 のInt32 SRID)で
。 Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType タイプ、SqlChars taggedText、のInt32 SRID)でSqlServer.Types.SqlGeography.ParseText(OpenGisType型、 SqlChars taggedText、のInt32 SRID)。

私は、このSQL Server空間データへの新たなんです。誰かがこの仕事を私に導くことができますか?ありがとう! 20170414上:)

アップデート:Here私はジオメトリに緯度&長い座標を変換した後AREA & LOCATIONテーブルからのサンプルデータです。

答えて

0

あなたのエリアは緯度と経度、ウェブメルカトル座標ではないようです。メルカトル座標で は、(0,0)からメートル、ない度にカウントされます。

ここ

は、コードexapmle(JS)で、その後、新しい座標を使用して、ジオメトリのポイントを作成し、ウェブメルカトルに緯度経度に変換してみてください。

var degrees2meters = function(lon,lat) { 
     var x = lon * 20037508.34/180; 
     var y = Math.log(Math.tan((90 + lat) * Math.PI/360))/(Math.PI/180); 
     y = y * 20037508.34/180; 
     return [x, y] 
} 

x= -77.035974 
y = 38.898717 

console.log(degrees2meters(x,y)) 

// should result in: -8575605.398444, 4707174.018280 

https://gist.github.com/springmeyer/871897

+0

私は緯度&ロングを変換しましたジオメトリを指し示し、次にそのエリアに緯度と経度が含まれているかどうかをチェックしようとします。しかし、私は結果が得られません。 [ここ](https://ibb.co/hjBMi5)エリアと場所からのサンプルデータです。 POINT&POLYGONデータを見ると、ポリゴン領域にはこれらの点は含まれていません。どのように私は幾何学に緯度と経度を変換している上で問題がありますか? – Rajanand

+0

解決策2を試してみませんか? georgaphyに変換する前にポリゴンで領域の列を交差させます。 –

+0

私は#2を行うするかどうかはわかりません。 – Rajanand

関連する問題