1

Titanium(appcelerator)で簡単なマップビューを作成しようとしていますが、ユーザーがクリックするか、マップを長押しして、マップ上のその選択から緯度と経度を取得する必要があります。マップビューには がありmapview.addEventListener('click',function(evt))ますが、クリックしてもこれらの値が得られません。これに関するどんな助けも素晴らしいでしょう!

4

2 に答える 2

4

クリックまたは長押しの座標から緯度と経度を計算するのは非常に簡単です (ズームアウトしすぎていない場合)。Appcelerator Q&A のこの質問から取得したイベント リスナー内でこの関数を使用します。

var calculateLatLngfromPixels = function(mapview, xPixels, yPixels) {

    var region = mapview.actualRegion || mapview.region;
    var widthInPixels = mapview.rect.width;
    var heightInPixels = mapview.rect.height;

    // should invert because of the pixel reference frame
    heightDegPerPixel = -region.latitudeDelta / heightInPixels; 
    widthDegPerPixel = region.longitudeDelta / widthInPixels;

    return {
        lat : (yPixels - heightInPixels / 2) * heightDegPerPixel + region.latitude,
        lon : (xPixels - widthInPixels / 2) * widthDegPerPixel + region.longitude

    };
}

longpressMapView 自体でイベントをリッスンできないことに注意してください。そのため、通常のコンテナ ビューにネストし、そこにリスナーを追加します。使用例は次のようになります。

var container = Ti.UI.createView({
    top : 0,
    left : 0
});
container.add(mapview);

container.addEventListener('longpress', function(e) {
    var coordinate = calculateLatLngfromPixels(mapview, e.x, e.y);
    var longitude = coordinate.lat;
    var latitude = coordinate.lat;
});

これは、地球の(比較的)小さな領域を見ている場合に機能します。完全にズームアウトした場合、完全にズームアウトしたい場合は、地球の曲率のためにメルカトル図法を使用して実際の座標を取得する必要がありますモジュールを使用します。

于 2012-08-14T15:35:29.727 に答える
0

そのためのモジュールがマーケットプレイスにあります。購入には 0.99 ドルかかり、マップの座標を提供しますhttps://marketplace.appcelerator.com/apps/1334

于 2012-08-14T15:14:07.313 に答える