【发布时间】:2018-06-12 09:48:53
【问题描述】:
我在谷歌地图上将心画成一条折线,取决于半径(1 - 100 米)。一旦画出心形,用户需要在该心形边界上行走,并且需要从头到尾完成(从底部开始,然后向左然后向右,然后再从底部开始)。
我可以画心,我得到了 360 分(latlng)。这是我的代码,它将绘制心脏和图像。
private void initPath() {
path = new PolylineOptions();
path.color(ContextCompat.getColor(mActivity,R.color.heart_green));
path.width(25);
// offset to bottom
double offsetY = getY(Math.toRadians(180));
for (int angle = 0; angle <= 360; angle++) {
double t = Math.toRadians(angle);
double x = getX(t);
double y = getY(t) - offsetY;
//Log.d(TAG, "angle = " + angle + "(x = " + x + ",y= " + y + ")");
//convert x,y to lat lng
LatLng latLng = getLatLng(x, y, center);
path.add(latLng);
heart360Points.add(latLng);
}
}
private double getX(double t) {
return radius * 16 * Math.sin(t) * Math.sin(t) * Math.sin(t) / HEART_RATIO;
}
private double getY(double t) {
return radius * (13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t)) / HEART_RATIO;
}
private LatLng getLatLng(double dx, double dy, LatLng centerHeart) {
return new LatLng(centerHeart.latitude + Math.toDegrees(dy / EARTH_RADIUS),
centerHeart.longitude + Math.toDegrees(dx / EARTH_RADIUS) / Math.cos(Math.toRadians(centerHeart.latitude)));
}
但是每当我尝试在心脏边界上行走时,GPS 位置波动太大,所以我永远无法完成心脏行走。我目前每秒都在请求位置。
这是我的位置代码。
private static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = 2000 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.love_lead_perform);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mApiClient = new GoogleApiClient.Builder(this)
.addApi(ActivityRecognition.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mApiClient.connect();
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mSettingsClient = LocationServices.getSettingsClient(this);
createLocationCallback();
createLocationRequest();
createLocationSettingsRequest();
}
private void createLocationSettingsRequest() {
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
mLocationSettingsRequest = builder.build();
}
private void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
我不明白为什么 GPS 位置波动太大。即使我站着,我也会得到不同的 GPS 位置。
如何获得准确的 GPS 位置?
【问题讨论】:
-
您在 manifest.xml 上调用了哪些权限?
-
也许你需要参军 - 我听说他们比普通人获得更好的 GSP 数据 :) 但我认为你并不孤单,即使是 PokemonGo(我不玩)也会摇摆不定一直在地图周围。因此,您可能遭受设备上 GPS 信号的“默认”随机性,这可能会受到您的位置(隧道、建筑物、树木 == 遮挡 GPS 所需的卫星)和/或天气的影响 -这似乎会影响寻宝。
-
是的,确实如此,但“Waz3”、“Ub3r”和正确的“G00gle Directions”也确实像一个魅力,在几米左右的移动和精度......我认为他们对我们隐瞒了一些秘密,小开发者。
-
@statosdotcom - 他们可能会将手机位置数据与 gps 结合起来,或者平均滑动 5 到 20 秒的数据,以根据您移动的速度消除曲折。甚至可能根据从您最近 n 个位置获取的向量丢弃突然的“侧向移动” - 即需要填充/删除错误数据并预测“好”样本的大量内容。
-
@PatrickArtner 很好的分析和评论,谢谢。你完全正确,这不仅仅是使用正确工具的问题,而是将其与人类理性方面的专业知识结合起来,即,不仅仅是盲目地依赖技术数据,而是使用准确的数据来预测发生了什么。人+机器...哇...我们要去哪里? :D
标签: android gps google-maps-android-api-2 google-location-services