Search in sources :

Example 6 with Coord

use of com.codename1.maps.Coord in project codenameone-google-maps by codenameone.

the class MapContainer method addMarker.

/**
 * Adds a marker to the map with the given attributes
 * @param opts The marker options.
 * @return marker reference object that should be used when removing the marker
 */
public MapObject addMarker(MarkerOptions opts) {
    // public MapObject addMarker(EncodedImage icon, Coord location, String text, String longText, final ActionListener onClick) {
    EncodedImage icon = opts.getIcon();
    Coord location = opts.getLocation();
    String text = opts.getText();
    String longText = opts.getLongText();
    ActionListener onClick = opts.getOnClick();
    if (internalNative != null) {
        byte[] iconData = null;
        if (icon != null) {
            iconData = icon.getImageData();
            internalNative.setMarkerSize(icon.getWidth(), icon.getHeight());
        }
        long key = internalNative.addMarker(iconData, location.getLatitude(), location.getLongitude(), text, longText, onClick != null, opts.anchorU, opts.anchorV);
        MapObject o = new MapObject();
        o.mapKey = key;
        o.callback = onClick;
        markers.add(o);
        return o;
    } else {
        if (internalLightweightCmp != null) {
            PointLayer pl = new PointLayer(location, text, icon);
            if (points == null) {
                points = new PointsLayer();
                internalLightweightCmp.addLayer(points);
            }
            points.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent evt) {
                    PointLayer point = (PointLayer) evt.getSource();
                    for (MapObject o : markers) {
                        if (o.point == point) {
                            if (o.callback != null) {
                                o.callback.actionPerformed(new ActionEvent(o));
                            }
                            evt.consume();
                            return;
                        }
                    }
                }
            });
            points.addPoint(pl);
            MapObject o = new MapObject();
            o.point = pl;
            o.callback = onClick;
            markers.add(o);
            internalLightweightCmp.revalidate();
            return o;
        } else {
            String uri = null;
            int iconWidth = 0;
            int iconHeight = 0;
            int anchorU = 0;
            int anchorV = 0;
            if (icon != null) {
                uri = WebBrowser.createDataURI(icon.getImageData(), "image/png");
                iconWidth = icon.getWidth();
                iconHeight = icon.getHeight();
                anchorU = (int) (icon.getWidth() * opts.anchorU);
                anchorV = (int) (icon.getHeight() * opts.anchorV);
            }
            // browserBridge.waitForReady();
            MapObject o = new MapObject();
            o.callback = onClick;
            o.pending = true;
            final String fUri = uri;
            final int fIconWidth = iconWidth;
            final int fIconHeight = iconHeight;
            final float fAnchorU = anchorU;
            final float fAnchorV = anchorV;
            browserBridge.ready(() -> {
                internalBrowser.execute("callback.onSuccess(" + BRIDGE + ".addMarker(${0}, ${1}, ${2}, ${3}, ${4}, ${5}, ${6}, ${7}, ${8}))", new Object[] { // long key = ((Double)browserBridge.bridge.call("addMarker", new Object[]{
                fUri, location.getLatitude(), location.getLongitude(), text, longText, fIconWidth, fIconHeight, fAnchorU, fAnchorV }, jsres -> {
                    o.mapKey = jsres.getInt();
                    o.pending = false;
                });
            });
            // MapObject o = new MapObject();
            // o.mapKey = res.getInt();
            // o.callback = onClick;
            markers.add(o);
            // System.out.println("MapKey added "+o.mapKey);
            return o;
        }
    }
}
Also used : Coord(com.codename1.maps.Coord) PointsLayer(com.codename1.maps.layers.PointsLayer) ActionListener(com.codename1.ui.events.ActionListener) PointLayer(com.codename1.maps.layers.PointLayer) ActionEvent(com.codename1.ui.events.ActionEvent) EncodedImage(com.codename1.ui.EncodedImage) Point(com.codename1.ui.geom.Point)

Example 7 with Coord

use of com.codename1.maps.Coord in project codenameone-google-maps by codenameone.

the class MapContainer method addPath.

/**
 * Draws a path on the map
 * @param path the path to draw on the map
 * @return a map object instance that allows us to remove the drawn path
 */
public MapObject addPath(Coord... path) {
    if (internalNative != null) {
        long key = internalNative.beginPath();
        for (Coord c : path) {
            internalNative.addToPath(key, c.getLatitude(), c.getLongitude());
        }
        key = internalNative.finishPath(key);
        MapObject o = new MapObject();
        o.mapKey = key;
        markers.add(o);
        return o;
    } else {
        if (internalLightweightCmp != null) {
            LinesLayer ll = new LinesLayer();
            ll.addLineSegment(path);
            internalLightweightCmp.addLayer(ll);
            MapObject o = new MapObject();
            o.lines = ll;
            markers.add(o);
            return o;
        } else {
            // browserBridge.waitForReady();
            StringBuilder json = new StringBuilder();
            json.append("[");
            boolean first = true;
            for (Coord c : path) {
                if (first) {
                    first = false;
                } else {
                    json.append(", ");
                }
                json.append("{\"lat\":").append(c.getLatitude()).append(", \"lon\": ").append(c.getLongitude()).append("}");
            }
            json.append("]");
            // long key = ((Double)browserBridge.bridge.call("addPathAsJSON", new Object[]{json.toString()})).intValue();
            MapObject o = new MapObject();
            o.pending = true;
            browserBridge.ready(() -> {
                internalBrowser.execute("callback.onSuccess(" + BRIDGE + ".addPathAsJSON(${0}));", new Object[] { json.toString() }, jsres -> {
                    o.mapKey = jsres.getInt();
                    o.pending = false;
                });
            });
            markers.add(o);
            return o;
        }
    }
}
Also used : Coord(com.codename1.maps.Coord) LinesLayer(com.codename1.maps.layers.LinesLayer)

Example 8 with Coord

use of com.codename1.maps.Coord in project codenameone-google-maps by codenameone.

the class MapLayout method layoutContainer.

@Override
public void layoutContainer(Container parent) {
    // if (true) {
    // return;
    // }
    int parentX = 0;
    int parentY = 0;
    for (Component current : parent) {
        Coord crd = (Coord) current.getClientProperty(COORD_KEY);
        Point p = (Point) current.getClientProperty(POINT_KEY);
        if (p == null) {
            p = map.getScreenCoordinate(crd);
            current.putClientProperty(POINT_KEY, p);
        }
        Float h = (Float) current.getClientProperty(HORIZONTAL_ALIGNMENT);
        if (h == null) {
            h = 0f;
        }
        Float v = (Float) current.getClientProperty(VERTICAL_ALIGNMENT);
        if (v == null) {
            v = 0f;
        }
        current.setSize(current.getPreferredSize());
        current.setX(convertX(p.getX() - parentX, current.getWidth(), h));
        current.setY(convertY(p.getY() - parentY, current.getHeight(), v));
    }
}
Also used : Coord(com.codename1.maps.Coord) Point(com.codename1.ui.geom.Point) Component(com.codename1.ui.Component) Point(com.codename1.ui.geom.Point)

Example 9 with Coord

use of com.codename1.maps.Coord in project codenameone-google-maps by codenameone.

the class MapInfoPanel method createMarkerButton.

private Button createMarkerButton(MapObject mo, String label, Image icon, final Coord location) {
    Button b = new Button(label, icon);
    b.addActionListener(e -> {
        map.zoom(location, (int) map.getZoom());
    });
    return b;
}
Also used : Button(com.codename1.ui.Button)

Example 10 with Coord

use of com.codename1.maps.Coord in project CodenameOne by codenameone.

the class TiledProvider method bboxFor.

/**
 * {@inheritDoc}
 */
public BoundingBox bboxFor(Coord position, int zoomLevel) {
    _zoomLevel = zoomLevel;
    Coord scale = scale(zoomLevel);
    Dimension tileSize = tileSize();
    double x = scale.getLongitude() * tileSize.getWidth();
    double y = scale.getLatitude() * tileSize.getHeight();
    Coord tileScale = new Coord(y, x, false);
    _tileNo = tileNo(position, projection().extent().getSouthWest(), tileScale);
    Coord start = tileCoord(_tileNo, projection().extent().getSouthWest(), tileScale);
    Coord end = start.translate(tileScale.getLatitude(), tileScale.getLongitude());
    return new BoundingBox(start, end);
}
Also used : Coord(com.codename1.maps.Coord) BoundingBox(com.codename1.maps.BoundingBox) Dimension(com.codename1.ui.geom.Dimension)

Aggregations

Coord (com.codename1.maps.Coord)19 Point (com.codename1.ui.geom.Point)14 BoundingBox (com.codename1.maps.BoundingBox)7 Component (com.codename1.ui.Component)3 EncodedImage (com.codename1.ui.EncodedImage)3 ActionEvent (com.codename1.ui.events.ActionEvent)3 ActionListener (com.codename1.ui.events.ActionListener)3 Dimension (com.codename1.ui.geom.Dimension)3 MapObject (com.codename1.googlemaps.MapContainer.MapObject)2 Mercator (com.codename1.maps.Mercator)2 PointsLayer (com.codename1.maps.layers.PointsLayer)2 Button (com.codename1.ui.Button)2 Image (com.codename1.ui.Image)2 ArrayList (java.util.ArrayList)2 FloatingActionButton (com.codename1.components.FloatingActionButton)1 InteractionDialog (com.codename1.components.InteractionDialog)1 ToastBar (com.codename1.components.ToastBar)1 MapContainer (com.codename1.googlemaps.MapContainer)1 MarkerOptions (com.codename1.googlemaps.MapContainer.MarkerOptions)1 Util (com.codename1.io.Util)1