Koordinaten per Link übergeben

Hey, ich hab eine frage, is es möglich Koordinaten per Link zu übergeben und dann auf der Karte anzuzeigen?

ich hab mir ein sql abfrage aufgebaut in dem alle vorhandenen einträge dargestellt werden. daneben hab ich einen link mit anzeigen eingebaut, ich möchte nun wenn ich auf anzeigen klicke das der ausgewählte betrieb dargestellt wird.

 $sql = "SELECT name FROM betriebe";
		
	// Mysql Abfrage wird durchgeführt
	$result = pg_query($conn, $sql);
		
			
	// Ergebnis wird ausgegeben
	while($row = pg_fetch_object($result)){
	echo"<table>";
	echo "<tr bgcolor=#dddddd>
	<td width=150>$row->name</td>
	<td width=80><a href='map.html'>Anzeigen</a></td>
	</tr> </table>";
					
		}
	
	pg_close($conn);
?>

Klick einfach mal in der Mapnikkarte auf “Permalink”. Dann bekommst Du Links in dieser Art:
http://www.openstreetmap.org/?lat=47.678202&lon=9.145587&zoom=18&layers=M

Hi,

Es müsste doch reichen etwas in der Form eines Permanentlinks aufzurufen. Wenn man dort lat und lon durch mlat und mlon ersetzt wird auch ein Pin angezeigt: http://www.openstreetmap.org/?mlat=-33.87232&mlon=151.27971&zoom=15&layers=M

welche Karte?
ich sehe da nur ein php-Schnipsel aber das gesamte “Umfeld” fehlt. ist das ne openlayers-Karte?

Gruss
walter

also meine karte könnte ihr leider nicht sehen da man nur mittels vpn auf den uni server kommt

meine code für die karte schaut wie folgt aus

<html>
<head>
<!-- OpenLayers core js -->
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
 
<!-- OpenStreetMap base layer js -->
<script
src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js">
</script>
 
 
<script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us">
</script>

 
<script type="text/javascript">

var map, selectControl, selectedFeature;

function onPopupClose(evt) {
    selectControl.unselect(selectedFeature);
}
function onFeatureSelect(feature) {
    selectedFeature = feature;
    var tags = feature.attributes;
    var infoHtml = "<table>";
    for (var key in tags) {
       infoHtml += "<tr><td>" + tags[key] + "</td></tr>";
    }
    infoHtml += "</table>";
    popup = new OpenLayers.Popup.FramedCloud("chicken", 
                             feature.geometry.getBounds().getCenterLonLat(),
                             null,
                             infoHtml,
                             null, true, onPopupClose);
    feature.popup = popup;
    map.addPopup(popup);
}
function onFeatureUnselect(feature) {
    map.removePopup(feature.popup);
    feature.popup.destroy();
    feature.popup = null;
}




function init() {
//set up projections
 
// World Geodetic System 1984 projection
var WGS84 = new OpenLayers.Projection("EPSG:4326");
 
// WGS84 Google Mercator projection
var WGS84_google_mercator = new OpenLayers.Projection("EPSG:900913");
 
//Initialize the map
//creates a new openlayers map in the <div> html element id map
 map = new OpenLayers.Map ("map", {
controls:[
//allows the user pan ability
new OpenLayers.Control.Navigation(),
//displays the pan/zoom tools
new OpenLayers.Control.PanZoom(),
//displays a layer switcher
new OpenLayers.Control.LayerSwitcher(),
//displays the mouse position's coordinates in a <div> html element with
new OpenLayers.Control.MousePosition({
div:document.getElementById("coordinates")
})
],
projection: WGS84_google_mercator,
displayProjection: WGS84
} );
 
//base layers
var apiKey = "Ap3i15CGW7YGzZCAkHqKmf3pVxGwDTAd0NLywcxTH3g71vWW1GgLqcD56B_deegZ";


var road = new OpenLayers.Layer.Bing({
                name: "Road",
                key: apiKey,
                type: "Road",
				sphericalMercator: true
					});
							
 
var stmk = new OpenLayers.Layer.WMS( "stmk", "http://129.27.89.66/cgi-bin/mapserv?",
					{ map: "F:/ms4w/Apache/htdocs/student/master_geom/hp/map.map", layers: "stmk", transparent: "true"},
					{
						isBaseLayer: false,
						sphericalMercator: true,
						singleTile: true,
						opacity:0.8
					});
var offen = new OpenLayers.Layer.Vector("offen", {
                    projection: new OpenLayers.Projection("EPSG:4326"),
					isBaseLayer: false,
					opacity:0.8,
                    strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],
                    protocol: new OpenLayers.Protocol.HTTP({
                    url: "offen.php",
                        format: new OpenLayers.Format.Text()
                    })
                });						

 var pois = new OpenLayers.Layer.Vector("POIs", {
                    projection: new OpenLayers.Projection("EPSG:4326"),
					isBaseLayer: false,
					opacity:0.8,
                    strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],
                    protocol: new OpenLayers.Protocol.HTTP({
                    url: "allebetriebe.php",
                        format: new OpenLayers.Format.Text()
                    })
                });
				
				
			
map.addLayers([road, stmk, offen, pois]);
var options = { hover: false, onSelect: onFeatureSelect, onUnselect: onFeatureUnselect };
selectControl = new OpenLayers.Control.SelectFeature([pois,offen], options);
map.addControl(selectControl);
selectControl.activate();

// map extent
var mapextent = new OpenLayers.Bounds(15.39633, 46.61470, 15.56113, 46.72708).transform(WGS84, map.getProjectionObject());
map.zoomToExtent(mapextent);
    // Interaction; not needed for initial display.
      
}
			
			
</script>
</head>
<body onload="init()">
<div id="map" style="width:700px; height:700px;"></div>
<div id="coordinates"></div>


</body>
</html>[quote=Dennis[B]]Klick einfach mal in der Mapnikkarte auf "Permalink". Dann bekommst Du Links in dieser Art:
http://www.openstreetmap.org/?lat=47.67 … 8&layers=M[/quote]

ich les aber meine daten aus meiner eigenen datenbank aus darin sind auch die koordinaten verspeichert daher müsste ich irgendwie die verspeicherten koordinaten an die karte weitergeben

Ersetz mal das da


// map extent
var mapextent = new OpenLayers.Bounds(15.39633, 46.61470, 15.56113, 46.72708).transform(WGS84, map.getProjectionObject());
map.zoomToExtent(mapextent);
 

durch


// map extent
var mapextent = new OpenLayers.Bounds(15.39633, 46.61470, 15.56113, 46.72708).transform(WGS84, map.getProjectionObject());
if (!map.getCenter()) {map.zoomToExtent(mapextent);}
 

dann sollte ein Permalink der Form “…?zoom=3&lat=46.7&lon=15.5” funktionieren.

Grüße, Max

das is ja genau mein problem :slight_smile: ich weiß eben nicht wie ich das jetzt mit dem link auf die karte übergeben. wenn ich das jetzt richtig verstehe müsste ich jetzt bei lat=46.7 das feld breite und bei lon= das feld laenge einbauen, damit das automatisch übergeben wird?

An eine Openlayer Karte kannst Du die Parameter folgendermassen mitgeben:

   <a href="sommerreise2012AU.htm?zoom=8&lat=47.5&lon=11.2" target="Bildframe" > Übersicht </a> <br><br>
   <a href="sommerreise2012AU.htm?zoom=10&lat=48.2&lon=11.5" target="Bildframe"  > München 18.-20.6. </a>  <br>

sommerreise2012AU.htm
enthält u.a.

	</style>
	<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
	<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>

	<script type="text/javascript">
	// complex map object
		var map;
 
	// Start position for the map (hardcoded here for simplicity,
	// but maybe you want to get from URL params)
 
		var lat=47.5; // !! center of map  
		var lon=11.2;
		var zoom=9;		

		function init(){
		map = new OpenLayers.Map('map',
usw. 

Ich hoffe, das beantwortet Deine Frage.

mein problem is aber das ich 25 links habe, das ganze schaut also so aus:
http://imageshack.us/photo/my-images/221/anzeige.png/
ich würde gern dieses lat long autmotisch auslesen aus meiner datenbank

<a href="sommerreise2012AU.htm?zoom=10&lat=[b]$breite[/b]&lon=[b]$laenge[/b]" target="Bildframe"  > München 18.-20.6. </a>  <br>

wäre das dann so richtig?

da seh ich nichts was ich dem hier gesagten zuordnen kann!

Ich glaube nicht, dass Du direkt Variable in html reinschreiben kannst, aber mit java script kannst Du den String href=“…” schon setzen.

naja die namen hab ich rausgelöscht die sind ja auch nicht wichtig ^^ das sollte einfach zeigen wie ich das meine, links stehen namen und rechts steht eben der link der bei klick auf den gewünschten namen in der karte heranzoomt.

vl hab ich mich ein wenig umständlich ausgedrück :slight_smile:

ja das is mir klar :slight_smile: deswegen schreibe es ja auch mit php, siehe oben mein php code

Alles was da oben steht, bezieht sich auf Permalinks: Du übergibst Länge und Breite und Zoom per Link, rufst eine neue Seite mit Karte auf und die ist dann passend zentriert. Übergeben wirds so wie Du in #7 vermutest.

Das da

klingt aber eher danach als wolltest Du eine bereits sichtbare Karte nachträglich verschieben. So wie bei den Suchergebnissen bei openstreetmap.org.

Da musst Du Deine Links irgendwie so aussehen lassen:

<a href=# onClick="jumptolonlat(Länge,Breite);return false;">Ortsname</a>

mit

function jumptolonlat(lon,lat){
       var LonLat = new OpenLayers.LonLat(lon,lat).transform(new OpenLayers.Projection("EPSG:4326"),map.getProjectionObject());
       map.setCenter(LonLat,12); 
      }

(so ist die Sucherei zumindest bei mir gelöst)

Grüße, Max

ja genau so hab ich mir das vorgestellt, bei mir wirds dann in der finalen version auch so sein, das es links ein suchfeld gibt, diese hab ich allerdings mit “live suche” gelöst also wird ein buschstabe eingegeben kommen vorschläge. ist der richtige vorschlag dabei klickt man auf anzeigen und zb wie bei dir münchen wird es dann auf der karte zentriert.

werd ich mal ausprobieren

habs jetzt zu erst mal mit einer fixen länge und breite probiert aber leider ändert sich daran nichts

$sql = "SELECT name FROM betriebe";
        
        // Mysql Abfrage wird durchgeführt
        $result = pg_query($conn, $sql);
        
            
        // Ergebnis wird ausgegeben
        while($row = pg_fetch_object($result)){
            echo"<table>";
    echo "<tr bgcolor=#dddddd>
    <td width=150>$row->name</td>
    <td width=80><a href='map.html' onClick='jumptolonlat(46.69,15.45);return false;'>Anzeigen</a></td>
    </tr> </table>";
                    
        }

er sagt mir das jumtolonlat nicht definiert ist, was mir durch aus klar is wenn ich

<script type="text/javascript">

nicht mit einbaue, tu ich das wird mir folgender fehler gemeldet SyntaxError: invalid XML attribute value

Dieses “jumptolonlat()” ist ja ne selber geschreibene Funktion, der zweite Code-Teil in #12. Das musst Du auch mit einbauen.

das is mir natürlich bewusst ^^ den zweiten code hab ich natürlich in meinen script eingebaut wo die karte aufgerufen wird

man sollte halt nicht länge mit breite verwechseln ^^ danke hat genau so geklappt wie ich mir das vorgestellt habe!