0

我在使用 Flex 应用程序时遇到了 Google Maps API 的问题。

定期,我必须刷新它 5 或 6 次才能使地图正确显示。否则,我会在左上角得到一个标记,并且地图显示为灰色。我什至没有收到错误消息,所以我不确定要解决什么问题。

我怀疑它可能与在生成地图时触发 onMapReady(event) 有关,但我不知道如何在 Flex 中设置某种类型的定时监听器。(我已经用谷歌搜索了这个,但只在 JavaScript 或 Jquery 中找到了这样做的实例。)

有人可以告诉我如何使用 ActionScript/Flex 检查地图是否处于空闲状态吗?我想如果我能得到那部分,我可以删除 mapevent_mapready="onMapReady(event)" 并让 onMapReady(event) 函数在地图空闲时运行......或类似的东西。我已经在 J​​avaScript 中看到过它,但当然它不能直接在 AS 中工作,而且我对这两种方法的了解都不够,无法进行正确的翻译。

这是我的代码:

    public function onMapReady(event:MapEvent):void {

var dojoGeo:Array = geoSchoolInfoAry; 

var md:MarkerData = new MarkerData(dojoGeo[0],dojoGeo[1]);

var latlng:LatLng = new LatLng(md.lat,md.lng); 


var markerOptions:MarkerOptions = new MarkerOptions();

markerOptions.icon = new dojoIcon(); 

var dojoMarker:Marker = new Marker(latlng,markerOptions);

map.addOverlay(dojoMarker);


var markerOptions2:MarkerOptions = new MarkerOptions();

markerOptions2.icon = new studentIcon(); 

var studentMarker:Marker = new Marker(latlng,markerOptions2);

map.addOverlay(studentMarker); 


map.setCenter(new LatLng(dojoGeo[0],dojoGeo[1]), 11, MapType.NORMAL_MAP_TYPE);

map.addControl(new ZoomControl());

map.addControl(new MapTypeControl());

map.addControl(new ScaleControl()); 


addSchoolMarker(md,dojoMarker); 

addStudentsToMap(); 

} 

<mx:HBox width="100%" height="100%">
    <maps:Map xmlns:maps="com.google.maps.*" id="map" key="map key here"  mapevent_mapready="onMapReady(event)" width="90%" height="90%"   sensor="false" />
</mx:HBox>

谢谢你的帮助!

更新:使用 Firebug 开发工具,我发现了 2 个错误。CrossDomain.xml - Aborted and 404 Not Found 错误。不完全确定如何进行此操作,因为我不知道这些是否只是首先导致问题的症状。

4

1 回答 1

0

好吧,我必须感谢我的同事找到了解决方案。

问题是时间问题,在调用 API 的同时,函数正在使用数据运行以填充地图。所以他建议 mapOnReady 事件不应该运行,直到其他 2 个功能完成。

希望它可以帮助遇到类似问题的人。

这是代码:

    public function getGeoInfo_Handler(results):void
{
 try
 {

  geoSchoolInfoAry = (results.getSchoolInfo.split(","));

  geoInfoAC = new ArrayCollection(results.getInfo.split(";"));
  remoteCallComplete=true;
  loadMap();
 }
 catch (error:Error)
 {
  FlexException.errorHandler(error, "StudentPopMapModuleCode:getGeoInfoSchool_Handler");
 }
}
public function onMapReady(event:MapEvent = null):void
{
 mapReady=true;
 loadMap();
}

private function loadMap():void
{
 if(mapReady && remoteCallComplete)
 {
  var dojoGeo:Array = geoSchoolInfoAry;
  var md:MarkerData = new MarkerData(dojoGeo[0], dojoGeo[1]);
  var latlng:LatLng = new LatLng(md.lat, md.lng);

  map.setCenter(new LatLng(dojoGeo[0], dojoGeo[1]), 11, MapType.NORMAL_MAP_TYPE);
  map.addControl(new ZoomControl());
  map.addControl(new MapTypeControl());
  map.addControl(new ScaleControl());

  var markerOptions:MarkerOptions = new MarkerOptions();
  markerOptions.icon = new dojoIcon();
  var dojoMarker:Marker = new Marker(latlng, markerOptions);
  map.addOverlay(dojoMarker);

  var markerOptions2:MarkerOptions = new MarkerOptions();
  markerOptions2.icon = new studentIcon();
  var studentMarker:Marker = new Marker(latlng, markerOptions2);
  map.addOverlay(studentMarker);

  addSchoolMarker(md, dojoMarker);
  addStudentsToMap();
 }
}
于 2013-07-12T22:01:37.533 回答