Android 从地图上绘制的直线获取所有坐标
在我的Android 从地图上绘制的直线获取所有坐标,android,google-maps,openstreetmap,Android,Google Maps,Openstreetmap,在我的MapView中,我可以点击地图创建任意多的点,这些点通过一条线连接,但我不想绘制任何可能与地图上的另一条线相交的线,就像这样 是否需要获取直线的坐标以检查新线是否与其他直线相交 或者如果其他人对如何检查这一点有任何建议,那也太好了 这是我画线的画法 @Override public void draw(final Canvas canvas, final MapView mapView, final boolean shadow){ super.draw(can
MapView
中,我可以点击地图创建任意多的点,这些点通过一条线连接,但我不想绘制任何可能与地图上的另一条线相交的线,就像这样
是否需要获取直线的坐标以检查新线是否与其他直线相交
或者如果其他人对如何检查这一点有任何建议,那也太好了
这是我画线的画法
@Override
public void draw(final Canvas canvas, final MapView mapView, final boolean shadow){
super.draw(canvas, mapView, shadow);
try{
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
paint.setAlpha(100);
paint.setStyle(Style.STROKE);
Path path = new Path();
Point point1 = null;
boolean runOnce = false;
for(int i = 0;i<items.size();i++){
Point point = new Point();
mapView.getProjection().toPixels(items.get(i).mGeoPoint, point);
if(!runOnce)
{
path.moveTo(point.x, point.y);
point1 = new Point(point.x, point.y);
runOnce = true;
}
else
{
path.lineTo(point.x, point.y);
}
}
path.lineTo(point1.x, point1.y);
canvas.drawPath(path, paint);
path.lineTo(point1.x, point1.y);
canvas.drawPath(path, paint);
Paint paint2 = new Paint();
paint2.setAntiAlias(true);
paint2.setDither(true);
paint2.setColor(Color.RED);
paint2.setStrokeWidth(3);
paint2.setAlpha(20);
paint2.setStyle(Style.FILL);
Path path2 = new Path();
Point point2 = null;
boolean runOnce2 = false;
for(int i = 0; i < items.size(); i++)
{
Point point = new Point();
mapView.getProjection().toPixels(items.get(i).mGeoPoint, point);
if(!runOnce2)
{
path2.moveTo(point.x, point.y);
point2 = new Point(point.x, point.y);
runOnce2 = true;
}
else
{
path2.lineTo(point.x, point.y);
}
}
path2.lineTo(point2.x, point2.y);
canvas.drawPath(path2, paint2);
}catch(Exception e){
}
}
@覆盖
公共空白绘制(最终画布、最终贴图视图、最终布尔阴影){
super.draw(画布、地图视图、阴影);
试一试{
油漆=新油漆();
paint.setAntiAlias(真);
绘制。设置抖动(真);
油漆。设置颜色(颜色。红色);
油漆。设置行程宽度(3);
油漆。setAlpha(100);
油漆.设置样式(样式.笔划);
路径路径=新路径();
点1=空;
布尔runOnce=false;
对于(inti=0;i就是这样:-)
告诉您如何用数学方法确定两条线段的交点
如果不希望端点算作交点,则只需首先检查端点是否重叠。这可以使用类似以下的If语句解决:
if(Math.abs(x1 - x2) < EPSILON && Math.abs(y1 - y2) < EPSILON)
if(Math.abs(x1-x2)
ε是你的误差容限值,例如0.001,这是不起作用的,因为它会考虑连接端点作为交叉点,你基本上是问如何计算两个线段之间的交点,这些端点当然是线段的一部分,这可以很容易地解决。用数学。如果你不想让你的端点算作交点,那么先检查你的端点是否重叠。这可以用如下的If语句来解决:If(Math.abs(x1-x2)