2012-07-09 70 views
0

在我MapView,只要你想和點得到由一條線連接,但我不想作出任何行我給點擊地圖上創造儘可能多的點的能力是可與另一條線相交地圖這樣獲取從地圖上畫出一條直線上的座標

enter image description here

上有反正讓行的座標來檢查新線將與他人的一個相交?

或者,如果任何人有關於如何檢查這一點,將是巨大的任何建議太

這是繪製線條

@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){ 

     } 
    } 
+1

http://paulbourke.net/geometry/lineline2d/ – tiguchi 2012-07-09 15:39:54

+0

不會工作,因爲它將考慮連接端點作爲相交 – tyczj 2012-07-09 20:17:45

+0

你基本上是問如何計算兩個線段之間的交點。終點當然是線段的一部分。這可以通過數學輕鬆解決。如果您不希望您的終點計爲交叉點,那麼只需檢查您的終點是否重疊。這可以通過if語句解決,如下所示:if(Math.abs(x1 - x2) tiguchi 2012-07-09 20:36:02

回答

1

你去那裏:-)

我的畫法

paulbourke.net/geometry/lineline2d

告訴你如何在數學上確定兩條線段的交點。

如果你不希望你的終點算作交集,那麼就先檢查一下你的終點是否重疊。這可以使用if語句來解決,如下所示:

if(Math.abs(x1 - x2) < EPSILON && Math.abs(y1 - y2) < EPSILON) 

其中EPSILON是您的容錯值,例如0.001。