0

Google マップで住所を検索するチュートリアルをコーディングしました。残念ながら、ズームアウトしているときにマーカーがその場所にくっつきません。どうやらマーカーがずれているようです。

class MapOverlay extends com.google.android.maps.Overlay {

    public boolean draw(Canvas canvas, MapView mapView, 
    boolean shadow, long when) {
        super.draw(canvas, mapView, shadow);                   

        // translate the GeoPoint to screen pixels
        Point screenPts = new Point();
        mapView.getProjection().toPixels(p, screenPts);

        // add the red marker
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker_red);            
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y-32, null);         
        return true;
    }
} 

GeoPoint を画面のピクセルに変換した結果だと思います。検索ボタンの onClick イベントのコードは次のとおりです。

    this.searchButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            followMe = false;

            String temp = searchBar.getText().toString();
            List<Address> addresses = null;
            try {
                addresses = geoCoder.getFromLocationName(temp,5);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (addresses != null) {
                p = new GeoPoint(
                        (int) (addresses.get(0).getLatitude() * 1E6),
                        (int) (addresses.get(0).getLongitude() * 1E6));

                mapController.animateTo(p);
                mapController.setZoom(19);

                MapOverlay mapOverlay = new MapOverlay();
                mapOverlays = mapView.getOverlays();
                mapOverlays.add(mapOverlay);

                mapView.postInvalidate();
                //searchBar.setText("");
            } else {
                AlertDialog.Builder adb = new AlertDialog.Builder(
                        GMapsSubActivity.this);
                adb.setTitle("Google Map");
                adb.setMessage("Please Provide the Proper Place");
                adb.setPositiveButton("Close", null);
                adb.show();
            }
        }
    });

searchbar は editText であり、followMe は関係ありません。ズームアウトしているときに、探していた場所にマーカーを貼り付けたい。

画像: http://i.imgur.com/iavqa.jpg http://i.imgur.com/dFqIs.jpg

4

1 に答える 1

0

あなたのコードを正しく理解しているかどうかはわかりません...しかし、一般的な答えとして:位置を複数のタイルに広げる場合、緯度と経度の値を直接使用することはできません。これは、地球が (どういうわけか) 球体であり、線形マップ タイルを使用し、同じ線形移動値でズームイン/ズームアウトすると、不正確になるためです。

この球面歪みを組み込んだアルゴリズムがいくつかあります。私は個人的にhttp://libwlocate.git.sourceforge.net/git/gitweb.cgi?p=libwlocate/libwlocate;aから GeoUtils クラスの有用なコードを「盗みました」。=tree;f=master/android/LocDemo/src/com/vwp/libwlocate/map;h=3afbc1b212a6824c557cda01ee38f3b0ee6d51ef;hb=HEAD

于 2012-11-29T11:47:14.957 に答える