Fwd: [UMN_MAPSERVER-USERS] How to edit attribute of a selected shape?

Xiaonan Zhang xnzhang11 at GMAIL.COM
Tue Jan 31 06:25:43 PST 2006


Hi Skalaski,

Thanks for the code. I tried it but it didn't work. There are errors when
change the db file I think. Please see my code used. Also could you please
give me the code of the html input. I have to done this very soon otherwise
I will not ask this.

            /*
-------------------------------------------------------------------- */
      /* check if it's the comment button which is pressed               */
      /*                                  */
      /*
-------------------------------------------------------------------- */
       else if ($HTTP_FORM_VARS["CMD"] == "COMMENT")
          {
              $oPixelPos = ms_newpointobj(); // to record the click position


              if ($HTTP_FORM_VARS["INPUT_TYPE"])
            {
          $szCoord = strval($HTTP_FORM_VARS["INPUT_COORD"]);
          $szCoordType = strval($HTTP_FORM_VARS["INPUT_TYPE"]);
          if (strcmp($szCoordType,"auto_point") == 0)
          {
            $szCoordArray =explode(",", $szCoord);
            $nClickPixX = $szCoordArray[0];
            $nClickPixY = $szCoordArray[1];
          }
          } //Get the point screen location


          //Covert to geo-location
          $nClickGeoX = GMapPix2Geo($nClickPixX, 0, $dfWidthPix,
                 $dfMinX, $dfMaxX, 0);
            $nClickGeoY = GMapPix2Geo($nClickPixY, 0, $dfHeightPix,
                 $dfMinY, $dfMaxY, 1);

            //Create a new comment point
            $oClickGeo = ms_newPointObj();
            $oClickGeo->setXY($nClickGeoX, $nClickGeoY);

            //printf("ClickGeoX %f<BR>\n",$nClickGeoX);
          //printf("ClickGeoY %f<BR>\n",$nClickGeoY);

          //Add it to the comments layer
          $shape = ms_newShapeObj(MS_SHAPE_POINT);
          $line = ms_newLineObj();
          $line->add($oClickGeo);
          $shape ->add($line);
          //print_r($shape->values);

          //$shape->set ($shape->values["Comment"], "neweddddd"); // change
the comment attributes
          //$shape->values["Comment"]= "neweddddd";


          $poLayer = $gpoMap->getlayerbyname(comments); //get the layer
"comments"
          //$poLayer->open();
          //printf("Layer Name: %f<BR>\n", $poLayer->name);

          //change the comment attribue here
          //$newArr= array(1,1,comment);
          //$shape->set(values, $newArr); //error, values is not a property

          $poLayer-> addfeature($shape); //add the new comment point


          //Task1: input the new comment
          //Method1:Input form
          Printf( "
               <input TYPE='text' NAME=\"new_comment\" value='Please add you
comment here!' size =80>
               <input TYPE='submit' value='Add'>");

          //end of method1

          //Metod 2:pop up a window for user to input comments

          //Printf("The new comment is %f<BR>\n",$_GET['new_comment']);


          //Save the changes
            //$cmmShapefile = "../htdocs/e_Salford/data/comments";
          $objShapefile = ms_newShapeFileObj(
'../htdocs/e_Salford/data/comments', -2 );
          $dbname= "C:/ms4w/Apache/htdocs/e_Salford/data/comments.dbf";
          $db = dbase_open($dbname, 2);
          $nf = dbase_numfields($db);
           $rn = dbase_numrecords ($db);

           $vatr =array("new comment here", 1) ;

           if (ereg("([0-9]+)", $HTTP_FORM_VARS["new_comment"], $vatr))
           {
            $def = array($vatr[0]);
           }
           else
           {
            $def = array($rn+1);
           }

           $objShapefile->addPoint($oClickGeo);
           dbase_add_record($db, $def);

           dbase_close ($db);

           $objShapefile->free();
           $oClickGeo->free();

regards

Jonathan


On 27/01/06, Skalski Artur - askals <Artur.Skalski at acxiom.com> wrote:
>
> OK this is a part of the php code I used to add point to shp, notice to
> use it you have to first give an attribute value (fill a html input) which
> you will save in a dbf. file, than click on a map to add this point (I was
> using previously created blank shp. file)
> ad here is the code:
>
> else if ($HTTP_FORM_VARS["CMD"] == "INPUT_POINT")
>  {
>   $nClickGeoX = GMapPix2Geo($nClickPixX, 0, $dfWidthPix,
>            $dfMinX, $dfMaxX, 0);
>   $nClickGeoY = GMapPix2Geo($nClickPixY, 0, $dfHeightPix,
>            $dfMinY, $dfMaxY, 1);
>
>   $oPoint = ms_newPointObj();
>   $oPoint->setXY($nClickGeoX, $nClickGeoY);
>
>   $oshpfile = ms_newShapefileObj('C:\Program Files\Apache
> Group\Apache2\htdocs\data\siedlce\ptk', -2);
>
>   $dbname = "C:/Program Files/Apache
> Group/Apache2/htdocs/data/siedlce/ptk.dbf";
>
>
>   $db = dbase_open ( $dbname,2);
>
>   $nf = dbase_numfields($db);
>   $rn = dbase_numrecords ($db);
>
>   if (ereg("([0-9]+)", $HTTP_FORM_VARS["atrybuty"], $vatr))
>   {
>    $def = array($vatr[1]);
>   }
>   else
>   {
>    $def = array($rn+1);
>   }
>
>   $oshpfile->addPoint($oPoint);
>   dbase_add_record($db, $def);
>
>   dbase_close ($db);
>
>   $oshpfile->free();
>   $oPoint->free();
> }
>
> usig this i never had any problem with overwriting allready added points,
> no such thing happened
>
> hope this helps
>
> regards
>
> Artur Skalski
>
> *ACXIOM Polska*
> Telephone:      (+48 22) 606 11 27      Budynek Saturn
> Facsimile:      (+48 22) 606 11 28      Domaniewska 41
> Mobile:         (+48) 503 070 036       02-672 Warszawa
> E-mail:         artur.skalski at acxiom.com
>
> -----Original Message-----
> *From:* Xiaonan Zhang [mailto: xnzhang11 at gmail.com]
> *Sent:* Thursday, January 26, 2006 12:59 PM
> *To:* Skalski Artur - askals
> *Cc:* MAPSERVER-USERS at LISTS.UMN.EDU
> *Subject:* Re: [UMN_MAPSERVER-USERS] How to edit attribute of a selected
> shape?
>
> hi, Skalski,
>
> Thanks for the reply. However could you please give more information on
> this. Maybe an example.
>
> The code was working partly ok, the new point can be added, however as I
> said, it will overwrite the old one. It's attribute was inherited from the
> old one. I now want to change it's attribute and when I
> use  $poLayer->getResult(0); there seems not point was picked up.
>
> regards,
>
> Jonathan
>
>
>
> On 26/01/06, Skalski Artur - askals <Artur.Skalski at acxiom.com > wrote:
> >
> > To change an attribute of added point You have to also update a dbase
> > file (I don't see that in your code) wihich stores all atributes of shapes
> > in shp.file, otherwise you get nothing. And if you try to open such a
> > file in ArcViwe it will promt taht tha file was damaged which is because
> > dbf. file record number doesn't mach shp. file record number.
> > dbase.dll which is used to create and update dbf. file comes with
> > standard distribution off all lates php binaries
> >
> > ragards
> >
> > Artur Skalski
> >
> > *ACXIOM Polska*
> > Telephone:      (+48 22) 606 11 27      Budynek Saturn
> > Facsimile:      (+48 22) 606 11 28      Domaniewska 41
> > Mobile:         (+48) 503 070 036       02-672 Warszawa
> > E-mail:         artur.skalski at acxiom.com
> >
> > -----Original Message-----
> > *From:* UMN MapServer Users List [mailto: MAPSERVER-USERS at LISTS.UMN.EDU]
> > *On Behalf Of *Xiaonan Zhang
> > *Sent:* Wednesday, January 25, 2006 6:02 PM
> > *To:* MAPSERVER-USERS at LISTS.UMN.EDU
> > *Subject:* [UMN_MAPSERVER-USERS] How to edit attribute of a selected
> > shape?
> >
> > Dear all,
> >
> > I am tring to create a function which can add comment point onto layer
> > however I got a few problems here:
> > 1. the newly added one always overwrite the existing point so there is
> > always only one point in that layer.
> > 2. I can not regain the added point.
> > 3. how to change the attribute of the added point, say there is one
> > attribue called "Comment".
> >
> > thanks.
> >
> > My code is:
> >
> > //Create a new comment point
> >             $ClickGeo = ms_newPointObj();
> >             $ClickGeo->setXY($nClickGeoX, $nClickGeoY);
> >
> >             //printf("ClickGeoX %f<BR>\n",$nClickGeoX);
> >           //printf("ClickGeoY %f<BR>\n",$nClickGeoY);
> >
> >           //Add it to the comments layer
> >           $shape = ms_newShapeObj(MS_SHAPE_POINT);
> >           $line = ms_newLineObj();
> >           $line->add($oClickGeo);
> >           $shape ->add($line);
> >
> >
> >           $poLayer = $gpoMap->getlayerbyname(comments); //get the layer
> > "comments"
> >           $poLayer->open();
> >           //printf("Layer Name: %f<BR>\n", $poLayer->name);
> >
> >
> >           $poLayer-> addfeature($shape); //add the new comment point
> >
> >
> >           //Save the changes
> >             $cmmShapefile = "../htdocs/data/comments";
> >           $objShapefile = ms_newShapeFileObj( $cmmShapefile,
> > MS_SHP_POINT );
> >           $objShapefile->addshape($shape);
> >           $objShapefile->free;
> >            $poLayer->close();
> >
> >           //Task2: Use layer->querybypoint to regain the newly added
> > point and then change it's comment attribut
> >
> >           //Task2.1:get the new added comment point
> >                  $poLayer->querybypoint($oClickGeo, MS_SINGLE, 2);
> >                  $numResults = $poLayer->getNumResults();
> >                  printf("Find point: %f<BR>\n",
> > $numResults);
> >                  $oRes = $poLayer->getResult(0);
> >                  printf("tileindex: %f<BR>\n", $oRes->tileindex);
> >                  printf("SHAPEINDEX: %f<BR>\n",
> > $oRes->shapeindex);
> >                 $oShape = $poLayer->getShape(-1,0); //(-1,-1)
> >                 print_r($oShape->values); //print the keys of the values
> > array
> >                 $comment = $oShape->Values["Comment"];
> >                 printf("The comment attribute is ---: %f<BR>\n",$comment
> > ); //display comment attribute
> >
> >
> >
> > ***************************************************************************
> > The information contained in this communication is confidential, is
> > intended only for the use of the recipient named above, and may be legally
> > privileged.
> >
> > If the reader of this message is not the intended recipient, you are
> > hereby notified that any dissemination, distribution or copying of this
> > communication is strictly prohibited.
> >
> > If you have received this communication in error, please resend this
> > communication to the sender and delete the original message or any copy
> > of it from your computer system.
> >
> > Thank You.
> > ****************************************************************************
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20060131/0da29a1d/attachment.htm>


More information about the MapServer-users mailing list