使用 Geoquery 解析查询

Posted

技术标签:

【中文标题】使用 Geoquery 解析查询【英文标题】:Parse Query using Geoquery 【发布时间】:2016-08-06 07:50:31 【问题描述】:

我正在使用链接的地理查询数据对某些对象进行查询。

但是,所有查询都不起作用并返回以下错误

需要位置对象,位置数组格式不正确

控制台日志显示

gp 绝对是一个对象,绝对是 Parse Geopoint 并且具有正确的坐标。

我很困惑,任何建议表示赞赏

let gp = null;
if (search.hasOwnProperty("geo")) 
console.log(`Geodata $JSON.stringify(search.geo)`);
gp = new Parse.GeoPoint(
  latitude: search.geo.lat,
  longitude: search.geo.long
);

console.log(`GP type $typeof gp, GP $JSON.stringify(gp)`);

let query = new Parse.Query("Place");
query.near("location", gp);
query.find(
  success: (e) => console.log(`Geo near query $JSON.stringify(e)`),
  error: (e) => console.log(`Geo near error $JSON.stringify(e)`)
);
;

【问题讨论】:

“位置”是否将值存储为解析数据库中的地理点?我会尝试使用query.withinMiles("location", gp, 1.0); 是的,它们被保存为地理点,我已经检查了仪表板中的类型。我尝试了其他类似的 GP 查询,结果相同。 【参考方案1】:

我创建了一些可以使用以下代码的东西:

 let gp = new Parse.GeoPoint(
     latitude: 37.337845,
     longitude: -122.037687
  );

  // 1. first run this in order to save some location to your DB
  var LocationTest = Parse.Object.extend("LocationTest");
  var locationObject = new LocationTest();
  locationObject.set("location",gp);
  locationObject.set("name","location name test");

  locationObject.save().then(function(result)

  ,function(error)

  );

  // 2. Uncomment and run this query after you save the object above
  /* 
  var query = new Parse.Query("LocationTest");
  query.near("location",gp);
  query.find().then(function(results)

  ,function(error)

  ); */

请先运行第一段代码以将位置保存到您的数据库,然后运行第二部分以查询您保存的内容。

您收到此错误的原因可能是因为您的位置没有保存为对象,而是保存为数据库中的数组,或者可能是因为您的位置字段不是 PFGEoPoint 类型 我建议您可能首先运行我上面的代码并检查它是否有效,然后尝试更改数据库中的类名或字段名,然后从不同的字段保存和查询。

此代码适用于我在 parse-server 2.2.17(最新版本)上,所以还请通过在您的应用上运行 npm install 来检查您的 parse-server 是否是最新的

【讨论】:

认为我已经弄清楚了问题所在。当地理点为空/没有数据时,地理查询似乎会中断。有一些没有关联地理点的对象,删除了这些对象,它似乎可以工作。去测试更多【参考方案2】:

通过一些实验,发现如果任何被查询的对象没有与之关联的地理数据,地理查询就会失败。

比没有地理数据更严重一些,即使它有一个地理数据属性,并且该属性是,它也会崩溃。

解决方案是在查询该对象之前检查纬度和经度是否存在

【讨论】:

以上是关于使用 Geoquery 解析查询的主要内容,如果未能解决你的问题,请参考以下文章

将 Firebase 查询与 GeoQuery 相结合,按名称搜索附近区域的帖子

带有recyclerview的双打印地理查询

在包 GEOquery 中使用 getGEO() 时出错

如何使用 GEOquery 包提取示例标题(名称)?

使用GEOquery下载GEO数据--转载

Solr查询解析器大全