[mapserver-dev] Querying line with queryByRect() only works on the line ending point

Håkon Åmdal hawk at aamdal.com
Mon Oct 5 05:02:02 EDT 2009


Changing

 $numResults = $oPointLayer->getNumResults();
to
 $numResults = $oTraceLayer->getNumResults();

would certainly help.

Thank you, guys.


Håkon Åmdal wrote:
> 
> Hi there,
> 
> I'm developing an application that allows the user to click on certain map
> features, like a point or line, to get info about it (stored in a
> Microsoft SQL database, connected with an ID column) . I am now able to
> click on a point to get info about it, but to get info about a line, i
> need to click on the end of the line. If i try to click on the middle of
> it, the queryByRect wont give me the ID of the line. Here is the layer
> definition:
> 
> LAYER
> 	NAME Traseer
> 	GROUP TelMe
> 	TYPE LINE
> 	STATUS ON
> 	CONNECTIONTYPE OGR
> 	CONNECTION "TM_Nett/TM_Traces.TAB"
> 	STYLEITEM "AUTO"
> 	minscaledenom 0
> 	maxscaledenom 300000
> 	CLASSITEM "Type"
> 	DUMP TRUE
> 	CLASS
> 		NAME "Traseer"
> 		TEMPLATE "ttt_query.html"
>         	SYMBOL "default-circle"
>         	COLOR 255 0 255
> 	END
> END # Layer
> 
> When i click a point in fusion, it creates a rectangle (10x10 pixles)
> around the click position, and converts it to geographic coordinates. Then
> it sends all to this mapscript:
> 
> <?php
> /*****************************************************************************
>  * Purpose: create a query by attributes
> 
> *****************************************************************************/
> 
>   /* set up the session */
> include ("Common.php");
> include ("Utilities.php");
> include('../../common/php/Utilities.php');
> 
> 
> $strPointLayer = $_REQUEST['pointLayer'];
> $strTraceLayer = $_REQUEST['traceLayer'];
> $arrTraceIDs = array();
> $arrPointIDs = array();
> 
> 
> $result = "";
> 
> 
> if (!isset($mapName)) {
>      die('Mapname not set');
> }
> if (isset($_SESSION['maps']) && isset($_SESSION['maps'][$mapName])) {
>      $oMap = ms_newMapObj($_SESSION['maps'][$mapName]);
> }
> 
> $rectObj = ms_newRectObj();
> $rectObj->set("minx",$_REQUEST['sMinX']);
> $rectObj->set("miny",$_REQUEST['sMinY']);
> $rectObj->set("maxx",$_REQUEST['sMaxX']);
> $rectObj->set("maxy",$_REQUEST['sMaxY']);
> 
> $oPointLayer = $oMap->GetLayerByName($strPointLayer);
> 
> if (@$oPointLayer->queryByRect($rectObj, MS_MULTIPLE)== MS_SUCCESS)
> {
> 	 $numResults = $oPointLayer->getNumResults();
> 	 
> 	 
> 	 $oPointLayer->open(); 
> 	 
>      $arrPointIDs = array();
> 	 for ($iResult = 0; $iResult<$numResults; $iResult++) {
> 	 	$oResultSet = $oPointLayer->getResult($iResult);
> 		$oShape =
> $oPointLayer->getShape($oResultSet->tileindex,$oResultSet->shapeindex);
> 		array_push($arrPointIDs, $oShape->values['Point_ID']);
> 	 }	 
>      $oPointLayer->close();
> }
> 
> $oTraceLayer = $oMap->GetLayerByName($strTraceLayer);
> 
> if (@$oTraceLayer->queryByRect($rectObj)== MS_SUCCESS)
> {
> 	 $numResults = $oPointLayer->getNumResults();
>      $result = $numResults;
> 	 
> 	 
> 	 $oTraceLayer->open(); 
> 	 
> 	 for ($iResult = 0; $iResult<$numResults; $iResult++) {
> 	 	$oResultSet = $oTraceLayer->getResult($iResult);
> 		$oShape =
> $oTraceLayer->getShape($oResultSet->tileindex,$oResultSet->shapeindex);
> 		array_push($arrTraceIDs, $oShape->values['Trace_ID']);
> 	 }
> 	 
> 	
> 	 
> 	 
>      $oTraceLayer->close();
> }
> 
> $result = "Point_ID=" . implode(",", $arrPointIDs) . "&Trace_ID=" .
> implode(",", $arrTraceIDs);
> 
> echo var2json($result);
> 
> ?>
> 
> This script works all fine if the ending(or starting) points are within
> the rectangle . But are there any way to query for the whole line
> geometry? Would it make any difference if I queried by CGI?
> 
> I hope any of you can help me out.
> Sincerely,
> Håkon
> 

-- 
View this message in context: http://n2.nabble.com/Querying-line-with-queryByRect-only-works-on-the-line-ending-point-tp3767516p3767709.html
Sent from the Mapserver - Dev mailing list archive at Nabble.com.


More information about the mapserver-dev mailing list