As many currently know Googlemaps' Webapi do not work correctly on the webview because the latest versions use webgl

I decided to do a new library that uses OpenMap and Leaflet with the same methods and events of the Googlemaps bookshop. I also created a second OpenMapext class that adds some Googlemapsext commands to maintain compatibility and minimize changes to the existing code. The code we used with GMAPS with Javaobject to obtain extra functions is no longer usable. Tested with Java 19,

jSD_OpenMaps

Author: Star-Dust
Version: 1.08
  • CameraPosition
    • Functions:
      • Class_Globals As String
      • Initialize (Lat As Double, Lng As Double, Zoom As Float) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • Target As String
      • ToString As String
    • Properties:
      • Lat As Double [read only]
      • Lng As Double [read only]
      • Zoom As Float [read only]
  • LatLng
    • Fields:
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • lat As Double
      • lng As Double
    • Functions:
      • Initialize
        Inizializza i campi al loro valore predefinito.
  • MapCircle
    • Functions:
      • Class_Globals As String
      • Initialize (vCenter As LatLng, vRadius As Double, Visble As Boolean, id As String, We As Object) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
    • Properties:
      • Center As LatLng [read only]
      • ID As String [read only]
      • Radius As Double [read only]
      • Visible As Boolean
  • MapInfoWindow
    • Functions:
      • Class_Globals As String
      • Initialize (vContent As String, vPosition As LatLng, ID As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
    • Properties:
      • Content As String [read only]
      • ID As String [read only]
      • Position As LatLng [read only]
  • MapLabel
    • Functions:
      • Class_Globals As String
      • Initialize (vPosition As LatLng, vText As String, vPermanent As Boolean, vID As String, we As JavaObject) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
    • Properties:
      • ID As String [read only]
      • Permanent As Boolean [read only]
      • Position As LatLng [read only]
      • Text As String
  • MapPolygon
    • Functions:
      • Class_Globals As String
      • Initialize (Visble As Boolean, ID As String, Point As List, we As JavaObject) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
    • Properties:
      • FillColor As Paint [read only]
      • ID As String [read only]
      • LineColor As Paint [read only]
      • LineWidth As Int [read only]
      • Points As List [read only]
        List of LatLng
      • Visible As Boolean
  • MapPolyline
    • Functions:
      • Class_Globals As String
      • Initialize (Visble As Boolean, ID As String, Point As List, We As JavaObject) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
    • Properties:
      • ID As String [read only]
      • LineColor As Paint [read only]
      • LineWidth As Int [read only]
      • Points As List [read only]
        List of LatLng
      • Visible As Boolean
  • Marker
    • Functions:
      • Class_Globals As String
      • CreateLabel (Text As String) As String
        Create Label on Marker
      • Initialize (vPosition As LatLng, vTitle As String, vIconUri As String, vVisible As Boolean, vID As String, we As JavaObject) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • UpdateLabel (Text As String) As String
        Set Text empty for remove
    • Properties:
      • Draggable
      • IconUri As String [read only]
      • IconUrl As String [read only]
      • ID As String [read only]
      • Position As LatLng [read only]
      • Title As String [read only]
      • Visible As Boolean
  • OpenMaps
    • Events:
      • CameraChange (CamPosition As CameraPosition)
      • CircleClick (SelectedCircle As MapCircle)
      • Click (Point As LatLng)
      • MarkerClick (SelectedMarker As Marker)
      • MouseMove (Point As LatLng)
      • PolygonClick (SelectedPolygon As MapPolygon)
      • PolylineClick (SelectedPolyline As MapPolyline)
      • Ready
      • RightClick (Point As LatLng)
    • Fields:
      • MAP_TYPE_CARTO As Int
      • MAP_TYPE_ESI As Int
      • MAP_TYPE_HYBRID As Int
      • MAP_TYPE_NORMAL As Int
      • MAP_TYPE_SATELLITE As Int
      • MAP_TYPE_TERRAIN As Int
      • mBase As B4XView
      • Tag As Object
      • WebEngine As JavaObject
    • Functions:
      • AddCircle (ll As LatLng, Radius As Double, StrokeWidth As Float, StrokeColor As Paint, FillColor As Paint, Opacity As Double) As MapCircle
        Adds a circle To the map.
        Center - Position of the circle center.
        Radius - Circle radius.
        StrokeWidth - Stroke width.
        StrokeColor - Stroke color.
        FillColor - Inner color.
        Opacity - Inner color opacity. Value between 0 To 1.
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AddInfoWindow (Content As String, Position As LatLng) As MapInfoWindow
        Opens an info window with the given HTML content at the specified position.
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AddInfoWindow2 (Content As String, Position As LatLng, MaxWidth As Int) As MapInfoWindow
        Opens an info window with the given HTML content at the specified position. It cannot be larger than MaxWidth (in pixels).
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AddMarker (Lat As Double, Lng As Double, Title As String) As Marker
        Adds a marker to the map.
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AddMarker2 (Lat As Double, Lng As Double, Title As String, IconUri As String) As Marker
        Adds a marker To the map with a custom icon.
        The IconUri must point To an online image Or an image from the assets folder.
        In the later Case the custom icon will only appear in Release mode.
        Example:
        <code>gmap.AddMarker2(10, 10, "This is a test", _
        File.GetUri(File.DirAssets, "SomeIcon.png"))</code>
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AddPolygon (Points As List, StrokeWidth As Float, StrokeColor As Paint, FillColor As Paint, Opacity As Double) As MapPolygon
        Adds a polygon To the map.
        Points - A list Or Array of LatLng points.
        es. array(array(41.90, 12.49),array(41.80, 12.50),array(41.85, 12.60))
        StrokeWidth - Stroke width.
        StrokeColor - Stroke color.
        FillColor - Inner color.
        Opacity - Inner color opacity. Value between 0 To 1.
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AddPolyline (Points As List, StrokeWidth As Float, StrokeColor As Paint) As MapPolyline
        Adds a polyline To the map.
        Points - A list Or Array of LatLng points.
        Width - Line width.
        Color - Line color.
        CloseInfoWindow (InfoWindow As InfoWindow)
        Closes the specified info window.
        If you insert with a for cycle, insert a break between an insertion and the next of 5 milliseconds at least: SLEEP (5)
      • AllVisibleMapObjects As String
      • CameraPosition As CameraPosition
        Returns the current camera position.
      • Class_Globals As String
      • ClearMap As String
      • DesignerCreateView (Base As Object, Lbl As Label, Props As Map) As String
        Base type must be Object
      • EditConfigure (Offset As Double, Tollerance As Int) As String
      • EditingActive As Boolean
      • EditingCircle (Circle As MapCircle, Active As Boolean) As Boolean
      • EditingPolygon (Polygon As MapPolygon, Active As Boolean) As Boolean
        If an element is already in editing, it is not possible to edit another at the same time.
        Dim Success As Boolean = OpenMap.EditingPolygon(Polygon,True)
      • EditingPolyline (Polyline As MapPolyline, Active As Boolean) As Boolean
      • filterVisibleMapObjects As String
        Makes only the objects visible inside the visible map (Bounds)
      • Initialize (Callback As Object, EventName As String) As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • IsReady As Boolean
      • LatLonToXY (ll As LatLng) As Double()
      • LoadMKL (Path As String, FileName As String) As ResumableSub
        Return Map as Object
        Key is ID , Value is Object (Marker,MapPolygon,MapPolyline)
        <code>Wait For (OpenMap.LoadMKL(Path, FileName)) COMPLETE (ObjMap As Map)</code>
      • MapLoaded As Boolean
      • MessageToPanel (Text As String) As String
      • MoveCamera (cp As CameraPosition) As String
      • MoveCamera2 (ll As LatLng) As String
      • PanelOff As String
      • PanelOn As String
      • RedrawAllObj As String
      • RemoveCircle (vCircle As MapCircle) As String
        Removes the specified circle from the map.
      • RemoveInfoWindow (InfoWindow As MapInfoWindow) As String
      • RemoveMarker (vMarker As Marker) As String
        Removes the specified marker from the map.
      • RemovePolygon (vPolygon As MapPolygon) As String
        Removes the specified polygon from the map.
      • RemovePolyline (vPolyline As MapPolyline) As String
        Removes the specified polyline from the map.
      • SaveKML (MapObj As Map, Path As String, FileName As String) As String
      • updateCircleRadius (id As String, Radius As Double) As String
        NewPoint as List of LatLng
      • visibleObject (ID As String, Visible As Boolean) As String
        es. OpenMap.visibleObject(Polygon.ID)
      • WebView1_LocationChanged (Location As String)
      • XYToLatLng (x As Double, y As Double) As LatLng
    • Properties:
      • MapBound As Map [read only]
        Return bound in map format:
        {"northEast":{"lat":45.123,"lon":12.456},"southWest":{"lat":40.987,"lon":10.321}}
        Dim Bound As Map = OMaps.MapBound
      • MapType
        get or set the zoom level.
      • NumberOfElements As Int [read only]
        Number Of Elements added
      • Zoom As Int
        Sets the zoom level.
  • OpenMapsExt
    • Functions:
      • AddressToLatLon (address As String) As ResumableSub
        <code>wait for (GMapExt.AddressToLatLon("Address number, City")) COMPLETE (ll as LatLng)</code>
      • Class_Globals As String
      • GetBearing (Point1 As LatLng, Point2 As LatLng) As Double
        Returns the bearing between two points, from point1 to point2- not exist
      • GetCircleIsDraggable (Cricle As MapCircle) As Boolean
      • GetDistance (Point1 As LatLng, Point2 As LatLng) As Double
        Returns the distance between two points in meters
      • GetMarkerIsDraggable (Mk As Marker) As Boolean
      • GetMarkerLabel (m As Marker) As String
        not available
      • GetMarkerPosition (m As Marker) As LatLng
        Returns the marker position as LatLng Object
      • GetMarkerTitle (m As Marker) As String
        Returns the title of a marker as string
      • GetPolygonIsDraggable (Polygon As MapPolygon) As Boolean
      • GetPolylineIsDraggable (Polyline As MapPolyline) As Boolean
      • Initialize (OpenMap As OpenMaps) As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • LatLonToAddress (lat As Double, lon As Double) As ResumableSub
      • LatLonToXY (ll As LatLng) As Double()
        Returns the screen coordiantes for the given LatLng coordinates
      • LatLonToXY2 (ll As LatLng) As Double()
      • RemoveMarkerLabel (m As Marker) As String
        not available
        Removes the Marker Label for the given Marker
      • SetCircleDraggable (C As MapCircle, Draggable As Boolean) As String
        Sets the circle draggable property
      • SetGeodesic (shape As JavaObject) As String
        Sets a polygon or polyline to geodesic points - not exist
      • SetMarkerClickable (m As Marker, Clickable As Boolean) As String
        Always clickable - not necessary
        Sets the marker clickable property
      • SetMarkerDraggable (m As Marker, Draggable As Boolean) As String
        Sets the marker draggable property
      • SetMarkerIcon (m As Marker, URL As String) As String
        not available
      • SetMarkerLabel (m As Marker, Text As String, Color As String, TextSize As Double) As String
        not available
        Sets a MarkerLabel with the given values.
        Posible color values.
      • SetMarkerLabel2 (m As Marker, Text As String, Color As String, BackgroundColor As String, TextSize As Double) As String
        not available
      • SetMarkerOrigin (m As Marker, X As Double, y As Double) As String
        not available
        Sets the marker origin 'doesn't work!!!
      • SetPolygonClickable (pg As MapPolygon, Clickable As Boolean) As String
        Always clickable - not necessary
        Sets the polygon clickable property 'doesn't work!!!
      • SetPolygonDraggable (Polygon As MapPolygon, Draggable As Boolean) As String
        Sets the polygon draggable property
      • SetPolylineDraggable (Polyline As MapPolyline, Draggable As Boolean) As String
        Sets the polyline draggable property
      • XYToLatLng (x As Double, y As Double) As LatLng
        Returns the Lat/Lng coordinates for the given screen coordinates 'doesn't work!!!



  • 1.01
    • Added on OpenMapsExt: SetCircleDraggable, SetPolygonDraggable, SetPolylineDraggable
  • 1.02
    • Coordinated renewal after movement for circle, polygon and polyline
    • Update example
  • 1.03
    • Removal of lateral sliding bars
    • Additions EditingPolygon and EdgingPolyline Method to change the points
    • Added VisibleObject method to view or hide an object (markatore, circle, polygon, polyline)
    • Add the PanelOn and PanelOff functions to make a communication panel appear or hide
    • Added MessageToPanel method to send messages to the communication panel
  • 1.04
    • Fix bugs
    • Added method GetMarkerIsDraggable, GetCircleIsDraggable, GetPolygonIsDraggable, GetPolylineIsDraggable
    • Added method: EditingPolyline, EditingPolygon and function EditingActive
  • 1.05
    • Fix Bugs and update Demo
  • 1.06
    • Added method: RedrawAllObj, ClearMap, EditingCircle, updateCircleRadius
    • Added new TypeMap: MAP_TYPE_ESI, MAP_TYPE_CARTO - As an alternative to OSM tiles if they don't appear
  • 1.07
    • Added method: LoadKML, SaveKML
    • Removed Hyperlinks, Preserved Maps Elements after change Map_Type
    • Fix bugs
    • The algorithm reconstructed for the modification of the polygons, polylines and rims
  • 1.08
    • Added getMapBound, filterVisibleMapObjects, AllVisibleMapObjects, NumberOfElements
    • Added Label on Marker
  • 1.09
    • Fix bugs for LoadKML, AddMarker, AddCircle, AddPolygon, AddPolyline
    • Correct LatLng class field
 

Attachments

  • jSD_OpenMaps 1.08.zip
    59.9 KB · Views: 10
Last edited:

Ralph Parkhurst

Member
Licensed User
Longtime User
The demo has started to work again, but with only some of the tiles partially appearing...

Screenshot 2025-03-15 122323.png


I am starting to think it might be a server issue. I will try again later...
 

aminoacid

Active Member
Licensed User
Longtime User
Well that is good news - it might only be a localized issue.

I also wondered if the HTTP User-Agent was set incorrectly causing me to be blocked. I read on the OSM tile usage policy here that:
  • Faking another app’s User-Agent WILL get you blocked. Using a library’s default User-Agent is NOT recommended as they may be blocked if another user of the library is misusing it. If a device automatically sends an X-Requested-With header with an application specific Application ID, this will be considered an acceptable substitute for the HTTP User-Agent, although we still recommend setting a valid HTTP User-Agent for the application.
In any case I will investigate if it possible to specify the user-agent, as I think it is set to null at the moment.

Yes. Now I remember having a similar issue a while ago using Leaflet with OSM in a JavaScript webapp. Unfortunately I don't remember how I resolved it - but I do remember that it was very easy to do.
 

aminoacid

Active Member
Licensed User
Longtime User
Once thing I really like about OpenMaps as compared to GoogleMaps is that the Gulf of Mexico is still the Gulf of Mexico (although they did fold a bit and put Gulf of America in parens below it) 🤣🤣🤣

Sorry, but I just had to point that out!!
 

aminoacid

Active Member
Licensed User
Longtime User
I'm pretty sure it can be set in Leaflet. So maybe @Star-Dust could consider including that in a future version.
The great news is that maps are working again here - must have simply been a tile server issue somewhere :D

Yes... I'm looking for an old project where we did just that. If I manage to find it, I'll post it here. But it will probably have to be included in the library.
 

Star-Dust

Expert
Licensed User
Longtime User
Good morning,

Please don't crowd the thread otherwise I can't distinguish useful things for development. I go into translation and sometimes I take a long time to understand what it is written, it would be useful to me if you write in the need.

When the map does not appear it could be OpenMaps that blocks the IP.
If by clicking on this link the image does not appear then you have a problem with the Internet, the site is not reachable. If the image appears then OpenMaps has limited the IP, change IP or use a proxy and you will see everything again as before.


 

Ralph Parkhurst

Member
Licensed User
Longtime User
Good morning,

Please don't crowd the thread otherwise I can't distinguish useful things for development. I go into translation and sometimes I take a long time to understand what it is written, it would be useful to me if you write in the need.

When the map does not appear it could be openmaps that blocks the IP.
If by clicking on this link the image does not appear then you have a problem with the Internet, the site is not reachable. If the image appears then OpenMaps has limited the IP, change IP and you will see everything again as before.


Good morning - I see an image of a Blue square. Should I change IP address?
I will be sure not to crowd the thread.
 

Star-Dust

Expert
Licensed User
Longtime User
So I am converting my existing GoogleMaps Application to OpenMaps. Right now in my GoogleMaps Application I have:

Private Pane1 As Pane
Pane1.AddNode(gmap.AsPane, 0, 0, -1, -1) 'Add Map to Panel

Since "AsPane" is not supported in OpenMaps, I replace it with "mBase" as you suggest:

Pane1.AddNode(gmap.mBase, 0, 0, -1, -1) 'Add Map to Panel

But I get the following error on the above line:

B4X:
WARNING: package com.sun.javafx.embed.swing.oldimpl not in javafx.swing
Waiting for debugger to connect...
Program started.
Read Configuration File Success
Error occurred on line: 200 (Main)
java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "obj" is null

To replace AsPane, in any case openamaps must be inserted in a layout, it could be in the main. And then you use this code to release it from Main and hook it in any panel
B4X:
GMap.mBase.RemoveViewFromParent
Form1.RootPane.AddNode(GMap.mBase,10,10,100,100)


If you don't want to insert it in the main. Create a layout, call it 'Openampas' and put the view anchored to the corners
Then with this code you will get the base to add to your panel.
B4X:
Private Sub AsPane As B4XView
    Dim Pn As B4XView
    Pn.LoadLayout("openampas")
    Return Pn.GetView(0)
End Sub
'---- CODE ---
    Form1.RootPane.AddNode(AsPane,10,10,100,100)
 

Ralph Parkhurst

Member
Licensed User
Longtime User
I still cannot get a map to display anymore. As this is a problem that only I am having, so I'm go to abandon it for now. As @Star-Dust correctly points out, it is not relevant to others here.
UPDATE: This was automatically resolved after 24 hours had elapsed. I guess I was 'blocked' for hammering the tile server too hard during my extensive testing.
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
I still cannot get a map to display anymore. I have tried:
  • 2 different internet service providers
  • 3 different IP address
  • 5 different computers (up until yesterday these all worked perfectly)
  • No map visible using the B4J map demonstration
  • No maps accessible on my app anymore
  • The test link shows a blue tile in all these cases.
As this is a problem that only I am having, so I'm go to abandon it for now. As @Star-Dust correctly points out, it is not relevant to others on this. Instead I may open a separate question in another thread to seek assistance later.
osm if it receives too many requests at the same time to avoid overcrowding it blocks the requests. next week i will see if using different maps is better
 

javiers

Active Member
Licensed User
Longtime User
I still cannot get a map to display anymore. I have tried:
  • 2 different internet service providers
  • 3 different IP address
  • 5 different computers (up until yesterday these all worked perfectly)
  • No map visible using the B4J map demonstration
  • No maps accessible on my app anymore
  • The test link shows a blue tile in all these cases.
As this is a problem that only I am having, so I'm go to abandon it for now. As @Star-Dust correctly points out, it is not relevant to others on this. Instead I may open a separate question in another thread to seek assistance later.
Something similar is happening to me today. This morning no problems, now: sometimes the program crashes, other times the map is blank.
 

Star-Dust

Expert
Licensed User
Longtime User
Your library continues to impress me, Star-Dust. It is extremely stable, and my B4J app is using it very effectively—thanks to your exceptional effort.

I have received valuable end-user feedback and would like to suggest three improvements for future consideration:
  1. Remove Hyperlinks in the Attribution Panel
    In the bottom-right corner of the map display, there is an attribution panel partially shown. Could you remove the hyperlinks to Leaflet and Google? When users click on them, it can lead to unpredictable results.
  2. Preserve Map Elements When Changing the Base Layer
    Currently, when a user switches the map’s base layer (Normal, Terrain, Satellite, or Hybrid), all existing polygons and markers disappear. Would it be possible to place these elements on a separate layer so that they remain visible when the base layer changes?
  3. Restrict Excessive Panning to Prevent Unrealistic Longitudes
    Users can pan too far left or right, resulting in excessively large longitude values. Could you implement a limit to prevent map panning beyond a reasonable longitude range?
Thank you again for your outstanding work—your library has been invaluable to my project!
I did not understand point 3
 

Star-Dust

Expert
Licensed User
Longtime User
  • Upate release 1.06
    • Added method: RedrawAllObj, ClearMap, EditingCircle, updateCircleRadius
    • Added new TypeMap: MAP_TYPE_ESI, MAP_TYPE_CARTO - As an alternative to OSM tiles if they don't appear
    • Update example
 

Star-Dust

Expert
Licensed User
Longtime User
Version 1.07 that will be released in the next few days will no longer beta but will be the first full version.

I thank everyone who has donated. Those who have donated more than €30 will receive a copy of the sources of version 1.07
 

javiers

Active Member
Licensed User
Longtime User
Hi, I don't know if this is interesting to you or if it's part of your plans...

In an app, I create many markers (hydrants), but to avoid overloading the map, depending on the zoom, I only make visible those within the visible map boundaries. For this, I need the Bounds function, and I also need the marker's visible property to not be read-only.

I'm not sure if I'm explaining myself correctly. I'll include an image and part of the code...

Visible map boundaries...:
'''    If GMap.IsReady = True Then
'''        LatLngB = GMap.Bounds    'Visible region bounds
'''        Log( "Norte " & LatLngB.NorthEast & " SUR   " & LatLngB.SouthWest)
'''        Dim DeltaX As Double = LatLngB.NorthEast.Lat - LatLngB.SouthWest.Lat
'''        Dim DeltaY As Double = LatLngB.NorthEast.Longitude - LatLngB.SouthWest.Longitude
'''    End If
'''
'''    If newzoom <= 14 Then 'Con un zoom lejano, oculta todos los marcadores
'''        Dim cursorHidra As ResultSet
''''        cursorHidra = SQL1.ExecQuery("SELECT rowid,idMarcador, identificador FROM markerHidra WHERE idMarcador <> 0")
''''        cursorHidra = SQL1.ExecQuery("SELECT rowid FROM hidrantes ")
'''        cursorHidra = SQL1.ExecQuery("SELECT rowid FROM hidrantes")
'''        Do While cursorHidra.NextRow
'''            If MiHidrante(cursorHidra.GetString("rowid")).IsInitialized = True Then
'''                MiHidrante(cursorHidra.GetString("rowid")).Visible = False
'''            End If
'''        Loop
'''        cursorHidra.Close
'''    End If
''' 
''' 
'''    If newzoom > 14 Then
'''        Dim cursorHidra As ResultSet
''''        (Y - " & LatLngB.SouthWest.Lat &") < "& DeltaX &" AND  (X - "& LatLngB.SouthWest.Longitude &")  <"& DeltaY &")"
''''        cursor = SQL1.ExecQuery("SELECT rowid,ID, X, Y, TIPO, POBLACION FROM hidrantes WHERE (Y - " & LatLngB.SouthWest.Lat &") < "& DeltaX &" AND  (X - ("& LatLngB.SouthWest.Longitude &"))  <"& DeltaY &"")
'''        cursorHidra = SQL1.ExecQuery("SELECT rowid FROM hidrantes WHERE (Y - " & LatLngB.SouthWest.Latitude &") < "& DeltaX &" AND  (X - ("& LatLngB.SouthWest.Longitude &"))  <"& DeltaY)
'''
'''        Do While cursorHidra.NextRow
'''            If MiHidrante(cursorHidra.GetString("rowid")).IsInitialized = True Then
'''                MiHidrante(cursorHidra.GetString("rowid")).Visible = True
'''            End If
'''        Loop
'''        cursorHidra.Close
'''    End If

Sorry, the markers are displayed too large...the image I'm using in this case is a 16x16 pixel PNG file. I've tried changing it to 8x8, but the result is the same...

1742142009662.png
 
Last edited:

aminoacid

Active Member
Licensed User
Longtime User
Would love to see the capability to add a label to a marker by implementing SetMarkerLabel, RemoveMarkerLabel, GetMarkerLabel in OpenMapsExt

In leaflet you could use L.tooltip to create a standalone label instead of binding it to a marker. That would be the same as adding a label to a marker that is always visible:

B4X:
var tooltip = L.tooltip()
    .setLatLng(latlng)
    .setContent('A sweet static label!')
    .addTo(map);


1742149401876.png
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
  • Release 1.07
    • Added method: LoadKML, SaveKML
    • Removed Hyperlinks, Preserved Maps Elements after change Map_Type
    • Fix bugs
    • The algorithm reconstructed for the modification of the polygons, polylines and rims
    • Update OpenMaps Demo
 

javiers

Active Member
Licensed User
Longtime User
Hi, I can't remove some markers from the map. For example, I create them like this...


Create markers...:
Sub CargaHidrantes
    Private MiHidrante(10)  As Marker
    
    MiHidrante(0) = OMaps.AddMarker2(pt(48.8575703, 2.292737).lat, pt(48.8575703, 2.292737).lng, "Hidrante" , File.GetUri(File.DirAssets,"H.png"))
    MiHidrante(1) = OMaps.AddMarker2(pt(48.8561703, 2.293637).lat, pt(48.8561703, 2.293637).lng, "Hidrante" , File.GetUri(File.DirAssets,"H.png"))
    MiHidrante(3) = OMaps.AddMarker2(pt(48.8561703, 2.291837).lat,pt(48.8561703, 2.291837).lng, "Hidrante" , File.GetUri(File.DirAssets,"H.png"))


End Sub

When I change the camera position and the zoom is less than 14, I use the following code to delete them... but it doesn't!

B4X:
Private Sub OMaps_CameraChange (CamPosition As CameraPosition)
    LabelLat.Text=CamPosition.lat
    LabelLon.Text=CamPosition.lNG
    LabelZoom.Text=CamPosition.Zoom
    
    If OMaps.Zoom < 14 Then
        For i=0 To 3

            If MiHidrante(i).IsInitialized = True Then
                Log(i)
                OMaps.RemoveMarker(MiHidrante(i))
            End If
        Next
    End If
End Sub
 

Attachments

  • demo.jpg
    demo.jpg
    251.2 KB · Views: 5

Star-Dust

Expert
Licensed User
Longtime User
Hi, I can't remove some markers from the map. For example, I create them like this...


Create markers...:
Sub CargaHidrantes
    Private MiHidrante(10)  As Marker
   
    MiHidrante(0) = OMaps.AddMarker2(pt(48.8575703, 2.292737).lat, pt(48.8575703, 2.292737).lng, "Hidrante" , File.GetUri(File.DirAssets,"H.png"))
    MiHidrante(1) = OMaps.AddMarker2(pt(48.8561703, 2.293637).lat, pt(48.8561703, 2.293637).lng, "Hidrante" , File.GetUri(File.DirAssets,"H.png"))
    MiHidrante(3) = OMaps.AddMarker2(pt(48.8561703, 2.291837).lat,pt(48.8561703, 2.291837).lng, "Hidrante" , File.GetUri(File.DirAssets,"H.png"))


End Sub

When I change the camera position and the zoom is less than 14, I use the following code to delete them... but it doesn't!

B4X:
Private Sub OMaps_CameraChange (CamPosition As CameraPosition)
    LabelLat.Text=CamPosition.lat
    LabelLon.Text=CamPosition.lNG
    LabelZoom.Text=CamPosition.Zoom
   
    If OMaps.Zoom < 14 Then
        For i=0 To 3

            If MiHidrante(i).IsInitialized = True Then
                Log(i)
                OMaps.RemoveMarker(MiHidrante(i))
            End If
        Next
    End If
End Sub
Yes it is a bug, known.

When you insert the Markers you must put a pause of at least 20 milliseconds between one and the other especially when it is inside a cycle so that in its internal table all the marks are inserted correctly. subsequently the deletion will happen as expected.

The bug will be solved in the next versions
 
Top