<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Kai Behncke wrote:<br>
<blockquote cite="mid20061130144711.M45931@igf.uni-osnabrueck.de"
 type="cite">
  <pre wrap="">On Fri, 17 Nov 2006 01:24:29 +0100, Katja Friebel wrote
  </pre>
  <blockquote type="cite">
    <pre wrap="">hallo liebe liste,

langsam wei&szlig; ich mir keinen rat mehr und der kopf raucht. aller 
anfang ist schwer... kann mir vielleicht jemand weiterhelfen?

ich halte in mysql eine zwei tabellen vor, in der einen befinden 
sich einrichtungen mit strasse, hausnummer, in der anderen die 
zugeh&ouml;rigen koordinaten. mittels php/mapscript erzeuge ich die 
punkte in einem leeren (point) layer des mapfiles. soweit kein 
problem (dazu gibt es ja gen&uuml;gend beispiele). dabei wird aber nur 
die erste, im layer definierte klasse visualisiert. die objekte 
sollen aber je nach klassifizierung in der tabellenspalte 
"kategorie" (apotheken, restaurants etc.) mittels eines 
entsprechenden symbols (oder eines gif-bildes) dargestellt werden.

ist es m&ouml;glich, f&uuml;r diese problematik die klassen im mapfile zu 
definieren? wenn ja, wie kann ich von mapscript darauf zugreifen?
oder mu&szlig; ich den style in mapscript festlegen (da scheint es aber 
nicht so viele m&ouml;glichkeiten zu geben)?

w&auml;re &uuml;ber hilfe sehr dankbar...! mit gr&uuml;&szlig;en aus dem n&auml;chtlichen berlin

hier der code:

&lt;?php
dl('php_mapscript_48.dll');
//...
function GetMobidatTable() {

    include("db_connect1.inc");
    mysql_connect($host, $user, $pwd) or die('Verbindungsaufbau fehlgeschlagen!');
    mysql_select_db(mobidat) or die ("Datenbank konnte nicht ausgew&auml;hlt werden");

    if ($_POST['spalte'] == "") {
        $sql="SELECT * FROM treptow m, hausnr h WHERE m.Strasse = h.Strasse &amp;&amp; m.Hausnr = h.Hausnr GROUP BY                                 (m.Strasse)";   
        }
    else {   
        $sql = "SELECT * FROM treptow m, hausnr h            
                  WHERE m.Kategorie LIKE '" . $_POST['spalte'] . "' 
                  &amp;&amp; m.Strasse = h.Strasse
                  &amp;&amp; m.Hausnr = h.Hausnr GROUP BY (m.Strasse)";   
        }

    $result=mysql_query($sql);
    echo mysql_error();
    $i = 0;
    while ($row = mysql_fetch_array($result,MYSQL_NUM) ) {
        $qresult[$i] = $row;
        $i++;
    }
    return $qresult;
}

//---------------------------------------------------------
// add locations to map layer 'einrichtungen'

function AddPoints ($map, $qresult) {

    $this_layer = $map-&gt;getLayerByName('einrichtungen');

    $i = 0;
    foreach ($qresult as $row) {
        $poi[$i] = ms_newPointObj();
        $ln[$i] = ms_newLineObj();
        $shp[$i] = ms_newShapeObj(MS_SHAPE_POINT);
        $poi[$i]-&gt; setXY($row[22],$row[23]);
        $ln[$i]-&gt;add($poi[$i]);
        $shp[$i]-&gt;add($ln[$i]);
        $shp[$i]-&gt;set(index,$row[0]);
        //$classPlanetarium=ms_newClassObj($this_layer);
        //$classPlanetarium = $this_layer-&gt;getClass(1);
        $this_layer-&gt;addFeature($shp[$i]);
        $i++;
    }
    return;
}
//---------------------------------------------------------
// verschiedene Symbole f&uuml;r layer 'einrichtungen' vergeben

function SetSymbols ($map) {

    $layer = ms_newLayerObj($map);
    $layer = ms_newLayerObj($map);
    $layer = $map-&gt;getLayerByName('einrichtungen');
    $layer-&gt;classitem ='Kategorie';
    $classPlanetarium = $layer-&gt;getClass(1);
    //$classPlanetarium-&gt;ms_newClassObj($layer);
    $classPlanetarium-&gt;name = 'Planetarium';
    $classPlanetarium-&gt;setExpression('Planetarium');
    //$planetariumStyle= $classPlanetarium-&gt;getStyle(0);
    //$planetariumStyle-&gt;$Symbol-&gt;set("filled", MS_TRUE);
    //$planetariumStyle-&gt;$Symbol-&gt;set("sizex", 1);
    //$planetariumStyle-&gt;$Symbol-&gt;set("sizey", 1);
}
//...
$map = ms_newMapObj($map_path.$map_file);
//...
// Ergebnisse der DBabfrage einbinden
$qresult = GetMobidatTable();
AddPoints ($map, $qresult);
//SetSymbols ($map);

//...
?&gt;

der layer im mapfile:
LAYER
    NAME         einrichtungen
    TYPE         POINT
    STATUS       ON
    CLASSITEM    "Kategorie"

    CLASS
        NAME 'Apotheke'   
        EXPRESSION 'Apotheken'
        SYMBOL    "Apotheke"
        SIZE     20
        TEMPLATE     "query.html" 
    END #class
    CLASS
        NAME 'Planetarium'
        EXPRESSION 'Planetarien/Sternwarten'
        SYMBOL 'stern'
        COLOR    32 32 32 
        SIZE     20
        TEMPLATE     "query.html"
    END #class
END # layer

    </pre>
  </blockquote>
  <pre wrap=""><!---->Hallo Katja,
mittels folgendem Prinzip funktioniert es:
In der mysql-Tabelle, in welcher auch die Punktkkordinaten liegen, liegt auch
der Kategorieeintrag (z.B. Restaurant, Museum, etc.).

Im Mapfile lautet der Eintrag zu dem poi-Layer einfach:

LAYER
     NAME "poi"
     STATUS on
     TYPE point        
     LABELCACHE on
     TOLERANCEUNITS miles

END

Entscheidend ist dann nat&uuml;rlich das php/Mapscript-Skript.
Dort wird ja zun&auml;chst die Mysql-Tabelle eingelesen.

Man braucht im Prinzip nur die Funktion AddPoint()-&gt;

function AddPoints ( $map, $qresult ) {


     $this_layer = $map-&gt;getLayerByName('poi');

     $i = 0;
     foreach($qresult as $row) {
        $poi[$i] = ms_newPointObj();
       $ln[$i] =  ms_newLineObj();
       $shp[$i] = ms_newShapeObj(MS_SHAPE_POINT);
        $poi[$i]-&gt;setXY($row[3],$row[2]);
    $ln[$i]-&gt;add($poi[$i]);
     $shp[$i]-&gt;add($ln[$i]);
        $shp[$i]-&gt;set(index, $row[0]);

/*Interessant wirds dann hier. Wenn der Kategorieeintrag "Museum" lautet,
dann wird im Layer poi ein Klassenobjekt "Museum" angelegt, in dieser 
ein Styleobjekt, und dieses erhalt das Symbol "Museum".
Die angelegten Punkte werden dann mit diesem Symbol dargestellt.*/


        if ($row[7]=="Museum") {
      
          $classmuseum=ms_newClassObj($this_layer);
          $classmuseum-&gt;set ("name",Museum);
    $museumstyle=ms_newStyleObj($classmuseum);
$museumstyle-&gt;set("symbolname", museumssymbol);
$this_layer-&gt;addFeature( $shp[$i] );
}

/* Wenn irgendwo die Kategorie "Restaurant" auftaucht, dann wird einfach ein
komplett neuer Layer erstellt, dieser enth&auml;lt auch ein Klassenobjekt -&gt;
Styleobjekt -&gt; Symbolnamen.
Die Punktdaten werden dann mit unterschiedlichen Symbolen dargestellt.

       if ($row[7]=="Restaurant") {
          $that_layer=ms_newLayerObj($map);
          $that_layer-&gt;set('status',MS_ON);
          $that_layer-&gt;set ("name",restaurant);
          $that_layer-&gt;set ("type",point);
          $classres=ms_newClassObj($that_layer);
          $classres-&gt;set ("name",restaurant);
    $resstyle=ms_newStyleObj($classres);
$resstyle-&gt;set("symbolname", cup);

                $that_layer-&gt;addFeature( $shp[$i] );
}



        
   
        $i++;
     }

     return;

} // end AddPoints

Das angek&uuml;ndigte Tutorial wird wohl noch eine Woche l&auml;nger brauchen.....

Viele Gr&uuml;&szlig;e, Kai

--
Dipl.-Geogr. Dipl.-Umweltw. Kai Behncke

Institut f&uuml;r Geoinformatik und Fernerkundung (IGF)
Universit&auml;t Osnabr&uuml;ck
Kolpingstr. 7
49074 Osnabr&uuml;ck

Raum: 01/308
Tel.: +49 541 969-4450
E-Mail: <a class="moz-txt-link-freetext" href="mailto:kbehncke@igf.uni-osnabrueck.de">mailto:kbehncke@igf.uni-osnabrueck.de</a> 
Web:  <a class="moz-txt-link-freetext" href="http://www.igf.uni-osnabrueck.de">http://www.igf.uni-osnabrueck.de</a>

_______________________________________________
Mapserver-DE mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Mapserver-DE@freegis.org">Mapserver-DE@freegis.org</a>
<a class="moz-txt-link-freetext" href="https://freegis.org/mailman/listinfo/mapserver-de">https://freegis.org/mailman/listinfo/mapserver-de</a>

  </pre>
</blockquote>
Hallo Kai,<br>
vielen Dank f&uuml;r deine Hilfe!<br>
Habe mittlerweile alternativ das Tutorial von Roberto Colonello (<a
 href="http://www.parsec.it/tutorials/mapserver_add_icons.htm">http://www.parsec.it/tutorials/mapserver_add_icons.htm</a>)
bei mir zum Laufen gebracht :-)<br>
Dabei enth&auml;lt das mapfile keinen "POI"-Layer (einrichtungen). Mein
php-Skript habe ich beigef&uuml;gt.<br>
Da ich sehr viele Kategorien vorliegen habe, ist das vermutlich die
k&uuml;rzere Variante. Damit entf&auml;llt allerdings die M&ouml;glichkeit der
Symboldefinition &uuml;ber den Mapserver, was in meinem Fall aber nicht
relevant ist, und die Query. Werde daher jetzt auch gleich dein Skript
testen und dann schauen, welche Variante f&uuml;r die geplante Anwendung
besser passt.<br>
<br>
Viele Gr&uuml;&szlig;e, Katja<br>
<br>
&lt;?php<br>
dl('php_mapscript_48.dll'); <br>
<br>
//Beispiel zu finden unter:<br>
//<a class="moz-txt-link-freetext" href="http://www.parsec.it/tutorials/mapserver_add_icons.htm">http://www.parsec.it/tutorials/mapserver_add_icons.htm</a><br>
<br>
define("img_WIDTH", 0);<br>
define("img_HEIGHT", 1);<br>
define("img_TYPE", 2);<br>
<br>
// Path defaults <br>
$map_path="d:/ms4w/apache/htdocs/mobidat_php/test/";&nbsp; <br>
$map_file="berlin.map";&nbsp; <br>
$imgpath="d:/ms4w/tmp/";<br>
<br>
function AddImagesToMap($mapurl,$map, $imgpath)<br>
{&nbsp; <br>
&nbsp;&nbsp;&nbsp; // CONNECT TO DATABASE<br>
&nbsp;&nbsp;&nbsp; include("../db_connect1.inc");<br>
&nbsp;&nbsp;&nbsp; mysql_connect($host, $user, $pwd) or die('Verbindungsaufbau
fehlgeschlagen!');<br>
&nbsp;&nbsp;&nbsp; mysql_select_db(mobidat) or die ("Datenbank konnte nicht
ausgew&amp;auml;hlt werden");<br>
&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; // PATH WHERE TO FIND THE MAP IMAGE GENERATED BY MAPSERVER<br>
&nbsp;&nbsp; $mapimagepath = $imgpath.$mapurl;<br>
&nbsp;&nbsp; $mapdim = GetImageSize($mapimagepath);<br>
&nbsp;&nbsp; $coords_map_width = $map-&gt;extent-&gt;maxx -
$map-&gt;extent-&gt;minx;<br>
&nbsp;&nbsp; $mapscale =&nbsp; $mapdim[img_WIDTH]/ $coords_map_width;&nbsp;&nbsp; <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch ($mapdim[img_TYPE]) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mapimg = ImageCreateFromGif($mapimagepath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mapimg = ImageCreateFromJpeg($mapimagepath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mapimg = ImageCreateFromPng($mapimagepath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; //Query &uuml;ber drei Tabellen<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; //treptow (einrichtungen, kategorie,strasse, hausnummer), hausnr
(strasse, hausnummer, koordinaten) und symbols (kategorie, pfad zur
bilddatei)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$qry .="SELECT * FROM treptow t, hausnr h, symbols s WHERE
t.Strasse = h.Strasse &amp;&amp; t.Hausnr = h.Hausnr &amp;&amp;
t.Kategorie = s.Kategorie";<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $res = mysql_query($qry); <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ($row = mysql_fetch_object($res)) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $dimic = GetImageSize($row-&gt;Pfad);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch ($dimic[img_TYPE]) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tmpimg = ImageCreateFromGif($row-&gt;Pfad);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tmpimg = ImageCreateFromJpeg($row-&gt;Pfad);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tmpimg = ImageCreateFromPng($row-&gt;Pfad);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $x = ($row-&gt;X - $map-&gt;extent-&gt;minx) * $mapscale;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $y = $mapdim[img_HEIGHT] - (($row-&gt;Y -
$map-&gt;extent-&gt;miny) * $mapscale);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @ImageCopy ($mapimg, $tmpimg, $x, $y, 0, 0,
$dimic[img_WIDTH], $dimic[img_HEIGHT]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // SAVE THE NEW IMAGE ON THE OLD ONE<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch ($mapdim[img_TYPE]) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageGif($mapimg, $mapimagepath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageJpeg($mapimg, $mapimagepath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImagePng($mapimg, $mapimagepath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>
} <br>
<br>
// Retrieve mapfile and create a map from it<br>
$map = ms_newMapObj($map_path.$map_file);<br>
<br>
$img = $map-&gt;draw();<br>
$url = $img-&gt;saveWebImage();<br>
AddImagesToMap($url,$map, $imgpath);<br>
<br>
?&gt;<br>
&lt;HTML&gt;<br>
&lt;HEAD&gt;<br>
&lt;TITLE&gt;Treptow-K&amp;ouml;penick&lt;/TITLE&gt;<br>
&lt;/HEAD&gt;<br>
&lt;BODY&gt;<br>
&lt;img src="&lt;?php echo $url; ?&gt;" border="1"&gt;<br>
&lt;/BODY&gt;<br>
&lt;/HTML&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Times New Roman, Times, serif"
 size="-1"><strong></strong></font>
<p><font size="-1"><strong></strong></font></p>
</body>
</html>