Selektionsgeometrie berechnen

Um die Selektion eines Elementes der Ebene zu optimieren (größerer Radius bei Punktobjekten), kann die Selektionsgeometrie (Suchradius oder Suchtoleranz) berechnet und angepasst werden. Dazu ist im gleichnamigen Feld in dem Reiter cm³ Allg. Einstellungen ein Code mit der Berechnung einzugeben.

//nur Punkt (gut geeignet für Flächen)
return 'gPoint:'+x+'|'+y;

 

//konstanter Radius
var radius=20; //Meter
return 'gCircle:'+x+'|'+y+'|'+radius;

 

// Berechnung nach der Symbolgröße

// (einfacher Punkt mit Min/Max-Size)
var minSize=15; //px
var maxSize=40; //px
var symbolDiameter=80; //Meter

var size=symbolDiameter/((1/3200)*scale);
var size=Math.max(Math.min(size,maxSize),minSize);

var radius=(1/3200*size*scale)/2;
return 'gCircle:'+x+'|'+y+'|'+radius;

 

// Berechnung nach der Linienstärke (nicht skaliert)
var unscaledSizeInMM = 0.8; //mm

var radius=((unscaledSizeInMM/1000) * scale)/2;
return 'gCircle:'+x+'|'+y+'|'+radius;

 

weitere Beispiele zur Berechnung der Selektionsgeometrie für Punkt- und Linienobjekte

// konstanter  Radius (für Symbole ohne min/max Pixelgröße)
var radius=20; //Meter
return "gCircle:"+x+"|"+y+"|"+radius;

-----------oder------------------------------

// Berechnung für Symbole mit min/max Pixelgröße
var minSize=15;   //Pixel
var maxSize=40;  //Pixel
var symbolDiameter=80; //Meter
 
var size=symbolDiameter/((1/3200)*scale);
var size=Math.max(Math.min(size,maxSize),minSize);

var radius=(1/3200*size*scale)/2;
return "gCircle:"+x+"|"+y+"|"+radius;
 

-----------oder------------------------------

// Berechnung nach Eigenschaften eines Liniensymbols (mit min/max Größe)
var minSize=1;  //Pixel
var maxSize=50;  //Pixel
var symbolDiameter=30; //skalierte Linie (3mm bei 10000) -> 3mm * 10000

// einfaches Symbol mit minMaxSize
var size=symbolDiameter/((1/3200)*scale);
var size=Math.max(Math.min(size,maxSize),minSize);
 
var radius=(1/3200*size*scale)/2;
return "gCircle:"+x+"|"+y+"|"+radius;

-----------oder------------------------------

// Punkt mit minMaxSize und Maßstabsabhängigem Symbolwechsel)
if(scale>400000)
{
var minSize=5;
var maxSize=20;
var symbolDiameter=50;
 
var size=symbolDiameter/((1/3200)*scale);
var size=Math.max(Math.min(size,maxSize),minSize);

var radius=(1/3200*size*scale)/2;
return "gCircle:"+x+"|"+y+"|"+radius;
}
else
{
var minSize=20;
var maxSize=30;
var symbolDiameter=100;
 
var size=symbolDiameter/((1/3200)*scale);
var size=Math.max(Math.min(size,maxSize),minSize);

var radius=(1/3200*size*scale)/2;
return "gCircle:"+x+"|"+y+"|"+radius;
}

---------------- oder ----------------------

 //Punktsymbol mit fixen Symbolgrößen in bestimmten Maßstabsbreichen
var size=25;
var sc=scale;
var radius=null;
if(sc>=0&&sc<=10000)size=25;
else if(sc>=10000&&sc<=11428 )size=24;
else if(sc>=11428&&sc<=13333 )size=23;
else if(sc>=13333&&sc<=16000 )size=22;
else if(sc>=16000&&sc<=20000 )size=21;
else if(sc>=20000&&sc<=26667 )size=20;
else if(sc>=26667&&sc<=40000 )size=19;
else if(sc>=40000&&sc<=80000 )size=18;
else if(sc>=80000)radius=450;

if(radius==null) radius=1/3200*size*scale;
radius*=.5;
return 'gCIRCLE:'+x+'|'+y+'|'+radius;