Skip to content
This repository has been archived by the owner on Jul 10, 2024. It is now read-only.

mateuszkwiecinski/android-maps-ktx

Repository files navigation

Tests Stable Discord Apache-2.0

Maps Android KTX

Description

This repository contains Kotlin extensions (KTX) for:

  1. TheMaps SDK for Android
  2. TheMaps SDK for Android Utility Library

It enables you to write more concise, idiomatic Kotlin. Each set of extensions can be used independently or together.

Requirements

  • Kotlin-enabled project
  • Kotlin coroutines
  • API level 21+
  • AnAPI key

Installation

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'
}

Example Usage

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.

Demo App

This repository includes ademo appthat illustrates the use of this KTX library.

To run the demo app, you'll have to:

  1. Get a Maps API key
  2. Create a file in the root directory calledsecrets.properties(this file shouldNOTbe under version control to protect your API key)
  3. Add a single line tosecrets.propertiesthat looks likeMAPS_API_KEY=YOUR_API_KEY,whereYOUR_API_KEYis the API key you obtained in the first step
  4. Build and run

Maps SDK KTX

Extension functions

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")
}

Coroutines

Accessing aGoogleMapinstance 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.gradledependencies: 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()
}
}

Flow

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 {//... }

Maps SDK for Android Utilities KTX

Extension functions

Checking if aLatLngis 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)

Named parameters and default arguments

Creating aGeoJsonLayerobject:

Before

GeoJsonLayerlayer=newGeoJsonLayer(
map,
geoJsonFile,
null,
polygonManager,
null,
groundOverlayManager
);

After

vallayer=geoJsonLayer(
map=map,
geoJsonFile=geoJsonFile,
polygonManager=polygonManager,
groundOverlayManager=groundOverlayManager
)

Destructuring Declarations

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

Documentation

You can learn more about all the extensions provided by this library by reading thereference documents.

Support

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.

About

Kotlin extensions (KTX) for the Maps SDK and Utility Library for Android

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages

  • Kotlin 100.0%