From 89487e1f97006314b1422a91bbbc5b0dfa4dcee7 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Tue, 15 Dec 2015 09:27:02 +0000 Subject: [PATCH] Inclusão da biblioteca proj4php --- admin/js/estat_editor.js | 1 + admin/php/metaestat_uploadshp_submit.php | 37 ++++++++++++++++++++++++++++++++++--- aplicmap/dados/utm21.prj | 1 + pacotes/proj4php-proj4php5.2/LICENSE | 505 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/README.md | 25 +++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/composer.json | 35 +++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/LGPL GNU lesser licence.txt | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/WSProj4PHP_1.0.php | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102757.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102758.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG2154.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG21781.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG25832.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG25833.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG26591.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG26912.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27200.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27563.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27571.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31370.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31467.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31468.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG41001.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4139.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4181.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG42304.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4272.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4302.php | 3 +++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG5514.php | 2 ++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG900913.php | 6 ++++++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG900913.txt | 11 +++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/defs/GOOGLE.php | 3 +++ pacotes/proj4php-proj4php5.2/src/proj4php/proj4php.php | 418 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpCommon.php | 389 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpDatum.php | 401 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpLongLat.php | 23 +++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpPoint.php | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpProj.php | 638 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aea.php | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aeqd.php | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cass.php | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cea.php | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqc.php | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqdc.php | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/equi.php | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gauss.php | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gnom.php | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gstmerc.php | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/krovak.php | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/laea.php | 398 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/lcc.php | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/merc.php | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/mill.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/moll.php | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/nzmg.php | 338 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/omerc.php | 301 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/ortho.php | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/poly.php | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sinu.php | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/somerc.php | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/stere.php | 303 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sterea.php | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/tmerc.php | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/utm.php | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/src/proj4php/projCode/vandg.php | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pacotes/proj4php-proj4php5.2/test/testproj.php | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 66 files changed, 7253 insertions(+), 3 deletions(-) create mode 100644 aplicmap/dados/utm21.prj create mode 100644 pacotes/proj4php-proj4php5.2/LICENSE create mode 100644 pacotes/proj4php-proj4php5.2/README.md create mode 100644 pacotes/proj4php-proj4php5.2/composer.json create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/LGPL GNU lesser licence.txt create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/WSProj4PHP_1.0.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102757.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102758.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG2154.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG21781.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG25832.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG25833.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG26591.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG26912.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27200.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27563.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27571.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31370.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31467.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31468.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG41001.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4139.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4181.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG42304.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4272.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4302.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG5514.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG900913.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG900913.txt create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/defs/GOOGLE.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/proj4php.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpCommon.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpDatum.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpLongLat.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpPoint.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpProj.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aea.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aeqd.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cass.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cea.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqdc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/equi.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gauss.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gnom.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gstmerc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/krovak.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/laea.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/lcc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/merc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/mill.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/moll.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/nzmg.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/omerc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/ortho.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/poly.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sinu.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/somerc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/stere.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sterea.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/tmerc.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/utm.php create mode 100644 pacotes/proj4php-proj4php5.2/src/proj4php/projCode/vandg.php create mode 100644 pacotes/proj4php-proj4php5.2/test/testproj.php diff --git a/admin/js/estat_editor.js b/admin/js/estat_editor.js index ec44093..c45372e 100644 --- a/admin/js/estat_editor.js +++ b/admin/js/estat_editor.js @@ -576,6 +576,7 @@ i3GEOadmin.editor = { '

shp:

' + '

shx:

' + '

dbf:

' + + '

prj (opcional):

' + '' + '
' + 'Destino' + diff --git a/admin/php/metaestat_uploadshp_submit.php b/admin/php/metaestat_uploadshp_submit.php index baeb2a1..ce01a4e 100755 --- a/admin/php/metaestat_uploadshp_submit.php +++ b/admin/php/metaestat_uploadshp_submit.php @@ -51,17 +51,28 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shp"); if($status != 1) {echo "

Ocorreu um erro no envio do arquivo SHP";exit;} + $Arquivo = $_FILES['i3GEOuploadshx']['tmp_name']; $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shx"); if($status != 1) {echo "

Ocorreu um erro no envio do arquivo SHX";exit;} + $Arquivo = $_FILES['i3GEOuploaddbf']['tmp_name']; $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".dbf"); if($status != 1) {echo "

Ocorreu um erro no envio do arquivo DBF";exit;} - - if(!file_exists($dir_tmp."/".$nomePrefixo.".shp")) - {echo "

Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde();exit;} + + if($_FILES['i3GEOuploadprj']['tmp_name'] != ""){ + $Arquivo = $_FILES['i3GEOuploadprj']['tmp_name']; + $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".prj"); + if($status != 1){ + echo "

Ocorreu um erro no envio do arquivo PRJ";exit; + } + } + if(!file_exists($dir_tmp."/".$nomePrefixo.".shp")){ + echo "

Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde(); + exit; + } $arqshp = $dir_tmp."/".$nomePrefixo.".shp"; //pega os parametros de conexao @@ -75,6 +86,9 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ $mapObj = ms_newMapObjFromString("MAP END"); $layer = ms_newLayerObj($mapObj); $layer->set("data",$arqshp); + if(file_exists($dir_tmp."/".$nomePrefixo.".prj")){ + $layer->setprojection("AUTO"); + } $layer->open(); $colunasTemp = $layer->getItems(); $colunas = array(); @@ -190,8 +204,25 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ sleep(1); $srid = 4326; $escapar = "'"; + $prjMapa = $mapObj->getProjection(); + $prjTema = $layer->getProjection(); + if (($prjTema != "") && ($prjMapa != $prjTema)) + { + $projInObj = ms_newprojectionobj($prjTema); + $projOutObj = ms_newprojectionobj($prjMapa); + } + else{ + $projOutObj = ""; + $projInObj = ""; + } for ($i=0; $i<$numshapes;$i++){ $s = $layer->getShape(new resultObj($i)); + //projeta o shape se existir .prj + if($_FILES['i3GEOuploadprj']['tmp_name'] != "" && $projInObj != ""){ + $s->project($projInObj, $projOutObj); + //para nao projetar com postgis + $_POST["insrid"] = $_POST["outsrid"]; + } $vs = array(); foreach($colunas as $coluna){ diff --git a/aplicmap/dados/utm21.prj b/aplicmap/dados/utm21.prj new file mode 100644 index 0000000..af60b0b --- /dev/null +++ b/aplicmap/dados/utm21.prj @@ -0,0 +1 @@ +PROJCS["SAD69 / UTM zone 21S (deprecated)",GEOGCS["SAD69",DATUM["D_South_American_1969",SPHEROID["GRS_1967",6378160,298.247167427]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],UNIT["Meter",1]] diff --git a/pacotes/proj4php-proj4php5.2/LICENSE b/pacotes/proj4php-proj4php5.2/LICENSE new file mode 100644 index 0000000..5f2dd7f --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/LICENSE @@ -0,0 +1,505 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +(This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.) + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + {signature of Ty Coon}, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + diff --git a/pacotes/proj4php-proj4php5.2/README.md b/pacotes/proj4php-proj4php5.2/README.md new file mode 100644 index 0000000..e6f435f --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/README.md @@ -0,0 +1,25 @@ +# proj4php +PHP-class for proj4 +This is a PHP-Class for geographic coordinates transformation using proj4 definitions, thanks to a translation from Proj4JS. + +## Using + +```php +include("proj4php"); + +$proj4 = new Proj4php(); +$projL93 = new Proj4phpProj('EPSG:2154',$proj4); +$projWGS84 = new Proj4phpProj('EPSG:4326',$proj4); + +$pointSrc = new proj4phpPoint('652709.401','6859290.946'); +$pointDest = $proj4->transform($projL93,$projWGS84,$pointSrc); + +echo "Source : ".$pointSrc->toShortString()." in L93
"; +echo "Conversion : ".$pointDest->toShortString()." in WGS84

"; +``` + +There's is also way to define inline projections. + +## Developping + +Fill free to fork us and submit your changes ! diff --git a/pacotes/proj4php-proj4php5.2/composer.json b/pacotes/proj4php-proj4php5.2/composer.json new file mode 100644 index 0000000..2ce5448 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/composer.json @@ -0,0 +1,35 @@ +{ + "name": "proj4php/proj4php", + "license": "LGPL-2.1", + "type": "library", + "description": "A PHP-Class for geographic coordinates transformation using proj4 definitions, thanks to a translation from Proj4JS", + "keywords": [ + "geographic", + "coordinates", + "proj4", + "proj4js" + ], + "homepage": "https://github.com/proj4php/proj4php", + "authors": [ + { + "name": "julien2512", + "email": "moquet.julien@gmail.com", + "homepage": "https://github.com/julien2512", + "role": "Developer" + }, + { + "name": "winne27", + "homepage": "http://github.com/winne27", + "role": "Developer" + } + ], + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.0.*" + }, + "autoload": { + "classmap": ["src/"] + } +} diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/LGPL GNU lesser licence.txt b/pacotes/proj4php-proj4php5.2/src/proj4php/LGPL GNU lesser licence.txt new file mode 100644 index 0000000..b14ca0a --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/LGPL GNU lesser licence.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/WSProj4PHP_1.0.php b/pacotes/proj4php-proj4php5.2/src/proj4php/WSProj4PHP_1.0.php new file mode 100644 index 0000000..efdd658 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/WSProj4PHP_1.0.php @@ -0,0 +1,104 @@ +"; + echo " "; + echo " 2"; + echo " Wrong parameters"; + echo " "; + echo ""; + exit; + } +} + +$pointSrc = new proj4phpPoint( $x, $y ); +$pointDest = $proj4->transform( $projsource, $projdest, $pointSrc ); + +$tgtProjection = str_replace( ':', '::', $tgtProjection ); + +if( $format == 'json' ) { + echo "{\"status\" :\"success\", \"point\" : {\"x\":" . $pointDest->x . ", \"y\":" . $pointDest->y . ",\"projection\" :\"" . $tgtProjection . "\"}}"; + exit; +} else { + header ("Content-Type:text/xml"); + echo ""; + echo ""; + echo "" . $pointDest->x . ""; + echo "" . $pointDest->y . ""; + echo "" . $tgtProjection . ""; + echo ""; + echo ""; +} \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102757.php b/pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102757.php new file mode 100644 index 0000000..8b8bd9d --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102757.php @@ -0,0 +1,2 @@ + + + def is a CS definition in PROJ.4 WKT format, for example: + +proj="tmerc" //longlat, etc. + +a=majorRadius + +b=minorRadius + +lat0=somenumber + +long=somenumber + */ + protected function initDefs() { + // These are so widely used, we'll go ahead and throw them in + // without requiring a separate .js file + self::$defs['WGS84'] = "+title=long/lat:WGS84 +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"; + self::$defs['EPSG:4326'] = "+title=long/lat:WGS84 +proj=longlat +a=6378137.0 +b=6356752.31424518 +ellps=WGS84 +datum=WGS84 +units=degrees"; + self::$defs['EPSG:4269'] = "+title=long/lat:NAD83 +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"; + self::$defs['EPSG:3875'] = "+title= Google Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"; + self::$defs['EPSG:3785'] = self::$defs['EPSG:3875']; + self::$defs['GOOGLE'] = self::$defs['EPSG:3875']; + self::$defs['EPSG:900913'] = self::$defs['EPSG:3875']; + self::$defs['EPSG:102113'] = self::$defs['EPSG:3875']; + } + + //lookup table to go from the projection name in WKT to the Proj4php projection name + //build this out as required + protected function initWKTProjections() { + self::$wktProjections["Lambert Tangential Conformal Conic Projection"] = "lcc"; + self::$wktProjections["Mercator"] = "merc"; + self::$wktProjections["Mercator_1SP"] = "merc"; + self::$wktProjections["Transverse_Mercator"] = "tmerc"; + self::$wktProjections["Transverse Mercator"] = "tmerc"; + self::$wktProjections["Lambert Azimuthal Equal Area"] = "laea"; + self::$wktProjections["Universal Transverse Mercator System"] = "utm"; + } + + protected function initDatum() { + self::$datum["WGS84"] = array( 'towgs84' => "0,0,0", 'ellipse' => "WGS84", 'datumName' => "WGS84" ); + self::$datum["GGRS87"] = array( 'towgs84' => "-199.87,74.79,246.62", 'ellipse' => "GRS80", 'datumName' => "Greek_Geodetic_Reference_System_1987" ); + self::$datum["NAD83"] = array( 'towgs84' => "0,0,0", 'ellipse' => "GRS80", 'datumName' => "North_American_Datum_1983" ); + self::$datum["NAD27"] = array( 'nadgrids' => "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", 'ellipse' => "clrk66", 'datumName' => "North_American_Datum_1927" ); + self::$datum["potsdam"] = array( 'towgs84' => "606.0,23.0,413.0", 'ellipse' => "bessel", 'datumName' => "Potsdam Rauenberg 1950 DHDN" ); + self::$datum["carthage"] = array( 'towgs84' => "-263.0,6.0,431.0", 'ellipse' => "clark80", 'datumName' => "Carthage 1934 Tunisia" ); + self::$datum["hermannskogel"] = array( 'towgs84' => "653.0,-212.0,449.0", 'ellipse' => "bessel", 'datumName' => "Hermannskogel" ); + self::$datum["ire65"] = array( 'towgs84' => "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", 'ellipse' => "mod_airy", 'datumName' => "Ireland 1965" ); + self::$datum["nzgd49"] = array( 'towgs84' => "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", 'ellipse' => "intl", 'datumName' => "New Zealand Geodetic Datum 1949" ); + self::$datum["OSGB36"] = array( 'towgs84' => "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", 'ellipse' => "airy", 'datumName' => "Airy 1830" ); + } + + protected function initEllipsoid() { + self::$ellipsoid["MERIT"] = array( 'a' => 6378137.0, 'rf' => 298.257, 'ellipseName' => "MERIT 1983" ); + self::$ellipsoid["SGS85"] = array( 'a' => 6378136.0, 'rf' => 298.257, 'ellipseName' => "Soviet Geodetic System 85" ); + self::$ellipsoid["GRS80"] = array( 'a' => 6378137.0, 'rf' => 298.257222101, 'ellipseName' => "GRS 1980(IUGG, 1980)" ); + self::$ellipsoid["IAU76"] = array( 'a' => 6378140.0, 'rf' => 298.257, 'ellipseName' => "IAU 1976" ); + self::$ellipsoid["airy"] = array( 'a' => 6377563.396, 'b' => 6356256.910, 'ellipseName' => "Airy 1830" ); + self::$ellipsoid["APL4."] = array( 'a' => 6378137, 'rf' => 298.25, 'ellipseName' => "Appl. Physics. 1965" ); + self::$ellipsoid["NWL9D"] = array( 'a' => 6378145.0, 'rf' => 298.25, 'ellipseName' => "Naval Weapons Lab., 1965" ); + self::$ellipsoid["mod_airy"] = array( 'a' => 6377340.189, 'b' => 6356034.446, 'ellipseName' => "Modified Airy" ); + self::$ellipsoid["andrae"] = array( 'a' => 6377104.43, 'rf' => 300.0, 'ellipseName' => "Andrae 1876 (Den., Iclnd.)" ); + self::$ellipsoid["aust_SA"] = array( 'a' => 6378160.0, 'rf' => 298.25, 'ellipseName' => "Australian Natl & S. Amer. 1969" ); + self::$ellipsoid["GRS67"] = array( 'a' => 6378160.0, 'rf' => 298.2471674270, 'ellipseName' => "GRS 67(IUGG 1967)" ); + self::$ellipsoid["bessel"] = array( 'a' => 6377397.155, 'rf' => 299.1528128, 'ellipseName' => "Bessel 1841" ); + self::$ellipsoid["bess_nam"] = array( 'a' => 6377483.865, 'rf' => 299.1528128, 'ellipseName' => "Bessel 1841 (Namibia)" ); + self::$ellipsoid["clrk66"] = array( 'a' => 6378206.4, 'b' => 6356583.8, 'ellipseName' => "Clarke 1866" ); + self::$ellipsoid["clrk80"] = array( 'a' => 6378249.145, 'rf' => 293.4663, 'ellipseName' => "Clarke 1880 mod." ); + self::$ellipsoid["CPM"] = array( 'a' => 6375738.7, 'rf' => 334.29, 'ellipseName' => "Comm. des Poids et Mesures 1799" ); + self::$ellipsoid["delmbr"] = array( 'a' => 6376428.0, 'rf' => 311.5, 'ellipseName' => "Delambre 1810 (Belgium)" ); + self::$ellipsoid["engelis"] = array( 'a' => 6378136.05, 'rf' => 298.2566, 'ellipseName' => "Engelis 1985" ); + self::$ellipsoid["evrst30"] = array( 'a' => 6377276.345, 'rf' => 300.8017, 'ellipseName' => "Everest 1830" ); + self::$ellipsoid["evrst48"] = array( 'a' => 6377304.063, 'rf' => 300.8017, 'ellipseName' => "Everest 1948" ); + self::$ellipsoid["evrst56"] = array( 'a' => 6377301.243, 'rf' => 300.8017, 'ellipseName' => "Everest 1956" ); + self::$ellipsoid["evrst69"] = array( 'a' => 6377295.664, 'rf' => 300.8017, 'ellipseName' => "Everest 1969" ); + self::$ellipsoid["evrstSS"] = array( 'a' => 6377298.556, 'rf' => 300.8017, 'ellipseName' => "Everest (Sabah & Sarawak)" ); + self::$ellipsoid["fschr60"] = array( 'a' => 6378166.0, 'rf' => 298.3, 'ellipseName' => "Fischer (Mercury Datum) 1960" ); + self::$ellipsoid["fschr60m"] = array( 'a' => 6378155.0, 'rf' => 298.3, 'ellipseName' => "Fischer 1960" ); + self::$ellipsoid["fschr68"] = array( 'a' => 6378150.0, 'rf' => 298.3, 'ellipseName' => "Fischer 1968" ); + self::$ellipsoid["helmert"] = array( 'a' => 6378200.0, 'rf' => 298.3, 'ellipseName' => "Helmert 1906" ); + self::$ellipsoid["hough"] = array( 'a' => 6378270.0, 'rf' => 297.0, 'ellipseName' => "Hough" ); + self::$ellipsoid["intl"] = array( 'a' => 6378388.0, 'rf' => 297.0, 'ellipseName' => "International 1909 (Hayford)" ); + self::$ellipsoid["kaula"] = array( 'a' => 6378163.0, 'rf' => 298.24, 'ellipseName' => "Kaula 1961" ); + self::$ellipsoid["lerch"] = array( 'a' => 6378139.0, 'rf' => 298.257, 'ellipseName' => "Lerch 1979" ); + self::$ellipsoid["mprts"] = array( 'a' => 6397300.0, 'rf' => 191.0, 'ellipseName' => "Maupertius 1738" ); + self::$ellipsoid["new_intl"] = array( 'a' => 6378157.5, 'b' => 6356772.2, 'ellipseName' => "New International 1967" ); + self::$ellipsoid["plessis"] = array( 'a' => 6376523.0, 'rf' => 6355863.0, 'ellipseName' => "Plessis 1817 (France)" ); + self::$ellipsoid["krass"] = array( 'a' => 6378245.0, 'rf' => 298.3, 'ellipseName' => "Krassovsky, 1942" ); + self::$ellipsoid["SEasia"] = array( 'a' => 6378155.0, 'b' => 6356773.3205, 'ellipseName' => "Southeast Asia" ); + self::$ellipsoid["walbeck"] = array( 'a' => 6376896.0, 'b' => 6355834.8467, 'ellipseName' => "Walbeck" ); + self::$ellipsoid["WGS60"] = array( 'a' => 6378165.0, 'rf' => 298.3, 'ellipseName' => "WGS 60" ); + self::$ellipsoid["WGS66"] = array( 'a' => 6378145.0, 'rf' => 298.25, 'ellipseName' => "WGS 66" ); + self::$ellipsoid["WGS72"] = array( 'a' => 6378135.0, 'rf' => 298.26, 'ellipseName' => "WGS 72" ); + self::$ellipsoid["WGS84"] = array( 'a' => 6378137.0, 'rf' => 298.257223563, 'ellipseName' => "WGS 84" ); + self::$ellipsoid["sphere"] = array( 'a' => 6370997.0, 'b' => 6370997.0, 'ellipseName' => "Normal Sphere (r=6370997)" ); + } + + protected function initPrimeMeridian() { + self::$primeMeridian["greenwich"] = '0.0'; //"0dE", + self::$primeMeridian["lisbon"] = -9.131906111111; //"9d07'54.862\"W", + self::$primeMeridian["paris"] = 2.337229166667; //"2d20'14.025\"E", + self::$primeMeridian["bogota"] = -74.080916666667; //"74d04'51.3\"W", + self::$primeMeridian["madrid"] = -3.687938888889; //"3d41'16.58\"W", + self::$primeMeridian["rome"] = 12.452333333333; //"12d27'8.4\"E", + self::$primeMeridian["bern"] = 7.439583333333; //"7d26'22.5\"E", + self::$primeMeridian["jakarta"] = 106.807719444444; //"106d48'27.79\"E", + self::$primeMeridian["ferro"] = -17.666666666667; //"17d40'W", + self::$primeMeridian["brussels"] = 4.367975; //"4d22'4.71\"E", + self::$primeMeridian["stockholm"] = 18.058277777778; //"18d3'29.8\"E", + self::$primeMeridian["athens"] = 23.7163375; //"23d42'58.815\"E", + self::$primeMeridian["oslo"] = 10.722916666667; //"10d43'22.5\"E" + } + + /** + * + */ + public function __construct() { + + $this->initWKTProjections(); + $this->initDefs(); + $this->initDatum(); + $this->initEllipsoid(); + $this->initPrimeMeridian(); + + self::$proj['longlat'] = new proj4phpLongLat(); + self::$proj['identity'] = new proj4phpLongLat(); + self::$common = new proj4phpCommon(); + self::$WGS84 = new Proj4phpProj( 'WGS84' ); + } + + /** + * Method: transform(source, dest, point) + * Transform a point coordinate from one map projection to another. This is + * really the only public method you should need to use. + * + * Parameters: + * source - {Proj4phpProj} source map projection for the transformation + * dest - {Proj4phpProj} destination map projection for the transformation + * point - {Object} point to transform, may be geodetic (long, lat) or + * projected Cartesian (x,y), but should always have x,y properties. + */ + public function transform( $source, $dest, $point) { + $this->msg = ''; + if( !$source->readyToUse ) { + self::reportError( "Proj4php initialization for:" . $source->srsCode . " not yet complete" ); + return $point; + } + if( !$dest->readyToUse ) { + self::reportError( "Proj4php initialization for:" . $dest->srsCode . " not yet complete" ); + return $point; + } + + // DGR, 2010/11/12 + + if( $source->axis != "enu" ) { + $this->adjust_axis( $source, false, $point ); + } + + // Transform source points to long/lat, if they aren't already. + if( $source->projName == "longlat" ) { + $point->x *= Proj4php::$common->D2R; // convert degrees to radians + $point->y *= Proj4php::$common->D2R; + } else { + if( isset($source->to_meter) ) + { + $point->x *= $source->to_meter; + $point->y *= $source->to_meter; + } + $source->inverse( $point ); // Convert Cartesian to longlat + } + // Adjust for the prime meridian if necessary + if( isset( $source->from_greenwich ) ) { + $point->x += $source->from_greenwich; + } + + // Convert datums if needed, and if possible. + $point = $this->datum_transform( $source->datum, $dest->datum, $point ); + + // Adjust for the prime meridian if necessary + if( isset( $dest->from_greenwich ) ) { + $point->x -= $dest->from_greenwich; + } + + if( $dest->projName == "longlat" ) { + // convert radians to decimal degrees + $point->x *= Proj4php::$common->R2D; + $point->y *= Proj4php::$common->R2D; + } else { // else project + $dest->forward( $point ); + if( isset($dest->to_meter) ) { + $point->x /= $dest->to_meter; + $point->y /= $dest->to_meter; + } + } + + // DGR, 2010/11/12 + if( $dest->axis != "enu" ) { + $this->adjust_axis( $dest, true, $point ); + } + + // Nov 2014 - changed Werner Schäffer + // clone point to avoid a lot of problems + return (clone $point); + + } + + /** datum_transform() + source coordinate system definition, + destination coordinate system definition, + point to transform in geodetic coordinates (long, lat, height) + */ + public function datum_transform( $source, $dest, $point ) { + + // Short cut if the datums are identical. + if( $source->compare_datums( $dest ) ) { + return $point; // in this case, zero is sucess, + // whereas cs_compare_datums returns 1 to indicate TRUE + // confusing, should fix this + } + + // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest + if( $source->datum_type == Proj4php::$common->PJD_NODATUM + || $dest->datum_type == Proj4php::$common->PJD_NODATUM ) { + return $point; + } + + /* + // If this datum requires grid shifts, then apply it to geodetic coordinates. + if( $source->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { + throw(new Exception( "ERROR: Grid shift transformations are not implemented yet." )); + } + + if( $dest->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { + throw(new Exception( "ERROR: Grid shift transformations are not implemented yet." )); + } + */ + + // Do we need to go through geocentric coordinates? + if( $source->es != $dest->es || $source->a != $dest->a + || $source->datum_type == Proj4php::$common->PJD_3PARAM + || $source->datum_type == Proj4php::$common->PJD_7PARAM + || $dest->datum_type == Proj4php::$common->PJD_3PARAM + || $dest->datum_type == Proj4php::$common->PJD_7PARAM ) { + + // Convert to geocentric coordinates. + $source->geodetic_to_geocentric( $point ); + // CHECK_RETURN; + // Convert between datums + if( $source->datum_type == Proj4php::$common->PJD_3PARAM || $source->datum_type == Proj4php::$common->PJD_7PARAM ) { + $source->geocentric_to_wgs84( $point ); + // CHECK_RETURN; + } + + if( $dest->datum_type == Proj4php::$common->PJD_3PARAM || $dest->datum_type == Proj4php::$common->PJD_7PARAM ) { + $dest->geocentric_from_wgs84( $point ); + // CHECK_RETURN; + } + + // Convert back to geodetic coordinates + $dest->geocentric_to_geodetic( $point ); + // CHECK_RETURN; + } + + // Apply grid shift to destination if required + /* + if( $dest->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { + throw(new Exception( "ERROR: Grid shift transformations are not implemented yet." )); + // pj_apply_gridshift( pj_param(dest.params,"snadgrids").s, 1, point); + // CHECK_RETURN; + } + */ + return $point; + } + + + /** + * Function: adjust_axis + * Normalize or de-normalized the x/y/z axes. The normal form is "enu" + * (easting, northing, up). + * Parameters: + * crs {Proj4php.Proj} the coordinate reference system + * denorm {Boolean} when false, normalize + * point {Object} the coordinates to adjust + */ + public function adjust_axis( $crs, $denorm, $point ) { + + $xin = $point->x; + $yin = $point->y; + $zin = isset( $point->z ) ? $point->z : 0.0; + #$v; + #$t; + for( $i = 0; $i < 3; $i++ ) { + if( $denorm && $i == 2 && !isset( $point->z ) ) { + continue; + } + if( $i == 0 ) { + $v = $xin; + $t = 'x'; + } else if( $i == 1 ) { + $v = $yin; + $t = 'y'; + } else { + $v = $zin; + $t = 'z'; + } + switch( $crs->axis[$i] ) { + case 'e': + $point[$t] = $v; + break; + case 'w': + $point[$t] = -$v; + break; + case 'n': + $point[$t] = $v; + break; + case 's': + $point[$t] = -$v; + break; + case 'u': + if( isset( $point[$t] ) ) { + $point->z = $v; + } + break; + case 'd': + if( isset( $point[$t] ) ) { + $point->z = -$v; + } + break; + default : + throw(new Exception( "ERROR: unknow axis (" . $crs->axis[$i] . ") - check definition of " . $crs->projName )); + return null; + } + } + return $point; + } + + /** + * Function: reportError + * An internal method to report errors back to user. + * Override this in applications to report error messages or throw exceptions. + */ + public static function reportError( $msg ) { + throw(new Exception($msg)); + } + + /** + * Function : loadScript + * adapted from original. PHP is simplier. + */ + public static function loadScript( $filename, $onload = null, $onfail = null, $loadCheck = null ) { + + if( stripos($filename, 'http://') !== false ) { + return @file_get_contents($filename); + } + elseif( file_exists( $filename ) ) { + require_once($filename); + return true; + } + else { + throw(new Exception( "File $filename could not be found or was not able to be loaded." )); + } + } + + /** + * Function: extend + * Copy all properties of a source object to a destination object. Modifies + * the passed in destination object. Any properties on the source object + * that are set to undefined will not be (re)set on the destination object. + * + * Parameters: + * destination - {Object} The object that will be modified + * source - {Object} The object with properties to be set on the destination + * + * Returns: + * {Object} The destination object. + */ + public static function extend( $destination, $source ) { + if( $source != null ) + foreach( $source as $key => $value ) { + $destination->$key = $value; + } + return $destination; + } + +} \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpCommon.php b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpCommon.php new file mode 100644 index 0000000..31d0dec --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpCommon.php @@ -0,0 +1,389 @@ + 1.0e-7 ) { + + $con = $eccent * $sinphi; + + return (( 1.0 - $eccent * $eccent) * ($sinphi / (1.0 - $con * $con) - (.5 / $eccent) * log( (1.0 - $con) / (1.0 + $con) ))); + } + + return (2.0 * $sinphi); + } + + /** + * Function to eliminate roundoff errors in asin + * + * @param type $x + * @return type + */ + public function asinz( $x ) { + + return asin( + abs( $x ) > 1.0 ? ($x > 1.0 ? 1.0 : -1.0) : $x + ); + + #if( abs( $x ) > 1.0 ) { + # $x = ($x > 1.0) ? 1.0 : -1.0; + #} + #return asin( $x ); + } + + /** + * following functions from gctpc cproj.c for transverse mercator projections + * + * @param type $x + * @return type + */ + public function e0fn( $x ) { + return (1.0 - 0.25 * $x * (1.0 + $x / 16.0 * (3.0 + 1.25 * $x))); + } + + /** + * + * @param type $x + * @return type + */ + public function e1fn( $x ) { + return (0.375 * $x * (1.0 + 0.25 * $x * (1.0 + 0.46875 * $x))); + } + + /** + * + * @param type $x + * @return type + */ + public function e2fn( $x ) { + return (0.05859375 * $x * $x * (1.0 + 0.75 * $x)); + } + + /** + * + * @param type $x + * @return type + */ + public function e3fn( $x ) { + return ($x * $x * $x * (35.0 / 3072.0)); + } + + /** + * + * @param type $e0 + * @param type $e1 + * @param type $e2 + * @param type $e3 + * @param type $phi + * @return type + */ + public function mlfn( $e0, $e1, $e2, $e3, $phi ) { + return ($e0 * $phi - $e1 * sin( 2.0 * $phi ) + $e2 * sin( 4.0 * $phi ) - $e3 * sin( 6.0 * $phi )); + } + + /** + * + * @param type $esinp + * @param type $exp + * @return type + */ + public function srat( $esinp, $exp ) { + return (pow( (1.0 - $esinp) / (1.0 + $esinp), $exp )); + } + + /** + * Function to return the sign of an argument + * + * @param type $x + * @return type + */ + public function sign( $x ) { + + return $x < 0.0 ? -1 : 1; + } + + /** + * Function to adjust longitude to -180 to 180; input in radians + * + * @param type $x + * @return type + */ + public function adjust_lon( $x ) { + + return (abs( $x ) < M_PI) ? $x : ($x - ($this->sign( $x ) * $this->TWO_PI) ); + } + + /** + * IGNF - DGR : algorithms used by IGN France + * Function to adjust latitude to -90 to 90; input in radians + * + * @param type $x + * @return type + */ + public function adjust_lat( $x ) { + + $x = (abs( $x ) < M_PI_2) ? $x : ($x - ($this->sign( $x ) * M_PI) ); + + return $x; + } + + /** + * Latitude Isometrique - close to tsfnz ... + * + * @param type $eccent + * @param float $phi + * @param type $sinphi + * @return string + */ + public function latiso( $eccent, $phi, $sinphi ) { + + if( abs( $phi ) > M_PI_2 ) + return +NaN; + if( $phi == M_PI_2 ) + return INF; + if( $phi == -1.0 * M_PI_2 ) + return -1.0 * INF; + + $con = $eccent * $sinphi; + + return log( tan( (M_PI_2 + $phi) / 2.0 ) ) + $eccent * log( (1.0 - $con) / (1.0 + $con) ) / 2.0; + } + + /** + * + * @param type $x + * @param type $L + * @return type + */ + public function fL( $x, $L ) { + return 2.0 * atan( $x * exp( $L ) ) - M_PI_2; + } + + /** + * Inverse Latitude Isometrique - close to ph2z + * + * @param type $eccent + * @param type $ts + * @return type + */ + public function invlatiso( $eccent, $ts ) { + + $phi = $this->fL( 1.0, $ts ); + $Iphi = 0.0; + $con = 0.0; + + do { + $Iphi = $phi; + $con = $eccent * sin( $Iphi ); + $phi = $this->fL( exp( $eccent * log( (1.0 + $con) / (1.0 - $con) ) / 2.0 ), $ts ); + } while( abs( $phi - $Iphi ) > 1.0e-12 ); + + return $phi; + } + + /** + * Grande Normale + * + * @param type $a + * @param type $e + * @param type $sinphi + * @return type + */ + public function gN( $a, $e, $sinphi ) { + $temp = $e * $sinphi; + return $a / sqrt( 1.0 - $temp * $temp ); + } + + /** + * code from the PROJ.4 pj_mlfn.c file; this may be useful for other projections + * + * @param type $es + * @return type + */ + public function pj_enfn( $es ) { + + $en = array( ); + $en[0] = $this->C00 - $es * ($this->C02 + $es * ($this->C04 + $es * ($this->C06 + $es * $this->C08))); + $en[1] = es * ($this->C22 - $es * ($this->C04 + $es * ($this->C06 + $es * $this->C08))); + $t = $es * $es; + $en[2] = $t * ($this->C44 - $es * ($this->C46 + $es * $this->C48)); + $t *= $es; + $en[3] = $t * ($this->C66 - $es * $this->C68); + $en[4] = $t * $es * $this->C88; + + return $en; + } + + /** + * + * @param type $phi + * @param type $sphi + * @param type $cphi + * @param type $en + * @return type + */ + public function pj_mlfn( $phi, $sphi, $cphi, $en ) { + + $cphi *= $sphi; + $sphi *= $sphi; + + return ($en[0] * $phi - $cphi * ($en[1] + $sphi * ($en[2] + $sphi * ($en[3] + $sphi * $en[4])))); + } + + /** + * + * @param type $arg + * @param type $es + * @param type $en + * @return type + */ + public function pj_inv_mlfn( $arg, $es, $en ) { + + $k = (float) 1 / (1 - $es); + $phi = $arg; + + for( $i = Proj4php::$common->MAX_ITER; $i; --$i ) { /* rarely goes over 2 iterations */ + $s = sin( $phi ); + $t = 1. - $es * $s * $s; + //$t = $this->pj_mlfn($phi, $s, cos($phi), $en) - $arg; + //$phi -= $t * ($t * sqrt($t)) * $k; + $t = ($this->pj_mlfn( $phi, $s, cos( $phi ), $en ) - $arg) * ($t * sqrt( $t )) * $k; + $phi -= $t; + if( abs( $t ) < Proj4php::$common->EPSLN ) + return $phi; + } + + Proj4php::reportError( "cass:pj_inv_mlfn: Convergence error" ); + + return $phi; + } + +} \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpDatum.php b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpDatum.php new file mode 100644 index 0000000..cbad8cf --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpDatum.php @@ -0,0 +1,401 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ + +/** datum object + */ +class proj4phpDatum { + + public $datum_type; + public $datum_params; + + /** + * + * @param type $proj + */ + public function __construct( $proj ) { + + $this->datum_type = Proj4php::$common->PJD_WGS84; //default setting + + if( isset($proj->datumCode) && $proj->datumCode == 'none' ) { + $this->datum_type = Proj4php::$common->PJD_NODATUM; + } + + if( isset( $proj->datum_params ) ) { + + for( $i = 0; $i < sizeof( $proj->datum_params ); $i++ ) { + $proj->datum_params[$i] = floatval( $proj->datum_params[$i] ); + } + + if( $proj->datum_params[0] != 0 || $proj->datum_params[1] != 0 || $proj->datum_params[2] != 0 ) { + $this->datum_type = Proj4php::$common->PJD_3PARAM; + } + + if( sizeof( $proj->datum_params ) > 3 ) { + if( $proj->datum_params[3] != 0 || $proj->datum_params[4] != 0 || + $proj->datum_params[5] != 0 || $proj->datum_params[6] != 0 ) { + + $this->datum_type = Proj4php::$common->PJD_7PARAM; + $proj->datum_params[3] *= Proj4php::$common->SEC_TO_RAD; + $proj->datum_params[4] *= Proj4php::$common->SEC_TO_RAD; + $proj->datum_params[5] *= Proj4php::$common->SEC_TO_RAD; + $proj->datum_params[6] = ($proj->datum_params[6] / 1000000.0) + 1.0; + } + } + + $this->datum_params = $proj->datum_params; + } + if( isset( $proj ) ) { + $this->a = $proj->a; //datum object also uses these values + $this->b = $proj->b; + $this->es = $proj->es; + $this->ep2 = $proj->ep2; + #$this->datum_params = $proj->datum_params; + } + } + + + /** + * + * @param type $dest + * @return boolean Returns TRUE if the two datums match, otherwise FALSE. + * @throws type + */ + public function compare_datums( $dest ) { + + if( $this->datum_type != $dest->datum_type ) { + return false; // false, datums are not equal + } else if( $this->a != $dest->a || abs( $this->es - $dest->es ) > 0.000000000050 ) { + // the tolerence for es is to ensure that GRS80 and WGS84 + // are considered identical + return false; + } else if( $this->datum_type == Proj4php::$common->PJD_3PARAM ) { + return ($this->datum_params[0] == $dest->datum_params[0] + && $this->datum_params[1] == $dest->datum_params[1] + && $this->datum_params[2] == $dest->datum_params[2]); + } else if( $this->datum_type == Proj4php::$common->PJD_7PARAM ) { + return ($this->datum_params[0] == $dest->datum_params[0] + && $this->datum_params[1] == $dest->datum_params[1] + && $this->datum_params[2] == $dest->datum_params[2] + && $this->datum_params[3] == $dest->datum_params[3] + && $this->datum_params[4] == $dest->datum_params[4] + && $this->datum_params[5] == $dest->datum_params[5] + && $this->datum_params[6] == $dest->datum_params[6]); + } else if( $this->datum_type == Proj4php::$common->PJD_GRIDSHIFT || + $dest->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { + throw(new Exception( "ERROR: Grid shift transformations are not implemented." )); + return false; + } + + return true; // datums are equal + } + + /* + * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates + * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), + * according to the current ellipsoid parameters. + * + * Latitude : Geodetic latitude in radians (input) + * Longitude : Geodetic longitude in radians (input) + * Height : Geodetic height, in meters (input) + * X : Calculated Geocentric X coordinate, in meters (output) + * Y : Calculated Geocentric Y coordinate, in meters (output) + * Z : Calculated Geocentric Z coordinate, in meters (output) + * + */ + public function geodetic_to_geocentric( $p ) { + + $Longitude = $p->x; + $Latitude = $p->y; + $Height = isset( $p->z ) ? $p->z : 0; //Z value not always supplied + $Error_Code = 0; // GEOCENT_NO_ERROR; + + /* + * * Don't blow up if Latitude is just a little out of the value + * * range as it may just be a rounding issue. Also removed longitude + * * test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001. + */ + if( $Latitude < -Proj4php::$common->HALF_PI && $Latitude > -1.001 * Proj4php::$common->HALF_PI ) { + $Latitude = -Proj4php::$common->HALF_PI; + } else if( $Latitude > Proj4php::$common->HALF_PI && $Latitude < 1.001 * Proj4php::$common->HALF_PI ) { + $Latitude = Proj4php::$common->HALF_PI; + } else if( ($Latitude < -Proj4php::$common->HALF_PI) || ($Latitude > Proj4php::$common->HALF_PI) ) { + /* Latitude out of range */ + Proj4php::reportError( 'geocent:lat out of range:' . $Latitude ); + return null; + } + + if( $Longitude > Proj4php::$common->PI ) + $Longitude -= (2 * Proj4php::$common->PI); + + $Sin_Lat = sin( $Latitude ); /* sin(Latitude) */ + $Cos_Lat = cos( $Latitude ); /* cos(Latitude) */ + $Sin2_Lat = $Sin_Lat * $Sin_Lat; /* Square of sin(Latitude) */ + $Rn = $this->a / (sqrt( 1.0e0 - $this->es * $Sin2_Lat )); /* Earth radius at location */ + $p->x = ($Rn + $Height) * $Cos_Lat * cos( $Longitude ); + $p->y = ($Rn + $Height) * $Cos_Lat * sin( $Longitude ); + $p->z = (($Rn * (1 - $this->es)) + $Height) * $Sin_Lat; + + return $Error_Code; + } + + + /** + * + * @param object $p + * @return type + */ + public function geocentric_to_geodetic( $p ) { + + /* local defintions and variables */ + /* end-criterium of loop, accuracy of sin(Latitude) */ + $genau = 1.E-12; + $genau2 = ($genau * $genau); + $maxiter = 30; + $X = $p->x; + $Y = $p->y; + $Z = $p->z ? $p->z : 0.0; //Z value not always supplied + + /* + $P; // distance between semi-minor axis and location + $RR; // distance between center and location + $CT; // sin of geocentric latitude + $ST; // cos of geocentric latitude + $RX; + $RK; + $RN; // Earth radius at location + $CPHI0; // cos of start or old geodetic latitude in iterations + $SPHI0; // sin of start or old geodetic latitude in iterations + $CPHI; // cos of searched geodetic latitude + $SPHI; // sin of searched geodetic latitude + $SDPHI; // end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) + $At_Pole; // indicates location is in polar region + $iter; // of continous iteration, max. 30 is always enough (s.a.) + $Longitude; + $Latitude; + $Height; + */ + + $At_Pole = false; + $P = sqrt( $X * $X + $Y * $Y ); + $RR = sqrt( $X * $X + $Y * $Y + $Z * $Z ); + + /* special cases for latitude and longitude */ + if( $P / $this->a < $genau ) { + + /* special case, if P=0. (X=0., Y=0.) */ + $At_Pole = true; + $Longitude = 0.0; + + /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis + * of ellipsoid (=center of mass), Latitude becomes PI/2 */ + if( $RR / $this->a < $genau ) { + $Latitude = Proj4php::$common->HALF_PI; + $Height = -$this->b; + return; + } + } else { + /* ellipsoidal (geodetic) longitude + * interval: -PI < Longitude <= +PI */ + $Longitude = atan2( $Y, $X ); + } + + /* -------------------------------------------------------------- + * Following iterative algorithm was developped by + * "Institut für Erdmessung", University of Hannover, July 1988. + * Internet: www.ife.uni-hannover.de + * Iterative computation of CPHI,SPHI and Height. + * Iteration of CPHI and SPHI to 10**-12 radian res$p-> + * 2*10**-7 arcsec. + * -------------------------------------------------------------- + */ + $CT = $Z / $RR; + $ST = $P / $RR; + $RX = 1.0 / sqrt( 1.0 - $this->es * (2.0 - $this->es) * $ST * $ST ); + $CPHI0 = $ST * (1.0 - $this->es) * $RX; + $SPHI0 = $CT * $RX; + $iter = 0; + + /* loop to find sin(Latitude) res$p-> Latitude + * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ + do { + ++$iter; + $RN = $this->a / sqrt( 1.0 - $this->es * $SPHI0 * $SPHI0 ); + + /* ellipsoidal (geodetic) height */ + $Height = $P * $CPHI0 + $Z * $SPHI0 - $RN * (1.0 - $this->es * $SPHI0 * $SPHI0); + + $RK = $this->es * $RN / ($RN + $Height); + $RX = 1.0 / sqrt( 1.0 - $RK * (2.0 - $RK) * $ST * $ST ); + $CPHI = $ST * (1.0 - $RK) * $RX; + $SPHI = $CT * $RX; + $SDPHI = $SPHI * $CPHI0 - $CPHI * $SPHI0; + $CPHI0 = $CPHI; + $SPHI0 = $SPHI; + } while( $SDPHI * $SDPHI > $genau2 && $iter < $maxiter ); + + /* ellipsoidal (geodetic) latitude */ + $Latitude = atan( $SPHI / abs( $CPHI ) ); + + $p->x = $Longitude; + $p->y = $Latitude; + $p->z = $Height; + + return $p; + } + + /** + * Convert_Geocentric_To_Geodetic + * The method used here is derived from 'An Improved Algorithm for + * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996 + * + * @param object Point $p + * @return object Point $p + */ + public function geocentric_to_geodetic_noniter( $p ) { + + /* + $Longitude; + $Latitude; + $Height; + + $W; // distance from Z axis + $W2; // square of distance from Z axis + $T0; // initial estimate of vertical component + $T1; // corrected estimate of vertical component + $S0; // initial estimate of horizontal component + $S1; // corrected estimate of horizontal component + $Sin_B0; // sin(B0), B0 is estimate of Bowring aux variable + $Sin3_B0; // cube of sin(B0) + $Cos_B0; // cos(B0) + $Sin_p1; // sin(phi1), phi1 is estimated latitude + $Cos_p1; // cos(phi1) + $Rn; // Earth radius at location + $Sum; // numerator of cos(phi1) + $At_Pole; // indicates location is in polar region + */ + + $X = floatval( $p->x ); // cast from string to float + $Y = floatval( $p->y ); + $Z = floatval( $p->z ? $p->z : 0 ); + + $At_Pole = false; + if( $X <> 0.0 ) { + $Longitude = atan2( $Y, $X ); + } else { + if( $Y > 0 ) { + $Longitude = Proj4php::$common->HALF_PI; + } else if( Y < 0 ) { + $Longitude = -Proj4php::$common->HALF_PI; + } else { + $At_Pole = true; + $Longitude = 0.0; + if( $Z > 0.0 ) { /* north pole */ + $Latitude = Proj4php::$common->HALF_PI; + } else if( Z < 0.0 ) { /* south pole */ + $Latitude = -Proj4php::$common->HALF_PI; + } else { /* center of earth */ + $Latitude = Proj4php::$common->HALF_PI; + $Height = -$this->b; + return; + } + } + } + $W2 = $X * $X + $Y * $Y; + $W = sqrt( $W2 ); + $T0 = $Z * Proj4php::$common->AD_C; + $S0 = sqrt( $T0 * $T0 + $W2 ); + $Sin_B0 = $T0 / $S0; + $Cos_B0 = $W / $S0; + $Sin3_B0 = $Sin_B0 * $Sin_B0 * $Sin_B0; + $T1 = $Z + $this->b * $this->ep2 * $Sin3_B0; + $Sum = $W - $this->a * $this->es * $Cos_B0 * $Cos_B0 * $Cos_B0; + $S1 = sqrt( $T1 * $T1 + $Sum * $Sum ); + $Sin_p1 = $T1 / $S1; + $Cos_p1 = $Sum / $S1; + $Rn = $this->a / sqrt( 1.0 - $this->es * $Sin_p1 * $Sin_p1 ); + if( $Cos_p1 >= Proj4php::$common->COS_67P5 ) { + $Height = $W / $Cos_p1 - $Rn; + } else if( $Cos_p1 <= -Proj4php::$common->COS_67P5 ) { + $Height = $W / -$Cos_p1 - $Rn; + } else { + $Height = $Z / $Sin_p1 + $Rn * ($this->es - 1.0); + } + if( $At_Pole == false ) { + $Latitude = atan( $Sin_p1 / $Cos_p1 ); + } + + $p->x = $Longitude; + $p->y = $Latitude; + $p->z = $Height; + + return $p; + } + + /************************************************************** */ + // pj_geocentic_to_wgs84( p ) + // p = point to transform in geocentric coordinates (x,y,z) + public function geocentric_to_wgs84( $p ) { + + if( $this->datum_type == Proj4php::$common->PJD_3PARAM ) { + // if( x[io] == HUGE_VAL ) + // continue; + $p->x += $this->datum_params[0]; + $p->y += $this->datum_params[1]; + $p->z += $this->datum_params[2]; + } else if( $this->datum_type == Proj4php::$common->PJD_7PARAM ) { + $Dx_BF = $this->datum_params[0]; + $Dy_BF = $this->datum_params[1]; + $Dz_BF = $this->datum_params[2]; + $Rx_BF = $this->datum_params[3]; + $Ry_BF = $this->datum_params[4]; + $Rz_BF = $this->datum_params[5]; + $M_BF = $this->datum_params[6]; + // if( x[io] == HUGE_VAL ) + // continue; + $p->x = $M_BF * ( $p->x - $Rz_BF * $p->y + $Ry_BF * $p->z) + $Dx_BF; + $p->y = $M_BF * ( $Rz_BF * $p->x + $p->y - $Rx_BF * $p->z) + $Dy_BF; + $p->z = $M_BF * (-$Ry_BF * $p->x + $Rx_BF * $p->y + $p->z) + $Dz_BF; + } + } + + /*************************************************************** */ + + // pj_geocentic_from_wgs84() + // coordinate system definition, + // point to transform in geocentric coordinates (x,y,z) + public function geocentric_from_wgs84( $p ) { + + if( $this->datum_type == Proj4php::$common->PJD_3PARAM ) { + //if( x[io] == HUGE_VAL ) + // continue; + $p->x -= $this->datum_params[0]; + $p->y -= $this->datum_params[1]; + $p->z -= $this->datum_params[2]; + } else if( $this->datum_type == Proj4php::$common->PJD_7PARAM ) { + $Dx_BF = $this->datum_params[0]; + $Dy_BF = $this->datum_params[1]; + $Dz_BF = $this->datum_params[2]; + $Rx_BF = $this->datum_params[3]; + $Ry_BF = $this->datum_params[4]; + $Rz_BF = $this->datum_params[5]; + $M_BF = $this->datum_params[6]; + $x_tmp = ($p->x - $Dx_BF) / $M_BF; + $y_tmp = ($p->y - $Dy_BF) / $M_BF; + $z_tmp = ($p->z - $Dz_BF) / $M_BF; + //if( x[io] == HUGE_VAL ) + // continue; + + $p->x = $x_tmp + $Rz_BF * $y_tmp - $Ry_BF * $z_tmp; + $p->y = -$Rz_BF * $x_tmp + $y_tmp + $Rx_BF * $z_tmp; + $p->z = $Ry_BF * $x_tmp - $Rx_BF * $y_tmp + $z_tmp; + } //cs_geocentric_from_wgs84() + } + +} + diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpLongLat.php b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpLongLat.php new file mode 100644 index 0000000..6faed71 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpLongLat.php @@ -0,0 +1,23 @@ +x = $x[0]; + $this->y = $x[1]; + $this->z = isset($x[2]) ? $x[2] : 0.0;#(count( $x ) > 2) ? $x[2] : 0.0; + } else if( is_string( $x ) && !is_numeric( $y ) ) { + $coord = explode( ' ', $x ); + $this->x = floatval( $coord[0] ); + $this->y = floatval( $coord[1] ); + $this->z = (count( $coord ) > 2) ? floatval( $coord[2] ) : 0.0; + } else { + $this->x = $x !== null ? $x : 0.0; + $this->y = $y !== null ? $y : 0.0; + $this->z = $z !== null ? $z : 0.0; + } + } + + /** + * APIMethod: clone + * Build a copy of a Proj4js.Point object. + * + * renamed because of PHP keyword. + * + * Return: + * {Proj4js}.Point the cloned point. + */ + public function __clone() { + return new Proj4phpPoint( $this->x, $this->y, $this->z ); + } + + /** + * APIMethod: toString + * Return a readable string version of the point + * + * Return: + * {String} String representation of Proj4js.Point object. + * (ex. "x=5,y=42") + */ + public function toString() { + return "x=" . $this->x . ",y=" . $this->y; + } + + /** + * APIMethod: toShortString + * Return a short string version of the point. + * + * Return: + * {String} Shortened String representation of Proj4js.Point object. + * (ex. "5, 42") + */ + public function toShortString() { + return $this->x . " " . $this->y; + } + +} \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpProj.php b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpProj.php new file mode 100644 index 0000000..bfd57f7 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpProj.php @@ -0,0 +1,638 @@ +srsCodeInput = $srsCode; + //check to see if $this is a WKT string + if( (strpos( $srsCode, 'GEOGCS' ) !== false) || + (strpos( $srsCode, 'GEOCCS' ) !== false) || + (strpos( $srsCode, 'PROJCS' ) !== false) || + (strpos( $srsCode, 'LOCAL_CS' ) !== false) ) { + $this->parseWKT( $srsCode ); + $this->deriveConstants(); + $this->loadProjCode( $this->projName ); + return; + } + + // DGR 2008-08-03 : support urn and url + if( strpos( $srsCode, 'urn:' ) === 0 ) { + //urn:ORIGINATOR:def:crs:CODESPACE:VERSION:ID + $urn = explode( ':', $srsCode ); + if( ($urn[1] == 'ogc' || $urn[1] == 'x-ogc') && + ($urn[2] == 'def') && + ($urn[3] == 'crs') ) { + $srsCode = $urn[4] . ':' . $urn[strlen( $urn ) - 1]; + } + } else if( strpos( $srsCode, 'http://' ) === 0 ) { + //url#ID + $url = explode( '#', $srsCode ); + if( preg_match( "/epsg.org/", $url[0] ) ) { + // http://www.epsg.org/# + $srsCode = 'EPSG:' . $url[1]; + } else if( preg_match( "/RIG.xml/", $url[0] ) ) { + //http://librairies.ign.fr/geoportail/resources/RIG.xml# + //http://interop.ign.fr/registers/ign/RIG.xml# + $srsCode = 'IGNF:' . $url[1]; + } + } + $this->srsCode = strtoupper( $srsCode ); + if( strpos( $this->srsCode, "EPSG" ) === 0 ) { + $this->srsCode = $this->srsCode; + $this->srsAuth = 'epsg'; + $this->srsProjNumber = substr( $this->srsCode, 5 ); + // DGR 2007-11-20 : authority IGNF + } else if( strpos( $this->srsCode, "IGNF" ) === 0 ) { + $this->srsCode = $this->srsCode; + $this->srsAuth = 'IGNF'; + $this->srsProjNumber = substr( $this->srsCode, 5 ); + // DGR 2008-06-19 : pseudo-authority CRS for WMS + } else if( strpos( $this->srsCode, "CRS" ) === 0 ) { + $this->srsCode = $this->srsCode; + $this->srsAuth = 'CRS'; + $this->srsProjNumber = substr( $this->srsCode, 4 ); + } else { + $this->srsAuth = ''; + $this->srsProjNumber = $this->srsCode; + } + $this->loadProjDefinition(); + } + + /** + * Function: loadProjDefinition + * Loads the coordinate system initialization string if required. + * Note that dynamic loading happens asynchronously so an application must + * wait for the readyToUse property is set to true. + * To prevent dynamic loading, include the defs through a script tag in + * your application. + * + */ + public function loadProjDefinition() { + //check in memory + if( array_key_exists( $this->srsCode, Proj4php::$defs ) ) { + $this->defsLoaded(); + return; + } + //else check for def on the server + $filename = dirname( __FILE__ ) . '/defs/' . strtoupper( $this->srsAuth ) . $this->srsProjNumber . '.php'; + + try { + Proj4php::loadScript( $filename ); + $this->defsLoaded(); // succes + + } catch ( Exception $e ) { + $this->loadFromService(); // fail + } + } + + /** + * Function: loadFromService + * Creates the REST URL for loading the definition from a web service and + * loads it. + * + * + * DO IT AGAIN. : SHOULD PHP CODE BE GET BY WEBSERVICES ? + */ + public function loadFromService() { + + //else load from web service + $url = Proj4php::$defsLookupService . '/' . $this->srsAuth . '/' . $this->srsProjNumber . '/proj4/'; + try { + Proj4php::$defs[strtoupper($this->srsAuth) . ":" . $this->srsProjNumber] = Proj4php::loadScript( $url ); + } catch ( Exception $e ) { + $this->defsFailed(); + } + } + + /** + * Function: defsLoaded + * Continues the Proj object initilization once the def file is loaded + * + */ + public function defsLoaded() { + + $this->parseDefs(); + + $this->loadProjCode( $this->projName ); + } + + /** + * Function: checkDefsLoaded + * $this is the loadCheck method to see if the def object exists + * + */ + public function checkDefsLoaded() { + return isset(Proj4php::$defs[$this->srsCode]) && !empty(Proj4php::$defs[$this->srsCode]); + } + + /** + * Function: defsFailed + * Report an error in loading the defs file, but continue on using WGS84 + * + */ + public function defsFailed() { + Proj4php::reportError( 'failed to load projection definition for: ' . $this->srsCode ); + Proj4php::$defs[$this->srsCode] = Proj4php::$defs['WGS84']; //set it to something so it can at least continue + $this->defsLoaded(); + } + + /** + * Function: loadProjCode + * Loads projection class code dynamically if required. + * Projection code may be included either through a script tag or in + * a built version of proj4php + * + * An exception occurs if the projection is not found. + */ + public function loadProjCode( $projName ) { + if( array_key_exists( $projName, Proj4php::$proj )) { + $this->initTransforms(); + return; + } + //the filename for the projection code + $filename = dirname( __FILE__ ) . '/projCode/' . $projName . '.php'; + + try { + Proj4php::loadScript( $filename ); + $this->loadProjCodeSuccess( $projName ); + + } catch ( Exception $e ) { + $this->loadProjCodeFailure( $projName ); + } + } + + /** + * Function: loadProjCodeSuccess + * Loads any proj dependencies or continue on to final initialization. + * + */ + public function loadProjCodeSuccess( $projName ) { + + if( isset(Proj4php::$proj[$projName]->dependsOn) && !empty(Proj4php::$proj[$projName]->dependsOn)) { + $this->loadProjCode( Proj4php::$proj[$projName]->dependsOn ); + } else { + $this->initTransforms(); + } + } + + /** + * Function: defsFailed + * Report an error in loading the proj file. Initialization of the Proj + * object has failed and the readyToUse flag will never be set. + * + */ + public function loadProjCodeFailure( $projName ) { + Proj4php::reportError( "failed to find projection file for: " . $projName ); + //TBD initialize with identity transforms so proj will still work? + } + + /** + * Function: checkCodeLoaded + * $this is the loadCheck method to see if the projection code is loaded + * + */ + public function checkCodeLoaded( $projName ) { + + return isset(Proj4php::$proj[$projName]) && !empty(Proj4php::$proj[$projName]); + } + + /** + * Function: initTransforms + * Finalize the initialization of the Proj object + * + */ + public function initTransforms() { + $this->projection = new Proj4php::$proj[$this->projName]; + Proj4php::extend( $this->projection, $this ); + // initiate depending class + + if( false !== ($dependsOn = isset($this->projection->dependsOn) && !empty($this->projection->dependsOn) ? $this->projection->dependsOn : false) ) + { + Proj4php::extend( Proj4php::$proj[$dependsOn], $this->projection); + Proj4php::$proj[$dependsOn]->init(); + Proj4php::extend( $this->projection, Proj4php::$proj[$dependsOn] ); + } + $this->init(); + $this->readyToUse = true; + } + + /** + * + */ + public function init() { + $this->projection->init(); + } + + /** + * + * @param type $pt + * @return type + */ + public function forward( $pt ) { + return $this->projection->forward( $pt ); + } + + /** + * + * @param type $pt + * @return type + */ + public function inverse( $pt ) { + return $this->projection->inverse( $pt ); + } + + /** + * Function: parseWKT + * Parses a WKT string to get initialization parameters + * + */ + public function parseWKT( $wkt ) { + + if( false === ($match = preg_match( $this->wktRE, $wkt, $wktMatch )) ) + return; + + $wktObject = $wktMatch[1]; + $wktContent = $wktMatch[2]; + $wktTemp = explode( ",", $wktContent ); + + $wktName = (strtoupper($wktObject) == "TOWGS84") ? "TOWGS84" : array_shift( $wktTemp ); + $wktName = preg_replace( '/^\"/', "", $wktName ); + $wktName = preg_replace( '/\"$/', "", $wktName ); + + /* + $wktContent = implode(",",$wktTemp); + $wktArray = explode("],",$wktContent); + for ($i=0; iprojName = 'identity'; + $this->localCS = true; + $this->srsCode = $wktName; + break; + case 'GEOGCS': + $this->projName = 'longlat'; + $this->geocsCode = $wktName; + if( !$this->srsCode ) + $this->srsCode = $wktName; + break; + case 'PROJCS': + $$this->srsCode = $wktName; + break; + case 'GEOCCS': + break; + case 'PROJECTION': + $this->projName = Proj4php::$wktProjections[$wktName]; + break; + case 'DATUM': + $this->datumName = $wktName; + break; + case 'LOCAL_DATUM': + $this->datumCode = 'none'; + break; + case 'SPHEROID': + $this->ellps = $wktName; + $this->a = floatval( array_shift( $wktArray ) ); + $this->rf = floatval( array_shift( $wktArray ) ); + break; + case 'PRIMEM': + $this->from_greenwich = floatval( array_shift( $wktArray ) ); //to radians? + break; + case 'UNIT': + $this->units = $wktName; + $this->unitsPerMeter = floatval( array_shift( $wktArray ) ); + break; + case 'PARAMETER': + $name = strtolower( $wktName ); + $value = floatval( array_shift( $wktArray ) ); + //there may be many variations on the wktName values, add in case + //statements as required + switch( $name ) { + case 'false_easting': + $this->x0 = $value; + break; + case 'false_northing': + $this->y0 = $value; + break; + case 'scale_factor': + $this->k0 = $value; + break; + case 'central_meridian': + $this->long0 = $value * Proj4php::$common->D2R; + break; + case 'latitude_of_origin': + $this->lat0 = $value * Proj4php::$common->D2R; + break; + case 'more_here': + break; + default: + break; + } + break; + case 'TOWGS84': + $this->datum_params = $wktArray; + break; + //DGR 2010-11-12: AXIS + case 'AXIS': + $name = strtolower( $wktName ); + $value = array_shift( $wktArray ); + switch( $value ) { + case 'EAST' : $value = 'e'; + break; + case 'WEST' : $value = 'w'; + break; + case 'NORTH': $value = 'n'; + break; + case 'SOUTH': $value = 's'; + break; + case 'UP' : $value = 'u'; + break; + case 'DOWN' : $value = 'd'; + break; + case 'OTHER': + default : $value = ' '; + break; //FIXME + } + if( !$this->axis ) { + $this->axis = "enu"; + } + switch( $name ) { + case 'X': $this->axis = $value . substr( $this->axis, 1, 2 ); + break; + case 'Y': $this->axis = substr( $this->axis, 0, 1 ) . $value . substr( $this->axis, 2, 1 ); + break; + case 'Z': $this->axis = substr( $this->axis, 0, 2 ) . $value; + break; + default : break; + } + case 'MORE_HERE': + break; + default: + break; + } + + foreach( $wktArray as $wktArrayContent ) + $this->parseWKT( $wktArrayContent ); + } + + /** + * Function: parseDefs + * Parses the PROJ.4 initialization string and sets the associated properties. + * + */ + public function parseDefs() { + + $this->defData = Proj4php::$defs[$this->srsCode]; + #$paramName; + #$paramVal; + if( !$this->defData ) { + return; + } + $paramArray = explode( "+", $this->defData ); + for( $prop = 0; $prop < sizeof( $paramArray ); $prop++ ) { + if( strlen( $paramArray[$prop] ) == 0 ) + continue; + $property = explode( "=", $paramArray[$prop] ); + $paramName = strtolower( $property[0] ); + if( sizeof( $property ) >= 2 ) { + $paramVal = $property[1]; + } + + switch( trim( $paramName ) ) { // trim out spaces + case "": break; // throw away nameless parameter + case "title": $this->title = $paramVal; + break; + case "proj": $this->projName = trim( $paramVal ); + break; + case "units": $this->units = trim( $paramVal ); + break; + case "datum": $this->datumCode = trim( $paramVal ); + break; + case "nadgrids": $this->nagrids = trim( $paramVal ); + break; + case "ellps": $this->ellps = trim( $paramVal ); + break; + case "a": $this->a = floatval( $paramVal ); + break; // semi-major radius + case "b": $this->b = floatval( $paramVal ); + break; // semi-minor radius + // DGR 2007-11-20 + case "rf": $this->rf = floatval( paramVal ); + break; // inverse flattening rf= a/(a-b) + case "lat_0": $this->lat0 = $paramVal * Proj4php::$common->D2R; + break; // phi0, central latitude + case "lat_1": $this->lat1 = $paramVal * Proj4php::$common->D2R; + break; //standard parallel 1 + case "lat_2": $this->lat2 = $paramVal * Proj4php::$common->D2R; + break; //standard parallel 2 + case "lat_ts": $this->lat_ts = $paramVal * Proj4php::$common->D2R; + break; // used in merc and eqc + case "lon_0": $this->long0 = $paramVal * Proj4php::$common->D2R; + break; // lam0, central longitude + case "alpha": $this->alpha = floatval( $paramVal ) * Proj4php::$common->D2R; + break; //for somerc projection + case "lonc": $this->longc = paramVal * Proj4php::$common->D2R; + break; //for somerc projection + case "x_0": $this->x0 = floatval( $paramVal ); + break; // false easting + case "y_0": $this->y0 = floatval( $paramVal ); + break; // false northing + case "k_0": $this->k0 = floatval( $paramVal ); + break; // projection scale factor + case "k": $this->k0 = floatval( $paramVal ); + break; // both forms returned + case "r_a": $this->R_A = true; + break; // sphere--area of ellipsoid + case "zone": $this->zone = intval( $paramVal, 10 ); + break; // UTM Zone + case "south": $this->utmSouth = true; + break; // UTM north/south + case "towgs84": $this->datum_params = explode( ",", $paramVal ); + break; + case "to_meter": $this->to_meter = floatval( $paramVal ); + break; // cartesian scaling + case "from_greenwich": $this->from_greenwich = $paramVal * Proj4php::$common->D2R; + break; + // DGR 2008-07-09 : if pm is not a well-known prime meridian take + // the value instead of 0.0, then convert to radians + case "pm": $paramVal = trim( $paramVal ); + $this->from_greenwich = Proj4php::$primeMeridian[$paramVal] ? Proj4php::$primeMeridian[$paramVal] : floatval( $paramVal ); + $this->from_greenwich *= Proj4php::$common->D2R; + break; + // DGR 2010-11-12: axis + case "axis": $paramVal = trim( $paramVal ); + $legalAxis = "ewnsud"; + if( strlen( paramVal ) == 3 && + strpos( $legalAxis, substr( $paramVal, 0, 1 ) ) !== false && + strpos( $legalAxis, substr( $paramVal, 1, 1 ) ) !== false && + strpos( $legalAxis, substr( $paramVal, 2, 1 ) ) !== false ) { + $this->axis = $paramVal; + } //FIXME: be silent ? + break; + case "no_defs": break; + default: //alert("Unrecognized parameter: " . paramName); + } // switch() + } // for paramArray + $this->deriveConstants(); + } + + /** + * Function: deriveConstants + * Sets several derived constant values and initialization of datum and ellipse parameters. + * + */ + public function deriveConstants() { + + if( isset( $this->nagrids ) && $this->nagrids == '@null' ) + $this->datumCode = 'none'; + + if( isset( $this->datumCode ) && $this->datumCode != 'none' ) { + + $datumDef = Proj4php::$datum[$this->datumCode]; + + if( is_array($datumDef ) ) { + $this->datum_params = array_key_exists( 'towgs84', $datumDef ) ? explode( ',', $datumDef['towgs84'] ) : null; + $this->ellps = $datumDef['ellipse']; + $this->datumName = array_key_exists( 'datumName', $datumDef ) ? $datumDef['datumName'] : $this->datumCode; + } + } + if( !isset( $this->a ) ) { // do we have an ellipsoid? + if( !isset( $this->ellps ) || strlen( $this->ellps ) == 0 || !array_key_exists( $this->ellps, Proj4php::$ellipsoid ) ) + $ellipse = Proj4php::$ellipsoid['WGS84']; + else { + $ellipse = Proj4php::$ellipsoid[$this->ellps]; + } + + Proj4php::extend( $this, $ellipse ); + } + + if( isset( $this->rf ) && !isset( $this->b ) ) + $this->b = (1.0 - 1.0 / $this->rf) * $this->a; + + if ( (isset($this->rf) && $this->rf === 0) || abs($this->a - $this->b) < Proj4php::$common->EPSLN) { + $this->sphere = true; + $this->b = $this->a; + } + $this->a2 = $this->a * $this->a; // used in geocentric + $this->b2 = $this->b * $this->b; // used in geocentric + $this->es = ($this->a2 - $this->b2) / $this->a2; // e ^ 2 + $this->e = sqrt( $this->es ); // eccentricity + if( isset( $this->R_A ) ) { + $this->a *= 1. - $this->es * (Proj4php::$common->SIXTH + $this->es * (Proj4php::$common->RA4 + $this->es * Proj4php::$common->RA6)); + $this->a2 = $this->a * $this->a; + $this->b2 = $this->b * $this->b; + $this->es = 0.0; + } + $this->ep2 = ($this->a2 - $this->b2) / $this->b2; // used in geocentric + if( !isset( $this->k0 ) ) + $this->k0 = 1.0; //default value + + //DGR 2010-11-12: axis + if( !isset( $this->axis ) ) { + $this->axis = "enu"; + } + + $this->datum = new Proj4phpDatum( $this ); + } + +} \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aea.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aea.php new file mode 100644 index 0000000..d68044a --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aea.php @@ -0,0 +1,184 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +class Proj4phpProjAea { + + /** + * + * @return void + */ + public function init() { + + if( abs( $this->lat1 + $this->lat2 ) < Proj4php::$common->EPSLN ) { + Proj4php::reportError( "aeaInitEqualLatitudes" ); + return; + } + $this->temp = $this->b / $this->a; + $this->es = 1.0 - pow( $this->temp, 2 ); + $this->e3 = sqrt( $this->es ); + + $this->sin_po = sin( $this->lat1 ); + $this->cos_po = cos( $this->lat1 ); + $this->t1 = $this->sin_po; + $this->con = $this->sin_po; + $this->ms1 = Proj4php::$common->msfnz( $this->e3, $this->sin_po, $this->cos_po ); + $this->qs1 = Proj4php::$common->qsfnz( $this->e3, $this->sin_po, $this->cos_po ); + + $this->sin_po = sin( $this->lat2 ); + $this->cos_po = cos( $this->lat2 ); + $this->t2 = $this->sin_po; + $this->ms2 = Proj4php::$common->msfnz( $this->e3, $this->sin_po, $this->cos_po ); + $this->qs2 = Proj4php::$common->qsfnz( $this->e3, $this->sin_po, $this->cos_po ); + + $this->sin_po = sin( $this->lat0 ); + $this->cos_po = cos( $this->lat0 ); + $this->t3 = $this->sin_po; + $this->qs0 = Proj4php::$common->qsfnz( $this->e3, $this->sin_po, $this->cos_po ); + + if( abs( $this->lat1 - $this->lat2 ) > Proj4php::$common->EPSLN ) { + $this->ns0 = ($this->ms1 * $this->ms1 - $this->ms2 * $this->ms2) / ($this->qs2 - $this->qs1); + } else { + $this->ns0 = $this->con; + } + + $this->c = $this->ms1 * $this->ms1 + $this->ns0 * $this->qs1; + $this->rh = $this->a * sqrt( $this->c - $this->ns0 * $this->qs0 ) / $this->ns0; + } + + /** + * Albers Conical Equal Area forward equations--mapping lat,long to x,y + * + * @param Point $p + * @return Point $p + */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $this->sin_phi = sin( $lat ); + $this->cos_phi = cos( $lat ); + + $qs = Proj4php::$common->qsfnz( $this->e3, $this->sin_phi, $this->cos_phi ); + $rh1 = $this->a * sqrt( $this->c - $this->ns0 * $qs ) / $this->ns0; + $theta = $this->ns0 * Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $x = rh1 * sin( $theta ) + $this->x0; + $y = $this->rh - $rh1 * cos( $theta ) + $this->y0; + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + * + * @param Point $p + * @return Point $p + */ + public function inverse( $p ) { + + $p->x -= $this->x0; + $p->y = $this->rh - $p->y + $this->y0; + + if( $this->ns0 >= 0 ) { + $rh1 = sqrt( $p->x * $p->x + $p->y * $p->y ); + $con = 1.0; + } else { + $rh1 = -sqrt( $p->x * $p->x + $p->y * $p->y ); + $con = -1.0; + } + + $theta = 0.0; + if( $rh1 != 0.0 ) { + $theta = atan2( $con * $p->x, $con * $p->y ); + } + + $con = $rh1 * $this->ns0 / $this->a; + $qs = ($this->c - $con * $con) / $this->ns0; + + if( $this->e3 >= 1e-10 ) { + $con = 1 - .5 * (1.0 - $this->es) * log( (1.0 - $this->e3) / (1.0 + $this->e3) ) / $this->e3; + if( abs( abs( $con ) - abs( $qs ) ) > .0000000001 ) { + $lat = $this->phi1z( $this->e3, $qs ); + } else { + if( $qs >= 0 ) { + $lat = .5 * Proj4php::$common->PI; + } else { + $lat = -.5 * Proj4php::$common->PI; + } + } + } else { + $lat = $this->phi1z( $this->e3, $qs ); + } + + $lon = Proj4php::$common->adjust_lon( $theta / $this->ns0 + $this->long0 ); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + + /** + * Function to compute phi1, the latitude for the inverse of the Albers Conical Equal-Area projection. + * + * @param type $eccent + * @param type $qs + * @return $phi or null on Convergence error + */ + public function phi1z( $eccent, $qs ) { + + $phi = Proj4php::$common->asinz( .5 * $qs ); + + if( $eccent < Proj4php::$common->EPSLN ) + return $phi; + + $eccnts = $eccent * $eccent; + for( $i = 1; $i <= 25; ++$i ) { + $sinphi = sin( $phi ); + $cosphi = cos( $phi ); + $con = $eccent * $sinphi; + $com = 1.0 - $con * $con; + $dphi = .5 * $com * $com / $cosphi * ($qs / (1.0 - $eccnts) - $sinphi / $com + .5 / $eccent * log( (1.0 - $con) / (1.0 + $con) )); + $phi = $phi + $dphi; + if( abs( $dphi ) <= 1e-7 ) + return $phi; + } + + Proj4php::reportError( "aea:phi1z:Convergence error" ); + + return null; + } + +} + +Proj4php::$proj['aea'] = new Proj4phpProjAea(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aeqd.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aeqd.php new file mode 100644 index 0000000..450a0aa --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aeqd.php @@ -0,0 +1,101 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +class Proj4phpProjAeqd { + + public function init() { + $this->sin_p12 = sin( $this->lat0 ); + $this->cos_p12 = cos( $this->lat0 ); + } + + /** + * + * @param type $p + * @return type + */ + public function forward( $p ) { + + #$lon = $p->x; + #$lat = $p->y; + #$ksp; + + $sinphi = sin( $p->y ); + $cosphi = cos( $p->y ); + $dlon = Proj4php::$common->adjust_lon( lon - $this->long0 ); + $coslon = cos( $dlon ); + $g = $this->sin_p12 * $sinphi + $this->cos_p12 * $cosphi * $coslon; + if( abs( abs( $g ) - 1.0 ) < Proj4php::$common->EPSLN ) { + $ksp = 1.0; + if( $g < 0.0 ) { + Proj4php::reportError( "aeqd:Fwd:PointError" ); + return; + } + } else { + $z = acos( $g ); + $ksp = $z / sin( $z ); + } + $p->x = $this->x0 + $this->a * $ksp * $cosphi * sin( $dlon ); + $p->y = $this->y0 + $this->a * $ksp * ($this->cos_p12 * $sinphi - $this->sin_p12 * $cosphi * $coslon); + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + + $p->x -= $this->x0; + $p->y -= $this->y0; + + $rh = sqrt( $p->x * $p->x + $p->y * $p->y ); + if( $rh > (2.0 * Proj4php::$common->HALF_PI * $this->a) ) { + Proj4php::reportError( "aeqdInvDataError" ); + return; + } + $z = $rh / $this->a; + + $sinz = sin( $z ); + $cosz = cos( $z ); + + $lon = $this->long0; + #$lat; + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { + $lat = $this->lat0; + } else { + $lat = Proj4php::$common->asinz( $cosz * $this->sin_p12 + ($p->y * $sinz * $this->cos_p12) / $rh ); + $con = abs( $this->lat0 ) - Proj4php::$common->HALF_PI; + if( abs( $con ) <= Proj4php::$common->EPSLN ) { + if( $this->lat0 >= 0.0 ) { + $lon = Proj4php::$common->adjust_lon( $this->long0 + atan2( $p->x, -$p->y ) ); + } else { + $lon = Proj4php::$common->adjust_lon( $this->long0 - atan2( -$p->x, $p->y ) ); + } + } else { + $con = $cosz - $this->sin_p12 * sin( $lat ); + if( (abs( $con ) < Proj4php::$common->EPSLN) && (abs( $p->x ) < Proj4php::$common->EPSLN) ) { + //no-op, just keep the lon value as is + } else { + #$temp = atan2( ($p->x * $sinz * $this->cos_p12 ), ($con * $rh ) ); // $temp is unused !?! + $lon = Proj4php::$common->adjust_lon( $this->long0 + atan2( ($p->x * $sinz * $this->cos_p12 ), ($con * $rh ) ) ); + } + } + } + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['aeqd'] = new Proj4phpProjAeqd(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cass.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cass.php new file mode 100644 index 0000000..469a74d --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cass.php @@ -0,0 +1,118 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +//Proj4php.defs["EPSG:28191"] = "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs"; +// Initialize the Cassini projection +// ----------------------------------------------------------------- + +class Proj4phpProjCass { + + public function init() { + if( !$this->sphere ) { + $this->en = Proj4php::$common->pj_enfn( $this->es ); + $this->m0 = Proj4php::$common->pj_mlfn( $this->lat0, sin( $this->lat0 ), cos( $this->lat0 ), $this->en ); + } + } + + protected $C1 = .16666666666666666666; + protected $C2 = .00833333333333333333; + protected $C3 = .04166666666666666666; + protected $C4 = .33333333333333333333; + protected $C5 = .06666666666666666666; + + /* Cassini forward equations--mapping lat,long to x,y + ----------------------------------------------------------------------- */ + public function forward( $p ) { + + /* Forward equations + ----------------- */ + #$x; + #$y; + $lam = $p->x; + $phi = $p->y; + $lam = Proj4php::$common->adjust_lon( $lam - $this->long0 ); + + if( $this->sphere ) { + $x = asin( cos( $phi ) * sin( $lam ) ); + $y = atan2( tan( $phi ), cos( $lam ) ) - $this->phi0; + } else { + //ellipsoid + $this->n = sin( $phi ); + $this->c = cos( $phi ); + $y = $this->pj_mlfn( $phi, $this->n, $this->c, $this->en ); + $this->n = 1. / sqrt( 1. - $this->es * $this->n * $this->n ); + $this->tn = tan( $phi ); + $this->t = $this->tn * $this->tn; + $this->a1 = $lam * $this->c; + $this->c *= $this->es * $this->c / (1 - $this->es); + $this->a2 = $this->a1 * $this->a1; + $x = $this->n * $this->a1 * (1. - $this->a2 * $this->t * ($this->C1 - (8. - $this->t + 8. * $this->c) * $this->a2 * $this->C2)); + $y -= $this->m0 - $this->n * $this->tn * $this->a2 * (.5 + (5. - $this->t + 6. * $this->c) * $this->a2 * $this->C3); + } + + $p->x = $this->a * $x + $this->x0; + $p->y = $this->a * $y + $this->y0; + + return $p; + } + + /* Inverse equations + ----------------- */ + public function inverse( $p ) { + $p->x -= $this->x0; + $p->y -= $this->y0; + $x = $p->x / $this->a; + $y = $p->y / $this->a; + + if( $this->sphere ) { + $this->dd = $y + $this->lat0; + $phi = asin( sin( $this->dd ) * cos( $x ) ); + $lam = atan2( tan( $x ), cos( $this->dd ) ); + } else { + /* ellipsoid */ + $ph1 = Proj4php::$common->pj_inv_mlfn( $this->m0 + $y, $this->es, $this->en ); + $this->tn = tan( $ph1 ); + $this->t = $this->tn * $this->tn; + $this->n = sin( $ph1 ); + $this->r = 1. / (1. - $this->es * $this->n * $this->n); + $this->n = sqrt( $this->r ); + $this->r *= (1. - $this->es) * $this->n; + $this->dd = $x / $this->n; + $this->d2 = $this->dd * $this->dd; + $phi = $ph1 - ($this->n * $this->tn / $this->r) * $this->d2 * (.5 - (1. + 3. * $this->t) * $this->d2 * $this->C3); + $lam = $this->dd * (1. + $this->t * $this->d2 * (-$this->C4 + (1. + 3. * $this->t) * $this->d2 * $this->C5)) / cos( $ph1 ); + } + $p->x = Proj4php::$common->adjust_lon( $this->long0 + $lam ); + $p->y = $phi; + + return $p; + } +} + +Proj4php::$proj['cass'] = new Proj4phpProjCass(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cea.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cea.php new file mode 100644 index 0000000..a325e31 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cea.php @@ -0,0 +1,97 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +class Proj4phpProjCea { + /* Initialize the Cylindrical Equal Area projection + ------------------------------------------- */ + + public function init() { + //no-op + } + + /* Cylindrical Equal Area forward equations--mapping lat,long to x,y + ------------------------------------------------------------ */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $x = $this->x0 + $this->a * $dlon * cos( $this->lat_ts ); + $y = $this->y0 + $this->a * sin( $lat ) / cos( $this->lat_ts ); + /* Elliptical Forward Transform + Not implemented due to a lack of a matchign inverse function + { + $Sin_Lat = sin(lat); + $Rn = $this->a * (sqrt(1.0e0 - $this->es * Sin_Lat * Sin_Lat )); + x = $this->x0 + $this->a * dlon * cos($this->lat_ts); + y = $this->y0 + Rn * sin(lat) / cos($this->lat_ts); + } + */ + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + * Cylindrical Equal Area inverse equations--mapping x,y to lat/long + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + $p->x -= $this->x0; + $p->y -= $this->y0; + + $p->x = Proj4php::$common->adjust_lon( $this->long0 + ($p->x / $this->a) / cos( $this->lat_ts ) ); + $p->y = asin( ($p->y / $this->a) * cos( $this->lat_ts ) ); + + return $p; + } +} + +Proj4php::$proj['cea'] = new Proj4phpProjCea(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqc.php new file mode 100644 index 0000000..b2c0994 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqc.php @@ -0,0 +1,58 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/* similar to equi.js FIXME proj4 uses eqc */ +class Proj4phpProjEqc { + + public function init() { + + if( !$this->x0 ) + $this->x0 = 0; + if( !$this->y0 ) + $this->y0 = 0; + if( !$this->lat0 ) + $this->lat0 = 0; + if( !$this->long0 ) + $this->long0 = 0; + if( !$this->lat_ts ) + $this->lat_ts = 0; + if( !$this->title ) + $this->title = "Equidistant Cylindrical (Plate Carre)"; + + $this->rc = cos( $this->lat_ts ); + } + + // forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $dlat = Proj4php::$common->adjust_lat( $lat - $this->lat0 ); + $p->x = $this->x0 + ($this->a * $dlon * $this->rc); + $p->y = $this->y0 + ($this->a * $dlat ); + return $p; + } + + // inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + public function inverse( $p ) { + + $x = $p->x; + $y = $p->y; + + $p->x = Proj4php::$common->adjust_lon( $this->long0 + (($x - $this->x0) / ($this->a * $this->rc)) ); + $p->y = Proj4php::$common->adjust_lat( $this->lat0 + (($y - $this->y0) / ($this->a )) ); + return $p; + } + +} + +Proj4php::$proj['eqc'] = new Proj4phpProjEqc(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqdc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqdc.php new file mode 100644 index 0000000..861a07c --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqdc.php @@ -0,0 +1,152 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME EQUIDISTANT CONIC + + PURPOSE: Transforms input longitude and latitude to Easting and Northing + for the Equidistant Conic projection. The longitude and + latitude must be in radians. The Easting and Northing values + will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + T. Mittan Mar, 1993 + + ALGORITHM REFERENCES + + 1. Snyder, John $p->, "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John $p-> and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. +*******************************************************************************/ + +/* Variables common to all subroutines in this code file +-----------------------------------------------------*/ + +class Proj4phpProjEqdc { + + /* Initialize the Equidistant Conic projection + ------------------------------------------ */ + public function init() { + + /* Place parameters in static storage for common use + ------------------------------------------------- */ + if( !$this->mode ) + $this->mode = 0; //chosen default mode + $this->temp = $this->b / $this->a; + $this->es = 1.0 - pow( $this->temp, 2 ); + $this->e = sqrt( $this->es ); + $this->e0 = Proj4php::$common->e0fn( $this->es ); + $this->e1 = Proj4php::$common->e1fn( $this->es ); + $this->e2 = Proj4php::$common->e2fn( $this->es ); + $this->e3 = Proj4php::$common->e3fn( $this->es ); + + $this->sinphi = sin( $this->lat1 ); + $this->cosphi = cos( $this->lat1 ); + + $this->ms1 = Proj4php::$common->msfnz( $this->e, $this->sinphi, $this->cosphi ); + $this->ml1 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat1 ); + + /* format B + --------- */ + if( $this->mode != 0 ) { + if( abs( $this->lat1 + $this->lat2 ) < Proj4php::$common->EPSLN ) { + Proj4php::reportError( "eqdc:Init:EqualLatitudes" ); + //return(81); + } + $this->sinphi = sin( $this->lat2 ); + $this->cosphi = cos( $this->lat2 ); + + $this->ms2 = Proj4php::$common->msfnz( $this->e, $this->sinphi, $this->cosphi ); + $this->ml2 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat2 ); + if( abs( $this->lat1 - $this->lat2 ) >= Proj4php::$common->EPSLN ) { + $this->ns = ($this->ms1 - $this->ms2) / ($this->ml2 - $this->ml1); + } else { + $this->ns = $this->sinphi; + } + } else { + $this->ns = $this->sinphi; + } + $this->g = $this->ml1 + $this->ms1 / $this->ns; + $this->ml0 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); + $this->rh = $this->a * ($this->g - $this->ml0); + } + + /* Equidistant Conic forward equations--mapping lat,long to x,y + ----------------------------------------------------------- */ + public function forward( $p ) { + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $ml = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); + $rh1 = $this->a * ($this->g - $ml); + $theta = $this->ns * Proj4php::$common->adjust_lon( $lon - $this->long0 ); + + $x = $this->x0 + $rh1 * sin( $theta ); + $y = $this->y0 + $this->rh - $rh1 * cos( $theta ); + $p->x = $x; + $p->y = $y; + + return $p; + } + + /* Inverse equations + ----------------- */ + public function inverse( $p ) { + + $p->x -= $this->x0; + $p->y = $this->rh - $p->y + $this->y0; + + if( $this->ns >= 0 ) { + $rh1 = sqrt( $p->x * $p->x + $p->y * $p->y ); + $con = 1.0; + } else { + $rh1 = -sqrt( $p->x * $p->x + $p->y * $p->y ); + $con = -1.0; + } + $theta = 0.0; + if( $rh1 != 0.0 ) + $theta = atan2( $con * $p->x, $con * $p->y ); + $ml = $this->g - $rh1 / $this->a; + $lat = $this->phi3z( $ml, $this->e0, $this->e1, $this->e2, $this->e3 ); + $lon = Proj4php::$common->adjust_lon( $this->long0 + $theta / $this->ns ); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + + /* Function to compute latitude, phi3, for the inverse of the Equidistant + Conic projection. + ----------------------------------------------------------------- */ + + public function phi3z( $ml, $e0, $e1, $e2, $e3 ) { + + $phi = $ml; + for( $i = 0; $i < 15; $i++ ) { + $dphi = ($ml + $e1 * sin( 2.0 * $phi ) - $e2 * sin( 4.0 * $phi ) + $e3 * sin( 6.0 * $phi )) / $e0 - $phi; + $phi += $dphi; + if( abs( $dphi ) <= .0000000001 ) { + return $phi; + } + } + + Proj4php::reportError( "PHI3Z-CONV:Latitude failed to converge after 15 iterations" ); + + return null; + } +} + +Proj4php::$proj['eqdc'] = new Proj4phpProjEqdc(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/equi.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/equi.php new file mode 100644 index 0000000..d0fdc60 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/equi.php @@ -0,0 +1,80 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME EQUIRECTANGULAR + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Equirectangular projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + T. Mittan Mar, 1993 + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. + *******************************************************************************/ +class Proj4phpProjEqui { + + public function init() { + if( !$this->x0 ) + $this->x0 = 0; + if( !$this->y0 ) + $this->y0 = 0; + if( !$this->lat0 ) + $this->lat0 = 0; + if( !$this->long0 ) + $this->long0 = 0; + ///$this->t2; + } + + /* Equirectangular forward equations--mapping lat,long to x,y + --------------------------------------------------------- */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $x = $this->x0 + $this->a * $dlon * cos( $this->lat0 ); + $y = $this->y0 + $this->a * $lat; + + $this->t1 = $x; + $this->t2 = cos( $this->lat0 ); + $p->x = $x; + $p->y = $y; + return $p; + } + + /* Equirectangular inverse equations--mapping x,y to lat/long + --------------------------------------------------------- */ + public function inverse( $p ) { + + $p->x -= $this->x0; + $p->y -= $this->y0; + $lat = $p->y / $this->a; + + if( abs( $lat ) > Proj4php::$common->HALF_PI ) { + Proj4php::reportError( "equi:Inv:DataError" ); + } + $lon = Proj4php::$common->adjust_lon( $this->long0 + $p->x / ($this->a * cos( $this->lat0 )) ); + $p->x = $lon; + $p->y = $lat; + } +} + +Proj4php::$proj['equi'] = new Proj4phpProjEqui(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gauss.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gauss.php new file mode 100644 index 0000000..54229a6 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gauss.php @@ -0,0 +1,74 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +class Proj4phpProjGauss { + + /** + * + */ + public function init() { + + $sphi = sin( $this->lat0 ); + $cphi = cos( $this->lat0 ); + $cphi *= $cphi; + $this->rc = sqrt( 1.0 - $this->es ) / (1.0 - $this->es * $sphi * $sphi); + $this->C = sqrt( 1.0 + $this->es * $cphi * $cphi / (1.0 - $this->es) ); + $this->phic0 = asin( $sphi / $this->C ); + $this->ratexp = 0.5 * $this->C * $this->e; + $this->K = tan( 0.5 * $this->phic0 + Proj4php::$common->FORTPI ) / (pow( tan( 0.5 * $this->lat0 + Proj4php::$common->FORTPI ), $this->C ) * Proj4php::$common->srat( $this->e * $sphi, $this->ratexp )); + } + + /** + * + * @param type $p + * @return type + */ + public function forward( $p ) { + $lon = $p->x; + $lat = $p->y; + + $p->y = 2.0 * atan( $this->K * pow( tan( 0.5 * $lat + Proj4php::$common->FORTPI ), $this->C ) * Proj4php::$common->srat( $this->e * sin( $lat ), $this->ratexp ) ) - Proj4php::$common->HALF_PI; + $p->x = $this->C * $lon; + + return $p; + } + + /** + * + * @param type $p + * @return null + */ + public function inverse( $p ) { + + $DEL_TOL = 1e-14; + $lon = $p->x / $this->C; + $lat = $p->y; + $num = pow( tan( 0.5 * $lat + Proj4php::$common->FORTPI ) / $this->K, 1. / $this->C ); + + for( $i = Proj4php::$common->MAX_ITER; $i > 0; --$i ) { + $lat = 2.0 * atan( $num * Proj4php::$common->srat( $this->e * sin( $p->y ), -0.5 * $this->e ) ) - Proj4php::$common->HALF_PI; + if( abs( $lat - $p->y ) < $DEL_TOL ) + break; + $p->y = $lat; + } + + /* convergence failed */ + if( !$i ) { + Proj4php::reportError( "gauss:inverse:convergence failed" ); + return null; + } + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['gauss'] = new Proj4phpProjGauss(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gnom.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gnom.php new file mode 100644 index 0000000..cbc44ad --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gnom.php @@ -0,0 +1,145 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/***************************************************************************** + NAME GNOMONIC + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Gnomonic Projection. + Implementation based on the existing sterea and ortho + implementations. + + PROGRAMMER DATE + ---------- ---- + Richard Marsden November 2009 + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Flattening the Earth - Two Thousand Years of Map + Projections", University of Chicago Press 1993 + + 2. Wolfram Mathworld "Gnomonic Projection" + http://mathworld.wolfram.com/GnomonicProjection.html + Accessed: 12th November 2009 +******************************************************************************/ + +class Proj4phpProjGnom { + + /** + * Initialize the Gnomonic projection + * + * @todo $def not used in context...? + * @param type $def + */ + public function init( $def ) { + + /* Place parameters in static storage for common use + ------------------------------------------------- */ + $this->sin_p14 = sin( $this->lat0 ); + $this->cos_p14 = cos( $this->lat0 ); + + // Approximation for projecting points to the horizon (infinity) + $this->infinity_dist = 1000 * $this->a; + $this->rc = 1; + } + + /* Gnomonic forward equations--mapping lat,long to x,y + --------------------------------------------------- */ + public function forward( $p ) { + + /* + $sinphi; + $cosphi; // sin and cos value + $dlon; // delta longitude value + $coslon; // cos of longitude + $ksp; // scale factor + $g; + */ + + $lon = $p->x; + $lat = $p->y; + /* Forward equations + ----------------- */ + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + + $sinphi = sin( $lat ); + $cosphi = cos( $lat ); + + $coslon = cos( $dlon ); + $g = $this->sin_p14 * $sinphi + $this->cos_p14 * $cosphi * $coslon; + $ksp = 1.0; + + if( (g > 0) || (abs( g ) <= Proj4php::$common->EPSLN) ) { + $x = $this->x0 + $this->a * $ksp * $cosphi * sin( $dlon ) / $g; + $y = $this->y0 + $this->a * $ksp * ($this->cos_p14 * $sinphi - $this->sin_p14 * $cosphi * $coslon) / $g; + } else { + Proj4php::reportError( "orthoFwdPointError" ); + + // Point is in the opposing hemisphere and is unprojectable + // We still need to return a reasonable point, so we project + // to infinity, on a bearing + // equivalent to the northern hemisphere equivalent + // This is a reasonable approximation for short shapes and lines that + // straddle the horizon. + + $x = $this->x0 + $this->infinity_dist * $cosphi * sin( $dlon ); + $y = $this->y0 + $this->infinity_dist * ($this->cos_p14 * $sinphi - $this->sin_p14 * $cosphi * $coslon); + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + + /* + $rh; // Rho + $z; // angle + $sinc; + $cosc; + $c; + $lon; + $lat; + */ + + /* Inverse equations + ----------------- */ + $p->x = ($p->x - $this->x0) / $this->a; + $p->y = ($p->y - $this->y0) / $this->a; + + $p->x /= $this->k0; + $p->y /= $this->k0; + + if( ($rh = sqrt( $p->x * $p->x + $p->y * $p->y ) ) ) { + $c = atan2( $rh, $this->rc ); + $sinc = sin( $c ); + $cosc = cos( $c ); + + $lat = Proj4php::$common->asinz( $cosc * $this->sin_p14 + ($p->y * $sinc * $this->cos_p14) / $rh ); + $lon = atan2( $p->x * sinc, rh * $this->cos_p14 * $cosc - $p->y * $this->sin_p14 * $sinc ); + $lon = Proj4php::$common->adjust_lon( $this->long0 + $lon ); + } else { + $lat = $this->phic0; + $lon = 0.0; + } + + $p->x = $lon; + $p->y = $lat; + + return $p; + } +} + +Proj4php::$proj['gnom'] = new Proj4phpProjGnom(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gstmerc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gstmerc.php new file mode 100644 index 0000000..1fb2e42 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gstmerc.php @@ -0,0 +1,63 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +class Proj4phpProjGstmerc { + + public function init() { + + // array of: a, b, lon0, lat0, k0, x0, y0 + $temp = $this->b / $this->a; + $this->e = sqrt( 1.0 - $temp * $temp ); + $this->lc = $this->long0; + $this->rs = sqrt( 1.0 + $this->e * $this->e * pow( cos( $this->lat0 ), 4.0 ) / (1.0 - $this->e * $this->e) ); + $sinz = sin( $this->lat0 ); + $pc = asin( $sinz / $this->rs ); + $sinzpc = sin( $pc ); + $this->cp = Proj4php::$common->latiso( 0.0, $pc, $sinzpc ) - $this->rs * Proj4php::$common->latiso( $this->e, $this->lat0, $sinz ); + $this->n2 = $this->k0 * $this->a * sqrt( 1.0 - $this->e * $this->e ) / (1.0 - $this->e * $this->e * $sinz * $sinz); + $this->xs = $this->x0; + $this->ys = $this->y0 - $this->n2 * $pc; + + if( !$this->title ) + $this->title = "Gauss Schreiber transverse mercator"; + } + + // forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $L = $this->rs * ($lon - $this->lc); + $Ls = $this->cp + ($this->rs * Proj4php::$common->latiso( $this->e, $lat, sin( $lat ) )); + $lat1 = asin( sin( $L ) / Proj4php::$common->cosh( $Ls ) ); + $Ls1 = Proj4php::$common->latiso( 0.0, $lat1, sin( $lat1 ) ); + $p->x = $this->xs + ($this->n2 * $Ls1); + $p->y = $this->ys + ($this->n2 * atan( Proj4php::$common->sinh( $Ls ) / cos( $L ) )); + return $p; + } + + // inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + public function inverse( $p ) { + + $x = $p->x; + $y = $p->y; + + $L = atan( Proj4php::$common->sinh( ($x - $this->xs) / $this->n2 ) / cos( ($y - $this->ys) / $this->n2 ) ); + $lat1 = asin( sin( ($y - $this->ys) / $this->n2 ) / Proj4php::$common->cosh( ($x - $this->xs) / $this->n2 ) ); + $LC = Proj4php::$common->latiso( 0.0, $lat1, sin( $lat1 ) ); + $p->x = $this->lc + $L / $this->rs; + $p->y = Proj4php::$common->invlatiso( $this->e, ($LC - $this->cp) / $this->rs ); + return $p; + } + +} + +Proj4php::$proj['gstmerc'] = new Proj4phpProjGestmerc(); diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/krovak.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/krovak.php new file mode 100644 index 0000000..6aebd41 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/krovak.php @@ -0,0 +1,157 @@ +a = 6377397.155; + $this->es = 0.006674372230614; + $this->e = sqrt( $this->es ); + /* if latitude of projection center is not set, use 49d30'N */ + if( !$this->lat0 ) { + $this->lat0 = 0.863937979737193; + } + if( !$this->long0 ) { + $this->long0 = 0.7417649320975901 - 0.308341501185665; + } + /* if scale not set default to 0.9999 */ + if( !$this->k0 ) { + $this->k0 = 0.9999; + } + $this->s45 = 0.785398163397448; /* 45° */ + $this->s90 = 2 * $this->s45; + $this->fi0 = $this->lat0; /* Latitude of projection centre 49° 30' */ + /* Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, + e2=0.006674372230614; + */ + $this->e2 = $this->es; /* 0.006674372230614; */ + $this->e = sqrt( $this->e2 ); + $this->alfa = sqrt( 1. + ($this->e2 * pow( cos( $this->fi0 ), 4 )) / (1. - $this->e2) ); + $this->uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ + $this->u0 = asin( sin( $this->fi0 ) / $this->alfa ); + $this->g = pow( (1. + $this->e * sin( $this->fi0 )) / (1. - $this->e * sin( $this->fi0 )), $this->alfa * $this->e / 2. ); + $this->k = tan( $this->u0 / 2. + $this->s45 ) / pow( tan( $this->fi0 / 2. + $this->s45 ), $this->alfa ) * $this->g; + $this->k1 = $this->k0; + $this->n0 = $this->a * sqrt( 1. - $this->e2 ) / (1. - $this->e2 * pow( sin( $this->fi0 ), 2 )); + $this->s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */ + $this->n = sin( $this->s0 ); + $this->ro0 = $this->k1 * $this->n0 / tan( $this->s0 ); + $this->ad = $this->s90 - $this->uq; + $this->czech = true; /* Always use czech GIS coordinates -> negative ones */ + } + + /** + * ellipsoid + * calculate xy from lat/lon + * Constants, identical to inverse transform function + * + * @param type $p + * @return type + */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); // Delta longitude + + /* Transformation */ + $gfi = pow( ((1. + $this->e * sin( $lat )) / (1. - $this->e * sin( $lat )) ), ($this->alfa * $this->e / 2. ) ); + $u = 2. * (atan( $this->k * pow( tan( $lat / 2. + $this->s45 ), $this->alfa ) / $gfi ) - $this->s45); + $deltav = - $delta_lon * $this->alfa; + $s = asin( cos( $this->ad ) * sin( $u ) + sin( $this->ad ) * cos( $u ) * cos( $deltav ) ); + $d = asin( cos( $u ) * sin( $deltav ) / cos( $s ) ); + $eps = $this->n * $d; + $ro = $this->ro0 * pow( tan( $this->s0 / 2. + $this->s45 ), $this->n ) / pow( tan( $s / 2. + $this->s45 ), $this->n ); + /* x and y are reverted! */ + //$p->y = ro * cos(eps) / a; + //$p->x = ro * sin(eps) / a; + $p->y = $ro * cos( $eps ) / 1.0; + $p->x = $ro * sin( $eps ) / 1.0; + + if( $this->czech ) { + $p->y *= -1.0; + $p->x *= -1.0; + } + + return $p; + } + + /** + * calculate lat/lon from xy + * + * @param Point $p + * @return Point $p + */ + public function inverse( $p ) { + + /* Transformation */ + /* revert y, x */ + $tmp = $p->x; + $p->x = $p->y; + $p->y = $tmp; + + if( $this->czech ) { + $p->y *= -1.0; + $p->x *= -1.0; + } + + $ro = sqrt( $p->x * $p->x + $p->y * $p->y ); + $eps = atan2( $p->y, $p->x ); + $d = $eps / sin( $this->s0 ); + $s = 2. * (atan( pow( $this->ro0 / $ro, 1. / $this->n ) * tan( $this->s0 / 2. + $this->s45 ) ) - $this->s45); + $u = asin( cos( $this->ad ) * sin( $s ) - sin( $this->ad ) * cos( $s ) * cos( $d ) ); + $deltav = asin( cos( $s ) * sin( $d ) / cos( $u ) ); + $p->x = $this->long0 - $deltav / $this->alfa; + + /* ITERATION FOR $lat */ + $fi1 = $u; + $ok = 0; + $iter = 0; + do { + $p->y = 2. * ( atan( pow( $this->k, -1. / $this->alfa ) * + pow( tan( $u / 2. + $this->s45 ), 1. / $this->alfa ) * + pow( (1. + $this->e * sin( $fi1 )) / (1. - $this->e * sin( $fi1 )), $this->e / 2. ) + ) - $this->s45); + if( abs( $fi1 - $p->y ) < 0.0000000001 ) + $ok = 1; + $fi1 = $p->y; + $iter += 1; + } while( $ok == 0 && $iter < 15 ); + + if( $iter >= 15 ) { + Proj4php::reportError( "PHI3Z-CONV:Latitude failed to converge after 15 iterations" ); + //console.log('iter:', iter); + return null; + } + + return $p; + } + +} + +Proj4php::$proj['krovak'] = new Proj4phpProjKrovak(); diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/laea.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/laea.php new file mode 100644 index 0000000..9624cf1 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/laea.php @@ -0,0 +1,398 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/* * ***************************************************************************** + NAME LAMBERT AZIMUTHAL EQUAL-AREA + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Lambert Azimuthal Equal-Area projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + D. Steinwand, EROS March, 1991 + + This function was adapted from the Lambert Azimuthal Equal Area projection + code (FORTRAN) in the General Cartographic Transformation Package software + which is available from the U.S. Geological Survey National Mapping Division. + + ALGORITHM REFERENCES + + 1. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 3. "Software Documentation for GCTP General Cartographic Transformation + Package", U.S. Geological Survey National Mapping Division, May 1982. + * ***************************************************************************** */ + +class Proj4phpProjLaea { + + protected $S_POLE = 1; + protected $N_POLE = 2; + protected $EQUIT = 3; + protected $OBLIQ = 4; + + protected $P00 = .33333333333333333333; + protected $P01 = .17222222222222222222; + protected $P02 = .10257936507936507936; + protected $P10 = .06388888888888888888; + protected $P11 = .06640211640211640211; + protected $P20 = .01641501294219154443; + + /* Initialize the Lambert Azimuthal Equal Area projection + ------------------------------------------------------ */ + public function init() { + $t = abs( $this->lat0 ); + if( abs( $t - Proj4php::$common->HALF_PI ) < Proj4php::$common->EPSLN ) { + $this->mode = $this->lat0 < 0. ? $this->S_POLE : $this->N_POLE; + } else if( abs( $t ) < Proj4php::$common->EPSLN ) { + $this->mode = $this->EQUIT; + } else { + $this->mode = $this->OBLIQ; + } + if( $this->es > 0 ) { + #$sinphi; + + $this->qp = Proj4php::$common->qsfnz( $this->e, 1.0 ); + $this->mmf = .5 / (1. - $this->es); + $this->apa = $this->authset( $this->es ); + switch( $this->mode ) { + case $this->N_POLE: + case $this->S_POLE: + $this->dd = 1.; + break; + case $this->EQUIT: + $this->rq = sqrt( .5 * $this->qp ); + $this->dd = 1. / $this->rq; + $this->xmf = 1.; + $this->ymf = .5 * $this->qp; + break; + case $this->OBLIQ: + $this->rq = sqrt( .5 * $this->qp ); + $sinphi = sin( $this->lat0 ); + $this->sinb1 = Proj4php::$common->qsfnz( $this->e, $sinphi ) / $this->qp; + $this->cosb1 = sqrt( 1. - $this->sinb1 * $this->sinb1 ); + $this->dd = cos( $this->lat0 ) / (sqrt( 1. - $this->es * $sinphi * $sinphi ) * $this->rq * $this->cosb1); + $this->ymf = ($this->xmf = $this->rq) / $this->dd; + $this->xmf *= $this->dd; + break; + } + } else { + if( $this->mode == $this->OBLIQ ) { + $this->sinph0 = sin( $this->lat0 ); + $this->cosph0 = cos( $this->lat0 ); + } + } + } + + /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y + ----------------------------------------------------------------------- */ + public function forward( $p ) { + + /* Forward equations + ----------------- */ + #$x; + #$y; + $lam = $p->x; + $phi = $p->y; + $lam = Proj4php::$common->adjust_lon( $lam - $this->long0 ); + + if( $this->sphere ) { + /* + $coslam; + $cosphi; + $sinphi; + */ + + $sinphi = sin( $phi ); + $cosphi = cos( $phi ); + $coslam = cos( $lam ); + switch( $this->mode ) { + case $this->OBLIQ: + case $this->EQUIT: + $y = ($this->mode == $this->EQUIT) ? 1. + $cosphi * $coslam : 1. + $this->sinph0 * $sinphi + $this->cosph0 * $cosphi * $coslam; + if( y <= Proj4php::$common->EPSLN ) { + Proj4php::reportError( "laea:fwd:y less than eps" ); + return null; + } + $y = sqrt( 2. / $y ); + $x = $y * cosphi * sin( $lam ); + $y *= ($this->mode == $this->EQUIT) ? $sinphi : $this->cosph0 * $sinphi - $this->sinph0 * $cosphi * $coslam; + break; + case $this->N_POLE: + $coslam = -$coslam; + case $this->S_POLE: + if( abs( $phi + $this->phi0 ) < Proj4php::$common->EPSLN ) { + Proj4php::reportError( "laea:fwd:phi < eps" ); + return null; + } + $y = Proj4php::$common->FORTPI - $phi * .5; + $y = 2. * (($this->mode == $this->S_POLE) ? cos( $y ) : sin( $y )); + $x = $y * sin( $lam ); + $y *= $coslam; + break; + } + } else { + /* + $coslam; + $sinlam; + $sinphi; + $q; + */ + $sinb = 0.0; + $cosb = 0.0; + $b = 0.0; + + $coslam = cos( $lam ); + $sinlam = sin( $lam ); + $sinphi = sin( $phi ); + $q = Proj4php::$common->qsfnz( $this->e, $sinphi ); + if( $this->mode == $this->OBLIQ || $this->mode == $this->EQUIT ) { + $sinb = $q / $this->qp; + $cosb = sqrt( 1. - $sinb * $sinb ); + } + switch( $this->mode ) { + case $this->OBLIQ: + $b = 1. + $this->sinb1 * $sinb + $this->cosb1 * $cosb * $coslam; + break; + case $this->EQUIT: + $b = 1. + $cosb * $coslam; + break; + case $this->N_POLE: + $b = Proj4php::$common->HALF_PI + $phi; + $q = $this->qp - $q; + break; + case $this->S_POLE: + $b = $phi - Proj4php::$common->HALF_PI; + $q = $this->qp + $q; + break; + } + if( abs( $b ) < Proj4php::$common->EPSLN ) { + Proj4php::reportError( "laea:fwd:b < eps" ); + return null; + } + switch( $this->mode ) { + case $this->OBLIQ: + case $this->EQUIT: + $b = sqrt( 2. / $b ); + if( $this->mode == $this->OBLIQ ) { + $y = $this->ymf * $b * ($this->cosb1 * $sinb - $this->sinb1 * $cosb * $coslam); + } else { + $y = ($b = sqrt( 2. / (1. + $cosb * $coslam) )) * $sinb * $this->ymf; + } + $x = $this->xmf * $b * $cosb * $sinlam; + break; + case $this->N_POLE: + case $this->S_POLE: + if( q >= 0. ) { + $x = ($b = sqrt( $q )) * $sinlam; + $y = $coslam * (($this->mode == $this->S_POLE) ? $b : -$b); + } else { + $x = $y = 0.; + } + break; + } + } + + //v 1.0 + /* + $sin_lat=sin(lat); + $cos_lat=cos(lat); + + $sin_delta_lon=sin(delta_lon); + $cos_delta_lon=cos(delta_lon); + + $g =$this->sin_lat_o * sin_lat +$this->cos_lat_o * cos_lat * cos_delta_lon; + if (g == -1.0) { + Proj4php::reportError("laea:fwd:Point projects to a circle of radius "+ 2.0 * R); + return null; + } + $ksp = $this->a * sqrt(2.0 / (1.0 + g)); + $x = ksp * cos_lat * sin_delta_lon + $this->x0; + $y = ksp * ($this->cos_lat_o * sin_lat - $this->sin_lat_o * cos_lat * cos_delta_lon) + $this->y0; + */ + $p->x = $this->a * $x + $this->x0; + $p->y = $this->a * $y + $this->y0; + + return $p; + } + + /* Inverse equations + ----------------- */ + public function inverse( $p ) { + $p->x -= $this->x0; + $p->y -= $this->y0; + $x = $p->x / $this->a; + $y = $p->y / $this->a; + + if( $this->sphere ) { + $cosz = 0.0; + #$rh; + $sinz = 0.0; + + $rh = sqrt( $x * $x + $y * $y ); + $phi = $rh * .5; + if( $phi > 1. ) { + Proj4php::reportError( "laea:Inv:DataError" ); + return null; + } + $phi = 2. * asin( $phi ); + if( $this->mode == $this->OBLIQ || $this->mode == $this->EQUIT ) { + $sinz = sin( $phi ); + $cosz = cos( $phi ); + } + switch( $this->mode ) { + case $this->EQUIT: + $phi = (abs( $rh ) <= Proj4php::$common->EPSLN) ? 0. : asin( $y * $sinz / $rh ); + $x *= $sinz; + $y = $cosz * $rh; + break; + case $this->OBLIQ: + $phi = (abs( $rh ) <= Proj4php::$common->EPSLN) ? $this->phi0 : asin( $cosz * $this->sinph0 + $y * $sinz * $this->cosph0 / $rh ); + $x *= $sinz * $this->cosph0; + $y = ($cosz - sin( $phi ) * $this->sinph0) * $rh; + break; + case $this->N_POLE: + $y = -$y; + $phi = Proj4php::$common->HALF_PI - $phi; + break; + case $this->S_POLE: + $phi -= Proj4php::$common->HALF_PI; + break; + } + $lam = ($y == 0. && ($this->mode == $this->EQUIT || $this->mode == $this->OBLIQ)) ? 0. : atan2( $x, $y ); + } else { + /* + $cCe; + $sCe; + $q; + $rho; + */ + $ab = 0.0; + + switch( $this->mode ) { + case $this->EQUIT: + case $this->OBLIQ: + $x /= $this->dd; + $y *= $this->dd; + $rho = sqrt( $x * $x + $y * $y ); + if( $rho < Proj4php::$common->EPSLN ) { + $p->x = 0.; + $p->y = $this->phi0; + return $p; + } + $sCe = 2. * asin( .5 * $rho / $this->rq ); + $cCe = cos( $sCe ); + $x *= ($sCe = sin( $sCe )); + if( $this->mode == $this->OBLIQ ) { + $ab = $cCe * $this->sinb1 + $y * $sCe * $this->cosb1 / $rho; + $q = $this->qp * $ab; + $y = $rho * $this->cosb1 * $cCe - $y * $this->sinb1 * $sCe; + } else { + $ab = $y * $sCe / $rho; + $q = $this->qp * $ab; + $y = $rho * $cCe; + } + break; + case $this->N_POLE: + $y = -$y; + case $this->S_POLE: + $q = ($x * $x + $y * $y); + if( !$q ) { + $p->x = 0.; + $p->y = $this->phi0; + return $p; + } + /* + q = $this->qp - q; + */ + $ab = 1. - $q / $this->qp; + if( $this->mode == $this->S_POLE ) { + $ab = - $ab; + } + break; + } + $lam = atan2( $x, $y ); + $phi = $this->authlat( asin( $ab ), $this->apa ); + } + + /* + $Rh = sqrt($p->x *$p->x +$p->y * $p->y); + $temp = Rh / (2.0 * $this->a); + + if (temp > 1) { + Proj4php::reportError("laea:Inv:DataError"); + return null; + } + + $z = 2.0 * Proj4php::$common.asinz(temp); + $sin_z=sin(z); + $cos_z=cos(z); + + $lon =$this->long0; + if (abs(Rh) > Proj4php::$common->EPSLN) { + $lat = Proj4php::$common.asinz($this->sin_lat_o * cos_z +$this-> cos_lat_o * sin_z *$p->y / Rh); + $temp =abs($this->lat0) - Proj4php::$common->HALF_PI; + if (abs(temp) > Proj4php::$common->EPSLN) { + temp = cos_z -$this->sin_lat_o * sin(lat); + if(temp!=0.0) lon=Proj4php::$common->adjust_lon($this->long0+atan2($p->x*sin_z*$this->cos_lat_o,temp*Rh)); + } else if ($this->lat0 < 0.0) { + lon = Proj4php::$common->adjust_lon($this->long0 - atan2(-$p->x,$p->y)); + } else { + lon = Proj4php::$common->adjust_lon($this->long0 + atan2($p->x, -$p->y)); + } + } else { + lat = $this->lat0; + } + */ + //return(OK); + $p->x = Proj4php::$common->adjust_lon( $this->long0 + $lam ); + $p->y = $phi; + return $p; + } + + /** + * determine latitude from authalic latitude + * + * @param type $es + * @return type + */ + public function authset( $es ) { + #$t; + $APA = array( ); + $APA[0] = $es * $this->P00; + $t = $es * $es; + $APA[0] += $t * $this->P01; + $APA[1] = $t * $this->P10; + $t *= $es; + $APA[0] += $t * $this->P02; + $APA[1] += $t * $this->P11; + $APA[2] = $t * $this->P20; + return $APA; + } + + /** + * + * @param type $beta + * @param type $APA + * @return type + */ + public function authlat( $beta, $APA ) { + $t = $beta + $beta; + return($beta + $APA[0] * sin( $t ) + $APA[1] * sin( $t + $t ) + $APA[2] * sin( $t + $t + $t )); + } + +} + +Proj4php::$proj['laea'] = new Proj4phpProjLaea(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/lcc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/lcc.php new file mode 100644 index 0000000..c5db675 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/lcc.php @@ -0,0 +1,166 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME LAMBERT CONFORMAL CONIC + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Lambert Conformal Conic projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + *******************************************************************************/ + + +//<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x0=-17044 +x0=-23139.97 +ellps=intl +units=m +no_defs no_defs +// Initialize the Lambert Conformal conic projection +// ----------------------------------------------------------------- +//class Proj4phpProjlcc = Class.create(); +class Proj4phpProjLcc { + + public function init() { + // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north + //double c_lat; /* center latitude */ + //double c_lon; /* center longitude */ + //double lat1; /* first standard parallel */ + //double lat2; /* second standard parallel */ + //double r_maj; /* major axis */ + //double r_min; /* minor axis */ + //double false_east; /* x offset in meters */ + //double false_north; /* y offset in meters */ + + //if lat2 is not defined + if( !isset($this->lat2) ) { + $this->lat2 = $this->lat0; + } + + //if k0 is not defined + if( !isset($this->k0) ) + $this->k0 = 1.0; + + // Standard Parallels cannot be equal and on opposite sides of the equator + if( abs( $this->lat1 + $this->lat2 ) < Proj4php::$common->EPSLN ) { + Proj4php::reportError( "lcc:init: Equal Latitudes" ); + return; + } + + $temp = $this->b / $this->a; + $this->e = sqrt( 1.0 - $temp * $temp ); + + $sin1 = sin( $this->lat1 ); + $cos1 = cos( $this->lat1 ); + $ms1 = Proj4php::$common->msfnz( $this->e, $sin1, $cos1 ); + $ts1 = Proj4php::$common->tsfnz( $this->e, $this->lat1, $sin1 ); + + $sin2 = sin( $this->lat2 ); + $cos2 = cos( $this->lat2 ); + $ms2 = Proj4php::$common->msfnz( $this->e, $sin2, $cos2 ); + $ts2 = Proj4php::$common->tsfnz( $this->e, $this->lat2, $sin2 ); + + $ts0 = Proj4php::$common->tsfnz( $this->e, $this->lat0, sin( $this->lat0 ) ); + + if( abs( $this->lat1 - $this->lat2 ) > Proj4php::$common->EPSLN ) { + $this->ns = log( $ms1 / $ms2 ) / log( $ts1 / $ts2 ); + } else { + $this->ns = $sin1; + } + $this->f0 = $ms1 / ($this->ns * pow( $ts1, $this->ns )); + $this->rh = $this->a * $this->f0 * pow( $ts0, $this->ns ); + + if( !isset($this->title) ) + $this->title = "Lambert Conformal Conic"; + } + + // Lambert Conformal conic forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + // convert to radians + if( $lat <= 90.0 && $lat >= -90.0 && $lon <= 180.0 && $lon >= -180.0 ) { + //lon = lon * Proj4php::$common.D2R; + //lat = lat * Proj4php::$common.D2R; + } else { + Proj4php::reportError( "lcc:forward: llInputOutOfRange: " . $lon . " : " . $lat ); + return null; + } + + $con = abs( abs( $lat ) - Proj4php::$common->HALF_PI ); + + if( $con > Proj4php::$common->EPSLN ) { + $ts = Proj4php::$common->tsfnz( $this->e, $lat, sin( $lat ) ); + $rh1 = $this->a * $this->f0 * pow( $ts, $this->ns ); + } else { + $con = $lat * $this->ns; + if( $con <= 0 ) { + Proj4php::reportError( "lcc:forward: No Projection" ); + return null; + } + $rh1 = 0; + } + + $theta = $this->ns * Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $p->x = $this->k0 * ($rh1 * sin( $theta )) + $this->x0; + $p->y = $this->k0 * ($this->rh - $rh1 * cos( $theta )) + $this->y0; + + return $p; + } + + /** + * Lambert Conformal Conic inverse equations--mapping x,y to lat/long + * + * @param type $p + * @return null + */ + public function inverse( $p ) { + + $x = ($p->x - $this->x0) / $this->k0; + $y = ($this->rh - ($p->y - $this->y0) / $this->k0); + if( $this->ns > 0 ) { + $rh1 = sqrt( $x * $x + $y * $y ); + $con = 1.0; + } else { + $rh1 = -sqrt( $x * $x + $y * $y ); + $con = -1.0; + } + $theta = 0.0; + if( $rh1 != 0 ) { + $theta = atan2( ($con * $x ), ($con * $y ) ); + } + if( ($rh1 != 0) || ($this->ns > 0.0) ) { + $con = 1.0 / $this->ns; + $ts = pow( ($rh1 / ($this->a * $this->f0) ), $con ); + $lat = Proj4php::$common->phi2z( $this->e, $ts ); + if( $lat == -9999 ) + return null; + } else { + $lat = -Proj4php::$common->HALF_PI; + } + $lon = Proj4php::$common->adjust_lon( $theta / $this->ns + $this->long0 ); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } +} + +Proj4php::$proj['lcc'] = new Proj4phpProjLcc(); + + diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/merc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/merc.php new file mode 100644 index 0000000..bd6185d --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/merc.php @@ -0,0 +1,129 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/* * ***************************************************************************** + NAME MERCATOR + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Mercator projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + D. Steinwand, EROS Nov, 1991 + T. Mittan Mar, 1993 + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. + * ***************************************************************************** */ + +//static double r_major = a; /* major axis */ +//static double r_minor = b; /* minor axis */ +//static double lon_center = long0; /* Center longitude (projection center) */ +//static double lat_origin = lat0; /* center latitude */ +//static double e,es; /* eccentricity constants */ +//static double m1; /* small value m */ +//static double false_northing = y0; /* y offset in meters */ +//static double false_easting = x0; /* x offset in meters */ +//scale_fact = k0 + +class Proj4phpProjMerc { + + public function init() { + //?$this->temp = $this->r_minor / $this->r_major; + //$this->temp = $this->b / $this->a; + //$this->es = 1.0 - sqrt($this->temp); + //$this->e = sqrt( $this->es ); + //?$this->m1 = cos($this->lat_origin) / (sqrt( 1.0 - $this->es * sin($this->lat_origin) * sin($this->lat_origin))); + //$this->m1 = cos(0.0) / (sqrt( 1.0 - $this->es * sin(0.0) * sin(0.0))); + if( $this->lat_ts ) { + if( $this->sphere ) { + $this->k0 = cos( $this->lat_ts ); + } else { + $this->k0 = Proj4php::$common->msfnz( $this->es, sin( $this->lat_ts ), cos( $this->lat_ts ) ); + } + } + } + + /* Mercator forward equations--mapping lat,long to x,y + -------------------------------------------------- */ + + public function forward( $p ) { + + //alert("ll2m coords : ".coords); + $lon = $p->x; + $lat = $p->y; + // convert to radians + if( $lat * Proj4php::$common->R2D > 90.0 && + $lat * Proj4php::$common->R2D < -90.0 && + $lon * Proj4php::$common->R2D > 180.0 && + $lon * Proj4php::$common->R2D < -180.0 ) { + Proj4php::reportError( "merc:forward: llInputOutOfRange: " . $lon . " : " . $lat ); + return null; + } + + if( abs( abs( $lat ) - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN ) { + Proj4php::reportError( "merc:forward: ll2mAtPoles" ); + return null; + } else { + if( $this->sphere ) { + $x = $this->x0 + $this->a * $this->k0 * Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $y = $this->y0 + $this->a * $this->k0 * log( tan( Proj4php::$common->FORTPI + 0.5 * $lat ) ); + } else { + $sinphi = sin( lat ); + $ts = Proj4php::$common->tsfnz( $this->e, $lat, $sinphi ); + $x = $this->x0 + $this->a * $this->k0 * Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $y = $this->y0 - $this->a * $this->k0 * log( $ts ); + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + } + + /* Mercator inverse equations--mapping x,y to lat/long + -------------------------------------------------- */ + + public function inverse( $p ) { + + $x = $p->x - $this->x0; + $y = $p->y - $this->y0; + + if( $this->sphere ) { + $lat = Proj4php::$common->HALF_PI - 2.0 * atan( exp( -$y / $this->a * $this->k0 ) ); + } else { + $ts = exp( -$y / ($this->a * $this->k0) ); + $lat = Proj4php::$common->phi2z( $this->e, $ts ); + if( $lat == -9999 ) { + Proj4php::reportError( "merc:inverse: lat = -9999" ); + return null; + } + } + $lon = Proj4php::$common->adjust_lon( $this->long0 + $x / ($this->a * $this->k0) ); + + $p->x = $lon; + $p->y = $lat; + return $p; + } + +} + +Proj4php::$proj['merc'] = new Proj4phpProjMerc(); + + diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/mill.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/mill.php new file mode 100644 index 0000000..6049167 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/mill.php @@ -0,0 +1,82 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME MILLER CYLINDRICAL + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Miller Cylindrical projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + T. Mittan March, 1993 + + This function was adapted from the Lambert Azimuthal Equal Area projection + code (FORTRAN) in the General Cartographic Transformation Package software + which is available from the U.S. Geological Survey National Mapping Division. + + ALGORITHM REFERENCES + + 1. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 3. "Software Documentation for GCTP General Cartographic Transformation + Package", U.S. Geological Survey National Mapping Division, May 1982. + * ***************************************************************************** */ + +class Proj4phpProjMill { + /* Initialize the Miller Cylindrical projection + ------------------------------------------- */ + + public function init() { + //no-op + } + + /* Miller Cylindrical forward equations--mapping lat,long to x,y + ------------------------------------------------------------ */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $x = $this->x0 + $this->a * $dlon; + $y = $this->y0 + $this->a * log( tan( (Proj4php::$common->PI / 4.0) + ($lat / 2.5) ) ) * 1.25; + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /* Miller Cylindrical inverse equations--mapping x,y to lat/long + ------------------------------------------------------------ */ + public function inverse( $p ) { + + $p->x -= $this->x0; + $p->y -= $this->y0; + + $lon = Proj4php::$common->adjust_lon( $this->long0 + $p->x / $this->a ); + $lat = 2.5 * (atan( exp( 0.8 * $p->y / $this->a ) ) - Proj4php::$common->PI / 4.0); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } +} + +Proj4php::$proj['mill'] = new Proj4phpProjMill(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/moll.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/moll.php new file mode 100644 index 0000000..310a4d8 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/moll.php @@ -0,0 +1,121 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME MOLLWEIDE + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the MOllweide projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + D. Steinwand, EROS May, 1991; Updated Sept, 1992; Updated Feb, 1993 + S. Nelson, EDC Jun, 2993; Made corrections in precision and + number of iterations. + + ALGORITHM REFERENCES + + 1. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. + + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + ****************************************************************************** */ + +class Proj4phpProjMoll { + /* Initialize the Mollweide projection + ------------------------------------ */ + + public function init() { + //no-op + } + + /* Mollweide forward equations--mapping lat,long to x,y + ---------------------------------------------------- */ + public function forward( $p ) { + + /* Forward equations + ----------------- */ + $lon = $p->x; + $lat = $p->y; + + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $theta = $lat; + $con = Proj4php::$common->PI * sin( $lat ); + + /* Iterate using the Newton-Raphson method to find theta + ----------------------------------------------------- */ + for( $i = 0; true; ++$i ) { + $delta_theta = -($theta + sin( $theta ) - $con) / (1.0 + cos( $theta )); + $theta += $delta_theta; + if( abs( $delta_theta ) < Proj4php::$common->EPSLN ) + break; + if( $i >= 50 ) { + Proj4php::reportError( "moll:Fwd:IterationError" ); + //return(241); + } + } + $theta /= 2.0; + + /* If the latitude is 90 deg, force the x coordinate to be "0 . false easting" + this is done here because of precision problems with "cos(theta)" + -------------------------------------------------------------------------- */ + if( Proj4php::$common->PI / 2 - abs( $lat ) < Proj4php::$common->EPSLN ) + $delta_lon = 0; + $x = 0.900316316158 * $this->a * $delta_lon * cos( $theta ) + $this->x0; + $y = 1.4142135623731 * $this->a * sin( $theta ) + $this->y0; + + $p->x = $x; + $p->y = $y; + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + #$theta; + #$arg; + + /* Inverse equations + ----------------- */ + $p->x-= $this->x0; + //~ $p->y -= $this->y0; + $arg = $p->y / (1.4142135623731 * $this->a); + + /* Because of division by zero problems, 'arg' can not be 1.0. Therefore + a number very close to one is used instead. + ------------------------------------------------------------------- */ + if( abs( $arg ) > 0.999999999999 ) + $arg = 0.999999999999; + $theta = asin( $arg ); + $lon = Proj4php::$common->adjust_lon( $this->long0 + ($p->x / (0.900316316158 * $this->a * cos( $theta ))) ); + if( $lon < (-Proj4php::$common->PI) ) + $lon = -Proj4php::$common->PI; + if( $lon > Proj4php::$common->PI ) + $lon = Proj4php::$common->PI; + $arg = (2.0 * $theta + sin( 2.0 * $theta )) / Proj4php::$common->PI; + if( abs( $arg ) > 1.0 ) + $arg = 1.0; + $lat = asin( $arg ); + //return(OK); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } +} + +Proj4php::$proj['moll'] = new Proj4phpProjMoll(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/nzmg.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/nzmg.php new file mode 100644 index 0000000..76327b9 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/nzmg.php @@ -0,0 +1,338 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME NEW ZEALAND MAP GRID + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the New Zealand Map Grid projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + + ALGORITHM REFERENCES + + 1. Department of Land and Survey Technical Circular 1973/32 + http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf + + 2. OSG Technical Report 4.1 + http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf + + + IMPLEMENTATION NOTES + + The two references use different symbols for the calculated values. This + implementation uses the variable names similar to the symbols in reference [1]. + + The alogrithm uses different units for delta latitude and delta longitude. + The delta latitude is assumed to be in units of seconds of arc x 10^-5. + The delta longitude is the usual radians. Look out for these conversions. + + The algorithm is described using complex arithmetic. There were three + options: + * find and use a Javascript library for complex arithmetic + * write my own complex library + * expand the complex arithmetic by hand to simple arithmetic + + This implementation has expanded the complex multiplication operations + into parallel simple arithmetic operations for the real and imaginary parts. + The imaginary part is way over to the right of the display; this probably + violates every coding standard in the world, but, to me, it makes it much + more obvious what is going on. + + The following complex operations are used: + - addition + - multiplication + - division + - complex number raised to integer power + - summation + + A summary of complex arithmetic operations: + (from http://en.wikipedia.org/wiki/Complex_arithmetic) + addition: (a + bi) + (c + di) = (a + c) + (b + d)i + subtraction: (a + bi) - (c + di) = (a - c) + (b - d)i + multiplication: (a + bi) x (c + di) = (ac - bd) + (bc + ad)i + division: (a + bi) / (c + di) = [(ac + bd)/(cc + dd)] + [(bc - ad)/(cc + dd)]i + + The algorithm needs to calculate summations of simple and complex numbers. This is + implemented using a for-loop, pre-loading the summed value to zero. + + The algorithm needs to calculate theta^2, theta^3, etc while doing a summation. + There are three possible implementations: + - use pow in the summation loop - except for complex numbers + - precalculate the values before running the loop + - calculate theta^n = theta^(n-1) * theta during the loop + This implementation uses the third option for both real and complex arithmetic. + + For example + psi_n = 1; + sum = 0; + for (n = 1; n <=6; n++) { + psi_n1 = psi_n * psi; // calculate psi^(n+1) + psi_n = psi_n1; + sum = sum + A[n] * psi_n; + } + + + TEST VECTORS + + NZMG E, N: 2487100.638 6751049.719 metres + NZGD49 long, lat: 172.739194 -34.444066 degrees + + NZMG E, N: 2486533.395 6077263.661 metres + NZGD49 long, lat: 172.723106 -40.512409 degrees + + NZMG E, N: 2216746.425 5388508.765 metres + NZGD49 long, lat: 169.172062 -46.651295 degrees + + Note that these test vectors convert from NZMG metres to lat/long referenced + to NZGD49, not the more usual WGS84. The difference is about 70m N/S and about + 10m E/W. + + These test vectors are provided in reference [1]. Many more test + vectors are available in + http://www.linz.govt.nz/docs/topography/topographicdata/placenamesdatabase/nznamesmar08.zip + which is a catalog of names on the 260-series maps. + + + EPSG CODES + + NZMG EPSG:27200 + NZGD49 EPSG:4272 + + http://spatialreference.org/ defines these as + Proj4php.defs["EPSG:4272"] = "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs "; + Proj4php.defs["EPSG:27200"] = "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs "; + + + LICENSE + Copyright: Stephen Irons 2008 + Released under terms of the LGPL as per: http://www.gnu.org/copyleft/lesser.html + + * ***************************************************************************** */ + +/** + Initialize New Zealand Map Grip projection + */ +class Proj4phpProjNzmg { + + /** + * iterations: Number of iterations to refine inverse transform. + * 0 -> km accuracy + * 1 -> m accuracy -- suitable for most mapping applications + * 2 -> mm accuracy + */ + protected $iterations = 1; + + /** + * + */ + public function init() { + $this->A = array( ); + $this->A[1] = +0.6399175073; + $this->A[2] = -0.1358797613; + $this->A[3] = +0.063294409; + $this->A[4] = -0.02526853; + $this->A[5] = +0.0117879; + $this->A[6] = -0.0055161; + $this->A[7] = +0.0026906; + $this->A[8] = -0.001333; + $this->A[9] = +0.00067; + $this->A[10] = -0.00034; + + $this->B_re = array( ); + $this->B_im = array( ); + $this->B_re[1] = +0.7557853228; + $this->B_im[1] = 0.0; + $this->B_re[2] = +0.249204646; + $this->B_im[2] = +0.003371507; + $this->B_re[3] = -0.001541739; + $this->B_im[3] = +0.041058560; + $this->B_re[4] = -0.10162907; + $this->B_im[4] = +0.01727609; + $this->B_re[5] = -0.26623489; + $this->B_im[5] = -0.36249218; + $this->B_re[6] = -0.6870983; + $this->B_im[6] = -1.1651967; + + $this->C_re = array( ); + $this->C_im = array( ); + $this->C_re[1] = +1.3231270439; + $this->C_im[1] = 0.0; + $this->C_re[2] = -0.577245789; + $this->C_im[2] = -0.007809598; + $this->C_re[3] = +0.508307513; + $this->C_im[3] = -0.112208952; + $this->C_re[4] = -0.15094762; + $this->C_im[4] = +0.18200602; + $this->C_re[5] = +1.01418179; + $this->C_im[5] = +1.64497696; + $this->C_re[6] = +1.9660549; + $this->C_im[6] = +2.5127645; + + $this->D = array( ); + $this->D[1] = +1.5627014243; + $this->D[2] = +0.5185406398; + $this->D[3] = -0.03333098; + $this->D[4] = -0.1052906; + $this->D[5] = -0.0368594; + $this->D[6] = +0.007317; + $this->D[7] = +0.01220; + $this->D[8] = +0.00394; + $this->D[9] = -0.0013; + } + + /** + New Zealand Map Grid Forward - long/lat to x/y + long/lat in radians + */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $delta_lat = $lat - $this->lat0; + $delta_lon = $lon - $this->long0; + + // 1. Calculate d_phi and d_psi ... // and d_lambda + // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. + $d_phi = $delta_lat / Proj4php::$common->SEC_TO_RAD * 1E-5; + $d_lambda = $delta_lon; + $d_phi_n = 1; // d_phi^0 + + $d_psi = 0; + for( $n = 1; $n <= 10; $n++ ) { + $d_phi_n = $d_phi_n * $d_phi; + $d_psi = $d_psi + $this->A[$n] * $d_phi_n; + } + + // 2. Calculate theta + $th_re = $d_psi; + $th_im = $d_lambda; + + // 3. Calculate z + $th_n_re = 1; + $th_n_im = 0; // theta^0 + #$th_n_re1; + #$th_n_im1; + + $z_re = 0; + $z_im = 0; + for( $n = 1; $n <= 6; $n++ ) { + $th_n_re1 = $th_n_re * $th_re - $th_n_im * $th_im; + $th_n_im1 = $th_n_im * $th_re + $th_n_re * $th_im; + $th_n_re = $th_n_re1; + $th_n_im = $th_n_im1; + $z_re = $z_re + $this->B_re[$n] * $th_n_re - $this->B_im[$n] * $th_n_im; + $z_im = $z_im + $this->B_im[$n] * $th_n_re + $this->B_re[$n] * $th_n_im; + } + + // 4. Calculate easting and northing + $p->x = ($z_im * $this->a) + $this->x0; + $p->y = ($z_re * $this->a) + $this->y0; + + return $p; + } + + /** + New Zealand Map Grid Inverse - x/y to long/lat + */ + public function inverse( $p ) { + + $x = $p->x; + $y = $p->y; + + $delta_x = $x - $this->x0; + $delta_y = $y - $this->y0; + + // 1. Calculate z + $z_re = $delta_y / $this->a; + $z_im = $delta_x / $this->a; + + // 2a. Calculate theta - first approximation gives km accuracy + $z_n_re = 1; + $z_n_im = 0; // z^0 + $z_n_re1; + $z_n_im1; + + $th_re = 0; + $th_im = 0; + for( $n = 1; $n <= 6; $n++ ) { + $z_n_re1 = $z_n_re * $z_re - $z_n_im * $z_im; + $z_n_im1 = $z_n_im * $z_re + $z_n_re * $z_im; + $z_n_re = $z_n_re1; + $z_n_im = $z_n_im1; + $th_re = $th_re + $this->C_re[$n] * $z_n_re - $this->C_im[$n] * $z_n_im; + $th_im = $th_im + $this->C_im[$n] * $z_n_re + $this->C_re[$n] * $z_n_im; + } + + // 2b. Iterate to refine the accuracy of the calculation + // 0 iterations gives km accuracy + // 1 iteration gives m accuracy -- good enough for most mapping applications + // 2 iterations bives mm accuracy + for( $i = 0; $i < $this->iterations; $i++ ) { + $th_n_re = $th_re; + $th_n_im = $th_im; + $th_n_re1; + $th_n_im1; + + $num_re = $z_re; + $num_im = $z_im; + for( $n = 2; $n <= 6; $n++ ) { + $th_n_re1 = $th_n_re * th_re - $th_n_im * $th_im; + $th_n_im1 = $th_n_im * $th_re + $th_n_re * $th_im; + $th_n_re = $th_n_re1; + $th_n_im = $th_n_im1; + $num_re = $num_re + ($n - 1) * ($this->B_re[$n] * $th_n_re - $this->B_im[$n] * $th_n_im); + $num_im = $num_im + (n - 1) * ($this->B_im[$n] * $th_n_re + $this->B_re[$n] * $th_n_im); + } + + $th_n_re = 1; + $th_n_im = 0; + $den_re = $this->B_re[1]; + $den_im = $this->B_im[1]; + for( $n = 2; $n <= 6; $n++ ) { + $th_n_re1 = $th_n_re * $th_re - $th_n_im * $th_im; + $th_n_im1 = $th_n_im * $th_re + $th_n_re * $th_im; + $th_n_re = $th_n_re1; + $th_n_im = $th_n_im1; + $den_re = $den_re + $n * ($this->B_re[$n] * $th_n_re - $this->B_im[$n] * $th_n_im); + $den_im = $den_im + $n * ($this->B_im[n] * $th_n_re + $this->B_re[$n] * $th_n_im); + } + + // Complex division + $den2 = $den_re * $den_re + $den_im * $den_im; + $th_re = ($num_re * $den_re + $num_im * $den_im) / $den2; + $th_im = ($num_im * $den_re - $num_re * $den_im) / $den2; + } + + // 3. Calculate d_phi ... // and d_lambda + $d_psi = $th_re; + $d_lambda = $th_im; + $d_psi_n = 1; // d_psi^0 + + $d_phi = 0; + for( $n = 1; $n <= 9; $n++ ) { + $d_psi_n = $d_psi_n * $d_psi; + $d_phi = $d_phi + $this->D[$n] * $d_psi_n; + } + + // 4. Calculate latitude and longitude + // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. + $lat = $this->lat0 + ($d_phi * Proj4php::$common->SEC_TO_RAD * 1E5); + $lon = $this->long0 + $d_lambda; + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['nzmg'] = new Proj4phpProjNzmg(); diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/omerc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/omerc.php new file mode 100644 index 0000000..a85e778 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/omerc.php @@ -0,0 +1,301 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/* * ***************************************************************************** + NAME OBLIQUE MERCATOR (HOTINE) + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Oblique Mercator projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + T. Mittan Mar, 1993 + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. + * ***************************************************************************** */ + +class Proj4phpProjOmerc { + /* Initialize the Oblique Mercator projection + ------------------------------------------ */ + + public function init() { + if( !$this->mode ) + $this->mode = 0; + if( !$this->lon1 ) { + $this->lon1 = 0; + $this->mode = 1; + } + if( !$this->lon2 ) + $this->lon2 = 0; + if( !$this->lat2 ) + $this->lat2 = 0; + + /* Place parameters in static storage for common use + ------------------------------------------------- */ + $temp = $this->b / $this->a; + $es = 1.0 - pow( $temp, 2 ); + $e = sqrt( $es ); + + $this->sin_p20 = sin( $this->lat0 ); + $this->cos_p20 = cos( $this->lat0 ); + + $this->con = 1.0 - $this->es * $this->sin_p20 * $this->sin_p20; + $this->com = sqrt( 1.0 - $es ); + $this->bl = sqrt( 1.0 + $this->es * pow( $this->cos_p20, 4.0 ) / (1.0 - $es) ); + $this->al = $this->a * $this->bl * $this->k0 * $this->com / $this->con; + if( abs( $this->lat0 ) < Proj4php::$common->EPSLN ) { + $this->ts = 1.0; + $this->d = 1.0; + $this->el = 1.0; + } else { + $this->ts = Proj4php::$common->tsfnz( $this->e, $this->lat0, $this->sin_p20 ); + $this->con = sqrt( $this->con ); + $this->d = $this->bl * $this->com / ($this->cos_p20 * $this->con); + if( ($this->d * $this->d - 1.0) > 0.0 ) { + if( $this->lat0 >= 0.0 ) { + $this->f = $this->d + sqrt( $this->d * $this->d - 1.0 ); + } else { + $this->f = $this->d - sqrt( $this->d * $this->d - 1.0 ); + } + } else { + $this->f = $this->d; + } + $this->el = $this->f * pow( $this->ts, $this->bl ); + } + + //$this->longc=52.60353916666667; + + if( $this->mode != 0 ) { + $this->g = .5 * ($this->f - 1.0 / $this->f); + $this->gama = Proj4php::$common->asinz( sin( $this->alpha ) / $this->d ); + $this->longc = $this->longc - Proj4php::$common->asinz( $this->g * tan( $this->gama ) ) / $this->bl; + + /* Report parameters common to format B + ------------------------------------- */ + //genrpt(azimuth * R2D,"Azimuth of Central Line: "); + //cenlon(lon_origin); + // cenlat(lat_origin); + + $this->con = abs( $this->lat0 ); + if( ($this->con > Proj4php::$common->EPSLN) && (abs( $this->con - Proj4php::$common->HALF_PI ) > Proj4php::$common->EPSLN) ) { + $this->singam = sin( $this->gama ); + $this->cosgam = cos( $this->gama ); + + $this->sinaz = sin( $this->alpha ); + $this->cosaz = cos( $this->alpha ); + + if( $this->lat0 >= 0 ) { + $this->u = ($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); + } else { + $this->u = -($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); + } + } else { + Proj4php::reportError( "omerc:Init:DataError" ); + } + } else { + $this->sinphi = sin( $this->at1 ); + $this->ts1 = Proj4php::$common->tsfnz( $this->e, $this->lat1, $this->sinphi ); + $this->sinphi = sin( $this->lat2 ); + $this->ts2 = Proj4php::$common->tsfnz( $this->e, $this->lat2, $this->sinphi ); + $this->h = pow( $this->ts1, $this->bl ); + $this->l = pow( $this->ts2, $this->bl ); + $this->f = $this->el / $this->h; + $this->g = .5 * ($this->f - 1.0 / $this->f); + $this->j = ($this->el * $this->el - $this->l * $this->h) / ($this->el * $this->el + $this->l * $this->h); + $this->p = ($this->l - $this->h) / ($this->l + $this->h); + $this->dlon = $this->lon1 - $this->lon2; + if( $this->dlon < -Proj4php::$common->PI ) + $this->lon2 = $this->lon2 - 2.0 * Proj4php::$common->PI; + if( $this->dlon > Proj4php::$common->PI ) + $this->lon2 = $this->lon2 + 2.0 * Proj4php::$common->PI; + $this->dlon = $this->lon1 - $this->lon2; + $this->longc = .5 * ($this->lon1 + $this->lon2) - atan( $this->j * tan( .5 * $this->bl * $this->dlon ) / $this->p ) / $this->bl; + $this->dlon = Proj4php::$common->adjust_lon( $this->lon1 - $this->longc ); + $this->gama = atan( sin( $this->bl * $this->dlon ) / $this->g ); + $this->alpha = Proj4php::$common->asinz( $this->d * sin( $this->gama ) ); + + /* Report parameters common to format A + ------------------------------------- */ + if( abs( $this->lat1 - $this->lat2 ) <= Proj4php::$common->EPSLN ) { + Proj4php::reportError( "omercInitDataError" ); + //return(202); + } else { + $this->con = abs( $this->lat1 ); + } + if( ($this->con <= Proj4php::$common->EPSLN) || (abs( $this->con - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN) ) { + Proj4php::reportError( "omercInitDataError" ); + //return(202); + } else { + if( abs( abs( $this->lat0 ) - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN ) { + Proj4php::reportError( "omercInitDataError" ); + //return(202); + } + } + + $this->singam = sin( $this->gam ); + $this->cosgam = cos( $this->gam ); + + $this->sinaz = sin( $this->alpha ); + $this->cosaz = cos( $this->alpha ); + + + if( $this->lat0 >= 0 ) { + $this->u = ($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); + } else { + $this->u = -($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); + } + } + } + + /* Oblique Mercator forward equations--mapping lat,long to x,y + ---------------------------------------------------------- */ + public function forward( $p ) { + + /* + $theta; // angle + $sin_phi; + $cos_phi; // sin and cos value + $b; // temporary values + $c; + $t; + $tq; // temporary values + $con; + $n; + $ml; // cone constant, small m + $q; + $us; + $vl; + $ul; + $vs; + $s; + $dlon; + $ts1; + */ + + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $sin_phi = sin( $lat ); + $dlon = Proj4php::$common->adjust_lon( $lon - $this->longc ); + $vl = sin( $this->bl * $dlon ); + if( abs( abs( $lat ) - Proj4php::$common->HALF_PI ) > Proj4php::$common->EPSLN ) { + $ts1 = Proj4php::$common->tsfnz( $this->e, $lat, $sin_phi ); + $q = $this->el / (pow( $ts1, $this->bl )); + $s = .5 * ($q - 1.0 / $q); + $t = .5 * ($q + 1.0 / $q); + $ul = ($s * $this->singam - $vl * $this->cosgam) / $t; + $con = cos( $this->bl * $dlon ); + if( abs( con ) < .0000001 ) { + $us = $this->al * $this->bl * $dlon; + } else { + $us = $this->al * atan( ($s * $this->cosgam + $vl * $this->singam) / $con ) / $this->bl; + if( $con < 0 ) + $us = $us + Proj4php::$common->PI * $this->al / $this->bl; + } + } else { + if( $lat >= 0 ) { + $ul = $this->singam; + } else { + $ul = -$this->singam; + } + $us = $this->al * $lat / $this->bl; + } + if( abs( abs( $ul ) - 1.0 ) <= Proj4php::$common->EPSLN ) { + //alert("Point projects into infinity","omer-for"); + Proj4php::reportError( "omercFwdInfinity" ); + //return(205); + } + $vs = .5 * $this->al * log( (1.0 - $ul) / (1.0 + $ul) ) / $this->bl; + $us = $us - $this->u; + $p->x = $this->x0 + $vs * $this->cosaz + $us * $this->sinaz; + $p->y = $this->y0 + $us * $this->cosaz - $vs * $this->sinaz; + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + /* + $delta_lon; /* Delta longitude (Given longitude - center + $theta; /* angle + $delta_theta; /* adjusted longitude + $sin_phi; + $cos_phi; /* sin and cos value + $b; /* temporary values + $c; + $t; + $tq; /* temporary values + $con; + $n; + $ml; /* cone constant, small m + $vs; + $us; + $q; + $s; + $ts1; + $vl; + $ul; + $bs; + $dlon; + $flag; + */ + + /* Inverse equations + ----------------- */ + $p->x -= $this->x0; + $p->y -= $this->y0; + #$flag = 0; + $vs = $p->x * $this->cosaz - $p->y * $this->sinaz; + $us = $p->y * $this->cosaz + $p->x * $this->sinaz; + $us = $us + $this->u; + $q = exp( -$this->bl * $vs / $this->al ); + $s = .5 * ($q - 1.0 / $q); + $t = .5 * ($q + 1.0 / $q); + $vl = sin( $this->bl * $us / $this->al ); + $ul = ($vl * $this->cosgam + $s * $this->singam) / $t; + if( abs( abs( $ul ) - 1.0 ) <= Proj4php::$common->EPSLN ) { + $lon = $this->longc; + if( ul >= 0.0 ) { + $lat = Proj4php::$common->HALF_PI; + } else { + $lat = -Proj4php::$common->HALF_PI; + } + } else { + $con = 1.0 / $this->bl; + $ts1 = pow( ($this->el / sqrt( (1.0 + $ul) / (1.0 - $ul) ) ), $con ); + $lat = Proj4php::$common->phi2z( $this->e, $ts1 ); + //if ($flag != 0) + //return($flag); + //~ con = cos($this->bl * us /al); + $theta = $this->longc - atan2( ($s * $this->cosgam - $vl * $this->singam ), $con ) / $this->bl; + $lon = Proj4php::$common->adjust_lon( $theta ); + } + $p->x = $lon; + $p->y = $lat; + return $p; + } + +} + +Proj4php::$proj['omerc'] = new Proj4phpProjOmerc(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/ortho.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/ortho.php new file mode 100644 index 0000000..a7aed8b --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/ortho.php @@ -0,0 +1,139 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/* * ***************************************************************************** + NAME ORTHOGRAPHIC + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Orthographic projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + T. Mittan Mar, 1993 + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. + * ***************************************************************************** */ + +class Proj4phpProjOrtho { + + /* Initialize the Orthographic projection + ------------------------------------- */ + public function init( $def ) { + //double temp; /* temporary variable */ + + /* Place parameters in static storage for common use + ------------------------------------------------- */; + $this->sin_p14 = sin( $this->lat0 ); + $this->cos_p14 = cos( $this->lat0 ); + } + + /* Orthographic forward equations--mapping lat,long to x,y + --------------------------------------------------- */ + public function forward( $p ) { + + /* + $sinphi; + $cosphi; // sin and cos value + $dlon; // delta longitude value + $coslon; // cos of longitude + $ksp; // scale factor + $g; + */ + + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + + $sinphi = sin( $lat ); + $cosphi = cos( $lat ); + + $coslon = cos( $dlon ); + $g = $this->sin_p14 * sinphi + $this->cos_p14 * $cosphi * $coslon; + $ksp = 1.0; + + if( ($g > 0) || (abs( $g ) <= Proj4php::$common->EPSLN) ) { + $x = $this->a * $ksp * $cosphi * sin( $dlon ); + $y = $this->y0 + $this->a * $ksp * ($this->cos_p14 * $sinphi - $this->sin_p14 * $cosphi * $coslon); + } else { + Proj4php::reportError( "orthoFwdPointError" ); + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + + /* + $rh; // height above ellipsoid + $z; // angle + $sinz; + $cosz; // sin of z and cos of z + $temp; + $con; + $lon; + $lat; + */ + + /* Inverse equations + ----------------- */ + $p->x -= $this->x0; + $p->y -= $this->y0; + $rh = sqrt( $p->x * $p->x + $p->y * $p->y ); + if( $rh > $this->a + .0000001 ) { + Proj4php::reportError( "orthoInvDataError" ); + } + $z = Proj4php::$common->asinz( $rh / $this->a ); + + $sinz = sin( $z ); + $cosz = cos( $z ); + + $lon = $this->long0; + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { + $lat = $this->lat0; + } + $lat = Proj4php::$common->asinz( $cosz * $this->sin_p14 + ($p->y * $sinz * $this->cos_p14) / $rh ); + $con = abs( $this->lat0 ) - Proj4php::$common->HALF_PI; + if( abs( con ) <= Proj4php::$common->EPSLN ) { + if( $this->lat0 >= 0 ) { + $lon = Proj4php::$common->adjust_lon( $this->long0 + atan2( $p->x, -$p->y ) ); + } else { + $lon = Proj4php::$common->adjust_lon( $this->long0 - atan2( -$p->x, $p->y ) ); + } + } + $con = $cosz - $this->sin_p14 * sin( $lat ); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['ortho'] = new Proj4phpProjOrtho(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/poly.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/poly.php new file mode 100644 index 0000000..290f94e --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/poly.php @@ -0,0 +1,192 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ + + +/* Function to compute, phi4, the latitude for the inverse of the + Polyconic projection. + ------------------------------------------------------------ */ +function phi4z( $eccent, $e0, $e1, $e2, $e3, $a, $b, &$c, $phi ) { + /* + $sinphi; + $sin2ph; + $tanph; + $ml; + $mlp; + $con1; + $con2; + $con3; + $dphi; + $i; + */ + + $phi = $a; + for( $i = 1; $i <= 15; $i++ ) { + $sinphi = sin( $phi ); + $tanphi = tan( $phi ); + $c = $tanphi * sqrt( 1.0 - $eccent * $sinphi * $sinphi ); + $sin2ph = sin( 2.0 * $phi ); + /* + ml = e0 * *phi - e1 * sin2ph + e2 * sin (4.0 * *phi); + mlp = e0 - 2.0 * e1 * cos (2.0 * *phi) + 4.0 * e2 * cos (4.0 * *phi); + */ + $ml = $e0 * $phi - $e1 * $sin2ph + $e2 * sin( 4.0 * $phi ) - $e3 * sin( 6.0 * $phi ); + $mlp = $e0 - 2.0 * $e1 * cos( 2.0 * $phi ) + 4.0 * $e2 * cos( 4.0 * $phi ) - 6.0 * $e3 * cos( 6.0 * $phi ); + $con1 = 2.0 * $ml + $c * ($ml * $ml + $b) - 2.0 * $a * ($c * $ml + 1.0); + $con2 = $eccent * $sin2ph * ($ml * $ml + $b - 2.0 * $a * $ml) / (2.0 * $c); + $con3 = 2.0 * ($a - $ml) * ($c * $mlp - 2.0 / $sin2ph) - 2.0 * $mlp; + $dphi = $con1 / ($con2 + $con3); + $phi += $dphi; + if( abs( $dphi ) <= .0000000001 ) + return($phi); + } + + Proj4php::reportError( "phi4z: No convergence" ); + + return null; +} + +/* Function to compute the constant e4 from the input of the eccentricity + of the spheroid, x. This constant is used in the Polar Stereographic + projection. + -------------------------------------------------------------------- */ +function e4fn( $x ) { + #$con; + #$com; + $con = 1.0 + $x; + $com = 1.0 - $x; + return (sqrt( (pow( $con, $con )) * (pow( $com, $com )) )); +} + +/* * ***************************************************************************** + NAME POLYCONIC + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Polyconic projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + T. Mittan Mar, 1993 + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. + * ***************************************************************************** */ + +class Proj4phpProjPoly { + + /* Initialize the POLYCONIC projection + ---------------------------------- */ + public function init() { + #$temp; /* temporary variable */ + if( $this->lat0 == 0 ) + $this->lat0 = 90; //$this->lat0 ca + + /* Place parameters in static storage for common use + ------------------------------------------------- */ + $this->temp = $this->b / $this->a; + $this->es = 1.0 - pow( $this->temp, 2 ); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles + $this->e = sqrt( $this->es ); + $this->e0 = Proj4php::$common->e0fn( $this->es ); + $this->e1 = Proj4php::$common->e1fn( $this->es ); + $this->e2 = Proj4php::$common->e2fn( $this->es ); + $this->e3 = Proj4php::$common->e3fn( $this->es ); + $this->ml0 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); //si que des zeros le calcul ne se fait pas + //if (!$this->ml0) {$this->ml0=0;} + } + + /* Polyconic forward equations--mapping lat,long to x,y + --------------------------------------------------- */ + public function forward( $p ) { + + /* + $sinphi; + $cosphi; // sin and cos value + $al; // temporary values + $c; // temporary values + $con; + $ml; // cone constant, small m + $ms; // small m + $x; + $y; + */ + + $lon = $p->x; + $lat = $p->y; + + $con = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + + if( abs( $lat ) <= .0000001 ) { + $x = $this->x0 + $this->a * $con; + $y = $this->y0 - $this->a * $this->ml0; + } else { + $sinphi = sin( $lat ); + $cosphi = cos( $lat ); + + $ml = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); + $ms = Proj4php::$common->msfnz( $this->e, $sinphi, $cosphi ); + + $x = $this->x0 + $this->a * $ms * sin( $sinphi ) / $sinphi; + $y = $this->y0 + $this->a * ($ml - $this->ml0 + $ms * (1.0 - cos( $sinphi )) / $sinphi); + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /* Inverse equations + ----------------- */ + public function inverse( $p ) { + + /* + $sin_phi; + $cos_phi; // sin and cos values + $al; // temporary values + $b; // temporary values + $c; // temporary values + $con; + $ml; // cone constant, small m + $iflg; // error flag + $lon; + $lat; + */ + + $p->x -= $this->x0; + $p->y -= $this->y0; + $al = $this->ml0 + $p->y / $this->a; + $iflg = 0; + + if( abs( $al ) <= .0000001 ) { + $lon = $p->x / $this->a + $this->long0; + $lat = 0.0; + } else { + $b = $al * $al + ($p->x / $this->a) * ($p->x / $this->a); + $iflg = phi4z( $this->es, $this->e0, $this->e1, $this->e2, $this->e3, $this->al, $b, $c, $lat ); + if( $iflg != 1 ) + return($iflg); + $lon = Proj4php::$common->adjust_lon( (Proj4php::$common->asinz( $p->x * $c / $this->a ) / sin( $lat )) + $this->long0 ); + } + + $p->x = $lon; + $p->y = $lat; + return $p; + } + +} + +Proj4php::$proj['poly'] = new Proj4phpProjPoly(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sinu.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sinu.php new file mode 100644 index 0000000..4ff453a --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sinu.php @@ -0,0 +1,139 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME SINUSOIDAL + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Sinusoidal projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + PROGRAMMER DATE + ---------- ---- + D. Steinwand, EROS May, 1991 + + This function was adapted from the Sinusoidal projection code (FORTRAN) in the + General Cartographic Transformation Package software which is available from + the U.S. Geological Survey National Mapping Division. + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. "Software Documentation for GCTP General Cartographic Transformation + Package", U.S. Geological Survey National Mapping Division, May 1982. + * ***************************************************************************** */ + +class Proj4phpProjSinu { + + /* Initialize the Sinusoidal projection + ------------------------------------ */ + public function init() { + /* Place parameters in static storage for common use + ------------------------------------------------- */ + #$this->R = 6370997.0; //Radius of earth + + if( !$this->sphere ) { + $this->en = Proj4php::$common->pj_enfn( $this->es ); + } else { + $this->n = 1.; + $this->m = 0.; + $this->es = 0; + $this->C_y = sqrt( ($this->m + 1.) / $this->n ); + $this->C_x = $this->C_y / ($this->m + 1.); + } + } + + /* Sinusoidal forward equations--mapping lat,long to x,y + ----------------------------------------------------- */ + public function forward( $p ) { + + #$x,y,delta_lon; + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + + if( isset($this->sphere) ) { + if( !$this->m ) { + $lat = $this->n != 1. ? asin( $this->n * sin( $lat ) ) : $lat; + } else { + $k = $this->n * sin( $lat ); + for( $i = Proj4php::$common->MAX_ITER; $i; --$i ) { + $V = ($this->m * $lat + sin( $lat ) - $k) / ($this->m + cos( $lat )); + $lat -= $V; + if( abs( $V ) < Proj4php::$common->EPSLN ) + break; + } + } + $x = $this->a * $this->C_x * $lon * ($this->m + cos( $lat )); + $y = $this->a * $this->C_y * $lat; + } else { + + $s = sin( $lat ); + $c = cos( $lat ); + $y = $this->a * Proj4php::$common->pj_mlfn( $lat, $s, $c, $this->en ); + $x = $this->a * $lon * $c / sqrt( 1. - $this->es * $s * $s ); + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + #$lat; + #$temp; + #$lon; + + /* Inverse equations + ----------------- */ + $p->x -= $this->x0; + $p->y -= $this->y0; + $lat = $p->y / $this->a; + + if( isset($this->sphere) ) { + + $p->y /= $this->C_y; + $lat = $this->m ? asin( ($this->m * $p->y + sin( $p->y )) / $this->n ) : ( $this->n != 1. ? asin( sin( $p->y ) / $this->n ) : $p->y ); + $lon = $p->x / ($this->C_x * ($this->m + cos( $p->y ))); + } + else { + $lat = Proj4php::$common->pj_inv_mlfn( $p->y / $this->a, $this->es, $this->en ); + $s = abs( $lat ); + + if( $s < Proj4php::$common->HALF_PI ) { + $s = sin( $lat ); + $temp = $this->long0 + $p->x * sqrt( 1. - $this->es * $s * $s ) / ($this->a * cos( $lat )); + //temp = $this->long0 + $p->x / ($this->a * cos($lat)); + $lon = Proj4php::$common->adjust_lon( $temp ); + } else if( ($s - Proj4php::$common->EPSLN) < Proj4php::$common->HALF_PI ) { + $lon = $this->long0; + } + } + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['sinu'] = new Proj4phpProjSinu(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/somerc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/somerc.php new file mode 100644 index 0000000..7b35687 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/somerc.php @@ -0,0 +1,135 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME SWISS OBLIQUE MERCATOR + + PURPOSE: Swiss projection. + WARNING: X and Y are inverted (weird) in the swiss coordinate system. Not + here, since we want X to be horizontal and Y vertical. + + ALGORITHM REFERENCES + 1. "Formules et constantes pour le Calcul pour la + projection cylindrique conforme à axe oblique et pour la transformation entre + des systèmes de référence". + http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf + +*******************************************************************************/ + +class Proj4phpProjSomerc { + + /** + * + */ + public function init() { + $phy0 = $this->lat0; + $this->lambda0 = $this->long0; + $sinPhy0 = sin( $phy0 ); + $semiMajorAxis = $this->a; + $invF = $this->rf; + $flattening = 1 / $invF; + $e2 = 2 * $flattening - pow( $flattening, 2 ); + $e = $this->e = sqrt( $e2 ); + $this->R = $this->k0 * $semiMajorAxis * sqrt( 1 - $e2 ) / (1 - $e2 * pow( $sinPhy0, 2.0 )); + $this->alpha = sqrt( 1 + $e2 / (1 - $e2) * pow( cos( $phy0 ), 4.0 ) ); + $this->b0 = asin( $sinPhy0 / $this->alpha ); + $this->K = log( tan( Proj4php::$common->PI / 4.0 + $this->b0 / 2.0 ) ) + - $this->alpha + * log( tan( Proj4php::$common->PI / 4.0 + $phy0 / 2.0 ) ) + + $this->alpha + * $e / 2 + * log( (1 + $e * $sinPhy0) + / (1 - $e * $sinPhy0) ); + } + + /** + * + * @param type $p + * @return type + */ + public function forward( $p ) { + $Sa1 = log( tan( Proj4php::$common->PI / 4.0 - $p->y / 2.0 ) ); + $Sa2 = $this->e / 2.0 + * log( (1 + $this->e * sin( $p->y )) + / (1 - $this->e * sin( $p->y )) ); + $S = -$this->alpha * ($Sa1 + $Sa2) + $this->K; + + // spheric latitude + $b = 2.0 * (atan( exp( $S ) ) - proj4phpCommon::PI / 4.0); + + // spheric longitude + $I = $this->alpha * ($p->x - $this->lambda0); + + // psoeudo equatorial rotation + $rotI = atan( sin( $I ) + / (sin( $this->b0 ) * tan( $b ) + + cos( $this->b0 ) * cos( $I )) ); + + $rotB = asin( cos( $this->b0 ) * sin( $b ) - + sin( $this->b0 ) * cos( $b ) * cos( $I ) ); + + $p->y = $this->R / 2.0 + * log( (1 + sin( $rotB )) / (1 - sin( $rotB )) ) + + $this->y0; + + $p->x = $this->R * $rotI + $this->x0; + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + + $Y = $p->x - $this->x0; + $X = $p->y - $this->y0; + + $rotI = $Y / $this->R; + $rotB = 2 * (atan( exp( $X / $this->R ) ) - Proj4php::$common->PI / 4.0); + + $b = asin( cos( $this->b0 ) * sin( $rotB ) + + sin( $this->b0 ) * cos( $rotB ) * cos( $rotI ) ); + $I = atan( sin( $rotI ) + / (cos( $this->b0 ) * cos( $rotI ) - sin( $this->b0 ) + * tan( $rotB )) ); + + $lambda = $this->lambda0 + $I / $this->alpha; + + $S = 0.0; + $phy = $b; + $prevPhy = -1000.0; + $iteration = 0; + while( abs( $phy - $prevPhy ) > 0.0000001 ) { + if( ++$iteration > 20 ) { + Proj4php::reportError( "omercFwdInfinity" ); + return; + } + //S = log(tan(PI / 4.0 + phy / 2.0)); + $S = 1.0 + / $this->alpha + * (log( tan( Proj4php::$common->PI / 4.0 + $b / 2.0 ) ) - $this->K) + + $this->e + * log( tan( Proj4php::$common->PI / 4.0 + + asin( $this->e * sin( $phy ) ) + / 2.0 ) ); + $prevPhy = $phy; + $phy = 2.0 * atan( exp( $S ) ) - Proj4php::$common->PI / 2.0; + } + + $p->x = $lambda; + $p->y = $phy; + + return $p; + } + +} + +Proj4php::$proj['somerc'] = new Proj4phpProjSomerc(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/stere.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/stere.php new file mode 100644 index 0000000..a449ff7 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/stere.php @@ -0,0 +1,303 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ + +// Initialize the Stereographic projection +class Proj4phpProjStere { + + protected $TOL = 1.e-8; + protected $NITER = 8; + protected $CONV = 1.e-10; + protected $S_POLE = 0; + protected $N_POLE = 1; + protected $OBLIQ = 2; + protected $EQUIT = 3; + + /** + * + * @param type $phit + * @param type $sinphi + * @param type $eccen + * @return type + */ + public function ssfn_( $phit, $sinphi, $eccen ) { + $sinphi *= $eccen; + return (tan( .5 * (Proj4php::$common->HALF_PI + $phit) ) * pow( (1. - $sinphi) / (1. + $sinphi), .5 * $eccen )); + } + + /** + * + */ + public function init() { + $this->phits = $this->lat_ts ? $this->lat_ts : Proj4php::$common->HALF_PI; + $t = abs( $this->lat0 ); + if( (abs( $t ) - Proj4php::$common->HALF_PI) < Proj4php::$common->EPSLN ) { + $this->mode = $this->lat0 < 0. ? $this->S_POLE : $this->N_POLE; + } else { + $this->mode = $t > Proj4php::$common->EPSLN ? $this->OBLIQ : $this->EQUIT; + } + $this->phits = abs( $this->phits ); + if( $this->es ) { + #$X; + + switch( $this->mode ) { + case $this->N_POLE: + case $this->S_POLE: + if( abs( $this->phits - Proj4php::$common->HALF_PI ) < Proj4php::$common->EPSLN ) { + $this->akm1 = 2. * $this->k0 / sqrt( pow( 1 + $this->e, 1 + $this->e ) * pow( 1 - $this->e, 1 - $this->e ) ); + } else { + $t = sin( $this->phits ); + $this->akm1 = cos( $this->phits ) / Proj4php::$common->tsfnz( $this->e, $this->phits, $t ); + $t *= $this->e; + $this->akm1 /= sqrt( 1. - $t * $t ); + } + break; + case $this->EQUIT: + $this->akm1 = 2. * $this->k0; + break; + case $this->OBLIQ: + $t = sin( $this->lat0 ); + $X = 2. * atan( $this->ssfn_( $this->lat0, $t, $this->e ) ) - Proj4php::$common->HALF_PI; + $t *= $this->e; + $this->akm1 = 2. * $this->k0 * cos( $this->lat0 ) / sqrt( 1. - $t * $t ); + $this->sinX1 = sin( $X ); + $this->cosX1 = cos( $X ); + break; + } + } else { + switch( $this->mode ) { + case $this->OBLIQ: + $this->sinph0 = sin( $this->lat0 ); + $this->cosph0 = cos( $this->lat0 ); + case $this->EQUIT: + $this->akm1 = 2. * $this->k0; + break; + case $this->S_POLE: + case $this->N_POLE: + $this->akm1 = abs( $this->phits - Proj4php::$common->HALF_PI ) >= Proj4php::$common->EPSLN ? + cos( $this->phits ) / tan( Proj4php::$common->FORTPI - .5 * $this->phits ) : + 2. * $this->k0; + break; + } + } + } + + /** + * Stereographic forward equations--mapping lat,long to x,y + * + * @param type $p + * @return type + */ + public function forward( $p ) { + + $lon = $p->x; + $lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $lat = $p->y; + #$x; + #$y; + + if( $this->sphere ) { + /* + $sinphi; + $cosphi; + $coslam; + $sinlam; + */ + + $sinphi = sin( $lat ); + $cosphi = cos( $lat ); + $coslam = cos( $lon ); + $sinlam = sin( $lon ); + switch( $this->mode ) { + case $this->EQUIT: + $y = 1. + $cosphi * $coslam; + if( y <= Proj4php::$common->EPSLN ) { + Proj4php::reportError("stere:forward:Equit"); + } + $y = $this->akm1 / $y; + $x = $y * $cosphi * $sinlam; + $y *= $sinphi; + break; + case $this->OBLIQ: + $y = 1. + $this->sinph0 * $sinphi + $this->cosph0 * $cosphi * $coslam; + if( $y <= Proj4php::$common->EPSLN ) { + Proj4php::reportError("stere:forward:Obliq"); + } + $y = $this->akm1 / $y; + $x = $y * $cosphi * $sinlam; + $y *= $this->cosph0 * $sinphi - $this->sinph0 * $cosphi * $coslam; + break; + case $this->N_POLE: + $coslam = -$coslam; + $lat = -$lat; + //Note no break here so it conitnues through S_POLE + case $this->S_POLE: + if( abs( $lat - Proj4php::$common->HALF_PI ) < $this->TOL ) { + Proj4php::reportError("stere:forward:S_POLE"); + } + $y = $this->akm1 * tan( Proj4php::$common->FORTPI + .5 * $lat ); + $x = $sinlam * $y; + $y *= $coslam; + break; + } + } else { + $coslam = cos( $lon ); + $sinlam = sin( $lon ); + $sinphi = sin( $lat ); + if( $this->mode == $this->OBLIQ || $this->mode == $this->EQUIT ) { + $Xt = 2. * atan( $this->ssfn_( $lat, $sinphi, $this->e ) ); + $sinX = sin( $Xt - Proj4php::$common->HALF_PI ); + $cosX = cos( $Xt ); + } + switch( $this->mode ) { + case $this->OBLIQ: + $A = $this->akm1 / ($this->cosX1 * (1. + $this->sinX1 * $sinX + $this->cosX1 * $cosX * $coslam)); + $y = $A * ($this->cosX1 * $sinX - $this->sinX1 * $cosX * $coslam); + $x = $A * $cosX; + break; + case $this->EQUIT: + $A = 2. * $this->akm1 / (1. + $cosX * $coslam); + $y = $A * $sinX; + $x = $A * $cosX; + break; + case $this->S_POLE: + $lat = -$lat; + $coslam = - $coslam; + $sinphi = -$sinphi; + case $this->N_POLE: + $x = $this->akm1 * Proj4php::$common->tsfnz( $this->e, $lat, $sinphi ); + $y = - $x * $coslam; + break; + } + $x = $x * $sinlam; + } + + $p->x = $x * $this->a + $this->x0; + $p->y = $y * $this->a + $this->y0; + + return $p; + } + + + /** + * Stereographic inverse equations--mapping x,y to lat/long + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + $x = ($p->x - $this->x0) / $this->a; /* descale and de-offset */ + $y = ($p->y - $this->y0) / $this->a; + /* + $lon; + $lat; + $cosphi; + $sinphi; + $rho; + $tp = 0.0; + $phi_l = 0.0; + $i; + */ + $halfe = 0.0; + $pi2 = 0.0; + + if( $this->sphere ) { + /* + $c; + $rh; + $sinc; + $cosc; + */ + + $rh = sqrt( $x * $x + $y * $y ); + $c = 2. * atan( $rh / $this->akm1 ); + $sinc = sin( $c ); + $cosc = cos( $c ); + $lon = 0.; + + switch( $this->mode ) { + case $this->EQUIT: + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { + $lat = 0.; + } else { + $lat = asin( $y * $sinc / $rh ); + } + if( $cosc != 0. || $x != 0. ) + $lon = atan2( $x * $sinc, $cosc * $rh ); + break; + case $this->OBLIQ: + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { + $lat = $this->phi0; + } else { + $lat = asin( $cosc * $this->sinph0 + $y * $sinc * $this->cosph0 / $rh ); + } + $c = $cosc - $this->sinph0 * sin( $lat ); + if( $c != 0. || $x != 0. ) { + $lon = atan2( $x * $sinc * $this->cosph0, $c * $rh ); + } + break; + case $this->N_POLE: + $y = -$y; + case $this->S_POLE: + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { + $lat = $this->phi0; + } else { + $lat = asin( $this->mode == $this->S_POLE ? -$cosc : $cosc ); + } + $lon = ($x == 0. && $y == 0.) ? 0. : atan2( $x, $y ); + break; + } + $p->x = Proj4php::$common->adjust_lon( $lon + $this->long0 ); + $p->y = $lat; + } else { + $rho = sqrt( $x * $x + $y * $y ); + switch( $this->mode ) { + case $this->OBLIQ: + case $this->EQUIT: + $tp = 2. * atan2( $rho * $this->cosX1, $this->akm1 ); + $cosphi = cos( $tp ); + $sinphi = sin( $tp ); + if( $rho == 0.0 ) { + $phi_l = asin( $cosphi * $this->sinX1 ); + } else { + $phi_l = asin( $cosphi * $this->sinX1 + ($y * $sinphi * $this->cosX1 / $rho) ); + } + + $tp = tan( .5 * (Proj4php::$common->HALF_PI + $phi_l) ); + $x *= $sinphi; + $y = $rho * $this->cosX1 * $cosphi - $y * $this->sinX1 * $sinphi; + $pi2 = Proj4php::$common->HALF_PI; + $halfe = .5 * $this->e; + break; + case $this->N_POLE: + $y = -$y; + case $this->S_POLE: + $tp = - $rho / $this->akm1; + $phi_l = Proj4php::$common->HALF_PI - 2. * atan( $tp ); + $pi2 = -Proj4php::$common->HALF_PI; + $halfe = -.5 * $this->e; + break; + } + for( $i = $this->NITER; $i--; $phi_l = $lat ) { //check this + $sinphi = $this->e * sin( $phi_l ); + $lat = 2. * atan( $tp * pow( (1. + $sinphi) / (1. - $sinphi), $halfe ) ) - $pi2; + if( abs( phi_l - lat ) < $this->CONV ) { + if( $this->mode == $this->S_POLE ) + $lat = -$lat; + $lon = ($x == 0. && $y == 0.) ? 0. : atan2( $x, $y ); + $p->x = Proj4php::$common->adjust_lon( $lon + $this->long0 ); + $p->y = $lat; + return $p; + } + } + } + } + +} + +Proj4php::$proj['stere'] = new Proj4phpProjStere(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sterea.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sterea.php new file mode 100644 index 0000000..0b55f6b --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sterea.php @@ -0,0 +1,91 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +class Proj4phpProjSterea { + + public $dependsOn = 'gauss'; + + /** + * + * @return void + */ + public function init() { + + if( !$this->rc ) { + Proj4php::reportError( "sterea:init:E_ERROR_0" ); + return; + } + + $this->sinc0 = sin( $this->phic0 ); + $this->cosc0 = cos( $this->phic0 ); + $this->R2 = 2.0 * $this->rc; + + if( !$this->title ) + $this->title = "Oblique Stereographic Alternative"; + } + + /** + * + * @param type $p + * @return type + */ + public function forward( $p ) { + + $p->x = Proj4php::$common->adjust_lon( $p->x - $this->long0 ); /* adjust del longitude */ + $p = Proj4php::$proj['gauss']->forward( $p ); + $sinc = sin( $p->y ); + $cosc = cos( $p->y ); + $cosl = cos( $p->x ); + $k = $this->k0 * $this->R2 / (1.0 + $this->sinc0 * $sinc + $this->cosc0 * $cosc * $cosl); + + $p->x = $k * $cosc * sin( $p->x ); + $p->y = $k * ($this->cosc0 * sinc - $this->sinc0 * $cosc * $cosl); + + $p->x = $this->a * $p->x + $this->x0; + $p->y = $this->a * $p->y + $this->y0; + + return $p; + } + + /** + * + * @param type $p + * @return type + */ + public function inverse( $p ) { + + #$lon; + #$lat; + $p->x = ($p->x - $this->x0) / $this->a; /* descale and de-offset */ + $p->y = ($p->y - $this->y0) / $this->a; + + $p->x /= $this->k0; + $p->y /= $this->k0; + + if( ($rho = sqrt( $p->x * $p->x + $p->y * $p->y ) ) ) { + $c = 2.0 * atan2( $rho, $this->R2 ); + $sinc = sin( $c ); + $cosc = cos( $c ); + $lat = asin( $cosc * $this->sinc0 + $p->y * $sinc * $this->cosc0 / $rho ); + $lon = atan2( $p->x * $sinc, $rho * $this->cosc0 * $cosc - $p->y * $this->sinc0 * $sinc ); + } else { + $lat = $this->phic0; + $lon = 0.; + } + + $p->x = $lon; + $p->y = $lat; + $p = Proj4php::$proj['gauss']->inverse( $p ); + $p->x = Proj4php::$common->adjust_lon( $p->x + $this->long0 ); /* adjust longitude to CM */ + + return $p; + } + +} + +Proj4php::$proj['sterea'] = new Proj4phpProjSterea(); diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/tmerc.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/tmerc.php new file mode 100644 index 0000000..0c2450e --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/tmerc.php @@ -0,0 +1,166 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME TRANSVERSE MERCATOR + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Transverse Mercator projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. +*******************************************************************************/ + +/** + Initialize Transverse Mercator projection + */ +class Proj4phpProjTmerc { + + private $e0, $e1, $e2, $e3, $ml0; + + /** + * + */ + public function init() { + + $this->e0 = Proj4php::$common->e0fn( $this->es ); + $this->e1 = Proj4php::$common->e1fn( $this->es ); + $this->e2 = Proj4php::$common->e2fn( $this->es ); + $this->e3 = Proj4php::$common->e3fn( $this->es ); + $this->ml0 = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); + } + + /** + Transverse Mercator Forward - long/lat to x/y + long/lat in radians + */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); // Delta longitude + #$con = 0; // cone constant + #$x = 0; + #$y = 0; + $sin_phi = sin( $lat ); + $cos_phi = cos( $lat ); + + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ + $b = $cos_phi * sin( $delta_lon ); + if( (abs( abs( $b ) - 1.0 )) < .0000000001 ) { + Proj4php::reportError( "tmerc:forward: Point projects into infinity" ); + return(93); + } else { + $x = .5 * $this->a * $this->k0 * log( (1.0 + $b) / (1.0 - $b) ); + $con = acos( $cos_phi * cos( $delta_lon ) / sqrt( 1.0 - $b * $b ) ); + if( $lat < 0 ) + $con = - $con; + $y = $this->a * $this->k0 * ($con - $this->lat0); + } + } else { + $al = $cos_phi * $delta_lon; + $als = pow( $al, 2 ); + $c = $this->ep2 * pow( $cos_phi, 2 ); + $tq = tan( $lat ); + $t = pow( $tq, 2 ); + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); + $n = $this->a / sqrt( $con ); + + $ml = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); + + $x = $this->k0 * $n * $al * (1.0 + $als / 6.0 * (1.0 - $t + $c + $als / 20.0 * (5.0 - 18.0 * $t + pow( $t, 2 ) + 72.0 * $c - 58.0 * $this->ep2))) + $this->x0; + $y = $this->k0 * ($ml - $this->ml0 + $n * $tq * ($als * (0.5 + $als / 24.0 * (5.0 - $t + 9.0 * $c + 4.0 * pow( $c, 2 ) + $als / 30.0 * (61.0 - 58.0 * $t + pow( $t, 2 ) + 600.0 * $c - 330.0 * $this->ep2))))) + $this->y0; + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + Transverse Mercator Inverse - x/y to long/lat + */ + public function inverse( $p ) { + + #$phi; /* temporary angles */ + #$delta_phi; /* difference between longitudes */ + $max_iter = 6; /* maximun number of iterations */ + + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ + $f = exp( $p->x / ($this->a * $this->k0) ); + $g = .5 * ($f - 1 / $f); + $temp = $this->lat0 + $p->y / ($this->a * $this->k0); + $h = cos( $temp ); + $con = sqrt( (1.0 - $h * $h) / (1.0 + $g * $g) ); + $lat = Proj4php::$common->asinz( $con ); + if( $temp < 0 ) + $lat = -$lat; + if( ($g == 0) && ($h == 0) ) { + $lon = $this->long0; + } else { + $lon = Proj4php::$common->adjust_lon( atan2( $g, $h ) + $this->long0 ); + } + } else { // ellipsoidal form + $x = $p->x - $this->x0; + $y = $p->y - $this->y0; + + $con = ($this->ml0 + $y / $this->k0) / $this->a; + $phi = $con; + + for( $i = 0; true; $i++ ) { + $delta_phi = (($con + $this->e1 * sin( 2.0 * $phi ) - $this->e2 * sin( 4.0 * $phi ) + $this->e3 * sin( 6.0 * $phi )) / $this->e0) - $phi; + $phi += $delta_phi; + if( abs( $delta_phi ) <= Proj4php::$common->EPSLN ) + break; + if( $i >= $max_iter ) { + Proj4php::reportError( "tmerc:inverse: Latitude failed to converge" ); + return(95); + } + } // for() + if( abs( $phi ) < Proj4php::$common->HALF_PI ) { + // sincos(phi, &sin_phi, &cos_phi); + $sin_phi = sin( $phi ); + $cos_phi = cos( $phi ); + $tan_phi = tan( $phi ); + $c = $this->ep2 * pow( $cos_phi, 2 ); + $cs = pow( $c, 2 ); + $t = pow( $tan_phi, 2 ); + $ts = pow( $t, 2 ); + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); + $n = $this->a / sqrt( $con ); + $r = $n * (1.0 - $this->es) / $con; + $d = $x / ($n * $this->k0); + $ds = pow( $d, 2 ); + $lat = $phi - ($n * $tan_phi * $ds / $r) * (0.5 - $ds / 24.0 * (5.0 + 3.0 * $t + 10.0 * $c - 4.0 * $cs - 9.0 * $this->ep2 - $ds / 30.0 * (61.0 + 90.0 * $t + 298.0 * $c + 45.0 * $ts - 252.0 * $this->ep2 - 3.0 * $cs))); + $lon = Proj4php::$common->adjust_lon( $this->long0 + ($d * (1.0 - $ds / 6.0 * (1.0 + 2.0 * $t + $c - $ds / 20.0 * (5.0 - 2.0 * $c + 28.0 * $t - 3.0 * $cs + 8.0 * $this->ep2 + 24.0 * $ts))) / $cos_phi) ); + } else { + $lat = Proj4php::$common->HALF_PI * Proj4php::$common->sign( $y ); + $lon = $this->long0; + } + } + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['tmerc'] = new Proj4phpProjTmerc(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/utm.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/utm.php new file mode 100644 index 0000000..f56a5e8 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/utm.php @@ -0,0 +1,182 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME TRANSVERSE MERCATOR + + PURPOSE: Transforms input longitude and latitude to Easting and + Northing for the Transverse Mercator projection. The + longitude and latitude must be in radians. The Easting + and Northing values will be returned in meters. + + ALGORITHM REFERENCES + + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", + U.S. Geological Survey Professional Paper 1453 , United State Government + Printing Office, Washington D.C., 1989. +*******************************************************************************/ + +/** + Initialize Transverse Mercator projection + */ +class Proj4phpProjUtm{ + + //public $dependsOn = 'tmerc'; + + public $utmSouth = false; // UTM north/south + private $e0, $e1, $e2, $e3, $ml0; + + /** + * + * @return void + */ + public function init() { + + if( !isset($this->zone) ) { + Proj4php::reportError( "utm:init: zone must be specified for UTM" ); + return; + } + + $this->lat0 = 0.0; + $this->long0 = ((6 * abs( $this->zone )) - 183) * Proj4php::$common->D2R; + $this->x0 = 500000.0; + $this->y0 = $this->utmSouth ? 10000000.0 : 0.0; + $this->k0 = 0.9996; + + $this->e0 = Proj4php::$common->e0fn( $this->es ); + $this->e1 = Proj4php::$common->e1fn( $this->es ); + $this->e2 = Proj4php::$common->e2fn( $this->es ); + $this->e3 = Proj4php::$common->e3fn( $this->es ); + $this->ml0 = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); + } + + /** + Transverse Mercator Forward - long/lat to x/y + long/lat in radians + */ + + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); // Delta longitude + #$con = 0; // cone constant + #$x = 0; + #$y = 0; + $sin_phi = sin( $lat ); + $cos_phi = cos( $lat ); + + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ + $b = $cos_phi * sin( $delta_lon ); + if( (abs( abs( $b ) - 1.0 )) < .0000000001 ) { + Proj4php::reportError( "tmerc:forward: Point projects into infinity" ); + return(93); + } else { + $x = .5 * $this->a * $this->k0 * log( (1.0 + $b) / (1.0 - $b) ); + $con = acos( $cos_phi * cos( $delta_lon ) / sqrt( 1.0 - $b * $b ) ); + if( $lat < 0 ) + $con = - $con; + $y = $this->a * $this->k0 * ($con - $this->lat0); + } + } else { + $al = $cos_phi * $delta_lon; + $als = pow( $al, 2 ); + $c = $this->ep2 * pow( $cos_phi, 2 ); + $tq = tan( $lat ); + $t = pow( $tq, 2 ); + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); + $n = $this->a / sqrt( $con ); + + $ml = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); + + $x = $this->k0 * $n * $al * (1.0 + $als / 6.0 * (1.0 - $t + $c + $als / 20.0 * (5.0 - 18.0 * $t + pow( $t, 2 ) + 72.0 * $c - 58.0 * $this->ep2))) + $this->x0; + $y = $this->k0 * ($ml - $this->ml0 + $n * $tq * ($als * (0.5 + $als / 24.0 * (5.0 - $t + 9.0 * $c + 4.0 * pow( $c, 2 ) + $als / 30.0 * (61.0 - 58.0 * $t + pow( $t, 2 ) + 600.0 * $c - 330.0 * $this->ep2))))) + $this->y0; + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /** + Transverse Mercator Inverse - x/y to long/lat + */ + public function inverse( $p ) { + + #$phi; /* temporary angles */ + #$delta_phi; /* difference between longitudes */ + $max_iter = 6; /* maximun number of iterations */ + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ + $f = exp( $p->x / ($this->a * $this->k0) ); + $g = .5 * ($f - 1 / $f); + $temp = $this->lat0 + $p->y / ($this->a * $this->k0); + $h = cos( $temp ); + $con = sqrt( (1.0 - $h * $h) / (1.0 + $g * $g) ); + $lat = Proj4php::$common->asinz( $con ); + if( $temp < 0 ) + $lat = -$lat; + if( ($g == 0) && ($h == 0) ) { + $lon = $this->long0; + } else { + $lon = Proj4php::$common->adjust_lon( atan2( $g, $h ) + $this->long0 ); + } + } else { // ellipsoidal form + $x = $p->x - $this->x0; + $y = $p->y - $this->y0; + + $con = ($this->ml0 + $y / $this->k0) / $this->a; + $phi = $con; + + for( $i = 0; true; $i++ ) { + $delta_phi = (($con + $this->e1 * sin( 2.0 * $phi ) - $this->e2 * sin( 4.0 * $phi ) + $this->e3 * sin( 6.0 * $phi )) / $this->e0) - $phi; + $phi += $delta_phi; + if( abs( $delta_phi ) <= Proj4php::$common->EPSLN ) + break; + if( $i >= $max_iter ) { + Proj4php::reportError( "tmerc:inverse: Latitude failed to converge" ); + return(95); + } + } // for() + + + if( abs( $phi ) < Proj4php::$common->HALF_PI ) { + // sincos(phi, &sin_phi, &cos_phi); + $sin_phi = sin( $phi ); + $cos_phi = cos( $phi ); + $tan_phi = tan( $phi ); + $c = $this->ep2 * pow( $cos_phi, 2 ); + $cs = pow( $c, 2 ); + $t = pow( $tan_phi, 2 ); + $ts = pow( $t, 2 ); + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); + $n = $this->a / sqrt( $con ); + $r = $n * (1.0 - $this->es) / $con; + $d = $x / ($n * $this->k0); + $ds = pow( $d, 2 ); + $lat = $phi - ($n * $tan_phi * $ds / $r) * (0.5 - $ds / 24.0 * (5.0 + 3.0 * $t + 10.0 * $c - 4.0 * $cs - 9.0 * $this->ep2 - $ds / 30.0 * (61.0 + 90.0 * $t + 298.0 * $c + 45.0 * $ts - 252.0 * $this->ep2 - 3.0 * $cs))); + $lon = Proj4php::$common->adjust_lon( $this->long0 + ($d * (1.0 - $ds / 6.0 * (1.0 + 2.0 * $t + $c - $ds / 20.0 * (5.0 - 2.0 * $c + 28.0 * $t - 3.0 * $cs + 8.0 * $this->ep2 + 24.0 * $ts))) / $cos_phi) ); + } else { + $lat = Proj4php::$common->HALF_PI * Proj4php::$common->sign( $y ); + $lon = $this->long0; + } + } + + $p->x = $lon; + $p->y = $lat; + + return $p; + } +} + +Proj4php::$proj['utm'] = new Proj4phpProjUtm(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/vandg.php b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/vandg.php new file mode 100644 index 0000000..3ffcb48 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/src/proj4php/projCode/vandg.php @@ -0,0 +1,167 @@ +com + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html + */ +/******************************************************************************* + NAME VAN DER GRINTEN + + PURPOSE: Transforms input Easting and Northing to longitude and + latitude for the Van der Grinten projection. The + Easting and Northing must be in meters. The longitude + and latitude values will be returned in radians. + + PROGRAMMER DATE + ---------- ---- + T. Mittan March, 1993 + + This function was adapted from the Van Der Grinten projection code + (FORTRAN) in the General Cartographic Transformation Package software + which is available from the U.S. Geological Survey National Mapping Division. + + ALGORITHM REFERENCES + + 1. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United + State Government Printing Office, Washington D.C., 1987. + + 3. "Software Documentation for GCTP General Cartographic Transformation + Package", U.S. Geological Survey National Mapping Division, May 1982. + * ***************************************************************************** */ + +class Proj4phpProjVandg { + + /* Initialize the Van Der Grinten projection + ---------------------------------------- */ + public function init() { + $this->R = 6370997.0; //Radius of earth + } + + /** + * + * @param type $p + * @return type + */ + public function forward( $p ) { + + $lon = $p->x; + $lat = $p->y; + + /* Forward equations + ----------------- */ + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); + $x; + $y; + + if( abs( $lat ) <= Proj4php::$common->EPSLN ) { + $x = $this->x0 + $this->R * $dlon; + $y = $this->y0; + } + $theta = Proj4php::$common->asinz( 2.0 * abs( $lat / Proj4php::$common->PI ) ); + if( (abs( $dlon ) <= Proj4php::$common->EPSLN) || (abs( abs( $lat ) - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN) ) { + $x = $this->x0; + if( $lat >= 0 ) { + $y = $this->y0 + Proj4php::$common->PI * $this->R * tan( .5 * $theta ); + } else { + $y = $this->y0 + Proj4php::$common->PI * $this->R * - tan( .5 * $theta ); + } + // return(OK); + } + $al = .5 * abs( (Proj4php::$common->PI / $dlon) - ($dlon / Proj4php::$common->PI) ); + $asq = $al * $al; + $sinth = sin( $theta ); + $costh = cos( $theta ); + + $g = $costh / ($sinth + $costh - 1.0); + $gsq = $g * $g; + $m = $g * (2.0 / $sinth - 1.0); + $msq = $m * $m; + $con = Proj4php::$common->PI * $this->R * ($al * ($g - $msq) + sqrt( $asq * ($g - $sq) * ($g - $msq) - ($msq + $asq) * ($gsq - $msq) )) / ($msq + $asq); + if( $dlon < 0 ) { + $con = -$con; + } + $x = $this->x0 + $con; + $con = abs( $con / (Proj4php::$common->PI * $this->R) ); + if( $lat >= 0 ) { + $y = $this->y0 + Proj4php::$common->PI * $this->R * sqrt( 1.0 - $con * $con - 2.0 * $al * $con ); + } else { + $y = $this->y0 - Proj4php::$common->PI * $this->R * sqrt( 1.0 - $con * $con - 2.0 * $al * $con ); + } + + $p->x = $x; + $p->y = $y; + + return $p; + } + + /* Van Der Grinten inverse equations--mapping x,y to lat/long + --------------------------------------------------------- */ + + public function inverse( $p ) { + + /* + $dlon; + $xx; + $yy; + $xys; + $c1; + $c2; + $c3; + $al; + $asq; + $a1; + $m1; + $con; + $th1; + $d; + */ + + /* inverse equations + ----------------- */ + $p->x -= $this->x0; + $p->y -= $this->y0; + $con = Proj4php::$common->PI * $this->R; + $xx = $p->x / $con; + $yy = $p->y / $con; + $xys = $xx * $xx + $yy * $yy; + $c1 = -abs( $yy ) * (1.0 + $xys); + $c2 = $c1 - 2.0 * $yy * $yy + $xx * $xx; + $c3 = -2.0 * $c1 + 1.0 + 2.0 * $yy * $yy + $xys * $xys; + $d = $yy * $yy / $c3 + (2.0 * $c2 * $c2 * $c2 / $c3 / $c3 / $c3 - 9.0 * $c1 * $c2 / $c3 / $c3) / 27.0; + $a1 = ($c1 - $c2 * $c2 / 3.0 / $c3) / $c3; + $m1 = 2.0 * sqrt( -$a1 / 3.0 ); + $con = ((3.0 * $d) / $a1) / $m1; + if( abs( $con ) > 1.0 ) { + if( $con >= 0.0 ) { + $con = 1.0; + } else { + $con = -1.0; + } + } + $th1 = acos( $con ) / 3.0; + if( $p->$y >= 0 ) { + $lat = (-$m1 * cos( $th1 + Proj4php::$common->PI / 3.0 ) - $c2 / 3.0 / $c3) * Proj4php::$common->PI; + } else { + $lat = -(-m1 * cos( $th1 + Proj4php::$common->PI / 3.0 ) - $c2 / 3.0 / $c3) * Proj4php::$common->PI; + } + + if( abs( $xx ) < Proj4php::$common->EPSLN ) { + $lon = $this->$long0; + } + $lon = Proj4php::$common->adjust_lon( $this->long0 + Proj4php::$common->PI * ($xys - 1.0 + sqrt( 1.0 + 2.0 * ($xx * $xx - $yy * $yy) + $xys * $xys )) / 2.0 / $xx ); + + $p->x = $lon; + $p->y = $lat; + + return $p; + } + +} + +Proj4php::$proj['vandg'] = new Proj4phpProjVandg(); \ No newline at end of file diff --git a/pacotes/proj4php-proj4php5.2/test/testproj.php b/pacotes/proj4php-proj4php5.2/test/testproj.php new file mode 100644 index 0000000..a333cd6 --- /dev/null +++ b/pacotes/proj4php-proj4php5.2/test/testproj.php @@ -0,0 +1,87 @@ +toShortString()." in L93
"; +$pointDest = $proj4->transform($projL93,$projWGS84,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in WGS84

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in WGS84
"; +$pointDest = $proj4->transform($projWGS84,$projLSud,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in Lambert Sud

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in Lambert Sud
"; +$pointDest = $proj4->transform($projLSud,$projWGS84,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in WGS84

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in WGS84
"; +$pointDest = $proj4->transform($projWGS84,$projLI,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in LI

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in LI
"; +$pointDest = $proj4->transform($projLI,$projL93,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in L93

"; + + + +$pointSrc = new proj4phpPoint('177329.253543','58176.702191'); +echo "Source : ".$pointSrc->toShortString()." in Lambert 1972
"; +$pointDest = $proj4->transform($projL72,$projWGS84,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in WGS84

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in WGS84
"; +$pointDest = $proj4->transform($projWGS84,$projL72,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in Lambert 1972

"; + + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in Lambert 1972
"; +$pointDest = $proj4->transform($projL72,$proj25833,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in EPSG:25833

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in EPSG:25833
"; +$pointDest = $proj4->transform($proj25833,$projWGS84,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in WGS84

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in WGS84
"; +$pointDest = $proj4->transform($projWGS84,$proj31468,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in EPSG:31468

"; + +$pointSrc = new proj4phpPoint('-868208.53', '-1095793.57'); +echo "Source : ".$pointSrc->toShortString()." in S-JTSK
"; +$pointDest = $proj4->transform($proj5514,$projWGS84,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in WGS84

"; + +$pointSrc = $pointDest; +echo "Source : ".$pointSrc->toShortString()." in WGS84
"; +$pointDest = $proj4->transform($projWGS84,$proj5514,$pointSrc); +echo "Conversion : ".$pointDest->toShortString()." in S-JTSK

"; -- libgit2 0.21.2