精华内容
下载资源
问答
  • iOS地图开发-基本使用

    千次阅读 2016-04-17 13:15:03
    地图基本使用

    地图的基本使用

    1.设置地图显示类型

      /**
        MKMapTypeStandard = 0,  // 标准
        MKMapTypeSatellite,     // 卫星
        MKMapTypeHybrid,        // 混合(标准+卫星)
        MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体卫星
        MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体混合
       */
       self.customMapView.mapType = MKMapTypeStandard;

    2.设置地图的其他属性(操作项)

    注意:设置对应属性时,注意该属性是从哪个系统版本开始引入的,做好不同系统版本的适配

    // 是否可以缩放
    self.customMapView.zoomEnabled = NO;
    // 是否可以滚动
    self.customMapView.scrollEnabled = NO;
    // 是否可以旋转
    self.customMapView.rotateEnabled = NO;
    // 是否显示3D
    self.customMapView.pitchEnabled = NO;

    3.设置地图其他属性

    // 是否显示指南针
    self.customMapView.showsCompass = YES;
    // 是否显示比例尺
    self.customMapView.showsScale = YES;
    // 是否显示交通
    self.customMapView.showsTraffic = YES;
    // 是否显示建筑物
    self.customMapView.showsBuildings = YES;

    4.设置地图的用户追踪模式

    1.创建CLLocationManager对象请求授权

    -(CLLocationManager *)locationM
      {
          if (!_locationM) {
              _locationM = [[CLLocationManager alloc] init];
              if ([_locationM respondsToSelector:@selector(requestAlwaysAuthorization)]) {
                  [_locationM requestAlwaysAuthorization];
              }
          }
          return _locationM;
      }

    2.设置地图的用户追踪模式

      /**
        MKUserTrackingModeNone = 0, // 不跟随
        MKUserTrackingModeFollow, // 跟随用户位置
        MKUserTrackingModeFollowWithHeading, // 跟随用户位置,并跟随用户方向
      */
      [self locationM];
      self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;

    地图中级使用

    1.查看当前用户位置信息

    1. 设置地图代理,并实现代理方法,在代理方法中获取用户当前位置(注意iOS8.0之后要请求授权)

    2. 将地图显示中心调整为用户当前所在位置(iOS之前,地图不会自动移动到用户所在位置)

    3. 调整当前地图显示的区域(可使用对应代理方法查看当前地图跨度然后调整到合适的跨度即可)

    -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
      {
          /**
           MKUserLocation : 被称作“大头针模型”,其实喊什么都行,本质就是一个数据模型,只不过此模型遵循了大头针要遵循的协议(MKAnnotation)
           location:  用户当前所在位置信息(CLLocation对象)
           title:     大头针标注要显示的标题(NSString对象)
           subtitle:  大头针标注要显示的子标题(NSString对象)
           */
          // 根据用户当前位置的经纬度,设置地图显示中心
          /**
              存在弊端:地图显示比例过大,无法调整
              解决方案:直接使用对应的调整地图“显示区域”的API
           */
      //    [mapView setCenterCoordinate:userLocation.coordinate animated:YES];
          /**
            MKCoordinateSpan 跨度解释:
            latitudeDelta:纬度跨度,因为南北纬各90度,所以此值的范围是(0---180);此值表示,整个地图视图宽度,显示多大跨度
            longitudeDelta:经度跨度,因为东西经各180度,所以此值范围是(0---360):此值表示,整个地图视图高度,显示多大跨度
           注意:地图视图显示,不会更改地图的比例,会以地图视图高度或宽度较小的那个为基准,按比例调整
           */
      //    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
      //    MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, span);
      //    [mapView setRegion:region animated:YES];
      }
    
      // 当地图区域(跨度)改变时调用
      -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
      {
          NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);
      }

    大头针基本使用

    在地图上操作大头针,实际上就是操作大头针数据模型
    添加大头针就是添加大头针数据模型
    删除大头针就是删除大头针模型

    实现步骤

    添加一个/多个大头针

    1. 自定义大头针模型(需要遵循MKAnnotation协议)
      #import <MapKit/MapKit.h>
    
    @interface XMGAnnotation : NSObject <MKAnnotation>
    
    @property (nonatomic, assign) CLLocationCoordinate2D coordinate;
    @property (nonatomic, copy, nullable) NSString *title;
    @property (nonatomic, copy, nullable) NSString *subtitle;
    
    @end
    1. 创建自定义大头针模型,并添加到地图上
      -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
      // 如果我们仅仅添加大头针数据模型,地图上会自动添加系统默认的大头针视图
      CYXAnnotation *annotation = [[CYXAnnotation alloc] init];
    //    annotation.coordinate = self.mapView.centerCoordinate;
      // 1. 获取当前点的位置
      UITouch *touch = [touches anyObject];
      CGPoint point = [touch locationInView:self.mapView];
      // 把点转换成对应的经纬度
      CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
      // TODO:使用反地理编码,获取对应大头针的所在的位置信息,通过标注显示出来
      annotation.coordinate = coordinate;
      annotation.title = @"荔湾区";
      annotation.subtitle = @"和业广场";
    
      // 添加单个大头针
      [self.mapView addAnnotation:annotation];
      // 添加多个大头针
    //    [self.mapView addAnnotations:@[]];
    }

    移除1个/多个大头针

      [self.mapView removeAnnotations:self.mapView.annotations];

    自定义大头针

    添加大头针数据时,其实地图会调用代理方法查找对应的大头针视图,如果没有找到,就会使用系统默认的大头针视图

    1. 模拟系统大头针实现方案,并对大头针进行部分自定义
      (弹出标注, 修改大头针颜色, 设置大头针从天而降, 设置大头针可以被拖拽)
      - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
      {
          if ([annotation isKindOfClass:[MKUserLocation class]]) {
              return nil;
          }
          // 如果此方法返回nil, 就会使用系统自带的大头针视图
          // 模拟下,返回nil,系统的解决方案
          static NSString *pinId = @"pinID";
          MKPinAnnotationView *pinView = ( MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinId];
          if (pinView == nil) {
              pinView  = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinId];
          }
          pinView.annotation = annotation;
          // 是否显示标注
          pinView.canShowCallout = YES;
          // 设置大头针颜色
          pinView.pinColor = MKPinAnnotationColorPurple;
          // 设置大头针是否有下落动画
          pinView.animatesDrop = YES;
          return pinView;
      }
    1. 自定义大头针
      - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
      {
          if ([annotation isKindOfClass:[MKUserLocation class]]) {
              return nil;
          }
          /**  自定义大头针-------*/
          static NSString *pinId = @"pinID";
          MKAnnotationView *annoView = [mapView dequeueReusableAnnotationViewWithIdentifier:pinId];
          if (annoView == nil) {
              annoView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinId];
          }
          annoView.annotation = annotation;
          annoView.image = [UIImage imageNamed:@"category_5"];
          annoView.canShowCallout = YES;
          UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"huba.jpeg"]];
          imageView.bounds = CGRectMake(0, 0, 44, 44);
          annoView.leftCalloutAccessoryView = imageView;
          imageView.userInteractionEnabled  = YES;
          UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"eason.jpg"]];
          imageView2.bounds = CGRectMake(0, 0, 44, 44);
          annoView.rightCalloutAccessoryView = imageView2;
          annoView.detailCalloutAccessoryView = [UISwitch new];
          annoView.draggable = YES;
          return annoView;
      }

    大头针图标,大头针标注,左侧视图,右侧视图,详情视图,等;
    选中和取消选中大头针时的代理方法

      // 点击标注
      - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
      {
          NSLog(@"点击标注");
      }
      // 选中大头针
      - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
      {
          NSLog(@"选中大头针");
      }
      // 取消选中大头针
      -(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
      {
          NSLog(@"取消选中大头针");
      }

    利用系统App导航

    // 根据两个地标对象进行调用系统导航
    - (void)beginNavWithBeginPlacemark:(CLPlacemark *)beginPlacemark andEndPlacemark:(CLPlacemark *)endPlacemark
    {
    
        // 根据 CLPlacemark 地标对象创建 MKPlacemark 地标对象
        MKPlacemark *itemP1 = [[MKPlacemark alloc] initWithPlacemark:beginPlacemark];
        MKMapItem *item1 = [[MKMapItem alloc] initWithPlacemark:itemP1];
    
    
        MKPlacemark *itemP2 = [[MKPlacemark alloc] initWithPlacemark:endPlacemark];
        MKMapItem *item2 = [[MKMapItem alloc] initWithPlacemark:itemP2];
    
        NSDictionary *launchDic = @{
                                    // 设置导航模式参数
                                    MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,
                                    // 设置地图类型
                                    MKLaunchOptionsMapTypeKey : @(MKMapTypeHybridFlyover),
                                    // 设置是否显示交通
                                    MKLaunchOptionsShowsTrafficKey : @(YES),
    
                                    };
        // 根据 MKMapItem 数组 和 启动参数字典 来调用系统地图进行导航
        [MKMapItem openMapsWithItems:@[item1, item2] launchOptions:launchDic];
    
    }

    数字版街景地图

        /**
            补充1:类似于地图街景,增强用户体验
         */
        CLLocationCoordinate2D center = CLLocationCoordinate2DMake(23.132931, 113.375924);
        MKMapCamera *camera = [MKMapCamera cameraLookingAtCenterCoordinate:center fromEyeCoordinate:CLLocationCoordinate2DMake(center.latitude + 0.001, center.longitude + 0.001) eyeAltitude:1];
        self.mapView.camera = camera;

    地图快照截图

        /**
            补充2:地图截图
         */
        // 截图附加选项
        MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
        // 设置截图区域(在地图上的区域,作用在地图)
        options.region = self.mapView.region;
    //    options.mapRect = self.mapView.visibleMapRect;
    
        // 设置截图后的图片大小(作用在输出图像)
        options.size = self.mapView.frame.size;
        // 设置截图后的图片比例(默认是屏幕比例, 作用在输出图像)
        options.scale = [[UIScreen mainScreen] scale];
    
        MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
        [snapshotter startWithCompletionHandler:^(MKMapSnapshot * _Nullable snapshot, NSError * _Nullable error) {
            if (error) {
                NSLog(@"截图错误:%@",error.localizedDescription);
            }else
            {
                // 设置屏幕上图片显示
                self.snapshootImageView.image = snapshot.image;
                // 将图片保存到指定路径(此处是桌面路径,需要根据个人电脑不同进行修改)
                NSData *data = UIImagePNGRepresentation(snapshot.image);
                [data writeToFile:@"/Users/chenyanxiang/Desktop/snap.png" atomically:YES];
            }
        }];

    获取导航路线信息

    // 根据两个地标,向苹果服务器请求对应的行走路线信息
    - (void)directionsWithBeginPlackmark:(CLPlacemark *)beginP andEndPlacemark:(CLPlacemark *)endP
    {
    
        // 创建请求
        MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
    
        // 设置开始地标
        MKPlacemark *beginMP = [[MKPlacemark alloc] initWithPlacemark:beginP];
        request.source = [[MKMapItem alloc] initWithPlacemark:beginMP];
    
        // 设置结束地标
        MKPlacemark *endMP = [[MKPlacemark alloc] initWithPlacemark:endP];
        request.destination = [[MKMapItem alloc] initWithPlacemark:endMP];
    
    
        // 根据请求,获取实际路线信息
        MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
        [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) {
    
            /**
             MKDirectionsResponse对象解析
                source :开始位置
                destination :结束位置
                routes : 路线信息 (MKRoute对象)
    
             MKRoute对象解析
                name : 路的名称
                advisoryNotices : 注意警告信息
                distance : 路线长度(实际物理距离,单位是m)
                polyline : 路线对应的在地图上的几何线路(由很多点组成,可绘制在地图上)
                steps : 多个行走步骤组成的数组(例如“前方路口左转”,“保持直行”等等, MKRouteStep 对象)
    
            MKRouteStep对象解析
                instructions : 步骤说明(例如“前方路口左转”,“保持直行”等等)
                transportType : 通过方式(驾车,步行等)
                polyline : 路线对应的在地图上的几何线路(由很多点组成,可绘制在地图上)
    
            注意:
                MKRoute是一整条长路;MKRouteStep是这条长路中的每一截;
    
             */
            [response.routes enumerateObjectsUsingBlock:^(MKRoute * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                NSLog(@"%@--", obj.name);
                [obj.steps enumerateObjectsUsingBlock:^(MKRouteStep * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    NSLog(@"%@", obj.instructions);
                }];
            }];
    
        }];
    
    }

    绘制导航路线

    路线也是一个覆盖层
    理论指导:在地图上操作覆盖层,其实就是操作覆盖层的数据模型
    添加覆盖层:在地图上添加覆盖层数据模型
    删除覆盖层:在地图上移除覆盖层数据模型

    1.创建路线覆盖层模型,并添加到地图上

      // 绘制线路
      - (void)drawMapLine:(id <MKOverlay>)overlay
      {
          /**
           注意:这里不像添加大头针那样,只要我们添加了大头针模型,默认就会在地图上添加系统的大头针视图
           添加覆盖层,需要我们实现对应的代理方法,在代理方法中返回对应的覆盖层
           */
          [self.mapView addOverlay:overlay];
    
          /** 补充测试:添加一个圆形覆盖层 */
      //    MKCircle *circle = [MKCircle circleWithCenterCoordinate:self.mapView.centerCoordinate radius:1000000];
      //    [self.mapView addOverlay:circle];
      }

    2.利用地图的代理方法,返回对应的图层渲染

      -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
          // 创建折线渲染对象
          if ([overlay isKindOfClass:[MKPolyline class]]) {
               MKPolylineRenderer *lineRenderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
              // 设置线宽
              lineRenderer.lineWidth = 6;
              // 设置线颜色
              lineRenderer.strokeColor = [UIColor redColor];
              return lineRenderer;
          }
          // 创建圆形区域渲染对象
          //    if ([overlay isKindOfClass:[MKCircle class]]) {
          //        MKCircleRenderer *circleRender = [[MKCircleRenderer alloc] initWithOverlay:overlay];
          //        circleRender.fillColor = [UIColor cyanColor];
          //        circleRender.alpha = 0.6;
          //        return circleRender;
          //    }
          return nil;
    
      }
    展开全文
  • HTML5 / JS实现百度地图基本常用功能

    千次阅读 2016-11-21 20:09:41
    很多网站都会使用到地图功能,提供地图接口的第三方也有不少,我这里来聊一下百度地图提供的API及百度地图基本功能的实现

    很多网站都会使用到地图功能,提供地图接口的第三方也有不少,我这里来聊一下百度地图提供的API及百度地图基本功能的实现:
    首先需要在百度地图开放平台申请一个属于自己的密钥,网址:http://lbsyun.baidu.com/apiconsole/key

    基本实现

    1.引入javascript文件:

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的密钥"></script>

    2.定义一个用于显示地图的容器元素:

    <div id="map"></div>

    3.样式:

    body, html, #map {width: 100%;height: 100%;overflow: hidden;margin:0;}
    #map {width: 500px;height: 400px;margin:0 auto;}

    4.开始写js脚本,重头戏开始了:

    var map=new BMap.Map("map");    //创建百度地图对象
    map.centerAndZoom("北京",13); //初始化百度地图

    此时最最基本的地图功能就可以实现了,下面说一些类参考和更复杂功能的实现。

    核心类 - Map类

    构造器:Map(页面容器元素ID)
    作用:创建地图实例对象
    用法:var map=new BMap.Map("map");

    控件类 - ScaleControl类

    构造器:ScaleControl({key:value})
    作用:创建一个比例尺控件(显示固定距离表示几公里)
    用法:var scale = new BMap.ScaleControl({anchor:BMAP_ANCHOR_TOP_LEFT});

    控件类 - NavigationControl类

    构造器:NavigationControl({key:value})
    作用:创建一个地图的平移缩放控件(点击可缩放或平移地图)
    用法:var nav = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT});

    控件类 - MapTypeControl类

    构造器:MapTypeControl({key:value})
    作用:创建一个切换地图类型的控件(切换 卫星/平面/三维 视图)
    用法:var type = new BMap.MapTypeControl({anchor:BMAP_ANCHOR_TOP_LEFT});

    以上三个控件类的参数相似,都为可选参数,不传参默认在左上角显示
    选项:anchor - 设置当前控件显示的位置
    值:
    BMAP_ANCHOR_TOP_LEFT - 左上角
    BMAP_ANCHOR_BOTTOM_LEFT - 左下角
    BMAP_ANCHOR_TOP_RIGHT - 右上角
    BMAP_ANCHOR_BOTTOM_RIGHT - 右下角

    控件类 - OverviewMapControl类

    构造器:OverviewMapControl({key:value})
    作用:创建一个缩略地图控件(在右下角显示一个小缩略地图)
    用法:var overview = new BMap.OverviewMapControl({isOpen:true});(设置为默认显示)

    基础类 - Point类

    构造器:Point(经度,经度)
    作用:以指定的经度和纬度创建一个地理点坐标
    用法:var point = new BMap.Point(116.403, 39.915)

    服务类 - Geocoder类

    构造器:Geocoder()
    作用:它的getPoint()方法可以获取用户的地址解析
    getPoint()方法:getPoint(‘地址’,function(point){…},’城市’);
    如果地址解析成功的话point形参指经纬地理坐标,否则为null
    用法:

    var geocoder=new BMap.Geocoder();
    geocoder.getPoint("地址:北京天安门",function(point){...},"北京")

    覆盖物类 - Marker类

    构造器:Marker(point)
    作用:创建地图上一个图像标注对象(突出显示目的点)
    方法:marker.setAnimation(BMAP_ANIMATION_BOUNCE); - 作用:为图像标注添加动画效果
    用法:

    var marker=new BMap.Marker(point);
    marker.setAnimation(BMAP_ANIMATION_BOUNCE);

    覆盖物类 - InfoWindow类

    构造器:InfoWindow(‘地址信息内容’,’宽高等详细内容’)
    作用:设置地图上弹出包含信息的窗口信息(点击目的位置弹出的提示信息窗口)
    用法:

    var info=new BMap.InfoWindow("地址:北京市西城区西绒线胡同",{
                width:250,
                height:60,
                title:"昌盛大厦"
            });

    常用方法:

    • centerAndZoom(point,zoom);作用 - 初始化地图中心点和显示级别(参数point为一个基础类Point类的对象或字符串。zoom为显示级别,级别越高显示的距离越短、越清晰。一般情况值范围3-19,高清地图(移动端)值范围3-18。最合适为12/13)
    • enableScrollWheelZoom();作用 - 允许鼠标滚轮滚动放大或缩小地图的显示级别
    • setCurrentCity(city); 作用 - 设置地图城市(字符串形式)

    示例:

    var map=new BMap.Map("map");
    map.centerAndZoom("北京",13);
    map.enableScrollWheelZoom();
    map.setCurrentCity("北京");

    控件方法:

    • addControl(control);作用 - 添加控件实例(参数control为一个控件类对象)
    • removeControl(control);作用 - 移除控件实例(参数control为一个控件类对象)

    示例:

    map.addControl(new BMap.ScaleControl({anchor:BMAP_ANCHOR_TOP_LEFT}));
    map.addControl(new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT}));
    map.addControl(new BMap.MapTypeControl({anchor:BMAP_ANCHOR_TOP_RIGHT}));
    map.addControl(new BMap.OverviewMapControl({isOpen:true}));
    
    var overview = new BMap.OverviewMapControl({isOpen:true});
    map.addControl(control);
    map.removeControl(control);

    效果:
    这里写图片描述

    覆盖物方法:

    • addOverlay(overlay)作用 - 将覆盖物添加到地图中(参数为覆盖物类对象)
    • removeOverlay(overlay)作用 - 从地图中移除覆盖物(参数为覆盖物类对象)
    • openInfoWindow(InfoWindow,Point)作用 - 在地图上打开信息窗口(InfoWindow设置信息窗口(覆盖物类对象),在Point位置弹出窗口。)

    示例:

    var geocoder=new BMap.Geocoder();
    geocoder.getPoint("北京市西城区西绒线胡同北京昌盛大厦",function(point){
        map.centerAndZoom(point,16);
        var marker=new BMap.Marker(point);
        map.addOverlay(marker);
        var info=new BMap.InfoWindow("地址:北京市西城区西绒线胡同",{width:250,height:60,title:"昌盛大厦"});
        marker.addEventListener("click",function(){
            map.openInfoWindow(info,point);
        });
    },"北京");

    效果:
    这里写图片描述这里写图片描述

    综合上述完整代码:

    var map=new BMap.Map("map");    //创建百度地图对象
    map.setCurrentCity("北京")        //设置地图城市
    map.enableScrollWheelZoom();    //开启 鼠标滚轮改变地图显示级别 功能
    map.enableDragging();       //开启鼠标拖拽功能
        //以下四句是地图的添加控件方法 和 控件实例
    map.addControl(new BMap.ScaleControl({anchor:BMAP_ANCHOR_TOP_LEFT}));   //添加一个比例尺控件
    map.addControl(new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT}));  //添加一个平移缩放控件
    map.addControl(new BMap.MapTypeControl({anchor:BMAP_ANCHOR_TOP_RIGHT}));    //添加一个切换地图类型的控件
    map.addControl(new BMap.OverviewMapControl({isOpen:true})); //添加一个地图缩略图控件
    //移除控件的方法是:removeControl(control)
    
    var geocoder=new BMap.Geocoder();   //Geocoder服务类,它的getPoint()方法可获取指定地理位置的经纬度坐标
    geocoder.getPoint("北京市西城区西绒线胡同北京昌盛大厦",function(point){
        //point是一个基础类Point(lng,lat),以经、纬度来表示一个地理点坐标。
        //这里地址解析成功的话point形参指经纬地理坐标,否则为Null
        map.centerAndZoom(point,16);    //设置百度地图的中心点坐标 和 显示级别
        var marker=new BMap.Marker(point);  //创建地图上一个图像标注(覆盖物、在中心点point位置)
        map.addOverlay(marker);     //覆盖物方法,将覆盖物添加到地图中
        marker.setAnimation(BMAP_ANIMATION_BOUNCE); //为图像标注添加动画效果
        var info=new BMap.InfoWindow("地址:北京市西城区西绒线胡同",{
            width:250,
            height:60,
            title:"昌盛大厦"
        }); //创建弹出信息的窗口(覆盖物类)
        marker.addEventListener("click",function(){ //点击图像标注时弹出信息窗口
            map.openInfoWindow(info,point); //在指定点(此处为point中心点)弹出信息窗口
        });
    },"北京");

    效果:
    这里写图片描述

    展开全文
  • 百度地图API使用系列3-基本地图1

    千次阅读 2014-12-29 15:09:03
    百度基本地图使用1 关于百度地图申请开发者key 可以参考前面的博客 百度地图API使用系列1-准备工作   关于搭建工程的可以参考前面的博客 百度地图API使用系列2-显示地图   这一篇博客介绍基本地图...

    百度基本地图使用1

    关于百度地图申请开发者key 可以参考前面的博客

    百度地图API使用系列1-准备工作

     

    关于搭建工程的可以参考前面的博客

    百度地图API使用系列2-显示地图

     

    这一篇博客介绍基本地图使用里面的地图类型、显示实时交通图、在地图显示一个Marker。

     

     

    这里要注意的是关于地图的操作不是有显示地图的控件直接去完成,百度为他添加了一个属性BaiduMap 可以把这个属性理解为是 地图的管理器

    我们可以通过对应 的 get 方法 获取这个属性

     

    baiduMap = baiduMapView.getMap();

    地图类型

    百度地图提供 了俩种类型的地图资源(普通矢量地图和卫星地图)

    BaiduMap.MAP_TYPE_NORMAL          普通矢量地图
    BaiduMap.MAP_TYPE_SATELLITE       卫星地图
     
    baiduMap.setMapType(MAP_TYPE);
     
    /**
     * 设置显示的地图类型
     *
     * @param currentMapType 地图类型
     */
    private void setDisplayMapType(int currentMapType) {
        switch (currentMapType) {
        case MAP_NORMAL:
            // 显示地图的类型 分为俩类 1.普通矢量地图 2.卫星地图
            baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
            break;
        case MAP_SATELLITE:
            baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
            break;
        default:
            baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
            break;
    }

     

    显示实时交通路况图

    百度地推目前 已经支持多个城市的交通路况图了

     

    baiduMap.setTrafficEnabled(boolean);
     
    /**
     * 设置显示实施交通图
     * @param isChecked 是否显示 true显示 false不显示
     */
    private void setDisplayTraffic(boolean isChecked) {
        if (isChecked) {
            // 显示 实时交通图
            baiduMap.setTrafficEnabled(true);
        } else {
            baiduMap.setTrafficEnabled(false);
        }
    }
     

    在地图上面显示一个Marker

    /**
     * 通过经纬度在地图上面显示标注物
     * @param longitude 经度
     * @param latitude 纬度
     */
    private void setLatlng(double longitude, double latitude) {
        // 构建 标注物 的 坐标 通过经纬度
        // 这个地方需要注意一下 实例化 LatLng 类的时候 在传递参数的时候 是 纬经度
        LatLng point = new LatLng(latitude, longitude);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
        // 通过 bitmap 构建 标注物的 显示 图标
        BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap);
        // 创建一个 覆盖层
        // 设置标注物的 坐标 position
        // 设置标注物的 图标 icon
        // 设置标注物的 标题 title
        // 设置标注物是否可拖拽 draggable true可以拖拽 false不可以拖拽 长按起作用 可以监听拖拽事件
        OverlayOptions options = new MarkerOptions().position(point).icon(bitmapDescriptor).title("豪景大厦").draggable(true);
    
        baiduMap.setOnMarkerDragListener(this);
    
        // 将 覆盖层 添加 带地图上面
        // 这个方法 有一个 返回值的 Overlay
        marker = (Marker) baiduMap.addOverlay(options);
    
        // 显示默认的 覆盖物位置
        displayMarker("默认", marker);
    }

     

    对于已经添加的标注覆盖物可以通过 remove() 从地图上面移除。
     
    下面附上整个程序的源代码
    点击打开链接
    
    展开全文
  • 手势动作,滑动,缩小,倾斜,旋转等 /** * 设置地图是否可以手势滑动 */ mUiSettings.setScrollGesturesEnabled(true); /** * 设置地图是否可以手势缩放大小 */ mUiSettings.setZoomGesturesEnabled

    手势动作,滑动,缩小,倾斜,旋转等

     /**
             * 设置地图是否可以手势滑动
             */
            mUiSettings.setScrollGesturesEnabled(true);
    
            /**
             * 设置地图是否可以手势缩放大小
             */
            mUiSettings.setZoomGesturesEnabled(true);
            /**
             * 设置地图是否可以倾斜
             */
            mUiSettings.setTiltGesturesEnabled(true);
            /**
             * 设置地图是否可以旋转
             */
            mUiSettings.setRotateGesturesEnabled(true);

    设置放缩图标,logo位置,地图放缩等级等

      mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);//设置放缩图标在右下
    
                    mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);//设置logo的位置 在左下角
    
                    aMap.moveCamera(CameraUpdateFactory.zoomTo(10));//设置地图的放缩

    下面是部分的显示代码

    public class MainActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {
    
    
        private AMap aMap;
        private MapView mapView;
        private UiSettings mUiSettings;
        private RadioGroup zoomRadioGroup;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mapView = (MapView) findViewById(R.id.map);
            mapView.onCreate(savedInstanceState);
            intiView();
        }
    
        private void intiView() {
            if (aMap == null) {
                aMap = mapView.getMap();
                mUiSettings = aMap.getUiSettings();
            }
    
    
            CheckBox zoomToggle = (CheckBox) findViewById(R.id.zoom_toggle);
            zoomToggle.setOnClickListener(this);
            zoomRadioGroup = (RadioGroup) findViewById(R.id.zoom_position);
            zoomRadioGroup.setOnCheckedChangeListener(this);
            CheckBox mylocationToggle = (CheckBox) findViewById(R.id.mylocation_toggle);
            mylocationToggle.setOnClickListener(this);
    
            /**
             * 设置地图是否可以手势滑动
             */
            mUiSettings.setScrollGesturesEnabled(true);
    
            /**
             * 设置地图是否可以手势缩放大小
             */
            mUiSettings.setZoomGesturesEnabled(true);
            /**
             * 设置地图是否可以倾斜
             */
            mUiSettings.setTiltGesturesEnabled(true);
            /**
             * 设置地图是否可以旋转
             */
            mUiSettings.setRotateGesturesEnabled(true);
    
        }
    
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                /**
                 * 设置地图默认的缩放按钮是否显示
                 */
                case R.id.zoom_toggle:
                    mUiSettings.setZoomControlsEnabled(((CheckBox) view).isChecked());
                    zoomRadioGroup.setVisibility(((CheckBox) view).isChecked() ? View.VISIBLE : View.GONE);
                    break;
    
                /**
                 * 设置地图默认的定位按钮是否显示
                 */
                case R.id.mylocation_toggle:
                    mUiSettings.setMyLocationButtonEnabled(((CheckBox) view)
                            .isChecked()); // 是否显示默认的定位按钮
                    aMap.setMyLocationEnabled(((CheckBox) view).isChecked());// 是否可触发定位并显示定位层
                    break;
                default:
                    break;
            }
        }
    
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
            if (aMap != null) {
                if (i == R.id.zoom_bottom_right) {
                    mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);//设置放缩图标在右下
    
                    mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);//设置logo的位置 在左下角
    
                    aMap.moveCamera(CameraUpdateFactory.zoomTo(10));//设置地图的放缩
                } else if (i == R.id.zoom_center_right) {
                    mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER);//设置放缩图标在右中
    
                    aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//设置地图的放缩
                    mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_RIGHT);//设置logo的位置 在右下角
                }
            }
        }
    
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onResume() {
            super.onResume();
            mapView.onResume();
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onPause() {
            super.onPause();
            mapView.onPause();
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
        }
    
    
    }
    展开全文
  • 百度一下:百度地图 sdk->百度地图api->android 开发->SDK下载,然后选择我们需要的开发资源,这里我选择了 定位,基础地图,检索功能,Lbs云检索,计算功能,选择这5个之后点击开发包下载,这样你就会获得一个压缩...
  • MATLAB地图工具箱学习总结(三)地图工具箱的基本知识 MATLAB地图工具箱学习总结系列: (一)从地图投影说起 (二)大圆和恒向线 (三)地图工具箱的基本知识 (四)自定义投影 今天想要介绍的是一些比较基础...
  • 百度地图jsAPI使用总结(一)基本操作准备百度地图jsAPI使用添加比例尺控件添加监听事件为地图添加自定义控件 总结一下这段时间对于百度地图API的使用(API版本2.0) 百度地图JSAPI2.0参考类 准备 引用百度API资源 &...
  • 第四节 实现地图基本操作

    千次阅读 2016-10-12 09:21:01
    下面这段代码的作用就是设置默认地图源。 < esri:Map Background = "White" Margin = "0" WrapAround = "True" > < esri:ArcGISTiledMapServiceLayer Url = ...
  • 标注(Marker)是开发者最常使用的地图覆盖物志一,今天就来向大家介绍一些标注(Marker)的最基本使用方法! 实现目标: 1、构建基础地图页面; 2、在地图的中心点处添加 Marker; 3、实现 Marker 的...
  • TF 在ROS基本作用和简单介绍

    万次阅读 2019-07-30 10:55:09
    当前地图中的机器人的的位置 减去 地图中机器人的起点位置。  转为公式可以写成 :map->odom = map->base_link - base_link->odom 或者写为:  base_link->odom = map->base_link - map->odom ...
  • 以前我刚开始学习ArcGIS时候,看得最常见的一篇博客是Ersi中国官方写的一篇《ArcGIS for Android地图控件的5大常见操作》
  • 地图显示与基本操作(放大、缩小、移动、坐标显示)是Javascript API的基本功能,也是一个WebGIS应用的基本内容,Javascript提供了非常便捷的开发方法,当然在线浏览需要Ags服务器...2.地图基本操作,如放大、缩小、
  • 引路蜂地图开发包提供对大多数平台的支持,在不同平台编写应用时所用的工具和设计语言不尽相同,引路蜂地图开发包主要以Java 和 C# 支持各个平台,后面将以具体的各个平台介绍引路蜂地图开发包的使用方法,具体平台...
  • Android 中使用地图加载wms服务(高德地图,谷歌地图,天地图)由于公司需求需要在移动平台上加载自己发布的wms 服务: 高德地图加载wms 谷歌地图加载wms 天地图加载wms或者wmts 目前就做了这几个地图上面加载wms 服务...
  • 地图整饰-概述

    千次阅读 2016-11-21 23:12:18
    地图整饰-概述 by 李远祥 在GIS制图的过程中,也许会有人很多不会涉及到地图整饰。因为GIS大部分都是服务于信息系统,又或者直接面向解决问题。所以,一般情况下,对于制图来说,不外乎就是GIS应用的数据表现或者是...
  • 地图

    千次阅读 2007-11-02 10:01:00
    定义地图是按照一定的法则,有选择地以二维或多维形式与手段在平面或球面上表示地球(或其它星球)若干现象的图形或图像,它具有严格的数学基础、符号系统、文字注记,并能用地图概括原则,科学地反映出自然和社会经济...
  • Android 百度地图SDK v3.1.1 之基础地图
  • 百度离线地图示例之一:地图展示

    千次阅读 多人点赞 2021-02-18 16:04:31
    主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本,实现的功能点概要如下: 地图示例: 地图展示 同时加载两个...
  • 百度地图生成器:[可以自动生成一个简单百度地图]***************** http://api.map.baidu.com/lbsapi/creatmap/ --------------------------------------------------------------------------------------------...
  • [python] 下载天地图切片地图

    千次阅读 2019-04-24 10:07:41
    下载xyz地图 资源 下列为常用xyz路由地址 为了避免图片中出现文字标注(道路名称,建筑物名称等)本文选择... * lang可以通过zh_cn设置中文,en设置英文,size基本作用,scl设置标注还是底图,scl=1代表注记, ...
  • 细说地图(swift)

    千次阅读 2016-05-09 01:03:43
    地图的基本使用1 地图需要依赖的框架 : MapKit2 框架基本作用 : 用于地图展示,例如大头针,路线、覆盖层展示等(着重界面展示)3 使用步骤 :—-> 3.1 导入头文件 : import MapKit(swift) ; #import —-> 3.2 ...
  • 如何快速输出产品的用户故事地图

    千次阅读 2018-12-11 10:22:42
    01 结构与作用 故事地图产生背景 用户故事地图就是将story用可视化的方式展现在团队面前,让团队可以仔细梳理、讨论,确认这个story包含的内容,最终产出需求进行开发。 用户故事地图是Userstory的前传! 故事...
  • 地图配色浅析

    万次阅读 2017-06-08 18:46:30
    做一幅美观的地图,将会对GIS软件或者GIS应用系统起到锦上添花的作用! 以下是作者在地图配色中总结的一些经验。由于地图配色没有特别明确的标准,并且每个人对色彩的感觉也存在着较大的差异,因此,这里的一些经验...
  • 地图已经制作好了,现在需要把地图导入到unity中了,一般使用的是老版的Tiled2Unity,但是这个插件现在作者不在更新了,取而代之的是Super Tiled2Unity ,两个的使用方法还是很不一样的,Tiled2Unity的使用教程比较多...
  • 地图服务接口调用需要申请开发许可(Key)(自己去官网注册),添加到请求地址后即可 ---------------------------------------------------------------------------------------------------------------------...
  • Google 地图 API for Android

    万次阅读 多人点赞 2017-03-04 20:42:52
    原文:Introduction to Google Maps API for Android 作者: Eunice Obugyei 译者:kmyhy 从健康类 app Runkeeper 到游戏 app 精灵宝可梦,位置服务对现代 ...这个 app 允许用户搜索一个地点,使用 Google 地图显示
  • 目录 1)高精地图与自动驾驶 2)什么是高精地图 3)高精地图与导航地图 4)高精地图---无人驾驶的核心基础模块...10)高精地图作用---静态的Perception 11)高精地图作用---弥补系统性缺陷 原创: 阿波君...
  • 局部建图线程 地图点融合 留下观测...* LocalMapping作用是将Tracking中送来的关键帧放在mlNewKeyFrame列表中; * 处理新关键帧,地图点检查剔除,生成新地图点,Local BA,关键帧剔除。 * 主要工作在于维护局部地...
  • 通过这些折腾,基本上解决了 谷歌服务的问题,联系人和Gmail都可以同步,电子市场和谷歌地图可以用,谷歌纵横上你的好朋友也可以看到了。GPS定位很好用,强烈推荐你用强大的凯立德。But, but, but, there are ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,346
精华内容 16,138
关键字:

地图的基本作用