Openlayers Datenbankanbindung

hi !

weiter oben wurde geschrieben das man auch bei Vektorlayers die Textdateien verwenden kann.

Der Link http://openlayers.org/dev/examples/dynamic-text-layer.html arbeitet noch mit Text-Layern - kennt einer ein passendes Gegenstück für Vector-Layer ?

Gruß Jan :slight_smile:

Das Beispiel verwendet doch den Vector Layer (mit Text Format):


                var layer = new OpenLayers.Layer.Vector("POIs", {
                    strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],
                    protocol: new OpenLayers.Protocol.HTTP({
                        url: "textfile.txt",
                        format: new OpenLayers.Format.Text()
                    })
                });

Da ist die Überschrift nur etwas irreführend.

Gruß,
ikonor

hallo,

probier auch gerade nach dieser möglichkeit pop ups anzuzeigen, jedoch kommt bei mir immer die fehlermeldung zugriff verweigert, weiß zufällig wer woran das liegen kann? mein wms wird zwar angezeigt aber marker sind nicht vorhanden

Hallo elpiojo_,

willkommen im Forum!

Evtl. ein Same-Origin-Policy Problem? Tritt auf, wenn Datei nicht vom selben Server oder vom lokalen Dateisystem nachgeladen wird (je nach Browser).

Gruß,
Norbert

vielen dank und auch für die antwort :wink: welche datei meinst du in diesem sinne? also bei mir liegt die datei auf einem uniserver und ich greif auch auf diesen immer zu! die abfrage mittels php script funktioniert auch einwandfrei, also könnte es ja eigentlich nur an openlayers liegen oder?

hi,

bitte immer, wenn es technisch machbar ist, ein Bild mit dem Fehler oder zumindest den Text der Fehlermeldung posten.
da gibt es soooooooo viele Möglichkeiten - und zum Rumraten hab ich echt keine Lust Zeit.

Gruss
walter

Stimmt, in diesem Fall ist das wohl eher ein php Aufruf, der die Marker liefert und keine txt Datei.

Dennoch muss das php-Script und die .html Datei der Anwendung auf dem selben Server liegen. Wenn die .html Datei mit OpenLayers zum Beispiel zum Entwickeln aus dem lokalen Dateisystem geöffnet wird und das php-Script auf dem Server aufruft, geht das erst mal nicht.

sorry, also ich bekomm leider nur folgende fehlermeldung:
zeile:508
zeichen:172
fehler: zugriff verweigert
code 0
url:http://www.openlayers.org/dev/OpenLayers.js

wenn ich dann auf ok klicke, wird die map zwar ausgeführt aber die marker sind nicht ersichtlich, außer einer der liegt aber im meer!

also das ist mir klar, ich öffne die datei auch immer über den server

meine php datei sieht wie folgt aus, ich glaube langsam das es eventuell doch an ihr liegt, mir kommt vor, das die abgefragten daten nicht in das vorgeschiebne format “point\ttitle\tdescription\ticon\n” passen oder irre ich mich?


$bbx = $_GET["bbox"] ; 

$array = explode(",",$bbx);

$ble = $array[0] ;
$bbo = $array[1] ;
$bri = $array[2] ;
$bto = $array[3] ;


$betriebe = "SELECT name, homepage, telefon, breite, laenge FROM betriebe";


$result = pg_query($conn, $betriebe);
$header = "point\ttitle\tdescription\ticon\n" ;

echo $header ;

while($row = pg_fetch_object($result))
{
$daten = $row->breite.",".$row->laenge."\t".$row->name."\t"."homepage=".$row->homepage."<br>telefon=".$row->telefon."\t"."http://www.openlayers.org/dev/img/marker.png\n";
echo $daten ;
    }
pg_close($conn);
?>


Das ist noch nicht ausdiskutiert :wink:

a) wo steht der server?
b) wo wird der web-browser aufgerufen? (rechner?)
c) mit welchem url? z.B. http://mein-server.at.provider/karten/index.html
d) wo genau steht index.html? (rechner?)
e) wo genau liegt der php-script? (rechner?)

ein einfaches “ich öffne die datei auch immer über den server” reicht hier leider nicht - also Butter bei die Fische.

Die Fehlermeldung hat absolut nichts mit Dateninhalten oder Fehlern in Scripten zu tun - soweit sind wir noch garnicht.
Diese FM ist ganz charakteristisch für eine bestimmte Situation, in der sich OL einfach “weigert”, etwas zu machen ; das ist von OL aus Sicherheitsgründen so gewollt.
Und es hat nur was mit der Lage der Files zu tun.

deshalb hat sich ja ikonor bereits dazu geäußert.

gruss
walter

p.s. sag mal ein wenig zu deinem Umfeld: OS des Servers, OS des Clients, eingesetzter Browser und sowas.

alles klar :wink:

a) ich verwende den universitätsserver
b) den webbrowser wird zu hause mittels vpn augerufen damit ich überhaupt auf den server komme
c) mit folgender url ruf ich meine karte auf http://129.27.89.66/student/master_geom/hp/map.html
d) die index html ist gleich die map.html
e) das php file liegt ebenfalls imt ordner http://129.27.89.66/student/master_geom/hp/

als browser verwende ich firefox, was meist du mit os? zum server kann ich eigentlich nicht viel sagen, da ich hier keinen zugang zu den einstellungen habe.

Wenn Du die URL deiner PHP-Seite einfach im Browser aufrufst, siehst Du da die Liste der Betriebe?
Womöglich hat dein Browser die gleichen Probleme wie ich beim Aufruf und verwendet das Uni-VPN für manche Dinge nicht…

ok, es werde Licht.

sieht auf den 2. Blick eigentlich gut aus.
zum vpn: klappt das auch nicht, wenn du in der uni bist? sollte eigentlich egal sein, aber man weiss ja nie.

magst du map.html und das php posten? eventuell sieht man das was.
OL verlangt zwingend, dass map.html und der php-script auf dem gleichen Rechner liegen. Aber das scheint ja gegeben zu sein.

os bedeutet OperatingSystem - welche Platform Windows/Unix/mac? sowohl für server und client.
dann kann man sich leichter reindenken und die Vorschläge (“mach mal nen grep”) an dein Umfeld anpassen.

zum ff: der hat prima debugging-möglichkeiten. ganz frisch aktualisiert: http://www.heise.de/newsticker/meldung/Web-Entwicklung-Firebug-1-10-ist-fertig-1642952.html

gruss
walter

gerade gesehen:


sorry, also ich bekomm leider nur folgende fehlermeldung:
zeile:508
zeichen:172
fehler: zugriff verweigert
code 0
url:http://www.openlayers.org/dev/OpenLayers.js

wo kommt das www.openlayers.org/**dev/**OpenLayers.js her? das ist komisch → raus damit!

joo, da könnte was dran sein. deshalb ja auch meine Frage, wie das Ganze in der Uni (also ohne VPN) aussieht.
z.b. kann eine ungenaue DNS-Konfiguration zu unterschiedlichen Namensauflösungen führen und so das größte Chaos verursachen.

irgendwo dort ist der Hund wohl begraben.

Gruss
walter

also erst mal vielen dank für eure hilfe!

ich kann die datei über die url aufrufen und sieht wie folgt aus

point title description icon
46.677997,15.548585 Dreisiebner Stammhaus homepage=http://www.dreisiebner.com
telefon=0043-3453-2590 http://www.openlayers.org/dev/img/marker.png
46.673094,15.551529 Trunk Karl homepage=http://www.trunk.st
telefon=0043-3453-6813 http://www.openlayers.org/dev/img/marker.png
46.672776,15.548663 Weinidylle Dreisiebner homepage=http://www.weinidylle-dreisiebner.at
telefon=0043-3453-2809 http://www.openlayers.org/dev/img/mark

is nur ein kleiner auszug wollte nicht alles reinkopieren, ich vermute das dieser teil nicht richtig aufgebaut ist!

das kann ich leider nicht sagen, da ich zurzeit arbeite und nicht auf die uni komme

wenn ich das dev raus lösche wird mir mitgeteilt das open layers nicht definiert ist.

meine map.html sieht wie folgt aus:

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

 
<script type="text/javascript">

function init() {
//set up projections
 OpenLayers.ProxyHost = "/cgi-bin/proxy.py?url="
// 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
var 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 openstreetmap = new OpenLayers.Layer.OSM();
var hybrid = new OpenLayers.Layer.VirtualEarth("BING Hybrid", {
			                type: VEMapStyle.Hybrid, sphericalMercator: true });
var aerial = new OpenLayers.Layer.VirtualEarth("BING Luftbild", {
			                type: VEMapStyle.Aerial, 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 pois = new OpenLayers.Layer.Vector("POIs", {
                    
					isBaseLayer: false,
					sphericalMercator: true,
					singleTile: true,
					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([openstreetmap,hybrid, aerial, stmk, pois]);
 pois.setVisibility(true);
// 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.
                selectControl = new OpenLayers.Control.SelectFeature(pois);
                map.addControl(selectControl);
                selectControl.activate();
                pois.events.on({
                    'featureselected': onFeatureSelect,
                    'featureunselected': onFeatureUnselect
                });  
}
// Needed only for interaction, not for the display.
        function onPopupClose(evt) {
                // 'this' is the popup.
                var feature = this.feature;
                if (feature.pois) { // The feature is not destroyed
                    selectControl.unselect(feature);
                } else { // After "moveend" or "refresh" events on POIs layer all 
                         //     features have been destroyed by the Strategy.BBOX
                    this.destroy();
                }
            }
            function onFeatureSelect(evt) {
                feature = evt.feature;
                popup = new OpenLayers.Popup.FramedCloud("featurePopup",
                                         feature.geometry.getBounds().getCenterLonLat(),
                                         new OpenLayers.Size(100,100),
                                         "<h2>"+feature.attributes.title + "</h2>" +
                                         feature.attributes.description,
                                         null, true, onPopupClose);
                feature.popup = popup;
                popup.feature = feature;
                map.addPopup(popup, true);
            }
            function onFeatureUnselect(evt) {
                feature = evt.feature;
                if (feature.popup) {
                    popup.feature = null;
                    map.removePopup(feature.popup);
                    feature.popup.destroy();
                    feature.popup = null;
                }
            }



</script>
</head>
<body onload="init()">
<div id="map" style="width:700px; height:700px;"></div>
<div id="coordinates"></div>
</body>
</html>

und die php so:

$conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");



$bbx = $_GET["bbox"] ; 

$array = explode(",",$bbx);

$ble = $array[0] ;
$bbo = $array[1] ;
$bri = $array[2] ;
$bto = $array[3] ;


$betriebe = "SELECT name, homepage, telefon, breite, laenge FROM betriebe";


$result = pg_query($conn, $betriebe);
$header = "point\ttitle\tdescription\ticon\n" ;

echo $header ;

while($row = pg_fetch_object($result))
{
$daten = $row->breite.",".$row->laenge."\t".$row->name."\t"."homepage=".$row->homepage."<br>telefon=".$row->telefon."\t"."http://www.openlayers.org/dev/img/marker.png\n";
echo $daten ;
    }
pg_close($conn);
?>

die verbindungsangaben hab ich draußen gelassen.

Ersetz doch mal

var pois = new OpenLayers.Layer.Vector("POIs"
                    .....
                    url: "allebetriebe.php",
                    .....

durch eine richtige URL:

var pois = new OpenLayers.Layer.Vector("POIs"
                    .....
                    url: "http://129.27.89.66/student/master_geom/hp/allebetriebe.php",
                    .....

Grüße, Max

ändert sich leider nichts

dann ruf jemanden an, der vor Ort ist. er soll nur mal kurz die seite aufrufen.

warum das? nimm das erste mit dev mal ganz raus - oder hast du einen speziellen Grund dafür?

klar, die gehen uns nix an.

die Scripte schauen sich ja Kollegen an; ich bin halt auf der Netzwerkschiene und habe immer noch das VPN unter Verdacht.

das packen mer schon
Gruss
walter

p.s. wieviele Semester hast du noch Zeit? :wink:

leider sind aktuell gerade ferien und daher findet sich keiner der auf der uni ist! selbst kann ich leider erst in 2 wochen dort vorbei schauen

hab ich geändert, musste aber dann den code umstellen weil die aktion für den hybrid bing maps layer nicht erlaubt war.
der sieht jetzt so aus, aber dann funktioniert gar nichts mehr :slight_smile:

var hybrid = new OpenLayers.Layer.Bing({
                name: "Hybrid",
                key: apiKey,
                type: "AerialWithLabels",
		sphericalMercator: true
		});
			

naja das ist ein kleiner teil meiner masterarbeit und die sollte mit allem im november abgeschlossen sein :wink:

das mit openlayers.dev ist geklärt. das braucht man, wenn man einen proxy einsetzt.
du hast ja etwas weiter unten

 
function init() {
//set up projections
 OpenLayers.ProxyHost = "/cgi-bin/proxy.py?url="

stehen. brauchst du den? da komm ich nämlich nicht weiter, da ich sowas noch nie gemacht habe.
sollte das nur für die wms-hintergründe notwendig sein, schalte diese (und auch den proxy-host) temporär ab.

hier ist ein foren-Beitrag, der wahrscheinlich dein Problem beschreibt. ob da ne lösung steht, kann ich nicht beurteilen.
http://gis.stackexchange.com/questions/21761/setup-own-openlayers-proxyhost

jedenfalls gibt es da einiges zu beachten, sonst funzt es nicht.

erscheint mir sogar noch plausibler als das vpn.

Gruss
walter

ach ja, wenn ich nur die html-seite (map.html) auf meinen lokalen mini-server lege, bekomm ich das:

also es funktioniert im Prinzip - es sei denn, du hast uns verschwiegen, wann genau der Fehler auftritt. der seitenaufbau klappt erstmal bis auf das rosa zeug.