Ответ 1
Попробуйте это решение здесь. Вы можете получить направление движения или ходьбы на V2.
Я искал ответ с помощью Google и здесь, и единственные соответствующие сообщения, которые я нашел:
Google Maps Android V2 и API направления
Проложите маршрут проезда, используя Google Maps API v2
но там нет ответа. Так что я уже говорил об этом, но я скажу это снова. Я ищу решение для API Google Map v2 с использованием FragmentActivity и объектов SupportMagFragment и LatLng, а не с использованием MapView, MapActivity и GeoPoint.
Кроме того, у меня нет объекта Overlay, поэтому я не могу нарисовать направление на карте, есть ли альтернатива этому?
Так есть ли способ сделать это?
Попробуйте это решение здесь. Вы можете получить направление движения или ходьбы на V2.
Наложение - это действительно то, что нужно забыть.
Полилинии можно легко нарисовать
https://developers.google.com/maps/documentation/android/lines#add_a_polyline
Просто пройдите через ваши точки после того, как вы проанализировали ответ JSON:
PolylineOptions rectOptions = new PolylineOptions()
.add(new LatLng(37.35, -122.0))
.add(new LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude
.add(new LatLng(37.45, -122.2)) // Same latitude, and 30km to the west
.add(new LatLng(37.35, -122.2)) // Same longitude, and 16km to the south
.add(new LatLng(37.35, -122.0)); // Closes the polyline.
// Set the rectangle color to red
rectOptions.color(Color.RED);
// Get back the mutable Polyline
Polyline polyline = myMap.addPolyline(rectOptions);
Ваше название вопроса намного более общее, чем ваши требования, поэтому я отвечу на это так, как мне кажется, это принесет пользу тем, кто рассматривает этот вопрос, и, надеюсь, удовлетворит ваши требования, возможно, по-другому.
Если вы не показываете направления в контексте карты, которая уже является загруженным фрагментом, и что-то сделано для отображения направлений по карте (что, вероятно, похоже на то, что делает OP), это проще, и я считаю, что стандарт для этого используйте Intent
.
Это запускает активность по перемещению карты (через отдельное приложение, в котором приложение запускается, зависит от совместимых с пользователем приложений, которые по умолчанию являются Google Maps), который отображает направления от исходного адреса (String originAddress
) до
адрес назначения (String destinationAddress
) по дорогам:
// Build the URI query string.
String uriPath = "https://www.google.com/maps/dir/";
// Format parameters according to documentation at:
// https://developers.google.com/maps/documentation/directions/intro
String uriParams =
"?api=1" +
"&origin=" + originAddress.replace(" ", "+")
.replace(",", "") +
"&destination=" + destinationAddress.replace(" ", "+")
.replace(",", "") +
"&travelmode=driving";
Uri queryURI = Uri.parse(uriPath + uriParams);
// Open the map.
Intent intent = new Intent(Intent.ACTION_VIEW, queryURI);
startActivity(activity, intent, null);
(Где activity
является просто активным в настоящий момент activity
- полученным с помощью любых средств, подходящих в текущем контексте программирования).
Следующий код получает адрес String
из объекта LatLng
(который затем должен быть обработан для запроса URI String
, как указано выше):
/**
* Retrieves an address `String` from a `LatLng` object.
*/
private void getAddressFromLocation(
final StringBuilder address, final LatLng latlng) {
// Create the URI query String.
String uriPath =
"https://maps.googleapis.com/maps/api/geocode/json";
String uriParams =
"?latlng=" + String.format("%f,%f",
latlng.latitude, latlng.longitude) +
"&key=" + GOOGLE_MAPS_WEB_API_KEY;
String uriString = uriPath + uriParams;
// Issue the query using the Volley library for networking.
RequestFuture<JSONObject> future = RequestFuture.newFuture();
JSONObject response = null;
// Required for JsonObjectRequest, but not important here.
Map<String, String> jsonParams = new HashMap<String, String>();
JsonObjectRequest request =
new JsonObjectRequest(Request.Method.POST,
uriString,
new JSONObject(jsonParams),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if (response != null) {
String resultString =
response.getJSONArray("results")
.getJSONObject(0)
.getString("formatted_address");
// Assumes `address` was empty.
address.append(resultString);
} // end of if
// No response was received.
} catch (JSONException e) {
// Most likely, an assumption about the JSON
// structure was invalid.
e.printStackTrace();
}
} // end of `onResponse()`
}, // end of `new Response.Listener<JSONObject>()`
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(LOG_TAG, "Error occurred ", error);
}
});
// Add the request to the request queue.
// `VolleyRequestQueue` is a singleton containing
// an instance of a Volley `RequestQueue`.
VolleyRequestQueue.getInstance(activity)
.addToRequestQueue(request);
}
Этот запрос является асинхронным, но он может быть выполнен синхронно.
Вам нужно будет вызвать toString()
для фактического параметра, переданного в address
, чтобы получить originAddress
.
В: Я искал ответ, используя Google, и здесь, и только соответствующие сообщения, которые я нашел: Google Maps Android V2 и Direction API API Google map v2 - получить указания по проезду
Ответ: Ваше высказывание, "но ответа там нет". не совсем верно. На этом сайте вы можете найти всего лишь несколько подсказок. Я думаю, что вы не получите идеальный код и конкретный инструмент KNOW-HOW здесь. На самом деле, многие разработчики хотят, чтобы приложение отображало маршрутизацию или маршруты на Картах Google. Но я думаю, что нет решения, чтобы получить указания только с чистым API Карт Google v2.
В: Итак, я уже упоминал об этом, но я скажу это снова. я ищет решение для Google Map API v2, используя Объекты FragmentActivity и SupportMagFragment и LatLng, а не используя MapView, MapActivtiy и GeoPoint.
Ответ: Вот несколько хороших учебных пособий (нажмите здесь). Вы можете найти то, что хотите.
Q: Кроме того, у меня нет объекта Overlay для использования, поэтому я не могу рисовать направление на карте, есть ли альтернатива для этого? Так что есть способ сделать это?
Ответ: В API Карт Google версии 2 раздражающее наложение и т.д. больше не требуются. Для этого вы можете найти ответ на моем связанном сайте выше.