Для стр.1:
Сначала спрячьте все достопримечательности по умолчанию из Google Maps, как в этом ответе Jozef :
Вы можете сделать это просто путем изменения стиля карты: Добавление
стилизованный
Карта
- Создать файл JSON src \ main \ res \ raw \ map_style.json примерно так:
[
{
featureType: "poi",
elementType: "labels",
stylers: [
{
visibility: "off"
}
]
}
]
- Добавить стиль карты к вашему
GoogleMap
googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(getContext(), R.raw.map_style));
Чем использовать Поиск мест из Google Places API и получить список точек интереса с помощью запроса ближайшего URL:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<LAT_LNG_e_g_ 32.944552,-97.129767>&types=point_of_interest&radius=<RADIUS_IN_METERS>&sensor=false&key=<YOUR_APP_KEY>
разберите его и программно покажите нужные места на карте как ваши кликабельные маркеры.
NB! Запрос соседнего URL-адреса возвращает только 20 мест, для загрузки дополнительных данных следует использовать строковое значение из тега ответа next_page_token
и передать его через параметр pagetoken
для следующего запроса:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<LAT_LNG_e_g_ 32.944552,-97.129767>&types=point_of_interest&radius=<RADIUS_IN_METERS>&sensor=false&key=<YOUR_APP_KEY>&pagetoken=<TOKEN_FOR_NEXT_PAGE_FROM_next_page_token_TAG_OF_RESPONSE>
И не забудьте включить API Places для вашего приложения из Консоль .
Для стр.2:
Используйте информацию из п. 1 ( Поиск места ) и предложено Вадимом Экслером в своем комментарии Сведения о месте в окне пользовательской информации Android Карт Google, как в это пример:
public class CustomInfoWindowGoogleMap implements GoogleMap.InfoWindowAdapter {
private Context context;
public CustomInfoWindowGoogleMap(Context ctx){
context = ctx;
}
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
View view = ((Activity)context).getLayoutInflater()
.inflate(R.layout.map_custom_infowindow, null);
TextView name_tv = view.findViewById(R.id.name);
TextView details_tv = view.findViewById(R.id.details);
ImageView img = view.findViewById(R.id.pic);
TextView hotel_tv = view.findViewById(R.id.hotels);
TextView food_tv = view.findViewById(R.id.food);
TextView transport_tv = view.findViewById(R.id.transport);
name_tv.setText(marker.getTitle());
details_tv.setText(marker.getSnippet());
InfoWindowData infoWindowData = (InfoWindowData) marker.getTag();
int imageId = context.getResources().getIdentifier(infoWindowData.getImage().toLowerCase(),
"drawable", context.getPackageName());
img.setImageResource(imageId);
hotel_tv.setText(infoWindowData.getHotel());
food_tv.setText(infoWindowData.getFood());
transport_tv.setText(infoWindowData.getTransport());
return view;
}
}