2013-09-07 5 views
1

Я загрузил SDK из Wikitude 3.1, установил образцы в рабочее пространство Eclipse и на моем Gnexus все работает. Я разделяю вопросы в точках, поэтому может быть проще ответить:wikitude 3.01: добавление некоторых функций между примерами не получилось правильно

Я добавил метод «onMarkerSelectedFn» в файл «limitsVisiblePois.js», потому что мне захотелось, чтобы мои POI были кликируемыми, и при нажатии на них появляется информационная страница, например, 5.1. Я добавил метод, но он не работает, и я не понимаю, где я делаю ошибки. Каждый другой файл одинаковый для образцов 5.x.

Кодекс "limitingVisiblePois.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) Я не был в состоянии понять, где LatLong POIs координаты где declareated. В том же коде, размещенных впереди, есть функция

loadPoisFromJsonData: функция loadPoisFromJsonDataFn (poiData)

, но я не понимаю, как poiData принимаются.

Я использовал последний 3.1 SDK в Android и телефонном разговоре.

заранее спасибо,

Сердечные приветы

Брус

ответ

1

PhoneGap плагин образцы еще не синхронизированы с теми из нативного SDK.

на что ток «HelloWorld» образец в PhoneGap плагин запрашивает POI-данных из веб-сервиса образца вы отметили это из Android SDK и передает POI-данные из родной Android через "architectView.callJavaScript('loadPoisFromJsonData(...)')".

Оба делает использование тот же метод для анализа данных 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; 
} 

С уважением , Andreas

+0

Привет, Андреас, спасибо за ваш ответ. Я получил то, что вы объясняете, и я попытаюсь исправить свою проблему. Такая же информация доступна в документации вашего веб-сайта. С уважением, – Bebbolin