[mapserver-users] PHP mapscript using OracleSpatial

thomas bonfort thomas.bonfort at gmail.com
Mon Oct 1 09:20:25 PDT 2012


try GRID->LABELFORMAT->"DD" instead of GRID->LABELFORMAT->DD in your mapfile.

--
thomas

On Tue, Jul 10, 2012 at 4:27 AM, Jessica Clarke
<Jessica.Clarke at forestrytas.com.au> wrote:
> Hi Andreas (and others),
> Thank you for your assistance.
> I have moved past my oracle issues now, but I'm having trouble with
> Mapserver.
> The only error I get is
>
> "Error in getString(): Parsing error near (DD):(line 463)"
>
> I'll attach my code to help, but I'm not sure why I'm having this issue.
>
> Any advice is very welcome.
> Thank you.
> Jess
>
>
> ###PHP###
> <?php
> //Call like:
> shape_name=ASSET&shape_id=19117&shape_type=MS_LAYER_POLYGON&rel_name=SURVEY&rel_id=42&rel_type=MS_LAYER_LINE
> //
> $oracle_user='user';
> $oracle_pass='pass';
> $oracle_db='db;
> if(!extension_loaded('MapScript'))
> {
>  dl('php_mapscript.dll');
> }
>
> $buffer=50;
>
> if ($_GET['shape_name'])
> {
>  //original shape
>  $shape_name = $_GET['shape_name'];
>  $shape_id = $_GET['shape_id'];
>  $shape_type = $_GET['shape_type'];
>
>  //related shape
>  $rel_name = $_GET['rel_name'];
>  $rel_id = $_GET['rel_id'];
>  $rel_type = $_GET['rel_type'];
>
>  switch ($shape_name)
>  {
>   //take the shape name input via the url and use this information to set
> the appropriate table view
>   //then to find the extent values using the select statement
>   //then set the data, and related data according to the type
>   case "ASSET":
>    $rel_view = $shape_name;
>    $query = "SELECT a.asset_id,
>     SDO_GEOM.SDO_MIN_MBR_ORDINATE(a.shape, 1),
>     SDO_GEOM.SDO_MIN_MBR_ORDINATE(a.shape, 2),
>     SDO_GEOM.SDO_MAX_MBR_ORDINATE(a.shape, 1),
>     SDO_GEOM.SDO_MAX_MBR_ORDINATE(a.shape, 2)
>     FROM fod.asset a, fod.related_asset_shape b
>     WHERE a.asset_id = b.asset_id
>     AND b.shape_id = ".$rel_id;
>    $data = "shape from (select asset_id, shape from fod.asset where asset_id
> = ".$shape_id.") using unique asset_id";
>    $rel_data = "shape from (select asset_id, shape_id, shape from
> fod.related_asset_shape where asset_id = ".$rel_id.") using unique
> shape_id";
>    break;
>   case "SURVEY":
>    $rel_view = $shape_name;
>    $query = "SELECT a.survey_id, SDO_GEOM.SDO_MIN_MBR_ORDINATE(a.shape, 1),
> SDO_GEOM.SDO_MIN_MBR_ORDINATE(a.shape, 2),
> SDO_GEOM.SDO_MAX_MBR_ORDINATE(a.shape, 1),
> SDO_GEOM.SDO_MAX_MBR_ORDINATE(a.shape, 2) FROM fod.survey a,
> fod.related_survey_shape b WHERE a.survey_id = b.survey_id AND b.shape_id =
> ".$rel_id;
>    $data = "shape from (select survey_id, shape from fod.survey where
> survey_id = ".$shape_id.") using unique asset_id";
>    $rel_data = "shape from (select survey_id, shape, shape_id from
> fod.related_survey_shape where survey_id = ".$rel_id.") using unique
> shape_id";
>    break;
>   case "OPERATION":
>    $rel_view = "opn";
>    $query = "SELECT a.operation_id, SDO_GEOM.SDO_MIN_MBR_ORDINATE(a.shape,
> 1), SDO_GEOM.SDO_MIN_MBR_ORDINATE(a.shape, 2),
> SDO_GEOM.SDO_MAX_MBR_ORDINATE(a.shape, 1),
> SDO_GEOM.SDO_MAX_MBR_ORDINATE(a.shape, 2) FROM fod.operation a,
> fod.related_opn_shape b WHERE a.operation_id = b.operation_id AND b.shape_id
> = ".$rel_id;
>    $data = "shape from (select operation_id, shape from fod.operation where
> operation_id = ".$shape_id.") using unique operation_id";
>    $rel_data = "shape from (select operation_id, shape, shape_id from
> fod.related_opn_shape where operation_id = ".$rel_id.") using unique
> shape_id";
>    break;
>   default:
>  }
>
>  //echo $rel_view;
>
>  $conn=OCILogon($oracle_user, $oracle_pass, $oracle_db);
>  //check connection
>  if(!$conn)
>   {exit("connection failed:" . $conn);}
>  else
>   //{ echo "hooray - connected: ". $conn;}
>
>  $asset_query = OCIParse($conn, $query);
>  oci_execute($asset_query);
>  $target_asset=oci_fetch_array($asset_query);
>
>
>  //Create new map object and set up some parameters
>  $map=ms_newMapObj('base2.map');
>  //Set map extent to target asset MBR +/- buffer value
>  $map->setExtent($target_asset[1]-$buffer, $target_asset[2]-$buffer,
> $target_asset[3]+$buffer, $target_asset[4]+$buffer);
>
>  //Set up original shape layer
>  $shape_layer=$map->getLayerByName("layer1");
>  $shape_layer->set("status", MS_ON);
>  $shape_layer->set("type", $shape_type);
>  $shape_layer->set("connectiontype", MS_ORACLESPATIAL);
>  $shape_layer->set("connection",
> $oracle_user."/".$oracle_pass."@".$oracle_db);
>  $shape_layer->set("data", $data);
>  //echo $data;
>  $shape_layer->setProcessing("CLOSE_CONNECTION=DEFER");
>  $shape_layer->setProjection('+proj=utm +zone=55 +south +ellps=GRS80
> +towgs84=0,0,0,0,0,0,0 +units=m +no_defs');
>  //$shape_layer->set("maxscaledenom", 250001);
>   $shape_class=ms_newClassObj($shape_layer);
>    $shape_style=ms_newStyleObj($shape_class);
>    $shape_style->color->setRGB(199, 140, 218);
>    $shape_style2=ms_newStyleObj($shape_class);
>    $shape_style2->outlinecolor->setRGB(147, 37, 178);
>    $shape_style2->set("width", 2);
>
>  //Set up related shape layer
>  /*$rel_layer=$map->getLayerByName("layer2");
>
>  $rel_layer->set("status", MS_ON);
>  $rel_layer->set('type', $rel_type);
>  $rel_layer->set("connectiontype", MS_ORACLESPATIAL);
>  $rel_layer->set("connection",
> $oracle_user."/".$oracle_pass."@".$oracle_db);
>
>  $rel_layer->set("data", $rel_data);
>  //echo $rel_data;
>
>  $rel_layer->setProcessing("CLOSE_CONNECTION=DEFER");
>  $rel_layer->setProjection('+proj=utm +zone=55 +south +ellps=GRS80
> +towgs84=0,0,0,0,0,0,0 +units=m +no_defs');
>   $rel_class=ms_newClassObj($rel_layer);
>    $rel_style=ms_newStyleObj($rel_class);
>    $rel_style->color->setRGB(199, 140, 218);
>    $rel_style->set("width", 3);
>  //echo 'layer2 done';
> */
>
> //draw the map
> $map_image=$map->draw();
>
> $error=ms_GetErrorObj();
> while($error && $error->code != MS_NOERR)
> {
>  printf("Error in %s: %s<br>\n", $error->routine, $error->message);
>  $error = $error->next();
> }
> $map_image->saveWebImage();  //send image to web browser
> }
> ?>
>
> ###MAPFILE###
> MAP
>  NAME base2
>
>  STATUS ON
>  SIZE 800 600
>  EXTENT 227154 5165779 627108 5614539
>  UNITS METERS
>  IMAGECOLOR 234 255 255
>  SYMBOLSET "base.sym"
>  FONTSET "base.list"
>  PROJECTION
>   "proj=utm"
>   "zone=55"
>   "south"
>   "ellps=GRS80"
>   "towgs84=0,0,0,0,0,0,0"
>   "units=m"
>   "no_defs"
>  END
>  SHAPEPATH "E:\tilelib\"
>  QUERYMAP
>   STATUS ON
>   STYLE SELECTED
>  END
>
>  OUTPUTFORMAT
>   NAME 'AGG'
>   DRIVER AGG/PNG
>   IMAGEMODE RGB
>  END
>
>  WEB
>   IMAGEPATH "C:\htdocs\tmp\"
>   IMAGEURL "/tmp/"
>  END
>
>  LEGEND
>   STATUS OFF
>  END
>
>  SCALEBAR
>   STATUS EMBED
>   POSITION lr
>   STYLE 1
>   UNITS meters
>   TRANSPARENT ON
>   LABEL
>    COLOR 0 0 0
>    OUTLINECOLOR 255 255 255
>    FONT "verdana"
>    TYPE TRUETYPE
>    POSITION AUTO
>    PARTIALS FALSE
>    SIZE 8
>    BUFFER 1
>   END
>  END
>
> [.....]
> LAYER
>   NAME layer1
>   TYPE POLYGON
>
>   STATUS OFF
>  END
>
>  LAYER
>   NAME layer2
>   TYPE LINE
>   STATUS OFF
>  END
> [.....]
>
> LAYER
>   NAME "grid"
>   TYPE LINE
>   STATUS ON
>   CLASS
>    STYLE
>     OUTLINECOLOR 0 0 0
>     WIDTH 1
>    END
>    LABEL
>     COLOR  255 0 0
>     FONT "verdana"
>     TYPE truetype
>     SIZE 8
>     POSITION CC
>     PARTIALS FALSE
>     BUFFER 0
>     OUTLINECOLOR 255 255 255
>     SHADOWCOLOR 60 60 60
>     SHADOWSIZE 2 2
>    END
>   END
>   PROJECTION
>    "proj=utm"
>    "zone=55"
>    "south"
>    "ellps=GRS80"
>    "towgs84=0,0,0,0,0,0,0"
>    "units=m"
>    "no_defs"
>   END
>   GRID
>    LABELFORMAT DD
>    MAXARCS 4
>    MAXSUBDIVIDE 8
>   END
>  END
>
>>>> "Eichner, Andreas - SID-NLKM" <Andreas.Eichner at sid.sachsen.de> 6/07/2012
>>>> 5:56 PM >>>
>
>
> Hello Jessica,
>
> I've tested your code successfully on PHP MapScript v5.2.0.
>
>>  I have issues with
>> oraclespatial, and I just keep getting errors that the layer
>> can't be drawn.
>
> What errors do you get? Something like "[...] Error: ORA-12154:
> TNS:could not resolve the connect identifier specified"? Then you
> might need to set some environment variables first. For example,
> I set ORACLE_HOME, TNS_ADMIN, LC_CTYPE and NLS_LANG.
>
>> The lack of error reporting from
>> php hasn't been helping matters either ;)
>
> You can execute your script on the command line via "php <scriptname>".
> This will display errors as long as error_reporting(E_ALL) or similar
> is set:
>   $ php test.php
>
>   Warning: [MapServer Error]: msDrawMap(): Failed to draw layer named
> 'ASSET'.
>    in /tmp/foo/test.php on line 53
>
>   Warning: [MapServer Error]: msOracleSpatialLayerOpen(): Cannot create
> OCI Handlers. Connection failure. Check the connection string.   Error:
> ORA-12154: TNS:could not resolve the connect identifier specified
>   .
>    in /tmp/foo/test.php on line 53
>   Error in msDrawMap(): Failed to draw layer named 'ASSET'.<br>
>
> HTH
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
> This transmission is intended solely for the person or organisation to whom
> it is addressed.
>
> It is confidential and may contain legally privileged information.
>
> If you have received this transmission in error, you may not use, copy or
> distribute it.
>
> Please advise us by return e-mail or by phoning 61 3 6235 8333 and
> immediately delete the transmission in its entirety.
>
> We will meet your reasonable expenses of notifying us.
>
> Despite our use of anti-virus software, Forestry Tasmania cannot guarantee
> that this transmission is virus-free.
>
> --------------------------------------------------------------------------------------------------------------------------------------------
>
>
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
>


More information about the mapserver-users mailing list