gpt4 book ai didi

android - 为什么 GeoFire 的 GeoQuery 的 queryAtLocation 不返回键,即使在给定 KM 内的经纬度?

转载 作者:行者123 更新时间:2023-11-30 00:08:21 34 4
gpt4 key购买 nike

我正在创建一个 Android 应用程序,一个 Uber 克隆。在此我使用 Firebase 列出用户创建的游乐设施。

Ride 以下列格式存储。

{
"category" : "NUVO",
"driverids" : "",
"drop_lat" : "40.7127753",
"drop_long" : "-74.0059728",
"estdate" : "Wed@Feb@28th",
"estmile" : "4.19",
"esttime" : "01:02@PM",
"esttotalfare" : "4.61",
"fareest" : "1.1",
"g" : "t9z83wv46x",
"l" : [ 40.674426, -73.944033 ],
"notes" : "Gv",
"orgin_lat" : "145 Brooklyn Ave, Brooklyn, NY 11213, USA%20New York, NY, USA",
"request_id" : "5a75579740d166e95b8b4567",
"requested_category" : "FAM_SUV",
"rider_id" : "5a507bf340d16660288b4567",
"status" : 1,
"trip_id" : 0
}

现在我正在使用 GeoFire 的 GeoQuery 的 queryAtLocation 来选择距离他当前位置 5 公里以内的所有游乐设施。

查询使用字段“l”中的经纬度,并将其与司机当前位置的经纬度进行比较。

如果列表的经度和纬度在 5 公里以内,它将返回键,即子“l”的父名称。

现在我在印度。我使用 Lockito App 来修复印度的模拟 GPS 位置。之后,我在 5 公里半径内创建了一个 Ride。

现在,该车已成功列入司机名单。没问题。

我的问题

但是当我修复美国的模拟 GPS 位置时,此流程不起作用。我将司机位置固定在 Brookyln Childeren's Museum 上,并在同一个博物馆上创建了行程。但是 GeoQuery 没有调用 onKeyEntered 。它只是在调用 GeoQueryReady 函数后存在。

我从应用程序中检查我当前的纬度和朗,它返回为 40.67434763453142,-73.94402358680964。我根据字段“l”上的经纬度检查了这个。(引用上面的 JSON)。两者都指向相同的位置。

但 GeoQuery 未能检索到它

我的问题为什么会发生这个问题?如果我使用印度的位置。 Geoquery 工作完美。

但为什么它在美国失败了。

您可能会说,“lockito 中会有问题”。但是 Lockito 返回正确的位置 lat lang 。我在 Logcat 中检查过它。而且,如果 Lockitto 有问题,那么它在印度是如何运作的。

这是我的 GeoQoery 代码:

 try {
showDialog();
double nearByDistanceRadius = 5.00d;

com.firebase.geofire.GeoFire geoFire = new com.firebase.geofire.GeoFire(FirebaseDatabase.getInstance().getReference().child(childtype));
final com.firebase.geofire.GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), nearByDistanceRadius);
geoQueryEventListener=new GeoQueryEventListener() {
@Override
public void onKeyEntered(final String key, GeoLocation location) {
Toast.makeText (getApplicationContext(), "The key is = ",Toast.LENGTH_LONG).show();
}

@Override
public void onKeyExited(final String key) {
System.out.println("ON KEYEXITED"+key);
}

@Override
public void onKeyMoved(String key, GeoLocation location) {
System.out.println("ON KEYMOVED"+key);
}

@Override
public void onGeoQueryReady() {
System.out.println("ON KEYQUERYREADY");


@Override
public void onGeoQueryError(DatabaseError error) {
System.out.println("ON KEYERROR"+error);
}
};
geoQuery.addGeoQueryEventListener(geoQueryEventListener);

} catch (Exception e) {
e.printStackTrace();
}

以上,除了 onGeoQueryReady ,如果我使用 USA,则不会调用任何方法。但它是在印度工作。谁能告诉我为什么会这样?

最佳答案

这可能早已不复存在,但也许可以帮助其他人。既然你提到了它的模拟 GPS 坐标。你可能手动输入了它们。

GeoFire 使用特殊的 g:“代码”(10 位代码),它是区域明智的/城市明智的

如果您在同一个城市/国家(在您的情况下是印度)使用相同的 g 代码,它将正常工作!但是,如果您在另一个国家/地区使用相同的代码,geoQuery 将失败。让它发挥作用。你需要在代码中添加一行geoFire.SetLocation() 和美国的某个人只需要运行一次该代码。 geoFire 将在 g: ""Location.获得 key 后,您可以从应用中删除该行。您可以使用 geoFire 生成的 key 在美国手动输入任意数量的位置,geoQuery 将始终有效!!!确保使用与 geoFire 相同的模式。G: 我: 0: 1:

关于android - 为什么 GeoFire 的 GeoQuery 的 queryAtLocation 不返回键,即使在给定 KM 内的经纬度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48595274/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com