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,我已经创建了一个android应用程序来显示地图。但不幸的是,所有的标记显示的位置都比它的实际位置稍低。我验证了经度和纬度,它们是当前的经度和纬度 我试过了 marker.setBounds(0, 0, 0 + marker.getIntrinsicWidth(), 0 + marker.getIntrinsicHeight()); 这是我的代码 while (itr.hasNext()) { Business business

我已经创建了一个android应用程序来显示地图。但不幸的是,所有的标记显示的位置都比它的实际位置稍低。我验证了经度和纬度,它们是当前的经度和纬度

我试过了

marker.setBounds(0, 0, 0 + marker.getIntrinsicWidth(), 0 + marker.getIntrinsicHeight()); 
这是我的代码

                 while (itr.hasNext()) {


            Business business = itr.next();

            point = new GeoPoint((int)(business.getLatitude() * 1E6),
                    (int)(business.getLongitude() * 1E6));



            List<Overlay> mapOverlays = mMapView.getOverlays();
            LinearLayout markerLayout = (LinearLayout)getLayoutInflater().inflate(
                    R.layout.map_loc_bubble, null);
            CustomItem overlayItem = new CustomItem(point, business, markerLayout,
                    getApplicationContext());

            CustomOverlay itemizedOverlay = new CustomOverlay(overlayItem.getDefaultMarker(),this);
            itemizedOverlay.addOverlay(overlayItem);

            mapOverlays.add(itemizedOverlay);

            mMapView.invalidate();

    }

    if (centerPoint != null) {
        mMapView.getController().setCenter(centerPoint);
        mMapView.getController().animateTo(centerPoint);
    }
}
while(itr.hasNext()){
Business=itr.next();
点=新的地质点((int)(business.getLatitude()*1E6),
(int)(business.getLongitude()*1E6));
List mapOverlays=mMapView.getOverlays();
LinearLayout markerLayout=(LinearLayout)getLayoutInflater()。充气(
R.layout.map\u loc\u bubble,空);
CustomItem overlayItem=新CustomItem(点、业务、markerLayout、,
getApplicationContext());
CustomOverlay ItemizeOverlay=新的CustomOverlay(overlayItem.getDefaultMarker(),this);
itemizedOverlay.addOverlay(overlayItem);
添加(itemizedOverlay);
mMapView.invalidate();
}
如果(中心点!=null){
mMapView.getController().setCenter(中心点);
mMapView.getController().animateTo(中心点);
}
}
但是没有运气

这是我的课程

 class CustomOverlay extends ItemizedOverlay<CustomItem> {


    public CustomOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
    }


    public CustomOverlay(Drawable defaultMarker, Context context)
    {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }

    @Override
    protected CustomItem createItem(int i) {
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        return mOverlays.size();
    }

    public void addOverlay(CustomItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    public void addOverlay(CustomItem overlay, Drawable marker) {


        marker.setBounds(0, 0, 0 + marker.getIntrinsicWidth(), 0 + marker.getIntrinsicHeight()); 
        overlay.setMarker(marker);
            addOverlay(overlay);
    }

    @Override
    public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) {
        super.draw(canvas, mapView, false);
    }

    }

}
class CustomOverlay扩展了ItemizeOverlay{
公共CustomOverlay(可绘制的defaultMarker){
super(boundCenterBottom(defaultMarker));
}
公共CustomOverlay(可绘制的defaultMarker,上下文)
{
super(boundCenterBottom(defaultMarker));
mContext=上下文;
}
@凌驾
受保护的CustomItem createItem(int i){
返回mOverlays.get(i);
}
@凌驾
公共整数大小(){
返回mOverlays.size();
}
公共无效添加覆盖(CustomItem覆盖){
添加(覆盖);
填充();
}
公共无效添加覆盖(自定义项覆盖,可绘制标记){
setBounds(0,0,0+marker.getIntrinsicWidth(),0+marker.getIntrinsicHeight());
覆盖。设置标记(标记);
叠加(叠加);
}
@凌驾
公共空白绘制(android.graphics.Canvas画布、MapView MapView、布尔阴影){
super.draw(画布、地图视图、假);
}
}
}

使用投影将覆盖映射到MapView: 像下面这样使用它

在覆盖中,将以下代码添加到绘制方法:

Projection projection = mapView.getProjection();


//GeoPoint class is your latitude, longitude.
GeoPoint point = //TODO assign long, lat

//This is your point on the map
Point myPoint = new Point();

projection.toPixels (point, myPoint);
然后你需要某种坐标系统来锚定。您可以使用:

// Mark some points through which to draw your circle, or you can do something else
 //This just draws circles of radius 5
RectF myShape = new RectF (myPoint.x-5, myPoint.y-5, myPoint.x+5, myPoint.y+5);

canvas.drawOval (mShape, paint);

使用投影将覆盖图映射到地图视图我可以知道如何使用投影吗?在此之后,在哪里使用“myPoint”?我应该在哪里执行上述代码?它在Draw方法中吗?//TODO assign long,lat-u表示我的FOR循环将进入Draw方法中?我有100个点需要显示为标记。