Spatialite Android (转换和距离)

3
我正在使用Gaia-SINS提供的这个教程与SpatiaLite for Android一起工作。我成功地创建了空间数据库并且它也能正常工作。但是,我在获取点(或任何其他几何体)之间距离的时候遇到了问题。我在网上搜索了很多示例,都使用Transform来获取以米为单位的距离。我使用的投影方式是4326,将点插入为POINT(Lon Lat)。为了计算距离,我将其转换为SRID 3035的投影方式。问题在于,当我在Android上使用变换时,它返回NULL。我将其与SpatiaLite_GUI进行了比较,在其中此查询有效。有人能告诉我为什么手机上的Transform不起作用吗?是因为投影方式3035还是其他原因?[编辑]这里是一个简单的SQL,它在SpatiaLite GUI中可以正常工作,但在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.5公里是正确的距离。

同样的查询如果不使用Transform,在SpatiaLite GUI和Android中都返回0.030897。

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

为什么这是 SQL,你需要 Android 代码吗? - Boban S.
你是对的。这是Android代码的问题。我忘记在这里发布答案了。 - Boban S.
1个回答

0

让我回答自己的问题。

问题出在创建数据库上。我正在使用代码创建它,但是我没有添加 spatialite_create() 来创建数据库中的空间元数据。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接