This repository contains Kotlin extensions (KTX) for:
It enables you to write more concise, idiomatic Kotlin. Each set of extensions can be used independently or together.
- Kotlin-enabled project
- Kotlin coroutines
- API level 21+
- AnAPI key
dependencies {
//KTX for the Maps SDK for Android library
implementation'com.google.maps.android:maps-ktx:5.1.0'
//KTX for the Maps SDK for Android Utility Library
implementation'com.google.maps.android:maps-utils-ktx:5.1.0'
}
With this KTX library, you should be able to take advantage of several Kotlin language features such as extension functions, named parameters and default arguments, destructuring declarations, and coroutines.
This repository includes ademo appthat illustrates the use of this KTX library.
To run the demo app, you'll have to:
- Get a Maps API key
- Create a file in the root directory called
secrets.properties
(this file shouldNOTbe under version control to protect your API key) - Add a single line to
secrets.properties
that looks likeMAPS_API_KEY=YOUR_API_KEY
,whereYOUR_API_KEY
is the API key you obtained in the first step - Build and run
Adding aMarker
:
Before
GoogleMapgoogleMap=//...
LatLngsydney=newLatLng(-33.852,151.211);
MarkerOptionsmarkerOptions=newMarkerOptions()
.position(Sydney)
.title("Marker in Sydney");
Markermarker=googleMap.addMarker(markerOptions);
After
valgoogleMap=//...
valsydney=LatLng(-33.852,151.211)
valmarker=googleMap.addMarker {
position(sydney)
title("Marker in Sydney")
}
Accessing aGoogleMap
instance can be retrieved using coroutines vs. traditional the callback mechanism. The example here demonstrates how you can use this feature alongside withLifecycle-aware coroutine scopesprovided in Android’s Architecture Components. To use this, you'll need to add the following to yourbuild.gradle
dependencies:
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:<latest-version>'
Before
@Override
publicvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
SupportMapFragmentmapFragment= ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(newOnMapReadyCallback{
@Override
publicvoidonMapReady(GoogleMapgoogleMap) {
// Access GoogleMap instance here
}
});
}
After
overridefunonCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
valmapFragment=supportFragmentManager.findFragmentById(R.id.map)as?SupportMapFragment
lifecycle.coroutineScope.launchWhenCreated {
valgoogleMap=mapFragment?.awaitMap()
}
}
Listing to camera events can be collected viaKotlin Flow.
Before
valgoogleMap=//...
googleMap.setOnCameraIdleListener= {//... }
googleMap.setOnCameraMoveCanceledListener{//... }
googleMap.setOnCameraMoveListener{//... }
googleMap.setOnCameraMoveStartedListener{//... }
After
//To be invoked within a coroutine scope
googleMap.cameraIdleEvents().collect {//... }
googleMap.cameraMoveCanceledEvents().collect {//... }
googleMap.cameraMoveEvents().collect {//... }
googleMap.cameraMoveStartedEvents().collect {//... }
Checking if aLatLng
is contained within aPolygon
:
Before
Polygonpolygon=// some polygon
LatLnglatlng=// some latlng
booleanresult=PolygonUtil.containsLocation(latlng,polygon.getPoints(),true);
After
valpolygon:Polygon=//some polygon
vallatlng:LatLng=//some latlng
valresult:Boolean=polygon.contains(latLng)
Creating aGeoJsonLayer
object:
Before
GeoJsonLayerlayer=newGeoJsonLayer(
map,
geoJsonFile,
null,
polygonManager,
null,
groundOverlayManager
);
After
vallayer=geoJsonLayer(
map=map,
geoJsonFile=geoJsonFile,
polygonManager=polygonManager,
groundOverlayManager=groundOverlayManager
)
Destructuring properties of aPoint
:
Before
Pointpoint=newPoint(1.0,2.0);
doublex=point.x;
doubley=point.y;
After
valpoint=Point(1.0,2.0)
val(x, y)=point
You can learn more about all the extensions provided by this library by reading thereference documents.
Encounter an issue while using this library?
If you find a bug or have a feature request, pleasefile an issue. Or, if you'd like to contribute, send us apull requestand refer to ourcode of conduct.
You can also reach us on ourDiscord channel.
For more information, check out the detailed guide on the Google Developers site.