JavaScript Google Maps API

1337

Lt. Junior Grade
Registriert
Aug. 2010
Beiträge
324
Hallo,
ich arbeite gerade an einem Projekt, bei dem eine Karte mit Google Maps dargestellt werden soll. Mithilfe der Doku und den Samples habe ichs schon geschafft, mein eigenes Kartenmaterial zu erstellen und zu nutzen, sowie Marker einzufügen. Allerdings habe ich noch ein paar "Wünsche" ^^

Also einmal sollen bestimmte Marker nur auf einem Kartentyp angezeigt werden. Ich habe das mit dem Eventhandler "maptypeid_changed" versucht, aber das funktioniert nicht. Da bräuchte ich etwas Nachhilfe.

Dann wollte ich noch fragen ob es ohne großen Aufwand ginge, die Marker nur einmal anzuzeigen und nicht in x-Richtung zu wiederholen, da ich meine Karte auch nicht wiederhole.

Auch würde ich gerne dynamisch Verbindungslinien zwischen zwei Markern erstellen, also eine Methode in der Art verbindungZeichnen(startmarker, zielmarker). Gibts da was oder ginge das nur mit einem Polygon?

Als letztes suche ich noch ein Modul für Swing um diese Karte in eine GUI einzubinden, wichtig wäre, dass dieses Modul eine Schnittstelle hat, damit ich vom Java-Code aus Methoden der Karte aufrufen kann. Gibts sowas?

Als letztes noch mein Code bis jetzt:

Code:
<!DOCTYPE html>
<html>
<head>
<title>Routenplaner</title>
<link href="/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>

	var mapTypes = {};
	
	mapTypes['erdgeschoss'] = {
		getTileUrl: function(coord, zoom) {
			var bound = Math.pow(2, zoom);
			return "map/erdgeschoss" + "/" + zoom + "/" + coord.x + (bound - coord.y - 1) + ".jpg";
		},
		tileSize: new google.maps.Size(256, 256),
		maxZoom: 3,
		minZoom: 0,
		name: "Erdgeschoss"
	};


	mapTypes['ersterStock'] = {
		getTileUrl: function(coord, zoom) {
			var bound = Math.pow(2, zoom);
			return "map/ersterstock" + "/" + zoom + "/" + coord.x + (bound - coord.y - 1) + ".jpg";
		},
		tileSize: new google.maps.Size(256, 256),
		maxZoom: 3,
		minZoom: 0,
		name: "1. Stock"
	};
	
	mapTypes['zweiterStock'] = {
		getTileUrl: function(coord, zoom) {
			var bound = Math.pow(2, zoom);
			return "map/zweiterstock" + "/" + zoom + "/" + coord.x + (bound - coord.y - 1) + ".jpg";
		},
		tileSize: new google.maps.Size(256, 256),
		maxZoom: 3,
		minZoom: 0,
		name: "2. Stock"
	};

	
	var map;
	var mapTypeIds = [];
	
	function initialize() {
		
		for (var key in mapTypes) {
			mapTypeIds.push(key);
		}
		
		var mapOptions = {
			zoom: 0,
			center: new google.maps.LatLng(0, 0),
			streetViewControl: false,
			
			mapTypeControlOptions: {
				mapTypeIds: mapTypeIds,
				style: google.maps.MapTypeControlStyle.DEFAULT
			}
		};
		
		map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
		
		var marker1 = new google.maps.Marker({
			position: new google.maps.LatLng(0, 0), 
			map: map,
			title:"Test"
		});
		
		var marker2 = new google.maps.Marker({
			position: new google.maps.LatLng(0, 100), 
			map: map,
			title:"Test2"
		});
		
		google.maps.event.addListener(map, 'maptypeid_changed', function() {
			if (map.getMapTypeId() = 'erdgeschoss'){
				marker1.setVisible(true);
				marker2.setVisible(false);
			}
			if (map.getMapTypeId() = 'ersterStock'){
				marker1.setVisible(false);
				marker2.setVisible(true);
			}
			if (map.getMapTypeId() = 'zweiterStock'){
				marker1.setVisible(false);
				marker2.setVisible(false);
			}
        });
		
		for (key in mapTypes) {
			map.mapTypes.set(key, new google.maps.ImageMapType(mapTypes[key]));
		}
		
		map.setMapTypeId('erdgeschoss');
	}
	
  </script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width: 640px; height: 480px;"></div>
</body>
</html>
 
Hallo 1337,

da das spezielle Fragen/Wünsche zur Google MapsAPI sind, empfehle ich dir dich an das entsprechende Hilfeforum (Google Groups) zu wenden ;-)

Gruß Ralf
 
Wenigstens kommt überhaupt ne Antwort, ich dachte schon die Frage zu blöd gestellt ^^
Und danke für den Link, ich poste dann dort nochmal mit meinem aktuellen Status.
 
Nun wo klemmts denn nun genau? Du hast gar keine richtige Frage gestellt, nur Wünsche geäußert ;)

In folgenden Zeilen könnte ich mir vorstellen, dass du ein Problem hast auf das dich die Debugger nicht hinweisen, einzig die IDEs (zumindest VS würde dir in einer Warnung aufzeigen, dass du in einem Ausdruck lediglich ein Statement abgibst:
Code:
if (map.getMapTypeId() = 'erdgeschoss') {
  marker1.setVisible(true);
  marker2.setVisible(false);
}
Stattdessen meinst du wahrscheinlich
Code:
if (map.getMapTypeId() === 'erdgeschoss') {
  marker1.setVisible(true);
  marker2.setVisible(false);
}
(Beachte das triple equals! Gilt auch für die anderen beiden if's)
Für Linien gibt's auch Polyline! Marker sind ein wenig unflexibel, ich verwende daher ein eigenes Overlay, in dem ich dann HTML5-einfache div's positioniere. Schau dir doch mal mein Spiel der Städte auf http://metadea.de/Spiel/ an (das auch als Experiment für GMaps API v3 entstanden ist) und vergiss nicht den Quellcode zu checken ;)
 
Zurück
Oben