aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/web/client/MapPanel.java
blob: 72ed0d3bfb48abd901aec2f6df1cea4810c81714 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package org.traccar.web.client;

import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.WidgetCanvas;
import com.smartgwt.client.widgets.events.ResizedEvent;
import com.smartgwt.client.widgets.events.ResizedHandler;
import com.smartgwt.client.widgets.events.DragResizeStopEvent;
import com.smartgwt.client.widgets.events.DragResizeStopHandler;
import com.smartgwt.client.widgets.events.DrawEvent;
import com.smartgwt.client.widgets.events.DrawHandler;
import com.smartgwt.client.types.Overflow;

import com.google.gwt.core.client.Scheduler;

import org.gwtopenmaps.openlayers.client.LonLat;
import org.gwtopenmaps.openlayers.client.Map;
import org.gwtopenmaps.openlayers.client.MapOptions;
import org.gwtopenmaps.openlayers.client.MapWidget;
import org.gwtopenmaps.openlayers.client.Projection;
import org.gwtopenmaps.openlayers.client.control.LayerSwitcher;
import org.gwtopenmaps.openlayers.client.control.OverviewMap;
import org.gwtopenmaps.openlayers.client.control.ScaleLine;
import org.gwtopenmaps.openlayers.client.layer.OSM;

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;

import com.google.gwt.event.logical.shared.AttachEvent;
import org.gwtopenmaps.openlayers.client.layer.*;

/**
 * Map panel widget
 */
public class MapPanel extends SectionStack {

    private final static int BORDER_SIZE = 1;

    private MapWidget mapWidget;
    private WidgetCanvas mapWrapper;

    private MapWidget createMapWidget() {
        MapOptions defaultMapOptions = new MapOptions();
        defaultMapOptions.setNumZoomLevels(16);

        MapWidget mapWidget = new MapWidget("100%", "100%", defaultMapOptions);

        // Google layer
        /*GoogleV3Options layerOptiond = new GoogleV3Options();
        layerOptiond.setIsBaseLayer(true);
        layerOptiond.setType(GoogleV3MapType.G_NORMAL_MAP);
        GoogleV3 layer = new GoogleV3("Google", layerOptiond);*/

        // Open Street Map layer
        OSM layer = OSM.Mapnik("Mapnik");
        layer.setIsBaseLayer(true);

        Map map = mapWidget.getMap();
        map.addLayer(layer);
        map.addControl(new ScaleLine());

        // Default center
        LonLat lonLat = new LonLat(12.5, 41.9);
        lonLat.transform(new Projection("EPSG:4326").getProjectionCode(), map.getProjection());
        map.setCenter(lonLat, 1);

        return mapWidget;
    }

    public MapPanel() {
        SectionStackSection section = new SectionStackSection("Map");
        section.setCanCollapse(false);
        section.setExpanded(true);

        mapWidget = createMapWidget();

        mapWrapper = new WidgetCanvas(mapWidget);
        mapWrapper.setStyleName("defaultBorder");
        mapWrapper.setHeight100();
        mapWrapper.setWidth100();

        // Map widget size hack
        mapWrapper.addDrawHandler(new DrawHandler() {
            @Override
            public void onDraw(DrawEvent event) {
                Element e = DOM.getElementById(mapWrapper.getID() + "_widget");
                if (e.getParentNode() != null) {
                    e.getParentElement().getStyle().setProperty("width", "100%");
                    e.getParentElement().getStyle().setProperty("height", "100%");
                }
            } 
        });

        // Map resize handler
        mapWrapper.addResizedHandler(new ResizedHandler() {
            @Override
            public void onResized(ResizedEvent event) {
                mapWidget.getMap().updateSize();
            }
        });

        section.setItems(mapWrapper);
        setSections(section);
    }

}