解析 CloudCode 无效的地理点对象
Posted
技术标签:
【中文标题】解析 CloudCode 无效的地理点对象【英文标题】:Parse CloudCode invalid geopoint object 【发布时间】:2014-07-01 22:14:26 【问题描述】:我在 Parse Cloud Code 中使用 javascript SDK,试图编写一个过滤掉 GeoPoint 的查询。我不断收到错误:
"code":141,"error":" Error: 102 $nearSphere: invalid geopoint object"
我的代码如下所示:
Parse.Cloud.define("findPeopleNearby", function (request, response)
Parse.Cloud.useMasterKey();
if (request.params.latitude && request.params.longitude)
var point = new Parse.GeoPoint( latitude: request.params.latitude, longitude: request.params.longitude );
console.log('would query off of GeoPoint: ' + JSON.stringify(point));
var places = Parse.Object.extend("UserLocation");
var placesQuery = new Parse.Query(places);
placesQuery.near("location", point);
placesQuery.find(
success: function (results)
console.log("Successfully retrieved " + results.length + " rows.");
response.success();
,
error: function (error)
response.error("Error: " + error.code + " " + error.message);
);
);
我知道表中的数据是没问题的,因为我可以成功发出curl命令:
curl -X GET -H "X-Parse-Application-Id: xxxx" -H "X-Parse-REST-API-Key: yyyy" -G --data-urlencode 'limit=5' --data-urlencode 'where= "location": "$nearSphere": "__type": "GeoPoint", "latitude": 37.33521504 , "longitude": -122.03254905 , "$maxDistanceInMiles":10.0 ' https://api.parse.com/1/classes/UserLocation
我最初在 Installation 表上有 location 属性(这是我希望的位置),但我看到 this Q&A 并认为我会在它自己的对象中尝试它,但这似乎并没有不同。
顺便说一句,如果我可以让这个查询工作,我的下一个尝试是使用父指针加入安装对象。如果我能理解导致此错误的原因,我希望/假设这会起作用。
谢谢
编辑控制台输出
would query off of GeoPoint: "__type":"GeoPoint","latitude":"37.33521504","longitude":"-122.03254905"
【问题讨论】:
控制台日志如何找点? 我的猜测是纬度/经度不是数字,因此 Parse.GeoPoint 无效,真的需要查看point
的第一个console.log
的输出。
arrrgh,我敢打赌就是这样。我今晚试试。更新的问题。谢谢一千。
@Fosco 我可以建议Parse.GeoPoint
构造函数在下一个版本不是数字时尝试在输入上执行parseFloat()
?
【参考方案1】:
蒂莫西的怀疑是正确的。输入是字符串而不是浮点数。转换输入解决了错误,事实上,查询“加入”安装对象也可以正常工作。一个愚蠢的错误,但希望现在任何人在谷歌上搜索它都会找到一个结果来为他们指明正确的方向。
长版供参考:
var lat, lng;
if (typeof request.params.latitude === "number")
lat = request.params.latitude;
else
lat = parseFloat(request.params.latitude);
// this could return NaN
if (typeof request.params.longitude === "number")
lng = request.params.longitude;
else
lng = parseFloat(request.params.longitude);
var point = new Parse.GeoPoint( latitude: lat, longitude: lng );
【讨论】:
以上是关于解析 CloudCode 无效的地理点对象的主要内容,如果未能解决你的问题,请参考以下文章