0

Google マップのバージョン 2 を使用しています。コードは以下の通りです

var smallGoogleMap = new Ext.ux.GMapPanel({
xtype: 'gmappanel',
id : 'gSmallSiteMap',
width:'100%',
height:1000,
zoomLevel: 10,
gmapType: 'map',
mapConfOpts: ['enableScrollWheelZoom','enableDoubleClickZoom','enableDragging'],
mapControls: ['GSmallMapControl','GMapTypeControl','NonExistantControl'],
setCenter: {
  lat: latitude,
  lng: longitude,
  marker:{ title: newTitle}
}
});

以下に示すようにsetCenterでgeoCodeAddrを使用すると、結果のGoogleマップでコントロールを取得できますが、上記のコード(緯度/経度)ではコントロールが失われます。

setCenter: {
  geoCodeAddr: newAdd,
  marker:{ title: newTitle}
}

問題を解決するためのアイデアはありますか?

4

1 に答える 1

0

ウェブで検索した後、望ましい結果を得るにはソースコード GMapPanel.js を変更する必要があることがわかりました。

変更が必要な元のコードの小便は以下のとおりです

......
if (typeof this.addControl == 'object' && this.gmapType === 'map') {
        this.gmap.addControl(this.addControl);
    }

    if (typeof this.setCenter === 'object') {
        if (typeof this.setCenter.geoCodeAddr === 'string'){
            this.geoCodeLookup(this.setCenter.geoCodeAddr);
        }else{
            if (this.gmapType === 'map'){
                point = new GLatLng(this.setCenter.lat,this.setCenter.lng);
                this.gmap.setCenter(point, this.zoomLevel);    
            }
            if (typeof this.setCenter.marker === 'object' && typeof point === 'object'){
                this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear);
            }
        }
        if (this.gmapType === 'panorama'){
            this.gmap.setLocationAndPOV(new GLatLng(this.setCenter.lat,this.setCenter.lng), {yaw: this.yaw, pitch: this.pitch, zoom: this.zoom});
        }
    }
GEvent.bind(this.gmap, 'load', this, function(){
        this.onMapReady();
    });
},
onMapReady : function(){
    this.addMarkers(this.markers);
    this.addMapControls();
    this.addOptions();  
},
........

以下のように変更する必要があります

......
if (typeof this.addControl == 'object' && this.gmapType === 'map') {
        this.gmap.addControl(this.addControl);
    }

    GEvent.bind(this.gmap, 'load', this, function(){
        this.onMapReady();
    });

    if (typeof this.setCenter === 'object') {
        if (typeof this.setCenter.geoCodeAddr === 'string'){
            this.geoCodeLookup(this.setCenter.geoCodeAddr);
        }else{
            if (this.gmapType === 'map'){
                point = new GLatLng(this.setCenter.lat,this.setCenter.lng);
                this.gmap.setCenter(point, this.zoomLevel);    
            }
            if (typeof this.setCenter.marker === 'object' && typeof point === 'object'){
                this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear);
            }
        }
        if (this.gmapType === 'panorama'){
            this.gmap.setLocationAndPOV(new GLatLng(this.setCenter.lat,this.setCenter.lng), {yaw: this.yaw, pitch: this.pitch, zoom: this.zoom});
        }
    }

},
onMapReady : function(){
    this.addMarkers(this.markers);
    this.addMapControls();
    this.addOptions();  
},
........

setCenter を設定して地図上のコントロールを取得する前に、「GEvent.bind」を移動する必要があります。

GEvent.bind(this.gmap, 'load', this, function(){
    this.onMapReady();
});
于 2013-01-24T15:35:11.017 に答える