Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 搜索街道并在谷歌地图上显示标记。漂走的标记_Android_Google Maps - Fatal编程技术网

Android 搜索街道并在谷歌地图上显示标记。漂走的标记

Android 搜索街道并在谷歌地图上显示标记。漂走的标记,android,google-maps,Android,Google Maps,我编写了教程以在谷歌地图中搜索地址。 不幸的是,当我行尸走肉的时候,记号笔没有粘在那个地方。 似乎那个标记正在漂移 class MapOverlay extends com.google.android.maps.Overlay { public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow

我编写了教程以在谷歌地图中搜索地址。 不幸的是,当我行尸走肉的时候,记号笔没有粘在那个地方。 似乎那个标记正在漂移

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;
    }
} 
我认为它来自于将地理点转换成屏幕像素 以下是搜索按钮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();
            }
        }
    });
this.searchButton.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
followMe=假;
String temp=searchBar.getText().toString();
列表

http://i.imgur.com/dFqIs.jpg我不知道我是否正确理解了你的代码……但作为一个一般性的回答:当你把一个位置分布在几个瓷砖上时,你不能直接使用纬度和经度值。这是因为地球(不知何故)是一个球体当使用线性贴图分幅并使用相同的线性平移值放大/缩小时,会出现一些不准确的情况


有几种算法结合了这种球形失真,我个人认为是“偷来的”来自

的GeoUtils类中的一些有用的代码发生这种情况时internet是打开还是关闭的?您确认了地理点坐标没有更改吗?不,很快就会更改!添加了相同的问题图片。解决了它!我编写了canvas.drawBitmap(bmp,screenPts.x-(bmp.getWidth()/2),screenPts.y-bmp.getHeight(),new Paint());而不是canvas.drawBitmap(bmp,screenPts.x,screenPts.y-32,null);是的,Projection类就是为了解决这个古老的“幻数”问题。它知道平铺上必须有什么像素/地理坐标。