8

キャッシュしたいオーバーレイのあるマップがあります-ユーザーがマップ上でアクセスした各場所(長方形の領域)-この長方形に存在するオーバーレイのキャッシュがあるかどうかを確認します。

キャッシングを改善するために(つまり、ユーザーが以前に同じ長方形を使用していた場合、以前の長方形から数メートル離れていることを除いて)-座標を「丸め」たいと思います。

このようにして、ユーザーが長方形に入るたびに、この長方形が以前にキャッシュされた長方形と類似しているかどうかを確認し、類似している場合は、キャッシュされた結果を表示します。

また、ユーザーがズームアウトされていて、その長方形がより大きな(以前にキャッシュされた)長方形内に含まれている場合は、キャッシュされた長方形を使用することもできます。

助言がありますか ?

4

3 に答える 3

1

次のようなデータ構造を設定した場合:

var a = { 'scales' : [50, 100, 200, 400, 1000],
   'cachedRects': [{'location': 'rect-large-1234-5678.png', x: 1234, y: 5678, scale: 3}
                   {'location': 'rect-small-1240-5685.png', x: 1240, y: 5685, scale: 1} ]
}

これを行うには、モジュロ関数を使用できます。

var currentx = GetCurrentX();
var currenty = GetCurrentY();

var currentScale = GetCurrentScale();

var rectFound = false;

foreach(rect in a.cachedRects) {
    if (rect.scale === currentScale 
        && currentx % a.scales[currentScale] === rect.x
        && currenty % a.scales[currentScale] === rect.y) {
            rectFound = true;
            useOverlay(rect);
            break;
    }

}

if(!rectFound) {
    //could loop again for a larger rectangle of a lower scale.
}

上記は有効な JS であると判明する場合とそうでない場合があります - 私はそれを実行しようとはしていません。とにかく、要点を理解していただければ幸いです。

于 2013-02-15T11:32:25.387 に答える
1

座標をグループ化する方法だけを見ている場合は、x 座標と y 座標の最大差、または必要な緯度と経度を決定します。次に、それらをグループ化する方法が 2 つあります。最初の方が簡単ですが、ポイントが多いと遅くなります。

cachedPoints と呼ばれるデータ構造、maxdistance と呼ばれる関連するポイント間の最大距離、および他の呼び出されたポイントに近いかどうかを確認しようとしている新しいポイントがあるとします。

for each cachedPoint in cachedPoints
{
    if (point.x - cachedPoint.x < maxdistance)
    {
        if (point.y - cachedPoint.y < maxdistance)
        {
              cachedPoint.incrementvisits();  
        }
    }
}

もう 1 つの方法は、x または緯度でソートされたデータ構造を使用し、ポイントの maxdistance 内に x または緯度を持つキャッシュされたポイントがあるかどうかを検索してから、y または経度をチェックすることです。少し高速になりますが、実装にはある種のハッシュが必要であり、不要な複雑さが追加されます。

うまくいけば、それがあなたが求めていることです。

于 2013-02-13T20:26:09.883 に答える
0

AndroidのGoogleマップv2にマーカーを追加できます。

ここで、マーカーを追加するためのコードを示します

    MarkerOptions mOpt = new MarkerOptions();
    mOpt.position(new LatLng(userHstry.getMyLatlng().latitude, userHstry.getMyLatlng().longitude)); // map.clear();
                mOpt.title("Address : " + userHstry.getAddress()).snippet("Date : " + userHstry.getDate() + " , Time : " + userHstry.getTime());
                map.addMarker(mOpt);
于 2013-02-16T10:13:49.637 に答える