Yes it is. Either use the Mapguide API or write the code for the formula for
your state plane coordinates. Considering the formulas are quite tedious, I
say use the MgCoordinateSystemFactory class.

Example:  LL84 to CA83-VF (Los Angeles)

function transformCoordinate($source, $target, $x, $y) {
                //converts a coordinate from the source to the target 
coordinate sytem,
needs site connection first
                
                $coordSysFactory = new MgCoordinateSystemFactory();
                $coordSys1 = $coordSysFactory->CreateFromCode($source);
                $coordSys2 = $coordSysFactory->CreateFromCode($target);
                $csTransform12 = $coordSysFactory->GetTransform($coordSys1, 
$coordSys2);
                $csTransform21 = $coordSysFactory->GetTransform($coordSys2, 
$coordSys1);
                
                $geometryFactory = new MgGeometryFactory();
                //echo "Coordinates in CA83-VF: ($x, $y)<br>";
                $coordinateArg = $geometryFactory->CreateCoordinateXY($x, $y);
                $coordinate12 = $csTransform12->Transform($coordinateArg);
                $x12 = $coordinate12->GetX();
                $y12 = $coordinate12->GetY();
                //echo "Coordinates in LL84: ($x12, $y12)<br>";
                $new_coordinate = $geometryFactory->CreateCoordinateXY($x12, 
$y12);
                
                return $new_coordinate;
                
        }

        $lat = $args["lat"];
        $lon = $args["lon"];
        
        try {
                
                MgInitializeWebTier($webconfigFilePath);
                $userInfo = new MgUserInformation("e7", "e7");
                $siteConnection = new MgSiteConnection();
                $siteConnection->Open($userInfo);
                
                $point = transformCoordinate("LL84", "CA83-VF", $lon, $lat);
                echo $point->GetX() . "," . $point->GetY();
       }
        
        catch (MgException $e){
                $errorMsg = $e->GetMessage();
                $errorDetail = $e->GetDetails();
                echo "$errorMsg: $errorDetail";
        }


The same result using a formula:

        class Point {
                
                function __construct($x, $y) {  
                        $this->X = $x;
                        $this->Y = $y;  
                }
                
        }
        
        function calculate ($t, $e, $p) {
                //returns calculated expression
                
                $num  = 1 - $e*sin($p);
                $den = 1 + $e*sin($p);
                $den2 = pow($num/$den, $e/2);
                $x = $t/$den2;
                
                return $x;
        }

        function latAndLonToSP ($lat, $lon) {
                //convert lat/lon to CA83-VF coordinates
                 
                $a = 20925604.4742;   //major radius of ellipsoid,  (NAD 83) CA 
ZONE 0405
(feet), by definition
                $e = 0.081819191042830;  //eccentricity of ellipsoid (NAD 83) 
CA ZONE 0405
                $angRad = 0.01745329252;  //number of radians in a degree
                $pi4 = 3.1415926535897932384626433832795028841971/4;  //Pi:4
                $p0 = 33.5000 * $angRad;  //latitude of origin, Bb
                $m0 = -118.0000 * $angRad;  //central meridian, Lo
                $p1 = 34.03333333333333 * $angRad;   //latitude of first 
standard
parallel, Bs
                $p2 = 35.46666666666666 * $angRad;    //latitude of second 
standard
parallel, Bn
                $X0 = 6561666.66666666667; //False easting of central meridian 
(feet), Eo
                $Y0 = 1640416.66666666667; //False Northing of central meridian 
(feet), Nb
        
                //Calculate the coordinate system constants
                $m1 = cos($p1) / sqrt(1 - ($e * $e * sin($p1) * sin($p1)));
                $m2 = cos($p2) / sqrt(1 - ($e * $e * sin($p2) * sin($p2)));
                $t0 = tan($pi4 - ($p0 / 2));
                $t1 = tan($pi4 - ($p1 / 2));
                $t2 = tan($pi4 - ($p2 / 2));
                
                $t0 = calculate($t0, $e, $p0);
                $t1 = calculate($t1, $e, $p1);
                $t2 = calculate($t2, $e, $p2);
        
                $n = log($m1 / $m2) / log($t1 / $t2);
                $f = $m1 / ($n * pow($t1, $n));
                $rho0 = $a * $f * pow($t0, $n);
        
                //Convert the latitude/longitude to a coordinate.
                $lat = $lat * $angRad;
                $lon = $lon * $angRad;
                $t = tan($pi4 - ($lat / 2));
                $t = calculate($t, $e, $lat);
        
                $rho = $a * $f * pow($t, $n);
                $theta = $n * ($lon - $m0);
                //false easting
                $x = $rho * sin($theta) + $X0;
                //false northing
                $y = $rho0 - ($rho * cos($theta)) + $Y0;
                
                //format to 6 decimals
                $x = number_format($x, 6, '.', '');
                $y = number_format($y, 6, '.', '');
                $point = new Point($x, $y);
                
            return $point;              
        }

        $lat = $args["lat"];
        $lon = $args["lon"];
        $point = latAndLonToSP($lat, $lon);
        $x = (string) $point->X;
        $y = (string) $point->Y;


-- 
View this message in context: 
http://osgeo-org.1803224.n2.nabble.com/Is-it-possible-to-convert-Lat-and-Long-value-to-X-Y-AJAX-viewer-tp6023213p6064078.html
Sent from the MapGuide Users mailing list archive at Nabble.com.
_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

Reply via email to