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