使用Geoquery解析查询

时间:2016-08-06 07:50:31

标签: parse-platform parse-server

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

但是,没有任何查询可以工作并返回以下错误

预期的位置对象,位置数组格式不正确

控制台日志显示

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)}`)
});
};

2 个答案:

答案 0 :(得分:0)

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

 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 类型 我建议你可能首先运行上面的代码并检查它是否有效,然后尝试更改数据库中的类名或字段名,并从另一个字段保存和查询。

此代码适用于解析服务器2.2.17(最新版本),因此请通过在您的应用上运行 npm install 来检查您的解析服务器是否是最新的

答案 1 :(得分:0)

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

比没有地理数据更严重,即使它具有地理数据属性,并且该属性为空,它也会崩溃。

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