Flutter Firestore Geo query
GeoPoint userGeoPoint = user.geoPoint["geopoint"];
// distance in miles double distance = 30;
double lat = 0.0144927536231884;
double lon = 0.0181818181818182;
double lowerLat = userGeoPoint.latitude - (lat * distance);
double lowerLon = userGeoPoint.longitude - (lon * distance);
double greaterLat = userGeoPint.latitude + (lat * distance);
double greaterLon = userGeoPint.longitude + (lon * distance);
GeoPoint lesserGeopoint = GeoPoint(lowerLat, lowerLon);
GeoPoint greaterGeopoint = GeoPoint(greaterLat, greaterLon);
Query query = Firestore.instance
.collection(path)
.where("geoPoint.geopoint", isGreaterThan: lesserGeopoint)
.where("geoPoint.geopoint", isLessThan: greaterGeopoint)
.limit(limit);
This worked for me. Hope it helps.
Mircea
Updated on December 12, 2022Comments
-
Mircea over 1 year
WHAT I HAVE TO DO:
I'm building an application where I want to do a query in firebase and receive the users who are in a range of X kilometers. But I want to limit this received documents and also to have a function for getting more documents on the scroll. I'm using a
StreamBuilder->ListView.build
in order to build my list. When I'm going to receive the end of the scrollable list I want to get more documents from Firestore (if I have any).
WHAT I'VE DONE ALREADY:
So far I found just 2 solutions for my problem:
THE PROBLEM:
Both of those libraries are good with just one BIG problem, in both of this case I'm not able to limit the number of documents that I'm going to receive (I can JUST limit the original query for
Firestore.instance.collection("MyColection")
) but is not going to help me that much because I will have this caseGive me 10 documents from Firestore -> Give me the 5km range users -> I will receive just 4 let's say.
What I want instead is to receive 10 documents from Firestore within a range of X.
Is there any solution for this problem? Or I need to implement my own library for this? Or is not possible even so?