[Users] GeoExt2: Problem adding multiple Features to FeatureStore and VectorLayer

Alexandre Dube adube at mapgears.com
Tue May 29 14:36:01 CEST 2012


Also, for the record : GeoExt2 was developed using Ext 4.1.0.

Best regards,

Alexandre


On 12-05-29 08:35 AM, Alexandre Dube wrote:
> Lukas,
>
> This looks like a bug indeed. What seems to happen is the FeatureStore
> [addFeatures] calls loadRawData, which fires the 'load' event, which
> triggers [onLoad] that calls this.layer.removeAllFeatures() before
> adding the new ones. Writing a test to replicate what your trying to do
> should reproduce the issue.
>
> Without testing it and from what I understand, here's what I think could
> solve the problem. The [LayerStore] used to have that same issue and it
> was changed. The LayerModel has a static method to build new [layer
> model instances] that can then be added/inserted/removed with standard
> store methods.
>
> In brief, it should use the loadRawData method, but add instead. Would
> you send a pull request with a fix and tests or simply create an issue
> on github, please ?
>
> [addFeatures]
> https://github.com/geoext/geoext2/blob/master/src/GeoExt/data/FeatureStore.js#L206
> [onLoad]
> https://github.com/geoext/geoext2/blob/master/src/GeoExt/data/FeatureStore.js#L319
> [LayerStore]
> https://github.com/geoext/geoext2/commit/c2d5993714a4201d4c190f29eeae63b3e51d4d6e
> [layer model instances]
> https://github.com/geoext/geoext2/blob/master/src/GeoExt/data/LayerModel.js#L18
>
>
> On 12-05-29 02:32 AM, Lukas Vonlanthen wrote:
>> Dear list,
>>
>> Using ExtJS 4 (4.0.7) and GeoExt 2, I am having troubles synchronizing
>> the FeatureStore with a VectorLayer. When I try to add a second
>> Feature to the FeatureStore (or the VectorLayer), it appears only in
>> the FeatureStore but NOT in the VectorLayer (and therefore not on the
>> map).
>>
>> <File: Project.store.ActivityPoints>
>> Ext.define('Project.store.ActivityPoints', {
>>                    extend: 'GeoExt.data.FeatureStore',
>>                    model: 'Project.model.Activity',
>>                    autoLoad: false
>> });
>>
>> <File: Project.controller.Map>
>> ...
>> onPanelRendered: function(comp) {
>>            var layer = comp.getMap().getLayersByName('vector')[0];
>>            var store = Ext.data.StoreManager.lookup('ActivityPoints');
>>            store.bind(layer);
>> }
>> ...
>>
>> <File: Project.view.map.MapPanel>
>> ...
>> map: {
>>            displayProjection: new OpenLayers.Projection("EPSG:4326"),
>>            layers: [
>>                    new OpenLayers.Layer.OSM('Mapnik'),
>>                    new OpenLayers.Layer.Vector("vector")
>>            ],
>>            projection: new OpenLayers.Projection("EPSG:900913")
>>        },
>> tbar: {
>>            items: [{
>>                    text: 'click',
>>                    handler: function() {
>>                        var layer = map.getLayersByName('vector')[0];
>>                        var store =
>> Ext.data.StoreManager.lookup('ActivityPoints');
>>                        var point1 = new OpenLayers.Feature.Vector(new
>> OpenLayers.Geometry.Point(9446238, 746333), {
>>                            id: 'point1'
>>                        });
>>                        var point2 = new OpenLayers.Feature.Vector(new
>> OpenLayers.Geometry.Point(9447238, 747333), {
>>                            id: 'point2'
>>                        });
>>                        layer.addFeatures([point1]);
>>                        console.log(store.count()); // 1
>>                        console.log(layer.features.length); // 1
>>                        console.log(layer.features[0] == point1); // true
>>                        layer.addFeatures([point2]);
>>                        console.log(store.count()); // 2
>>                        console.log(layer.features.length); // 1 (!!!)
>>                        console.log(layer.features[0] == point2); // true
>>                    }
>>                }]
>>            }
>> ...
>>
>> As you can see, the VectorLayer just does not seem to take more than
>> one Feature and always contains just the last added Feature. It also
>> does not make any difference if I change to
>> store.addFeatures([point1]) or if I try to add Features directly (not
>> in an array).
>>
>> It would work if I add all the Features at once:
>> layer.addFeatures([point1, point2]), but I would like to add the
>> Features one at a time.
>>
>> What am I doing wrong here? Any help is very much appreciated. Thanks!
>> With best regards, Lukas.
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at geoext.org
>> http://www.geoext.org/cgi-bin/mailman/listinfo/users
>


-- 
Alexandre Dubé
Mapgears
www.mapgears.com



More information about the Users mailing list