OK here's my first version of a wrapper for the KML packages in the Android Maps Utils.
The classes and methods i have wrapped so far are:
AndroidMapsUtils
Comment: http://googlemaps.github.io/android-maps-utils/javadoc/
Author: Martin Pearman
Version: 0.01
- KMLLayer
Methods:
- AddLayerToMap
- GetContainers As List
- GetPlacemarks As List
- HasContainers As Boolean
- HasPlacemarks As Boolean
- Initialize (GoogleMap1 As GoogleMap, InputStream1 As InputStream)
- Initialize2 (GoogleMap1 As GoogleMap, ResourceId As Int)
- IsInitialized As Boolean
- IsLayerOnMap As Boolean
- RemoveLayerFromMap
- Properties:
- KmlContainer
Methods:
- GetContainers As List
Gets a List of nested KmlContainers.
- GetPlacemarks As List
Gets a List of KmlPlacemarks.
- GetProperty (PropertyName As String) As String
Gets a single property value for the given property name.
- GetStyle (StyleId As String) As KmlStyle
Gets a style for the given id.
- HasContainers As Boolean
- HasPlacemarks As Boolean
- HasProperties As Boolean
- HasProperty (PropertyName As String) As Boolean
- IsInitialized As Boolean
- Properties:
- ContainerId As String [read only]
Gets the Container ID if it is specified.
- Properties As Map [read only]
Gets a Map where Map Keys are property names and Map Values are property values.
- KmlPlacemark
Methods:
- GetId As String
- GetProperty (Property As String) As String
- HasGeometry As Boolean
- HasProperties As Boolean
- HasProperty (Property As String) As Boolean
- IsInitialized As Boolean
- Properties:
- InlineStyle As KmlStyle [read only]
- MarkerOptions As MarkerOptions [read only]
- PolygonOptions As PolygonOptions [read only]
- PolylineOptions As PolylineOptions [read only]
- StyleId As String [read only]
- KmlStyle
Methods:
- IsInitialized As Boolean
- SetLineStringWidth (Width As Float)
Sets the width of the LineString in screen pixels.
- SetMarkerHotspot (X As Float, Y As Float, xUnits As String, yUnits As String)
Sets the hotspot / anchor point of a marker.
- SetMarkerRotation (Rotation As Float)
Sets the rotation / heading of the Point in degrees clockwise about the marker's anchor.
- SetPolygonFillColor (FillColor As Int)
- SetPolygonStrokeWidth (StrokeWidth As Float)
Sets the stroke width of the Polygon in screen pixels.
- Properties:
- Rotation As Float [read only]
Gets the rotation of a marker in degrees clockwise about the marker's anchor.
A simple b4a project that loads a KML file from file assets - works for me though the web based infowindow content of the KML is a fail!
#Region Project Attributes
#ApplicationLabel: Android Maps Utils
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
' GoogleMaps additional jar
#AdditionalJar: com.google.android.gms:play-services-maps
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
End Sub
Sub Globals
Dim GoogleMap1 As GoogleMap
Dim MapFragment1 As MapFragment
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Main")
If Not(MapFragment1.IsGooglePlayServicesAvailable) Then
Log("Google Play Services is not available")
ToastMessageShow("Google Play Services is not available", False)
End If
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub MapFragment1_Ready
Log("MapFragment1_Ready")
GoogleMap1=MapFragment1.GetMap
If GoogleMap1.IsInitialized Then
Dim CameraPosition1 As CameraPosition
CameraPosition1.Initialize(52.7523, 0.4049, 10)
GoogleMap1.AnimateCamera(CameraPosition1)
Dim KMLLayer1 As KMLLayer
KMLLayer1.Initialize(GoogleMap1, File.OpenInput(File.DirAssets, "75116131-1-KML0.simple.kml"))
KMLLayer1.AddLayerToMap
If KMLLayer1.HasContainers Then
Dim Containers As List=KMLLayer1.GetContainers
' TODO
End If
If KMLLayer1.HasPlacemarks Then
Dim Placemarks As List=KMLLayer1.GetPlacemarks
' TODO
End If
Else
Log("Error initializing GoogleMap")
ToastMessageShow("Error initializing GoogleMap", False)
End If
End Sub
I'll attach this first version of my library, the simple demo project and a
temporary updated version of GoogleMapsExtras for you all to have a look at.
I shall release a proper update to GoogleMapsExtras over the next week - if you want to try AndroidMapsUtils and use the MarkerOptions object then overwrite you current GoogleMapsExtras jar and xml files with the temporary ones.
@DonManfred
Thanks a lot, once i found the latest version of the play services jar i was able to get SLC to work.
Let's liase later in the week to turn this into a shared collaboration.
Martin.
Please Help me, I run your Example Demo but
AndroidMapsUtils and KMLLayer error on my B4A10.7 and targetSdkVersion="30"
main$ResumableSub_Activity_Createresume (java line: 432)
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/LruCache;
at com.google.maps.android.data.Renderer.<init>(Renderer.java:115)
at com.google.maps.android.data.kml.KmlRenderer.<init>(KmlRenderer.java:46)
at com.google.maps.android.data.kml.KmlLayer.<init>(KmlLayer.java:44)
at uk.co.martinpearman.b4a.androidmapsutils.data.kml.KMLLayer.Initialize(KMLLayer.java:30)
at nta.kml.ge.main$ResumableSub_Activity_Create.resume(main.java:432)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:267)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:207)
at anywheresoftware.b4a.BA$2.run(BA.java:387)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:238)
at android.app.ActivityThread.main(ActivityThread.java:7798)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
Caused by: java.lang.ClassNotFoundException: android.support.v4.util.LruCache
... 15 more
main$ResumableSub_Activity_Createresume (java line: 432)
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/LruCache;
at com.google.maps.android.data.Renderer.<init>(Renderer.java:115)
at com.google.maps.android.data.kml.KmlRenderer.<init>(KmlRenderer.java:46)