我正在使用GeoFlutterFire,这是Flutter的插件,它可以过滤集合中指定的GeoFirePoint附近的记录。
距离键应该与Firestore <DocumentSnapshot>s
一起返回,但没有,只有默认键。当我如下查找时,它返回null。密钥不存在。
这是一个很大的挫败感,我需要一定的距离,以便可以在应用程序的Cards上显示它,我的代码与该插件的示例代码非常接近,因此我看不到为什么它不起作用。
GeoFirePoint usersAddressGeoFirePoint = geo.point(latitude: 56.088944, longitude: -4.151800);
localJobsStream = geo.collection(collectionRef: myFirestore.collection('JobsMeta'))
.within(center: usersAddressGeoFirePoint, radius: 1000, field: 'position', strictMode: true);
localJobsStream.listen((List<DocumentSnapshot> documentList) {
${documentList[0].data.keys.contains('distance')}");
}
答案 0 :(得分:5)
我检查了Geoflutterfire的(中心:中心,半径:半径,字段:字段,strictMode:strictMode)内方法,并按预期返回了Stream<List<DocumentSnapshot>>
,但为了进行距离计算,它正在使用包装类 DistanceDocSnapshot ,该类具有DocumentSnapshot和distance变量。
当我调试“内部” 方法时,我发现DistanceDocSnapshot的变量 distance 的类型为double,但是他们没有在 DocumentSnapshot中设置距离值,然后返回。
因此,程序包中有数据,但是直到我们得到它为止才有用。在他们解决此问题或我们了解使用它的其他方式时,您可以使用以下代码来获取距离,因为他们在软件包中使用的距离与自述文件here GeoFlutterFire Package中提到的一样:
GeoFirePoint center = geo.point(
latitude: currentUserPos.latitude,
longitude: currentUserPos.longitude,
);
double distance = center.distance(lat: geoPoint.latitude, lng: geoPoint.longitude);
更新相同: 根据软件包页面上的更改日志,我们将无法通过版本2.1.0
使用doc.data ['distance']访问数据答案 1 :(得分:0)
用geoflutterfire返回距离
获取用户位置
ID Item Valid_From Valid_To Overlap By
1 i_1 2007-01-01 2030-01-01 X Days
1 i_2 2007-01-01 2030-01-01 X Days
将用户位置转换为GeoPoint
from django.template import Template, Context
template = Template('Hello {{name}}.')
context = Context(dict(name='World'))
rendered: str = template.render(context)
从您的DocumentSnapshot List数据中获取
将列表数据转换为经时长
Geolocator userLocation = Geolocator()
使用经纬度来获取距离
point.distance(纬度,经度)
GeoFirePoint point = geo.point(latitude: userLocation.latitude, longitude: userLocation.longitude);