Flex Google несколько маркеров - PullRequest
       10

Flex Google несколько маркеров

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

Я сделал несколько маркеров с помощью javascript, но попытка сделать то же самое в actioncript оказывается довольно сложной задачей.

Я использую указания googles, чтобы получить LatLng для добавления маркеров, но он возвращает только один маркер. Либо первый, либо второй.

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

markers = ['11030 Hartsook st, North Hollywood, CA','15713 Ventura blvd, Encino, CA'];
for (var i:Number = 0; i < markers.length; ++i) {
from.text=markers[i];
textInput.text=markers[i];
processForm(evt);
}

private function processForm(event:Event):void {
var directions:Directions = new Directions();
directions.addEventListener(DirectionsEvent.DIRECTIONS_SUCCESS, onDirectionsSuccess);
directions.addEventListener(DirectionsEvent.DIRECTIONS_FAILURE, onDirectionsFail);
directions.load("from: " + from.text + " to: " + textInput.text);
}

private function onDirectionsSuccess(event:DirectionsEvent):void{
            googleMap.clearOverlays();
            directionsSteps.removeAll();

            directions = event.directions;
            var directionsPolyline:IPolyline = directions.createPolyline();
            googleMap.addOverlay(directionsPolyline);

            /*************************************
             * zoomout after retrieving directions
             * ***********************************/
            var directionsBounds:LatLngBounds = directionsPolyline.getLatLngBounds();
            googleMap.setCenter(directionsBounds.getCenter());
            googleMap.setZoom(googleMap.getBoundsZoomLevel(directionsBounds));

            /*************************************
             * create markers
             * ***********************************/             
            startLatLng = directions.getRoute(0).getStep(0).latLng;
            var endLatLng:LatLng = directions.getRoute(directions.numRoutes-1).endLatLng;
            googleMap.addOverlay(new Marker(startLatLng));
            googleMap.addOverlay(new Marker(endLatLng));
            myMarkers.push(new Marker(startLatLng));
            mgr.addMarkers(myMarkers, myMarkers.length);
            mgr.refresh();

            /*************************************
             * create steps
             * ***********************************/ 
            for (var r:Number = 0 ; r < directions.numRoutes; r++ ) {
                var route:Route = directions.getRoute(r);

                for (var s:Number = 0 ; s < route.numSteps; s++ ) {
                    var step:Step = route.getStep(s);
                    directionsSteps.addItem(step);
                }
            }
}

1 Ответ

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

ОК, мне пришлось отказаться от старого кода и использовать httpservice для получения широты, lng для каждого адреса:

            private function makeMarkers():void {
            for (var x:Number= 0; x < markers.length; x++) {
                loadMyXml("http://maps.googleapis.com/maps/api/geocode/xml?address="+markers[x]+"&sensor=false");
            }
        }

        private function loadMyXml(src:String):void {
            httpService.url = src;
            httpService.send();
        }


            public function httpService_resultHandler(event:ResultEvent):void
        {
            covToXML = new XML(event.result);
            xmlToList = new XMLList(covToXML);
            listToCol = new XMLListCollection(xmlToList);
            someLat = Number(listToCol.children().child("geometry").child("location").child("lat").text());
            someLng = Number(listToCol.children().child("geometry").child("location").child("lng").text());
            someAddress = String(listToCol.children().child("formatted_address").text());

            // Alert.show(someLat +", "+ someLng + someAddress);
            var someMarker:Marker = new Marker(new LatLng(someLat , someLng), new MarkerOptions({tooltip:someAddress, hasShadow: true}));
            //googleMap.addOverlay(someMarker);
            myMarkers.push(someMarker);
            mgr.addMarkers(myMarkers, 1);
            mgr.refresh();
            markerSetBounds(someLat , someLng);
        }

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

Готовимся опубликовать еще один вопрос.

...