[Mapserver-DE] point-layer mit mysql, php/mapscript und versch. symbolen?

Katja Friebel k.friebel at gmx.de
Fre Nov 17 01:24:29 CET 2006


hallo liebe liste,

langsam weiß 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örigen 
koordinaten.
mittels php/mapscript erzeuge ich die punkte in einem leeren (point) 
layer des mapfiles. soweit kein problem (dazu gibt es ja genü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öglich, für diese problematik die klassen im mapfile zu 
definieren? wenn ja, wie kann ich von mapscript darauf zugreifen?
oder muß ich den style in mapscript festlegen (da scheint es aber nicht 
so viele möglichkeiten zu geben)?

wäre über hilfe sehr dankbar...! mit grüßen aus dem nächtlichen berlin

hier der code:

<?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ählt 
werden");
   
    if ($_POST['spalte'] == "") {
        $sql="SELECT * FROM treptow m, hausnr h WHERE m.Strasse = 
h.Strasse && m.Hausnr = h.Hausnr GROUP BY (m.Strasse)";   
        }
    else {   
        $sql = "SELECT * FROM treptow m, hausnr h            
                  WHERE m.Kategorie LIKE '" . $_POST['spalte'] . "' 
                  && m.Strasse = h.Strasse
                  && 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->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]-> setXY($row[22],$row[23]);
        $ln[$i]->add($poi[$i]);
        $shp[$i]->add($ln[$i]);
        $shp[$i]->set(index,$row[0]);
        //$classPlanetarium=ms_newClassObj($this_layer);
        //$classPlanetarium = $this_layer->getClass(1);
        $this_layer->addFeature($shp[$i]);
        $i++;
    }
    return;
}
//---------------------------------------------------------
// verschiedene Symbole für layer 'einrichtungen' vergeben

function SetSymbols ($map) {

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

//...
?>

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




This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)