Adds withinPolygon support for Polygon object (#4067)
* Whitespace * Add Polygon type to $polygon query * Add tests Polygon object in $polygon query $geoIntersects queries * Refactor * Postgres support * More tests * Remove duplicate test * Missing semicolon * fix tests
This commit is contained in:
committed by
Florent Vilmart
parent
4dcbc4245b
commit
57da2def1d
@@ -537,19 +537,34 @@ const buildWhereClause = ({ schema, query, index }): WhereClause => {
|
||||
|
||||
if (fieldValue.$geoWithin && fieldValue.$geoWithin.$polygon) {
|
||||
const polygon = fieldValue.$geoWithin.$polygon;
|
||||
if (!(polygon instanceof Array)) {
|
||||
let points;
|
||||
if (typeof polygon === 'object' && polygon.__type === 'Polygon') {
|
||||
if (!polygon.coordinates || polygon.coordinates.length < 3) {
|
||||
throw new Parse.Error(
|
||||
Parse.Error.INVALID_JSON,
|
||||
'bad $geoWithin value; Polygon.coordinates should contain at least 3 lon/lat pairs'
|
||||
);
|
||||
}
|
||||
points = polygon.coordinates;
|
||||
} else if ((polygon instanceof Array)) {
|
||||
if (polygon.length < 3) {
|
||||
throw new Parse.Error(
|
||||
Parse.Error.INVALID_JSON,
|
||||
'bad $geoWithin value; $polygon should contain at least 3 GeoPoints'
|
||||
);
|
||||
}
|
||||
points = polygon;
|
||||
} else {
|
||||
throw new Parse.Error(
|
||||
Parse.Error.INVALID_JSON,
|
||||
'bad $geoWithin value; $polygon should contain at least 3 GeoPoints'
|
||||
'bad $geoWithin value; $polygon should be Polygon object or Array of Parse.GeoPoint\'s'
|
||||
);
|
||||
}
|
||||
if (polygon.length < 3) {
|
||||
throw new Parse.Error(
|
||||
Parse.Error.INVALID_JSON,
|
||||
'bad $geoWithin value; $polygon should contain at least 3 GeoPoints'
|
||||
);
|
||||
}
|
||||
const points = polygon.map((point) => {
|
||||
points = points.map((point) => {
|
||||
if (point instanceof Array && point.length === 2) {
|
||||
Parse.GeoPoint._validate(point[1], point[0]);
|
||||
return `(${point[0]}, ${point[1]})`;
|
||||
}
|
||||
if (typeof point !== 'object' || point.__type !== 'GeoPoint') {
|
||||
throw new Parse.Error(Parse.Error.INVALID_JSON, 'bad $geoWithin value');
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user