我有一个简单的gmappanel (extjs4.1.1)。如何改变地图的“中心”,在新坐标下用中心刷新我的窗口?
我的代码是:
Ext.Loader.setConfig({
        enabled : true
    });
Ext.require(['Ext.window.*', 'Ext.ux.GMapPanel']);
Ext.define('AM.view.gmapwindow.GoogleMap', {
extend : 'Ext.window.Window',
alias : 'widget.gmapw',
autoShow : true,
title : 'map',
closeAction : 'hide',
width : 460,
height : 500,
border : false,
x : 40,
y : 60,
items : [{
            layout : {
                type : 'hbox',
                align : 'stretch'
            },
            flex : 1,
            items : [{
                        xtype : 'textfield'
                    }, {
                        xtype : 'button',
                         handler: function() {
//--------------------
//modify here the center 
//geoCodeAddr:'Suisse Romande, Avenue de la Gare, Sion, Svizzera'
//---------------------
                            }
                    }]
        }, {
            width : 450,
            layout : 'fit',
            height : 450,
            border : false,
            items : {
                xtype : 'gmappanel',
                center : {
                    geoCodeAddr : '4 Yawkey Way, Boston, MA, 02215-3409, USA'
                },
                markers : []
            }
        }]});
地图显示得很好,但如果我试图更改中心编辑
geoCodeAddr
使用以下代码
this.up('gmapw').down('gmappanel').center.geoCodeAddr='Suisse Romande, Avenue de la Gare, Sion, Svizzera';什么都没发生。
有什么想法吗?
谢谢
发布于 2013-04-05 21:58:46
如果您查看GMapPanel.js,您将看到在afterFirstLayout()中,在创建映射时使用了geoCodeAddr。在布局之后设置它不会做任何事情,因为不会再次调用afterFirstLayout()。
您应该对您的地址进行地理编码,并使用它在地图上设置中心。下面这样的东西应该能起作用:
var map = this.gmap;
var geocoder = new google.maps.Geocoder();
var request = {address: 'Suisse Romande, Avenue de la Gare, Sion, Svizzera'};
var callBack = function(geocoderResults, geocoderStatus) {
    if(geocoderStatus === 'OK') {
        var location = geocoderResults[0].geometry.location;
        var latLng = new google.maps.LatLng(location.lat(), location.lng());
        map.setCenter(latLng);
    }
}
geocoder.geocode(request,callBack);发布于 2013-04-08 07:57:07
我已经修改了Arun的答案,使它完全适用于我的例子。
再次感谢阿伦五世:
var request = {address: 'Suisse Romande, Avenue de la Gare, Sion, Svizzera'};
var callBack = function(geocoderResults, geocoderStatus) {
    if(geocoderStatus === 'OK') {
        var location = geocoderResults[0].geometry.location;
        var latLng = new google.maps.LatLng(location.lat(), location.lng());
        //get current Id from document useful if you have more than one map
        //you can't use "this.gmap" reference here because it's not in your scope
        var idMapW = this.document.activeElement.id;
        Ext.ComponentQuery.query('#'+idMapW)[0].down('gmappanel').gmap.setCenter(latLng);
        }
    };
    this.up('gmapw').down('gmappanel').geocoder.geocode(request,callBack);https://stackoverflow.com/questions/15836114
复制相似问题