2011-12-17 35 views
0

當我使用google的javascript API創建應用程序並且解決方案是在創建多標記的回調函數上關閉時,我遇到了同樣的問題。flex actionscript多標記標記不匹配工具提示或經緯度

我似乎無法找到一個製作多個自定義標記的例子,除了使用一些隨機數學函數創建多個標記之外的任何東西。

GlobalVars是包含靜態公共變種類型跟上然而,許多addressess,拉特,LNGS,等我一直在使用markermanager試過一類...

但它有一些問題,我最後只給了上。

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

這是我開始地理編碼的地址,而不是使用的HTTPService,因爲我之前做的開始,但我遇到了一個的HTTPService結果的問題將返回比另一種更快,這反過來將錯誤的數據與錯誤的標記。

顯然,我還沒有找到解決方案,因爲這種方式是做同樣的事情。

問題在於,如何檢索多個標記信息並保留所有的markeroptions,以便返回信息。

下面的代碼:

  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..."; 
      } 
     } 

回答

0

OK,我做了三兩件事,使這項工作正常。

首先,我只寫了一個for循環。

其次,我在三秒鐘後第二次調用makeMultipleMarkers函數。

第三,如果我仍然收到的500狀態碼,然後我將請求發送給谷歌,直到我的項目已被點擊了區後沒有收到的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); 
      } 
     } 

狀態碼datagrid,然後等待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.passAllDestinations()調用makeMultipleMarkers等等。

這裏的URL的應用 - 仍處於測試階段: enter link description here

順便說一句,這個程序被做使我的老闆不會開車去洛杉磯的每一所學校。這樣,他可以點擊一個特定的學區,然後選擇一條主要大街(高速公路,三車道或雙車道)旁邊的學校,確定學校是否可以在該特定附近放置廣告,然後選擇銷售點從那裏學校。

另一個順便說一句,爲什麼。來自bin-release文件夾的swf文件不起作用,但bin-debug中的.swf可以嗎?

相關問題