[Gvsig_english] Issue with layer position when creating new layers

Flavio Pompermaier fla83tn at gmail.com
Wed May 5 11:46:39 CEST 2010


Hi to all,
I'm using gvSIG 1.9 revision 1253 and I have some trouble whit layer
positioning.
I have a list of layer to add on login and, if this layer is not
present, I want to add it on the bottom of the toc and not on top as
default.
However, if I use Flayers.addLayer(0, layer) it is not added at the
bottom of the toc..
This is the code I use in my project (a simplified version):

       // 1 store layer position before addition
       for (MyLayer workLayer : workLayers) {
		String layerName = workLayer.getLayerNameI();
		int position = getLayerPostion(flayers, layerName);
		if (position >= 0) {
			layerPositions.put(layerName, position);
		}
	}

        //2 remove layer to add if present and then add
	for (MyLayer workLayer : workLayers) {
		String layerName = workLayer.getLayerNameI();
		/remove layer if it already exists
		FLayer alreadyExistingLayer = flayers.getLayer(layerName);
		if (alreadyExistingLayer != null) {
			flayers.removeLayer(alreadyExistingLayer);
		}
		//and substitute with the new generated one
		flayers.addLayer(createLayerInView(workLayer, projection));
		log.debug("Layer substituted: " + workLayer.getServiceLayerName());
	}

        // 3 reorder as before removing/adding (point 2)
        int numLayers = flayers.getLayersCount() - 1;
	for (MyLayer workLayer : workLayers) {
		String layerName = workLayer.getLayerNameI();
		Integer oldPosition = layerPositions.get(layerName);
		int currentPosition = getLayerPostion(flayers, layerName);
		if (oldPosition != null) {
			flayers.moveTo(numLayers - currentPosition, numLayers -
                        oldPosition.intValue());
		}
	}


and the function getLayerPostion():

       private static int getLayerPostion(FLayers flayers, String layerName) {
		for (int i = 0; i < flayers.getLayersCount(); i++) {
			if (layerName.equals(flayers.getLayer(i).getName()))
				return i;
		}
		return -1;
	}


Any help?


More information about the Gvsig_internacional mailing list