更新POI图标位置

时间:2014-07-10 22:14:06

标签: actionscript-3 air geolocation coordinates mapquest

我想在GPS给出的确切坐标上添加图像。

我已经设法这样做,但每次更新坐标时,它都会添加一个新图像(并且根本不更新当前图像的坐标)。

这就是我的所作所为:

if (Geolocation.isSupported){
my_geo.addEventListener(GeolocationEvent.UPDATE, onGeoUpdate);
} 

function onGeoUpdate(e:GeolocationEvent):void{
    trace("OngeoUpdate");
     [Embed (source="rond3.png")] 
            var rondImg:Class;
my_geo.removeEventListener(GeolocationEvent.UPDATE, onGeoUpdate);

              var myIcon:MapIcon = new MapIcon();

                myIcon.setImage(new rondImg());
              embeddedIconPoi = new Poi(new LatLng(e.latitude, e.longitude));
              embeddedIconPoi.rolloverAndInfoTitleText = "You're here";
              embeddedIconPoi.icon = myIcon;

              rondColl.add(embeddedIconPoi);
          myMap.addShapeCollection(rondColl);
}

我想这是因为我将我的变量放在onGeoUpdate函数中,因此每次调用它时,它都会创建一个新的POI。

所以我试过了:

    if (Geolocation.isSupported){

my_geo.addEventListener(GeolocationEvent.UPDATE, onGeoUpdate);
            [Embed (source="rond3.png")] 
            var rondImg:Class;
            var myIcon:MapIcon = new MapIcon();
            rondColl.add(embeddedIconPoi);
            myIcon.setImage(new rondImg());         
            embeddedIconPoi = new Poi(new LatLng());
            embeddedIconPoi.rolloverAndInfoTitleText = "You're here";
            embeddedIconPoi.icon = myIcon;
          myMap.addShapeCollection(rondColl);
} 

function onGeoUpdate(e:GeolocationEvent):void{
    trace("OngeoUpdate");
    Poi(new LatLng(e.latitude, e.longitude))

}

但它不起作用(错误#1034:类型强制失败:无法将com.mapquest :: LatLng @ 916bfd1转换为com.mapquest.tilemap.pois.Poi。)

你知道什么是错的吗?


编辑

以下是我在代码中导入的内容:

import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import com.mapquest.tilemap.*;
    import com.mapquest.LatLng;
    import com.mapquest.tilemap.pois.*;
import com.mapquest.tilemap.overlays.*;
import com.mapquest.tilemap.pois.Poi;

                import com.mapquest.tilemap.pois.MapIcon;

        import flash.sensors.Geolocation; 
import flash.events.GeolocationEvent;
            import com.mapquest.tilemap.pois.PoiEvent;


    import com.mapquest.tilemap.pois.Poi;
    import com.mapquest.services.directions.Directions;
import com.mapquest.services.directions.DirectionsConstants;
import com.mapquest.services.directions.DirectionsEvent;
import com.mapquest.services.geocode.Geocoder;
import com.mapquest.services.geocode.*;
import com.mapquest.services.geocode.GeocoderEvent;
import com.mapquest.services.geocode.GeocoderLocation;
import com.mapquest.tilemap.Size;
import flash.display.Bitmap;
import com.mapquest.tilemap.TileMap;
import com.mapquest.tilemap.controls.inputdevice.MouseWheelZoomControl;
import com.mapquest.tilemap.controls.shadymeadow.SMLargeZoomControl;
 import com.mapquest.tilemap.controls.shadymeadow.SMViewControl;

1 个答案:

答案 0 :(得分:0)

你是对的。这是因为您将变量放在onGeoUpdate()函数中。我之前从未使用过地理定位,但你应该尝试在onGeoUpdate()之外设置你的图标,并且只更新函数中的坐标。 这样的事情可能有用:

[Embed (source="rond3.png")] 
var rondImg:Class;

var myIcon:MapIcon = new MapIcon();
myIcon.setImage(new rondImg());

embeddedIconPoi = new Poi(new LatLng());
embeddedIconPoi.rolloverAndInfoTitleText = "You're here";
embeddedIconPoi.icon = myIcon;

rondColl.add(embeddedIconPoi);
myMap.addShapeCollection(rondColl);

if (Geolocation.isSupported){
    my_geo.addEventListener(GeolocationEvent.UPDATE, onGeoUpdate);
} 

function onGeoUpdate(e:GeolocationEvent):void{
    embeddedIconPoi.latLng.lat = e.latitude;
    embeddedIconPoi.latLng.lng = e.longitude;
}

如果您需要更多信息,请查看文档https://developer.mapquest.com/content/as3/v5/5.5.0/documentation/devref/com/mapquest/tilemap/pois/Poi.html#Poi()