2011-07-11 10 views
1

オランダの特定の地域の地理フィールドをSQL Server 2008に挿入しようとしています。私は私のいずれかのクエリを実行しようとしたら、私はこのエラーを取得する:地形の挿入:指定された入力が単一の半球を超えているため、有効な地理インスタンスを表していません

Msg 6522, Level 16, State 1, Line 4 
A .NET Framework error occurred during execution of user-defined routine or aggregate "geography": 
Microsoft.SqlServer.Types.GLArgumentException: 24205: The specified input does not represent a valid geography instance because it exceeds a single hemisphere. Each geography instance must fit inside a single hemisphere. A common reason for this error is that a polygon has the wrong ring orientation. 
Microsoft.SqlServer.Types.GLArgumentException: 
    at Microsoft.SqlServer.Types.GLNativeMethods.ThrowExceptionForHr(GL_HResult errorCode) 
    at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticIsValid(GeoData g) 
    at Microsoft.SqlServer.Types.SqlGeography.IsValidExpensive() 
    at Microsoft.SqlServer.Types.SqlGeography.ConstructGeographyFromUserInput(GeoData g, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid) 
. 
The statement has been terminated. 

私は、インターネットを中心に見てきたと私は、このエラーの説明を読みました。すべての点のバウンディングボックスが地球の半分よりも大きくなると発生します。ここの問題は、53度の北に位置する小さな島ですでにエラーが発生していることです。ここで私が使用してきたクエリです:

SELECT geography::STGeomFromText('MULTIPOLYGON(((6.35252 53.53971,6.35212 53.52174,6.36724 53.52387,6.38227 53.52150,6.38970 53.51694,6.39702 53.50790,6.39692 53.50340,6.39305 53.49894,6.38164 53.49455,6.36663 53.49692,6.35156 53.49704,6.35121 53.48132,6.35042 53.44626,6.31547 53.43892,6.27398 53.43018,6.21441 53.41760,6.19402 53.41328,6.07924 53.42927,6.07404 53.44053,6.06469 53.46080,6.06007 53.47081,6.06007 53.47081,6.05910 53.47291,6.05910 53.47291,6.05012 53.49233,6.06520 53.49337,6.11046 53.49648,6.11822 53.50991,6.12599 53.52334,6.18612 53.51397,6.21633 53.51676,6.32207 53.52647,6.35252 53.53971)))', 4326)) 

私はGoogle Mapsで見ることがバンの境界線を持っている島。ポイントはまた、その周りにいくつかの海を取るが、それほど多くはありません。

地理フィールドには大きすぎる領域をシステムが使用していると私が考えている理由は誰でも説明できますか?

答えて

2

"このエラーの一般的な原因は、ポリゴンのリング方向が間違っているということです" - 特定の順序でポイントを指定する必要があるように私に聞こえる - 逆を取得すると、あなたが提供しているポイントのうち、実際には半球以上のものがあります。

私はあなたが提供してきた座標の順序を逆にした場合、それはポリゴンの罰金を構築します。

select geography::STGeomFromText('MULTIPOLYGON(((
6.35252 53.53971, 
6.32207 53.52647, 
6.21633 53.51676, 
6.18612 53.51397, 
6.12599 53.52334, 
6.11822 53.50991, 
6.11046 53.49648, 
6.06520 53.49337, 
6.05012 53.49233, 
6.05910 53.47291, 
6.05910 53.47291, 
6.06007 53.47081, 
6.06007 53.47081, 
6.06469 53.46080, 
6.07404 53.44053, 
6.07924 53.42927, 
6.19402 53.41328, 
6.21441 53.41760, 
6.27398 53.43018, 
6.31547 53.43892, 
6.35042 53.44626, 
6.35121 53.48132, 
6.35156 53.49704, 
6.36663 53.49692, 
6.38164 53.49455, 
6.39305 53.49894, 
6.39692 53.50340, 
6.39702 53.50790, 
6.38970 53.51694, 
6.38227 53.52150, 
6.36724 53.52387, 
6.35212 53.52174, 
6.35252 53.53971 
)))', 4326) 

Technetに与えられた例では、赤道の周りのリングで - どのようにシステムを使用すると、意図したかどうかを知っているだろういくつかのルールなしで、北半球または南半球を包囲するポリゴン内の点の順序。

+0

ありがとうございました!あなたが正しいです。最初は分かりませんでしたが、それは確かに問題です。シェイプファイルから座標を取得するためにPostgresのものを使用しましたが、わからない順序を逆にする必要があります。私は今、私のすべての質問に対してそうする簡単なスクリプトを発明しようとします。ありがとう。 – Leonard

関連する問題