[Mapserver-DE] Objekte in der Map markieren mit gegebenen Shape-Indizes

Ludwig Kniprath ludwig at kni-online.de
Sam Nov 28 16:11:49 CET 2009


Hallo,
anbei ein Mini-Skript für einen ähnlichen Zweck. Statt Layer->getShape() 
wird hier allerdings ein Shape via wkt-String erzeugt, aber der Rest 
sollte trotzdem passen.

---schnipp--------------------------
//Map-Objekt und Map-Image generieren, hier kann auch ein bereits 
vorhandenes Map-Objekt weiterverwendet werden
$blank_map_object = ms_newMapObj($pfad_zur_map_datei);
$blank_map_object->setSize($map_width, $map_height);
$blank_map_object->setExtent($minx, $miny, $maxx, $maxy);
$blank_map_object->preparequery();
$blank_map_image = $blank_map_object->prepareImage();

//Layer, Klasse und Stil für die Markierung anlegen
$draw_layer = ms_newLayerObj($blank_map_object);
$draw_layer->set('type', $typ_des_layers);
$draw_layer->set('status', MS_ON);
$new_class = ms_newClassObj($draw_layer);
$new_class->set('status', MS_ON);
$new_style = ms_newStyleObj($new_class);
$new_style->set('size', $gewuneschte_groesse_fuer_die_markierung);
$new_style->set('symbolname', $name_eines_symbols_fuer_die_markierung);

//Shape generieren, dem Layer hinzufügen und auf die Grafik bringen
$draw_shape = ms_shapeObjFromWkt($wkt_string); //hier käme jetzt 
"Layer->getShape()"
$draw_layer->addFeature($draw_shape);
$draw_layer->draw($blank_map_image);

//Kartengrafik generieren und zum debuggen direkt anzeigen
$image_url=$blank_map_image->saveWebImage();
echo "<img src='$image_url'/>";
---schnapp--------------------------

> Um die Objekte anzufragen nutze ich momentan oLayer->queryByAttributes().
>
> Das ist aber bei vielen Objekten (>400) sehr langsam.
>
> Nun habe ich mir zu jedem Objekt den Layer und den Shapeindex in einer 
> Datenbank gespeichert, die ich schneller abfragen kann.
>
> Mit Layer->getShape() finde ich die Shapeobjekte auch wieder.
Wenn Du die Daten in einer Geo-Datenbank (z. B. Postgis) statt in 
E$ri-Shapefiles spei, queryByAttributes() und "Shapeindex in einer 
Datenbank" zu verwenden, gehts vielleicht einfacher...

Gruß
Ludwig

Dominik Gierse schrieb:
>
> Hallo,
>
>  
>
> ich habe eine MS4W-basierte Anwendung. Momentan übergeben ich in den 
> URL-Parametern einige IDs zu Objekte, die dann in der Karte angezeigt 
> werden sollen. Meine Daten stehen immer in  ESRI-Shapefiles, in den 
> DBF-Files ist die ID jeweils hinterlegt
>
>  
>
> Um die Objekte anzufragen nutze ich momentan oLayer->queryByAttributes().
>
> Das ist aber bei vielen Objekten (>400) sehr langsam.
>
>  
>
> Nun habe ich mir zu jedem Objekt den Layer und den Shapeindex in einer 
> Datenbank gespeichert, die ich schneller abfragen kann.
>
> Mit Layer->getShape() finde ich die Shapeobjekte auch wieder.
>
> Wie kann ich die Objekte dann anschließend in der Karte wieder markieren ?
>
>  
>
>  
>
> mit freundlichen Grüßen
>
>  
>
> Dominik Gierse, Dipl. Ing. (FH)
>
> Produktmanagement Virtueller Regenschreiber,
>
> Softwareentwicklung    
>
> mailto:gierse at systemtechnik.net   
>
> Tel./Fax: +49 291 9929-70 / 7691
>
> -----------------------------------------------------------------------     
>
>
> Sitz der Gesellschaft:
>
> HST Hydro-Systemtechnik GmbH
>
> Sophienweg 3
>
> D-59872 Meschede, Germany   
>
> Tel./Fax: +49 291 9929-0 / 7691
>
> http://www.systemtechnik.net
>
> -----------------------------------------------------------------------     
>
>
> Geschäftsführer: Dipl.-Ing. Martin Frigger, Dipl.-Ing. Richard Ernst  
>
> Registergericht: Amtsgericht Arnsberg - HRB 3396    
>
> UST-IDNR.: DE 191 917 337   
>
> Steuer-Nr.: 334 5706 0269
>
>  
>