flutter - 如何在 Flutter 中仅显示一英里内的帖子
问题描述
我正在尝试制作一个可以显示用户附近帖子的功能。
从我的代码中,首先我从火力库(timelineLocalRef)读取数据,这样
getTimelineLocal() async {
QuerySnapshot snapshotLocal = await timelineLocalRef
.doc('test')
.collection('userPosts')
.orderBy('timestamp', descending: true)
.get();
List<PostL> postsLocal =
snapshotLocal.docs.map((doc) => PostL.fromDocument(doc)).toList();
setState(() {
this.postsLocal = postsLocal;
});
在timelineRef中,帖子的信息被保存,这样,
获得发布信息后,我还将使用 Geolocator 获取用户位置。
getUserLocation() async {
Position position = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
posXuser = position.latitude;
posYuser = position.longitude;
}
有了用户位置(posXuser,posYuser)和发布位置(posX,posY),我应该能够使用下面的函数计算两者之间的距离。
double calculateDistance(lat1, lon1, lat2, lon2) {
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 -
c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
return 0.621371 * 12742 * asin(sqrt(a));
//return mile distance
}
所以我想要的是从第一个代码开始,当我在本地发布帖子时,我只想导入 1 英里外的帖子。你能帮我制作一个条件映射快照吗?
解决方案
您需要执行查询服务器端。Firebase 对这种查询的支持有限:
Cloud Firestore 仅允许每个复合查询使用单个范围子句,这意味着我们无法通过简单地将纬度和经度存储为单独的字段并查询边界框来执行地理查询。
https://firebase.google.com/docs/firestore/solutions/geoqueries
推荐阅读
- excel - 宏只能手动运行
- maven - Google Cloud SDK App-Engine 项目优先级
- c# - 如果选择了过去的日期,则 ASP.NET Mvc 警告消息
- php - 在只读输入文本字段中显示 Woocommerce 订单元数据值
- laravel-5.7 - 试图获取非对象 Laravel 5.7 的属性“名字”
- javascript - 当汽车撞到画布上的轨道时发出警报
- facebook - 如何使用 Facebook 中的测试表单在 Web-hook 中检索潜在客户信息
- apache-kafka - Kafka Connect JDBC 在 JsonConverter 上失败
- java - Java while 函数仅每 1 秒
- ios - 如何快速将字符串“One”的字符转换为整数“1”