x

Openlayers Datenbankanbindung


  1. Openlayers Datenbankanbindung · brogo (Gast) · 06.12.2011 13:34 · [flux]

    Hallo!

    Mal wieder ein Thema, von dem ich keine Ahnung habe, mich aber durch Onlinehilfen fast bis zum Ziel durchwuseln konnte.

    Ich habe eine Karte [1]; beim Aufruf oder Verschieben wird eine Datenbankabfrage gestartet und liefert mir einen Text zurück (zur Demonstration wird dieser als Popup angezeigt), wie Openlayers es für einen Text-Layer [2] erwartet.

    Nun scheitere ich aber daran, diese Daten an OL weiterzuleiten. OL erwartet ja für die Textdatei einen Dateipfad oder ein URL. Weiß jemand Rat? Ich kenne mich ansonsten mit JS, PHP und HTML nicht sonderlich aus.

    Christian

    [1] http://osm.duschmarke.de/index_php.html
    [2] http://dev.openlayers.org/releases/Open … xt-js.html


    • Re: Openlayers Datenbankanbindung · viw (Gast) · 06.12.2011 13:48 · [flux]

      Sieht doch Klasse aus!
      Jetzt musst du openlayers nur die URL verraten, aus welcher du den Inhalt deines Popups erstellst. Openlayers ist dabei nicht so mäklig wie Windows. Es darf also auch ruhig http://meineSeite/punkte.php heißen. Hauptsache darin wird alles brav nach den Regeln der CSV/TXT Datei geschrieben. Auf den ersten Blick sieht dein Text genauso aus.
      Mich würde natürlich noch interessieren, wie du Openlayers dazu bringst diese Anfrage zu machen. Und ob man das eventuell etwas tunen kann. Zum Beispiel größerer Bereich aber dafür erst wieder anfragen, wenn man über den bereich hinauskommt, um den Datenbankserver etwas zu entlasten.


    • Re: Openlayers Datenbankanbindung · brogo (Gast) · 06.12.2011 15:15 · [flux]

      viw wrote:

      Jetzt musst du openlayers nur die URL verraten, aus welcher du den Inhalt deines Popups erstellst.

      Die Adresse ist ja nicht fix, da die Bereichsgrenzen als Variablen übergeben werden. Die Abfrage ist sieht z.B. so aus:

      http://osm.duschmarke.de/dbcsv.php?&ble=10.701162338257&bbo=53.985442626656&bri=10.798837661743&bto=54.014552284368
      

      viw wrote:

      Mich würde natürlich noch interessieren, wie du Openlayers dazu bringst diese Anfrage zu machen. Und ob man das eventuell etwas tunen kann. Zum Beispiel größerer Bereich aber dafür erst wieder anfragen, wenn man über den bereich hinauskommt, um den Datenbankserver etwas zu entlasten.

      In der HTML-Datei 'index_php.html' ist der Abschnitt nach "//events wenn die Kartenausschnitte verschoben werden" interessant. Da werden die Bereichsgrenzen ermittelt und an die PHP-Datei übermittelt.

      <html>
      <head>
      <title>Christians␣Kosmos-Test</title>
      <link␣rel="stylesheet"␣type="text/css"␣href="map.css">
      <!--[if␣IE]>
      <link␣rel="stylesheet"␣type="text/css"␣href="ie_map.css">
      <![endif]-->
      
      <script␣src="http://www.openlayers.org/api/OpenLayers.js"></script>
      <script␣src="grid.js"></script>
      <script␣src="cbmaps.js"></script>
      <script␣src="gpx.js"></script>
      <script␣type="text/javascript">
      //␣Start␣position␣for␣the␣map
      var␣lat=54.00
      var␣lon=10.75
      var␣zoom=14
      
      var␣ble␣=␣0
      var␣bbo␣=␣0
      var␣bri␣=␣0
      var␣bto␣=␣0
      
      var␣leftBottom␣=␣new␣OpenLayers.LonLat(10.5,53.75)
      .transform(new␣OpenLayers.Projection("EPSG:4326"),␣new␣OpenLayers.Projection("EPSG:900913")␣)
      var␣rightTop␣=␣new␣OpenLayers.LonLat(11.05,54.20)
      .transform(new␣OpenLayers.Projection("EPSG:4326"),␣new␣OpenLayers.Projection("EPSG:900913")␣)
      var␣options␣=␣{restrictedExtent:␣extent}
      var␣extent␣=␣new␣OpenLayers.Bounds(leftBottom.lon,␣leftBottom.lat,␣rightTop.lon,␣rightTop.lat);
      
      var␣map;
      
      function␣init()␣{
      
      map␣=␣new␣OpenLayers.Map␣("map",␣{
      controls:[
      new␣OpenLayers.Control.Navigation(),
      new␣OpenLayers.Control.PanZoomBar(),
      new␣OpenLayers.Control.LayerSwitcher(),
      new␣OpenLayers.Control.Permalink(),
      new␣OpenLayers.Control.Attribution()],
      numZoomLevels:␣17,
      units:␣'m',
      projection:␣new␣OpenLayers.Projection("EPSG:900913"),
      displayProjection:␣new␣OpenLayers.Projection("EPSG:4326")
      }␣);
      map.restrictedExtent␣=␣extent;
      //events␣wenn␣die␣Kartenausschnitte␣verschoben␣werden
      map.events.register("moveend",␣map,␣function()␣{
      var␣begrenz␣=␣map.getExtent()␣.transform(new␣OpenLayers.Projection("EPSG:900913"),␣new␣OpenLayers.Projection("EPSG:4326")).toArray();
      ble␣=␣begrenz[0];
      bbo␣=␣begrenz[1];
      bri␣=␣begrenz[2];
      bto␣=␣begrenz[3];
      //alert("Links␣"+ble+"\nUnten␣"+bbo+"\nRechts␣"+bri+"\nOben␣"+bto);
      function␣handler(request)␣{
      alert(request.responseText);
      }
      
      var␣request␣=␣OpenLayers.Request.GET({
      url:␣"[url=http://osm.duschmarke.de/dbcsv.php?&ble=\+ble+\&bbo=\+bbo+\&bri=\+bri+\&bto=]http://osm.duschmarke.de/dbcsv.php?&ble=\"+ble+\"&bbo=\"+bbo+\"&bri=\"+bri+\"&bto=[/url]"+bto␣,
      callback:␣handler
      });
      
      });
      
      //␣Basis-Karten␣definieren
      layerMapnik␣=␣new␣OpenLayers.Layer.OSM.Mapnik("eigener␣Mapnik-Style");
      map.addLayer(layerMapnik);
      layerKosmos␣=␣new␣OpenLayers.Layer.OSM.Kosmos("Maperitive");
      map.addLayer(layerKosmos);
      layerTilesAtHome␣=␣new␣OpenLayers.Layer.OSM.Osmarender("Original-Osmarender");
      map.addLayer(layerTilesAtHome);
      
      pois␣=␣new␣OpenLayers.Layer.Text(␣"Hundekottüten",
      //␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣{␣location:"hundekot.txt",
      {␣location:␣␣␣␣"[url=http://osm.duschmarke.de/dbcsv.php?&ble=\+ble+\&bbo=\+bbo+\&bri=\+bri+\&bto=]http://osm.duschmarke.de/dbcsv.php?&ble=\"+ble+\"&bbo=\"+bbo+\"&bri=\"+bri+\"&bto=[/url]"+bto␣␣,
      projection:␣map.displayProjection
      });
      map.addLayer(pois);
      pois.setVisibility(true);
      
      var␣zoomUnits=␣[
      30*3600,␣␣␣␣//␣zoom=0
      30*3600,
      15*3600,
      10*3600,
      5*3600,
      5*3600,
      2*3600,
      1*3600,
      30*60,
      20*60,
      10*60,␣␣␣␣␣␣␣␣//␣zoom=10
      5*60,
      2*60,
      1*60,
      30,
      30,
      12,
      6,
      6,
      3␣␣␣␣␣␣␣␣//␣zoom=19
      ];
      var␣gitter␣=␣new␣OpenLayers.Layer.GridWGS("Koordinatenraster",␣␣␣␣{zoomUnits:␣zoomUnits});
      map.addLayers([gitter]);
      gitter.setVisibility(false);
      
      var␣ohtrack␣=␣new␣OpenLayers.Layer.GPX("OH-Track","track.gpx","#ff00ff");
      map.addLayers([ohtrack]);
      ohtrack.setVisibility(false);
      
      var␣auswertebereich␣=␣new␣OpenLayers.Layer.Vector("Bereich",␣{
      strategies:␣[new␣OpenLayers.Strategy.Fixed()],
      protocol:␣new␣OpenLayers.Protocol.HTTP({
      url:␣"areas.kml",
      format:␣new␣OpenLayers.Format.KML()
      }),
      projection:␣new␣OpenLayers.Projection("EPSG:4326")
      });
      map.addLayers([auswertebereich]);
      auswertebereich.setVisibility(false);
      
      var␣lonLat␣=␣new␣OpenLayers.LonLat(lon,␣lat).transform(new␣OpenLayers.Projection("EPSG:4326"),␣map.getProjectionObject());
      
      map.setCenter␣(lonLat,␣zoom);
      }
      
      </script>
      
      </head>
      <body␣onload="init()">
      <div␣id="sidebar">
      <p>Lorem␣ipsum␣dolor␣sit␣amet,␣consectetuer␣adipiscing␣elit.␣Aenean␣commodo␣ligula␣eget␣dolor.␣Aenean␣massa.</p>
      
      <p>␣Cum␣sociis␣natoque␣penatibus␣et␣magnis␣dis␣parturient␣montes,␣nascetur␣ridiculus␣mus.␣Donec␣quam␣felis,␣ultricies␣nec,␣pellentesque␣eu,␣pretium␣quis,␣sem.␣Nulla␣consequat␣massa␣quis␣enim.</p>
      
      <p>␣Donec␣pede␣justo,␣fringilla␣vel,␣aliquet␣nec,␣vulputate␣eget,␣arcu.␣In␣enim␣justo,␣rhoncus␣ut,␣imperdiet␣a,␣venenatis␣vitae,␣justo.␣Nullam␣dictum␣felis␣eu␣pede␣mollis␣pretium.␣Integer␣tincidunt.␣Cras␣dapibus.␣Vivamus␣elementum␣semper␣nisi.␣Aenean␣vulputate␣eleifend␣</p>
      </div>
      <div␣id="mapcontainer">
      <div␣id="map">
      
      <div␣id="location"></div>
      </div>
      </div>
      </body>
      </html>
      

      Dann gibt es die Datei 'dbcsv.php' welche die eigentliche Abfrage macht und die Daten mit Headerzeile formatiert. Die Datenbankverbidung wird vorher mit 'dbconnect.php' hergestellt.

      <?php
      
      $bbo␣=␣$_GET["bbo"]␣;
      $bto␣=␣$_GET["bto"]␣;
      $ble␣=␣$_GET["ble"]␣;
      $bri␣=␣$_GET["bri"]␣;
      
      include("dbconnect.php");
      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣name␣FROM␣pois
      WHERE␣amenity␣LIKE␣'post_box'
      AND␣lat␣BETWEEN␣$bbo␣AND␣$bto
      AND␣lon␣BETWEEN␣$ble␣AND␣$bri
      LIMIT␣10")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      
      $header␣=␣"lat\tlon\ticon\ticonSize\ticonOffset\ttitle\tdescription\n"␣;
      
      echo␣$header␣;
      
      while($row␣=␣mysql_fetch_object($ergebnis))
      {
      $daten␣=␣$row->lat."\t".$row->lon."\t"."http://www.openlayers.org/dev/img/marker.png\t"."20,20\t"."-18,-10\t".$row->name."\n"␣;
      echo␣$daten␣;
      }
      
      ?>
      

      dbconnect.php

      <?php
      mysql_connect("Name_MYSQL-Server","Name_Datenbank","Passwort")␣or␣die␣("Keine␣Verbindung␣moeglich");;
      mysql_select_db("Name_datenbank")␣␣or␣die␣("Die␣Datenbank␣existiert␣nicht.");;
      ?>
      

      Christian


    • Re: Openlayers Datenbankanbindung · viw (Gast) · 06.12.2011 15:34 · [flux]

      Also ich würde es genau damit versuchen:
      http://osm.duschmarke.de/dbcsv.php?&ble … +bri+\&bto

      Wenn der Ausschnitt verschoben wird werden die Variablen aktualisiert und dann sollte auch die Datei aktualisiert werden. Eventuell musst du den Layer dann nochmal neuladen. Falls das nicht möglich ist rausschmeißen und neu erstellen.

      Vielen Dank für den Code.


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 06.12.2011 17:00 · [flux]

      Ich glaube halt, dass der Text Layer für dynamisches Nachladen nicht gemacht ist und man sich deshalb verbiegen muss, um das trotzdem hinzubekommen.

      Passender fände ich in diesem Fall den Vector Layer mit BBox Strategy und Text Format, wie in diesem Beispiel:

      http://openlayers.org/dev/examples/dyna … layer.html

      Den moveend Event handler könnte man sich damit komplett sparen, das übernimmt dann die BBox Strategy. Dafür muss man halt das Popup-Handling selbst machen, das kann man aber aus dem Beispiel übernehmen.

      Gruß,
      ikonor


    • Re: Openlayers Datenbankanbindung · brogo (Gast) · 07.12.2011 09:41 · [flux]

      ikonor wrote:

      Ich glaube halt, dass der Text Layer für dynamisches Nachladen nicht gemacht ist und man sich deshalb verbiegen muss, um das trotzdem hinzubekommen.

      Kann es sein, daß Text-Layer prinzipiell nicht so sinnvoll ist? Für mich scheint es so, als wenn alles andere auf mit einem Vector-Layer geht. Ist Text-Layer in OL nur noch aus Kompatibiltätsgründen drin? Vielleicht sollte man die Anfänger-Beispiele im Wiki auch auf Vector-Layer umstellen, um nicht in die Text-Sackgasse zu laufen.

      ikonor wrote:

      Den moveend Event handler könnte man sich damit komplett sparen, das übernimmt dann die BBox Strategy. Dafür muss man halt das Popup-Handling selbst machen, das kann man aber aus dem Beispiel übernehmen.

      Habe ich gamcht und jetzt läuft es auch. [1]

      Die html-Datei sieht jetzt so aus:

      <html>
      <head>
      <title>Christians␣Kosmos-Test</title>
      <link␣rel="stylesheet"␣type="text/css"␣href="map.css">
      <!--[if␣IE]>
      <link␣rel="stylesheet"␣type="text/css"␣href="ie_map.css">
      <![endif]-->
      
      <script␣src="http://www.openlayers.org/api/OpenLayers.js"></script>
      <script␣src="grid.js"></script>
      <script␣src="cbmaps.js"></script>
      <script␣src="gpx.js"></script>
      <script␣type="text/javascript">
      //␣Start␣position␣for␣the␣map
      var␣lat=54.00
      var␣lon=10.75
      var␣zoom=14
      
      var␣leftBottom␣=␣new␣OpenLayers.LonLat(10.5,53.75)
      .transform(new␣OpenLayers.Projection("EPSG:4326"),␣new␣OpenLayers.Projection("EPSG:900913")␣)
      var␣rightTop␣=␣new␣OpenLayers.LonLat(11.05,54.20)
      .transform(new␣OpenLayers.Projection("EPSG:4326"),␣new␣OpenLayers.Projection("EPSG:900913")␣)
      var␣options␣=␣{restrictedExtent:␣extent}
      var␣extent␣=␣new␣OpenLayers.Bounds(leftBottom.lon,␣leftBottom.lat,␣rightTop.lon,␣rightTop.lat);
      
      var␣map;
      
      function␣init()␣{
      
      map␣=␣new␣OpenLayers.Map␣("map",␣{
      controls:[
      new␣OpenLayers.Control.Navigation(),
      new␣OpenLayers.Control.PanZoomBar(),
      new␣OpenLayers.Control.LayerSwitcher(),
      new␣OpenLayers.Control.Permalink(),
      new␣OpenLayers.Control.Attribution()],
      numZoomLevels:␣17,
      units:␣'m',
      projection:␣new␣OpenLayers.Projection("EPSG:900913"),
      displayProjection:␣new␣OpenLayers.Projection("EPSG:4326")
      }
      );
      
      //␣Basis-Karten␣definieren
      layerMapnik␣=␣new␣OpenLayers.Layer.OSM.Mapnik("eigener␣Mapnik-Style");
      map.addLayer(layerMapnik);
      layerKosmos␣=␣new␣OpenLayers.Layer.OSM.Kosmos("Maperitive");
      map.addLayer(layerKosmos);
      layerTilesAtHome␣=␣new␣OpenLayers.Layer.OSM.Osmarender("Original-Osmarender");
      map.addLayer(layerTilesAtHome);
      
      var␣pois␣=␣new␣OpenLayers.Layer.Vector("POIs",␣{
      projection:␣new␣OpenLayers.Projection("EPSG:4326"),
      strategies:␣[new␣OpenLayers.Strategy.BBOX({resFactor:␣1.1})],
      protocol:␣new␣OpenLayers.Protocol.HTTP({
      url:␣"dbcsv.php",
      format:␣new␣OpenLayers.Format.Text()
      })
      });
      map.addLayer(pois);
      pois.setVisibility(true);
      
      var␣lonLat␣=␣new␣OpenLayers.LonLat(lon,␣lat).transform(new␣OpenLayers.Projection("EPSG:4326"),␣map.getProjectionObject());
      
      map.setCenter␣(lonLat,␣zoom);
      
      //␣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="sidebar">
      <p>Lorem␣ipsum␣dolor␣sit␣amet,␣consectetuer␣adipiscing␣elit.␣Aenean␣commodo␣ligula␣eget␣dolor.␣Aenean␣massa.</p>
      
      <p>␣Cum␣sociis␣natoque␣penatibus␣et␣magnis␣dis␣parturient␣montes,␣nascetur␣ridiculus␣mus.␣Donec␣quam␣felis,␣ultricies␣nec,␣pellentesque␣eu,␣pretium␣quis,␣sem.␣Nulla␣consequat␣massa␣quis␣enim.</p>
      
      <p>␣Donec␣pede␣justo,␣fringilla␣vel,␣aliquet␣nec,␣vulputate␣eget,␣arcu.␣In␣enim␣justo,␣rhoncus␣ut,␣imperdiet␣a,␣venenatis␣vitae,␣justo.␣Nullam␣dictum␣felis␣eu␣pede␣mollis␣pretium.␣Integer␣tincidunt.␣Cras␣dapibus.␣Vivamus␣elementum␣semper␣nisi.␣Aenean␣vulputate␣eleifend␣</p>
      </div>
      <div␣id="mapcontainer">
      <div␣id="map">
      
      <div␣id="location"></div>
      </div>
      </div>
      </body>
      </html>
      

      und die php-Datei wie folgt:

      <?php
      
      $bbx␣=␣$_GET["bbox"]␣;
      
      $array␣=␣explode(",",$bbx);
      
      $ble␣=␣$array[0]␣;
      $bbo␣=␣$array[1]␣;
      $bri␣=␣$array[2]␣;
      $bto␣=␣$array[3]␣;
      
      include("dbconnect.php");
      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣name,␣amenity,␣operator,␣vending␣FROM␣pois
      WHERE␣vending␣LIKE␣'excrement_bags'
      AND␣lat␣BETWEEN␣$bbo␣AND␣$bto
      AND␣lon␣BETWEEN␣$ble␣AND␣$bri")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      
      $header␣=␣"point\ttitle\tdescription\ticon\n"␣;
      
      echo␣$header␣;
      
      while($row␣=␣mysql_fetch_object($ergebnis))
      {
      $daten␣=␣$row->lat.",".$row->lon."\t".$row->name."\t"."amenity=".$row->amenity."<br>vending=".$row->vending."<br>operator=".$row->operator."\t"."http://www.openlayers.org/dev/img/marker.png\n"␣;
      echo␣$daten␣;
      }
      
      ?>
      

      Christian

      [1] http://osm.duschmarke.de/index_php.html


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 07.12.2011 10:03 · [flux]

      brogo wrote:

      Kann es sein, daß Text-Layer prinzipiell nicht so sinnvoll ist? Für mich scheint es so, als wenn alles andere auf mit einem Vector-Layer geht.

      Hi Christian,

      Das ist absolut korrekt. Das Vector-Layer erschlägt fast alles, was so in OL gemacht wird.
      Da der Einstieg allerdings nicht so einfach ist - Eier legende Woll-Milch-Sau aka josm 😉 - und auch aus historischen Gründen, sind viele bei uns vorhandenen OL-Beispiele noch mit den älteren Verfahren gemacht worden.

      Wenn man Vector erst mal gefressen hat, kann man damit fast alles machen. Und die richtig guten Sachen gehen eh nur mit Vector.

      Gruss
      Walter


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 07.12.2011 12:12 · [flux]

      brogo wrote:

      Habe ich gamcht und jetzt läuft es auch. [1]

      Danke fürs Feedback und den Code.

      brogo wrote:

      Kann es sein, daß Text-Layer prinzipiell nicht so sinnvoll ist? Für mich scheint es so, als wenn alles andere auf mit einem Vector-Layer geht. Ist Text-Layer in OL nur noch aus Kompatibiltätsgründen drin? Vielleicht sollte man die Anfänger-Beispiele im Wiki auch auf Vector-Layer umstellen, um nicht in die Text-Sackgasse zu laufen.

      Ich habe auch den Eindruck, dass der Text Layer eher ein historisches Relikt ist. Für eingeschränkte Anwendungfälle ist das aber immer noch das einfachste was man machen kann.

      Ich würde aber auch gern den Vector Layer im Wiki stärker hervorheben, hab mir aber bisher nicht die Zeit dazu genommen.

      Gruß,
      ikonor


    • Re: Openlayers Datenbankanbindung · dimmer (Gast) · 07.12.2011 14:39 · [flux]

      brogo wrote:

      Habe ich gamcht und jetzt läuft es auch. [1]

      Could you please explain how to upload data to mysql database?


    • Re: Openlayers Datenbankanbindung · viw (Gast) · 07.12.2011 14:59 · [flux]

      Vielleicht könnte man das auch umstellen und gleich mit Postgis und osm2pgsql arbeiten. Dann könnte man aus der gleichen Datenbank heraus auch die Hintergrundkarte rendern.


    • Re: Openlayers Datenbankanbindung · Lübeck (Gast) · 07.12.2011 20:20 · [flux]

      Hi !

      ist denn mit Vektor auch die Verwendung von Symbolen möglich ? Ich dachte es wären immer nur geometrische Figuren möglich.

      Wie ist das eigentlich mit der Geschwindigkeit - ist das schneller als der Textlayer und ließe sich das auch mit Textfiles machen ?

      Gruß Jan :-)


    • Re: Openlayers Datenbankanbindung · maxbe (Gast) · 07.12.2011 21:57 · [flux]

      Lübeck wrote:

      ist denn mit Vektor auch die Verwendung von Symbolen möglich ?

      Ja, Du kannst sogar deine alten TAB-getrennten Textdateien in sowas einlesen (so z.B.).

      Lübeck wrote:

      ist das schneller als der Textlayer und ließe sich das auch mit Textfiles machen ?

      Du kannst halt damit cluster bilden und die Marker bbox-weise runterladen. Das bringt viel an Geschwindigkeit, wenn OL nicht immer alle Punkte vorrätig haben muss und die sichtbaren raussuchen und in kleinen Maßstäben 30 Marker übereinander malen...

      Grüße, Max

      Nachtrag: "Marker bbox-weise runterladen" geht natürlich nur mit einem Server, der so eine Anfrage versteht. Da ist die normale Textdatei ungeeignet, der Datenlieferant muss ein Programm sein, ggf. mit Datenbank im Hintergrund.


    • Re: Openlayers Datenbankanbindung · derstefan (Gast) · 07.12.2011 23:59 · [flux]

      Das ist eine tolle Sache, die du da angehst! Der kombinierten Vektor- und Rasterkarte gehört derzeit die Zukunft.

      Spontan fällt mir das Thema Metawriters bei Mapnik 2 ein. Ein Beispiel gibt es hier: http://r2d2.stefanm.com/mapnik/demo.html


    • Re: Openlayers Datenbankanbindung · Lübeck (Gast) · 08.12.2011 06:33 · [flux]

      hi !

      danke für die Hinweise.

      Aber ich glaube das mit den Erweiterungen in meiner alten Textlayervariante (Erweiterung von Netzwolf) ich eine ausreichende Geschwindigkeit habe. Ich muss einfach die Cluster-Funktion mal aktivieren und nutzen.

      Was die Verwendung einer DB betrifft mag das bei ganz speziellen Karten (die nur für ein Thema sind) mit großen Datenmengen sicherlich richtig sein. Aber ich z.b. habe mir ein Skript-System aufgebaut das nach ganz speziellen Anforderungen den Inhalt der popups zusammenstellt und formatiert. Das Ergebnis wird dann immer wieder in denselben Seitencode importiert und fertig.

      ... manchmal ist auch der "alte Kram" nicht zu verachten.

      Hoffe also er bleibt auch weiterhin erhalten.

      Gruß Jan :-)


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 08.12.2011 07:59 · [flux]

      snip


    • Re: Openlayers Datenbankanbindung · dimmer (Gast) · 08.12.2011 13:12 · [flux]

      I uploaded to mysql a text file with pois. The table have columns: lat lon title description icon iconSize iconOffset. What should I change in dbcsv.php to get my pois?


    • Re: Openlayers Datenbankanbindung · brogo (Gast) · 09.12.2011 08:43 · [flux]

      dimmer wrote:

      Could you please explain how to upload data to mysql database?

      Ich antworte mal auf Deutsch, Du scheinst das ja zu verstehen. Die Datenbank besteht nur aus einer Tabelle (hier: 'POIS'). Ich habe mittels Perl-Script die Daten aus einem Extrakt in eine csv-Datei konvertiert. Ich habe Spalten für lat und lon, sowie für die relevanten keys. Diese Datei haben ich dann in die MYSQL-Datenbank eingelesen.

      dimmer wrote:

      I uploaded to mysql a text file with pois. The table have columns: lat lon title description icon iconSize iconOffset. What should I change in dbcsv.php to get my pois?

      Meine eigentliche Datenbank-Abfrage lautet ja:

      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣name,␣amenity,␣operator,␣vending␣FROM␣pois
      WHERE␣vending␣LIKE␣'excrement_bags'
      AND␣lat␣BETWEEN␣$bbo␣AND␣$bto
      AND␣lon␣BETWEEN␣$ble␣AND␣$bri")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      

      In der ersten Zeile wähle ich alle Spalten aus, aus welchen in Daten haben möchte. Die nächsten drei sind die Bedingungen. Da ich in der DB mehrere POI-Arten drin habe, filtere ich diesem Fall nur die Hundekottütenspender mit WHERE vending LIKE 'excrement_bags' aus. Diese Zeile kannst Du bei Dir wohl weglassen.

      Die nächsten beiden Zeilen sind die wichtigen, die den Bereich abfragen; der sollte so bleiben.

      Dann kommt auch schon die Ausgabe

      $header␣=␣"point\ttitle\tdescription\ticon\n"␣;
      
      echo␣$header␣;
      

      ...schreibt einmal den Header:
      point<Tab>title<Tab>description<Tab>icon.

      Der Aufbau ist also etwas anders, als im Text-Layer. 'IconSize' und 'IconOffset' gibt es nicht.

      Mit den restlichen Zeilen werden die Datenzeilen gefüllt:

      while($row␣=␣mysql_fetch_object($ergebnis))
      {
      $daten␣=␣$row->lat.",".$row->lon."\t".$row->name."\t"."amenity=".$row->amenity."<br>vending=".$row->vending."<br>operator=".$row->operator."\t"."http://www.openlayers.org/dev/img/marker.png\n"␣;
      echo␣$daten␣;
      }
      

      Die einzelnen Felder werden wieder durch Tab, also \t , getrennt. Wenn man aus dem Beispiel einmal den String $daten entsprechend trennt, sieht es gar nicht so schlimm aus:

      $row->lat.",".$row->lon."\t".
      $row->name."\t".
      "amenity=".$row->amenity."<br>vending=".$row->vending."<br>operator=".$row->operator."\t".
      "http://www.openlayers.org/dev/img/marker.png\n"␣;
      

      Erste Zeile ist für die Koordinaten, die zweite der Name des POIs, die dritte die Beschreibung und die vierte der Pfad zum Icon. In den Zeilen zwei und drei kann man sich austoben und das reinnehmen, was man im Popup drinstehen habe möchte.

      Christian


    • Re: Openlayers Datenbankanbindung · dimmer (Gast) · 13.12.2011 15:13 · [flux]

      Changed my dbcsv.php to the following, but it doesn't work.

      <?php
      
      $bbx␣=␣$_GET["bbox"]␣;
      
      $array␣=␣explode(",",$bbx);
      
      $ble␣=␣$array[0]␣;
      $bbo␣=␣$array[1]␣;
      $bri␣=␣$array[2]␣;
      $bto␣=␣$array[3]␣;
      
      //␣include("dbconnect.php");
      $con␣=␣mysql_connect("localhost","poi","1");
      if␣(!$con)
      {
      die('Could␣not␣connect:␣'␣.␣mysql_error());
      }
      
      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣title,␣description,␣icon,␣iconSize,␣iconOffset␣FROM␣poi
      AND␣lat␣BETWEEN␣$bbo␣AND␣$bto
      AND␣lon␣BETWEEN␣$ble␣AND␣$bri")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      
      $header␣=␣"lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n"␣;
      
      echo␣$header␣;
      
      while($row␣=␣mysql_fetch_object($ergebnis))
      {
      $daten␣=␣$row->lat."\t".$row->lon."\t".$row->title."\t".$row->description."\t".$row->icon."\t".$row->iconSize."\t".$row->iconOffset"\n";
      echo␣$daten␣;
      }
      
      ?>
      

    • Re: Openlayers Datenbankanbindung · brogo (Gast) · 16.12.2011 13:57 · [flux]

      dimmer wrote:

      Changed my dbcsv.php to the following, but it doesn't work.

      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣title,␣description,␣icon,␣iconSize,␣iconOffset␣FROM␣poi
      AND␣lat␣BETWEEN␣$bbo␣AND␣$bto
      AND␣lon␣BETWEEN␣$ble␣AND␣$bri")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      

      Ich bin kein Experte, aber die SQL-Abfrage sieht nicht richtig aus. Müßte es nicht so aussehen:

      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣title,␣description,␣icon,␣iconSize,␣iconOffset␣FROM␣poi
      WHERE␣lat␣BETWEEN␣$bbo␣AND␣$bto
      AND␣lon␣BETWEEN␣$ble␣AND␣$bri")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      

      Die erste Zeile gibt doch die auszuwählenden Felder an und dann folgen die Bedingungen in Zeile 2 und 3.

      Außerdem beachte bitte, daß das Textformat beim Vector-Layer anders als beim Text-Layer ist.

      Text-Layer:

      lat␣␣lon␣title␣␣␣description␣iconSize␣␣␣␣iconOffset␣␣icon
      

      Vector-Layer:

      point␣␣␣␣title␣␣␣␣description␣␣␣␣icon
      

      Trennzeichen sind immer Tab-Stopps.

      Daher muß Deine Ausgabe nicht so,

      dimmer wrote:

      $header␣=␣"lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n"␣;
      

      aussehen, sondern eher wie meine oben im Beispiel; sowohl für den Header als auch die Datensätze.

      Zum Testen ist das Firefox-Plugin Firebug sehr hilfreich. Wählt man dort den Netzwerk-Reiter aus, kann man nicht nur die Datenbank-Anfrage sehen (z.B. http://osm.duschmarke.de/dbcsv.php?bbox … 761661239) sodern auch die entsprechende Antwort vom Server.

      point␣␣␣␣title␣␣␣␣description␣␣␣␣icon
      53.9829979,10.7126980␣␣␣␣Dog-Station␣␣␣␣amenity=vending_machine<br>vending=excrement_bags<br>operator=␣␣␣␣http://www.openlayers.org/dev/img/marker.png
      53.9908447,10.7137947␣␣␣␣␣␣␣␣amenity=vending_machine<br>vending=excrement_bags<br>operator=␣␣␣␣http://www.openlayers.org/dev/img/marker.png
      

      Ich hoffe, Du kommst damit weiter.

      Christian


    • Re: Openlayers Datenbankanbindung · dimmer (Gast) · 17.12.2011 11:31 · [flux]

      Thanks Christian. Finally, I managed to write a working dbcsv.php with the help of phpforum.ru. It works!

      <?php
      
      $bbx␣=␣$_GET["bbox"]␣;
      
      $array␣=␣explode(",",$bbx);
      
      $ble␣=␣$array[0]␣;
      $bbo␣=␣$array[1]␣;
      $bri␣=␣$array[2]␣;
      $bto␣=␣$array[3]␣;
      
      $link␣=␣mysql_connect('localhost',␣'poi',␣'1');
      if␣(!$link)␣{
      die('Не␣удалось␣соединиться␣:␣'␣.␣mysql_error());
      }
      $db_selected␣=␣mysql_select_db('poi',␣$link);
      if␣(!$db_selected)␣{
      die␣('Не␣удалось␣выбрать␣базу␣poi:␣'␣.␣mysql_error());
      }
      //␣mysql_query("SET␣NAMES␣'utf8'");
      
      $ergebnis␣=␣mysql_query("SELECT␣lat,␣lon,␣title,␣description,␣icon,␣iconSize,␣iconOffset␣FROM␣convenience
      WHERE␣lat␣BETWEEN␣'$bbo'␣AND␣'$bto'
      AND␣lon␣BETWEEN␣'$ble'␣AND␣'$bri'")
      OR␣die("Error:␣$abfrage␣<br>".mysql_error()
      );
      
      $header␣=␣"lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n"␣;
      
      echo␣$header␣;
      
      while($row␣=␣mysql_fetch_object($ergebnis))
      {
      $daten␣=␣$row->lat."\t".$row->lon."\t".$row->title."\t".$row->description."\t".$row->icon."\t".$row->iconSize."\t".$row->iconOffset."\n";
      echo␣$daten␣;
      }
      
      ?>
      

    • Re: Openlayers Datenbankanbindung · Lübeck (Gast) · 05.01.2012 12:48 · [flux]

      hi !

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

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

      Gruß Jan :-)


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 05.01.2012 13:01 · [flux]

      Lübeck wrote:

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

      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


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 11.07.2012 15:31 · [flux]

      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


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 11.07.2012 19:44 · [flux]

      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


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 16.07.2012 17:10 · [flux]

      vielen dank und auch für die antwort 😉 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?


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 16.07.2012 17:16 · [flux]

      elpiojo_ wrote:

      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


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 16.07.2012 17:31 · [flux]

      elpiojo_ wrote:

      welche datei meinst du in diesem sinne?

      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.


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 17.07.2012 16:47 · [flux]

      wambacher wrote:

      elpiojo_ wrote:

      die abfrage mittels php script funktioniert auch einwandfrei, also könnte es ja eigentlich nur an openlayers liegen oder?

      ein Bild mit dem Fehler oder zumindest den Text der Fehlermeldung posten.

      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!

      ikonor wrote:

      elpiojo_ wrote:

      welche datei meinst du in diesem sinne?

      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.

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


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 17.07.2012 18:52 · [flux]

      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);
      ?>
      

    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 17.07.2012 20:02 · [flux]

      elpiojo_ wrote:

      ikonor wrote:

      elpiojo_ wrote:

      welche datei meinst du in diesem sinne?

      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.

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

      Das ist noch nicht ausdiskutiert 😉

      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.


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 18.07.2012 17:12 · [flux]

      alles klar 😉

      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.


    • Re: Openlayers Datenbankanbindung · maxbe (Gast) · 18.07.2012 17:50 · [flux]

      elpiojo_ wrote:

      alles klar 😉

      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...

      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...


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 18.07.2012 17:52 · [flux]

      elpiojo_ wrote:

      alles klar 😉

      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.

      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/ … 42952.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!


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 18.07.2012 17:59 · [flux]

      maxbe wrote:

      elpiojo_ wrote:

      alles klar 😉

      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...

      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...

      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


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 18.07.2012 18:24 · [flux]

      also erst mal vielen dank für eure hilfe!

      maxbe wrote:

      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...

      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<br>telefon=0043-3453-2590 http://www.openlayers.org/dev/img/marker.png
      46.673094,15.551529 Trunk Karl homepage=http://www.trunk.st<br>telefon=0043-3453-6813 http://www.openlayers.org/dev/img/marker.png
      46.672776,15.548663 Weinidylle Dreisiebner homepage=http://www.weinidylle-dreisiebner.at<br>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!

      wambacher wrote:

      zum vpn: klappt das auch nicht, wenn du in der uni bist? sollte eigentlich egal sein, aber man weiss ja nie.

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

      wambacher wrote:

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

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

      wambacher wrote:

      magst du map.html und das php posten? eventuell sieht man das was.

      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.


    • Re: Openlayers Datenbankanbindung · maxbe (Gast) · 18.07.2012 18:45 · [flux]

      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


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 18.07.2012 19:07 · [flux]

      maxbe wrote:

      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 … triebe.php",
      .....

      ändert sich leider nichts


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 18.07.2012 19:55 · [flux]

      elpiojo_ wrote:

      wambacher wrote:

      zum vpn: klappt das auch nicht, wenn du in der uni bist? sollte eigentlich egal sein, aber man weiss ja nie.

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

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

      wambacher wrote:

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

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

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

      die verbindungsangaben hab ich draußen gelassen.

      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? 😉


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 18.07.2012 20:20 · [flux]

      wambacher wrote:

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

      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

      wambacher wrote:

      src="http://openlayers.org/api/2.12/OpenLayers.js"

      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 🙂

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

      wambacher wrote:

      wieviele Semester hast du noch Zeit?

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


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 18.07.2012 20:41 · [flux]

      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/ … -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.


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 18.07.2012 21:26 · [flux]

      wambacher wrote:

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

      stehen. brauchst du den?

      hm ich glaub eigentlich nicht, wenn ich mich recht erinner brauch ich den nur fürs wfs-t, habs jetzt ausgeschalten. somit kommt auch der fehler nicht mehr zugriff verweigert, aber dafür zeigt mir der firebug jetzt gar keinen fehler mehr an 😄

      weiß leider nicht wie man hier ein img einbinden kann sonst würd ich einen screen von meiner map.html hochladen. bei mir schauts eigentlich gleich aus, außer dem rosa ist halt die steiermark in blau dargestellt.


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 18.07.2012 21:47 · [flux]

      elpiojo_ wrote:

      somit kommt auch der fehler nicht mehr zugriff verweigert, aber dafür zeigt mir der firebug jetzt gar keinen fehler mehr an 😄

      elpiojo_ wrote:

      [...] die marker sind nicht ersichtlich, außer einer der liegt aber im meer!

      Dann ist das wahrscheinlich ein Projektionsproblem. Vermutlich liegt der Marker am Nullpunkt bei Afrika? Dann ist das auch nicht nur einer, sondern alle übereinander ;-)

      elpiojo_ wrote:

      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()
      })
      });

      sphericalMercator und singleTile sind keine Optionen für den Vector Layer, kannst Du entfernen.

      Versuchs mal mit der Option (siehe Reprojecting Vector Data):

      projection:␣new␣OpenLayers.Projection("EPSG:4326")
      

      also (nicht getestet):

      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()
      })
      });
      

      Gruß,
      Norbert


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 18.07.2012 23:33 · [flux]

      elpiojo_ wrote:

      hm ich glaub eigentlich nicht, wenn ich mich recht erinner brauch ich den nur fürs wfs-t, habs jetzt ausgeschalten. somit kommt auch der fehler nicht mehr zugriff verweigert, aber dafür zeigt mir der firebug jetzt gar keinen fehler mehr an 😄

      Prima, jetzt kommen wir langsam zu den einfachen Sachen. Der schwarze Schirm ist nix schlimmes. - das mach ol immer, wenn was im Script faul ist. Ist ganz normal.
      neben firebug gibt es im ff auch noch die Fehlerkonsole. shift-strg-J. schneller und einfacher als firebug, nur nicht so mächtig.

      anwendung: konsole aufmachen, alles löschen, reload vom map.html, konsole aufmachen. da steht dann drin, wo es geknallt hat.

      ikonor ist ja schon dran - ich bin erstmal froh, dass die Sache mit dem Netzwerk weg ist. Das war wirklich misteriös (und interessant)

      weiß leider nicht wie man hier ein img einbinden kann sonst würd ich einen screen von meiner map.html hochladen. bei mir schauts eigentlich gleich aus, außer dem rosa ist halt die steiermark in blau dargestellt.

      dann schau dir meinen Betrag an. da steht der Provider drin pic-upload.de, anmelden, bild hochladen, foren-url guttenbergen. das wars.

      gruss
      walter

      ach ja, wenn du den proxy nicht brauchst, sollte auch die ol-zeile mit dem dev raus. die war nur dafür.


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 22.07.2012 14:16 · [flux]

      ikonor wrote:

      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() }) });

      vielen dank das hat funktioniert 🙂 die marker werden jetzt an der richtigen stelle angezeigt, aber leider öffnen sich die pop ups noch nicht

      http://imageshack.us/photo/my-images/155/mapem.png/

      die fehlerkonsole zeigt mir folgende fehler an, aber kein fehler davon spricht auf mein map.html oder mein php file an

      http://imageshack.us/photo/my-images/849/fehler1.png/

      http://imageshack.us/photo/my-images/829/fehler2i.png/


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 22.07.2012 22:14 · [flux]

      elpiojo_ wrote:

      leider öffnen sich die pop ups noch nicht

      die fehlerkonsole zeigt mir folgende fehler an, aber kein fehler davon spricht auf mein map.html oder mein php file an
      http://imageshack.us/photo/my-images/849/fehler1.png/
      http://imageshack.us/photo/my-images/829/fehler2i.png/

      Das sind Warnungen zum OpenLayers css, die kommen immer.

      Wenn ich das bei mir nachvollziehe, erhalte ich beim Klicken eines Markers schon einen Fehler "Fehler: TypeError: map.addPopup is not a function".

      Das liegt daran, das die Variable "map" innerhalb von init definiert ist und damit in onFeatureSelect später nicht mehr referenziert werden kann. Ist map außerhalb von init global definiert, funktioniert's.


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 23.07.2012 19:19 · [flux]

      vielen vielen dank, jetzt hats funktioniert, es sind doch immer wieder die kleinen fehler ^^ eine frage hätte ich noch, wenn ich jetzt noch einen layer mit pop ups hinzufügen möchte, muss ich hier

      selectControl␣=␣new␣OpenLayers.Control.SelectFeature(pois);
      

      noch zum schluss noch den neuen einfügen oder is dann noch etwas zu beachten oder funktioniert dieses variante überhaupt nicht?

      ikonor wrote:

      "Fehler: TypeError: map.addPopup is not a function".

      wie bist du auf den fehler gekommen durch die fehlerkonsole von ff?


    • Re: Openlayers Datenbankanbindung · wambacher (Gast) · 23.07.2012 21:17 · [flux]

      elpiojo_ wrote:

      ikonor wrote:

      "Fehler: TypeError: map.addPopup is not a function".

      wie bist du auf den fehler gekommen durch die fehlerkonsole von ff?

      Wo er den Fehler gesehen hat, weiss ich nicht genau. ICH sehe sowas in der Fehlerkonsole (strg shift J) Genau dafür ist sie da, wenn man nicht stärkere Geschütze auffahren will. Drück auch mal auf strg shift I oder strg shift K . Und dann gibt es noch noch den "Java Script Debugger". Den musste aber extra installieren.

      Gruss
      walter


    • Re: Openlayers Datenbankanbindung · ikonor (Gast) · 23.07.2012 21:27 · [flux]

      elpiojo_ wrote:

      vielen vielen dank, jetzt hats funktioniert

      Schön, dass es geklappt hat.

      elpiojo_ wrote:

      eine frage hätte ich noch, wenn ich jetzt noch einen layer mit pop ups hinzufügen möchte, muss ich hier

      selectControl␣=␣new␣OpenLayers.Control.SelectFeature(pois);
      

      noch zum schluss noch den neuen einfügen oder is dann noch etwas zu beachten oder funktioniert dieses variante überhaupt nicht?

      Dem SelectFeature Konstruktor kann man auch ein Array von Layern übergeben. Die Event Listener übergibt man dann besser auch als Option, anstatt diese am Layer zu registrieren.

      Also statt

      selectControl␣=␣new␣OpenLayers.Control.SelectFeature(pois);
      pois.events.on({
      'featureselected':␣onFeatureSelect,
      'featureunselected':␣onFeatureUnselect
      });
      

      das einbauen (nicht getestet):

      var␣options␣=␣{
      onSelect␣:␣onFeatureSelect,
      onUnselect␣:␣onFeatureUnselect
      };
      selectControl␣=␣new␣OpenLayers.Control.SelectFeature([pois,␣layer2],␣options);
      

      elpiojo_ wrote:

      ikonor wrote:

      "Fehler: TypeError: map.addPopup is not a function".

      wie bist du auf den fehler gekommen durch die fehlerkonsole von ff?

      Ja, ist aus der Firefox Fehlerkonsole. Ist mir erst aufgefallen, als ich die Konsole nach dem Laden der Seite geleert und dann auf einen Marker geklickt habe.


    • Re: Openlayers Datenbankanbindung · elpiojo_ (Gast) · 24.07.2012 17:46 · [flux]

      ikonor wrote:

      var options = { onSelect : onFeatureSelect, onUnselect : onFeatureUnselect }; selectControl = new OpenLayers.Control.SelectFeature([pois, layer2], options);

      ok werde ich mal probieren, aber muss ich hier

      ikonor wrote:

      var options

      nicht options.events.on schreiben?

      ok hab mittlerweile herausgefunden das ich es so schreiben sollte

      new␣OpenLayers.Control.SelectFeature([pois,␣offen]);
      

      ohne dem options aber jetzt stellt sich mir die frage wie ich das an den handler weitergeben

      habs mitterlweile gelöst 🙂 meine lösung schaut jetzt wie folgt aus:

      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;
      }
      var␣options␣=␣{␣hover:␣false,␣onSelect:␣onFeatureSelect,␣onUnselect:␣onFeatureUnselect␣};
      selectControl␣=␣new␣OpenLayers.Control.SelectFeature([pois,offen],␣options);
      map.addControl(selectControl);
      

      ich danke euch für die hilfe!