度単位の値を掛けるだけです。111195
この値は(Earth mean radius)*PI/180
、「地球の表面上のメートル単位の大円度の平均長さ」です。
この方法を使用して得られた結果は、WGS84 楕円体の測地線距離の 1% 以内です。
編集
OK、上記の私の答えは、「角度単位のアークをメートル単位の長さに変換する方法」という質問を表していますが、それはあなたが尋ねた質問ではありません(尋ねるべきでした)。
私は専門的に Spatialite を使用したことがないので、サンプル クエリが実際に「度単位の長さ」を返すと仮定しました。それは真実ではない。
残念ながら、Spatialite は「地理的な意味」での距離の計算に失敗しているようです。ジオメトリが SRID 4326 で定義されているにもかかわらず、それらは平面上にあるかのように扱われます。
簡単な証明を次に示します。
select Distance(GeomFromText('POINT(0 0)',4326),GeomFromText('POINT(3 4)',4326));
戻ります5.0
。
それは残念だ ...
元のクエリを見てみましょう。
select Distance(
GeomFromText('POINT(8 49)',4326),
GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326)
)
MS SQL Server での同等のクエリ:
SELECT (geography::STGeomFromText('POINT(8 49)', 4326)).STDistance(geography::STGeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)', 4326));
正しい結果がすぐに得られます105006.59673084648
。
では、Spatialite にはどのようなオプションがありますか?
確かに、コメントで言ったように、1 つのオプションは、ジオメトリを投影し、それらを計算することです。ヨーロッパで SRID 3035 を使用することも理にかなっています (場所がほとんどドイツにある場合は、SRID 25832 を検討します)。
select Distance(
Transform(GeomFromText('POINT(8 49)',4326),25832),
Transform(GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326),25832)
)
戻ります104969.401605453
。
あなたの他のサンプルについて(コメントで):
select distance(
Transform(GeomFromText('POINT(8.328957 49.920900)',4326),3035),
Transform(GeomFromText('POINT(8.339665 49.918000)',4326),3035)
)
もっと簡単な方法があります (POINT と LINESTRING ではなく、2 つの POINT がある場合): POINT で LINESTRING を作成し、次のGeodesicLength
ように関数を使用します。
select GeodesicLength(GeomFromText('LINESTRING(8.328957 49.920900, 8.339665 49.918000)',4326))
予想どおり、が返されます833.910006698673
。