我使用Gaia-SINS从this 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;
答案 0 :(得分:0)
让我回答我自己的问题。
问题在于创建数据库。我在代码中创建它,并且我没有添加spatialite_create()
来在数据库中创建spatialite元数据。
Database db = new Database();
db.open(Constants.SQLITE_OPEN_READWRITE | Constants.SQLITE_OPEN_CREATE);
db.spatialite_create();