3

このチュートリアルを使用して、 Gaia-SINSの Android 用 SpatiaLite を使用しています。

空間データベースを作成できましたが、正常に動作します。しかし、ポイント (またはその他のジオメトリ) 間の距離をメートル単位で取得するのに問題があります。

私は Web を検索していて、Transform距離をメートル単位で取得するために使用する多くの例を見つけました。私が使用する投影法は 4326 で、ポイントを として挿入しPOINT(Lon Lat)ます。距離を計算するために、SRID 3035 で投影に変換します。

問題は、Android で変換を使用すると NULL が返されることです。SpatiaLite_GUIと比較しましたが、このクエリは正常に機能します。

Transform電話が機能しない理由を誰か教えてもらえますか? 投影3035か何かのためですか?

[編集]

Android ではなく SpatiaLite GUI で動作する簡単な SQL を次に示します。

SELECT Distance(
    Transform(GeomFromText('POINT(21.865466 43.327717)', 4326), 3035),
    Transform(GeomFromText('POINT(21.895659 43.32116)', 4326), 3035)) as Distance;

このクエリは、SpatiaLite GUI では 2550.215591 を返し、Android では 0.0 を返します。2.5kmが正しい距離です。

TransformSpatiaLite GUI と Android の両方で、0.030897 を返さない同じクエリ。

SELECT Distance(
    GeomFromText('POINT(21.865466 43.327717)', 4326),
    GeomFromText('POINT(21.895659 43.32116)', 4326)) as Distance;
4

1 に答える 1

0

私自身の質問に答えさせてください。

問題はデータベースの作成にありました。spatialite_create()コードで作成していますが、データベースに空間的なメタデータを作成するために追加していません。

Database db = new Database();
db.open(Constants.SQLITE_OPEN_READWRITE | Constants.SQLITE_OPEN_CREATE);
db.spatialite_create();
于 2014-06-16T11:16:06.497 に答える