annotate flys-client/src/main/java/de/intevation/flys/client/client/ui/map/GetFeatureInfo.java @ 5794:af2aa716152f

Fix issue1254, make GetFeatureInfo work reliably This reduced GetFeatureInfo to one request per layer and chooses the layer based on the selected theme
author Andre Heinecke <aheinecke@intevation.de>
date Tue, 23 Apr 2013 17:14:07 +0200
parents 46fc11ad697f
children e0ab5a566688
rev   line source
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.client.client.ui.map;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
3 import java.util.List;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 import com.google.gwt.core.client.GWT;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 import com.google.gwt.user.client.rpc.AsyncCallback;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import com.smartgwt.client.util.SC;
5794
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
9 import com.smartgwt.client.widgets.grid.ListGridRecord;
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import org.gwtopenmaps.openlayers.client.Map;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import org.gwtopenmaps.openlayers.client.LonLat;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import org.gwtopenmaps.openlayers.client.Pixel;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import org.gwtopenmaps.openlayers.client.event.MapClickListener;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15
1402
15ef3d3081b7 Parse GetFeatureInfo response on our own and display resulting FeatureInfo objects in the GetFeatureInfoWindow.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1400
diff changeset
16 import de.intevation.flys.client.shared.model.FeatureInfo;
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18 import de.intevation.flys.client.client.FLYSConstants;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19 import de.intevation.flys.client.client.services.GFIService;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 import de.intevation.flys.client.client.services.GFIServiceAsync;
5794
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
21 import de.intevation.flys.client.shared.model.FacetRecord;
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
22 import de.intevation.flys.client.shared.model.Theme;
1404
09566522e899 Query GetFeatureInfo with layers defined in MapThemePanel - which are the real layers in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1402
diff changeset
23 import de.intevation.flys.client.client.ui.ThemePanel;
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 public class GetFeatureInfo implements MapClickListener {
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 protected GFIServiceAsync gfiService = GWT.create(GFIService.class);
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
2439
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
32 protected GetFeatureInfoWindow gfiWindow;
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
33
1404
09566522e899 Query GetFeatureInfo with layers defined in MapThemePanel - which are the real layers in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1402
diff changeset
34 protected Map map;
09566522e899 Query GetFeatureInfo with layers defined in MapThemePanel - which are the real layers in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1402
diff changeset
35 protected ThemePanel themePanel;
09566522e899 Query GetFeatureInfo with layers defined in MapThemePanel - which are the real layers in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1402
diff changeset
36 protected String infoFormat;
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 /**
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 * @param map
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 * @param themes
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 * @param url
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43 * @param infoFormat
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 */
1404
09566522e899 Query GetFeatureInfo with layers defined in MapThemePanel - which are the real layers in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1402
diff changeset
45 public GetFeatureInfo(Map map, ThemePanel themePanel, String infoFormat) {
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 this.map = map;
1404
09566522e899 Query GetFeatureInfo with layers defined in MapThemePanel - which are the real layers in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1402
diff changeset
47 this.themePanel = themePanel;
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48 this.infoFormat = infoFormat;
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 }
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 public void activate(boolean activate) {
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53 if (activate) {
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54 map.addMapClickListener(this);
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 }
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 else {
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57 map.removeListener(this);
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
58 }
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 }
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61
2439
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
62 protected void newGetFeatureInfoWindow(List<FeatureInfo> features) {
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
63 if (gfiWindow != null) {
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
64 gfiWindow.destroy();
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
65 }
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
66
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
67 gfiWindow = new GetFeatureInfoWindow(features);
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
68 gfiWindow.show();
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
69 }
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
70
46fc11ad697f #555 Close existing GetFeatureInfoWindows before creating new ones.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2438
diff changeset
71
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72 @Override
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73 public void onClick(MapClickListener.MapClickEvent e) {
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74 LonLat lonlat = e.getLonLat();
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75 Pixel pixel = map.getPixelFromLonLat(lonlat);
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76
5794
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
77 if (themePanel.getSelectedRecords().length == 0) {
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
78 SC.say(MSG.requireTheme());
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
79 }
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80
5794
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
81 for (ListGridRecord rec : themePanel.getSelectedRecords()) {
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
82 Theme act_theme = ((FacetRecord)rec).getTheme();
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
83 gfiService.query(
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
84 act_theme,
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
85 infoFormat,
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
86 map.getExtent().toString(),
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
87 map.getProjection(),
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
88 (int) map.getSize().getHeight(),
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
89 (int) map.getSize().getWidth(),
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
90 pixel.x(), pixel.y(),
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
91 new AsyncCallback<List<FeatureInfo>>() {
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
92 @Override
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
93 public void onFailure(Throwable e) {
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
94 SC.warn(MSG.getString(e.getMessage()));
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
95 }
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
96
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
97 @Override
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
98 public void onSuccess(List<FeatureInfo> features) {
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
99 if (features != null && !features.isEmpty())
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
100 newGetFeatureInfoWindow(features);
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
101 }
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
102 }
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
103 );
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
104 break; // More intelligent handling when more then one is selected
af2aa716152f Fix issue1254, make GetFeatureInfo work reliably
Andre Heinecke <aheinecke@intevation.de>
parents: 2439
diff changeset
105 }
1400
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
106 }
96708d81eaf6 Added an initial GetFeatureInfo tool to get information about points in the map.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
107 }

http://dive4elements.wald.intevation.org