当它们之间有很大距离时显示点(GWT-Openlayers)

时间:2013-10-29 15:13:25

标签: gwt openlayers gwt-openlayers

案例如下:我有一个图层,上面有两个点。第一个是在澳大利亚,第二个是在美国。大陆或点的确切位置不计算在内。关键部分是各点之间的距离很远。应用程序启动时,会出现第一个点(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上。有没有人经历过这样的行为?或者有没有人解决这个问题?

1 个答案:

答案 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);