【问题标题】:Using Marker to Spot a particular address in a Map (Sencha Touch 2) Sencha Map使用标记在地图中定位特定地址 (Sencha Touch 2) Sencha Map
【发布时间】:2012-05-25 04:40:05
【问题描述】:

我正在尝试构建一个应用程序,该应用程序在用户单击地址后会为其提供方向。 我的应用程序的结构是这样的:

我已经设法以列表形式编译我想要的所有地址,这意味着用户可以单击该地址,它将加载第二页。查看下面的图片:

上图显示了我当前的应用程序和我当前的开发阶段,卡在那里,当应用程序加载时显示页面 A,当您单击任何地址时,它会转到页面 B。 我的应用程序的页面应该是带有标记的地图,该标记显示地图中地址的确切位置,并在可能的情况下提供从用户当前位置到确切地址的行车路线。查看下面的图片:

第二张图片正是我想要实现的,这意味着一旦用户点击任何地址,将显示一张地图,标记指向地址的确切位置(纬度和经度),我需要和图片看起来完全一样。

我的代码如下: 在我的视图面板中,我有以下代码:

Ext.define('List.view.PresidentList', {
extend: 'Ext.List',
xtype: 'presidentlist',
requires: ['List.store.Presidents'],

config: {
     xtype:'container',
    title: 'Takaful Branch',
    //grouped: true,
    itemTpl: '{firstName} {lastName}',
    styleHtmlContent: true,
    store: 'Presidents',
    onItemDisclosure: true,


}

});

也在我的视图面板中:

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

config: {
    title: 'Details',
    styleHtmlContent: true,
    scrollable: 'vertical',
    tpl: [
        'Google Map Goes Here'
         ]
}

});

我的视图文件夹中的最后一个文件是:

Ext.define('List.view.Main', {
extend: 'Ext.navigation.View',
xtype: 'mainpanel',
requires: [
    'List.view.PresidentList',
    'List.view.PresidentDetail'
],

config: {
    items: [
    {
        xtype: 'presidentlist'
    },
   ]
}

});

这是我的商店:

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: "PEJABAT WILAYAH SARAWAK", lastName: "Ground, 1st & 3rd Floor, Section 6, Kuching Town Land District (KTLD), Jalan Kulas, 93400 Kuching, Sarawak" },
        {   firstName: "PEJABAT WILAYAH TERENGGANU", lastName: "Lot PT 3593, Ground, Mezzanine & 1st Floor, Jalan Sultan Zainal Abidin, 20000 Kuala Terengganu, Terengganu" },
        {   firstName: "PEJABAT WILAYAH MELAKA", lastName: "No. 10, Jalan Melaka Raya 8, Taman Melaka Raya, 75000, Melaka. " },



    ]
}

});

这是我的模型:

Ext.define('List.model.President', {
extend: 'Ext.data.Model',
config: {
    fields: ['firstName', 'middleInitial', 'lastName']
},

fullName: function() {
    var d = this.data,
    names = [
        d.firstName,
        (!d.middleInitial ? "" : d.middleInitial + "."),
        d.lastName
    ];
    return names.join(" ");
}

});

最后是我的控制器:

Ext.define('List.model.President', {
extend: 'Ext.data.Model',
config: {
    fields: ['firstName', 'middleInitial', 'lastName']
},

fullName: function() {
    var d = this.data,
    names = [
        d.firstName,
        (!d.middleInitial ? "" : d.middleInitial + "."),
        d.lastName
    ];
    return names.join(" ");
}

});

我有我店里地址的准确坐标: 第一个地址:纬度:4.600381 经度:101.094174 第二地址:纬度:5.336649 经度:103.142497 第三地址:纬度:2.184044 经度:102.25982

将等待答复,而我仍在自行研究以解决问题。我相信您的回复将帮助我并帮助许多其他有类似问题的人。谢谢


我的商店:

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 : "PEJABAT WILAYAH SARAWAK",
        lastName : "Ground, 1st & 3rd Floor, Section 6, Kuching Town Land District (KTLD), Jalan Kulas, 93400 Kuching, Sarawak",
        latitude : 4.600381 ,
        longitude : 101.094174
    }, {
        firstName : "PEJABAT WILAYAH TERENGGANU",
        lastName : "Lot PT 3593, Ground, Mezzanine & 1st Floor, Jalan Sultan Zainal Abidin, 20000 Kuala Terengganu, Terengganu",
        latitude : 5.336649,
        longitude : 103.142497
    }, {
        firstName : "PEJABAT WILAYAH MELAKA",
        lastName : "No. 10, Jalan Melaka Raya 8, Taman Melaka Raya, 75000, Melaka. ",
        latitude : 2.184044,
        longitude : 102.25982
    }]
}

});

我的控制器:

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(component, map, geo, eOpts) {
                var position = new google.maps.LatLng(2.184044,102.25982);
                var marker = new google.maps.Marker({
                    position: position,
                    map: map
                        });

                var infowindow = new google.maps.InfoWindow({
                    content: 'Working Fine <br /> I have been working On you', 


                        });

            google.maps.event.addListener(marker, 'click', function() {
                    infowindow.open(map, marker);
                        });

            setTimeout(function() {
                    map.panTo(position);
                }, 1000);

                },
           }, 
        })
     },
});

我的模特:

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 + ".")];
    return names.join(" ");
}
});

我的看法:

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
                 }
            },
 }


});

到目前为止,上面代码的结果和上面的Image一样,对于列表中的3个item,只能显示一个经纬度。我现在的问题是让它以这样一种方式工作,一旦用户点击列表中的任何项目,它将显示该特定地址的确切纬度和经度。请帮助我查看我的应用程序(控制器)中的逻辑。谢谢

【问题讨论】:

    标签: sencha-touch extjs sencha-touch-2 sencha-touch-theming


    【解决方案1】:

    您自己寻找方向,但他正在丢针(假设您在模型中添加纬度/经度,并在创建模型时将模型传递给视图):

    Ext.define('List.view.PresidentDetail', {
        extend : 'Ext.Map',
        xtype : 'presidentdetail',
        config : {
            title : 'Details',
            styleHtmlContent : true,
            scrollable : 'vertical',
            president: null
        },
        onGeoUpdate : function(geo) {
            if (geo) {
                this.fireEvent('setcenter', this, this.getMap(), geo);
            }
        }
    });
    

    在你的控制器中:

    Ext.define('List.controller.PresidentDetailController', {
        extend : 'Ext.app.Controller',
        config : {
            control : {
                'presidentdetail' : {
                    activate : 'activateGPS',
                    setcenter : 'dropPins'
                }
            },
            markersArray : [],
        },
        activateGPS : function(container, options){
            container.setUseCurrentLocation(true);
        },
        dropPins : function(component, map, geo, eOpts) {
            //only do this the first time? 
            //geo updates are constantly recieved so turn useCurrentLocation off
            comp.setUseCurrentLocation(true);
    
            //Remove all markers from the map.
            for(var i = 0; i < this.getMarkersArray().length; i++) {
                this.getMarkersArray()[i].setMap(null);
            }
            this.setMarkersArray(Array());
    
            var currentPosition = new google.maps.LatLng(geo.getLatitude(), geo.getLongitude());
            var yourLocationMarker = new google.maps.Marker({
                    position : currentPosition,
                    title : 'Current Location',
                    map : map
                });
            self.getMarkersArray().push(yourLocationMarker);
    
            var president = comp.getPresident();
            var presidentsPosition = new google.maps.LatLng(president.getLatitude(), president.getLongitude());
            var yourLocationMarker = new google.maps.Marker({
                    position : presidentsPosition,
                    title : president.fullName(),
                    map : map
                });
            self.getMarkersArray().push(presidentsPosition);
        }
    });
    

    编辑 这是添加了纬度和经度字段的模型:

    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(" ");
        }
    });
    

    还有带有附加字段的商店:

    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 : "PEJABAT WILAYAH SARAWAK",
                lastName : "Ground, 1st & 3rd Floor, Section 6, Kuching Town Land District (KTLD), Jalan Kulas, 93400 Kuching, Sarawak",
                latitude : 4.600381 ,
                longitude : 101.094174
            }, {
                firstName : "PEJABAT WILAYAH TERENGGANU",
                lastName : "Lot PT 3593, Ground, Mezzanine & 1st Floor, Jalan Sultan Zainal Abidin, 20000 Kuala Terengganu, Terengganu",
                latitude : 5.336649,
                longitude : 103.142497
            }, {
                firstName : "PEJABAT WILAYAH MELAKA",
                lastName : "No. 10, Jalan Melaka Raya 8, Taman Melaka Raya, 75000, Melaka. ",
                latitude : 2.184044,
                longitude : 102.25982
            }]
        }
    });
    

    【讨论】:

    • 嗨,超人,我已经设法让我的地图显示为带有指向确切位置的标记,感谢您给我的建议。现在我还有一个问题,我希望列表中的每个项目根据纬度和经度都有自己独特的位置。到目前为止,我的代码如下所示:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多