私は backbone.js を使用していますが、地理位置情報の使用法を理解するのにいくつかの困難があります。
アプリが大きく、多くのクラスがあり、理解するのが難しいため、この問題を説明しようとします。
BクラスとCクラスの間でビューを切り替える「A」ビュークラスがあります。C クラス内で、別の D または E を設定できます。この最後のクラスは、1 つの属性にマップを持ちます。
ご覧のとおり、次のツリーがあります。
- A (ビュー)
- >B
- >C (ビュー)
- >>D
- >>E (ビュー、ol.map オブジェクトを格納する属性付き)
わかりました、このエンジンを起動し、アプリがリクエストしたので地理位置情報を選択する必要があるときに問題が始まります。Eクラスのシーケンスは次のとおりです。
コンストラクター: デフォルト (OSM) またはトランスポート (トランスポート層) のマップを定義します。オブジェクトを作成するときにアプリが必要とするものを知るための単なる文字列。
Render: load the next code.
var view = new ol.View2D({
// the view's initial state
center: [0,0],
zoom: 4
});
var marker = new ol.Overlay({
element: document.getElementById('position'),
positioning: ol.OverlayPositioning.CENTER_CENTER
});
if(this.model.get("map") == "default"){
console.log("carga default");
this.map = new ol.Map({
layers: [
new ol.layer.Tile({
preload: 4,
source: new ol.source.OSM()
})
],
renderers: ol.RendererHints.createFromQueryData(),
target: 'container',
view: view
});
var geolocation = new ol.Geolocation();
geolocation.bindTo('projection', this.map.getView());
geolocation.setTracking(true);
this.map.addOverlay(marker);
marker.bindTo('position', geolocation);
view.setCenter(ol.proj.transform([Number(longitude),Number(latitude)], 'EPSG:4326', 'EPSG:3857'));
view.setZoom(16);
geolocation.on('change', function() {
if(geolocation.getPosition() != null){
console.log("cambia");
console.log(geolocation.getPosition()[0]);
}
});
理論的には動作しますが、次の問題があります: -firefox では動作しませんが、chroimun ブラウザでは正常に動作します... -OSM からトランスポート マップに「変更」すると、属性内のすべてのデータが削除され、地理位置情報も含めて再度読み込みますが、ポイント マーカーとして使用する画像がドロップされます... -トランスポート マップから OSM に戻ると、ポイント画像を復元できません...
この問題が ol3 の非同期呼び出しと backbone.js の render 関数に関連しているかどうかはわかりません。また、ここの誰かが私が間違っていることを理解するのに役立つかどうかもわかりません...
また、ご覧のとおり、 setCenter i user 2 vars (経度と緯度) で、ジオロケーション追跡から初めて取得したいのですが、どうすればよいですか?
難しい質問ですが、ここの ol コミュニティの助けが本当に必要です。今迷っています。
よろしくお願いします!