对mapview添加OnMapClickListener事件监听,监听中有两个方法,public void onMapClick(LatLng point){ }获取到的是空白地点的坐标; public boolean onMapPoiClick(MapPoi poi){ }获取到的是标记的建筑名称。具体代码如下:
mMapView = (MapView) findViewById(RidbmapView);
mBaiduMap = mMapViewgetMap();
mBaiduMapsetOnMapClickListener(new OnMapClickListener() {
/
地图单击事件回调函数
@param point 点击的地理坐标
/
public void onMapClick(LatLng point){
myLatitude = pointlatitude;
myLongitude = pointlongitude;
}
/
地图内 Poi 单击事件回调函数
@param poi 点击的 poi 信息
/
@Override
public boolean onMapPoiClick(MapPoi arg0) {
arg0getName(); //名称
arg0getPosition(); //坐标
return false;
}
});
首先,Cesium 中的坐标可分为两种情况:二维和三维,三维又有地形和模型之分;
1、二维坐标,获取椭球体表面的经纬度坐标:
var handler = new CesiumScreenSpaceEventHandler(scenecanvas);
handlersetInputAction(function(evt) {
var cartesian=viewercamerapickEllipsoid(evtposition,viewersceneglobeellipsoid);
var cartographic=CesiumCartographicfromCartesian(cartesian);
var lng=CesiumMathtoDegrees(cartographiclongitude);//经度值
var lat=CesiumMathtoDegrees(cartographiclatitude);//纬度值
var mapPosition={x:lng,y:lat,z:cartographicheight};//cartographicheight的值始终为零。
}, CesiumScreenSpaceEventTypeLEFT_CLICK);
2、三维坐标,获取地形表面的经纬度高程坐标:
方法一
var handler = new CesiumScreenSpaceEventHandler(scenecanvas);
handlersetInputAction(function(evt) {
var ray=viewercameragetPickRay(evtposition);
var cartesian=viewersceneglobepick(ray,viewerscene);
var cartographic=CesiumCartographicfromCartesian(cartesian);
var lng=CesiumMathtoDegrees(cartographiclongitude);//经度值
var lat=CesiumMathtoDegrees(cartographiclatitude);//纬度值
var mapPosition={x:lng,y:lat,z:cartographicheight};//cartographicheight的值为地形高度。
}, CesiumScreenSpaceEventTypeLEFT_CLICK);
方法二
var handler = new CesiumScreenSpaceEventHandler(scenecanvas);
handlersetInputAction(function(evt) {
var ray=viewercameragetPickRay(evtposition);
var cartesian=viewersceneglobepick(ray,viewerscene);
var cartographic=CesiumCartographicfromCartesian(cartesian);
var lng=CesiumMathtoDegrees(cartographiclongitude);//经度值
var lat=CesiumMathtoDegrees(cartographiclatitude);//纬度值
//height结果与cartographicheight相差无几,注意:cartographicheight可以为0,也就是说,可以根据经纬度计算出高程。
var height=viewersceneglobegetHeight(cartographic);
var mapPosition={x:lng,y:lat,z:heightheight};//height的值为地形高度。
}, CesiumScreenSpaceEventTypeLEFT_CLICK);
3、三维坐标,获取模型表面的经纬度高程坐标(此方法借鉴于官方示例):
var handler = new CesiumScreenSpaceEventHandler(scenecanvas);
handlersetInputAction(function(evt) {
var scene = viewerscene;
if (scenemode !== CesiumSceneModeMORPHING) {
var pickedObject = scenepick(evtposition);
if (scenepickPositionSupported && Cesiumdefined(pickedObject) && pickedObjectnode) {
var cartesian = viewerscenepickPosition(evtposition);
if (Cesiumdefined(cartesian)) {
var cartographic = CesiumCartographicfromCartesian(cartesian);
var lng = CesiumMathtoDegrees(cartographiclongitude);
var lat = CesiumMathtoDegrees(cartographiclatitude);
var height = cartographicheight;//模型高度
mapPosition={x:lng,y:lat,z:height}
}
}
}
}, CesiumScreenSpaceEventTypeLEFT_CLICK);
/
点中底图空白处会回调此接口
@param mapview 地图View
@param coordinate 空白处坐标点的经纬度
/
- (void)mapView:(BMKMapView )mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate
{
NSLog(@"onClickedMapBlank-latitude==%f,longitude==%f",coordinatelatitude,coordinatelongitude);
NSString showmeg = [NSString stringWithFormat:@"您点击了地图空白处(blank click)\r\n当前经度:%f,当前纬度:%f,\r\nZoomLevel=%d;RotateAngle=%d;OverlookAngle=%d", coordinatelongitude,coordinatelatitude,
(int)_mapViewzoomLevel,_mapViewrotation,_mapViewoverlooking];
_showMsgLabeltext = showmeg;
}
这段代码是能获取空白处的坐标。
然后获取坐标后
//添加标注
- (void)addPointAnnotation
{
pointAnnotation = [[BMKPointAnnotation alloc]init];
CLLocationCoordinate2D coor(使用上面获取的);
coorlatitude = 上面获取的;
coorlongitude = 上面获取的;
pointAnnotationcoordinate = coor;
pointAnnotationtitle = @"test";
pointAnnotationsubtitle = @"此Annotation可拖拽!";
[_mapView addAnnotation:pointAnnotation];
[pointAnnotation release];
}
这段代码是实现添加标注的(有几个委托方法是对标注进行 *** 作的,你可以在里面进行相应 *** 作)
以上就是关于百度地图开发中怎么实现点击地图中的字或建筑获取到位置,如图全部的内容,包括:百度地图开发中怎么实现点击地图中的字或建筑获取到位置,如图、cesium获取点击点的经纬度、iOS百度地图(非Android),点击地图,获取点击位置的坐标并添加上标注等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)