我正在使用SpatiaLite为安卓系统工作,盖亚-罪恶使用本教程。
我成功地创建了空间数据库,它运行得很好。但我在以米为单位获取点(或任何其他几何学)之间的距离时遇到了问题。
我在网上搜索,并找到了许多使用Transform获取距离的例子。我使用的投影是4326,我插入点作为POINT(Lon Lat)。为了计算距离,我用SRID 3035将其转换为投影。
问题是,当我在Android上使用transform时,它返回NULL。我将它与图形用户界面进行了比较,在它中,这个查询工作得很好。
有人能告诉我为什么Transform在电话里不起作用吗?是因为投影3035还是别的什么原因吗?
编辑
下面是在SpatiaLite图形用户界面上工作的简单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图形用户界面中返回2550.215591,在Android中返回0.0。2.5公里是正确的距离。
同一个没有Transform的查询在SpatiaLite图形用户界面和SpatiaLite中都返回0.030897。
SELECT Distance(
GeomFromText('POINT(21.865466 43.327717)', 4326),
GeomFromText('POINT(21.895659 43.32116)', 4326)) as Distance;发布于 2014-06-16 11:16:06
让我回答我自己的问题。
问题在于创建数据库。我正在用代码创建它,而且我还没有添加spatialite_create()来创建数据库中的空间元数据。
Database db = new Database();
db.open(Constants.SQLITE_OPEN_READWRITE | Constants.SQLITE_OPEN_CREATE);
db.spatialite_create();https://stackoverflow.com/questions/22691465
复制相似问题