Sie sind nicht angemeldet.
Guten Tag liebe Leute!
Mein grösster Wunsche wäre eine Funktion für einen DrawCircle().
Leider bringe ich es nicht fertig den Kreis selbst zu berechnen sonst könnte ich dies mit der Funktion polyline() lösen.
Vielleicht kann mir jemand helfen.
Gruss Marcel
Offline
Da muesstest Du entweder nochmal im Schulbuch nach Kreisfunktionen sin und cos nachlesen, oder das http://vgmap.eyebeamresearch.org/ nehmen
Andreas
Offline
Besten Dank für Deine Hilfe.
Ich war in Geometrie nie gut und muss auch heute noch abschreiben :-)
Ich habe aber mein altes Script übernommen. Es wäre schön gewesen wenn es bereits in gmapper eingepflanzt gewesen wäre.
Gruss Marcel
function drawCircle(){
var zoom = map.getZoom();
var centerPt = normalProj.fromLatLngToPixel(centerPoint, zoom);
var radiusPt = normalProj.fromLatLngToPixel(radiusPoint, zoom);
var circlePoints = Array();
with (Math) {
radius = floor(sqrt(pow((centerPt.x-radiusPt.x),2) + pow((centerPt.y-radiusPt.y),2)));
for (var a = 0 ; a < 361 ; a+=10 ) {
var aRad = a*(PI/180);
var y = centerPt.y + radius * sin(aRad)
var x = centerPt.x + radius * cos(aRad)
var p = new GPoint(x,y);
circlePoints.push(normalProj.fromPixelToLatLng(p, zoom));
}
map.removeOverlay(circleLine);
circleLine = new GPolyline(circlePoints,"red",2,1);
map.addOverlay(circleLine);
}
}
Offline
Schönes Script.
Aber hält das auch noch Stand wenn ich 500 Kreise malen will? Der Browser rendert sich doch dann einen Wolf oder?
Gruß
Chris
Offline
Werde mal sehen ob ich so etwas in der nächsten release Version von Gmapper aufnehme ![]()
Nette Anregung jedenfalls ![]()
Offline
Ich musste die Funktion zwar relativ stark umschreiben, die Kreisberechnung habe ich aber so übernommen ![]()
Auch habe ich die Funktionalität ein wenig erweitert ![]()
Die neue PHP Methode drawCircle wird ab Gmapper 1.1 bereitstehen.
Sie wird wie folgt funktionieren:
$karte->drawCircle(48,10,120,["#FFFF00"],[3],["rot.png"]);
Die Methode erwartet 3 Parameter, zunächst den Mittelpunkt des Kreises als Lat/Lng , dann den Radius in Pixel.
Die Parameter danach sind optional und erlauben es, die Linienstärke (Default: 1 ) und Farbe (Default: rot) der Kreislinie festzulegen.
Der letzte Parameter ist ebenfalls optional.
Übergibt man hier einen Dateinamen einer Markergrafik zeichnet die Methode an jeden Punkt der Kreislinie einen MapMarker , der wenn angeklickt eine Detailkarte enthält. (Default: Keine Marker)![]()
Hier eine Demo:
http://gmapper.ajax-info.de/demo/democircle.php
Offline
Habe die Methode nochmal verbessert.
Sie nutztz nun GPolygon, statt GPoyline
Damit ist es auch möglich den Kreis farbig zu hinterlegen.
In späteren Versionen ermöglicht GPolygon es auch einfach, andere Formen als Kreise zu implementieren.
http://gmapper.ajax-info.de/demo/democircle.php
Offline
gibt es eine Möglichkeit, dass der Kreis sich automatisch an die Zoom-Stufe anpasst? Das wäre sehr Sinnvoll, wenn man einen bestimmten Radius um einen Punkt darstellen möchte.
Gruß
Daniel
Beitrag geändert von dstosch (12.01.08 10:14:05)
Offline
Hallo Daniel,
sehr gute Idee. Werde sehen was ich da für die nächste Version tun kann ![]()
Offline
Philipp schrieb:
Hallo Daniel,
sehr gute Idee. Werde sehen was ich da für die nächste Version tun kann
Dies wäre super ....
Daniel
Offline
Problem mit DrawCircle und Opera
Wenn ich eine Karte mit einem Kreis vergrößere und wieder verkleiner
entstehen weitere Kreise. Firefox und IE arbeiten diesbezüglich korrekt?
Abhilfe?
Offline
Hallo!
Ja, der nachfolgende Code bildet einen schönen Kreis in Google Maps.
function drawCircle(){
var zoom = map.getZoom();
var centerPt = normalProj.fromLatLngToPixel(centerPoint, zoom);
var radiusPt = normalProj.fromLatLngToPixel(radiusPoint, zoom);
var circlePoints = Array();
with (Math) {
radius = floor(sqrt(pow((centerPt.x-radiusPt.x),2) + pow((centerPt.y-radiusPt.y),2)));
for (var a = 0 ; a < 361 ; a+=10 ) {
var aRad = a*(PI/180);
var y = centerPt.y + radius * sin(aRad)
var x = centerPt.x + radius * cos(aRad)
var p = new GPoint(x,y);
circlePoints.push(normalProj.fromPixelToLatLng(p, zoom));
}
map.removeOverlay(circleLine);
circleLine = new GPolyline(circlePoints,"red",2,1);
map.addOverlay(circleLine);
}
}
Aber noch viel interessanter wäre es, einen Radar-Chart abbilden zu können.
Das heisst, dass anstatt des Kreises aus einer Reihe von Radiuswerten (in einem Dataset) ein kreisähnliches Gebilde (Polygon) zustande kommen kann.
Google bietet dazu eine Api an: http://code.google.com/intl/de-DE/apis/ … html#radar
Jedoch lässt sich das Gebilde dann nur als img bzw. Icon in Google Maps einbauen, ist dann aber nicht zoomfähig. Gibts dafür eine Lösung?
Offline