首页 文章

wikitude 3.01:在示例之间添加一些功能无法正常工作

提问于
浏览
1

我下载了Wikitude 3.1的SDK,将样本安装到我的Eclipse工作区,在我的Gnexus上,一切正常 . 我将问题分成几分,以便更容易回答:

我将“onMarkerSelectedFn”方法添加到“limitingVisiblePois.js”文件中,因为我想让我的POI可点击,当点击时,会出现类似5.1示例的信息页面 . 我添加了方法,但它不起作用,我不明白我在哪里犯错误 . 每个其他文件对于5.x样本是相同的 .

我编辑的“limitsVisiblePois.js”代码

var World = {

    markerDrawable_idle: new AR.ImageResource("assets/marker_idle.png"),
    markerDrawable_selected: new AR.ImageResource("assets/marker_selected.png"),
    markerDrawable_directionIndicator: new AR.ImageResource("assets/indi.png"),

    markerList: [],

    // called to inject new POI data
    loadPoisFromJsonData: function loadPoisFromJsonDataFn(poiData) {

        PoiRadar.show();

        document.getElementById("statusElement").innerHTML = 'Loading JSON objects';

        var poiImage = new AR.ImageResource("img/marker.png", {
            onError: World.errorLoadingImage
        });

        // TODO: call single POI-creation statement instead
        for (var i = 0; i < poiData.length; i++) {

            var singlePoi = {
                //EDIT BRUS: adding the ID of each POIs
                "id": poiData[i].id,
                "latitude": parseFloat(poiData[i].latitude),
                "longitude": parseFloat(poiData[i].longitude),
                "altitude": parseFloat(poiData[i].altitude),
                "title": poiData[i].name,
                "description": poiData[i].description
            };

            World.markerList.push(new Marker(singlePoi));
        }

        document.getElementById("statusElement").innerHTML = 'JSON objects loaded properly';

    },

    //  user's latest known location, accessible via userLocation.latitude, userLocation.longitude, userLocation.altitude
    userLocation: null,

    // location updates
    locationChanged: function locationChangedFn(lat, lon, alt, acc) {
        World.userLocation = {
            'latitude': lat,
            'longitude': lon,
            'altitude': alt,
            'accuracy': acc
        };
    },
    //EDIT BRUS: Adding onMarkerSelected function
    onMarkerSelected: function onMarkerSelectedFn(marker) {
        // notify native environment
        document.location = "architectsdk://markerselected?id=" + marker.poiData.id;
    },

    // called from slider.js every time the slider value changes
    onSliderChanged: function onSliderChangedFn(value) {
        if (value > 0) {
            var valueMeters = value * 1000;
            PoiRadar.setMaxDistance(valueMeters);
            AR.context.scene.cullingDistance = valueMeters;
        }
    }

};

// forward locationChanges to custom function
AR.context.onLocationChanged = World.locationChanged;

2)我无法理解POIs latlong在哪里进行声明处理 . 在前面发布的相同代码中,有功能

loadPoisFromJsonData:function loadPoisFromJsonDataFn(poiData)

但我不明白如何采取poiData .

我在Android和phonegap中使用了最后一个3.1 SDK .

提前致谢,

亲切的问候

布鲁斯

1 回答

  • 1

    PhoneGap插件示例尚未与原生SDK中的示例同步 .

    希望PhoneGap插件中的当前"HelloWorld"示例从Web服务请求POI数据,您指出的示例来自Android SDK,并通过 "architectView.callJavaScript('loadPoisFromJsonData(...)')". 从本机Android传递POI数据

    两者都使用相同的方法来解析POI数据,PhoneGap样本使用它,例如那样

    // request POI data
    requestDataFromServer: function requestDataFromServerFn(lat, lon) {
        var serverUrl = ServerInformation.POIDATA_SERVER + "?" + ServerInformation.POIDATA_SERVER_ARG_LAT + "=" + lat + "&" + ServerInformation.POIDATA_SERVER_ARG_LON + "=" + lon + "&" + ServerInformation.POIDATA_SERVER_ARG_NR_POIS + "=20";
        var jqxhr = $.getJSON(serverUrl, function(data) {
            World.loadPoisFromJsonData(data);
        })
            .error(function(err) {
            alert("JSON error occured! " + err.message);
        })
            .complete(function() {});
    }
    

    您可以在locationChanged实现中添加这些行以使用虚拟网络服务器中的位置(不要忘记定义'alreadyRequestedData = false;')

    if (!World.alreadyRequestedData) {
     World.requestDataFromServer(lat, lon);
     World.alreadyRequestedData = true;
    }
    

    亲切的问候,安德烈亚斯

相关问题