Spatialite Android(变换和距离)

时间:2014-03-27 14:59:33

标签: android spatialite

我使用Gaia-SINSthis tutorial使用SpatiaLite for Android。

我设法创建空间数据库,它工作正常。但我在以米为单位获得点(或任何其他几何体)之间的距离时遇到问题。

我正在网上搜索,发现很多使用Transform以米为单位的示例。我使用的投影是4326,我将点插入POINT(Lon Lat)。为了计算距离,我将其转换为SRID 3035的投影。

问题在于,当我在Android上使用transform时,它返回NULL。我将其与SpatiaLite_GUI进行了比较,其中此查询工作正常。

任何人都可以说我为什么电话上的Transform无效?是因为投影3035还是别的什么?

[编辑]

以下是在SpatiaLite GUI中使用的简单SQL,而不是在Android上。

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是正确的距离。

没有Transform的同一查询在SpatiaLite GUI和Android中都返回0.030897。

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

1 个答案:

答案 0 :(得分:0)

让我回答我自己的问题。

问题在于创建数据库。我在代码中创建它,并且我没有添加spatialite_create()来在数据库中创建spatialite元数据。

Database db = new Database();
db.open(Constants.SQLITE_OPEN_READWRITE | Constants.SQLITE_OPEN_CREATE);
db.spatialite_create();