osmdroid API解读(十二)

来源:互联网 发布:淘宝店铺怎么收藏不了 编辑:程序博客网 时间:2024/05/18 00:16

osmdroid API解读(十二)

osmdroid-android org.osmdroid.views.overlay.simplefastpoint包

本包的目的在于方便的添加一系列的点在Overlay上。

1. LabelledGeoPoint

带有标签的地理点,在GeoPoint的基础上添加了mLabel属性。

public class LabelledGeoPoint extends GeoPoint {    private String mLabel;    ...}

2. SimplePointTheme

一个管理多个IGeoPoint的类,内置一个List来管理这些点。你可以添加带标签或不带标签两种类型的GeoPoints。此类实现了SimpleFastPointOverlay.PointAdapter,方便在SimpleFastPointOverlay中管理这些点

/** * This class is just a simple wrapper for a List of {@link IGeoPoint}s to be used in * {@link SimpleFastPointOverlay}. Can be used for unlabelled or labelled GeoPoints. Be sure to set * the labelled parameter of the constructor to match the kind of points. * More complex cases should implement {@link SimpleFastPointOverlay.PointAdapter}, not extend this * one. * Created by Miguel Porto on 26-10-2016. */public final class SimplePointTheme implements SimpleFastPointOverlay.PointAdapter {    private final List<IGeoPoint> mPoints;    private boolean mLabelled;    public SimplePointTheme(List<IGeoPoint> pPoints, boolean labelled) {        mPoints = pPoints;        mLabelled = labelled;    }    @Override    public int size() {        return mPoints.size();    }    @Override    public IGeoPoint get(int i) {        return mPoints.get(i);    }    @Override    public boolean isLabelled() {        return mLabelled;    }    /**     * NOTE: this iterator will be called very frequently, avoid complicated code.     * @return     */    @Override    public Iterator<IGeoPoint> iterator() {        return mPoints.iterator();    }}

3. SimpleFastPointOverlayOptions

用于绘制点的工具。

public class SimpleFastPointOverlayOptions {    public enum RenderingAlgorithm {NO_OPTIMIZATION, MEDIUM_OPTIMIZATION, MAXIMUM_OPTIMIZATION}//绘制算法    public enum Shape {CIRCLE, SQUARE}//绘制形状    public enum LabelPolicy {ZOOM_THRESHOLD, DENSITY_THRESHOLD}    protected Paint mPointStyle;//点的画笔工具    protected Paint mSelectedPointStyle;//被选择点的画笔工具    protected Paint mTextStyle;//标注字的风格    protected float mCircleRadius = 5;//点圆角大小    protected float mSelectedCircleRadius = 13;//被选择点的圆角大小    protected boolean mClickable = true;//可点击性    protected int mCellSize = 10;   //格网尺寸    protected RenderingAlgorithm mAlgorithm = RenderingAlgorithm.MAXIMUM_OPTIMIZATION;//绘制算法    protected Shape mSymbol = Shape.CIRCLE;//点的形状    protected LabelPolicy mLabelPolicy = LabelPolicy.ZOOM_THRESHOLD;    protected int mMaxNShownLabels = 250;    protected int mMinZoomShowLabels = 11;    public SimpleFastPointOverlayOptions() {        mPointStyle = new Paint();        mPointStyle.setStyle(Paint.Style.FILL);        mPointStyle.setColor(Color.parseColor("#ff7700"));        mSelectedPointStyle = new Paint();        mSelectedPointStyle.setStrokeWidth(5);        mSelectedPointStyle.setStyle(Paint.Style.STROKE);        mSelectedPointStyle.setColor(Color.parseColor("#ffff00"));        mTextStyle = new Paint();        mTextStyle.setStyle(Paint.Style.FILL);        mTextStyle.setColor(Color.parseColor("#ffff00"));        mTextStyle.setTextAlign(Paint.Align.CENTER);        mTextStyle.setTextSize(24);    }    //获取默认的点图层SimpleFastPointOverlayOptions    public static SimpleFastPointOverlayOptions getDefaultStyle() {        return new SimpleFastPointOverlayOptions();    }    //设置点的风格    public SimpleFastPointOverlayOptions setPointStyle(Paint style) {        mPointStyle = style;        return this;    }    //设置被选择点的风格    public SimpleFastPointOverlayOptions setSelectedPointStyle(Paint style) {        mSelectedPointStyle = style;        return this;    }    //设置圆角    public SimpleFastPointOverlayOptions setRadius(float radius) {        mCircleRadius = radius;        return this;    }    //设置被选择点的圆角    public SimpleFastPointOverlayOptions setSelectedRadius(float radius) {        mSelectedCircleRadius = radius;        return this;    }    //设置可点击性    public SimpleFastPointOverlayOptions setIsClickable(boolean clickable) {        mClickable = clickable;        return this;    }    public SimpleFastPointOverlayOptions setCellSize(int cellSize) {        mCellSize = cellSize;        return this;    }    public SimpleFastPointOverlayOptions setAlgorithm(RenderingAlgorithm algorithm) {        mAlgorithm = algorithm;        return this;    }    public SimpleFastPointOverlayOptions setSymbol(Shape symbol) {        mSymbol = symbol;        return this;    }    public SimpleFastPointOverlayOptions setTextStyle(Paint textStyle) {        mTextStyle = textStyle;        return this;    }    public SimpleFastPointOverlayOptions setMinZoomShowLabels(int minZoomShowLabels) {        mMinZoomShowLabels = minZoomShowLabels;        return this;    }    public SimpleFastPointOverlayOptions setMaxNShownLabels(int maxNShownLabels) {        mMaxNShownLabels = maxNShownLabels;        return this;    }    public SimpleFastPointOverlayOptions setLabelPolicy(LabelPolicy labelPolicy) {        mLabelPolicy = labelPolicy;        return this;    }}

4. SimpleFastPointOverlay

一个绘制简单可点击点的Overlay,优化了加载速度。能够很容易的加载10万个点。不支持每个点的个性化,每个点的风格是一致的。不支持地图旋转时的情况。

public class SimpleFastPointOverlay extends Overlay {    private final SimpleFastPointOverlayOptions mStyle;    private final PointAdapter mPointList;    private final BoundingBox mBoundingBox;    private Integer mSelectedPoint;    private OnClickListener clickListener;    private LabelledPoint grid[][];    private boolean gridBool[][];    private int gridWid, gridHei, viewWid, viewHei;    private float startX, startY, curX, curY, offsetX, offsetY;    private int prevNumPointers, numLabels;    private BoundingBox prevBoundingBox = new BoundingBox(0, 0, 0, 0);    ...}