0

ネストされた GeoJson を vectorLayer 経由で FeatureStore にロードする際に関連付けを使用することは可能ですか?

    Ext.define('Employee', {
        extend: 'Ext.data.Model',
        proxy: {
            type: 'memory',
            reader: {
                type: 'json',
                idProperty: 'id'
            }
        },
        fields: [ { name: 'name', type: 'string' } ]
    });

    Ext.define('Company', {
        extend: 'Ext.data.Model',
        proxy: {
            type: 'memory',
            reader: {
                type: 'json',
                idProperty: 'id'
            }
        },
        fields: [ { name: 'name', type: 'string' } ],
        hasMany: { model: 'Employee', name: 'employees' }
    });

    var jsonData = {
        companies: [
            {
                name: 'Foo',
                employees: [
                    {   name: 'Jack' },
                    {   name: 'Joe' }
                ]
            },
            {
                name: 'Bar',
                employees: [
                    {   name: 'Jim' }
                ]
            }
        ]
    };

    Ext.define('CompaniesExt', {
        extend: 'Ext.data.Store',
        model: 'Company',
        data: jsonData,
        storeId: 'CompaniesExt',
        proxy: {
            type: 'memory',
            reader: {
                type: 'json',
                root: 'companies'
            }
        }
    });

    Ext.define('CompaniesGeoExt', {
        extend: 'GeoExt.data.FeatureStore',
        model: 'Company',
        storeId: 'CompaniesGeoExt'
    });

    // data from json
    var jsonStore = Ext.create('CompaniesExt');

    // data from geoJson
    var map = new OpenLayers.Map({ allOverlays: true });
    var geoJsonStore = Ext.create('CompaniesGeoExt');
    var layer = new OpenLayers.Layer.Vector('Companies', { 
        storeName: 'CompaniesGeoExt',
        strategies: [
            new OpenLayers.Strategy.Fixed(), 
        ],          
        protocol: new OpenLayers.Protocol.HTTP({
            url: "/companies.geojson",
            format: new OpenLayers.Format.GeoJSON(),
        })
    });
    map.addLayers([layer]);
    geoJsonStore.bind(layer);

そのため、最初の jsonStore は期待どおりに機能し、employeesStore は各会社に取り込まれます。2 番目の geoJsonStore にはありません。従業員データは raw.data に残り、サブストアはロード時に取り込まれません。

このように動作するはずですか、それとも何か不足していますか?

company.geojson の内容は次のとおりです。

{
        "type": "FeatureCollection", 
        "features": [
            {
                "geometry": {
                    "type": "point",
                    "coordinates": [ 0, 0 ]
                },
                "type": "feature",
                "properties": {
                    "name": "Foo",
                    "employees": [
                        {   "name": "Jack" },
                        {   "name": "Joe" }
                    ]
                }
            },
            {
                "geometry": {
                    "type": "point",
                    "coordinates": [ 1, 1 ]
                },
                "type": "feature",
                "properties": {
                    "name": "Bar",
                    "employees": [
                        {   "name": "Jim" }
                    ]
                }
            }
        ]
    }
4

1 に答える 1

0

最も簡単な方法は、「featuresadded」イベントなどで、機能をロードした後にデータを書き換えることです。

    rewriteEmployees: function(event){

      // which store
      var store = event.features[0].layer.store; 

      // for each item do the rewrite
      store.each(
        function(r){
          if (r.raw.data.emplyees)
                r.raw.data.employees.forEach(function(e){
                    r.employees().add(e);
                });
                r.employees().commitChanges();
        }
    );
},
于 2014-10-30T17:48:04.010 に答える