使用 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 解析查询的主要内容,如果未能解决你的问题,请参考以下文章