搜索街道并在谷歌地图上显示标记。标记飘过

时间:2012-11-29 10:42:29

标签: android google-maps

我将教程编码为在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();
            }
        }
    });

搜索栏是一个editText,followMe不相关。 我想让标记贴在我缩小时所寻找的地方。

图片: http://i.imgur.com/iavqa.jpg http://i.imgur.com/dFqIs.jpg

1 个答案:

答案 0 :(得分:0)

不知道我是否正确理解您的代码......但作为一般答案:在多个图块上展开位置时,您无法直接使用纬度和经度值。那是因为地球是一个球体(某种程度上),当你使用线性地图图块并使用相同的线性平移值放大/缩小时,你会得到一些不准确的信息。

有几种算法结合了这种球形失真,我个人在http://libwlocate.git.sourceforge.net/git/gitweb.cgi?p=libwlocate/libwlocate;a=tree;f=master/android/LocDemo/src/com/vwp/libwlocate/map;h=3afbc1b212a6824c557cda01ee38f3b0ee6d51ef;hb=HEAD

中的GeoUtils类中“窃取”了一些有用的代码