@@ -238,6 +238,161 @@ describe('Geo Point', () => {
238
238
} ) ;
239
239
} ) ;
240
240
241
+ it ( 'can query within large distances unsorted' , ( done ) => {
242
+ let objects = [ ] ;
243
+ for ( let i = 0 ; i < 3 ; i ++ ) {
244
+ let obj = new TestObject ( ) ;
245
+ let point = new Parse . GeoPoint ( 0 , i * 45 ) ;
246
+ obj . set ( 'location' , point ) ;
247
+ obj . set ( 'construct' , 'large_dist' )
248
+ obj . set ( 'index' , i ) ;
249
+ objects . push ( obj ) ;
250
+ }
251
+ Parse . Object . saveAll ( objects ) . then ( ( ) => {
252
+ let query = new Parse . Query ( TestObject ) ;
253
+ let point = new Parse . GeoPoint ( 1 , - 1 ) ;
254
+ query . equalTo ( 'construct' , 'large_dist' ) ;
255
+ query . withinRadiansUnsorted ( 'location' , point , 3.14 ) ;
256
+ return query . find ( ) ;
257
+ } ) . then ( ( results ) => {
258
+ assert . equal ( results . length , 3 ) ;
259
+ done ( ) ;
260
+ } ) ;
261
+ } ) ;
262
+
263
+ it ( 'can query within medium distances unsorted' , ( done ) => {
264
+ let objects = [ ] ;
265
+ for ( let i = 0 ; i < 3 ; i ++ ) {
266
+ let obj = new TestObject ( ) ;
267
+ let point = new Parse . GeoPoint ( 0 , i * 45 ) ;
268
+ obj . set ( 'location' , point ) ;
269
+ obj . set ( 'construct' , 'medium_dist' )
270
+ obj . set ( 'index' , i ) ;
271
+ objects . push ( obj ) ;
272
+ }
273
+ Parse . Object . saveAll ( objects ) . then ( ( ) => {
274
+ let query = new Parse . Query ( TestObject ) ;
275
+ let point = new Parse . GeoPoint ( 1 , - 1 ) ;
276
+ query . equalTo ( 'construct' , 'medium_dist' ) ;
277
+ query . withinRadiansUnsorted ( 'location' , point , 3.14 * 0.5 ) ;
278
+ return query . find ( ) ;
279
+ } ) . then ( ( results ) => {
280
+ assert . equal ( results . length , 2 ) ;
281
+ assert . equal ( results [ 0 ] . get ( 'index' ) , 0 ) ;
282
+ assert . equal ( results [ 1 ] . get ( 'index' ) , 1 ) ;
283
+ done ( ) ;
284
+ } ) ;
285
+ } ) ;
286
+
287
+ it ( 'can query within small distances unsorted' , ( done ) => {
288
+ let objects = [ ] ;
289
+ for ( let i = 0 ; i < 3 ; i ++ ) {
290
+ let obj = new TestObject ( ) ;
291
+ let point = new Parse . GeoPoint ( 0 , i * 45 ) ;
292
+ obj . set ( 'location' , point ) ;
293
+ obj . set ( 'construct' , 'small_dist' )
294
+ obj . set ( 'index' , i ) ;
295
+ objects . push ( obj ) ;
296
+ }
297
+ Parse . Object . saveAll ( objects ) . then ( ( ) => {
298
+ let query = new Parse . Query ( TestObject ) ;
299
+ let point = new Parse . GeoPoint ( 1 , - 1 ) ;
300
+ query . equalTo ( 'construct' , 'small_dist' ) ;
301
+ query . withinRadiansUnsorted ( 'location' , point , 3.14 * 0.25 ) ;
302
+ return query . find ( ) ;
303
+ } ) . then ( ( results ) => {
304
+ assert . equal ( results . length , 1 ) ;
305
+ assert . equal ( results [ 0 ] . get ( 'index' ) , 0 ) ;
306
+ done ( ) ;
307
+ } ) ;
308
+ } ) ;
309
+
310
+ it ( 'can measure distance within km unsorted - everywhere' , ( done ) => {
311
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
312
+ let query = new Parse . Query ( TestPoint ) ;
313
+ query . withinKilometersUnsorted ( 'location' , sfo , 4000.0 ) ;
314
+ query . find ( ) . then ( ( results ) => {
315
+ assert . equal ( results . length , 3 ) ;
316
+ done ( ) ;
317
+ } ) ;
318
+ } ) ;
319
+
320
+ it ( 'can measure distance within km unsorted - california' , ( done ) => {
321
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
322
+ let query = new Parse . Query ( TestPoint ) ;
323
+ query . withinKilometersUnsorted ( 'location' , sfo , 3700.0 ) ;
324
+ query . find ( ) . then ( ( results ) => {
325
+ assert . equal ( results . length , 2 ) ;
326
+ assert . equal ( results [ 0 ] . get ( 'name' ) , 'San Francisco' ) ;
327
+ assert . equal ( results [ 1 ] . get ( 'name' ) , 'Sacramento' ) ;
328
+ done ( ) ;
329
+ } ) ;
330
+ } ) ;
331
+
332
+ it ( 'can measure distance within km unsorted - bay area' , ( done ) => {
333
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
334
+ let query = new Parse . Query ( TestPoint ) ;
335
+ query . withinKilometersUnsorted ( 'location' , sfo , 100.0 ) ;
336
+ query . find ( ) . then ( ( results ) => {
337
+ assert . equal ( results . length , 1 ) ;
338
+ assert . equal ( results [ 0 ] . get ( 'name' ) , 'San Francisco' ) ;
339
+ done ( ) ;
340
+ } ) ;
341
+ } ) ;
342
+
343
+ it ( 'can measure distance within km unsorted - mid peninsula' , ( done ) => {
344
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
345
+ let query = new Parse . Query ( TestPoint ) ;
346
+ query . withinKilometersUnsorted ( 'location' , sfo , 10.0 ) ;
347
+ query . find ( ) . then ( ( results ) => {
348
+ assert . equal ( results . length , 0 ) ;
349
+ done ( ) ;
350
+ } ) ;
351
+ } ) ;
352
+
353
+ it ( 'can measure distance within miles unsorted - everywhere' , ( done ) => {
354
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
355
+ let query = new Parse . Query ( TestPoint ) ;
356
+ query . withinMilesUnsorted ( 'location' , sfo , 2500.0 ) ;
357
+ query . find ( ) . then ( ( results ) => {
358
+ assert . equal ( results . length , 3 ) ;
359
+ done ( ) ;
360
+ } ) ;
361
+ } ) ;
362
+
363
+ it ( 'can measure distance within miles unsorted - california' , ( done ) => {
364
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
365
+ let query = new Parse . Query ( TestPoint ) ;
366
+ query . withinMilesUnsorted ( 'location' , sfo , 2200.0 ) ;
367
+ query . find ( ) . then ( ( results ) => {
368
+ assert . equal ( results . length , 2 ) ;
369
+ assert . equal ( results [ 0 ] . get ( 'name' ) , 'San Francisco' ) ;
370
+ assert . equal ( results [ 1 ] . get ( 'name' ) , 'Sacramento' ) ;
371
+ done ( ) ;
372
+ } ) ;
373
+ } ) ;
374
+
375
+ it ( 'can measure distance within miles unsorted - bay area' , ( done ) => {
376
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
377
+ let query = new Parse . Query ( TestPoint ) ;
378
+ query . withinMilesUnsorted ( 'location' , sfo , 75.0 ) ;
379
+ query . find ( ) . then ( ( results ) => {
380
+ assert . equal ( results . length , 1 ) ;
381
+ assert . equal ( results [ 0 ] . get ( 'name' ) , 'San Francisco' ) ;
382
+ done ( ) ;
383
+ } ) ;
384
+ } ) ;
385
+
386
+ it ( 'can measure distance within km unsorted - mid peninsula' , ( done ) => {
387
+ let sfo = new Parse . GeoPoint ( 37.6189722 , - 122.3748889 ) ;
388
+ let query = new Parse . Query ( TestPoint ) ;
389
+ query . withinMilesUnsorted ( 'location' , sfo , 10.0 ) ;
390
+ query . find ( ) . then ( ( results ) => {
391
+ assert . equal ( results . length , 0 ) ;
392
+ done ( ) ;
393
+ } ) ;
394
+ } ) ;
395
+
241
396
it ( 'supports withinPolygon open path' , ( done ) => {
242
397
const points = [
243
398
new Parse . GeoPoint ( 37.85 , - 122.33 ) ,
0 commit comments