Star-Dust

Expert
Licensed User
Longtime User
I don't believe it but it works


  • Reselase1.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

edit-ezgif.com-optimize.gif
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
  • Release ver. 1.04
    • Fix bugs
    • Added method GetMarkerIsDraggable, GetCircleIsDraggable, GetPolygonIsDraggable, GetPolylineIsDraggable
    • Added method: EditingPolyline, EditingPolygon and function EditingActive

I have created a new more complete demo and you can find it in post #3. This demo will be updated with new features that will be added in future releases.

Editing polygon points and polylines are currently in beta and may present problems. You can create your own editing function from outside the library.
 

Star-Dust

Expert
Licensed User
Longtime User
you find the example you were talking about in post no.3
 

rboeck

Well-Known Member
Licensed User
Longtime User
you find the example you were talking about in post no.3
Congratulations for what you have created in this short time! Maybe i have found a small problem: My java files are not in c:\program files; your sample only works, if i copy my java in this path.
 

Star-Dust

Expert
Licensed User
Longtime User
Congratulations for what you have created in this short time! Maybe i have found a small problem: My java files are not in c:\program files; your sample only works, if i copy my java in this path.
you simply have to put the command #JavaCompilerPath as a remark or delete in the source mail Page
 

javiers

Active Member
Licensed User
Longtime User
Hi, I don't see the text in the message panel, for example, when creating a polyline...

 

javiers

Active Member
Licensed User
Longtime User
You send the messages using the Open map library with the MesageToPanel method
That's right. I understand that when you're creating a polyline, the panel displays the text "Click the right mouse button to finish"...

B4X:
Private Sub CheckBoxEdit_CheckedChange(Checked As Boolean)
    Select LabelType.Text
        Case "Marker"
            OMapsExt.SetMarkerDraggable(ObjSelected,Checked)
        Case "Circle"
            'OMaps.EditingCircle(ObjSelected,Checked)
        Case "Polygon"
            OMaps.PanelOn
            OMaps.MessageToPanel("Click the right mouse button to finish")
            OMaps.EditingPolygon(ObjSelected,Checked)
        Case "Polyline"
            OMaps.PanelOn
            OMaps.MessageToPanel("Click the right mouse button to finish")
            OMaps.EditingPolyline(ObjSelected,Checked)
    End Select
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
That's right. I understand that when you're creating a polyline, the panel displays the text "Click the right mouse button to finish"...
Update 1.05
  • Fix Bugs and update Demo
 

aminoacid

Active Member
Licensed User
Longtime User
Now that's a good idea
I've done likewise.

So have I -

Transaction ID 8LK34585YC837001K


Looks great so far Thanks!

Some questions:

1. Any plans to add "gmap.AsPane" so we can load the map dynamically into a panel ?

Pane1.AddNode(gmap.AsPane, 0, 0, -1, -1)

2. And also to display an Info window when a marker is clicked ( I understand that JavaObject is not supported, but can there be a work-around ?)

B4X:
Private Sub ShowInfoWindow (Marker As Marker, Map As GoogleMap)
    If MarkerInfos.ContainsKey(Marker) Then
        Dim info As JavaObject = MarkerInfos.Get(Marker)
        Dim jMap As JavaObject = Map
        jMap = jMap.GetField("map")
        info.RunMethod("open", Array (jMap, Marker))
    End If
End Sub

Private Sub CloseInfoWindow (Marker As Marker)
    If MarkerInfos.ContainsKey(Marker) Then
        Dim info As JavaObject = MarkerInfos.Get(Marker)
        info.RunMethod("close", Null)
    End If
End Sub


Private Sub AttachInfoWindow (Marker As Marker, Text As String)
    Dim InfoWindow As JavaObject
    InfoWindow.InitializeNewInstance("com.lynden.gmapsfx.javascript.object.InfoWindow", Null)
    InfoWindow.RunMethod("setContent", Array (Text))
    MarkerInfos.Put(Marker, InfoWindow)
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User

Thanks for your donation it is very useful.

AsPane you can replace it with mBase. You remove it from the parent and add it in the panel.

Explain to me better the question of the marker that I did not understand well
 

javiers

Active Member
Licensed User
Longtime User
Update 1.05
  • Fix Bugs and update Demo
Thank you! You're really doing a fantastic job!
I'm looking forward to using the Save and Open buttons. I understand they'll allow us to save map elements and restore them. Thanks again!
 

Star-Dust

Expert
Licensed User
Longtime User
Thank you! You're really doing a fantastic job!
I'm looking forward to using the Save and Open buttons. I understand they'll allow us to save map elements and restore them. Thanks again!
They anointed the KML standard to save so as to be comparable with Google Earth and Google My Maps
 

javiers

Active Member
Licensed User
Longtime User
They anointed the KML standard to save so as to be comparable with Google Earth and Google My Maps
Is it possible, when creating an element (marker, polyline, or polygon), to save the data to a database at that time? This way, the element could be accessed via code and edited/deleted... without having to save a KML file each time, with all the elements... I don't know if I'm right, but I'm sure the path(s) you propose will allow it to be done!
 

Ralph Parkhurst

Member
Licensed User
Longtime User
  • 1.05 Fix Bugs and update Demo
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!
 

Star-Dust

Expert
Licensed User
Longtime User
Thanks, it seems to be stable.

I took notes from your observations, I have a agenda full of improvements to add so there is patience but I will try to make all the necessary changes. If I need further explanations on your observations I will contact you
 

aminoacid

Active Member
Licensed User
Longtime User
Thanks for your donation it is very useful.

AsPane you can replace it with mBase. You remove it from the parent and add it in the panel.

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
    at java.base/java.lang.reflect.Method.invoke(Method.java:570)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:629)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:234)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:167)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:111)
    at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:100)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:98)
    at b4j.google.map.main.start(main.java:38)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:1589)
 

Ralph Parkhurst

Member
Licensed User
Longtime User
I'm not sure if I'm alone, but this morning I can no longer get maps displayed, on either my app or the demo app. Is anyone else having this trouble?
If I didn't know better, it looks like I've been blocked by OSM or maybe by my ISP. Perhaps I exceeded the tile limit during my extensive testing???

Changing IP address didn't help. Is anyone else having this trouble?
 

aminoacid

Active Member
Licensed User
Longtime User

I just tried the demo and the map loads fine. I have noticed that OpenMaps at times will take a little longer to load, but that is typical with OSM which I believe @stardust is using. As far as I know, there is no tile limit and I have used OSM before.
 

Ralph Parkhurst

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.