MapPane SimpleMapMarker extension

Skip to first unread message

François Guillot

Nov 18, 2013, 3:52:06 AM11/18/13
Hi guys

I'm trying to extend the SimpleMapMarker class.

The SimpleMapMarker class displays a sphere at the specified Lat/Long.
It computes the x/y position of the sphere on the screen, so the sphere is at the right location, especially when the map is zoomed or moved.

I tried to implement the onMouseClicked on the sphere to display a "pop up menu" close to the sphere.
This works fine if the PopUp is a Java FX popup.
But then when the map is moved, the Pop up location is not recomputed (Normal !)

So I decided to extend the SimpleMapMarker to ExtendedSimpleMapMarker
When the sphere is clicked, the Node represented by the marker shall be (Sphere + Rectangle Pop up) instead of only sphere.

By looking at the code I changed to protected the visibility of
    List<? extends Node> createChildren(Point position){
        sphere.setTranslateX(position.x - this.radius);
        sphere.setTranslateY(position.y - this.radius);
        return Collections.singletonList(sphere);
so it can be overriden.
As far as I understand, when the map is rendered, it loops on all its mapLayers to render them.
Each mapLayer "createChildren" is called and returns the list of nodes that represent this mapLayer, translated to the new position.
Then, this list of nodes is added to the tiles to be rendered.
(By the way, I don't really understand HOW everything is rendered at the end.. If you could explain in more details)

So for my idea of extended marker, I extended

List<? extends Node> createChildren(Point position) in my ExtendedSimpleMapMarker
with a implementation like the folowing:
    List<? extends Node> createChildren(Point position){
StackPane stack=new StackPane();
        sphere.setTranslateX(position.x - this.radius);
        sphere.setTranslateY(position.y - this.radius);
        return Collections.singletonList(stack);

But that doesn't seem to work
only the rectanglePopup is displayed, and not only the combination of both (in the stack pane)

What am I missing ?

François Guillot

Nov 30, 2013, 12:31:28 PM11/30/13

I found a solution to my problem.
I modified the SimpleMapMarker class so that its inner Node is not the Sphere, but a Group, that contains [a sphere] or [a sphere + my custom pop up rectangle], depending on wether it was clicked or not.
This works fine, but I had to modify the SimpleMapMarker class to achieve this.
Reply all
Reply to author
0 new messages