Avatar

Im Gelände Messgrenzen für ein Tachymeter definieren (Geodäsie/Vermessung)

MichaeL ⌂, Bad Vilbel, Saturday, 17.10.2009, 23:13 (vor 5297 Tagen) @ mp79

Hi,

der Gedanke, den Johannes erwähnt hatte, kam mir auch erst. Wenn das Gebiet rechteckig ist, könnte man eine (lokale) Transformation bestimmen (eigentlich nur eine Drehung) um die Seiten des Gebiets parallel zu den Koordinatenachsen zu bekommen. Dann müsste man lediglich den Rechts- oder Hochwert im Auge behalten. In der Regel wird man wohl keine rechteckigen Formen haben...

[image]Eine Lösungsmöglichkeit habe ich aber dennoch. Du könntest mit einem Feldrechner arbeiten - Stichwort: Colibri. Hierbei handelt es sich um einen robusten Klein-PC (mit Windows), auf dem Du entsprechende Software (vermPro, Geo8, KavdiMobil, ...) laufen lassen könntest, und über diese Software das Instrument ansteuern kannst. Nun gibst 2 Möglichkeiten: Entweder das Tool kann bereits das, was Du benötigst, oder Du schreibst Dir fix was eigenes. Du suchst ja einen Punkt-im-Polygon-Test. So was haben Andy und ich für Matlab mal geschrieben. Im Anhang der Code als JavaScript...

Auch kann nicht jeder Wissenschaftler mit ArcInfo umgehen.

Wozu auch, die sind in der Lage, ihren eigenen Kopf zum Denken zu nutzen ;-)

Schöne Grüße
Micha

 /**
 *   inPolygon()
 *  @return <boolean> inPolygon
 * @param Array<Point2D> hull ... Umringspolygon
 * @description Prüft, ob ein Punkt innerhalb (1.0e-003) der durch hull 
 *     gegebenen Hülle liegt und gibt true, wenn der Punkt drin,
 *     und false, wenn der Punkt außerhalb liegt, zurück.
 *     Ermittelt die Summe der Richtungswinkel
 * @see Point2D
 *
 **/    
 this.inPolygon = function( hull ) {
  var ax = hull[hull.length-1].x;
  var ay = hull[hull.length-1].y;
  var alpha = 0.0;
 
  for (var i=0; i<hull.length; i++){
   var dw=0;
   var bx = hull[i].x;
   var by = hull[i].y;
   if (bx == this.x && by == this.y) {
    alpha = Math.PI;
    break;
   }
 
   var sr = Math.atan2((ay-this.y), (ax-this.x));
   var er = Math.atan2((by-this.y), (bx-this.x));
 
   if (sr<0)
    sr += 2.0*Math.PI;
   if (er<0)
    er += 2.0*Math.PI;
 
   if (sr > Math.PI)
    sr -= 2.0*Math.PI;
 
   if (er > Math.PI) 
    er -= 2.0*Math.PI;
 
   if ((sr < 0 && er < 0) || (sr > 0 && er > 0)) {
    dw = er - sr;
    if (dw > 0)
     dw -= 2.0*Math.PI;
   }
   else {   
    dw = (er-sr+2.0*Math.PI)%(2.0*Math.PI);
    if (dw > 0) 
     dw -= 2.0*Math.PI;
   }
   dw =dw%(2.0*Math.PI);
   if (dw<0)
    dw += 2.0*Math.PI;
 
   if (dw == Math.PI) {
    alpha = 2.0*Math.PI;
    break;
   }
 
   if (dw > Math.PI)
    dw -= 2.0*Math.PI;
 
   alpha += dw;
   ax = bx;
   ay = by;
  }    
  if (Math.abs(Math.abs(alpha)-2.0*Math.PI) < 1.0E-003)
   return true;
  return false;
 }

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
Leica, Transformation, Punkt-Im-Polygon


gesamter Thread:

 RSS-Feed dieser Diskussion