[Mapserver-DE] Query via Mapscript?
Ralph Anthes
anthes at ive-mbh.de
Mit Jul 20 13:24:45 CEST 2005
Hallo,
nachdem ich nun mehrer Tipps bekommen habe ist das Problem gelöst. Der
Hauptfehler lag in den falschen Koordinaten, denn ich muss natürlich die
XY-Koordinaten der Grafik erst nach Weltkordinaten umrechnen. Dafür habe
ich folgende Befehle genutzt:
Erstens den Extent auf die gezoomte Fläche ausrichten:
$extent_to_set = explode(" ",$_POST["extent"]);
$map->setextent($extent_to_set[0],$extent_to_set[1],$extent_to_set[2],$extent_to_set[3]);
$xkoord =
pix2geo($HTTP_POST_VARS["map_x"],0,650,$map->extent->minx,$map->extent->maxx,0);
$ykoord =
pix2geo($HTTP_POST_VARS["map_y"],0,650,$map->extent->miny,$map->extent->maxy,0);
und hier die pix2geo Funktion:
// $intPixPos = Pixelwert des angeklickten Punktes
// $intDefPixMin = minimaler Pixelwert (in der Regel 0)
// $intDefPixMax = maximaler Pixelwert (aus dem Mapfile)
// $dblGeoMin = Minimal-Wert der aktuellen geografischen Ausdehnung
// $dblGeoMax = Maximal-Wert der aktuellen geografischen Ausdehnung
// $booInversePix = für X-Wert 0, für Y-Wert 1 (Bildkoordinaten haben
ihren Ursprung oben links)
function Pix2Geo($intPixPos, $intDefPixMin, $intDefPixMax, $dblGeoMin,
$dblGeoMax, $booInversePix)
{
$dblCurWidthGeo = $dblGeoMax - $dblGeoMin;
$intDefWidthPix = $intDefPixMax - $intDefPixMin;
$dblPixToGeo = $dblCurWidthGeo / $intDefWidthPix;
if ($booInversePix == "0") // für den x-Wert
{
$dblDeltaPix = $intPixPos - $intDefPixMin;
} else // für den y-Wert (Bildkoordinaten
haben einen anderen Nullpunkt)
{
$dblDeltaPix = $intDefPixMax - $intPixPos;
}
$dblDeltaGeo = $dblDeltaPix * $dblPixToGeo;
$dblPosGeo = $dblGeoMin + $dblDeltaGeo;
return ($dblPosGeo);
}
Vielen Dank noch mal an alle, die mir geholfen haben!
Gruß
Ralph
Ralph Anthes schrieb:
> Hallo Liste,
>
> ich verzweifele irgendwie am Query via Mapscript. Es kommt immer
> folgende Meldung:
> *Warning*: [MapServer Error]: msQueryByPoint(): No matching record(s)
> found. in */home/anthes/gis/mapserver/europa/query.php* on line *56
>
> *Was mache ich falsch bzw. wo ist der Denkfehler?
>
> Vielen Dank
> Ralph
>
> Hier meine Abfrage:
> $map->preparequery();
> $shapepath = $map->shapepath;
> $my_point = ms_newpointObj();
> $my_point->setXY($HTTP_POST_VARS["map_x"],$HTTP_POST_VARS["map_y"]);
> for ($i = 1; $i <= count($pLayer); $i++) {
> $layer = $map->getLayerByName($pLayer[$i]);
> if ($pLayerStatus[$i] == "ON") {
> $layer->set("status",MS_ON);
> if ($layer->queryByPoint($my_point, MS_SINGLE, 0) == MS_SUCCESS ) {
> for ($j=0; $j<$layer->getNumResults(); $j++) {
> $result = $layer->getResult($j);
> printf("lay=%d, res=%d, si=%d, ti=%d, ci=%d\n",
> $i, $j, $result->shapeindex, $result->tileindex,
> $result->classindex);
> }
> }
> }
> if ($pLayerStatus[$i] == "ON") {
> $layer->set("status",MS_ON);
> } else {
> $layer->set("status",MS_OFF);
> }
>
> Hier ein Ausschnitt aus meinem Mapfile:
> ############################################################
> Kartenbeschreibung
> DEBUG ON
> NAME EUROPA
> IMAGETYPE PNG
> SIZE 800 600
> STATUS ON
> SHAPEPATH "/home/anthes/gis/mapserver/europa/data/"
> FONTSET "fonts/fonts.list"
> IMAGECOLOR 86 131 249
>
> ############################################################
> Projektionseinstellung
> #################### Mode latlong EXTENT -11.1185 40 25.5 54
> PROJECTION "init=epsg:31297" END # 4326" END
> UNITS DD
>
> ############################################################ QUERY
> anschalten
> QUERYMAP
> STATUS ON
> STYLE HILITE
> END
>
> ############################################################ Layer
> Stadtgebiete
> LAYER
> NAME CityArea
> TYPE POLYGON
> STATUS OFF
> DATA city_area
> TOLERANCE 10
> # LABELREQUIRES ([Cities] = 1)
> LABELITEM 'NAME'
> LABELMAXSCALE 1000000
> CLASS
> TEMPLATE dummy.foo
> NAME "Citiesarea"
> COLOR 255 150 130
> LABEL
> POSITION AUTO
> PARTIALS TRUE
> TYPE TRUETYPE
> FONT "Arial-bold"
> ANTIALIAS TRUE
> SIZE 8
> COLOR 0 0 0
> MAXSIZE 15
> MINSIZE 5
> OUTLINECOLOR 255 255 255
> WRAP " "
> END
> END
> TOLERANCE 10
> TOLERANCEUNITS PIXELS
> END
>
> LAYER
> NAME CityQuery
> TYPE QUERY
> STATUS ON
> DATA city_area
> CLASS
> TEMPLATE dummy.foo
> END
> TOLERANCE 10
> TOLERANCEUNITS PIXELS
> END
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Mapserver-DE mailing list
>Mapserver-DE at freegis.org
>https://freegis.org/mailman/listinfo/mapserver-de
>
--
Dipl.-Ing. Ralph Anthes
Ingenieurgesellschaft für Verkehrs- und Eisenbahnwesen mbH
Vahrenwalder Platz 3, 30165 Hannover
Telefon: 0511/984228-18
Fax: 0511/984228-29
http://www.ive-mbh.de
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)