Google Maps POINT oder POLYGON einzeichnen über Geometry

hugo1981

Erfahrenes Mitglied
Hallo @ll,

ich habe schon wieder eine Google Maps frage:

Wie kann ich ein Punkt oder Polygon einzeichnen lassen, wenn ich fogendes von meiner DB erhalte?
Code:
POINT(48.1488435333836 11.5945261758462)

oder
Code:
POLYGON((48.139127 11.580214,48.1414633856047 11.5773582458496,48.1364230014141 11.5667152404785,48.1326423885141 11.5703201293945,48.139127 11.580214))


muss ich diese noch weiterverarbeiten oder versteht das GoogleMap auch so? Wenn ja wie? :))

Vielen Dank im Voraus..

lg,
hugo
 
Moin,

du musst daraus GLatLng-Objekte erzeugen, und diese den jeweiligen Objekten übergeben.
Beim Polygon sähe dies so aus: (Übergabe der Eckpunkte erfolgt dort in Array-Form)
Code:
 var polygon = new GPolygon(
            [
              new GLatLng(48.139127,11.580214),
              new GLatLng(48.1414633856047,11.5773582458496),
              new GLatLng(48.1364230014141,11.5667152404785),
              new GLatLng(48.1326423885141,11.5703201293945),
              new GLatLng(48.139127,11.580214)
               ], "#000", 1,1);

Das Objekt, mit dem du ein Polygon erzeugst, heisst GPolygon.
Für Punkte gibt es kein spezielles Objekt, falls du die normalen Markierungen meinst, da heisst das Objekt GMarker
 
Hallo,

vielen Dank für die Hilfe, dadurhc kann ich schonmal Punkte bzw. Marker einzeichen.

Allerdigns machen die Polygone noch Probleme und cih weiss nicht woran es liegt. Wwenn ich die Werte in den Script der das Polygon einzeichnen soll einlese funktiniert das Script nicht mehr. Vielleicht hat sich ein Fehler eingeschlichen?

Über Java wähle ich aus welche Script-Function aufgerufen werden soll load(lng,lat) oder polyload(), hierfür Fülle ich die Variable polygon[] über Java mit den entsprechenden Lat/Lng Werten. Ist auch richtig befüllt.

load() funktioniert, polyload() leider nicht :(

Hier mein Script:
Code:
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAseNjd0vCelWT-KoLbLJQdhRyTHkg_c7lbAmzjzDANg2uUjeciRRJ5cq42Lwdt0z7pqgW4w7N3T_c_w"
      type="text/javascript"></script>
      
<script type="text/javascript">


//<![CDATA[
    var map;
    var geocoder;
	// red marker icon
	var icon = new GIcon();
	icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	//icon.infoWindowAnchor = new GPoint(5, 1);
	var marker=[];
	var point=[];
	var poly=[];
	var line=null;
	var n=0;
	var polystr=null;
	var Ziel=null;
	var polygon =[];

//POINT als MARKER einzeichnen
function load(lng,lat) {
 if (GBrowserIsCompatible()) {
// alert(lng);
 //alert(lat);
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(lng,lat), 13);
	//map.setZoom(13);
	map.mapControl = new GMapTypeControl();
	
	//map.addControl(new GMapTypeControl(1));
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	map.setMapType(G_HYBRID_MAP);
      	//geocoder = new GClientGeocoder();
	poi = new GLatLng(lng,lat);	
	marker = new  GMarker(new GLatLng(lng,lat));
	map.addOverlay(marker);
    }
	}
	



//POLYGON als Fläche einzeichen
function polyload() {
var arr= " ";
for(var i=0;i<polygon.length;i++){
arr = arr+" new GLatLng("+polygon[i]+"),";
}
alert(arr);
arr= arr.substr(0,arr.length-1);
alert(arr);
if (GBrowserIsCompatible()) {
//alert (polygon.length);
//alert(polygon[1]);
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(lng,lat), 13);
	//map.setZoom(13);
	map.mapControl = new GMapTypeControl();
	
	//map.addControl(new GMapTypeControl(1));
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	map.setMapType(G_HYBRID_MAP);
      	//geocoder = new GClientGeocoder();

var poiarea = new GPolygon(
[
arr;
], "#000", 1,1);

map.addOverlay(poiarea);
    }
	}

  //]]>
    </script>

Bei alert(arr) kommt folgendes:
Code:
 new GLatLng(48.139127,11.580214), new GLatLng(48.1414633856047,11.5773582458496), new GLatLng(48.1364230014141,11.5667152404785), new GLatLng(48.1326423885141,11.5703201293945), new GLatLng(48.139127,11.580214)

Vielen Dank nochmals für Hilfe. Irgendwas habe ich bestimmt falsch gemacht oder angenommen?

lg,
hugo
 
Zum Einen erzeugst du da keinen Array, sondern eine Zeichenkette, die den gewünschten Inhalt des Arrays wiederspiegelt.

Zum Anderen fehlen die Parameter lng und lat .
 
Hi,

danke :)
ich habe auch gesehen, dass ich die Variable fälschlicherweise mit einem ; beendete..

Die Function polyload() hat keine Parameter. Ich berechne diese in der Funktion bzw.. Fülle die Variable polygon =[] über das JavaBean. Diese wird auch korrekt gefüllt.

Es geht nur noch um Folgende Funktion zum Einzeichnen des Polygons, inzwischen habe ich das Polygon auch "geschlossen" (erster Punkt = Letzer)
Aber eine Anzeige der Map kriege ich dennoch nicht, bzw da steht es seine keine Grafiken für diesen Zoomwert vorhanden.

Ich habe nun versuch ein echtes Array poly mit den GLatLng() Werten aus dem Array polygon zu befüllen. Aber der Fehler besteht weiterhin.. Mache ich immernoch was falsch?

(sorry, da sind noch einpaar überflüssige variablen drin...)
Code:
<script type="text/javascript">


//<![CDATA[
    var map;
    var geocoder;
	// red marker icon
	var icon = new GIcon();
	icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	//icon.infoWindowAnchor = new GPoint(5, 1);
	var marker=[];
	var point=[];
	var poly=[];
	var line=null;
	var n=0;
	var polystr=null;
	var Ziel=null;
	var polygon =[];

function polyload()
{
poly.length=0; 
for(var i=0;i<polygon.length;i++)
{
poly.push(new GLatLng(polygon[i]));
}
poly.push(new GLatLng(polygon[0]));
//if(line){map.removeOverlay(line)};
alert(poly.length);
if (GBrowserIsCompatible()) {
//alert (polygon.length);
alert(polygon[0]);
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(polygon[0]), 13);
	
	map.mapControl = new GMapTypeControl();
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	map.setMapType(G_HYBRID_MAP);
	
line=new GPolygon(poly,'#FF0000', 3, 1,'#0000FF',0.2);
map.addOverlay(line);
}
}


    //]]>
</script>

Ein Beispielinhalt der Variable poygon[0]
48.139127,11.580214


Vielen Dank für die geduldige Unterstützung :))
 
Ein Beispielinhalt der Variable poygon[0]

Code:
48.139127,11.580214

Es wäre gut zu wissen, ob dieser Inhalt ein String oder ein Array ist.

Falls es ein Array ist, müsstest du es so machen:
Code:
for(var i=0;i<polygon.length;i++)
{
poly.push(new GLatLng(polygon[i][0],polygon[i][1]));
}
Falls es ein String ist, dann müsstest du ihn erst beim Komma splitten, und dann ebenso verfahren.
 
aahhh :)
der Inhalt wird als String in den Array eingefügt..
Deswegen kommt bei polygon[0] an der Stelle 0 der String: 48.139127,11.580214 raus, oder?

Kannst Du mir bitte sagen, wie genau ich verfahren muss, nachdem ich den String aus dem Array gesplittet hae? :) *liebkuck* :)
 
Wenn es wirklich ein String ist, ginge es so:
Code:
for(var i=0;i<polygon.length;i++)
{
tmp=polygon[i].split(',');
poly.push(new GLatLng(tmp[0],tmp[1]));
}
 
yuhuuuuuuuuuuuuuuuu :) ):)
Wo kann ich das Kasten Bier hinschicken? hast es dir echt verdient ;)

hier nun vollständigkeitshalber der funktionierende Code:

Code:
var map;
var marker=[];
	var point=[];
	var poly=[];
	var line=null;
	var n=0;
	var polystr=null;
	var Ziel=null;
	var polygon =[];
	var tmp=[];


function polyload()
{
poly.length=0;
tmp.length=0;
for(var i=0;i<polygon.length;i++)
{
tmp= polygon[i].split(",");
poly.push(new GLatLng(tmp[0],tmp[1]));
//alert(tmp[0]);
//alert(tmp[1]);
}
tmp.length=0;
tmp= polygon[0].split(',');
poly.push(new GLatLng(tmp[0],tmp[1]));
//if(line){map.removeOverlay(line)};
alert(poly.length);
alert(poly[0]);

if (GBrowserIsCompatible()) {
//alert (polygon.length);
//alert(polygon[0]);
	map = new GMap2(document.getElementById("map"));
	map.setCenter(poly[0], 13);

	map.mapControl = new GMapTypeControl();
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	map.setMapType(G_HYBRID_MAP);
	
line=new GPolygon(poly,'#FF0000', 3, 1,'#0000FF',0.2);
map.addOverlay(line);
}
}

danke, danke, nake, danke, danke :))))))
 
Zuletzt bearbeitet:
Sorry, aber das verschicken von Bierkästen ist laut dem Lizenzmodell nicht vorgesehen...trinke einfach eins, und alles ist gut :)
 

Neue Beiträge

Zurück