【问题标题】:Spatialite Android (Transform and Distance)Spatialite Android(变换和距离)
【发布时间】:2014-03-27 14:59:32
【问题描述】:

我正在使用 Gaia-SINSthis tutorial 使用 Android 版 SpatiaLite。

我设法创建了空间数据库,它工作正常。但我无法以米为单位获取点(或任何其他几何体)之间的距离。

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

问题是,当我在 Android 上使用转换时,它返回 NULL。我将其与SpatiaLite_GUI 进行了比较,在其中该查询运行良好。

谁能告诉我为什么电话上的Transform 不起作用?是因为投影3035还是别的什么原因?

[编辑]

这是在 SpatiaLite GUI 中运行而不在 Android 上运行的简单 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.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 代码?
  • 你是对的。这是android代码的问题。我忘了在这里发布答案。

标签: android spatialite


【解决方案1】:

让我回答我自己的问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2015-03-27
    • 2011-11-17
    相关资源
    最近更新 更多