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);
...
}