0

アドレスのリストを含むアプリを構築しています。このアプリは、ユーザーがリスト内の各項目 (住所) をクリックすると、次のページに地図が表示され、地図にはクリックされた住所の正確な位置を示すマーカーが表示されるように動作します。これは、コードに記載されている緯度と経度の座標によって可能になります。私の問題は、複数の住所があり、これらの住所のそれぞれに固有の経度と緯度があることです。ユーザーが興味のある住所をクリックすると、アプリがページを開き、地図と、地図上の住所の正確な位置を指すマーカーを表示するように、アプリを機能させたいと考えています。私のコードは以下のとおりです。完全に機能していますが、ユーザーが住所をクリックすると、同じ経度と緯度に移動します。

私の店:

Ext.define('List.store.Presidents', {
extend : 'Ext.data.Store',

config : {
    model : 'List.model.President',
    sorters : 'lastName',
    grouper : function(record) {
        return record.get('lastName')[0];
    },

    data : [{

        firstName : "Ikhlas HQ",
        lastName : "Tower 11A, Avenue 5, Bangsar South, No.8 Jalan Kerinchi 59200 Kuala Lumpur",
        latitude : 3.110649,
        longitude : 101.664991,
        id: 'm12',
    },
    {
        firstName : "PEJABAT WILAYAH SELANGOR",
        lastName : "No. 97, 97-1 & 97-2, Jalan Mahogani 5/KS7, Ambang Botanic, 41200 Klang,   Selangor",
        latitude : 3.003384,
        longitude : 101.45256,
        id: 'm1',
    }, ]

}
});

私のコントローラー:

Ext.define('List.controller.Main', {
extend: 'Ext.app.Controller',

config: {

    control: {
        'presidentlist': {
            disclose: 'showDetail'
        },
     }
 },
showDetail: function(list, record) {
            this.getMain().push({
                xtype: 'presidentdetail',
                title: record.fullName(),

listeners: {
            maprender: function(comp, map) {
                var position = new google.maps.LatLng(5.978132,116.072617);
                var marker = new google.maps.Marker({
                    position: position,
                    map: map
                        });
            google.maps.event.addListener(marker, 'click', function() {
                    infowindow.open(map, marker);
                        });
            setTimeout(function() {
                    map.panTo(position);
                }, 1000);

                },
           }, 
        })
     },
});

私の見解:

Ext.define('List.view.PresidentDetail', {
extend : 'Ext.Map',
xtype: 'presidentdetail',

    config: {
                title: 'Details',
                styleHtmlContent: true,
                scrollable: 'vertical',
                //useCurrentLocation: true,
                layout: 'fit',

    mapOptions: {
                zoom: 16,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                navigationControl: true,
                navigationControlOptions: {
                style: google.maps.NavigationControlStyle.DEFAULT
                 }
            },
    }


});

私のモデル:

Ext.define('List.model.President', {
extend : 'Ext.data.Model',
config : {
    fields : ['firstName', 'middleInitial', 'lastName', 'latitude', 'longitude']
},
fullName : function() {
    var d = this.data, names = [d.firstName, (!d.middleInitial ? "" : d.middleInitial + "."), d.lastName];
    return names.join(" ");
}
});

助けてください。リストの各住所に緯度と経度のタグを付けて、ユーザーが住所をクリックしたときに地図上の正確な場所を指すようにする必要があります。

4

1 に答える 1

0

あなたの行:

var position = new google.maps.LatLng(5.978132,116.072617);

同じ座標に固定されているため、変更されることはありません。

私のアプリケーションでは、ビューにコントローラーへのイベントを発生させ、コントローラーでレコードの座標への参照を取得し、それをマップに設定します。

ビューで:

 config: {
        layout: 'fit',
        items: [
            {
                xtype: 'map',
                listeners: {
                    maprender: function (extMapComponent, googleMapComp) {
                        this.fireEvent('googleMapRender', googleMapComp);
                    }
                 }
             }
        ]
 }

コントローラ:

 refs: {
           mapRef: 'map'
   },

   Control: {            
            mapRef: {
                googleMapRender: 'onGoogleMapRender'
            }
   }

 onGoogleMapRender: function (googleMap) {

        // this.selectedRecord should be set when you select the item in the list 
        // so that you can pull the coordinates off
        var record = this.selectedRecord;

        var long = record.get("Longitude");
        var lat = record.get("Latitude");

        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, long);
        });

        marker.setMap(googleMap);

 }
于 2013-02-23T14:54:16.083 に答える