我需要用谷歌地图执行一些任务, 1.首先我需要用户只能放置一个标记 2.然后检索城市和其他详细信息,例如街道地址
有人知道吗?
答案 0 :(得分:5)
我写了一个最小的例子来展示你如何实现你想要的东西:
public void onModuleLoad() {
RootPanel.get().add(new GoogleMaps());
}
private class GoogleMaps extends Composite {
private MapWidget fMap;
private Geocoder fCoder;
private Marker fMarker;
public GoogleMaps() {
fMap = new MapWidget(LatLng.newInstance(47.0559084, 8.3114878), 6);
fMap.setSize("300px", "300px");
fCoder = new Geocoder();
MarkerOptions options = MarkerOptions.newInstance();
options.setDraggable(true);
fMarker = new Marker(LatLng.newInstance(47.0559084, 8.3114878), options);
fMap.addOverlay(fMarker);
fMarker.setVisible(false);
addHandlers();
initWidget(fMap);
}
private void addHandlers() {
fMap.addMapDoubleClickHandler(new MapDoubleClickHandler() {
@Override
public void onDoubleClick(MapDoubleClickEvent event) {
if (event.getLatLng() != null) {
performReverseLookup(event.getLatLng());
}
}
});
fMarker.addMarkerDragEndHandler(new MarkerDragEndHandler() {
@Override
public void onDragEnd(MarkerDragEndEvent event) {
LatLng point = event.getSender().getLatLng();
if (point != null) {
performReverseLookup(point);
}
}
});
}
private void performReverseLookup(final LatLng point) {
fCoder.getLocations(point, new LocationCallback() {
@Override
public void onSuccess(JsArray<Placemark> locations) {
if (locations.length() > 0) {
LatLng point = locations.get(0).getPoint();
fMarker.setLatLng(point);
fMarker.setVisible(true);
fMap.getInfoWindow().open(point, new InfoWindowContent(locations.get(0).getAddress()));
}
}
@Override
public void onFailure(int statusCode) {}
});
}
}
第一点:仅创建一个Marker
实例,并在用户互动时更新其LatLng
(在performReverseLookup()
中完成)。
您的第二个问题:执行反向查找后,您可以从Placemark
数组中获取locations
对象,并检索地址等详细信息。