Flex маркеры действия несколько маркеров маркеры не совпадают с всплывающей подсказкой или широтой - PullRequest
0 голосов
/ 17 декабря 2011

У меня возникла такая же проблема, когда я создавал приложение с использованием API javascript от Google, и решение состояло в том, чтобы закрыть функцию обратного вызова, создав несколько маркеров.

Кажется, я не могу найти пример для создания несколькихпользовательские маркеры, с чем угодно, кроме использования какой-либо случайной математической функции для создания нескольких маркеров.

GlobalVars - это класс, который содержит статические публичные типы var, чтобы не отставать от множества адресов, латов, lng и т. д.

Я пытался использовать markermanager, но у него есть некоторые проблемы, от которых я наконец-то отказался.

Начиная с

 retrieveLatLngAddress.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, function(event:GeocodingEvent):void{

Здесь я начинаю геокодирование по адресу, а не использую httpservice, как я делал раньше, но я столкнулся с проблемами, когда один результат httpservice вернется быстреечем другой, который, в свою очередь, поместил бы неправильные данные с неправильным маркером.

Очевидно, я не нашел решения, потому что этот путь делает то же самое.

Вопрос в том, какмогу ли я получить информацию о нескольких маркерах и сохранить все параметры маркера в порядке с возвращаемой информацией.

Вот код:

            public function makeMultipleMarkers(destinationAllObj:Object):void {
            removeRouteMarkers();
            myMarkers = [];
            GlobalVars.myIcon = [];
            GlobalVars.someAddress = [];
            GlobalVars.sName = [];

            markerMgr.clearMarkers();
            GlobalVars.destinationInc = 0;

            retrieveLatLngAddress = new ClientGeocoder();
            retrieveLatLngAddress.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, function(event:GeocodingEvent):void{
                var result:Placemark = GeocodingResponse(event.response).placemarks[0];
                var latLngStr:String = result.point.toString();
                GlobalVars.panoLatLng = latLngStr.split(',');
                var deleteLeftParen:String = GlobalVars.panoLatLng[0];
                GlobalVars.panoLatLng[0] = deleteLeftParen.replace("(","");
                var deleteRightParen:String = GlobalVars.panoLatLng[1];
                GlobalVars.panoLatLng[1] = deleteRightParen.replace(")","");
                bounds = new LatLngBounds();


                var request:URLRequest = new URLRequest(GlobalVars.myIcon[GlobalVars.destinationInc]);
                var imageLoader:Loader = new Loader();
                imageLoader.load(request);
                imageLoader.name = String(GlobalVars.myIcon[GlobalVars.destinationInc]);

                // Alert.show(GlobalVars.panoLatLng[0]);
                var tmpLatLng:LatLng = new LatLng(GlobalVars.panoLatLng[0], GlobalVars.panoLatLng[1]);
                someMarker = new Marker(tmpLatLng, new MarkerOptions({
                    icon: imageLoader,
                    tooltip: destinationAllObj[GlobalVars.destinationInc].SNAME+', '+GlobalVars.someAddress[GlobalVars.destinationInc],
                    hasShadow: false
                }));

                someMarker.addEventListener(MapMouseEvent.CLICK, function(event:MapMouseEvent):void{
                    var marker:Marker = event.target as Marker;
                    var markerContent:String = marker.getOptions().tooltip.toString();
                    textInput.text = marker.getOptions().tooltip.toString();
                    marker.openInfoWindow(new InfoWindowOptions({content: markerContent}));

                    sendSomeLatLngToSv(event.latLng);

                    var lastIndexOfDashStr:String = marker.getOptions().icon.name;

                    GlobalVars.iconObj = lastIndexOfDashStr;
                    var tmpArr:Array = new Array;
                    var tmpStr:String = event.currentTarget.getOptions().tooltip;
                    tmpArr = tmpStr.split(',');
                    GlobalVars.panoAddr[0] = tmpArr[1];
                    GlobalVars.sName[0] = tmpArr[0];
                });

                myMarkers.push(someMarker);
                googleMap.addOverlay(someMarker);

                for each(someMarker in myMarkers)
                {
                    var newLatLng:LatLng = someMarker.getLatLng();
                    bounds.extend(newLatLng);
                }

                GlobalVars.destinationInc++;

                if(GlobalVars.newDestObj.length == GlobalVars.destinationInc)
                {
                    statusTxt.text = "Complete";
                    googleMap.setCenter(bounds.getCenter(), (googleMap.getBoundsZoomLevel(bounds))-2, MapType.HYBRID_MAP_TYPE);

                    // markerMgr.addMarkers(myMarkers, 8, 16);
                    // markerMgr.refresh();
                }
            });
            retrieveLatLngAddress.addEventListener(GeocodingEvent.GEOCODING_FAILURE, geocoderMarkersFailure);


            for(GlobalVars.destinationCounter = 0; GlobalVars.destinationCounter < destinationAllObj.length; GlobalVars.destinationCounter++)
            {
                // Alert.show(destinationAllObj[GlobalVars.destinationCounter].ICON);
                GlobalVars.someAddress[GlobalVars.destinationCounter] = destinationAllObj[GlobalVars.destinationCounter].SLOC;
                GlobalVars.sName[GlobalVars.destinationCounter] = destinationAllObj[GlobalVars.destinationCounter].SNAME;

                if(destinationAllObj[GlobalVars.destinationCounter].ICON == "")
                {
                    GlobalVars.myIcon[GlobalVars.destinationCounter] = "images/school_32.png";
                    // Alert.show(GlobalVars.destinationCounter+" "+GlobalVars.myIcon[GlobalVars.destinationCounter]);
                }
                else
                {
                    GlobalVars.myIcon[GlobalVars.destinationCounter] = destinationAllObj[GlobalVars.destinationCounter].ICON;
                }

                statusTxt.text = "Processing data, please wait...";
            }

            for(GlobalVars.destinationCounter = 0; GlobalVars.destinationCounter < destinationAllObj.length; GlobalVars.destinationCounter++)
            {
                var tempURL:String = "http://kronusproductions.com/mycarpaysme_ajax/php/google_lat_lng_flex_lausd.php?addr="+destinationAllObj[GlobalVars.destinationCounter].SLOC;

                // loadMyXml(tempURL);

                retrieveLatLngAddress.geocode(destinationAllObj[GlobalVars.destinationCounter].SLOC);
                statusTxt.text = "Processing data, please wait...";
            }
        }

1 Ответ

0 голосов
/ 23 декабря 2011

ОК, для правильной работы я сделал три вещи.

Во-первых, я написал только один цикл for.

Во-вторых, я вызываю функцию makeMultipleMarkers второй раз после того, как прошло три секунды..

В-третьих, если я все еще получаю код состояния 500, я отправляю запрос в Google, пока не получу код состояния 500.

        public function makeMultipleMarkers(destinationAllObj:Object):void {
            myMarkers = [];
            GlobalVars.myIcon = [];
            GlobalVars.someAddress = [];
            GlobalVars.sName = [];
            GlobalVars.destinationInc = 0;

            googleMap.getPaneManager().clearOverlays();

            bounds = new LatLngBounds();
            retrieveLatLngAddress = new ClientGeocoder();

            retrieveLatLngAddress.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, function(event:GeocodingEvent):void{
                var result:Placemark = GeocodingResponse(event.response).placemarks[0];
                var latLngStr:String = result.point.toString();
                // GlobalVars.statusCode = event.status;

                var request:URLRequest;
                var imageLoader:Loader = new Loader();

                if(GlobalVars.destinationInc < destinationAllObj.length)
                {
                    imageLoader.load((destinationAllObj[GlobalVars.destinationInc].ICON == "")? request = new URLRequest("images/school_32.png") : request = new URLRequest(destinationAllObj[GlobalVars.destinationInc].ICON));
                    imageLoader.name = String(destinationAllObj[GlobalVars.destinationInc].ICON);

                    someMarker = new Marker(result.point, new MarkerOptions({
                        icon: imageLoader,
                        tooltip: destinationAllObj[GlobalVars.destinationInc].SNAME+', '+destinationAllObj[GlobalVars.destinationInc].SLOC,
                        hasShadow: false
                    }));

                    someMarker.addEventListener(MapMouseEvent.CLICK, function(event:MapMouseEvent):void{
                        directionsSteps.removeAll();
                        var marker:Marker = event.target as Marker;
                        var markerContent:String = marker.getOptions().tooltip.toString();
                        var firstComma:Number = markerContent.indexOf(",");
                        textInput.text = markerContent.substr((firstComma+2),markerContent.length);
                        var tempInfoWinOpts:InfoWindowOptions = new InfoWindowOptions({
                            content: markerContent,
                            width: 450
                        });
                        marker.openInfoWindow(tempInfoWinOpts);

                        sendSomeLatLngToSv(event.latLng);

                        var lastIndexOfDashStr:String = marker.getOptions().icon.name;

                        GlobalVars.iconObj = lastIndexOfDashStr;
                        var tmpArr:Array = new Array;
                        var tmpStr:String = event.currentTarget.getOptions().tooltip;
                        tmpArr = tmpStr.split(',');
                        GlobalVars.panoAddr[0] = tmpArr[1];
                        GlobalVars.sName[0] = tmpArr[0];
                    });

                    googleMap.addOverlay(someMarker);
                    myMarkers.push(someMarker);
                    GlobalVars.destinationInc++;
                }

                for each(someMarker in myMarkers)
                {
                    var newLatLng:LatLng = someMarker.getLatLng();
                    bounds.extend(newLatLng);
                }

                if(destinationAllObj.length == GlobalVars.destinationInc)
                {
                    statusTxt.text = "Complete";
                    var tempNum:Number = googleMap.getBoundsZoomLevel(bounds);
                    googleMap.setCenter(bounds.getCenter(), (tempNum), MapType.HYBRID_MAP_TYPE);
                }

            });
            retrieveLatLngAddress.addEventListener(GeocodingEvent.GEOCODING_FAILURE, geocoderMarkersFailure);

            for(GlobalVars.destinationCounter = 0; GlobalVars.destinationCounter < destinationAllObj.length; GlobalVars.destinationCounter++)
            {
                statusTxt.text = "Processing data, please wait...";
                retrieveLatLngAddress.geocode(destinationAllObj[GlobalVars.destinationCounter].SLOC);
            }
        }

После того, как элементщелкнули в сетке данных района, затем подождите 3 секунды и снова вызовите функцию.Функции, аналогичные обновлению сетки данных.

            public function selectedItemChanged(event:ListEvent):void
        {
            this.parentDocument.flexGoogleMap.directionsSteps.removeAll();
            tempId = event.currentTarget.selectedItem.district_id;
            this.parentDocument.passIdToRemoteGetSchoolsLocations(tempId);
            setTimeout(mTimeOut, 3000);
        }

        public function mTimeOut():void{
            this.parentDocument.passIdToRemoteGetSchoolsLocations(tempId)
        }

Если возвращается код состояния 500.

            public function geocoderMarkersFailure(event:GeocodingEvent):void
        {
            var result:Number = event.status;
            statusTxt.text = "Error: "+result+" processing address, re-processing, please wait 10-25 seconds...";
            GlobalVars.statusCode = result;
            if(GlobalVars.statusCode == 500)
            {
                setTimeout(statusFiveHundred, 10000);
                GlobalVars.statusCode = 0;
            }
        }

            public function statusFiveHundred():void{
            this.parentDocument.passAllDestinations();
        }

this.parentDocument.passAllDestination () вызывает makeMultipleMarkers, среди прочего.

Вот URL-адрес приложения - все еще в стадии тестирования: введите описание ссылки здесь

Кстати, это приложение было сделано, чтобы моему боссу не приходилось ехать накаждая школа в Лос-Анджелесе.Таким образом, он может щелкнуть по определенному школьному округу, а затем выбрать школу рядом с крупной магистралью (шоссе, три полосы движения или две полосы движения), определить, может ли школа разместить объявление рядом с этим конкретным местом, после чего следует указать его рекламный шаг дляшкола оттуда.

Еще один BTW, почему файл .swf из папки bin-release не работает, а файл .swf из bin-debug работает?

...