精华内容
下载资源
问答
  • 自定义Marker,可以理解为在地图上自定义图标(Custom Marker),先看看GMap的地图和图标的显示方式: Map控件上可以添加Overlay(图层),可以添加多个图层,先添加的图层在下面显示。 图层上可以添加GMapMarker,...
  • android版百度地图自定义Marker
  • AMap2DDemo 高度地图Demo 高德地图自定义Marker、自定义Window 简书:
  • 主要给大家介绍了关于Android基于高德地图完全自定义Marker的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 高德地图自定义Marker

    千次阅读 2020-07-23 10:20:08
    1.添加Marker 的方法 // 添加多边形的边界点marker private void addPolygonMarker(LatLng latlng) { // markerOption.position(latlng); // Marker marker = mAMap.addMarker... //小猫 自定义 Marker ..

    1.添加Marker 的方法  

    // 添加多边形的边界点marker
        private void addPolygonMarker(LatLng latlng) {
    //		markerOption.position(latlng);
    //		Marker marker = mAMap.addMarker(markerOption);
    //		markerList.add(marker);
    
            markerId++;
            //小猫 自定义 Marker
            View viewCat = LayoutInflater.from(this).inflate(R.layout.item_marker_view, null);
            TextView tv_marker = (TextView) viewCat.findViewById(R.id.tv_marker);
            ImageView iv_mark_bg = viewCat.findViewById(R.id.iv_mark_bg);
            tv_marker.setText(markerId + "");
            int size = markerList.size();
            if (size == 0) {
                iv_mark_bg.setBackgroundResource(R.mipmap.circle_gray);
            } else if (size == 1) {
                iv_mark_bg.setBackgroundResource(R.mipmap.circle_gray);
            } else {
                iv_mark_bg.setBackgroundResource(R.mipmap.circle_yellow);
            }
    
            MarkerOptions markerOption = new MarkerOptions().position(latlng)
                    .draggable(false)
                    .icon(BitmapDescriptorFactory.fromView(viewCat));
            //将数据添加到地图上
            Marker marker = mAMap.addMarker(markerOption);
            //设置类型为2  为了区分 点击 哪一个类型的Marker
            marker.setObject(markerId);
            markerList.add(marker);
        }

    2.Marker 的布局文件 

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="18dp"
        android:layout_height="28dp"
        >
    
        <ImageView
            android:id="@+id/iv_mark_bg"
            android:layout_width="12dp"
            android:layout_height="6dp"
            android:background="@mipmap/circle_gray"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            />
    
        <TextView
            android:id="@+id/tv_marker"
            android:layout_width="18dp"
            android:layout_height="28dp"
            android:textColor="@color/blue"
            android:textSize="7dp"
            android:paddingTop="3.2dp"
            android:text="1"
            android:gravity="center_horizontal"
            android:background="@mipmap/map_h_pos"
            />
    
    
    
    </RelativeLayout>
    

    Marker 样式图片 

     

    展开全文
  • leaflet之自定义marker Icon

    千次阅读 2018-09-06 09:52:37
    leaflet之自定义marker Icon marker图标可以设置自定义的图片,以及阴影图片 准备图片 创建原始图标ICON 依据原始图标创建多个图标ICON 创建marker设置icon添加到地图上 点击查看完整教程 leaflet入门系列教程 ...

    leaflet之自定义marker Icon

    marker图标可以设置自定义的图片,以及阴影图片

    1. 准备图片
    2. 创建原始图标ICON
    3. 依据原始图标创建多个图标ICON
    4. 创建marker设置icon添加到地图上

      点击查看完整教程
      leaflet入门系列教程
      leaflet完整教程

    展开全文
  • 高德地图 自定义marker

    2021-08-06 14:52:54
    先看官网 自定义marker 链接: 高德绘制点标记. 1.自定义适配器 public class InfoWindows implements AMap.InfoWindowAdapter { Context context; View infoWindow = null; private TextView tv_city; privat.

    做地图社交类APP开发的都知道,一般情况下,为了整体的美观和用户体验度,我们需要定制化Marker的样式。本文是基于高德地图的

    自定义的 infowindow 只显示一个信息框

    1.自定义适配器

    public class InfoWindows implements AMap.InfoWindowAdapter {
        Context context;
        View infoWindow = null;
        private TextView tv_city;
        private TextView tv_temp;
    
        public InfoWindows(Context context) {
            this.context = context;
        }
        public void startTimes(String name1, String name2){
            startTime(name1,name2);
        }
    
        @Override
        public View getInfoWindow(Marker marker) {
             if(infoWindow==null){
                infoWindow = LayoutInflater.from(context).inflate(
                        R.layout.hintwarn, null);
            }
            tv_city=infoWindow.findViewById(R.id.tv_city);
            tv_temp=infoWindow.findViewById(R.id.tv_temp);
    //        tv_city.setLayoutParams(new RelativeLayout.LayoutParams(100, 40));//固定宽高
    //        tv_temp.setLayoutParams(new RelativeLayout.LayoutParams(100, 40));//固定宽高
            //预警设置
            tv_city.setText(marker.getTitle());
            tv_city.setTextSize(18);
            tv_city.setPadding(20,10,0,0);
            //内容设置
            tv_temp.setTextSize(18);
            tv_temp.setPadding(20,10,0,0);
            tv_temp.setText(marker.getSnippet());
            if (marker.getTitle().equals("正常")){
                tv_city.setTextColor(Color.parseColor("#4CAF50"));
            }else {
                tv_city.setTextColor(Color.parseColor("#F44336"));
            }
            render(marker, infoWindow);
            return infoWindow;
        }
        @Override
        public View getInfoContents(Marker marker) {
            if ("".equals(marker.getTitle()) || marker.getTitle() == null) {
                return null;
            }
            View infoContent = LayoutInflater.from(context).inflate(R.layout.hintwarn, null);
            render(marker, infoContent);
            return infoContent;
        }
        /**
         * 自定义infowinfow窗口
         */
        public void render(Marker marker, View view) {
           //如果想修改自定义Infow中内容,请通过view找到它并修改
        }
        public void startTime(String name1, String name2){
            CountDownTimer ct=new CountDownTimer(10000,1000) {
                @Override
                public void onTick(long l) {
                    if(tv_temp!=null) {
                        int i= (int) (l/1000);
                        tv_city.setText(name1);
                        tv_temp.setText(name2);
                    }
                }
                @Override
                public void onFinish(){
                }
            };
            ct.start();
        }
    }
    
    • hintwarn.xml 自定义的文字布局
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:orientation="vertical">
            <TextView
                android:text="adsda"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_city"
                android:textSize="20sp"
                android:textColor="@color/purple_500"
                />
            <TextView
                android:layout_below="@+id/tv_city"
                android:text="adsda"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_temp"
                android:textColor="@color/purple_200"
                android:textSize="26sp"/>
    </RelativeLayout>
    

    2.显示

    position:设置当前marker显示在界面的什么位置,即经纬度的传入。
    draggable:当前marker是否可以拖动,true 可以拖动。
    title:设置marker的主题。如果不设置title也不设置snippet的情况,点击这个marker是不会出现infowindow

    显示多个自定义标记点

    //绘制默认 Marker -- Marker 常用属性、 position  在地图上标记位置的经纬度值。必填参数、title 点标记的标题e、snippet   点标记的内容
    // draggable 点标记是否可拖拽、 visible 点标记是否可见、anch 点标记的锚点、alpha 点的透明度
    //显示多个自定义标记点
            List<BeanEvent> marketList = BeanEvent.getEvent();
            for (int i = 0; i < marketList.size(); i++) {
                //.anchor(1.5f, 3.5f) 信息窗的偏移量
                MarkerOptions option = new MarkerOptions();
                option.position(new LatLng(marketList.get(i).getLatitude(), marketList.get(i).getLongitude()));//设置经度
                option.title(marketList.get(i).getWarn());//设置标题
                option.snippet(marketList.get(i).getContent());//设置内容
                if (marketList.get(i).getImage()==1){
                    option.icon(fromResource(R.drawable.red));
                }else {
                    option.icon(fromResource(R.drawable.green));
                }
                marker = aMap.addMarker(option);
                InfoWindows adapter = new InfoWindows(MainActivity.this);
                aMap.setInfoWindowAdapter(adapter);
                marker.showInfoWindow();
                //点击标记点,如果标记点显示,点击后隐藏,否则反之
                aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
                    @SuppressLint("LongLogTag")
                    @Override
                    public boolean onMarkerClick(Marker marker) {//在标记上单击
                        curShowWindowMarker = marker;
                        infoWindowShown = false;
                        if (marker.isInfoWindowShown()) {
                            marker.hideInfoWindow();
                        } else {
                            marker.showInfoWindow();
                        }
                        Log.e("setOnMarkerClickListener", "Marker被点击了");
                        return true;//return true 的意思是点击marker,marker不成为地图的中心坐标,反之,成为中心坐标。
                    }
                });
                //地图的点击事件 ,点击取消信息框
                aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
                   @Override
                   public void onMapClick(LatLng latLng) {
                       curShowWindowMarker.hideInfoWindow();
                   }
                });
            }
    

    实体类BeanEvent

    public class BeanEvent {
        private String warn;
        private String content;
        private Double latitude;
        private Double longitude;
        private int image;
    
        public String getWarn() {
            return warn;
        }
    
        public void setWarn(String warn) {
            this.warn = warn;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public Double getLatitude() {
            return latitude;
        }
    
        public void setLatitude(Double latitude) {
            this.latitude = latitude;
        }
    
        public Double getLongitude() {
            return longitude;
        }
    
        public void setLongitude(Double longitude) {
            this.longitude = longitude;
        }
    
        public int getImage() {
            return image;
        }
    
        public void setImage(int image) {
            this.image = image;
        }
    	//创造一些假数据
        public static List<BeanEvent> getEvent(){
            List<BeanEvent> list = new ArrayList<>();
            BeanEvent be1 = new BeanEvent();
            be1.setWarn("预警1");
            be1.setContent("内容1");
            be1.setLatitude(27.977247);//维度
            be1.setLongitude(119.784769);//精度
            be1.setImage(1);
            list.add(be1);
            BeanEvent be2 = new BeanEvent();
            be2.setWarn("预警2");
            be2.setContent("内容2");
            be2.setLatitude(27.999347);//维度
            be2.setLongitude(119.797769);//精度
            be2.setImage(2);
            list.add(be2);
            BeanEvent be3 = new BeanEvent();
            be3.setWarn("预警3");
            be3.setContent("内容3");
            be3.setLatitude(27.987247);//维度 
            be3.setLongitude(119.814769);//精度
            be3.setImage(2);
            list.add(be3);
            BeanEvent be4= new BeanEvent();
            be4.setWarn("预警4");
            be4.setContent("内容4");
            be4.setLatitude(27.947247);//维度 
            be4.setLongitude(119.804769);//精度
            be4.setImage(1);
            list.add(be4);
            return list;
        }
    
    

    在这里插入图片描述
    多个infowindow算是投机取巧 没有找到合适的方法
    仅供参考

    for (int i = 0; i < marketList.size(); i++) {
    
                final LocationMarketBean locationMarketBean = marketList.get(i);
    
                 markerOption = new MarkerOptions().icon(BitmapDescriptorFactory
    
                                           .fromView(getBitmapView(LocationMarkerInfoWindowsActivity.this, locationMarketBean)));
    
                markerOption.position(new LatLng(locationMarketBean.getLatitude(), locationMarketBean.getLongitude()));
    
                markerOption.setFlat(true);
    
                markerOption.draggable(false);
    
                marker = aMap.addMarker(markerOption);
    
                markerOptionlst.add(markerOption);
    
            }
    
            markersOnListen = aMap.addMarkers(markerOptionlst, true);
    
            aMap.setOnMarkerClickListener(marker -> {
    
                for (int i = 0; i < markersOnListen.size(); i++) {
    
                    if (marker.equals(markersOnListen.get(i))) {
                    Toast.makeText(LocationMarkerInfoWindowsActivity.this,marketList.get(i).getTitle(),Toast.LENGTH_SHORT).show();
                    }
                }
                return false;
            });
    

    以上

    展开全文
  • 首先要点 基本地图显示 定位蓝点 路线规划 自定义路线规划图层(高德已开源) 自定义marker 测距等 功能部分官方网的文档并不是很清晰 我在这里整理一下 我所用的流程 第一 先配置高德环境 自己去高德官网看 按文档...

    最近接到了一个新需求 计划做路线导航提示 由于个性化程度很高 与元地图差异较大 我选择了自定义地图和路线规划相机和的方式
    先看效果图
    这里写图片描述

    首先要点 基本地图显示 定位蓝点 路线规划 自定义路线规划图层(高德已开源) 自定义marker 测距等 功能部分官方网的文档并不是很清晰 我在这里整理一下 我所用的流程

    第一 先配置高德环境 自己去高德官网看 按文档来就可以了

    第二 初始化地图

    map_view = (MapView) findViewById(R.id.map_view);
    map_view.onCreate(savedInstanceState);
    if (map_view!=null){
    aMap = map_view.getMap();
    }

    设置定位蓝点

    MyLocationStyle myLocationStyle;
    myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
    myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
    aMap.getUiSettings().setMyLocationButtonEnabled(false);//设置默认定位按钮是否显示,非必需设置。
    aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
    // myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
    myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
    myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.map_ownerlocation_img));
    myLocationStyle.showMyLocation(true);

        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        aMap.setMapType(AMap.MAP_TYPE_NAVI);
    

    模拟地点 并规划路线

        路线规划//
        start = new LatLonPoint(30.291779,120.040998);
        end = new LatLonPoint(30.406169,120.305117);
        final LatLonPoint way1 = new LatLonPoint(30.270999,120.163277);
        final LatLonPoint way2 = new LatLonPoint(30.291124,120.212892);
        wayPointList.add(way1);
        wayPointList.add(way2);
        routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        // fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
        // 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(start, end);
        RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault,
    

    wayPointList, null, “”);
    routeSearch.calculateDriveRouteAsyn(query);

        //当前位置监听//
        aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(Location location) {
    
    
            }
        })
    

    ;

    自定义路线规划图层 高德sdk 5.0版本以后 就不在提供overlay包 但是官方demo 中会有overlay 包 如有需要你可以直接过去拷贝 有一些小地方需要修改 注意下

    @Override
    public void onDriveRouteSearched(DriveRouteResult driveRouteResult, int i) {
    if (i==1000){// 路线规划成功
    if (driveRouteResult!=null&&driveRouteResult.getPaths()!=null&&driveRouteResult.getPaths().size()>0){
    DrivePath drivePath = driveRouteResult.getPaths().get(0);
    aMap.clear();// 清理地图上的所有覆盖物
    // 定义图层
    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(MapActivity.this, aMap, drivePath,
    driveRouteResult.getStartPos(),
    driveRouteResult.getTargetPos(),wayPointList);
    drivingRouteOverlay.setNodeIconVisibility(false);//隐藏转弯的节点
    drivingRouteOverlay.addToMap();
    drivingRouteOverlay.zoomToSpan();
    aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(new
    LatLngBounds(
    new LatLng(start.getLatitude(),start.getLongitude()),
    new LatLng(end.getLatitude(),end.getLongitude())),50));

            }
        }else {// 路线规划失败
            Toast.makeText(MapActivity.this, "无可用路线", Toast.LENGTH_SHORT).show();
        }
    
    }
    

    自定义图层类

    import java.util.ArrayList; import java.util.List;

    import android.content.Context; import android.graphics.Bitmap; import
    android.graphics.BitmapFactory; import android.graphics.Color; import
    android.graphics.drawable.Drawable; import android.os.Parcel; import
    android.util.Log; import android.view.LayoutInflater; import
    android.view.View; import android.widget.LinearLayout;

    import com.amap.api.maps.AMap; import
    com.amap.api.maps.model.BitmapDescriptor; import
    com.amap.api.maps.model.BitmapDescriptorFactory; import
    com.amap.api.maps.model.LatLng; import
    com.amap.api.maps.model.LatLngBounds; import
    com.amap.api.maps.model.Marker; import
    com.amap.api.maps.model.MarkerOptions; import
    com.amap.api.maps.model.PolylineOptions; import
    com.amap.api.services.core.LatLonPoint; import
    com.amap.api.services.route.DrivePath; import
    com.amap.api.services.route.DriveStep; import
    com.amap.api.services.route.TMC; import com.free_ride.yiwei.R; import
    com.free_ride.yiwei.mvputils.HttpUtils; import
    com.free_ride.yiwei.personal.AppManager; import
    com.free_ride.yiwei.pinchexin.MapActivity; import
    com.free_ride.yiwei.utils.InternetAddressUtis; import
    com.free_ride.yiwei.views.RoundImageView; import
    com.squareup.picasso.Picasso;

    import org.xutils.common.Callback; import org.xutils.x;

    /* 导航路线图层类。 */

    public class DrivingRouteOverlay extends RouteOverlay{

    private DrivePath drivePath;
    private List throughPointList;
    private List throughPointMarkerList = new ArrayList();
    private boolean throughPointMarkerVisible = true;
    private List tmcs;
    private PolylineOptions mPolylineOptions;
    private PolylineOptions mPolylineOptionscolor;
    private Context mContext;
    private boolean isColorfulline = true;
    private float mWidth = 25;
    private List mLatLngsOfPath;

    private ArrayList<BitmapDescriptor>iconList = new ArrayList();
    

    public void setIsColorfulline(boolean iscolorfulline) {
    this.isColorfulline = iscolorfulline; }

    /**
    * 根据给定的参数,构造一个导航路线图层类对象。
    *
    * @param amap 地图对象。
    * @param path 导航路线规划方案。
    * @param context 当前的activity对象。
    */
    public DrivingRouteOverlay(Context context, AMap amap, DrivePath path,
    LatLonPoint start, LatLonPoint end, List throughPointList) {
    super(context);
    mContext = context;
    mAMap = amap;
    this.drivePath = path;
    startPoint = toLatLon(start);
    endPoint = toLatLon(end);
    this.throughPointList = throughPointList;
    }

    public float getRouteWidth() {
        return mWidth;
    }
    
    /**
     * 设置路线宽度
     *
     * @param mWidth 路线宽度,取值范围:大于0
     */
    public void setRouteWidth(float mWidth) {
        this.mWidth = mWidth;
    }
    
    /**
     * 添加驾车路线添加到地图上显示。
     */   public void addToMap() {        initPolylineOptions();
        try {
            if (mAMap == null) {
                return;
            }
            if (mWidth == 0 || drivePath == null) {
                return;
            }
            mLatLngsOfPath = new ArrayList<LatLng>();
            tmcs = new ArrayList<TMC>();
            List<DriveStep> drivePaths = drivePath.getSteps();
            mPolylineOptions.add(startPoint);
            for (DriveStep step : drivePaths) {
                List<LatLonPoint> latlonPoints = step.getPolyline();
                List<TMC> tmclist = step.getTMCs();
                tmcs.addAll(tmclist);
                addDrivingStationMarkers(step, convertToLatLng(latlonPoints.get(0)));
                for (LatLonPoint latlonpoint : latlonPoints) {
                  mPolylineOptions.add(convertToLatLng(latlonpoint));
                  mLatLngsOfPath.add(convertToLatLng(latlonpoint));
              }
            }
            mPolylineOptions.add(endPoint);
            if (startMarker != null) {
                startMarker.remove();
                startMarker = null;
            }
            if (endMarker != null) {
                endMarker.remove();
                endMarker = null;
            }
            addStartAndEndMarker();
            addThroughPointMarker();
            if (isColorfulline && tmcs.size()>0 ) {
              colorWayUpdate(tmcs);
              showcolorPolyline();            }else {
              showPolyline();             }            
    
        } catch (Throwable e) {
          e.printStackTrace();
        }
    }
    

    /**
    * 初始化线段属性
    */
    private void initPolylineOptions() {
    mPolylineOptions = null;
    mPolylineOptions = new PolylineOptions();
    mPolylineOptions.color(getDriveColor()).width(getRouteWidth());
    }

    private void showPolyline() {
        addPolyLine(mPolylineOptions);
    }
    
    private void showcolorPolyline() {
      addPolyLine(mPolylineOptionscolor);
          }
    
    /**
     * 根据不同的路段拥堵情况展示不同的颜色
     *
     * @param tmcSection
     */
    private void colorWayUpdate(List<TMC> tmcSection) {
        if (mAMap == null) {
            return;
        }
        if (tmcSection == null || tmcSection.size() <= 0) {
            return;
        }
        TMC segmentTrafficStatus;
        mPolylineOptionscolor = null;
        mPolylineOptionscolor = new PolylineOptions();
        mPolylineOptionscolor.width(getRouteWidth());
        List<Integer> colorList = new ArrayList<Integer>();
        mPolylineOptionscolor.add(startPoint);
        mPolylineOptionscolor.add(toLatLon(tmcSection.get(0).getPolyline().get(0)));
        colorList.add(getDriveColor());
        for (int i = 0; i < tmcSection.size(); i++) {
          segmentTrafficStatus = tmcSection.get(i);
          int color = getcolor(segmentTrafficStatus.getStatus());
          List<LatLonPoint> mployline = segmentTrafficStatus.getPolyline();           for (int j = 1; j <
    

    mployline.size(); j++) {
    mPolylineOptionscolor.add(toLatLon(mployline.get(j)));
    colorList.add(color); } }
    mPolylineOptionscolor.add(endPoint);
    colorList.add(getDriveColor());
    mPolylineOptionscolor.colorValues(colorList);
    }

    private int getcolor(String status) {
    
      if (status.equals("畅通")) {
          return Color.GREEN;         } else if (status.equals("缓行")) {
           return Color.YELLOW;       } else if (status.equals("拥堵")) {           return Color.RED;       } else if (status.equals("严重拥堵")) {             return
    

    Color.parseColor(“#990033”); } else { return
    Color.parseColor(“#537edc”); } }

    public LatLng convertToLatLng(LatLonPoint point) {
    return new LatLng(point.getLatitude(),point.getLongitude()); }

    /**
     * @param driveStep
     * @param latLng
     */
    private void addDrivingStationMarkers(DriveStep driveStep, LatLng latLng) {
        addStationMarker(new MarkerOptions()
                .position(latLng)
                .title("\u65B9\u5411:" + driveStep.getAction()
                        + "\n\u9053\u8DEF:" + driveStep.getRoad())
                .snippet(driveStep.getInstruction()).visible(nodeIconVisible)
                .anchor(0.5f, 0.5f).icon(getDriveBitmapDescriptor()));
    }
    
    @Override
    protected LatLngBounds getLatLngBounds() {
        LatLngBounds.Builder b = LatLngBounds.builder();
        b.include(new LatLng(startPoint.latitude, startPoint.longitude));
        b.include(new LatLng(endPoint.latitude, endPoint.longitude));
        if (this.throughPointList != null && this.throughPointList.size() > 0) {
            for (int i = 0; i < this.throughPointList.size(); i++) {
                b.include(new LatLng(
                        this.throughPointList.get(i).getLatitude(),
                        this.throughPointList.get(i).getLongitude()));
            }
        }
        return b.build();
    }
    
    public void setThroughPointIconVisibility(boolean visible) {
        try {
            throughPointMarkerVisible = visible;
            if (this.throughPointMarkerList != null
                    && this.throughPointMarkerList.size() > 0) {
                for (int i = 0; i < this.throughPointMarkerList.size(); i++) {
                    this.throughPointMarkerList.get(i).setVisible(visible);
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
    // 添加marker
    private void addThroughPointMarker() {
        if (this.throughPointList != null && this.throughPointList.size() > 0) {
            LatLonPoint latLonPoint = null;
            iconList.add(BitmapDescriptorFactory.fromResource(R.mipmap.map_end_img));
    
            for (int i = 0; i < this.throughPointList.size(); i++) {
                latLonPoint = this.throughPointList.get(i);
                if (latLonPoint != null) {
                    throughPointMarkerList.add(mAMap.addMarker(initMarkerObject(latLonPoint,i)));
                }
            }
        }
    }
    
    
        // 初始化marker  自定义marker 样式 下main会给出map_custom_marker_img   xml 文件
    private MarkerOptions initMarkerObject(LatLonPoint latLonPoint, int i) {
        View inflate = LayoutInflater.from(AppManager.getAppManager().currentActivity()).inflate(R.layout.map_custom_marker_img,
    

    null);
    RoundImageView roundImg = (RoundImageView) inflate.findViewById(R.id.map_custom_marker);
    roundImg.setImageBitmap(BitmapFactory.decodeResource(AppManager.getAppManager().currentActivity().getResources(),R.mipmap.map_passheand_one));
    MarkerOptions options = null;

        if (i%2==0){
            options = new MarkerOptions();
            options.position(new LatLng(latLonPoint.getLatitude(),latLonPoint.getLongitude()))
                    .visible(throughPointMarkerVisible)
                    .icon(BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(inflate)))
                    .autoOverturnInfoWindow(true)
                    .title("距离"+(i+1)+"还有"+(calculateDistance(this.startPoint,new
    

    LatLng(throughPointList.get(i).getLatitude(),throughPointList.get(i).getLongitude())))+”米”);
    }else {

            options = new MarkerOptions();
            options.position(new LatLng(latLonPoint.getLatitude(),latLonPoint.getLongitude()))
                    .visible(throughPointMarkerVisible)
                    .icon(BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(inflate)))
                    .autoOverturnInfoWindow(true)
                    .title("距离"+(i+1)+"还有"+(calculateDistance(this.startPoint,new
    

    LatLng(throughPointList.get(i).getLatitude(),throughPointList.get(i).getLongitude())))+”米”);
    }

        return options;
    }
    
    /**
     * view 转为 bitmap 对象
     * @param view
     * @return
     */
    public static Bitmap convertViewToBitmap(View view) {
        view.destroyDrawingCache();
        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.setDrawingCacheEnabled(true);
        return view.getDrawingCache(true);
    }
    private BitmapDescriptor getThroughPointBitDes() {
      return BitmapDescriptorFactory.fromResource(R.mipmap.pass_head);
    }
    
    /**
     * 获取两点间距离
     *
     * @param start
     * @param end
     * @return
     */
    public static int calculateDistance(LatLng start, LatLng end) {
        double x1 = start.longitude;
        double y1 = start.latitude;
        double x2 = end.longitude;
        double y2 = end.latitude;
        return calculateDistance(x1, y1, x2, y2);
    }
    
    public static int calculateDistance(double x1, double y1, double x2, double y2) {
        final double NF_pi = 0.01745329251994329; // 弧度 PI/180
        x1 *= NF_pi;
        y1 *= NF_pi;
        x2 *= NF_pi;
        y2 *= NF_pi;
        double sinx1 = Math.sin(x1);
        double siny1 = Math.sin(y1);
        double cosx1 = Math.cos(x1);
        double cosy1 = Math.cos(y1);
        double sinx2 = Math.sin(x2);
        double siny2 = Math.sin(y2);
        double cosx2 = Math.cos(x2);
        double cosy2 = Math.cos(y2);
        double[] v1 = new double[3];
        v1[0] = cosy1 * cosx1 - cosy2 * cosx2;
        v1[1] = cosy1 * sinx1 - cosy2 * sinx2;
        v1[2] = siny1 - siny2;
        double dist = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]);
    
        return (int) (Math.asin(dist / 2) * 12742001.5798544);
    }
    
    
    //获取指定两点之间固定距离点
    public static LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) {
        double lSegLength = calculateDistance(sPt, ePt);
        double preResult = dis / lSegLength;
        return new LatLng((ePt.latitude - sPt.latitude) * preResult + sPt.latitude, (ePt.longitude - sPt.longitude) * preResult +
    

    sPt.longitude);
    }
    /**
    * 去掉DriveLineOverlay上的线段和标记。
    */
    @Override
    public void removeFromMap() {
    try {
    super.removeFromMap();
    if (this.throughPointMarkerList != null
    && this.throughPointMarkerList.size() > 0) {
    for (int i = 0; i < this.throughPointMarkerList.size(); i++) {
    this.throughPointMarkerList.get(i).remove();
    }
    this.throughPointMarkerList.clear();
    }
    } catch (Throwable e) {
    e.printStackTrace();
    }
    }

    /**
     * 把LatLonPoint对象转化为LatLon对象
     */
    public static LatLng toLatLon(LatLonPoint lonPoint){
        return new LatLng(lonPoint.getLatitude(),lonPoint.getLongitude());
    } }
    

    我的需求是水滴型内嵌套圆形头像的marker
    map_custom_marker_img 文件

    展开全文
  • Leaflet 自定义Marker点Icon

    千次阅读 2020-10-13 18:49:24
    Leaflet 自定义Marker点Icon Leaflet 支持自定义Icon,我们可以给Marker点添加自定义的Icon。 创建自定义Icon var greenIcon = L.icon({ iconUrl:'/assets/maker/marker-icon.png',//icon阴影图片路径 shadowUrl:...
  • GMap 自定义Marker以及规则图形的绘制
  • matplotlib画图自定义marker

    千次阅读 2020-05-04 21:48:05
    文章目录matplotlib画图自定义marker新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • Marker marker = aMap.addMarker(new MarkerOptions().anchor(0.5f,0.5f).position(new LatLng(lat.get(i)[0],lat.get(i)[1])).snippet("nnn").title(i + "").snippet(i + "").draggable(true));String imageUrl = ...
  • leaflet给自定义marker添加动态效果

    千次阅读 2019-07-17 18:11:27
    自定义marker的动态效果
  • 自定义Marker实现:Playable中的通知系统 marker和Signal有相似的地方: 1.简介 marker: 1.Notifycation(通知) 2.Send(发送) 3.Receiver(接收) 自定义marker的试验: using System.Collections; using System...
  • GMap.Net中自定义Marker

    2019-10-01 14:59:05
    自定义Marker,可以理解为在地图上自定义图标(Custom Marker),先看看GMap的地图和图标的显示方式: Map控件上可以添加Overlay(图层),可以添加多个图层,先添加的图层在下面显示。 图层上可以添加...
  • Android集成高德地图如何自定义marker

    千次阅读 2017-10-16 18:51:29
    高德地图自定义Marker高德地图默认的marker样式是这种一般的修改样式是通过icon接口来调整MarkerOptions markerOptions = new MarkerOptions() .position(latlng) .draggable(true) .icon
  • AR.js专题-自定义Marker

    2018-10-09 13:21:00
    创建自定义Marker AR.js Marker Training 上传一张识别图片,然后下载Marker和及图片。 代码 ARjs/three.js/examples/mobile-performance.html 修改代码 // 修改ArMarkerControls Marker路径 ...
  • 创建自定义Marker AR.js Marker Training 上传一张识别图片,然后下载Marker和及图片。 代码 ARjs/three.js/examples/mobile-performance.html 修改代码 // 修改ArMarkerControls Marker路径 let ...
  • * 创建自定义marker图标绑定弹框 */ let carMarker = [];//存放marker图标 for(let m= 0;m<gpsInfoList.length;m++){ let el = document.createElement("div"); el.className = "marker-car"+m; el....
  • 由于提供的基础marker只提供icon,所以如果marker需要显示更多信息,就需要自定义View 使用网络图片标记marker,需要等... //这个是自定义marker 视图,和普通视图一样 View inflate = LayoutInflater.from(MapGri...
  • 自定义Marker,可以理解为在地图上自定义图标(Custom Marker),先看看GMap的地图和图标的显示方式: Map控件上可以添加Overlay(图层),可以添加多个图层,先添加的图层在下面显示。 图层上可以添加GMapMarker,...
  • Marker指地图上的标记点,可以添加标题和内容。绘制多个Marker似乎较为困难,需要批量读入解析数据,这里用最最简单和静态的方法来显示多个标记点。并自定义Marker格式
  • 这是一款导航类app,包含源代码和apk软件,实现了地图显示,实时定位,自定义marker,路线制定,模拟导航,语音通报等功能,使用前替换自己申请的key,即可使用。 app展示以及代码详细讲解:...
  • 使用maptalks添加自定义marker 并且做一个动态的效果 1.添加marker的方法(warnIcon是通过require方式导入的自定义图片) var marker = new maptalks.Marker(coordinate, { cursor: 'pointer', symbol: { ...
  • 效果图 自定义Marker布局 android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation=

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,230
精华内容 7,292
关键字:

自定义Marker