案例如下:我有一个图层,上面有两个点。第一个是在澳大利亚,第二个是在美国。大陆或点的确切位置不计算在内。关键部分是各点之间的距离很远。应用程序启动时,会出现第一个点(zoomlevel为18)。第二个点不显示,因为它离这里很远,并且zoomlevel很高。然后我用第二个点的位置调用panTo函数。地图跳转到正确的位置,但第二个点不会出现。只有在我放大/缩小或调整浏览器窗口大小时才会出现该点。 GWT代码:
LonLat center = new LonLat(151.304485, -33.807831);
final LonLat usaPoint = new LonLat(-106.356183, 35.842721);
MapOptions defaultMapOptions = new MapOptions();
defaultMapOptions.setNumZoomLevels(20);
// mapWidget
final MapWidget mapWidget = new MapWidget("100%", "100%", defaultMapOptions);
// google maps layer
GoogleV3Options gSatelliteOptions = new GoogleV3Options();
gSatelliteOptions.setIsBaseLayer(true);
gSatelliteOptions.setDisplayOutsideMaxExtent(true);
gSatelliteOptions.setSmoothDragPan(true);
gSatelliteOptions.setType(GoogleV3MapType.G_SATELLITE_MAP);
GoogleV3 gSatellite = new GoogleV3("Google Satellite", gSatelliteOptions);
mapWidget.getMap().addLayer(gSatellite);
// pointLayer
VectorOptions options = new VectorOptions();
options.setDisplayOutsideMaxExtent(true);
Vector vector = new Vector("layer1", options);
mapWidget.getMap().addLayer(vector);
mapWidget.getMap().addControl(new LayerSwitcher());
mapWidget.getMap().addControl(new MousePosition());
mapWidget.getMap().addControl(new ScaleLine());
mapWidget.getMap().addControl(new Scale());
// two points are added to the layer
center.transform(new Projection("EPSG:4326").getProjectionCode(), mapWidget.getMap().getProjection());
vector.addFeature(new VectorFeature(new Point(center.lon(), center.lat())));
usaPoint.transform(new Projection("EPSG:4326").getProjectionCode(), mapWidget.getMap().getProjection());
vector.addFeature(new VectorFeature(new Point(usaPoint.lon(), usaPoint.lat())));
// the center of the map is the first point
mapWidget.getMap().setCenter(center, 18);
// 3 sec later panTo second point
Timer t = new Timer() {
@Override
public void run() {
mapWidget.getMap().panTo(usaPoint);
}
};
t.schedule(3000);
我尝试用纯Openlayers重现这种情况,但它运行良好。这是link 所以我认为问题出在GWT-Openlayers上。有没有人经历过这样的行为?或者有没有人解决这个问题?
答案 0 :(得分:1)
多么奇怪的问题。
现在我只找到了解决方法,但不是真正的解决方法。如你所说,似乎是GWT-OL中的一个错误,但我无法想象在哪里。
您可以做的是在代码中添加以下3行:
mapWidget.getMap().panTo(usaPoint);
int zoom = mapWidget.getMap().getZoom();
mapWidget.getMap().setCenter(usaPoint, 0);
mapWidget.getMap().setCenter(usaPoint, zoom);
(注意:我是GWT-OL项目的贡献者,我也告知其他贡献者这个问题,也许他们可以找到更好的解决方案)
编辑:另一位GWT-OL撰稿人对此进行了调查,但也无法找到真正的解决方案 但另一种解决方法是对请求的点使用zoomToExtend:
Bounds b = new Bounds();
b.extend(new LonLat(usaPoint.getX(), usaPoint.getY()));
mapWidget.getMap().zoomToExtent(b);