All Projects → googlemaps → Android Maps Ktx

googlemaps / Android Maps Ktx

Licence: apache-2.0
Kotlin extensions (KTX) for the Maps SDK and Utility Library for Android

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Android Maps Ktx

Gradientpathrenderer
Renders MKPolyline with a fancy multicoloured gradient fill
Stars: ✭ 112 (-26.8%)
Mutual labels:  maps
Maps Api For Javascript Examples
Self-contained examples for Maps API for JavaScript v3.
Stars: ✭ 130 (-15.03%)
Mutual labels:  maps
Geojsonify
Easily add GeoJson layers to your Maps
Stars: ✭ 141 (-7.84%)
Mutual labels:  maps
Eon Map
Realtime maps with PubNub and MapBox.
Stars: ✭ 121 (-20.92%)
Mutual labels:  maps
Placepicker
Free Android Map Place Picker alternative using Geocoder instead of Google APIs
Stars: ✭ 126 (-17.65%)
Mutual labels:  maps
Ahorn
Visual Map Maker and Level Editor for the game Celeste
Stars: ✭ 132 (-13.73%)
Mutual labels:  maps
Fireshodanmap
FireShodanMap is a Realtime map that integrates Firebase, Google Maps and Shodan. A search is carried out using Shodan searching vulnerable devices and they are showed on the map for analysis. All data updated in Firebase are Realtime.
Stars: ✭ 111 (-27.45%)
Mutual labels:  maps
Uber React
Uber-like project in React Native
Stars: ✭ 151 (-1.31%)
Mutual labels:  maps
Here Android Sdk Examples
Java-based projects using the HERE SDK for Android.
Stars: ✭ 127 (-16.99%)
Mutual labels:  maps
Country Iso
🗺 Get the ISO 3166-1 alpha-3 country code from geographic coordinates.
Stars: ✭ 141 (-7.84%)
Mutual labels:  maps
Planetutils
Scripts and a Docker container to maintain your own OpenStreetMap planet, terrain tiles, & Valhalla Tilepacks
Stars: ✭ 121 (-20.92%)
Mutual labels:  maps
Pingplacepicker
An almost plug and play replacement for Google's Place Picker
Stars: ✭ 124 (-18.95%)
Mutual labels:  maps
Mapbox Gl Native Android
Interactive, thoroughly customizable maps in native Android powered by vector tiles and OpenGL
Stars: ✭ 135 (-11.76%)
Mutual labels:  maps
Mobile Sdk
CARTO Mobile SDK core project
Stars: ✭ 116 (-24.18%)
Mutual labels:  maps
Benmaps.fr
Web maps that don't track you.
Stars: ✭ 147 (-3.92%)
Mutual labels:  maps
Bingmapsv8codesamples
This is a collection of over two hundred code samples an growing for the Bing Maps V8 web control.
Stars: ✭ 111 (-27.45%)
Mutual labels:  maps
Tilehut
A modest, but cozy home for your map tiles
Stars: ✭ 132 (-13.73%)
Mutual labels:  maps
Openrailwaymap
An OpenStreetMap-based project for creating a map of the world's railway infrastructure.
Stars: ✭ 150 (-1.96%)
Mutual labels:  maps
Geodataviz Toolkit
The GeoDataViz Toolkit is a set of resources that will help you communicate your data effectively through the design of compelling visuals. In this repository we are sharing resources, assets and other useful links.
Stars: ✭ 149 (-2.61%)
Mutual labels:  maps
Pure Maps
Maps and navigation
Stars: ✭ 136 (-11.11%)
Mutual labels:  maps

Tests Stable Discord Apache-2.0

Maps Android KTX

Description

This repository contains Kotlin extensions (KTX) for:

  1. The Maps SDK for Android
  2. The Maps 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 15+

Installation

If you are using the Maps SDK through Google Play Services:

dependencies {

    // KTX for the Maps SDK for Android library
    implementation 'com.google.maps.android:maps-ktx:3.0.0'

    // KTX for the Maps SDK for Android Utility Library
    implementation 'com.google.maps.android:maps-utils-ktx:3.0.0'

    // It is recommended to also include the latest Maps SDK and/or Utility Library versions
    // as well to ensure that you have the latest features and bug fixes.
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.maps.android:android-maps-utils:2.0.3'
}

Alternatively, if you are using the Maps SDK through the standalone V3 BETA distribution:

dependencies {

    // KTX for the Maps SDK for Android V3 BETA Library
    implementation 'com.google.maps.android:maps-v3-ktx:3.0.0'

    // KTX for the Maps SDK for Android V3 BETA Utility Library
    implementation 'com.google.maps.android:maps-utils-v3-ktx:3.0.0'

    // It is recommended to also include the latest Maps SDK and/or Utility Library versions
    // as well to ensure that you have the latest features and bug fixes.
    implementation 'com.google.android.libraries.maps:maps:3.1.0-beta'
    implementation 'com.google.maps.android:android-maps-utils-v3:2.0.3'
}

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 a demo app that 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 called secure.properties (this file should NOT be under version control to protect your API key)
  3. Add a single line to secure.properties that looks like MAPS_API_KEY=YOUR_API_KEY, where YOUR_API_KEY is the API key you obtained in the first step
  4. Build and run

Maps SDK KTX

Extension functions

Adding a Marker:

Before

GoogleMap googleMap = // ...
LatLng sydney = new LatLng(-33.852, 151.211);
MarkerOptions markerOptions = new MarkerOptions()
    .position(Sydney)
    .title("Marker in Sydney");
Marker marker = googleMap.addMarker(markerOptions);

After

val googleMap = // ...
val sydney = LatLng(-33.852, 151.211)
val marker = googleMap.addMarker {
    position(sydney)
    title("Marker in Sydney")
}

Coroutines

Accessing a GoogleMap instance can be retrieved using coroutines vs. traditional the callback mechanism. The example here demonstrates how you can use this feature alongside with Lifecycle-aware coroutine scopes provided in Android’s Architecture Components. To use this, you'll need to add the following to your build.gradle dependencies: implementation 'androidx.lifecycle:lifecycle-runtime-ktx:<latest-version>'

Before

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SupportMapFragment mapFragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));

    mapFragment.getMapAsync(new OnMapReadyCallback {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            // Access GoogleMap instance here
        }
    });
}

After

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as? SupportMapFragment

    lifecycle.coroutineScope.launchWhenCreated {
        val googleMap = mapFragment?.awaitMap()
    }
}

Flow

Note: The following feature utilizes an experimental coroutine API. To use this, you will have to add the @OptIn(ExperimentalCoroutinesApi::class) at the site of its usage as well as the compiler flag -Xopt-in=kotlin.RequiresOptIn.

Listing to camera events can be collected via Kotlin Flow.

Before

val googleMap = //...
googleMap.setOnCameraIdleListener = { //... }
googleMap.setOnCameraMoveCanceledListener { //... }
googleMap.setOnCameraMoveListener { //... }
googleMap.setOnCameraMoveStartedListener { //... }

After

// To be invoked within a coroutine scope
googleMap.cameraEvents().collect { event ->
    when (event) {
        is CameraIdleEvent -> //...
        is CameraMoveCanceledEvent -> //...
        is CameraMoveEvent -> //...
        is CameraMoveStartedEvent -> //...
    }
}

Maps SDK for Android Utilities KTX

Extension functions

Checking if a LatLng is contained within a Polygon:

Before

Polygon polygon = // some polygon
LatLng latlng = // some latlng
boolean result = PolygonUtil.containsLocation(latlng, polygon.getPoints(), true);

After

val polygon: Polygon = // some polygon
val latlng: LatLng = // some latlng
val result: Boolean = polygon.contains(latLng)

Named parameters and default arguments

Creating a GeoJsonLayer object:

Before

GeoJsonLayer layer = new GeoJsonLayer(
    map, 
    geoJsonFile, 
    null, 
    polygonManager, 
    null, 
    groundOverlayManager
);

After

val layer = geoJsonLayer(
    map = map,
    geoJsonFile = geoJsonFile,
    polygonManager = polygonManager,
    groundOverlayManager = groundOverlayManager
)

Destructuring Declarations

Destructuring properties of a Point:

Before

Point point = new Point(1.0, 2.0);
double x = point.x;
double y = point.y;

After

val point = Point(1.0, 2.0)
val (x, y) = point

Documentation

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

Support

Encounter an issue while using this library?

If you find a bug or have a feature request, please file an issue. Or, if you'd like to contribute, send us a pull request and refer to our code of conduct.

You can also reach us on our Discord channel.

For more information, check out the detailed guide on the Google Developers site.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].