x

Re: Kreisfeatures aus CSV


Geschrieben von fx99 (Gast) am 26. Juli 2014 08:34:12: [flux]

Als Antwort auf: Kreisfeatures aus CSV geschrieben von Ghostrider82 (Gast) am 25. Juli 2014 13:02:

Das habe ich unter meinen Codes gefunden:

function␣circle␣(llat,␣llon,␣icolor,␣ifill,␣radius)␣{
var␣polygonFeature␣=␣[];
var␣point␣␣␣=␣setToMercator(llon,llat);␣␣//␣␣alert␣(point␣);
var␣center␣␣=␣new␣OpenLayers.Geometry.Point(point[0],␣point[1]);␣	␣//␣␣alert␣(center);
var␣style_var␣=␣{
strokeColor␣␣:␣␣icolor,			strokeOpacity:␣␣0.5,
strokeWidth␣␣:␣␣2,␣␣␣␣␣			pointRadius␣␣:␣␣6,
fill␣␣␣␣␣␣␣␣␣:␣␣ifill␣>␣0,			fillColor␣␣␣␣:␣␣icolor,
fillOpacity␣␣:␣␣ifill,			pointerEvents:␣"visiblePainted"␣␣};
var␣pointList␣=␣[];
var␣rradius␣=␣radius␣/(Math.cos(3.14159*␣llat/180));
var␣npoin=32;
for␣(var␣k␣=␣0;␣k␣<␣npoin;␣k++␣)␣{
pointList.push(␣new␣OpenLayers.Geometry.Point(center.x␣+␣Math.cos(2.0*3.14159/npoin␣*␣k)*␣rradius,␣␣center.y␣+␣Math.sin(2.0*3.14159/npoin␣*␣k)*␣rradius␣␣)␣);
}
pointList.push(␣new␣OpenLayers.Geometry.Point(center.x␣+␣rradius,␣center.y␣)␣);
if␣(␣ifill␣>␣0␣)␣{␣polygonFeature␣=␣new␣OpenLayers.Feature.Vector(new␣OpenLayers.Geometry.LinearRing(pointList),null,style_var);
}␣else␣{	polygonFeature␣=␣new␣OpenLayers.Feature.Vector(new␣OpenLayers.Geometry.LineString(pointList),null,style_var);
}
return␣(␣polygonFeature␣);
}
function␣setToMercator(lon,␣lat)␣{
x␣=␣parseFloat(lon);	y␣=␣parseFloat(lat);
var␣PI␣=␣3.14159265358979323846;
x␣=␣x␣*␣20037508.34␣/␣180;
y␣=␣Math.log␣(Math.tan␣((90␣+␣y)␣*␣PI␣/␣360))␣/␣(PI␣/␣180);
y␣=␣y␣*␣20037508.34␣/␣180;
return␣new␣Array(x,y);
}

Aufruf:

	var␣circ1␣=␣circle(lat,lon,"red",0.1,2000.0);
vectorLayer.addFeatures([circ1]);
map.addLayer(vectorLayer);

Auf der Karte erscheint ein Kreis, der mit der Karte skaliert .
Ein realer Kreis, sprich Abstand vom Mittelpunkt konstant, ist in unserer Gegend bei der Merkatorprojektion eine in Nord-Süd Richtung
gestreckte Elipse, deshalb ist der Radius auch nur ein Richtwert.

Um den Radius aus einer CSV oder gpx Datei zu holen, muss Du diese parsen und den Wert als Variable in die circle Funktion übergeben.