gpt4 book ai didi

java - map fragment 直接将相机移动到当前位置

转载 作者:行者123 更新时间:2023-12-02 10:44:28 24 4
gpt4 key购买 nike

我在 map fragment 中使用地点选择器编写了一个代码来显示附近的地点,但它无法直接将相机移动到我当前的手机位置,我必须使用 center = new lat long 手动输入经纬度但我希望它直接根据手机位置移动。

如何让相机直接移动到我的位置?感谢您的帮助

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
MapFragment mapFragment;
GoogleMap gMap;
MarkerOptions markerOptions = new MarkerOptions();
CameraPosition cameraPosition;
LatLng center, latLng;
String title;

public static final String ID = "id";
public static final String TITLE = "name";
public static final String LAT = "lat";
public static final String LNG = "lng";

private String url = "http://192.168.0.12/myjson/markers.php";

String tag_json_obj = "json_obj_req";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

}

@Override
public void onMapReady(GoogleMap googleMap) {
gMap = googleMap;

center = new LatLng(-6.337800, 106.698990);
cameraPosition = new CameraPosition.Builder().target(center).zoom(10).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

getMarkers();
}

private void addMarker(LatLng latlng, final String title) {
markerOptions.position(latlng);
markerOptions.title(title);
gMap.addMarker(markerOptions);

gMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Toast.makeText(getApplicationContext(), marker.getTitle(), Toast.LENGTH_SHORT).show();
}
});
}

// Fungsi get JSON marker
private void getMarkers() {
StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

@Override
public void onResponse(String response) {
Log.e("Response: ", response.toString());

try {
JSONObject jObj = new JSONObject(response);
String getObject = jObj.getString("wisata");
JSONArray jsonArray = new JSONArray(getObject);

for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
title = jsonObject.getString(TITLE);
latLng = new LatLng(Double.parseDouble(jsonObject.getString(LAT)), Double.parseDouble(jsonObject.getString(LNG)));

// Menambah data marker untuk di tampilkan ke google map
addMarker(latLng, title);
}

} catch (JSONException e) {
// JSON error
e.printStackTrace();
}

}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error: ", error.getMessage());
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
}
});

AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
}
}

最佳答案

首先,您需要知道当前位置。为此,您必须使用 GoogleApiClient。然后,您可以使用 CameraPosition 将 map 运行到该位置。

以下代码首先连接到 Google Api 客户端。在连接回调中,它请求当前位置 1 秒。最后它会以动画方式映射到最后一个可用位置。

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
client = new GoogleApiClient.Builder(getContext())
.addApi(LocationServices.API)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
if (isResumed()) {
try {
LocationRequest request = new LocationRequest();
request.setInterval(1000);
request.setSmallestDisplacement(1);
LocationServices.FusedLocationApi.requestLocationUpdates(client, request, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
LatLng myLatLong = new LatLng(location.getLatitude(),
location.getLongitude());
CameraPosition cameraPosition = new CameraPosition.Builder().target(myLatLong).zoom(17).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
});
} catch (SecurityException ex) {

}
}
}

@Override
public void onConnectionSuspended(int i) {

}
}).build();
client.connect();
}

关于java - map fragment 直接将相机移动到当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52685507/

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