android地图旋转监听,android百度地图:地图缩放、旋转、俯视角度以及屏幕像素与经纬度的转换Projection...

本文介绍了MapControlDemo.java中如何通过MapController实现地图的缩放、旋转和俯视功能,包括处理用户输入的缩放级别、旋转角度和俯角,并演示了屏幕截图回调的使用。讲解了Projection对象在屏幕坐标与地理坐标转换中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapControlDemo.java

通过MapController设置缩放、旋转、俯视角度private void perfomZoom(){

EditText t = (EditText) findViewById(R.id.zoomlevel);

try{

float zoomLevel = Float.parseFloat(t.getText().toString());

mMapController.setZoom(zoomLevel);

}catch(NumberFormatException e){

Toast.makeText(this,

"请输入正确的缩放级别", Toast.LENGTH_SHORT)

.show();

}

}

/**

* 处理旋转

* 旋转角范围: -180 ~ 180 , 单位:度 逆时针旋转

*/

private void perfomRotate(){

EditText t = (EditText) findViewById(R.id.rotateangle);

try{

int rotateAngle = Integer.parseInt(t.getText().toString());

mMapController.setRotation(rotateAngle);

}catch(NumberFormatException e){

Toast.makeText(this,

"请输入正确的旋转角度", Toast.LENGTH_SHORT)

.show();

}

}

/**

* 处理俯视

* 俯角范围: -45 ~ 0 , 单位: 度

*/

private void perfomOverlook(){

EditText t = (EditText) findViewById(R.id.overlookangle);

try{

int overlookAngle = Integer.parseInt(t.getText().toString());

mMapController.setOverlooking(overlookAngle);

}catch(NumberFormatException e){

Toast.makeText(this,

"请输入正确的俯角", Toast.LENGTH_SHORT)

.show();

}

}

调用mapview.getCurrentMap()截图@Override

public void onGetCurrentMap(Bitmap b) {

/**

* 当调用过 mMapView.getCurrentMap()后,此回调会被触发

* 可在此保存截图至存储设备

*/

File file = new File("/mnt/sdcard/test.png");

FileOutputStream out;

try{

out = new FileOutputStream(file);

if(b.compress(Bitmap.CompressFormat.PNG, 70, out))

{

out.flush();

out.close();

}

Toast.makeText(MapControlDemo.this,

"屏幕截图成功,图片存在: "+file.toString(),

Toast.LENGTH_SHORT)

.show();

}

catch (FileNotFoundException e)

{

e.printStackTrace();

}

catch (IOException e)

{

e.printStackTrace();

}

}前面说过,只要调用mMapView.getCurrentMap() 就可触发MKMapViewListener的上述方法。

监听手势所在的屏幕坐标转换为经纬度listener = new OnTouchListener(){

@Override

public boolean onTouch(View arg0, MotionEvent arg1) {

/**

* Projection 用于将屏幕坐标转换为地理位置坐标

*/

int x = (int)arg1.getX();

int y = (int)arg1.getY();

currentPt = mMapView.getProjection().fromPixels(x , y);

updateMapState();

/**

* 传递点击事件给MapView,sdk会自己处理缩放,平移等手势操作

*/

return false;

}

};

mMapView.setOnTouchListener(listener);MapView调用getProjection返回的自然是Projection对象,Projection有3个方法:

1 GeoPoint fromPixels(int x, int y) 根据屏幕像素坐标返回GeoPoint对象。

2 Point toPixels(GeoPoint in, Point out)把给定的GeoPoint变换到当前MapView的屏幕像素坐标,Point out 是一个预先输入的对象,如         果为空,将返回一个新分配的像素点。(其实我对out的理解有些模糊,api里说的很不明确。不知道它的作用明确是什么,它与in的关系是什         么,与返回的Point对象有什么关系,在使用这个方法的时候是不是out的值默认为null)。根据我自己的代码的测试,out的值与输出数据并         无直接关系。可以在上述代码中添加以下代码验证我的结论:

Point point1 = new Point(200,900);

Point point= mMapView.getProjection().toPixels(p, point1);

Point point= mMapView.getProjection().toPixels(p, null);

System.out.println("point:"+point.x+","+point.y);

3 float metersToEquatorPixels(float meters)。该方法把以米为计量单位的距离(沿赤道)在当前缩放水平下转换到一个以像素(水平)为计量单位的距离。 在默认的Mercator投影变换下,对于给定的距离,当远离赤道时,变换后确切的像素数量会增加。 参数: meters - 以米为单位的距离 返回: 相对给定距离的像素数量。在当前的缩放水平,如果沿赤道测量,返回值可能是个近似值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值