[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)