Commit 89487e1f97006314b1422a91bbbc5b0dfa4dcee7
1 parent
25fd30e1
Exists in
master
and in
7 other branches
Inclusão da biblioteca proj4php
Showing
66 changed files
with
7253 additions
and
3 deletions
Show diff stats
admin/js/estat_editor.js
@@ -576,6 +576,7 @@ i3GEOadmin.editor = { | @@ -576,6 +576,7 @@ i3GEOadmin.editor = { | ||
576 | '<p class="paragrafo" >shp: <br><input type="file" size=22 name="i3GEOuploadshp" style="top:0px;left:0px;cursor:pointer;"></p>' + | 576 | '<p class="paragrafo" >shp: <br><input type="file" size=22 name="i3GEOuploadshp" style="top:0px;left:0px;cursor:pointer;"></p>' + |
577 | '<p class="paragrafo" >shx: <br><input type="file" size=22 name="i3GEOuploadshx" style="top:0px;left:0px;cursor:pointer;"></p>' + | 577 | '<p class="paragrafo" >shx: <br><input type="file" size=22 name="i3GEOuploadshx" style="top:0px;left:0px;cursor:pointer;"></p>' + |
578 | '<p class="paragrafo" >dbf: <br><input type="file" size=22 name="i3GEOuploaddbf" style="top:0px;left:0px;cursor:pointer;"></p>' + | 578 | '<p class="paragrafo" >dbf: <br><input type="file" size=22 name="i3GEOuploaddbf" style="top:0px;left:0px;cursor:pointer;"></p>' + |
579 | + '<p class="paragrafo" >prj (opcional): <br><input type="file" size=22 name="i3GEOuploadprj" style="top:0px;left:0px;cursor:pointer;"></p>' + | ||
579 | '</fieldset>' + | 580 | '</fieldset>' + |
580 | '<fieldset class=subbloco >' + | 581 | '<fieldset class=subbloco >' + |
581 | '<legend>Destino</legend>' + | 582 | '<legend>Destino</legend>' + |
admin/php/metaestat_uploadshp_submit.php
@@ -51,17 +51,28 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ | @@ -51,17 +51,28 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ | ||
51 | $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shp"); | 51 | $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shp"); |
52 | if($status != 1) | 52 | if($status != 1) |
53 | {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo SHP";exit;} | 53 | {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo SHP";exit;} |
54 | + | ||
54 | $Arquivo = $_FILES['i3GEOuploadshx']['tmp_name']; | 55 | $Arquivo = $_FILES['i3GEOuploadshx']['tmp_name']; |
55 | $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shx"); | 56 | $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shx"); |
56 | if($status != 1) | 57 | if($status != 1) |
57 | {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo SHX";exit;} | 58 | {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo SHX";exit;} |
59 | + | ||
58 | $Arquivo = $_FILES['i3GEOuploaddbf']['tmp_name']; | 60 | $Arquivo = $_FILES['i3GEOuploaddbf']['tmp_name']; |
59 | $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".dbf"); | 61 | $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".dbf"); |
60 | if($status != 1) | 62 | if($status != 1) |
61 | {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo DBF";exit;} | 63 | {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo DBF";exit;} |
62 | - | ||
63 | - if(!file_exists($dir_tmp."/".$nomePrefixo.".shp")) | ||
64 | - {echo "<p class='paragrafo' >Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde();exit;} | 64 | + |
65 | + if($_FILES['i3GEOuploadprj']['tmp_name'] != ""){ | ||
66 | + $Arquivo = $_FILES['i3GEOuploadprj']['tmp_name']; | ||
67 | + $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".prj"); | ||
68 | + if($status != 1){ | ||
69 | + echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo PRJ";exit; | ||
70 | + } | ||
71 | + } | ||
72 | + if(!file_exists($dir_tmp."/".$nomePrefixo.".shp")){ | ||
73 | + echo "<p class='paragrafo' >Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde(); | ||
74 | + exit; | ||
75 | + } | ||
65 | $arqshp = $dir_tmp."/".$nomePrefixo.".shp"; | 76 | $arqshp = $dir_tmp."/".$nomePrefixo.".shp"; |
66 | 77 | ||
67 | //pega os parametros de conexao | 78 | //pega os parametros de conexao |
@@ -75,6 +86,9 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ | @@ -75,6 +86,9 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ | ||
75 | $mapObj = ms_newMapObjFromString("MAP END"); | 86 | $mapObj = ms_newMapObjFromString("MAP END"); |
76 | $layer = ms_newLayerObj($mapObj); | 87 | $layer = ms_newLayerObj($mapObj); |
77 | $layer->set("data",$arqshp); | 88 | $layer->set("data",$arqshp); |
89 | + if(file_exists($dir_tmp."/".$nomePrefixo.".prj")){ | ||
90 | + $layer->setprojection("AUTO"); | ||
91 | + } | ||
78 | $layer->open(); | 92 | $layer->open(); |
79 | $colunasTemp = $layer->getItems(); | 93 | $colunasTemp = $layer->getItems(); |
80 | $colunas = array(); | 94 | $colunas = array(); |
@@ -190,8 +204,25 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ | @@ -190,8 +204,25 @@ if (isset($_FILES['i3GEOuploadshp']['name'])){ | ||
190 | sleep(1); | 204 | sleep(1); |
191 | $srid = 4326; | 205 | $srid = 4326; |
192 | $escapar = "'"; | 206 | $escapar = "'"; |
207 | + $prjMapa = $mapObj->getProjection(); | ||
208 | + $prjTema = $layer->getProjection(); | ||
209 | + if (($prjTema != "") && ($prjMapa != $prjTema)) | ||
210 | + { | ||
211 | + $projInObj = ms_newprojectionobj($prjTema); | ||
212 | + $projOutObj = ms_newprojectionobj($prjMapa); | ||
213 | + } | ||
214 | + else{ | ||
215 | + $projOutObj = ""; | ||
216 | + $projInObj = ""; | ||
217 | + } | ||
193 | for ($i=0; $i<$numshapes;$i++){ | 218 | for ($i=0; $i<$numshapes;$i++){ |
194 | $s = $layer->getShape(new resultObj($i)); | 219 | $s = $layer->getShape(new resultObj($i)); |
220 | + //projeta o shape se existir .prj | ||
221 | + if($_FILES['i3GEOuploadprj']['tmp_name'] != "" && $projInObj != ""){ | ||
222 | + $s->project($projInObj, $projOutObj); | ||
223 | + //para nao projetar com postgis | ||
224 | + $_POST["insrid"] = $_POST["outsrid"]; | ||
225 | + } | ||
195 | $vs = array(); | 226 | $vs = array(); |
196 | 227 | ||
197 | foreach($colunas as $coluna){ | 228 | foreach($colunas as $coluna){ |
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
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]] |
@@ -0,0 +1,505 @@ | @@ -0,0 +1,505 @@ | ||
1 | + GNU LESSER GENERAL PUBLIC LICENSE | ||
2 | + Version 2.1, February 1999 | ||
3 | + | ||
4 | + Copyright (C) 1991, 1999 Free Software Foundation, Inc. | ||
5 | + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
6 | + Everyone is permitted to copy and distribute verbatim copies | ||
7 | + of this license document, but changing it is not allowed. | ||
8 | + | ||
9 | +(This is the first released version of the Lesser GPL. It also counts | ||
10 | + as the successor of the GNU Library Public License, version 2, hence | ||
11 | + the version number 2.1.) | ||
12 | + | ||
13 | + Preamble | ||
14 | + | ||
15 | + The licenses for most software are designed to take away your | ||
16 | +freedom to share and change it. By contrast, the GNU General Public | ||
17 | +Licenses are intended to guarantee your freedom to share and change | ||
18 | +free software--to make sure the software is free for all its users. | ||
19 | + | ||
20 | + This license, the Lesser General Public License, applies to some | ||
21 | +specially designated software packages--typically libraries--of the | ||
22 | +Free Software Foundation and other authors who decide to use it. You | ||
23 | +can use it too, but we suggest you first think carefully about whether | ||
24 | +this license or the ordinary General Public License is the better | ||
25 | +strategy to use in any particular case, based on the explanations below. | ||
26 | + | ||
27 | + When we speak of free software, we are referring to freedom of use, | ||
28 | +not price. Our General Public Licenses are designed to make sure that | ||
29 | +you have the freedom to distribute copies of free software (and charge | ||
30 | +for this service if you wish); that you receive source code or can get | ||
31 | +it if you want it; that you can change the software and use pieces of | ||
32 | +it in new free programs; and that you are informed that you can do | ||
33 | +these things. | ||
34 | + | ||
35 | + To protect your rights, we need to make restrictions that forbid | ||
36 | +distributors to deny you these rights or to ask you to surrender these | ||
37 | +rights. These restrictions translate to certain responsibilities for | ||
38 | +you if you distribute copies of the library or if you modify it. | ||
39 | + | ||
40 | + For example, if you distribute copies of the library, whether gratis | ||
41 | +or for a fee, you must give the recipients all the rights that we gave | ||
42 | +you. You must make sure that they, too, receive or can get the source | ||
43 | +code. If you link other code with the library, you must provide | ||
44 | +complete object files to the recipients, so that they can relink them | ||
45 | +with the library after making changes to the library and recompiling | ||
46 | +it. And you must show them these terms so they know their rights. | ||
47 | + | ||
48 | + We protect your rights with a two-step method: (1) we copyright the | ||
49 | +library, and (2) we offer you this license, which gives you legal | ||
50 | +permission to copy, distribute and/or modify the library. | ||
51 | + | ||
52 | + To protect each distributor, we want to make it very clear that | ||
53 | +there is no warranty for the free library. Also, if the library is | ||
54 | +modified by someone else and passed on, the recipients should know | ||
55 | +that what they have is not the original version, so that the original | ||
56 | +author's reputation will not be affected by problems that might be | ||
57 | +introduced by others. | ||
58 | + | ||
59 | + Finally, software patents pose a constant threat to the existence of | ||
60 | +any free program. We wish to make sure that a company cannot | ||
61 | +effectively restrict the users of a free program by obtaining a | ||
62 | +restrictive license from a patent holder. Therefore, we insist that | ||
63 | +any patent license obtained for a version of the library must be | ||
64 | +consistent with the full freedom of use specified in this license. | ||
65 | + | ||
66 | + Most GNU software, including some libraries, is covered by the | ||
67 | +ordinary GNU General Public License. This license, the GNU Lesser | ||
68 | +General Public License, applies to certain designated libraries, and | ||
69 | +is quite different from the ordinary General Public License. We use | ||
70 | +this license for certain libraries in order to permit linking those | ||
71 | +libraries into non-free programs. | ||
72 | + | ||
73 | + When a program is linked with a library, whether statically or using | ||
74 | +a shared library, the combination of the two is legally speaking a | ||
75 | +combined work, a derivative of the original library. The ordinary | ||
76 | +General Public License therefore permits such linking only if the | ||
77 | +entire combination fits its criteria of freedom. The Lesser General | ||
78 | +Public License permits more lax criteria for linking other code with | ||
79 | +the library. | ||
80 | + | ||
81 | + We call this license the "Lesser" General Public License because it | ||
82 | +does Less to protect the user's freedom than the ordinary General | ||
83 | +Public License. It also provides other free software developers Less | ||
84 | +of an advantage over competing non-free programs. These disadvantages | ||
85 | +are the reason we use the ordinary General Public License for many | ||
86 | +libraries. However, the Lesser license provides advantages in certain | ||
87 | +special circumstances. | ||
88 | + | ||
89 | + For example, on rare occasions, there may be a special need to | ||
90 | +encourage the widest possible use of a certain library, so that it becomes | ||
91 | +a de-facto standard. To achieve this, non-free programs must be | ||
92 | +allowed to use the library. A more frequent case is that a free | ||
93 | +library does the same job as widely used non-free libraries. In this | ||
94 | +case, there is little to gain by limiting the free library to free | ||
95 | +software only, so we use the Lesser General Public License. | ||
96 | + | ||
97 | + In other cases, permission to use a particular library in non-free | ||
98 | +programs enables a greater number of people to use a large body of | ||
99 | +free software. For example, permission to use the GNU C Library in | ||
100 | +non-free programs enables many more people to use the whole GNU | ||
101 | +operating system, as well as its variant, the GNU/Linux operating | ||
102 | +system. | ||
103 | + | ||
104 | + Although the Lesser General Public License is Less protective of the | ||
105 | +users' freedom, it does ensure that the user of a program that is | ||
106 | +linked with the Library has the freedom and the wherewithal to run | ||
107 | +that program using a modified version of the Library. | ||
108 | + | ||
109 | + The precise terms and conditions for copying, distribution and | ||
110 | +modification follow. Pay close attention to the difference between a | ||
111 | +"work based on the library" and a "work that uses the library". The | ||
112 | +former contains code derived from the library, whereas the latter must | ||
113 | +be combined with the library in order to run. | ||
114 | + | ||
115 | + GNU LESSER GENERAL PUBLIC LICENSE | ||
116 | + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||
117 | + | ||
118 | + 0. This License Agreement applies to any software library or other | ||
119 | +program which contains a notice placed by the copyright holder or | ||
120 | +other authorized party saying it may be distributed under the terms of | ||
121 | +this Lesser General Public License (also called "this License"). | ||
122 | +Each licensee is addressed as "you". | ||
123 | + | ||
124 | + A "library" means a collection of software functions and/or data | ||
125 | +prepared so as to be conveniently linked with application programs | ||
126 | +(which use some of those functions and data) to form executables. | ||
127 | + | ||
128 | + The "Library", below, refers to any such software library or work | ||
129 | +which has been distributed under these terms. A "work based on the | ||
130 | +Library" means either the Library or any derivative work under | ||
131 | +copyright law: that is to say, a work containing the Library or a | ||
132 | +portion of it, either verbatim or with modifications and/or translated | ||
133 | +straightforwardly into another language. (Hereinafter, translation is | ||
134 | +included without limitation in the term "modification".) | ||
135 | + | ||
136 | + "Source code" for a work means the preferred form of the work for | ||
137 | +making modifications to it. For a library, complete source code means | ||
138 | +all the source code for all modules it contains, plus any associated | ||
139 | +interface definition files, plus the scripts used to control compilation | ||
140 | +and installation of the library. | ||
141 | + | ||
142 | + Activities other than copying, distribution and modification are not | ||
143 | +covered by this License; they are outside its scope. The act of | ||
144 | +running a program using the Library is not restricted, and output from | ||
145 | +such a program is covered only if its contents constitute a work based | ||
146 | +on the Library (independent of the use of the Library in a tool for | ||
147 | +writing it). Whether that is true depends on what the Library does | ||
148 | +and what the program that uses the Library does. | ||
149 | + | ||
150 | + 1. You may copy and distribute verbatim copies of the Library's | ||
151 | +complete source code as you receive it, in any medium, provided that | ||
152 | +you conspicuously and appropriately publish on each copy an | ||
153 | +appropriate copyright notice and disclaimer of warranty; keep intact | ||
154 | +all the notices that refer to this License and to the absence of any | ||
155 | +warranty; and distribute a copy of this License along with the | ||
156 | +Library. | ||
157 | + | ||
158 | + You may charge a fee for the physical act of transferring a copy, | ||
159 | +and you may at your option offer warranty protection in exchange for a | ||
160 | +fee. | ||
161 | + | ||
162 | + 2. You may modify your copy or copies of the Library or any portion | ||
163 | +of it, thus forming a work based on the Library, and copy and | ||
164 | +distribute such modifications or work under the terms of Section 1 | ||
165 | +above, provided that you also meet all of these conditions: | ||
166 | + | ||
167 | + a) The modified work must itself be a software library. | ||
168 | + | ||
169 | + b) You must cause the files modified to carry prominent notices | ||
170 | + stating that you changed the files and the date of any change. | ||
171 | + | ||
172 | + c) You must cause the whole of the work to be licensed at no | ||
173 | + charge to all third parties under the terms of this License. | ||
174 | + | ||
175 | + d) If a facility in the modified Library refers to a function or a | ||
176 | + table of data to be supplied by an application program that uses | ||
177 | + the facility, other than as an argument passed when the facility | ||
178 | + is invoked, then you must make a good faith effort to ensure that, | ||
179 | + in the event an application does not supply such function or | ||
180 | + table, the facility still operates, and performs whatever part of | ||
181 | + its purpose remains meaningful. | ||
182 | + | ||
183 | + (For example, a function in a library to compute square roots has | ||
184 | + a purpose that is entirely well-defined independent of the | ||
185 | + application. Therefore, Subsection 2d requires that any | ||
186 | + application-supplied function or table used by this function must | ||
187 | + be optional: if the application does not supply it, the square | ||
188 | + root function must still compute square roots.) | ||
189 | + | ||
190 | +These requirements apply to the modified work as a whole. If | ||
191 | +identifiable sections of that work are not derived from the Library, | ||
192 | +and can be reasonably considered independent and separate works in | ||
193 | +themselves, then this License, and its terms, do not apply to those | ||
194 | +sections when you distribute them as separate works. But when you | ||
195 | +distribute the same sections as part of a whole which is a work based | ||
196 | +on the Library, the distribution of the whole must be on the terms of | ||
197 | +this License, whose permissions for other licensees extend to the | ||
198 | +entire whole, and thus to each and every part regardless of who wrote | ||
199 | +it. | ||
200 | + | ||
201 | +Thus, it is not the intent of this section to claim rights or contest | ||
202 | +your rights to work written entirely by you; rather, the intent is to | ||
203 | +exercise the right to control the distribution of derivative or | ||
204 | +collective works based on the Library. | ||
205 | + | ||
206 | +In addition, mere aggregation of another work not based on the Library | ||
207 | +with the Library (or with a work based on the Library) on a volume of | ||
208 | +a storage or distribution medium does not bring the other work under | ||
209 | +the scope of this License. | ||
210 | + | ||
211 | + 3. You may opt to apply the terms of the ordinary GNU General Public | ||
212 | +License instead of this License to a given copy of the Library. To do | ||
213 | +this, you must alter all the notices that refer to this License, so | ||
214 | +that they refer to the ordinary GNU General Public License, version 2, | ||
215 | +instead of to this License. (If a newer version than version 2 of the | ||
216 | +ordinary GNU General Public License has appeared, then you can specify | ||
217 | +that version instead if you wish.) Do not make any other change in | ||
218 | +these notices. | ||
219 | + | ||
220 | + Once this change is made in a given copy, it is irreversible for | ||
221 | +that copy, so the ordinary GNU General Public License applies to all | ||
222 | +subsequent copies and derivative works made from that copy. | ||
223 | + | ||
224 | + This option is useful when you wish to copy part of the code of | ||
225 | +the Library into a program that is not a library. | ||
226 | + | ||
227 | + 4. You may copy and distribute the Library (or a portion or | ||
228 | +derivative of it, under Section 2) in object code or executable form | ||
229 | +under the terms of Sections 1 and 2 above provided that you accompany | ||
230 | +it with the complete corresponding machine-readable source code, which | ||
231 | +must be distributed under the terms of Sections 1 and 2 above on a | ||
232 | +medium customarily used for software interchange. | ||
233 | + | ||
234 | + If distribution of object code is made by offering access to copy | ||
235 | +from a designated place, then offering equivalent access to copy the | ||
236 | +source code from the same place satisfies the requirement to | ||
237 | +distribute the source code, even though third parties are not | ||
238 | +compelled to copy the source along with the object code. | ||
239 | + | ||
240 | + 5. A program that contains no derivative of any portion of the | ||
241 | +Library, but is designed to work with the Library by being compiled or | ||
242 | +linked with it, is called a "work that uses the Library". Such a | ||
243 | +work, in isolation, is not a derivative work of the Library, and | ||
244 | +therefore falls outside the scope of this License. | ||
245 | + | ||
246 | + However, linking a "work that uses the Library" with the Library | ||
247 | +creates an executable that is a derivative of the Library (because it | ||
248 | +contains portions of the Library), rather than a "work that uses the | ||
249 | +library". The executable is therefore covered by this License. | ||
250 | +Section 6 states terms for distribution of such executables. | ||
251 | + | ||
252 | + When a "work that uses the Library" uses material from a header file | ||
253 | +that is part of the Library, the object code for the work may be a | ||
254 | +derivative work of the Library even though the source code is not. | ||
255 | +Whether this is true is especially significant if the work can be | ||
256 | +linked without the Library, or if the work is itself a library. The | ||
257 | +threshold for this to be true is not precisely defined by law. | ||
258 | + | ||
259 | + If such an object file uses only numerical parameters, data | ||
260 | +structure layouts and accessors, and small macros and small inline | ||
261 | +functions (ten lines or less in length), then the use of the object | ||
262 | +file is unrestricted, regardless of whether it is legally a derivative | ||
263 | +work. (Executables containing this object code plus portions of the | ||
264 | +Library will still fall under Section 6.) | ||
265 | + | ||
266 | + Otherwise, if the work is a derivative of the Library, you may | ||
267 | +distribute the object code for the work under the terms of Section 6. | ||
268 | +Any executables containing that work also fall under Section 6, | ||
269 | +whether or not they are linked directly with the Library itself. | ||
270 | + | ||
271 | + 6. As an exception to the Sections above, you may also combine or | ||
272 | +link a "work that uses the Library" with the Library to produce a | ||
273 | +work containing portions of the Library, and distribute that work | ||
274 | +under terms of your choice, provided that the terms permit | ||
275 | +modification of the work for the customer's own use and reverse | ||
276 | +engineering for debugging such modifications. | ||
277 | + | ||
278 | + You must give prominent notice with each copy of the work that the | ||
279 | +Library is used in it and that the Library and its use are covered by | ||
280 | +this License. You must supply a copy of this License. If the work | ||
281 | +during execution displays copyright notices, you must include the | ||
282 | +copyright notice for the Library among them, as well as a reference | ||
283 | +directing the user to the copy of this License. Also, you must do one | ||
284 | +of these things: | ||
285 | + | ||
286 | + a) Accompany the work with the complete corresponding | ||
287 | + machine-readable source code for the Library including whatever | ||
288 | + changes were used in the work (which must be distributed under | ||
289 | + Sections 1 and 2 above); and, if the work is an executable linked | ||
290 | + with the Library, with the complete machine-readable "work that | ||
291 | + uses the Library", as object code and/or source code, so that the | ||
292 | + user can modify the Library and then relink to produce a modified | ||
293 | + executable containing the modified Library. (It is understood | ||
294 | + that the user who changes the contents of definitions files in the | ||
295 | + Library will not necessarily be able to recompile the application | ||
296 | + to use the modified definitions.) | ||
297 | + | ||
298 | + b) Use a suitable shared library mechanism for linking with the | ||
299 | + Library. A suitable mechanism is one that (1) uses at run time a | ||
300 | + copy of the library already present on the user's computer system, | ||
301 | + rather than copying library functions into the executable, and (2) | ||
302 | + will operate properly with a modified version of the library, if | ||
303 | + the user installs one, as long as the modified version is | ||
304 | + interface-compatible with the version that the work was made with. | ||
305 | + | ||
306 | + c) Accompany the work with a written offer, valid for at | ||
307 | + least three years, to give the same user the materials | ||
308 | + specified in Subsection 6a, above, for a charge no more | ||
309 | + than the cost of performing this distribution. | ||
310 | + | ||
311 | + d) If distribution of the work is made by offering access to copy | ||
312 | + from a designated place, offer equivalent access to copy the above | ||
313 | + specified materials from the same place. | ||
314 | + | ||
315 | + e) Verify that the user has already received a copy of these | ||
316 | + materials or that you have already sent this user a copy. | ||
317 | + | ||
318 | + For an executable, the required form of the "work that uses the | ||
319 | +Library" must include any data and utility programs needed for | ||
320 | +reproducing the executable from it. However, as a special exception, | ||
321 | +the materials to be distributed need not include anything that is | ||
322 | +normally distributed (in either source or binary form) with the major | ||
323 | +components (compiler, kernel, and so on) of the operating system on | ||
324 | +which the executable runs, unless that component itself accompanies | ||
325 | +the executable. | ||
326 | + | ||
327 | + It may happen that this requirement contradicts the license | ||
328 | +restrictions of other proprietary libraries that do not normally | ||
329 | +accompany the operating system. Such a contradiction means you cannot | ||
330 | +use both them and the Library together in an executable that you | ||
331 | +distribute. | ||
332 | + | ||
333 | + 7. You may place library facilities that are a work based on the | ||
334 | +Library side-by-side in a single library together with other library | ||
335 | +facilities not covered by this License, and distribute such a combined | ||
336 | +library, provided that the separate distribution of the work based on | ||
337 | +the Library and of the other library facilities is otherwise | ||
338 | +permitted, and provided that you do these two things: | ||
339 | + | ||
340 | + a) Accompany the combined library with a copy of the same work | ||
341 | + based on the Library, uncombined with any other library | ||
342 | + facilities. This must be distributed under the terms of the | ||
343 | + Sections above. | ||
344 | + | ||
345 | + b) Give prominent notice with the combined library of the fact | ||
346 | + that part of it is a work based on the Library, and explaining | ||
347 | + where to find the accompanying uncombined form of the same work. | ||
348 | + | ||
349 | + 8. You may not copy, modify, sublicense, link with, or distribute | ||
350 | +the Library except as expressly provided under this License. Any | ||
351 | +attempt otherwise to copy, modify, sublicense, link with, or | ||
352 | +distribute the Library is void, and will automatically terminate your | ||
353 | +rights under this License. However, parties who have received copies, | ||
354 | +or rights, from you under this License will not have their licenses | ||
355 | +terminated so long as such parties remain in full compliance. | ||
356 | + | ||
357 | + 9. You are not required to accept this License, since you have not | ||
358 | +signed it. However, nothing else grants you permission to modify or | ||
359 | +distribute the Library or its derivative works. These actions are | ||
360 | +prohibited by law if you do not accept this License. Therefore, by | ||
361 | +modifying or distributing the Library (or any work based on the | ||
362 | +Library), you indicate your acceptance of this License to do so, and | ||
363 | +all its terms and conditions for copying, distributing or modifying | ||
364 | +the Library or works based on it. | ||
365 | + | ||
366 | + 10. Each time you redistribute the Library (or any work based on the | ||
367 | +Library), the recipient automatically receives a license from the | ||
368 | +original licensor to copy, distribute, link with or modify the Library | ||
369 | +subject to these terms and conditions. You may not impose any further | ||
370 | +restrictions on the recipients' exercise of the rights granted herein. | ||
371 | +You are not responsible for enforcing compliance by third parties with | ||
372 | +this License. | ||
373 | + | ||
374 | + 11. If, as a consequence of a court judgment or allegation of patent | ||
375 | +infringement or for any other reason (not limited to patent issues), | ||
376 | +conditions are imposed on you (whether by court order, agreement or | ||
377 | +otherwise) that contradict the conditions of this License, they do not | ||
378 | +excuse you from the conditions of this License. If you cannot | ||
379 | +distribute so as to satisfy simultaneously your obligations under this | ||
380 | +License and any other pertinent obligations, then as a consequence you | ||
381 | +may not distribute the Library at all. For example, if a patent | ||
382 | +license would not permit royalty-free redistribution of the Library by | ||
383 | +all those who receive copies directly or indirectly through you, then | ||
384 | +the only way you could satisfy both it and this License would be to | ||
385 | +refrain entirely from distribution of the Library. | ||
386 | + | ||
387 | +If any portion of this section is held invalid or unenforceable under any | ||
388 | +particular circumstance, the balance of the section is intended to apply, | ||
389 | +and the section as a whole is intended to apply in other circumstances. | ||
390 | + | ||
391 | +It is not the purpose of this section to induce you to infringe any | ||
392 | +patents or other property right claims or to contest validity of any | ||
393 | +such claims; this section has the sole purpose of protecting the | ||
394 | +integrity of the free software distribution system which is | ||
395 | +implemented by public license practices. Many people have made | ||
396 | +generous contributions to the wide range of software distributed | ||
397 | +through that system in reliance on consistent application of that | ||
398 | +system; it is up to the author/donor to decide if he or she is willing | ||
399 | +to distribute software through any other system and a licensee cannot | ||
400 | +impose that choice. | ||
401 | + | ||
402 | +This section is intended to make thoroughly clear what is believed to | ||
403 | +be a consequence of the rest of this License. | ||
404 | + | ||
405 | + 12. If the distribution and/or use of the Library is restricted in | ||
406 | +certain countries either by patents or by copyrighted interfaces, the | ||
407 | +original copyright holder who places the Library under this License may add | ||
408 | +an explicit geographical distribution limitation excluding those countries, | ||
409 | +so that distribution is permitted only in or among countries not thus | ||
410 | +excluded. In such case, this License incorporates the limitation as if | ||
411 | +written in the body of this License. | ||
412 | + | ||
413 | + 13. The Free Software Foundation may publish revised and/or new | ||
414 | +versions of the Lesser General Public License from time to time. | ||
415 | +Such new versions will be similar in spirit to the present version, | ||
416 | +but may differ in detail to address new problems or concerns. | ||
417 | + | ||
418 | +Each version is given a distinguishing version number. If the Library | ||
419 | +specifies a version number of this License which applies to it and | ||
420 | +"any later version", you have the option of following the terms and | ||
421 | +conditions either of that version or of any later version published by | ||
422 | +the Free Software Foundation. If the Library does not specify a | ||
423 | +license version number, you may choose any version ever published by | ||
424 | +the Free Software Foundation. | ||
425 | + | ||
426 | + 14. If you wish to incorporate parts of the Library into other free | ||
427 | +programs whose distribution conditions are incompatible with these, | ||
428 | +write to the author to ask for permission. For software which is | ||
429 | +copyrighted by the Free Software Foundation, write to the Free | ||
430 | +Software Foundation; we sometimes make exceptions for this. Our | ||
431 | +decision will be guided by the two goals of preserving the free status | ||
432 | +of all derivatives of our free software and of promoting the sharing | ||
433 | +and reuse of software generally. | ||
434 | + | ||
435 | + NO WARRANTY | ||
436 | + | ||
437 | + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO | ||
438 | +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. | ||
439 | +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR | ||
440 | +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY | ||
441 | +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE | ||
442 | +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
443 | +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | ||
444 | +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME | ||
445 | +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||
446 | + | ||
447 | + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN | ||
448 | +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY | ||
449 | +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU | ||
450 | +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR | ||
451 | +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE | ||
452 | +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING | ||
453 | +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | ||
454 | +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF | ||
455 | +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | ||
456 | +DAMAGES. | ||
457 | + | ||
458 | + END OF TERMS AND CONDITIONS | ||
459 | + | ||
460 | + How to Apply These Terms to Your New Libraries | ||
461 | + | ||
462 | + If you develop a new library, and you want it to be of the greatest | ||
463 | +possible use to the public, we recommend making it free software that | ||
464 | +everyone can redistribute and change. You can do so by permitting | ||
465 | +redistribution under these terms (or, alternatively, under the terms of the | ||
466 | +ordinary General Public License). | ||
467 | + | ||
468 | + To apply these terms, attach the following notices to the library. It is | ||
469 | +safest to attach them to the start of each source file to most effectively | ||
470 | +convey the exclusion of warranty; and each file should have at least the | ||
471 | +"copyright" line and a pointer to where the full notice is found. | ||
472 | + | ||
473 | + {description} | ||
474 | + Copyright (C) {year} {fullname} | ||
475 | + | ||
476 | + This library is free software; you can redistribute it and/or | ||
477 | + modify it under the terms of the GNU Lesser General Public | ||
478 | + License as published by the Free Software Foundation; either | ||
479 | + version 2.1 of the License, or (at your option) any later version. | ||
480 | + | ||
481 | + This library is distributed in the hope that it will be useful, | ||
482 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
483 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
484 | + Lesser General Public License for more details. | ||
485 | + | ||
486 | + You should have received a copy of the GNU Lesser General Public | ||
487 | + License along with this library; if not, write to the Free Software | ||
488 | + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 | ||
489 | + USA | ||
490 | + | ||
491 | +Also add information on how to contact you by electronic and paper mail. | ||
492 | + | ||
493 | +You should also get your employer (if you work as a programmer) or your | ||
494 | +school, if any, to sign a "copyright disclaimer" for the library, if | ||
495 | +necessary. Here is a sample; alter the names: | ||
496 | + | ||
497 | + Yoyodyne, Inc., hereby disclaims all copyright interest in the | ||
498 | + library `Frob' (a library for tweaking knobs) written by James Random | ||
499 | + Hacker. | ||
500 | + | ||
501 | + {signature of Ty Coon}, 1 April 1990 | ||
502 | + Ty Coon, President of Vice | ||
503 | + | ||
504 | +That's all there is to it! | ||
505 | + |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +# proj4php | ||
2 | +PHP-class for proj4 | ||
3 | +This is a PHP-Class for geographic coordinates transformation using proj4 definitions, thanks to a translation from Proj4JS. | ||
4 | + | ||
5 | +## Using | ||
6 | + | ||
7 | +```php | ||
8 | +include("proj4php"); | ||
9 | + | ||
10 | +$proj4 = new Proj4php(); | ||
11 | +$projL93 = new Proj4phpProj('EPSG:2154',$proj4); | ||
12 | +$projWGS84 = new Proj4phpProj('EPSG:4326',$proj4); | ||
13 | + | ||
14 | +$pointSrc = new proj4phpPoint('652709.401','6859290.946'); | ||
15 | +$pointDest = $proj4->transform($projL93,$projWGS84,$pointSrc); | ||
16 | + | ||
17 | +echo "Source : ".$pointSrc->toShortString()." in L93 <br>"; | ||
18 | +echo "Conversion : ".$pointDest->toShortString()." in WGS84<br><br>"; | ||
19 | +``` | ||
20 | + | ||
21 | +There's is also way to define inline projections. | ||
22 | + | ||
23 | +## Developping | ||
24 | + | ||
25 | +Fill free to fork us and submit your changes ! |
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
1 | +{ | ||
2 | + "name": "proj4php/proj4php", | ||
3 | + "license": "LGPL-2.1", | ||
4 | + "type": "library", | ||
5 | + "description": "A PHP-Class for geographic coordinates transformation using proj4 definitions, thanks to a translation from Proj4JS", | ||
6 | + "keywords": [ | ||
7 | + "geographic", | ||
8 | + "coordinates", | ||
9 | + "proj4", | ||
10 | + "proj4js" | ||
11 | + ], | ||
12 | + "homepage": "https://github.com/proj4php/proj4php", | ||
13 | + "authors": [ | ||
14 | + { | ||
15 | + "name": "julien2512", | ||
16 | + "email": "moquet.julien@gmail.com", | ||
17 | + "homepage": "https://github.com/julien2512", | ||
18 | + "role": "Developer" | ||
19 | + }, | ||
20 | + { | ||
21 | + "name": "winne27", | ||
22 | + "homepage": "http://github.com/winne27", | ||
23 | + "role": "Developer" | ||
24 | + } | ||
25 | + ], | ||
26 | + "require": { | ||
27 | + "php": ">=5.2.0" | ||
28 | + }, | ||
29 | + "require-dev": { | ||
30 | + "phpunit/phpunit": "4.0.*" | ||
31 | + }, | ||
32 | + "autoload": { | ||
33 | + "classmap": ["src/"] | ||
34 | + } | ||
35 | +} |
pacotes/proj4php-proj4php5.2/src/proj4php/LGPL GNU lesser licence.txt
0 → 100644
@@ -0,0 +1,165 @@ | @@ -0,0 +1,165 @@ | ||
1 | + GNU LESSER GENERAL PUBLIC LICENSE | ||
2 | + Version 3, 29 June 2007 | ||
3 | + | ||
4 | + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||
5 | + Everyone is permitted to copy and distribute verbatim copies | ||
6 | + of this license document, but changing it is not allowed. | ||
7 | + | ||
8 | + | ||
9 | + This version of the GNU Lesser General Public License incorporates | ||
10 | +the terms and conditions of version 3 of the GNU General Public | ||
11 | +License, supplemented by the additional permissions listed below. | ||
12 | + | ||
13 | + 0. Additional Definitions. | ||
14 | + | ||
15 | + As used herein, "this License" refers to version 3 of the GNU Lesser | ||
16 | +General Public License, and the "GNU GPL" refers to version 3 of the GNU | ||
17 | +General Public License. | ||
18 | + | ||
19 | + "The Library" refers to a covered work governed by this License, | ||
20 | +other than an Application or a Combined Work as defined below. | ||
21 | + | ||
22 | + An "Application" is any work that makes use of an interface provided | ||
23 | +by the Library, but which is not otherwise based on the Library. | ||
24 | +Defining a subclass of a class defined by the Library is deemed a mode | ||
25 | +of using an interface provided by the Library. | ||
26 | + | ||
27 | + A "Combined Work" is a work produced by combining or linking an | ||
28 | +Application with the Library. The particular version of the Library | ||
29 | +with which the Combined Work was made is also called the "Linked | ||
30 | +Version". | ||
31 | + | ||
32 | + The "Minimal Corresponding Source" for a Combined Work means the | ||
33 | +Corresponding Source for the Combined Work, excluding any source code | ||
34 | +for portions of the Combined Work that, considered in isolation, are | ||
35 | +based on the Application, and not on the Linked Version. | ||
36 | + | ||
37 | + The "Corresponding Application Code" for a Combined Work means the | ||
38 | +object code and/or source code for the Application, including any data | ||
39 | +and utility programs needed for reproducing the Combined Work from the | ||
40 | +Application, but excluding the System Libraries of the Combined Work. | ||
41 | + | ||
42 | + 1. Exception to Section 3 of the GNU GPL. | ||
43 | + | ||
44 | + You may convey a covered work under sections 3 and 4 of this License | ||
45 | +without being bound by section 3 of the GNU GPL. | ||
46 | + | ||
47 | + 2. Conveying Modified Versions. | ||
48 | + | ||
49 | + If you modify a copy of the Library, and, in your modifications, a | ||
50 | +facility refers to a function or data to be supplied by an Application | ||
51 | +that uses the facility (other than as an argument passed when the | ||
52 | +facility is invoked), then you may convey a copy of the modified | ||
53 | +version: | ||
54 | + | ||
55 | + a) under this License, provided that you make a good faith effort to | ||
56 | + ensure that, in the event an Application does not supply the | ||
57 | + function or data, the facility still operates, and performs | ||
58 | + whatever part of its purpose remains meaningful, or | ||
59 | + | ||
60 | + b) under the GNU GPL, with none of the additional permissions of | ||
61 | + this License applicable to that copy. | ||
62 | + | ||
63 | + 3. Object Code Incorporating Material from Library Header Files. | ||
64 | + | ||
65 | + The object code form of an Application may incorporate material from | ||
66 | +a header file that is part of the Library. You may convey such object | ||
67 | +code under terms of your choice, provided that, if the incorporated | ||
68 | +material is not limited to numerical parameters, data structure | ||
69 | +layouts and accessors, or small macros, inline functions and templates | ||
70 | +(ten or fewer lines in length), you do both of the following: | ||
71 | + | ||
72 | + a) Give prominent notice with each copy of the object code that the | ||
73 | + Library is used in it and that the Library and its use are | ||
74 | + covered by this License. | ||
75 | + | ||
76 | + b) Accompany the object code with a copy of the GNU GPL and this license | ||
77 | + document. | ||
78 | + | ||
79 | + 4. Combined Works. | ||
80 | + | ||
81 | + You may convey a Combined Work under terms of your choice that, | ||
82 | +taken together, effectively do not restrict modification of the | ||
83 | +portions of the Library contained in the Combined Work and reverse | ||
84 | +engineering for debugging such modifications, if you also do each of | ||
85 | +the following: | ||
86 | + | ||
87 | + a) Give prominent notice with each copy of the Combined Work that | ||
88 | + the Library is used in it and that the Library and its use are | ||
89 | + covered by this License. | ||
90 | + | ||
91 | + b) Accompany the Combined Work with a copy of the GNU GPL and this license | ||
92 | + document. | ||
93 | + | ||
94 | + c) For a Combined Work that displays copyright notices during | ||
95 | + execution, include the copyright notice for the Library among | ||
96 | + these notices, as well as a reference directing the user to the | ||
97 | + copies of the GNU GPL and this license document. | ||
98 | + | ||
99 | + d) Do one of the following: | ||
100 | + | ||
101 | + 0) Convey the Minimal Corresponding Source under the terms of this | ||
102 | + License, and the Corresponding Application Code in a form | ||
103 | + suitable for, and under terms that permit, the user to | ||
104 | + recombine or relink the Application with a modified version of | ||
105 | + the Linked Version to produce a modified Combined Work, in the | ||
106 | + manner specified by section 6 of the GNU GPL for conveying | ||
107 | + Corresponding Source. | ||
108 | + | ||
109 | + 1) Use a suitable shared library mechanism for linking with the | ||
110 | + Library. A suitable mechanism is one that (a) uses at run time | ||
111 | + a copy of the Library already present on the user's computer | ||
112 | + system, and (b) will operate properly with a modified version | ||
113 | + of the Library that is interface-compatible with the Linked | ||
114 | + Version. | ||
115 | + | ||
116 | + e) Provide Installation Information, but only if you would otherwise | ||
117 | + be required to provide such information under section 6 of the | ||
118 | + GNU GPL, and only to the extent that such information is | ||
119 | + necessary to install and execute a modified version of the | ||
120 | + Combined Work produced by recombining or relinking the | ||
121 | + Application with a modified version of the Linked Version. (If | ||
122 | + you use option 4d0, the Installation Information must accompany | ||
123 | + the Minimal Corresponding Source and Corresponding Application | ||
124 | + Code. If you use option 4d1, you must provide the Installation | ||
125 | + Information in the manner specified by section 6 of the GNU GPL | ||
126 | + for conveying Corresponding Source.) | ||
127 | + | ||
128 | + 5. Combined Libraries. | ||
129 | + | ||
130 | + You may place library facilities that are a work based on the | ||
131 | +Library side by side in a single library together with other library | ||
132 | +facilities that are not Applications and are not covered by this | ||
133 | +License, and convey such a combined library under terms of your | ||
134 | +choice, if you do both of the following: | ||
135 | + | ||
136 | + a) Accompany the combined library with a copy of the same work based | ||
137 | + on the Library, uncombined with any other library facilities, | ||
138 | + conveyed under the terms of this License. | ||
139 | + | ||
140 | + b) Give prominent notice with the combined library that part of it | ||
141 | + is a work based on the Library, and explaining where to find the | ||
142 | + accompanying uncombined form of the same work. | ||
143 | + | ||
144 | + 6. Revised Versions of the GNU Lesser General Public License. | ||
145 | + | ||
146 | + The Free Software Foundation may publish revised and/or new versions | ||
147 | +of the GNU Lesser General Public License from time to time. Such new | ||
148 | +versions will be similar in spirit to the present version, but may | ||
149 | +differ in detail to address new problems or concerns. | ||
150 | + | ||
151 | + Each version is given a distinguishing version number. If the | ||
152 | +Library as you received it specifies that a certain numbered version | ||
153 | +of the GNU Lesser General Public License "or any later version" | ||
154 | +applies to it, you have the option of following the terms and | ||
155 | +conditions either of that published version or of any later version | ||
156 | +published by the Free Software Foundation. If the Library as you | ||
157 | +received it does not specify a version number of the GNU Lesser | ||
158 | +General Public License, you may choose any version of the GNU Lesser | ||
159 | +General Public License ever published by the Free Software Foundation. | ||
160 | + | ||
161 | + If the Library as you received it specifies that a proxy can decide | ||
162 | +whether future versions of the GNU Lesser General Public License shall | ||
163 | +apply, that proxy's public statement of acceptance of any version is | ||
164 | +permanent authorization for you to choose that version for the | ||
165 | +Library. |
pacotes/proj4php-proj4php5.2/src/proj4php/WSProj4PHP_1.0.php
0 → 100644
@@ -0,0 +1,104 @@ | @@ -0,0 +1,104 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +include_once("proj4php.php"); | ||
4 | + | ||
5 | +$error = false; | ||
6 | + | ||
7 | +/** | ||
8 | + * Geometry-Points | ||
9 | + */ | ||
10 | +if( isset( $_GET['GEOM'] ) ) { | ||
11 | + list($x, $y) = explode( ' ', $_GET['GEOM'] ); | ||
12 | +} else { | ||
13 | + if( isset( $_GET['x'] ) ) { | ||
14 | + $x = $_GET['x']; | ||
15 | + } | ||
16 | + else | ||
17 | + $error = true; | ||
18 | + | ||
19 | + if( isset( $_GET['y'] ) ) { | ||
20 | + $y = $_GET['y']; | ||
21 | + } | ||
22 | + else | ||
23 | + $error = true; | ||
24 | +} | ||
25 | + | ||
26 | +/** | ||
27 | + * Source-CRS | ||
28 | + */ | ||
29 | +if( isset( $_GET['SOURCECRS'] ) ) { | ||
30 | + $srcProjection = str_replace( '::', ':', $_GET['SOURCECRS'] ); | ||
31 | +} else if( isset( $_GET['projectionxy'] ) ) { | ||
32 | + $srcProjection = $_GET['projectionxy']; | ||
33 | + $srcProjection = str_replace( '::', ':', $srcProjection ); | ||
34 | +} | ||
35 | +else | ||
36 | + $srcProjection = 'EPSG:2154'; | ||
37 | + | ||
38 | +/** | ||
39 | + * Target-CRS | ||
40 | + */ | ||
41 | +if( isset( $_GET['TARGETCRS'] ) ) { | ||
42 | + $tgtProjection = str_replace( '::', ':', $_GET['TARGETCRS'] ); | ||
43 | +} else if( isset( $_GET['projection'] ) ) { | ||
44 | + $tgtProjection = $_GET['projection']; | ||
45 | + $tgtProjection = str_replace( '::', ':', $tgtProjection ); | ||
46 | +} | ||
47 | +else | ||
48 | + $tgtProjection = 'EPSG:4326'; | ||
49 | + | ||
50 | +/** | ||
51 | + * Format | ||
52 | + */ | ||
53 | +if( isset( $_GET['format'] ) ) { | ||
54 | + $format = $_GET['format']; | ||
55 | + if( !($format == 'xml' || $format == 'json') ) | ||
56 | + $error = true; | ||
57 | +} | ||
58 | +else | ||
59 | + $format = 'xml'; | ||
60 | + | ||
61 | + | ||
62 | +$proj4 = new Proj4php(); | ||
63 | +$projsource = new Proj4phpProj( $srcProjection, $proj4 ); | ||
64 | +$projdest = new Proj4phpProj( $tgtProjection, $proj4 ); | ||
65 | + | ||
66 | +// check the projections | ||
67 | +if( Proj4php::$defs[$srcProjection] == Proj4php::$defs['WGS84'] && $srcProjection != 'EPSG:4326' ) | ||
68 | + $error = true; | ||
69 | +if( Proj4php::$defs[$tgtProjection] == Proj4php::$defs['WGS84'] && $tgtProjection != 'EPSG:4326' ) | ||
70 | + $error = true; | ||
71 | + | ||
72 | +if( $error === true ) { | ||
73 | + if( $format == 'json' ) { | ||
74 | + echo "{\"status\":\"error\", \"erreur\": {\"code\": 2, \"message\": \"Wrong parameters.\"} }"; | ||
75 | + exit; | ||
76 | + } else { | ||
77 | + echo "<reponse>"; | ||
78 | + echo " <erreur>"; | ||
79 | + echo " <code>2</code>"; | ||
80 | + echo " <message>Wrong parameters</message>"; | ||
81 | + echo " </erreur>"; | ||
82 | + echo "</reponse>"; | ||
83 | + exit; | ||
84 | + } | ||
85 | +} | ||
86 | + | ||
87 | +$pointSrc = new proj4phpPoint( $x, $y ); | ||
88 | +$pointDest = $proj4->transform( $projsource, $projdest, $pointSrc ); | ||
89 | + | ||
90 | +$tgtProjection = str_replace( ':', '::', $tgtProjection ); | ||
91 | + | ||
92 | +if( $format == 'json' ) { | ||
93 | + echo "{\"status\" :\"success\", \"point\" : {\"x\":" . $pointDest->x . ", \"y\":" . $pointDest->y . ",\"projection\" :\"" . $tgtProjection . "\"}}"; | ||
94 | + exit; | ||
95 | +} else { | ||
96 | + header ("Content-Type:text/xml"); | ||
97 | + echo "<reponse>"; | ||
98 | + echo "<point>"; | ||
99 | + echo "<x>" . $pointDest->x . "</x>"; | ||
100 | + echo "<y>" . $pointDest->y . "</y>"; | ||
101 | + echo "<projection>" . $tgtProjection . "</projection>"; | ||
102 | + echo "</point>"; | ||
103 | + echo "</reponse>"; | ||
104 | +} | ||
0 | \ No newline at end of file | 105 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102757.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG102758.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG2154.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG21781.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG25832.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG25833.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG26591.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG26912.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27200.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27563.php
0 → 100644
@@ -0,0 +1,2 @@ | @@ -0,0 +1,2 @@ | ||
1 | +<?php | ||
2 | +Proj4php::$defs["EPSG:27563"]="+title=NTF (Paris)/Lambert Sud France +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs "; |
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG27571.php
0 → 100644
@@ -0,0 +1,2 @@ | @@ -0,0 +1,2 @@ | ||
1 | +<?php | ||
2 | +Proj4php::$defs["EPSG:27571"] = "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"; | ||
0 | \ No newline at end of file | 3 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31370.php
0 → 100644
@@ -0,0 +1,2 @@ | @@ -0,0 +1,2 @@ | ||
1 | +<?php | ||
2 | +Proj4php::$defs["EPSG:31370"] = "+proj=lcc +lat_1=51.16666723333334 +lat_2=49.83333389999999 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-99.1,53.3,-112.5,0.419,-0.83,1.885,-1.0 +units=m +no_defs"; | ||
0 | \ No newline at end of file | 3 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31467.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG31468.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG41001.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4139.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4181.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG42304.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4272.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG4302.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG5514.php
0 → 100644
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG900913.php
0 → 100644
@@ -0,0 +1,6 @@ | @@ -0,0 +1,6 @@ | ||
1 | +<?php | ||
2 | +// Google Mercator projection | ||
3 | +// Used in combination with GoogleMercator layer type in OpenLayers | ||
4 | +//+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 | ||
5 | + | ||
6 | +Proj4php::$defs["EPSG:900913"]= "+title= Google Mercator EPSG:900913 +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"; |
pacotes/proj4php-proj4php5.2/src/proj4php/defs/EPSG900913.txt
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +// Google Mercator projection | ||
2 | +// Used in combination with GoogleMercator layer type in OpenLayers | ||
3 | +//+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 | ||
4 | + | ||
5 | +csList.EPSG900913= "\ | ||
6 | + +title= Google Mercator EPSG:900913\ | ||
7 | + +proj=merc +a=6378137 +b=6378137 \ | ||
8 | + +lat_ts=0.0 +lon_0=0.0 \ | ||
9 | + +x_0=0.0 +y_0=0 +k=1.0 \ | ||
10 | + +units=m +nadgrids=@null +no_defs \ | ||
11 | +"; |
pacotes/proj4php-proj4php5.2/src/proj4php/defs/GOOGLE.php
0 → 100644
@@ -0,0 +1,3 @@ | @@ -0,0 +1,3 @@ | ||
1 | +<?php | ||
2 | +Proj4php::$defs["GOOGLE"]="+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"; | ||
3 | +Proj4php::$defs["EPSG:900913"]=Proj4php::$defs["GOOGLE"]; | ||
0 | \ No newline at end of file | 4 | \ No newline at end of file |
@@ -0,0 +1,418 @@ | @@ -0,0 +1,418 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Simple conversion from javascript to PHP of Proj4php by Mike Adair madairATdmsolutions.ca and Richard Greenwood rich@greenwoodmap.com | ||
6 | + * | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +$dir = dirname( __FILE__ ); | ||
10 | + | ||
11 | +require_once($dir . "/proj4phpProj.php"); | ||
12 | +require_once($dir . "/proj4phpCommon.php"); | ||
13 | +require_once($dir . "/proj4phpDatum.php"); | ||
14 | +require_once($dir . "/proj4phpLongLat.php"); | ||
15 | +require_once($dir . "/proj4phpPoint.php"); | ||
16 | + | ||
17 | +class Proj4php { | ||
18 | + protected $defaultDatum = 'WGS84'; | ||
19 | + public static $ellipsoid = array( ); | ||
20 | + public static $common = null; | ||
21 | + public static $datum = array( ); | ||
22 | + public static $defs = array( ); | ||
23 | + public static $wktProjections = array( ); | ||
24 | + public static $WGS84 = null; | ||
25 | + public static $primeMeridian = array( ); | ||
26 | + public static $proj = array( ); | ||
27 | + public $msg = ''; | ||
28 | + /** | ||
29 | + * Property: defsLookupService | ||
30 | + * service to retreive projection definition parameters from | ||
31 | + */ | ||
32 | + public static $defsLookupService = 'http://spatialreference.org/ref'; | ||
33 | + | ||
34 | + /** | ||
35 | + Proj4php.defs is a collection of coordinate system definition objects in the | ||
36 | + PROJ.4 command line format. | ||
37 | + Generally a def is added by means of a separate .js file for example: | ||
38 | + | ||
39 | + <SCRIPT type="text/javascript" src="defs/EPSG26912.js"></SCRIPT> | ||
40 | + | ||
41 | + def is a CS definition in PROJ.4 WKT format, for example: | ||
42 | + +proj="tmerc" //longlat, etc. | ||
43 | + +a=majorRadius | ||
44 | + +b=minorRadius | ||
45 | + +lat0=somenumber | ||
46 | + +long=somenumber | ||
47 | + */ | ||
48 | + protected function initDefs() { | ||
49 | + // These are so widely used, we'll go ahead and throw them in | ||
50 | + // without requiring a separate .js file | ||
51 | + self::$defs['WGS84'] = "+title=long/lat:WGS84 +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"; | ||
52 | + self::$defs['EPSG:4326'] = "+title=long/lat:WGS84 +proj=longlat +a=6378137.0 +b=6356752.31424518 +ellps=WGS84 +datum=WGS84 +units=degrees"; | ||
53 | + self::$defs['EPSG:4269'] = "+title=long/lat:NAD83 +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"; | ||
54 | + 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"; | ||
55 | + self::$defs['EPSG:3785'] = self::$defs['EPSG:3875']; | ||
56 | + self::$defs['GOOGLE'] = self::$defs['EPSG:3875']; | ||
57 | + self::$defs['EPSG:900913'] = self::$defs['EPSG:3875']; | ||
58 | + self::$defs['EPSG:102113'] = self::$defs['EPSG:3875']; | ||
59 | + } | ||
60 | + | ||
61 | + //lookup table to go from the projection name in WKT to the Proj4php projection name | ||
62 | + //build this out as required | ||
63 | + protected function initWKTProjections() { | ||
64 | + self::$wktProjections["Lambert Tangential Conformal Conic Projection"] = "lcc"; | ||
65 | + self::$wktProjections["Mercator"] = "merc"; | ||
66 | + self::$wktProjections["Mercator_1SP"] = "merc"; | ||
67 | + self::$wktProjections["Transverse_Mercator"] = "tmerc"; | ||
68 | + self::$wktProjections["Transverse Mercator"] = "tmerc"; | ||
69 | + self::$wktProjections["Lambert Azimuthal Equal Area"] = "laea"; | ||
70 | + self::$wktProjections["Universal Transverse Mercator System"] = "utm"; | ||
71 | + } | ||
72 | + | ||
73 | + protected function initDatum() { | ||
74 | + self::$datum["WGS84"] = array( 'towgs84' => "0,0,0", 'ellipse' => "WGS84", 'datumName' => "WGS84" ); | ||
75 | + self::$datum["GGRS87"] = array( 'towgs84' => "-199.87,74.79,246.62", 'ellipse' => "GRS80", 'datumName' => "Greek_Geodetic_Reference_System_1987" ); | ||
76 | + self::$datum["NAD83"] = array( 'towgs84' => "0,0,0", 'ellipse' => "GRS80", 'datumName' => "North_American_Datum_1983" ); | ||
77 | + self::$datum["NAD27"] = array( 'nadgrids' => "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", 'ellipse' => "clrk66", 'datumName' => "North_American_Datum_1927" ); | ||
78 | + self::$datum["potsdam"] = array( 'towgs84' => "606.0,23.0,413.0", 'ellipse' => "bessel", 'datumName' => "Potsdam Rauenberg 1950 DHDN" ); | ||
79 | + self::$datum["carthage"] = array( 'towgs84' => "-263.0,6.0,431.0", 'ellipse' => "clark80", 'datumName' => "Carthage 1934 Tunisia" ); | ||
80 | + self::$datum["hermannskogel"] = array( 'towgs84' => "653.0,-212.0,449.0", 'ellipse' => "bessel", 'datumName' => "Hermannskogel" ); | ||
81 | + 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" ); | ||
82 | + 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" ); | ||
83 | + self::$datum["OSGB36"] = array( 'towgs84' => "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", 'ellipse' => "airy", 'datumName' => "Airy 1830" ); | ||
84 | + } | ||
85 | + | ||
86 | + protected function initEllipsoid() { | ||
87 | + self::$ellipsoid["MERIT"] = array( 'a' => 6378137.0, 'rf' => 298.257, 'ellipseName' => "MERIT 1983" ); | ||
88 | + self::$ellipsoid["SGS85"] = array( 'a' => 6378136.0, 'rf' => 298.257, 'ellipseName' => "Soviet Geodetic System 85" ); | ||
89 | + self::$ellipsoid["GRS80"] = array( 'a' => 6378137.0, 'rf' => 298.257222101, 'ellipseName' => "GRS 1980(IUGG, 1980)" ); | ||
90 | + self::$ellipsoid["IAU76"] = array( 'a' => 6378140.0, 'rf' => 298.257, 'ellipseName' => "IAU 1976" ); | ||
91 | + self::$ellipsoid["airy"] = array( 'a' => 6377563.396, 'b' => 6356256.910, 'ellipseName' => "Airy 1830" ); | ||
92 | + self::$ellipsoid["APL4."] = array( 'a' => 6378137, 'rf' => 298.25, 'ellipseName' => "Appl. Physics. 1965" ); | ||
93 | + self::$ellipsoid["NWL9D"] = array( 'a' => 6378145.0, 'rf' => 298.25, 'ellipseName' => "Naval Weapons Lab., 1965" ); | ||
94 | + self::$ellipsoid["mod_airy"] = array( 'a' => 6377340.189, 'b' => 6356034.446, 'ellipseName' => "Modified Airy" ); | ||
95 | + self::$ellipsoid["andrae"] = array( 'a' => 6377104.43, 'rf' => 300.0, 'ellipseName' => "Andrae 1876 (Den., Iclnd.)" ); | ||
96 | + self::$ellipsoid["aust_SA"] = array( 'a' => 6378160.0, 'rf' => 298.25, 'ellipseName' => "Australian Natl & S. Amer. 1969" ); | ||
97 | + self::$ellipsoid["GRS67"] = array( 'a' => 6378160.0, 'rf' => 298.2471674270, 'ellipseName' => "GRS 67(IUGG 1967)" ); | ||
98 | + self::$ellipsoid["bessel"] = array( 'a' => 6377397.155, 'rf' => 299.1528128, 'ellipseName' => "Bessel 1841" ); | ||
99 | + self::$ellipsoid["bess_nam"] = array( 'a' => 6377483.865, 'rf' => 299.1528128, 'ellipseName' => "Bessel 1841 (Namibia)" ); | ||
100 | + self::$ellipsoid["clrk66"] = array( 'a' => 6378206.4, 'b' => 6356583.8, 'ellipseName' => "Clarke 1866" ); | ||
101 | + self::$ellipsoid["clrk80"] = array( 'a' => 6378249.145, 'rf' => 293.4663, 'ellipseName' => "Clarke 1880 mod." ); | ||
102 | + self::$ellipsoid["CPM"] = array( 'a' => 6375738.7, 'rf' => 334.29, 'ellipseName' => "Comm. des Poids et Mesures 1799" ); | ||
103 | + self::$ellipsoid["delmbr"] = array( 'a' => 6376428.0, 'rf' => 311.5, 'ellipseName' => "Delambre 1810 (Belgium)" ); | ||
104 | + self::$ellipsoid["engelis"] = array( 'a' => 6378136.05, 'rf' => 298.2566, 'ellipseName' => "Engelis 1985" ); | ||
105 | + self::$ellipsoid["evrst30"] = array( 'a' => 6377276.345, 'rf' => 300.8017, 'ellipseName' => "Everest 1830" ); | ||
106 | + self::$ellipsoid["evrst48"] = array( 'a' => 6377304.063, 'rf' => 300.8017, 'ellipseName' => "Everest 1948" ); | ||
107 | + self::$ellipsoid["evrst56"] = array( 'a' => 6377301.243, 'rf' => 300.8017, 'ellipseName' => "Everest 1956" ); | ||
108 | + self::$ellipsoid["evrst69"] = array( 'a' => 6377295.664, 'rf' => 300.8017, 'ellipseName' => "Everest 1969" ); | ||
109 | + self::$ellipsoid["evrstSS"] = array( 'a' => 6377298.556, 'rf' => 300.8017, 'ellipseName' => "Everest (Sabah & Sarawak)" ); | ||
110 | + self::$ellipsoid["fschr60"] = array( 'a' => 6378166.0, 'rf' => 298.3, 'ellipseName' => "Fischer (Mercury Datum) 1960" ); | ||
111 | + self::$ellipsoid["fschr60m"] = array( 'a' => 6378155.0, 'rf' => 298.3, 'ellipseName' => "Fischer 1960" ); | ||
112 | + self::$ellipsoid["fschr68"] = array( 'a' => 6378150.0, 'rf' => 298.3, 'ellipseName' => "Fischer 1968" ); | ||
113 | + self::$ellipsoid["helmert"] = array( 'a' => 6378200.0, 'rf' => 298.3, 'ellipseName' => "Helmert 1906" ); | ||
114 | + self::$ellipsoid["hough"] = array( 'a' => 6378270.0, 'rf' => 297.0, 'ellipseName' => "Hough" ); | ||
115 | + self::$ellipsoid["intl"] = array( 'a' => 6378388.0, 'rf' => 297.0, 'ellipseName' => "International 1909 (Hayford)" ); | ||
116 | + self::$ellipsoid["kaula"] = array( 'a' => 6378163.0, 'rf' => 298.24, 'ellipseName' => "Kaula 1961" ); | ||
117 | + self::$ellipsoid["lerch"] = array( 'a' => 6378139.0, 'rf' => 298.257, 'ellipseName' => "Lerch 1979" ); | ||
118 | + self::$ellipsoid["mprts"] = array( 'a' => 6397300.0, 'rf' => 191.0, 'ellipseName' => "Maupertius 1738" ); | ||
119 | + self::$ellipsoid["new_intl"] = array( 'a' => 6378157.5, 'b' => 6356772.2, 'ellipseName' => "New International 1967" ); | ||
120 | + self::$ellipsoid["plessis"] = array( 'a' => 6376523.0, 'rf' => 6355863.0, 'ellipseName' => "Plessis 1817 (France)" ); | ||
121 | + self::$ellipsoid["krass"] = array( 'a' => 6378245.0, 'rf' => 298.3, 'ellipseName' => "Krassovsky, 1942" ); | ||
122 | + self::$ellipsoid["SEasia"] = array( 'a' => 6378155.0, 'b' => 6356773.3205, 'ellipseName' => "Southeast Asia" ); | ||
123 | + self::$ellipsoid["walbeck"] = array( 'a' => 6376896.0, 'b' => 6355834.8467, 'ellipseName' => "Walbeck" ); | ||
124 | + self::$ellipsoid["WGS60"] = array( 'a' => 6378165.0, 'rf' => 298.3, 'ellipseName' => "WGS 60" ); | ||
125 | + self::$ellipsoid["WGS66"] = array( 'a' => 6378145.0, 'rf' => 298.25, 'ellipseName' => "WGS 66" ); | ||
126 | + self::$ellipsoid["WGS72"] = array( 'a' => 6378135.0, 'rf' => 298.26, 'ellipseName' => "WGS 72" ); | ||
127 | + self::$ellipsoid["WGS84"] = array( 'a' => 6378137.0, 'rf' => 298.257223563, 'ellipseName' => "WGS 84" ); | ||
128 | + self::$ellipsoid["sphere"] = array( 'a' => 6370997.0, 'b' => 6370997.0, 'ellipseName' => "Normal Sphere (r=6370997)" ); | ||
129 | + } | ||
130 | + | ||
131 | + protected function initPrimeMeridian() { | ||
132 | + self::$primeMeridian["greenwich"] = '0.0'; //"0dE", | ||
133 | + self::$primeMeridian["lisbon"] = -9.131906111111; //"9d07'54.862\"W", | ||
134 | + self::$primeMeridian["paris"] = 2.337229166667; //"2d20'14.025\"E", | ||
135 | + self::$primeMeridian["bogota"] = -74.080916666667; //"74d04'51.3\"W", | ||
136 | + self::$primeMeridian["madrid"] = -3.687938888889; //"3d41'16.58\"W", | ||
137 | + self::$primeMeridian["rome"] = 12.452333333333; //"12d27'8.4\"E", | ||
138 | + self::$primeMeridian["bern"] = 7.439583333333; //"7d26'22.5\"E", | ||
139 | + self::$primeMeridian["jakarta"] = 106.807719444444; //"106d48'27.79\"E", | ||
140 | + self::$primeMeridian["ferro"] = -17.666666666667; //"17d40'W", | ||
141 | + self::$primeMeridian["brussels"] = 4.367975; //"4d22'4.71\"E", | ||
142 | + self::$primeMeridian["stockholm"] = 18.058277777778; //"18d3'29.8\"E", | ||
143 | + self::$primeMeridian["athens"] = 23.7163375; //"23d42'58.815\"E", | ||
144 | + self::$primeMeridian["oslo"] = 10.722916666667; //"10d43'22.5\"E" | ||
145 | + } | ||
146 | + | ||
147 | + /** | ||
148 | + * | ||
149 | + */ | ||
150 | + public function __construct() { | ||
151 | + | ||
152 | + $this->initWKTProjections(); | ||
153 | + $this->initDefs(); | ||
154 | + $this->initDatum(); | ||
155 | + $this->initEllipsoid(); | ||
156 | + $this->initPrimeMeridian(); | ||
157 | + | ||
158 | + self::$proj['longlat'] = new proj4phpLongLat(); | ||
159 | + self::$proj['identity'] = new proj4phpLongLat(); | ||
160 | + self::$common = new proj4phpCommon(); | ||
161 | + self::$WGS84 = new Proj4phpProj( 'WGS84' ); | ||
162 | + } | ||
163 | + | ||
164 | + /** | ||
165 | + * Method: transform(source, dest, point) | ||
166 | + * Transform a point coordinate from one map projection to another. This is | ||
167 | + * really the only public method you should need to use. | ||
168 | + * | ||
169 | + * Parameters: | ||
170 | + * source - {Proj4phpProj} source map projection for the transformation | ||
171 | + * dest - {Proj4phpProj} destination map projection for the transformation | ||
172 | + * point - {Object} point to transform, may be geodetic (long, lat) or | ||
173 | + * projected Cartesian (x,y), but should always have x,y properties. | ||
174 | + */ | ||
175 | + public function transform( $source, $dest, $point) { | ||
176 | + $this->msg = ''; | ||
177 | + if( !$source->readyToUse ) { | ||
178 | + self::reportError( "Proj4php initialization for:" . $source->srsCode . " not yet complete" ); | ||
179 | + return $point; | ||
180 | + } | ||
181 | + if( !$dest->readyToUse ) { | ||
182 | + self::reportError( "Proj4php initialization for:" . $dest->srsCode . " not yet complete" ); | ||
183 | + return $point; | ||
184 | + } | ||
185 | + | ||
186 | + // DGR, 2010/11/12 | ||
187 | + | ||
188 | + if( $source->axis != "enu" ) { | ||
189 | + $this->adjust_axis( $source, false, $point ); | ||
190 | + } | ||
191 | + | ||
192 | + // Transform source points to long/lat, if they aren't already. | ||
193 | + if( $source->projName == "longlat" ) { | ||
194 | + $point->x *= Proj4php::$common->D2R; // convert degrees to radians | ||
195 | + $point->y *= Proj4php::$common->D2R; | ||
196 | + } else { | ||
197 | + if( isset($source->to_meter) ) | ||
198 | + { | ||
199 | + $point->x *= $source->to_meter; | ||
200 | + $point->y *= $source->to_meter; | ||
201 | + } | ||
202 | + $source->inverse( $point ); // Convert Cartesian to longlat | ||
203 | + } | ||
204 | + // Adjust for the prime meridian if necessary | ||
205 | + if( isset( $source->from_greenwich ) ) { | ||
206 | + $point->x += $source->from_greenwich; | ||
207 | + } | ||
208 | + | ||
209 | + // Convert datums if needed, and if possible. | ||
210 | + $point = $this->datum_transform( $source->datum, $dest->datum, $point ); | ||
211 | + | ||
212 | + // Adjust for the prime meridian if necessary | ||
213 | + if( isset( $dest->from_greenwich ) ) { | ||
214 | + $point->x -= $dest->from_greenwich; | ||
215 | + } | ||
216 | + | ||
217 | + if( $dest->projName == "longlat" ) { | ||
218 | + // convert radians to decimal degrees | ||
219 | + $point->x *= Proj4php::$common->R2D; | ||
220 | + $point->y *= Proj4php::$common->R2D; | ||
221 | + } else { // else project | ||
222 | + $dest->forward( $point ); | ||
223 | + if( isset($dest->to_meter) ) { | ||
224 | + $point->x /= $dest->to_meter; | ||
225 | + $point->y /= $dest->to_meter; | ||
226 | + } | ||
227 | + } | ||
228 | + | ||
229 | + // DGR, 2010/11/12 | ||
230 | + if( $dest->axis != "enu" ) { | ||
231 | + $this->adjust_axis( $dest, true, $point ); | ||
232 | + } | ||
233 | + | ||
234 | + // Nov 2014 - changed Werner Schäffer | ||
235 | + // clone point to avoid a lot of problems | ||
236 | + return (clone $point); | ||
237 | + | ||
238 | + } | ||
239 | + | ||
240 | + /** datum_transform() | ||
241 | + source coordinate system definition, | ||
242 | + destination coordinate system definition, | ||
243 | + point to transform in geodetic coordinates (long, lat, height) | ||
244 | + */ | ||
245 | + public function datum_transform( $source, $dest, $point ) { | ||
246 | + | ||
247 | + // Short cut if the datums are identical. | ||
248 | + if( $source->compare_datums( $dest ) ) { | ||
249 | + return $point; // in this case, zero is sucess, | ||
250 | + // whereas cs_compare_datums returns 1 to indicate TRUE | ||
251 | + // confusing, should fix this | ||
252 | + } | ||
253 | + | ||
254 | + // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest | ||
255 | + if( $source->datum_type == Proj4php::$common->PJD_NODATUM | ||
256 | + || $dest->datum_type == Proj4php::$common->PJD_NODATUM ) { | ||
257 | + return $point; | ||
258 | + } | ||
259 | + | ||
260 | + /* | ||
261 | + // If this datum requires grid shifts, then apply it to geodetic coordinates. | ||
262 | + if( $source->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { | ||
263 | + throw(new Exception( "ERROR: Grid shift transformations are not implemented yet." )); | ||
264 | + } | ||
265 | + | ||
266 | + if( $dest->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { | ||
267 | + throw(new Exception( "ERROR: Grid shift transformations are not implemented yet." )); | ||
268 | + } | ||
269 | + */ | ||
270 | + | ||
271 | + // Do we need to go through geocentric coordinates? | ||
272 | + if( $source->es != $dest->es || $source->a != $dest->a | ||
273 | + || $source->datum_type == Proj4php::$common->PJD_3PARAM | ||
274 | + || $source->datum_type == Proj4php::$common->PJD_7PARAM | ||
275 | + || $dest->datum_type == Proj4php::$common->PJD_3PARAM | ||
276 | + || $dest->datum_type == Proj4php::$common->PJD_7PARAM ) { | ||
277 | + | ||
278 | + // Convert to geocentric coordinates. | ||
279 | + $source->geodetic_to_geocentric( $point ); | ||
280 | + // CHECK_RETURN; | ||
281 | + // Convert between datums | ||
282 | + if( $source->datum_type == Proj4php::$common->PJD_3PARAM || $source->datum_type == Proj4php::$common->PJD_7PARAM ) { | ||
283 | + $source->geocentric_to_wgs84( $point ); | ||
284 | + // CHECK_RETURN; | ||
285 | + } | ||
286 | + | ||
287 | + if( $dest->datum_type == Proj4php::$common->PJD_3PARAM || $dest->datum_type == Proj4php::$common->PJD_7PARAM ) { | ||
288 | + $dest->geocentric_from_wgs84( $point ); | ||
289 | + // CHECK_RETURN; | ||
290 | + } | ||
291 | + | ||
292 | + // Convert back to geodetic coordinates | ||
293 | + $dest->geocentric_to_geodetic( $point ); | ||
294 | + // CHECK_RETURN; | ||
295 | + } | ||
296 | + | ||
297 | + // Apply grid shift to destination if required | ||
298 | + /* | ||
299 | + if( $dest->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { | ||
300 | + throw(new Exception( "ERROR: Grid shift transformations are not implemented yet." )); | ||
301 | + // pj_apply_gridshift( pj_param(dest.params,"snadgrids").s, 1, point); | ||
302 | + // CHECK_RETURN; | ||
303 | + } | ||
304 | + */ | ||
305 | + return $point; | ||
306 | + } | ||
307 | + | ||
308 | + | ||
309 | + /** | ||
310 | + * Function: adjust_axis | ||
311 | + * Normalize or de-normalized the x/y/z axes. The normal form is "enu" | ||
312 | + * (easting, northing, up). | ||
313 | + * Parameters: | ||
314 | + * crs {Proj4php.Proj} the coordinate reference system | ||
315 | + * denorm {Boolean} when false, normalize | ||
316 | + * point {Object} the coordinates to adjust | ||
317 | + */ | ||
318 | + public function adjust_axis( $crs, $denorm, $point ) { | ||
319 | + | ||
320 | + $xin = $point->x; | ||
321 | + $yin = $point->y; | ||
322 | + $zin = isset( $point->z ) ? $point->z : 0.0; | ||
323 | + #$v; | ||
324 | + #$t; | ||
325 | + for( $i = 0; $i < 3; $i++ ) { | ||
326 | + if( $denorm && $i == 2 && !isset( $point->z ) ) { | ||
327 | + continue; | ||
328 | + } | ||
329 | + if( $i == 0 ) { | ||
330 | + $v = $xin; | ||
331 | + $t = 'x'; | ||
332 | + } else if( $i == 1 ) { | ||
333 | + $v = $yin; | ||
334 | + $t = 'y'; | ||
335 | + } else { | ||
336 | + $v = $zin; | ||
337 | + $t = 'z'; | ||
338 | + } | ||
339 | + switch( $crs->axis[$i] ) { | ||
340 | + case 'e': | ||
341 | + $point[$t] = $v; | ||
342 | + break; | ||
343 | + case 'w': | ||
344 | + $point[$t] = -$v; | ||
345 | + break; | ||
346 | + case 'n': | ||
347 | + $point[$t] = $v; | ||
348 | + break; | ||
349 | + case 's': | ||
350 | + $point[$t] = -$v; | ||
351 | + break; | ||
352 | + case 'u': | ||
353 | + if( isset( $point[$t] ) ) { | ||
354 | + $point->z = $v; | ||
355 | + } | ||
356 | + break; | ||
357 | + case 'd': | ||
358 | + if( isset( $point[$t] ) ) { | ||
359 | + $point->z = -$v; | ||
360 | + } | ||
361 | + break; | ||
362 | + default : | ||
363 | + throw(new Exception( "ERROR: unknow axis (" . $crs->axis[$i] . ") - check definition of " . $crs->projName )); | ||
364 | + return null; | ||
365 | + } | ||
366 | + } | ||
367 | + return $point; | ||
368 | + } | ||
369 | + | ||
370 | + /** | ||
371 | + * Function: reportError | ||
372 | + * An internal method to report errors back to user. | ||
373 | + * Override this in applications to report error messages or throw exceptions. | ||
374 | + */ | ||
375 | + public static function reportError( $msg ) { | ||
376 | + throw(new Exception($msg)); | ||
377 | + } | ||
378 | + | ||
379 | + /** | ||
380 | + * Function : loadScript | ||
381 | + * adapted from original. PHP is simplier. | ||
382 | + */ | ||
383 | + public static function loadScript( $filename, $onload = null, $onfail = null, $loadCheck = null ) { | ||
384 | + | ||
385 | + if( stripos($filename, 'http://') !== false ) { | ||
386 | + return @file_get_contents($filename); | ||
387 | + } | ||
388 | + elseif( file_exists( $filename ) ) { | ||
389 | + require_once($filename); | ||
390 | + return true; | ||
391 | + } | ||
392 | + else { | ||
393 | + throw(new Exception( "File $filename could not be found or was not able to be loaded." )); | ||
394 | + } | ||
395 | + } | ||
396 | + | ||
397 | + /** | ||
398 | + * Function: extend | ||
399 | + * Copy all properties of a source object to a destination object. Modifies | ||
400 | + * the passed in destination object. Any properties on the source object | ||
401 | + * that are set to undefined will not be (re)set on the destination object. | ||
402 | + * | ||
403 | + * Parameters: | ||
404 | + * destination - {Object} The object that will be modified | ||
405 | + * source - {Object} The object with properties to be set on the destination | ||
406 | + * | ||
407 | + * Returns: | ||
408 | + * {Object} The destination object. | ||
409 | + */ | ||
410 | + public static function extend( $destination, $source ) { | ||
411 | + if( $source != null ) | ||
412 | + foreach( $source as $key => $value ) { | ||
413 | + $destination->$key = $value; | ||
414 | + } | ||
415 | + return $destination; | ||
416 | + } | ||
417 | + | ||
418 | +} | ||
0 | \ No newline at end of file | 419 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpCommon.php
0 → 100644
@@ -0,0 +1,389 @@ | @@ -0,0 +1,389 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | + * Author : Julien Moquet | ||
5 | + * | ||
6 | + * Inspired by Proj4js from Mike Adair madairATdmsolutions.ca | ||
7 | + * and Richard Greenwood rich@greenwoodmap.com | ||
8 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
9 | + */ | ||
10 | +class Proj4phpCommon { | ||
11 | + | ||
12 | + public $PI = M_PI; #3.141592653589793238; //Math.PI, | ||
13 | + public $HALF_PI = M_PI_2; #1.570796326794896619; //Math.PI*0.5, | ||
14 | + public $TWO_PI = 6.283185307179586477; //Math.PI*2, | ||
15 | + public $FORTPI = 0.78539816339744833; | ||
16 | + public $R2D = 57.29577951308232088; | ||
17 | + public $D2R = 0.01745329251994329577; | ||
18 | + public $SEC_TO_RAD = 4.84813681109535993589914102357e-6; /* SEC_TO_RAD = Pi/180/3600 */ | ||
19 | + public $EPSLN = 1.0e-10; | ||
20 | + public $MAX_ITER = 20; | ||
21 | + // following constants from geocent.c | ||
22 | + public $COS_67P5 = 0.38268343236508977; /* cosine of 67.5 degrees */ | ||
23 | + public $AD_C = 1.0026000; /* Toms region 1 constant */ | ||
24 | + | ||
25 | + /* datum_type values */ | ||
26 | + public $PJD_UNKNOWN = 0; | ||
27 | + public $PJD_3PARAM = 1; | ||
28 | + public $PJD_7PARAM = 2; | ||
29 | + public $PJD_GRIDSHIFT = 3; | ||
30 | + public $PJD_WGS84 = 4; // WGS84 or equivalent | ||
31 | + public $PJD_NODATUM = 5; // WGS84 or equivalent | ||
32 | + | ||
33 | + const SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms | ||
34 | + | ||
35 | + // ellipoid pj_set_ell.c | ||
36 | + | ||
37 | + public $SIXTH = .1666666666666666667; /* 1/6 */ | ||
38 | + public $RA4 = .04722222222222222222; /* 17/360 */ | ||
39 | + public $RA6 = .02215608465608465608; /* 67/3024 */ | ||
40 | + public $RV4 = .06944444444444444444; /* 5/72 */ | ||
41 | + public $RV6 = .04243827160493827160; /* 55/1296 */ | ||
42 | + | ||
43 | + | ||
44 | + /* meridinal distance for ellipsoid and inverse | ||
45 | + * * 8th degree - accurate to < 1e-5 meters when used in conjuction | ||
46 | + * * with typical major axis values. | ||
47 | + * * Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds. | ||
48 | + */ | ||
49 | + protected $C00 = 1.0; | ||
50 | + protected $C02 = .25; | ||
51 | + protected $C04 = .046875; | ||
52 | + protected $C06 = .01953125; | ||
53 | + protected $C08 = .01068115234375; | ||
54 | + protected $C22 = .75; | ||
55 | + protected $C44 = .46875; | ||
56 | + protected $C46 = .01302083333333333333; | ||
57 | + protected $C48 = .00712076822916666666; | ||
58 | + protected $C66 = .36458333333333333333; | ||
59 | + protected $C68 = .00569661458333333333; | ||
60 | + protected $C88 = .3076171875; | ||
61 | + | ||
62 | + /** | ||
63 | + * Function to compute the constant small m which is the radius of | ||
64 | + * a parallel of latitude, phi, divided by the semimajor axis. | ||
65 | + * | ||
66 | + * @param type $eccent | ||
67 | + * @param type $sinphi | ||
68 | + * @param type $cosphi | ||
69 | + * @return type | ||
70 | + */ | ||
71 | + public function msfnz( $eccent, $sinphi, $cosphi ) { | ||
72 | + | ||
73 | + $con = $eccent * $sinphi; | ||
74 | + | ||
75 | + return $cosphi / (sqrt( 1.0 - $con * $con )); | ||
76 | + } | ||
77 | + | ||
78 | + /** | ||
79 | + * Function to compute the constant small t for use in the forward | ||
80 | + * computations in the Lambert Conformal Conic and the Polar | ||
81 | + * Stereographic projections. | ||
82 | + * | ||
83 | + * @param type $eccent | ||
84 | + * @param type $phi | ||
85 | + * @param type $sinphi | ||
86 | + * @return type | ||
87 | + */ | ||
88 | + public function tsfnz( $eccent, $phi, $sinphi ) { | ||
89 | + | ||
90 | + $con = $eccent * $sinphi; | ||
91 | + $com = 0.5 * $eccent; | ||
92 | + $con = pow( ((1.0 - $con) / (1.0 + $con) ), $com ); | ||
93 | + | ||
94 | + return (tan( .5 * (M_PI_2 - $phi) ) / $con); | ||
95 | + } | ||
96 | + | ||
97 | + /** | ||
98 | + * Function to compute the latitude angle, phi2, for the inverse of the | ||
99 | + * Lambert Conformal Conic and Polar Stereographic projections. | ||
100 | + * | ||
101 | + * rise up an assertion if there is no convergence. | ||
102 | + * | ||
103 | + * @param type $eccent | ||
104 | + * @param type $ts | ||
105 | + * @return type | ||
106 | + */ | ||
107 | + public function phi2z( $eccent, $ts ) { | ||
108 | + | ||
109 | + $eccnth = .5 * $eccent; | ||
110 | + $phi = M_PI_2 - 2 * atan( $ts ); | ||
111 | + | ||
112 | + for( $i = 0; $i <= 15; $i++ ) { | ||
113 | + $con = $eccent * sin( $phi ); | ||
114 | + $dphi = M_PI_2 - 2 * atan( $ts * (pow( ((1.0 - $con) / (1.0 + $con) ), $eccnth )) ) - $phi; | ||
115 | + $phi += $dphi; | ||
116 | + if( abs( $dphi ) <= .0000000001 ) | ||
117 | + return $phi; | ||
118 | + } | ||
119 | + assert( "false; /* phi2z has NoConvergence */" ); | ||
120 | + | ||
121 | + return (-9999); | ||
122 | + } | ||
123 | + | ||
124 | + /** | ||
125 | + * Function to compute constant small q which is the radius of a | ||
126 | + * parallel of latitude, phi, divided by the semimajor axis. | ||
127 | + * | ||
128 | + * @param type $eccent | ||
129 | + * @param type $sinphi | ||
130 | + * @return type | ||
131 | + */ | ||
132 | + public function qsfnz( $eccent, $sinphi ) { | ||
133 | + | ||
134 | + if( $eccent > 1.0e-7 ) { | ||
135 | + | ||
136 | + $con = $eccent * $sinphi; | ||
137 | + | ||
138 | + return (( 1.0 - $eccent * $eccent) * ($sinphi / (1.0 - $con * $con) - (.5 / $eccent) * log( (1.0 - $con) / (1.0 + $con) ))); | ||
139 | + } | ||
140 | + | ||
141 | + return (2.0 * $sinphi); | ||
142 | + } | ||
143 | + | ||
144 | + /** | ||
145 | + * Function to eliminate roundoff errors in asin | ||
146 | + * | ||
147 | + * @param type $x | ||
148 | + * @return type | ||
149 | + */ | ||
150 | + public function asinz( $x ) { | ||
151 | + | ||
152 | + return asin( | ||
153 | + abs( $x ) > 1.0 ? ($x > 1.0 ? 1.0 : -1.0) : $x | ||
154 | + ); | ||
155 | + | ||
156 | + #if( abs( $x ) > 1.0 ) { | ||
157 | + # $x = ($x > 1.0) ? 1.0 : -1.0; | ||
158 | + #} | ||
159 | + #return asin( $x ); | ||
160 | + } | ||
161 | + | ||
162 | + /** | ||
163 | + * following functions from gctpc cproj.c for transverse mercator projections | ||
164 | + * | ||
165 | + * @param type $x | ||
166 | + * @return type | ||
167 | + */ | ||
168 | + public function e0fn( $x ) { | ||
169 | + return (1.0 - 0.25 * $x * (1.0 + $x / 16.0 * (3.0 + 1.25 * $x))); | ||
170 | + } | ||
171 | + | ||
172 | + /** | ||
173 | + * | ||
174 | + * @param type $x | ||
175 | + * @return type | ||
176 | + */ | ||
177 | + public function e1fn( $x ) { | ||
178 | + return (0.375 * $x * (1.0 + 0.25 * $x * (1.0 + 0.46875 * $x))); | ||
179 | + } | ||
180 | + | ||
181 | + /** | ||
182 | + * | ||
183 | + * @param type $x | ||
184 | + * @return type | ||
185 | + */ | ||
186 | + public function e2fn( $x ) { | ||
187 | + return (0.05859375 * $x * $x * (1.0 + 0.75 * $x)); | ||
188 | + } | ||
189 | + | ||
190 | + /** | ||
191 | + * | ||
192 | + * @param type $x | ||
193 | + * @return type | ||
194 | + */ | ||
195 | + public function e3fn( $x ) { | ||
196 | + return ($x * $x * $x * (35.0 / 3072.0)); | ||
197 | + } | ||
198 | + | ||
199 | + /** | ||
200 | + * | ||
201 | + * @param type $e0 | ||
202 | + * @param type $e1 | ||
203 | + * @param type $e2 | ||
204 | + * @param type $e3 | ||
205 | + * @param type $phi | ||
206 | + * @return type | ||
207 | + */ | ||
208 | + public function mlfn( $e0, $e1, $e2, $e3, $phi ) { | ||
209 | + return ($e0 * $phi - $e1 * sin( 2.0 * $phi ) + $e2 * sin( 4.0 * $phi ) - $e3 * sin( 6.0 * $phi )); | ||
210 | + } | ||
211 | + | ||
212 | + /** | ||
213 | + * | ||
214 | + * @param type $esinp | ||
215 | + * @param type $exp | ||
216 | + * @return type | ||
217 | + */ | ||
218 | + public function srat( $esinp, $exp ) { | ||
219 | + return (pow( (1.0 - $esinp) / (1.0 + $esinp), $exp )); | ||
220 | + } | ||
221 | + | ||
222 | + /** | ||
223 | + * Function to return the sign of an argument | ||
224 | + * | ||
225 | + * @param type $x | ||
226 | + * @return type | ||
227 | + */ | ||
228 | + public function sign( $x ) { | ||
229 | + | ||
230 | + return $x < 0.0 ? -1 : 1; | ||
231 | + } | ||
232 | + | ||
233 | + /** | ||
234 | + * Function to adjust longitude to -180 to 180; input in radians | ||
235 | + * | ||
236 | + * @param type $x | ||
237 | + * @return type | ||
238 | + */ | ||
239 | + public function adjust_lon( $x ) { | ||
240 | + | ||
241 | + return (abs( $x ) < M_PI) ? $x : ($x - ($this->sign( $x ) * $this->TWO_PI) ); | ||
242 | + } | ||
243 | + | ||
244 | + /** | ||
245 | + * IGNF - DGR : algorithms used by IGN France | ||
246 | + * Function to adjust latitude to -90 to 90; input in radians | ||
247 | + * | ||
248 | + * @param type $x | ||
249 | + * @return type | ||
250 | + */ | ||
251 | + public function adjust_lat( $x ) { | ||
252 | + | ||
253 | + $x = (abs( $x ) < M_PI_2) ? $x : ($x - ($this->sign( $x ) * M_PI) ); | ||
254 | + | ||
255 | + return $x; | ||
256 | + } | ||
257 | + | ||
258 | + /** | ||
259 | + * Latitude Isometrique - close to tsfnz ... | ||
260 | + * | ||
261 | + * @param type $eccent | ||
262 | + * @param float $phi | ||
263 | + * @param type $sinphi | ||
264 | + * @return string | ||
265 | + */ | ||
266 | + public function latiso( $eccent, $phi, $sinphi ) { | ||
267 | + | ||
268 | + if( abs( $phi ) > M_PI_2 ) | ||
269 | + return +NaN; | ||
270 | + if( $phi == M_PI_2 ) | ||
271 | + return INF; | ||
272 | + if( $phi == -1.0 * M_PI_2 ) | ||
273 | + return -1.0 * INF; | ||
274 | + | ||
275 | + $con = $eccent * $sinphi; | ||
276 | + | ||
277 | + return log( tan( (M_PI_2 + $phi) / 2.0 ) ) + $eccent * log( (1.0 - $con) / (1.0 + $con) ) / 2.0; | ||
278 | + } | ||
279 | + | ||
280 | + /** | ||
281 | + * | ||
282 | + * @param type $x | ||
283 | + * @param type $L | ||
284 | + * @return type | ||
285 | + */ | ||
286 | + public function fL( $x, $L ) { | ||
287 | + return 2.0 * atan( $x * exp( $L ) ) - M_PI_2; | ||
288 | + } | ||
289 | + | ||
290 | + /** | ||
291 | + * Inverse Latitude Isometrique - close to ph2z | ||
292 | + * | ||
293 | + * @param type $eccent | ||
294 | + * @param type $ts | ||
295 | + * @return type | ||
296 | + */ | ||
297 | + public function invlatiso( $eccent, $ts ) { | ||
298 | + | ||
299 | + $phi = $this->fL( 1.0, $ts ); | ||
300 | + $Iphi = 0.0; | ||
301 | + $con = 0.0; | ||
302 | + | ||
303 | + do { | ||
304 | + $Iphi = $phi; | ||
305 | + $con = $eccent * sin( $Iphi ); | ||
306 | + $phi = $this->fL( exp( $eccent * log( (1.0 + $con) / (1.0 - $con) ) / 2.0 ), $ts ); | ||
307 | + } while( abs( $phi - $Iphi ) > 1.0e-12 ); | ||
308 | + | ||
309 | + return $phi; | ||
310 | + } | ||
311 | + | ||
312 | + /** | ||
313 | + * Grande Normale | ||
314 | + * | ||
315 | + * @param type $a | ||
316 | + * @param type $e | ||
317 | + * @param type $sinphi | ||
318 | + * @return type | ||
319 | + */ | ||
320 | + public function gN( $a, $e, $sinphi ) { | ||
321 | + $temp = $e * $sinphi; | ||
322 | + return $a / sqrt( 1.0 - $temp * $temp ); | ||
323 | + } | ||
324 | + | ||
325 | + /** | ||
326 | + * code from the PROJ.4 pj_mlfn.c file; this may be useful for other projections | ||
327 | + * | ||
328 | + * @param type $es | ||
329 | + * @return type | ||
330 | + */ | ||
331 | + public function pj_enfn( $es ) { | ||
332 | + | ||
333 | + $en = array( ); | ||
334 | + $en[0] = $this->C00 - $es * ($this->C02 + $es * ($this->C04 + $es * ($this->C06 + $es * $this->C08))); | ||
335 | + $en[1] = es * ($this->C22 - $es * ($this->C04 + $es * ($this->C06 + $es * $this->C08))); | ||
336 | + $t = $es * $es; | ||
337 | + $en[2] = $t * ($this->C44 - $es * ($this->C46 + $es * $this->C48)); | ||
338 | + $t *= $es; | ||
339 | + $en[3] = $t * ($this->C66 - $es * $this->C68); | ||
340 | + $en[4] = $t * $es * $this->C88; | ||
341 | + | ||
342 | + return $en; | ||
343 | + } | ||
344 | + | ||
345 | + /** | ||
346 | + * | ||
347 | + * @param type $phi | ||
348 | + * @param type $sphi | ||
349 | + * @param type $cphi | ||
350 | + * @param type $en | ||
351 | + * @return type | ||
352 | + */ | ||
353 | + public function pj_mlfn( $phi, $sphi, $cphi, $en ) { | ||
354 | + | ||
355 | + $cphi *= $sphi; | ||
356 | + $sphi *= $sphi; | ||
357 | + | ||
358 | + return ($en[0] * $phi - $cphi * ($en[1] + $sphi * ($en[2] + $sphi * ($en[3] + $sphi * $en[4])))); | ||
359 | + } | ||
360 | + | ||
361 | + /** | ||
362 | + * | ||
363 | + * @param type $arg | ||
364 | + * @param type $es | ||
365 | + * @param type $en | ||
366 | + * @return type | ||
367 | + */ | ||
368 | + public function pj_inv_mlfn( $arg, $es, $en ) { | ||
369 | + | ||
370 | + $k = (float) 1 / (1 - $es); | ||
371 | + $phi = $arg; | ||
372 | + | ||
373 | + for( $i = Proj4php::$common->MAX_ITER; $i; --$i ) { /* rarely goes over 2 iterations */ | ||
374 | + $s = sin( $phi ); | ||
375 | + $t = 1. - $es * $s * $s; | ||
376 | + //$t = $this->pj_mlfn($phi, $s, cos($phi), $en) - $arg; | ||
377 | + //$phi -= $t * ($t * sqrt($t)) * $k; | ||
378 | + $t = ($this->pj_mlfn( $phi, $s, cos( $phi ), $en ) - $arg) * ($t * sqrt( $t )) * $k; | ||
379 | + $phi -= $t; | ||
380 | + if( abs( $t ) < Proj4php::$common->EPSLN ) | ||
381 | + return $phi; | ||
382 | + } | ||
383 | + | ||
384 | + Proj4php::reportError( "cass:pj_inv_mlfn: Convergence error" ); | ||
385 | + | ||
386 | + return $phi; | ||
387 | + } | ||
388 | + | ||
389 | +} | ||
0 | \ No newline at end of file | 390 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpDatum.php
0 → 100644
@@ -0,0 +1,401 @@ | @@ -0,0 +1,401 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4js from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | + | ||
10 | +/** datum object | ||
11 | + */ | ||
12 | +class proj4phpDatum { | ||
13 | + | ||
14 | + public $datum_type; | ||
15 | + public $datum_params; | ||
16 | + | ||
17 | + /** | ||
18 | + * | ||
19 | + * @param type $proj | ||
20 | + */ | ||
21 | + public function __construct( $proj ) { | ||
22 | + | ||
23 | + $this->datum_type = Proj4php::$common->PJD_WGS84; //default setting | ||
24 | + | ||
25 | + if( isset($proj->datumCode) && $proj->datumCode == 'none' ) { | ||
26 | + $this->datum_type = Proj4php::$common->PJD_NODATUM; | ||
27 | + } | ||
28 | + | ||
29 | + if( isset( $proj->datum_params ) ) { | ||
30 | + | ||
31 | + for( $i = 0; $i < sizeof( $proj->datum_params ); $i++ ) { | ||
32 | + $proj->datum_params[$i] = floatval( $proj->datum_params[$i] ); | ||
33 | + } | ||
34 | + | ||
35 | + if( $proj->datum_params[0] != 0 || $proj->datum_params[1] != 0 || $proj->datum_params[2] != 0 ) { | ||
36 | + $this->datum_type = Proj4php::$common->PJD_3PARAM; | ||
37 | + } | ||
38 | + | ||
39 | + if( sizeof( $proj->datum_params ) > 3 ) { | ||
40 | + if( $proj->datum_params[3] != 0 || $proj->datum_params[4] != 0 || | ||
41 | + $proj->datum_params[5] != 0 || $proj->datum_params[6] != 0 ) { | ||
42 | + | ||
43 | + $this->datum_type = Proj4php::$common->PJD_7PARAM; | ||
44 | + $proj->datum_params[3] *= Proj4php::$common->SEC_TO_RAD; | ||
45 | + $proj->datum_params[4] *= Proj4php::$common->SEC_TO_RAD; | ||
46 | + $proj->datum_params[5] *= Proj4php::$common->SEC_TO_RAD; | ||
47 | + $proj->datum_params[6] = ($proj->datum_params[6] / 1000000.0) + 1.0; | ||
48 | + } | ||
49 | + } | ||
50 | + | ||
51 | + $this->datum_params = $proj->datum_params; | ||
52 | + } | ||
53 | + if( isset( $proj ) ) { | ||
54 | + $this->a = $proj->a; //datum object also uses these values | ||
55 | + $this->b = $proj->b; | ||
56 | + $this->es = $proj->es; | ||
57 | + $this->ep2 = $proj->ep2; | ||
58 | + #$this->datum_params = $proj->datum_params; | ||
59 | + } | ||
60 | + } | ||
61 | + | ||
62 | + | ||
63 | + /** | ||
64 | + * | ||
65 | + * @param type $dest | ||
66 | + * @return boolean Returns TRUE if the two datums match, otherwise FALSE. | ||
67 | + * @throws type | ||
68 | + */ | ||
69 | + public function compare_datums( $dest ) { | ||
70 | + | ||
71 | + if( $this->datum_type != $dest->datum_type ) { | ||
72 | + return false; // false, datums are not equal | ||
73 | + } else if( $this->a != $dest->a || abs( $this->es - $dest->es ) > 0.000000000050 ) { | ||
74 | + // the tolerence for es is to ensure that GRS80 and WGS84 | ||
75 | + // are considered identical | ||
76 | + return false; | ||
77 | + } else if( $this->datum_type == Proj4php::$common->PJD_3PARAM ) { | ||
78 | + return ($this->datum_params[0] == $dest->datum_params[0] | ||
79 | + && $this->datum_params[1] == $dest->datum_params[1] | ||
80 | + && $this->datum_params[2] == $dest->datum_params[2]); | ||
81 | + } else if( $this->datum_type == Proj4php::$common->PJD_7PARAM ) { | ||
82 | + return ($this->datum_params[0] == $dest->datum_params[0] | ||
83 | + && $this->datum_params[1] == $dest->datum_params[1] | ||
84 | + && $this->datum_params[2] == $dest->datum_params[2] | ||
85 | + && $this->datum_params[3] == $dest->datum_params[3] | ||
86 | + && $this->datum_params[4] == $dest->datum_params[4] | ||
87 | + && $this->datum_params[5] == $dest->datum_params[5] | ||
88 | + && $this->datum_params[6] == $dest->datum_params[6]); | ||
89 | + } else if( $this->datum_type == Proj4php::$common->PJD_GRIDSHIFT || | ||
90 | + $dest->datum_type == Proj4php::$common->PJD_GRIDSHIFT ) { | ||
91 | + throw(new Exception( "ERROR: Grid shift transformations are not implemented." )); | ||
92 | + return false; | ||
93 | + } | ||
94 | + | ||
95 | + return true; // datums are equal | ||
96 | + } | ||
97 | + | ||
98 | + /* | ||
99 | + * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates | ||
100 | + * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), | ||
101 | + * according to the current ellipsoid parameters. | ||
102 | + * | ||
103 | + * Latitude : Geodetic latitude in radians (input) | ||
104 | + * Longitude : Geodetic longitude in radians (input) | ||
105 | + * Height : Geodetic height, in meters (input) | ||
106 | + * X : Calculated Geocentric X coordinate, in meters (output) | ||
107 | + * Y : Calculated Geocentric Y coordinate, in meters (output) | ||
108 | + * Z : Calculated Geocentric Z coordinate, in meters (output) | ||
109 | + * | ||
110 | + */ | ||
111 | + public function geodetic_to_geocentric( $p ) { | ||
112 | + | ||
113 | + $Longitude = $p->x; | ||
114 | + $Latitude = $p->y; | ||
115 | + $Height = isset( $p->z ) ? $p->z : 0; //Z value not always supplied | ||
116 | + $Error_Code = 0; // GEOCENT_NO_ERROR; | ||
117 | + | ||
118 | + /* | ||
119 | + * * Don't blow up if Latitude is just a little out of the value | ||
120 | + * * range as it may just be a rounding issue. Also removed longitude | ||
121 | + * * test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001. | ||
122 | + */ | ||
123 | + if( $Latitude < -Proj4php::$common->HALF_PI && $Latitude > -1.001 * Proj4php::$common->HALF_PI ) { | ||
124 | + $Latitude = -Proj4php::$common->HALF_PI; | ||
125 | + } else if( $Latitude > Proj4php::$common->HALF_PI && $Latitude < 1.001 * Proj4php::$common->HALF_PI ) { | ||
126 | + $Latitude = Proj4php::$common->HALF_PI; | ||
127 | + } else if( ($Latitude < -Proj4php::$common->HALF_PI) || ($Latitude > Proj4php::$common->HALF_PI) ) { | ||
128 | + /* Latitude out of range */ | ||
129 | + Proj4php::reportError( 'geocent:lat out of range:' . $Latitude ); | ||
130 | + return null; | ||
131 | + } | ||
132 | + | ||
133 | + if( $Longitude > Proj4php::$common->PI ) | ||
134 | + $Longitude -= (2 * Proj4php::$common->PI); | ||
135 | + | ||
136 | + $Sin_Lat = sin( $Latitude ); /* sin(Latitude) */ | ||
137 | + $Cos_Lat = cos( $Latitude ); /* cos(Latitude) */ | ||
138 | + $Sin2_Lat = $Sin_Lat * $Sin_Lat; /* Square of sin(Latitude) */ | ||
139 | + $Rn = $this->a / (sqrt( 1.0e0 - $this->es * $Sin2_Lat )); /* Earth radius at location */ | ||
140 | + $p->x = ($Rn + $Height) * $Cos_Lat * cos( $Longitude ); | ||
141 | + $p->y = ($Rn + $Height) * $Cos_Lat * sin( $Longitude ); | ||
142 | + $p->z = (($Rn * (1 - $this->es)) + $Height) * $Sin_Lat; | ||
143 | + | ||
144 | + return $Error_Code; | ||
145 | + } | ||
146 | + | ||
147 | + | ||
148 | + /** | ||
149 | + * | ||
150 | + * @param object $p | ||
151 | + * @return type | ||
152 | + */ | ||
153 | + public function geocentric_to_geodetic( $p ) { | ||
154 | + | ||
155 | + /* local defintions and variables */ | ||
156 | + /* end-criterium of loop, accuracy of sin(Latitude) */ | ||
157 | + $genau = 1.E-12; | ||
158 | + $genau2 = ($genau * $genau); | ||
159 | + $maxiter = 30; | ||
160 | + $X = $p->x; | ||
161 | + $Y = $p->y; | ||
162 | + $Z = $p->z ? $p->z : 0.0; //Z value not always supplied | ||
163 | + | ||
164 | + /* | ||
165 | + $P; // distance between semi-minor axis and location | ||
166 | + $RR; // distance between center and location | ||
167 | + $CT; // sin of geocentric latitude | ||
168 | + $ST; // cos of geocentric latitude | ||
169 | + $RX; | ||
170 | + $RK; | ||
171 | + $RN; // Earth radius at location | ||
172 | + $CPHI0; // cos of start or old geodetic latitude in iterations | ||
173 | + $SPHI0; // sin of start or old geodetic latitude in iterations | ||
174 | + $CPHI; // cos of searched geodetic latitude | ||
175 | + $SPHI; // sin of searched geodetic latitude | ||
176 | + $SDPHI; // end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) | ||
177 | + $At_Pole; // indicates location is in polar region | ||
178 | + $iter; // of continous iteration, max. 30 is always enough (s.a.) | ||
179 | + $Longitude; | ||
180 | + $Latitude; | ||
181 | + $Height; | ||
182 | + */ | ||
183 | + | ||
184 | + $At_Pole = false; | ||
185 | + $P = sqrt( $X * $X + $Y * $Y ); | ||
186 | + $RR = sqrt( $X * $X + $Y * $Y + $Z * $Z ); | ||
187 | + | ||
188 | + /* special cases for latitude and longitude */ | ||
189 | + if( $P / $this->a < $genau ) { | ||
190 | + | ||
191 | + /* special case, if P=0. (X=0., Y=0.) */ | ||
192 | + $At_Pole = true; | ||
193 | + $Longitude = 0.0; | ||
194 | + | ||
195 | + /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis | ||
196 | + * of ellipsoid (=center of mass), Latitude becomes PI/2 */ | ||
197 | + if( $RR / $this->a < $genau ) { | ||
198 | + $Latitude = Proj4php::$common->HALF_PI; | ||
199 | + $Height = -$this->b; | ||
200 | + return; | ||
201 | + } | ||
202 | + } else { | ||
203 | + /* ellipsoidal (geodetic) longitude | ||
204 | + * interval: -PI < Longitude <= +PI */ | ||
205 | + $Longitude = atan2( $Y, $X ); | ||
206 | + } | ||
207 | + | ||
208 | + /* -------------------------------------------------------------- | ||
209 | + * Following iterative algorithm was developped by | ||
210 | + * "Institut für Erdmessung", University of Hannover, July 1988. | ||
211 | + * Internet: www.ife.uni-hannover.de | ||
212 | + * Iterative computation of CPHI,SPHI and Height. | ||
213 | + * Iteration of CPHI and SPHI to 10**-12 radian res$p-> | ||
214 | + * 2*10**-7 arcsec. | ||
215 | + * -------------------------------------------------------------- | ||
216 | + */ | ||
217 | + $CT = $Z / $RR; | ||
218 | + $ST = $P / $RR; | ||
219 | + $RX = 1.0 / sqrt( 1.0 - $this->es * (2.0 - $this->es) * $ST * $ST ); | ||
220 | + $CPHI0 = $ST * (1.0 - $this->es) * $RX; | ||
221 | + $SPHI0 = $CT * $RX; | ||
222 | + $iter = 0; | ||
223 | + | ||
224 | + /* loop to find sin(Latitude) res$p-> Latitude | ||
225 | + * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ | ||
226 | + do { | ||
227 | + ++$iter; | ||
228 | + $RN = $this->a / sqrt( 1.0 - $this->es * $SPHI0 * $SPHI0 ); | ||
229 | + | ||
230 | + /* ellipsoidal (geodetic) height */ | ||
231 | + $Height = $P * $CPHI0 + $Z * $SPHI0 - $RN * (1.0 - $this->es * $SPHI0 * $SPHI0); | ||
232 | + | ||
233 | + $RK = $this->es * $RN / ($RN + $Height); | ||
234 | + $RX = 1.0 / sqrt( 1.0 - $RK * (2.0 - $RK) * $ST * $ST ); | ||
235 | + $CPHI = $ST * (1.0 - $RK) * $RX; | ||
236 | + $SPHI = $CT * $RX; | ||
237 | + $SDPHI = $SPHI * $CPHI0 - $CPHI * $SPHI0; | ||
238 | + $CPHI0 = $CPHI; | ||
239 | + $SPHI0 = $SPHI; | ||
240 | + } while( $SDPHI * $SDPHI > $genau2 && $iter < $maxiter ); | ||
241 | + | ||
242 | + /* ellipsoidal (geodetic) latitude */ | ||
243 | + $Latitude = atan( $SPHI / abs( $CPHI ) ); | ||
244 | + | ||
245 | + $p->x = $Longitude; | ||
246 | + $p->y = $Latitude; | ||
247 | + $p->z = $Height; | ||
248 | + | ||
249 | + return $p; | ||
250 | + } | ||
251 | + | ||
252 | + /** | ||
253 | + * Convert_Geocentric_To_Geodetic | ||
254 | + * The method used here is derived from 'An Improved Algorithm for | ||
255 | + * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996 | ||
256 | + * | ||
257 | + * @param object Point $p | ||
258 | + * @return object Point $p | ||
259 | + */ | ||
260 | + public function geocentric_to_geodetic_noniter( $p ) { | ||
261 | + | ||
262 | + /* | ||
263 | + $Longitude; | ||
264 | + $Latitude; | ||
265 | + $Height; | ||
266 | + | ||
267 | + $W; // distance from Z axis | ||
268 | + $W2; // square of distance from Z axis | ||
269 | + $T0; // initial estimate of vertical component | ||
270 | + $T1; // corrected estimate of vertical component | ||
271 | + $S0; // initial estimate of horizontal component | ||
272 | + $S1; // corrected estimate of horizontal component | ||
273 | + $Sin_B0; // sin(B0), B0 is estimate of Bowring aux variable | ||
274 | + $Sin3_B0; // cube of sin(B0) | ||
275 | + $Cos_B0; // cos(B0) | ||
276 | + $Sin_p1; // sin(phi1), phi1 is estimated latitude | ||
277 | + $Cos_p1; // cos(phi1) | ||
278 | + $Rn; // Earth radius at location | ||
279 | + $Sum; // numerator of cos(phi1) | ||
280 | + $At_Pole; // indicates location is in polar region | ||
281 | + */ | ||
282 | + | ||
283 | + $X = floatval( $p->x ); // cast from string to float | ||
284 | + $Y = floatval( $p->y ); | ||
285 | + $Z = floatval( $p->z ? $p->z : 0 ); | ||
286 | + | ||
287 | + $At_Pole = false; | ||
288 | + if( $X <> 0.0 ) { | ||
289 | + $Longitude = atan2( $Y, $X ); | ||
290 | + } else { | ||
291 | + if( $Y > 0 ) { | ||
292 | + $Longitude = Proj4php::$common->HALF_PI; | ||
293 | + } else if( Y < 0 ) { | ||
294 | + $Longitude = -Proj4php::$common->HALF_PI; | ||
295 | + } else { | ||
296 | + $At_Pole = true; | ||
297 | + $Longitude = 0.0; | ||
298 | + if( $Z > 0.0 ) { /* north pole */ | ||
299 | + $Latitude = Proj4php::$common->HALF_PI; | ||
300 | + } else if( Z < 0.0 ) { /* south pole */ | ||
301 | + $Latitude = -Proj4php::$common->HALF_PI; | ||
302 | + } else { /* center of earth */ | ||
303 | + $Latitude = Proj4php::$common->HALF_PI; | ||
304 | + $Height = -$this->b; | ||
305 | + return; | ||
306 | + } | ||
307 | + } | ||
308 | + } | ||
309 | + $W2 = $X * $X + $Y * $Y; | ||
310 | + $W = sqrt( $W2 ); | ||
311 | + $T0 = $Z * Proj4php::$common->AD_C; | ||
312 | + $S0 = sqrt( $T0 * $T0 + $W2 ); | ||
313 | + $Sin_B0 = $T0 / $S0; | ||
314 | + $Cos_B0 = $W / $S0; | ||
315 | + $Sin3_B0 = $Sin_B0 * $Sin_B0 * $Sin_B0; | ||
316 | + $T1 = $Z + $this->b * $this->ep2 * $Sin3_B0; | ||
317 | + $Sum = $W - $this->a * $this->es * $Cos_B0 * $Cos_B0 * $Cos_B0; | ||
318 | + $S1 = sqrt( $T1 * $T1 + $Sum * $Sum ); | ||
319 | + $Sin_p1 = $T1 / $S1; | ||
320 | + $Cos_p1 = $Sum / $S1; | ||
321 | + $Rn = $this->a / sqrt( 1.0 - $this->es * $Sin_p1 * $Sin_p1 ); | ||
322 | + if( $Cos_p1 >= Proj4php::$common->COS_67P5 ) { | ||
323 | + $Height = $W / $Cos_p1 - $Rn; | ||
324 | + } else if( $Cos_p1 <= -Proj4php::$common->COS_67P5 ) { | ||
325 | + $Height = $W / -$Cos_p1 - $Rn; | ||
326 | + } else { | ||
327 | + $Height = $Z / $Sin_p1 + $Rn * ($this->es - 1.0); | ||
328 | + } | ||
329 | + if( $At_Pole == false ) { | ||
330 | + $Latitude = atan( $Sin_p1 / $Cos_p1 ); | ||
331 | + } | ||
332 | + | ||
333 | + $p->x = $Longitude; | ||
334 | + $p->y = $Latitude; | ||
335 | + $p->z = $Height; | ||
336 | + | ||
337 | + return $p; | ||
338 | + } | ||
339 | + | ||
340 | + /************************************************************** */ | ||
341 | + // pj_geocentic_to_wgs84( p ) | ||
342 | + // p = point to transform in geocentric coordinates (x,y,z) | ||
343 | + public function geocentric_to_wgs84( $p ) { | ||
344 | + | ||
345 | + if( $this->datum_type == Proj4php::$common->PJD_3PARAM ) { | ||
346 | + // if( x[io] == HUGE_VAL ) | ||
347 | + // continue; | ||
348 | + $p->x += $this->datum_params[0]; | ||
349 | + $p->y += $this->datum_params[1]; | ||
350 | + $p->z += $this->datum_params[2]; | ||
351 | + } else if( $this->datum_type == Proj4php::$common->PJD_7PARAM ) { | ||
352 | + $Dx_BF = $this->datum_params[0]; | ||
353 | + $Dy_BF = $this->datum_params[1]; | ||
354 | + $Dz_BF = $this->datum_params[2]; | ||
355 | + $Rx_BF = $this->datum_params[3]; | ||
356 | + $Ry_BF = $this->datum_params[4]; | ||
357 | + $Rz_BF = $this->datum_params[5]; | ||
358 | + $M_BF = $this->datum_params[6]; | ||
359 | + // if( x[io] == HUGE_VAL ) | ||
360 | + // continue; | ||
361 | + $p->x = $M_BF * ( $p->x - $Rz_BF * $p->y + $Ry_BF * $p->z) + $Dx_BF; | ||
362 | + $p->y = $M_BF * ( $Rz_BF * $p->x + $p->y - $Rx_BF * $p->z) + $Dy_BF; | ||
363 | + $p->z = $M_BF * (-$Ry_BF * $p->x + $Rx_BF * $p->y + $p->z) + $Dz_BF; | ||
364 | + } | ||
365 | + } | ||
366 | + | ||
367 | + /*************************************************************** */ | ||
368 | + | ||
369 | + // pj_geocentic_from_wgs84() | ||
370 | + // coordinate system definition, | ||
371 | + // point to transform in geocentric coordinates (x,y,z) | ||
372 | + public function geocentric_from_wgs84( $p ) { | ||
373 | + | ||
374 | + if( $this->datum_type == Proj4php::$common->PJD_3PARAM ) { | ||
375 | + //if( x[io] == HUGE_VAL ) | ||
376 | + // continue; | ||
377 | + $p->x -= $this->datum_params[0]; | ||
378 | + $p->y -= $this->datum_params[1]; | ||
379 | + $p->z -= $this->datum_params[2]; | ||
380 | + } else if( $this->datum_type == Proj4php::$common->PJD_7PARAM ) { | ||
381 | + $Dx_BF = $this->datum_params[0]; | ||
382 | + $Dy_BF = $this->datum_params[1]; | ||
383 | + $Dz_BF = $this->datum_params[2]; | ||
384 | + $Rx_BF = $this->datum_params[3]; | ||
385 | + $Ry_BF = $this->datum_params[4]; | ||
386 | + $Rz_BF = $this->datum_params[5]; | ||
387 | + $M_BF = $this->datum_params[6]; | ||
388 | + $x_tmp = ($p->x - $Dx_BF) / $M_BF; | ||
389 | + $y_tmp = ($p->y - $Dy_BF) / $M_BF; | ||
390 | + $z_tmp = ($p->z - $Dz_BF) / $M_BF; | ||
391 | + //if( x[io] == HUGE_VAL ) | ||
392 | + // continue; | ||
393 | + | ||
394 | + $p->x = $x_tmp + $Rz_BF * $y_tmp - $Ry_BF * $z_tmp; | ||
395 | + $p->y = -$Rz_BF * $x_tmp + $y_tmp + $Rx_BF * $z_tmp; | ||
396 | + $p->z = $Ry_BF * $x_tmp - $Rx_BF * $y_tmp + $z_tmp; | ||
397 | + } //cs_geocentric_from_wgs84() | ||
398 | + } | ||
399 | + | ||
400 | +} | ||
401 | + |
pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpLongLat.php
0 → 100644
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4js from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodmap.com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +class proj4phpLongLat { | ||
10 | + | ||
11 | + public function init() { | ||
12 | + | ||
13 | + } | ||
14 | + | ||
15 | + public function forward( $pt ) { | ||
16 | + return $pt; | ||
17 | + } | ||
18 | + | ||
19 | + public function inverse( $pt ) { | ||
20 | + return $pt; | ||
21 | + } | ||
22 | + | ||
23 | +} | ||
0 | \ No newline at end of file | 24 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpPoint.php
0 → 100644
@@ -0,0 +1,86 @@ | @@ -0,0 +1,86 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4js from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodmap.com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | + | ||
10 | +/** | ||
11 | + * point object, nothing fancy, just allows values to be | ||
12 | + * passed back and forth by reference rather than by value. | ||
13 | + * Other point classes may be used as long as they have | ||
14 | + * x and y properties, which will get modified in the transform method. | ||
15 | +*/ | ||
16 | +class proj4phpPoint { | ||
17 | + | ||
18 | + public $x; | ||
19 | + public $y; | ||
20 | + public $z; | ||
21 | + | ||
22 | + /** | ||
23 | + * Constructor: Proj4js.Point | ||
24 | + * | ||
25 | + * Parameters: | ||
26 | + * - x {float} or {Array} either the first coordinates component or | ||
27 | + * the full coordinates | ||
28 | + * - y {float} the second component | ||
29 | + * - z {float} the third component, optional. | ||
30 | + */ | ||
31 | + public function __construct( $x = null, $y = null, $z = null ) { | ||
32 | + | ||
33 | + if( is_array( $x ) ) { | ||
34 | + $this->x = $x[0]; | ||
35 | + $this->y = $x[1]; | ||
36 | + $this->z = isset($x[2]) ? $x[2] : 0.0;#(count( $x ) > 2) ? $x[2] : 0.0; | ||
37 | + } else if( is_string( $x ) && !is_numeric( $y ) ) { | ||
38 | + $coord = explode( ' ', $x ); | ||
39 | + $this->x = floatval( $coord[0] ); | ||
40 | + $this->y = floatval( $coord[1] ); | ||
41 | + $this->z = (count( $coord ) > 2) ? floatval( $coord[2] ) : 0.0; | ||
42 | + } else { | ||
43 | + $this->x = $x !== null ? $x : 0.0; | ||
44 | + $this->y = $y !== null ? $y : 0.0; | ||
45 | + $this->z = $z !== null ? $z : 0.0; | ||
46 | + } | ||
47 | + } | ||
48 | + | ||
49 | + /** | ||
50 | + * APIMethod: clone | ||
51 | + * Build a copy of a Proj4js.Point object. | ||
52 | + * | ||
53 | + * renamed because of PHP keyword. | ||
54 | + * | ||
55 | + * Return: | ||
56 | + * {Proj4js}.Point the cloned point. | ||
57 | + */ | ||
58 | + public function __clone() { | ||
59 | + return new Proj4phpPoint( $this->x, $this->y, $this->z ); | ||
60 | + } | ||
61 | + | ||
62 | + /** | ||
63 | + * APIMethod: toString | ||
64 | + * Return a readable string version of the point | ||
65 | + * | ||
66 | + * Return: | ||
67 | + * {String} String representation of Proj4js.Point object. | ||
68 | + * (ex. <i>"x=5,y=42"</i>) | ||
69 | + */ | ||
70 | + public function toString() { | ||
71 | + return "x=" . $this->x . ",y=" . $this->y; | ||
72 | + } | ||
73 | + | ||
74 | + /** | ||
75 | + * APIMethod: toShortString | ||
76 | + * Return a short string version of the point. | ||
77 | + * | ||
78 | + * Return: | ||
79 | + * {String} Shortened String representation of Proj4js.Point object. | ||
80 | + * (ex. <i>"5, 42"</i>) | ||
81 | + */ | ||
82 | + public function toShortString() { | ||
83 | + return $this->x . " " . $this->y; | ||
84 | + } | ||
85 | + | ||
86 | +} | ||
0 | \ No newline at end of file | 87 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/proj4phpProj.php
0 → 100644
@@ -0,0 +1,638 @@ | @@ -0,0 +1,638 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4js from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodmap.com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +class Proj4phpProj { | ||
10 | + | ||
11 | + /** | ||
12 | + * Property: readyToUse | ||
13 | + * Flag to indicate if initialization is complete for $this Proj object | ||
14 | + */ | ||
15 | + public $readyToUse = false; | ||
16 | + | ||
17 | + /** | ||
18 | + * Property: title | ||
19 | + * The title to describe the projection | ||
20 | + */ | ||
21 | + public $title = null; | ||
22 | + | ||
23 | + /** | ||
24 | + * Property: projName | ||
25 | + * The projection class for $this projection, e.g. lcc (lambert conformal conic, | ||
26 | + * or merc for mercator). These are exactly equivalent to their Proj4 | ||
27 | + * counterparts. | ||
28 | + */ | ||
29 | + public $projName = null; | ||
30 | + | ||
31 | + /** | ||
32 | + * Property: projection | ||
33 | + * The projection object for $this projection. */ | ||
34 | + public $projection = null; | ||
35 | + | ||
36 | + /** | ||
37 | + * Property: units | ||
38 | + * The units of the projection. Values include 'm' and 'degrees' | ||
39 | + */ | ||
40 | + public $units = null; | ||
41 | + | ||
42 | + /** | ||
43 | + * Property: datum | ||
44 | + * The datum specified for the projection | ||
45 | + */ | ||
46 | + public $datum = null; | ||
47 | + | ||
48 | + /** | ||
49 | + * Property: x0 | ||
50 | + * The x coordinate origin | ||
51 | + */ | ||
52 | + public $x0 = 0; | ||
53 | + | ||
54 | + /** | ||
55 | + * Property: y0 | ||
56 | + * The y coordinate origin | ||
57 | + */ | ||
58 | + public $y0 = 0; | ||
59 | + | ||
60 | + /** | ||
61 | + * Property: localCS | ||
62 | + * Flag to indicate if the projection is a local one in which no transforms | ||
63 | + * are required. | ||
64 | + */ | ||
65 | + public $localCS = false; | ||
66 | + | ||
67 | + /** | ||
68 | + * | ||
69 | + * @var type | ||
70 | + */ | ||
71 | + protected $wktRE = '/^(\w+)\[(.*)\]$/'; | ||
72 | + | ||
73 | + /** | ||
74 | + * Constructor: initialize | ||
75 | + * Constructor for Proj4php::Proj objects | ||
76 | + * | ||
77 | + * Parameters: | ||
78 | + * $srsCode - a code for map projection definition parameters. These are usually | ||
79 | + * (but not always) EPSG codes. | ||
80 | + */ | ||
81 | + public function __construct( $srsCode ) { | ||
82 | + | ||
83 | + $this->srsCodeInput = $srsCode; | ||
84 | + //check to see if $this is a WKT string | ||
85 | + if( (strpos( $srsCode, 'GEOGCS' ) !== false) || | ||
86 | + (strpos( $srsCode, 'GEOCCS' ) !== false) || | ||
87 | + (strpos( $srsCode, 'PROJCS' ) !== false) || | ||
88 | + (strpos( $srsCode, 'LOCAL_CS' ) !== false) ) { | ||
89 | + $this->parseWKT( $srsCode ); | ||
90 | + $this->deriveConstants(); | ||
91 | + $this->loadProjCode( $this->projName ); | ||
92 | + return; | ||
93 | + } | ||
94 | + | ||
95 | + // DGR 2008-08-03 : support urn and url | ||
96 | + if( strpos( $srsCode, 'urn:' ) === 0 ) { | ||
97 | + //urn:ORIGINATOR:def:crs:CODESPACE:VERSION:ID | ||
98 | + $urn = explode( ':', $srsCode ); | ||
99 | + if( ($urn[1] == 'ogc' || $urn[1] == 'x-ogc') && | ||
100 | + ($urn[2] == 'def') && | ||
101 | + ($urn[3] == 'crs') ) { | ||
102 | + $srsCode = $urn[4] . ':' . $urn[strlen( $urn ) - 1]; | ||
103 | + } | ||
104 | + } else if( strpos( $srsCode, 'http://' ) === 0 ) { | ||
105 | + //url#ID | ||
106 | + $url = explode( '#', $srsCode ); | ||
107 | + if( preg_match( "/epsg.org/", $url[0] ) ) { | ||
108 | + // http://www.epsg.org/# | ||
109 | + $srsCode = 'EPSG:' . $url[1]; | ||
110 | + } else if( preg_match( "/RIG.xml/", $url[0] ) ) { | ||
111 | + //http://librairies.ign.fr/geoportail/resources/RIG.xml# | ||
112 | + //http://interop.ign.fr/registers/ign/RIG.xml# | ||
113 | + $srsCode = 'IGNF:' . $url[1]; | ||
114 | + } | ||
115 | + } | ||
116 | + $this->srsCode = strtoupper( $srsCode ); | ||
117 | + if( strpos( $this->srsCode, "EPSG" ) === 0 ) { | ||
118 | + $this->srsCode = $this->srsCode; | ||
119 | + $this->srsAuth = 'epsg'; | ||
120 | + $this->srsProjNumber = substr( $this->srsCode, 5 ); | ||
121 | + // DGR 2007-11-20 : authority IGNF | ||
122 | + } else if( strpos( $this->srsCode, "IGNF" ) === 0 ) { | ||
123 | + $this->srsCode = $this->srsCode; | ||
124 | + $this->srsAuth = 'IGNF'; | ||
125 | + $this->srsProjNumber = substr( $this->srsCode, 5 ); | ||
126 | + // DGR 2008-06-19 : pseudo-authority CRS for WMS | ||
127 | + } else if( strpos( $this->srsCode, "CRS" ) === 0 ) { | ||
128 | + $this->srsCode = $this->srsCode; | ||
129 | + $this->srsAuth = 'CRS'; | ||
130 | + $this->srsProjNumber = substr( $this->srsCode, 4 ); | ||
131 | + } else { | ||
132 | + $this->srsAuth = ''; | ||
133 | + $this->srsProjNumber = $this->srsCode; | ||
134 | + } | ||
135 | + $this->loadProjDefinition(); | ||
136 | + } | ||
137 | + | ||
138 | + /** | ||
139 | + * Function: loadProjDefinition | ||
140 | + * Loads the coordinate system initialization string if required. | ||
141 | + * Note that dynamic loading happens asynchronously so an application must | ||
142 | + * wait for the readyToUse property is set to true. | ||
143 | + * To prevent dynamic loading, include the defs through a script tag in | ||
144 | + * your application. | ||
145 | + * | ||
146 | + */ | ||
147 | + public function loadProjDefinition() { | ||
148 | + //check in memory | ||
149 | + if( array_key_exists( $this->srsCode, Proj4php::$defs ) ) { | ||
150 | + $this->defsLoaded(); | ||
151 | + return; | ||
152 | + } | ||
153 | + //else check for def on the server | ||
154 | + $filename = dirname( __FILE__ ) . '/defs/' . strtoupper( $this->srsAuth ) . $this->srsProjNumber . '.php'; | ||
155 | + | ||
156 | + try { | ||
157 | + Proj4php::loadScript( $filename ); | ||
158 | + $this->defsLoaded(); // succes | ||
159 | + | ||
160 | + } catch ( Exception $e ) { | ||
161 | + $this->loadFromService(); // fail | ||
162 | + } | ||
163 | + } | ||
164 | + | ||
165 | + /** | ||
166 | + * Function: loadFromService | ||
167 | + * Creates the REST URL for loading the definition from a web service and | ||
168 | + * loads it. | ||
169 | + * | ||
170 | + * | ||
171 | + * DO IT AGAIN. : SHOULD PHP CODE BE GET BY WEBSERVICES ? | ||
172 | + */ | ||
173 | + public function loadFromService() { | ||
174 | + | ||
175 | + //else load from web service | ||
176 | + $url = Proj4php::$defsLookupService . '/' . $this->srsAuth . '/' . $this->srsProjNumber . '/proj4/'; | ||
177 | + try { | ||
178 | + Proj4php::$defs[strtoupper($this->srsAuth) . ":" . $this->srsProjNumber] = Proj4php::loadScript( $url ); | ||
179 | + } catch ( Exception $e ) { | ||
180 | + $this->defsFailed(); | ||
181 | + } | ||
182 | + } | ||
183 | + | ||
184 | + /** | ||
185 | + * Function: defsLoaded | ||
186 | + * Continues the Proj object initilization once the def file is loaded | ||
187 | + * | ||
188 | + */ | ||
189 | + public function defsLoaded() { | ||
190 | + | ||
191 | + $this->parseDefs(); | ||
192 | + | ||
193 | + $this->loadProjCode( $this->projName ); | ||
194 | + } | ||
195 | + | ||
196 | + /** | ||
197 | + * Function: checkDefsLoaded | ||
198 | + * $this is the loadCheck method to see if the def object exists | ||
199 | + * | ||
200 | + */ | ||
201 | + public function checkDefsLoaded() { | ||
202 | + return isset(Proj4php::$defs[$this->srsCode]) && !empty(Proj4php::$defs[$this->srsCode]); | ||
203 | + } | ||
204 | + | ||
205 | + /** | ||
206 | + * Function: defsFailed | ||
207 | + * Report an error in loading the defs file, but continue on using WGS84 | ||
208 | + * | ||
209 | + */ | ||
210 | + public function defsFailed() { | ||
211 | + Proj4php::reportError( 'failed to load projection definition for: ' . $this->srsCode ); | ||
212 | + Proj4php::$defs[$this->srsCode] = Proj4php::$defs['WGS84']; //set it to something so it can at least continue | ||
213 | + $this->defsLoaded(); | ||
214 | + } | ||
215 | + | ||
216 | + /** | ||
217 | + * Function: loadProjCode | ||
218 | + * Loads projection class code dynamically if required. | ||
219 | + * Projection code may be included either through a script tag or in | ||
220 | + * a built version of proj4php | ||
221 | + * | ||
222 | + * An exception occurs if the projection is not found. | ||
223 | + */ | ||
224 | + public function loadProjCode( $projName ) { | ||
225 | + if( array_key_exists( $projName, Proj4php::$proj )) { | ||
226 | + $this->initTransforms(); | ||
227 | + return; | ||
228 | + } | ||
229 | + //the filename for the projection code | ||
230 | + $filename = dirname( __FILE__ ) . '/projCode/' . $projName . '.php'; | ||
231 | + | ||
232 | + try { | ||
233 | + Proj4php::loadScript( $filename ); | ||
234 | + $this->loadProjCodeSuccess( $projName ); | ||
235 | + | ||
236 | + } catch ( Exception $e ) { | ||
237 | + $this->loadProjCodeFailure( $projName ); | ||
238 | + } | ||
239 | + } | ||
240 | + | ||
241 | + /** | ||
242 | + * Function: loadProjCodeSuccess | ||
243 | + * Loads any proj dependencies or continue on to final initialization. | ||
244 | + * | ||
245 | + */ | ||
246 | + public function loadProjCodeSuccess( $projName ) { | ||
247 | + | ||
248 | + if( isset(Proj4php::$proj[$projName]->dependsOn) && !empty(Proj4php::$proj[$projName]->dependsOn)) { | ||
249 | + $this->loadProjCode( Proj4php::$proj[$projName]->dependsOn ); | ||
250 | + } else { | ||
251 | + $this->initTransforms(); | ||
252 | + } | ||
253 | + } | ||
254 | + | ||
255 | + /** | ||
256 | + * Function: defsFailed | ||
257 | + * Report an error in loading the proj file. Initialization of the Proj | ||
258 | + * object has failed and the readyToUse flag will never be set. | ||
259 | + * | ||
260 | + */ | ||
261 | + public function loadProjCodeFailure( $projName ) { | ||
262 | + Proj4php::reportError( "failed to find projection file for: " . $projName ); | ||
263 | + //TBD initialize with identity transforms so proj will still work? | ||
264 | + } | ||
265 | + | ||
266 | + /** | ||
267 | + * Function: checkCodeLoaded | ||
268 | + * $this is the loadCheck method to see if the projection code is loaded | ||
269 | + * | ||
270 | + */ | ||
271 | + public function checkCodeLoaded( $projName ) { | ||
272 | + | ||
273 | + return isset(Proj4php::$proj[$projName]) && !empty(Proj4php::$proj[$projName]); | ||
274 | + } | ||
275 | + | ||
276 | + /** | ||
277 | + * Function: initTransforms | ||
278 | + * Finalize the initialization of the Proj object | ||
279 | + * | ||
280 | + */ | ||
281 | + public function initTransforms() { | ||
282 | + $this->projection = new Proj4php::$proj[$this->projName]; | ||
283 | + Proj4php::extend( $this->projection, $this ); | ||
284 | + // initiate depending class | ||
285 | + | ||
286 | + if( false !== ($dependsOn = isset($this->projection->dependsOn) && !empty($this->projection->dependsOn) ? $this->projection->dependsOn : false) ) | ||
287 | + { | ||
288 | + Proj4php::extend( Proj4php::$proj[$dependsOn], $this->projection); | ||
289 | + Proj4php::$proj[$dependsOn]->init(); | ||
290 | + Proj4php::extend( $this->projection, Proj4php::$proj[$dependsOn] ); | ||
291 | + } | ||
292 | + $this->init(); | ||
293 | + $this->readyToUse = true; | ||
294 | + } | ||
295 | + | ||
296 | + /** | ||
297 | + * | ||
298 | + */ | ||
299 | + public function init() { | ||
300 | + $this->projection->init(); | ||
301 | + } | ||
302 | + | ||
303 | + /** | ||
304 | + * | ||
305 | + * @param type $pt | ||
306 | + * @return type | ||
307 | + */ | ||
308 | + public function forward( $pt ) { | ||
309 | + return $this->projection->forward( $pt ); | ||
310 | + } | ||
311 | + | ||
312 | + /** | ||
313 | + * | ||
314 | + * @param type $pt | ||
315 | + * @return type | ||
316 | + */ | ||
317 | + public function inverse( $pt ) { | ||
318 | + return $this->projection->inverse( $pt ); | ||
319 | + } | ||
320 | + | ||
321 | + /** | ||
322 | + * Function: parseWKT | ||
323 | + * Parses a WKT string to get initialization parameters | ||
324 | + * | ||
325 | + */ | ||
326 | + public function parseWKT( $wkt ) { | ||
327 | + | ||
328 | + if( false === ($match = preg_match( $this->wktRE, $wkt, $wktMatch )) ) | ||
329 | + return; | ||
330 | + | ||
331 | + $wktObject = $wktMatch[1]; | ||
332 | + $wktContent = $wktMatch[2]; | ||
333 | + $wktTemp = explode( ",", $wktContent ); | ||
334 | + | ||
335 | + $wktName = (strtoupper($wktObject) == "TOWGS84") ? "TOWGS84" : array_shift( $wktTemp ); | ||
336 | + $wktName = preg_replace( '/^\"/', "", $wktName ); | ||
337 | + $wktName = preg_replace( '/\"$/', "", $wktName ); | ||
338 | + | ||
339 | + /* | ||
340 | + $wktContent = implode(",",$wktTemp); | ||
341 | + $wktArray = explode("],",$wktContent); | ||
342 | + for ($i=0; i<sizeof($wktArray)-1; ++$i) { | ||
343 | + $wktArray[$i] .= "]"; | ||
344 | + } | ||
345 | + */ | ||
346 | + | ||
347 | + $wktArray = array(); | ||
348 | + $bkCount = 0; | ||
349 | + $obj = ""; | ||
350 | + | ||
351 | + foreach( $wktTemp as $token ) { | ||
352 | + | ||
353 | + $bkCount = substr_count($token, "[") - substr_count($token, "]"); | ||
354 | + | ||
355 | + // ??? | ||
356 | + $obj .= $token; | ||
357 | + if( $bkCount === 0 ) { | ||
358 | + array_push( $wktArray, $obj ); | ||
359 | + $obj = ""; | ||
360 | + } else { | ||
361 | + $obj .= ","; | ||
362 | + } | ||
363 | + } | ||
364 | + | ||
365 | + //do something based on the type of the wktObject being parsed | ||
366 | + //add in variations in the spelling as required | ||
367 | + switch( $wktObject ) { | ||
368 | + case 'LOCAL_CS': | ||
369 | + $this->projName = 'identity'; | ||
370 | + $this->localCS = true; | ||
371 | + $this->srsCode = $wktName; | ||
372 | + break; | ||
373 | + case 'GEOGCS': | ||
374 | + $this->projName = 'longlat'; | ||
375 | + $this->geocsCode = $wktName; | ||
376 | + if( !$this->srsCode ) | ||
377 | + $this->srsCode = $wktName; | ||
378 | + break; | ||
379 | + case 'PROJCS': | ||
380 | + $$this->srsCode = $wktName; | ||
381 | + break; | ||
382 | + case 'GEOCCS': | ||
383 | + break; | ||
384 | + case 'PROJECTION': | ||
385 | + $this->projName = Proj4php::$wktProjections[$wktName]; | ||
386 | + break; | ||
387 | + case 'DATUM': | ||
388 | + $this->datumName = $wktName; | ||
389 | + break; | ||
390 | + case 'LOCAL_DATUM': | ||
391 | + $this->datumCode = 'none'; | ||
392 | + break; | ||
393 | + case 'SPHEROID': | ||
394 | + $this->ellps = $wktName; | ||
395 | + $this->a = floatval( array_shift( $wktArray ) ); | ||
396 | + $this->rf = floatval( array_shift( $wktArray ) ); | ||
397 | + break; | ||
398 | + case 'PRIMEM': | ||
399 | + $this->from_greenwich = floatval( array_shift( $wktArray ) ); //to radians? | ||
400 | + break; | ||
401 | + case 'UNIT': | ||
402 | + $this->units = $wktName; | ||
403 | + $this->unitsPerMeter = floatval( array_shift( $wktArray ) ); | ||
404 | + break; | ||
405 | + case 'PARAMETER': | ||
406 | + $name = strtolower( $wktName ); | ||
407 | + $value = floatval( array_shift( $wktArray ) ); | ||
408 | + //there may be many variations on the wktName values, add in case | ||
409 | + //statements as required | ||
410 | + switch( $name ) { | ||
411 | + case 'false_easting': | ||
412 | + $this->x0 = $value; | ||
413 | + break; | ||
414 | + case 'false_northing': | ||
415 | + $this->y0 = $value; | ||
416 | + break; | ||
417 | + case 'scale_factor': | ||
418 | + $this->k0 = $value; | ||
419 | + break; | ||
420 | + case 'central_meridian': | ||
421 | + $this->long0 = $value * Proj4php::$common->D2R; | ||
422 | + break; | ||
423 | + case 'latitude_of_origin': | ||
424 | + $this->lat0 = $value * Proj4php::$common->D2R; | ||
425 | + break; | ||
426 | + case 'more_here': | ||
427 | + break; | ||
428 | + default: | ||
429 | + break; | ||
430 | + } | ||
431 | + break; | ||
432 | + case 'TOWGS84': | ||
433 | + $this->datum_params = $wktArray; | ||
434 | + break; | ||
435 | + //DGR 2010-11-12: AXIS | ||
436 | + case 'AXIS': | ||
437 | + $name = strtolower( $wktName ); | ||
438 | + $value = array_shift( $wktArray ); | ||
439 | + switch( $value ) { | ||
440 | + case 'EAST' : $value = 'e'; | ||
441 | + break; | ||
442 | + case 'WEST' : $value = 'w'; | ||
443 | + break; | ||
444 | + case 'NORTH': $value = 'n'; | ||
445 | + break; | ||
446 | + case 'SOUTH': $value = 's'; | ||
447 | + break; | ||
448 | + case 'UP' : $value = 'u'; | ||
449 | + break; | ||
450 | + case 'DOWN' : $value = 'd'; | ||
451 | + break; | ||
452 | + case 'OTHER': | ||
453 | + default : $value = ' '; | ||
454 | + break; //FIXME | ||
455 | + } | ||
456 | + if( !$this->axis ) { | ||
457 | + $this->axis = "enu"; | ||
458 | + } | ||
459 | + switch( $name ) { | ||
460 | + case 'X': $this->axis = $value . substr( $this->axis, 1, 2 ); | ||
461 | + break; | ||
462 | + case 'Y': $this->axis = substr( $this->axis, 0, 1 ) . $value . substr( $this->axis, 2, 1 ); | ||
463 | + break; | ||
464 | + case 'Z': $this->axis = substr( $this->axis, 0, 2 ) . $value; | ||
465 | + break; | ||
466 | + default : break; | ||
467 | + } | ||
468 | + case 'MORE_HERE': | ||
469 | + break; | ||
470 | + default: | ||
471 | + break; | ||
472 | + } | ||
473 | + | ||
474 | + foreach( $wktArray as $wktArrayContent ) | ||
475 | + $this->parseWKT( $wktArrayContent ); | ||
476 | + } | ||
477 | + | ||
478 | + /** | ||
479 | + * Function: parseDefs | ||
480 | + * Parses the PROJ.4 initialization string and sets the associated properties. | ||
481 | + * | ||
482 | + */ | ||
483 | + public function parseDefs() { | ||
484 | + | ||
485 | + $this->defData = Proj4php::$defs[$this->srsCode]; | ||
486 | + #$paramName; | ||
487 | + #$paramVal; | ||
488 | + if( !$this->defData ) { | ||
489 | + return; | ||
490 | + } | ||
491 | + $paramArray = explode( "+", $this->defData ); | ||
492 | + for( $prop = 0; $prop < sizeof( $paramArray ); $prop++ ) { | ||
493 | + if( strlen( $paramArray[$prop] ) == 0 ) | ||
494 | + continue; | ||
495 | + $property = explode( "=", $paramArray[$prop] ); | ||
496 | + $paramName = strtolower( $property[0] ); | ||
497 | + if( sizeof( $property ) >= 2 ) { | ||
498 | + $paramVal = $property[1]; | ||
499 | + } | ||
500 | + | ||
501 | + switch( trim( $paramName ) ) { // trim out spaces | ||
502 | + case "": break; // throw away nameless parameter | ||
503 | + case "title": $this->title = $paramVal; | ||
504 | + break; | ||
505 | + case "proj": $this->projName = trim( $paramVal ); | ||
506 | + break; | ||
507 | + case "units": $this->units = trim( $paramVal ); | ||
508 | + break; | ||
509 | + case "datum": $this->datumCode = trim( $paramVal ); | ||
510 | + break; | ||
511 | + case "nadgrids": $this->nagrids = trim( $paramVal ); | ||
512 | + break; | ||
513 | + case "ellps": $this->ellps = trim( $paramVal ); | ||
514 | + break; | ||
515 | + case "a": $this->a = floatval( $paramVal ); | ||
516 | + break; // semi-major radius | ||
517 | + case "b": $this->b = floatval( $paramVal ); | ||
518 | + break; // semi-minor radius | ||
519 | + // DGR 2007-11-20 | ||
520 | + case "rf": $this->rf = floatval( paramVal ); | ||
521 | + break; // inverse flattening rf= a/(a-b) | ||
522 | + case "lat_0": $this->lat0 = $paramVal * Proj4php::$common->D2R; | ||
523 | + break; // phi0, central latitude | ||
524 | + case "lat_1": $this->lat1 = $paramVal * Proj4php::$common->D2R; | ||
525 | + break; //standard parallel 1 | ||
526 | + case "lat_2": $this->lat2 = $paramVal * Proj4php::$common->D2R; | ||
527 | + break; //standard parallel 2 | ||
528 | + case "lat_ts": $this->lat_ts = $paramVal * Proj4php::$common->D2R; | ||
529 | + break; // used in merc and eqc | ||
530 | + case "lon_0": $this->long0 = $paramVal * Proj4php::$common->D2R; | ||
531 | + break; // lam0, central longitude | ||
532 | + case "alpha": $this->alpha = floatval( $paramVal ) * Proj4php::$common->D2R; | ||
533 | + break; //for somerc projection | ||
534 | + case "lonc": $this->longc = paramVal * Proj4php::$common->D2R; | ||
535 | + break; //for somerc projection | ||
536 | + case "x_0": $this->x0 = floatval( $paramVal ); | ||
537 | + break; // false easting | ||
538 | + case "y_0": $this->y0 = floatval( $paramVal ); | ||
539 | + break; // false northing | ||
540 | + case "k_0": $this->k0 = floatval( $paramVal ); | ||
541 | + break; // projection scale factor | ||
542 | + case "k": $this->k0 = floatval( $paramVal ); | ||
543 | + break; // both forms returned | ||
544 | + case "r_a": $this->R_A = true; | ||
545 | + break; // sphere--area of ellipsoid | ||
546 | + case "zone": $this->zone = intval( $paramVal, 10 ); | ||
547 | + break; // UTM Zone | ||
548 | + case "south": $this->utmSouth = true; | ||
549 | + break; // UTM north/south | ||
550 | + case "towgs84": $this->datum_params = explode( ",", $paramVal ); | ||
551 | + break; | ||
552 | + case "to_meter": $this->to_meter = floatval( $paramVal ); | ||
553 | + break; // cartesian scaling | ||
554 | + case "from_greenwich": $this->from_greenwich = $paramVal * Proj4php::$common->D2R; | ||
555 | + break; | ||
556 | + // DGR 2008-07-09 : if pm is not a well-known prime meridian take | ||
557 | + // the value instead of 0.0, then convert to radians | ||
558 | + case "pm": $paramVal = trim( $paramVal ); | ||
559 | + $this->from_greenwich = Proj4php::$primeMeridian[$paramVal] ? Proj4php::$primeMeridian[$paramVal] : floatval( $paramVal ); | ||
560 | + $this->from_greenwich *= Proj4php::$common->D2R; | ||
561 | + break; | ||
562 | + // DGR 2010-11-12: axis | ||
563 | + case "axis": $paramVal = trim( $paramVal ); | ||
564 | + $legalAxis = "ewnsud"; | ||
565 | + if( strlen( paramVal ) == 3 && | ||
566 | + strpos( $legalAxis, substr( $paramVal, 0, 1 ) ) !== false && | ||
567 | + strpos( $legalAxis, substr( $paramVal, 1, 1 ) ) !== false && | ||
568 | + strpos( $legalAxis, substr( $paramVal, 2, 1 ) ) !== false ) { | ||
569 | + $this->axis = $paramVal; | ||
570 | + } //FIXME: be silent ? | ||
571 | + break; | ||
572 | + case "no_defs": break; | ||
573 | + default: //alert("Unrecognized parameter: " . paramName); | ||
574 | + } // switch() | ||
575 | + } // for paramArray | ||
576 | + $this->deriveConstants(); | ||
577 | + } | ||
578 | + | ||
579 | + /** | ||
580 | + * Function: deriveConstants | ||
581 | + * Sets several derived constant values and initialization of datum and ellipse parameters. | ||
582 | + * | ||
583 | + */ | ||
584 | + public function deriveConstants() { | ||
585 | + | ||
586 | + if( isset( $this->nagrids ) && $this->nagrids == '@null' ) | ||
587 | + $this->datumCode = 'none'; | ||
588 | + | ||
589 | + if( isset( $this->datumCode ) && $this->datumCode != 'none' ) { | ||
590 | + | ||
591 | + $datumDef = Proj4php::$datum[$this->datumCode]; | ||
592 | + | ||
593 | + if( is_array($datumDef ) ) { | ||
594 | + $this->datum_params = array_key_exists( 'towgs84', $datumDef ) ? explode( ',', $datumDef['towgs84'] ) : null; | ||
595 | + $this->ellps = $datumDef['ellipse']; | ||
596 | + $this->datumName = array_key_exists( 'datumName', $datumDef ) ? $datumDef['datumName'] : $this->datumCode; | ||
597 | + } | ||
598 | + } | ||
599 | + if( !isset( $this->a ) ) { // do we have an ellipsoid? | ||
600 | + if( !isset( $this->ellps ) || strlen( $this->ellps ) == 0 || !array_key_exists( $this->ellps, Proj4php::$ellipsoid ) ) | ||
601 | + $ellipse = Proj4php::$ellipsoid['WGS84']; | ||
602 | + else { | ||
603 | + $ellipse = Proj4php::$ellipsoid[$this->ellps]; | ||
604 | + } | ||
605 | + | ||
606 | + Proj4php::extend( $this, $ellipse ); | ||
607 | + } | ||
608 | + | ||
609 | + if( isset( $this->rf ) && !isset( $this->b ) ) | ||
610 | + $this->b = (1.0 - 1.0 / $this->rf) * $this->a; | ||
611 | + | ||
612 | + if ( (isset($this->rf) && $this->rf === 0) || abs($this->a - $this->b) < Proj4php::$common->EPSLN) { | ||
613 | + $this->sphere = true; | ||
614 | + $this->b = $this->a; | ||
615 | + } | ||
616 | + $this->a2 = $this->a * $this->a; // used in geocentric | ||
617 | + $this->b2 = $this->b * $this->b; // used in geocentric | ||
618 | + $this->es = ($this->a2 - $this->b2) / $this->a2; // e ^ 2 | ||
619 | + $this->e = sqrt( $this->es ); // eccentricity | ||
620 | + if( isset( $this->R_A ) ) { | ||
621 | + $this->a *= 1. - $this->es * (Proj4php::$common->SIXTH + $this->es * (Proj4php::$common->RA4 + $this->es * Proj4php::$common->RA6)); | ||
622 | + $this->a2 = $this->a * $this->a; | ||
623 | + $this->b2 = $this->b * $this->b; | ||
624 | + $this->es = 0.0; | ||
625 | + } | ||
626 | + $this->ep2 = ($this->a2 - $this->b2) / $this->b2; // used in geocentric | ||
627 | + if( !isset( $this->k0 ) ) | ||
628 | + $this->k0 = 1.0; //default value | ||
629 | + | ||
630 | + //DGR 2010-11-12: axis | ||
631 | + if( !isset( $this->axis ) ) { | ||
632 | + $this->axis = "enu"; | ||
633 | + } | ||
634 | + | ||
635 | + $this->datum = new Proj4phpDatum( $this ); | ||
636 | + } | ||
637 | + | ||
638 | +} | ||
0 | \ No newline at end of file | 639 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aea.php
0 → 100644
@@ -0,0 +1,184 @@ | @@ -0,0 +1,184 @@ | ||
1 | +<?php | ||
2 | +/******************************************************************************* | ||
3 | + NAME ALBERS CONICAL EQUAL AREA | ||
4 | + | ||
5 | + PURPOSE: Transforms input longitude and latitude to Easting and Northing | ||
6 | + for the Albers Conical Equal Area projection. The longitude | ||
7 | + and latitude must be in radians. The Easting and Northing | ||
8 | + values will be returned in meters. | ||
9 | + | ||
10 | + PROGRAMMER DATE | ||
11 | + ---------- ---- | ||
12 | + T. Mittan, Feb, 1992 | ||
13 | + | ||
14 | + ALGORITHM REFERENCES | ||
15 | + | ||
16 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
17 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
18 | + State Government Printing Office, Washington D.C., 1987. | ||
19 | + | ||
20 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
21 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
22 | + Printing Office, Washington D.C., 1989. | ||
23 | + *******************************************************************************/ | ||
24 | + | ||
25 | +/** | ||
26 | + * Author : Julien Moquet | ||
27 | + * | ||
28 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
29 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
30 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
31 | + */ | ||
32 | +class Proj4phpProjAea { | ||
33 | + | ||
34 | + /** | ||
35 | + * | ||
36 | + * @return void | ||
37 | + */ | ||
38 | + public function init() { | ||
39 | + | ||
40 | + if( abs( $this->lat1 + $this->lat2 ) < Proj4php::$common->EPSLN ) { | ||
41 | + Proj4php::reportError( "aeaInitEqualLatitudes" ); | ||
42 | + return; | ||
43 | + } | ||
44 | + $this->temp = $this->b / $this->a; | ||
45 | + $this->es = 1.0 - pow( $this->temp, 2 ); | ||
46 | + $this->e3 = sqrt( $this->es ); | ||
47 | + | ||
48 | + $this->sin_po = sin( $this->lat1 ); | ||
49 | + $this->cos_po = cos( $this->lat1 ); | ||
50 | + $this->t1 = $this->sin_po; | ||
51 | + $this->con = $this->sin_po; | ||
52 | + $this->ms1 = Proj4php::$common->msfnz( $this->e3, $this->sin_po, $this->cos_po ); | ||
53 | + $this->qs1 = Proj4php::$common->qsfnz( $this->e3, $this->sin_po, $this->cos_po ); | ||
54 | + | ||
55 | + $this->sin_po = sin( $this->lat2 ); | ||
56 | + $this->cos_po = cos( $this->lat2 ); | ||
57 | + $this->t2 = $this->sin_po; | ||
58 | + $this->ms2 = Proj4php::$common->msfnz( $this->e3, $this->sin_po, $this->cos_po ); | ||
59 | + $this->qs2 = Proj4php::$common->qsfnz( $this->e3, $this->sin_po, $this->cos_po ); | ||
60 | + | ||
61 | + $this->sin_po = sin( $this->lat0 ); | ||
62 | + $this->cos_po = cos( $this->lat0 ); | ||
63 | + $this->t3 = $this->sin_po; | ||
64 | + $this->qs0 = Proj4php::$common->qsfnz( $this->e3, $this->sin_po, $this->cos_po ); | ||
65 | + | ||
66 | + if( abs( $this->lat1 - $this->lat2 ) > Proj4php::$common->EPSLN ) { | ||
67 | + $this->ns0 = ($this->ms1 * $this->ms1 - $this->ms2 * $this->ms2) / ($this->qs2 - $this->qs1); | ||
68 | + } else { | ||
69 | + $this->ns0 = $this->con; | ||
70 | + } | ||
71 | + | ||
72 | + $this->c = $this->ms1 * $this->ms1 + $this->ns0 * $this->qs1; | ||
73 | + $this->rh = $this->a * sqrt( $this->c - $this->ns0 * $this->qs0 ) / $this->ns0; | ||
74 | + } | ||
75 | + | ||
76 | + /** | ||
77 | + * Albers Conical Equal Area forward equations--mapping lat,long to x,y | ||
78 | + * | ||
79 | + * @param Point $p | ||
80 | + * @return Point $p | ||
81 | + */ | ||
82 | + public function forward( $p ) { | ||
83 | + | ||
84 | + $lon = $p->x; | ||
85 | + $lat = $p->y; | ||
86 | + | ||
87 | + $this->sin_phi = sin( $lat ); | ||
88 | + $this->cos_phi = cos( $lat ); | ||
89 | + | ||
90 | + $qs = Proj4php::$common->qsfnz( $this->e3, $this->sin_phi, $this->cos_phi ); | ||
91 | + $rh1 = $this->a * sqrt( $this->c - $this->ns0 * $qs ) / $this->ns0; | ||
92 | + $theta = $this->ns0 * Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
93 | + $x = rh1 * sin( $theta ) + $this->x0; | ||
94 | + $y = $this->rh - $rh1 * cos( $theta ) + $this->y0; | ||
95 | + | ||
96 | + $p->x = $x; | ||
97 | + $p->y = $y; | ||
98 | + | ||
99 | + return $p; | ||
100 | + } | ||
101 | + | ||
102 | + /** | ||
103 | + * | ||
104 | + * @param Point $p | ||
105 | + * @return Point $p | ||
106 | + */ | ||
107 | + public function inverse( $p ) { | ||
108 | + | ||
109 | + $p->x -= $this->x0; | ||
110 | + $p->y = $this->rh - $p->y + $this->y0; | ||
111 | + | ||
112 | + if( $this->ns0 >= 0 ) { | ||
113 | + $rh1 = sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
114 | + $con = 1.0; | ||
115 | + } else { | ||
116 | + $rh1 = -sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
117 | + $con = -1.0; | ||
118 | + } | ||
119 | + | ||
120 | + $theta = 0.0; | ||
121 | + if( $rh1 != 0.0 ) { | ||
122 | + $theta = atan2( $con * $p->x, $con * $p->y ); | ||
123 | + } | ||
124 | + | ||
125 | + $con = $rh1 * $this->ns0 / $this->a; | ||
126 | + $qs = ($this->c - $con * $con) / $this->ns0; | ||
127 | + | ||
128 | + if( $this->e3 >= 1e-10 ) { | ||
129 | + $con = 1 - .5 * (1.0 - $this->es) * log( (1.0 - $this->e3) / (1.0 + $this->e3) ) / $this->e3; | ||
130 | + if( abs( abs( $con ) - abs( $qs ) ) > .0000000001 ) { | ||
131 | + $lat = $this->phi1z( $this->e3, $qs ); | ||
132 | + } else { | ||
133 | + if( $qs >= 0 ) { | ||
134 | + $lat = .5 * Proj4php::$common->PI; | ||
135 | + } else { | ||
136 | + $lat = -.5 * Proj4php::$common->PI; | ||
137 | + } | ||
138 | + } | ||
139 | + } else { | ||
140 | + $lat = $this->phi1z( $this->e3, $qs ); | ||
141 | + } | ||
142 | + | ||
143 | + $lon = Proj4php::$common->adjust_lon( $theta / $this->ns0 + $this->long0 ); | ||
144 | + | ||
145 | + $p->x = $lon; | ||
146 | + $p->y = $lat; | ||
147 | + | ||
148 | + return $p; | ||
149 | + } | ||
150 | + | ||
151 | + /** | ||
152 | + * Function to compute phi1, the latitude for the inverse of the Albers Conical Equal-Area projection. | ||
153 | + * | ||
154 | + * @param type $eccent | ||
155 | + * @param type $qs | ||
156 | + * @return $phi or null on Convergence error | ||
157 | + */ | ||
158 | + public function phi1z( $eccent, $qs ) { | ||
159 | + | ||
160 | + $phi = Proj4php::$common->asinz( .5 * $qs ); | ||
161 | + | ||
162 | + if( $eccent < Proj4php::$common->EPSLN ) | ||
163 | + return $phi; | ||
164 | + | ||
165 | + $eccnts = $eccent * $eccent; | ||
166 | + for( $i = 1; $i <= 25; ++$i ) { | ||
167 | + $sinphi = sin( $phi ); | ||
168 | + $cosphi = cos( $phi ); | ||
169 | + $con = $eccent * $sinphi; | ||
170 | + $com = 1.0 - $con * $con; | ||
171 | + $dphi = .5 * $com * $com / $cosphi * ($qs / (1.0 - $eccnts) - $sinphi / $com + .5 / $eccent * log( (1.0 - $con) / (1.0 + $con) )); | ||
172 | + $phi = $phi + $dphi; | ||
173 | + if( abs( $dphi ) <= 1e-7 ) | ||
174 | + return $phi; | ||
175 | + } | ||
176 | + | ||
177 | + Proj4php::reportError( "aea:phi1z:Convergence error" ); | ||
178 | + | ||
179 | + return null; | ||
180 | + } | ||
181 | + | ||
182 | +} | ||
183 | + | ||
184 | +Proj4php::$proj['aea'] = new Proj4phpProjAea(); | ||
0 | \ No newline at end of file | 185 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/aeqd.php
0 → 100644
@@ -0,0 +1,101 @@ | @@ -0,0 +1,101 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | + * Author : Julien Moquet | ||
5 | + * | ||
6 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
7 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
8 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
9 | + */ | ||
10 | +class Proj4phpProjAeqd { | ||
11 | + | ||
12 | + public function init() { | ||
13 | + $this->sin_p12 = sin( $this->lat0 ); | ||
14 | + $this->cos_p12 = cos( $this->lat0 ); | ||
15 | + } | ||
16 | + | ||
17 | + /** | ||
18 | + * | ||
19 | + * @param type $p | ||
20 | + * @return type | ||
21 | + */ | ||
22 | + public function forward( $p ) { | ||
23 | + | ||
24 | + #$lon = $p->x; | ||
25 | + #$lat = $p->y; | ||
26 | + #$ksp; | ||
27 | + | ||
28 | + $sinphi = sin( $p->y ); | ||
29 | + $cosphi = cos( $p->y ); | ||
30 | + $dlon = Proj4php::$common->adjust_lon( lon - $this->long0 ); | ||
31 | + $coslon = cos( $dlon ); | ||
32 | + $g = $this->sin_p12 * $sinphi + $this->cos_p12 * $cosphi * $coslon; | ||
33 | + if( abs( abs( $g ) - 1.0 ) < Proj4php::$common->EPSLN ) { | ||
34 | + $ksp = 1.0; | ||
35 | + if( $g < 0.0 ) { | ||
36 | + Proj4php::reportError( "aeqd:Fwd:PointError" ); | ||
37 | + return; | ||
38 | + } | ||
39 | + } else { | ||
40 | + $z = acos( $g ); | ||
41 | + $ksp = $z / sin( $z ); | ||
42 | + } | ||
43 | + $p->x = $this->x0 + $this->a * $ksp * $cosphi * sin( $dlon ); | ||
44 | + $p->y = $this->y0 + $this->a * $ksp * ($this->cos_p12 * $sinphi - $this->sin_p12 * $cosphi * $coslon); | ||
45 | + | ||
46 | + return $p; | ||
47 | + } | ||
48 | + | ||
49 | + /** | ||
50 | + * | ||
51 | + * @param type $p | ||
52 | + * @return type | ||
53 | + */ | ||
54 | + public function inverse( $p ) { | ||
55 | + | ||
56 | + $p->x -= $this->x0; | ||
57 | + $p->y -= $this->y0; | ||
58 | + | ||
59 | + $rh = sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
60 | + if( $rh > (2.0 * Proj4php::$common->HALF_PI * $this->a) ) { | ||
61 | + Proj4php::reportError( "aeqdInvDataError" ); | ||
62 | + return; | ||
63 | + } | ||
64 | + $z = $rh / $this->a; | ||
65 | + | ||
66 | + $sinz = sin( $z ); | ||
67 | + $cosz = cos( $z ); | ||
68 | + | ||
69 | + $lon = $this->long0; | ||
70 | + #$lat; | ||
71 | + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { | ||
72 | + $lat = $this->lat0; | ||
73 | + } else { | ||
74 | + $lat = Proj4php::$common->asinz( $cosz * $this->sin_p12 + ($p->y * $sinz * $this->cos_p12) / $rh ); | ||
75 | + $con = abs( $this->lat0 ) - Proj4php::$common->HALF_PI; | ||
76 | + if( abs( $con ) <= Proj4php::$common->EPSLN ) { | ||
77 | + if( $this->lat0 >= 0.0 ) { | ||
78 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + atan2( $p->x, -$p->y ) ); | ||
79 | + } else { | ||
80 | + $lon = Proj4php::$common->adjust_lon( $this->long0 - atan2( -$p->x, $p->y ) ); | ||
81 | + } | ||
82 | + } else { | ||
83 | + $con = $cosz - $this->sin_p12 * sin( $lat ); | ||
84 | + if( (abs( $con ) < Proj4php::$common->EPSLN) && (abs( $p->x ) < Proj4php::$common->EPSLN) ) { | ||
85 | + //no-op, just keep the lon value as is | ||
86 | + } else { | ||
87 | + #$temp = atan2( ($p->x * $sinz * $this->cos_p12 ), ($con * $rh ) ); // $temp is unused !?! | ||
88 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + atan2( ($p->x * $sinz * $this->cos_p12 ), ($con * $rh ) ) ); | ||
89 | + } | ||
90 | + } | ||
91 | + } | ||
92 | + | ||
93 | + $p->x = $lon; | ||
94 | + $p->y = $lat; | ||
95 | + | ||
96 | + return $p; | ||
97 | + } | ||
98 | + | ||
99 | +} | ||
100 | + | ||
101 | +Proj4php::$proj['aeqd'] = new Proj4phpProjAeqd(); | ||
0 | \ No newline at end of file | 102 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cass.php
0 → 100644
@@ -0,0 +1,118 @@ | @@ -0,0 +1,118 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/******************************************************************************* | ||
4 | + NAME CASSINI | ||
5 | + | ||
6 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
7 | + Northing for the Cassini projection. The | ||
8 | + longitude and latitude must be in radians. The Easting | ||
9 | + and Northing values will be returned in meters. | ||
10 | + Ported from PROJ.4. | ||
11 | + | ||
12 | + | ||
13 | + ALGORITHM REFERENCES | ||
14 | + | ||
15 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
16 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
17 | + State Government Printing Office, Washington D.C., 1987. | ||
18 | + | ||
19 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
20 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
21 | + ****************************************************************************** */ | ||
22 | + | ||
23 | +/** | ||
24 | + * Author : Julien Moquet | ||
25 | + * | ||
26 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
27 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
28 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
29 | + */ | ||
30 | +//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"; | ||
31 | +// Initialize the Cassini projection | ||
32 | +// ----------------------------------------------------------------- | ||
33 | + | ||
34 | +class Proj4phpProjCass { | ||
35 | + | ||
36 | + public function init() { | ||
37 | + if( !$this->sphere ) { | ||
38 | + $this->en = Proj4php::$common->pj_enfn( $this->es ); | ||
39 | + $this->m0 = Proj4php::$common->pj_mlfn( $this->lat0, sin( $this->lat0 ), cos( $this->lat0 ), $this->en ); | ||
40 | + } | ||
41 | + } | ||
42 | + | ||
43 | + protected $C1 = .16666666666666666666; | ||
44 | + protected $C2 = .00833333333333333333; | ||
45 | + protected $C3 = .04166666666666666666; | ||
46 | + protected $C4 = .33333333333333333333; | ||
47 | + protected $C5 = .06666666666666666666; | ||
48 | + | ||
49 | + /* Cassini forward equations--mapping lat,long to x,y | ||
50 | + ----------------------------------------------------------------------- */ | ||
51 | + public function forward( $p ) { | ||
52 | + | ||
53 | + /* Forward equations | ||
54 | + ----------------- */ | ||
55 | + #$x; | ||
56 | + #$y; | ||
57 | + $lam = $p->x; | ||
58 | + $phi = $p->y; | ||
59 | + $lam = Proj4php::$common->adjust_lon( $lam - $this->long0 ); | ||
60 | + | ||
61 | + if( $this->sphere ) { | ||
62 | + $x = asin( cos( $phi ) * sin( $lam ) ); | ||
63 | + $y = atan2( tan( $phi ), cos( $lam ) ) - $this->phi0; | ||
64 | + } else { | ||
65 | + //ellipsoid | ||
66 | + $this->n = sin( $phi ); | ||
67 | + $this->c = cos( $phi ); | ||
68 | + $y = $this->pj_mlfn( $phi, $this->n, $this->c, $this->en ); | ||
69 | + $this->n = 1. / sqrt( 1. - $this->es * $this->n * $this->n ); | ||
70 | + $this->tn = tan( $phi ); | ||
71 | + $this->t = $this->tn * $this->tn; | ||
72 | + $this->a1 = $lam * $this->c; | ||
73 | + $this->c *= $this->es * $this->c / (1 - $this->es); | ||
74 | + $this->a2 = $this->a1 * $this->a1; | ||
75 | + $x = $this->n * $this->a1 * (1. - $this->a2 * $this->t * ($this->C1 - (8. - $this->t + 8. * $this->c) * $this->a2 * $this->C2)); | ||
76 | + $y -= $this->m0 - $this->n * $this->tn * $this->a2 * (.5 + (5. - $this->t + 6. * $this->c) * $this->a2 * $this->C3); | ||
77 | + } | ||
78 | + | ||
79 | + $p->x = $this->a * $x + $this->x0; | ||
80 | + $p->y = $this->a * $y + $this->y0; | ||
81 | + | ||
82 | + return $p; | ||
83 | + } | ||
84 | + | ||
85 | + /* Inverse equations | ||
86 | + ----------------- */ | ||
87 | + public function inverse( $p ) { | ||
88 | + $p->x -= $this->x0; | ||
89 | + $p->y -= $this->y0; | ||
90 | + $x = $p->x / $this->a; | ||
91 | + $y = $p->y / $this->a; | ||
92 | + | ||
93 | + if( $this->sphere ) { | ||
94 | + $this->dd = $y + $this->lat0; | ||
95 | + $phi = asin( sin( $this->dd ) * cos( $x ) ); | ||
96 | + $lam = atan2( tan( $x ), cos( $this->dd ) ); | ||
97 | + } else { | ||
98 | + /* ellipsoid */ | ||
99 | + $ph1 = Proj4php::$common->pj_inv_mlfn( $this->m0 + $y, $this->es, $this->en ); | ||
100 | + $this->tn = tan( $ph1 ); | ||
101 | + $this->t = $this->tn * $this->tn; | ||
102 | + $this->n = sin( $ph1 ); | ||
103 | + $this->r = 1. / (1. - $this->es * $this->n * $this->n); | ||
104 | + $this->n = sqrt( $this->r ); | ||
105 | + $this->r *= (1. - $this->es) * $this->n; | ||
106 | + $this->dd = $x / $this->n; | ||
107 | + $this->d2 = $this->dd * $this->dd; | ||
108 | + $phi = $ph1 - ($this->n * $this->tn / $this->r) * $this->d2 * (.5 - (1. + 3. * $this->t) * $this->d2 * $this->C3); | ||
109 | + $lam = $this->dd * (1. + $this->t * $this->d2 * (-$this->C4 + (1. + 3. * $this->t) * $this->d2 * $this->C5)) / cos( $ph1 ); | ||
110 | + } | ||
111 | + $p->x = Proj4php::$common->adjust_lon( $this->long0 + $lam ); | ||
112 | + $p->y = $phi; | ||
113 | + | ||
114 | + return $p; | ||
115 | + } | ||
116 | +} | ||
117 | + | ||
118 | +Proj4php::$proj['cass'] = new Proj4phpProjCass(); | ||
0 | \ No newline at end of file | 119 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/cea.php
0 → 100644
@@ -0,0 +1,97 @@ | @@ -0,0 +1,97 @@ | ||
1 | +<?php | ||
2 | +/******************************************************************************* | ||
3 | + NAME LAMBERT CYLINDRICAL EQUAL AREA | ||
4 | + | ||
5 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
6 | + Northing for the Lambert Cylindrical Equal Area projection. | ||
7 | + This class of projection includes the Behrmann and | ||
8 | + Gall-Peters Projections. The | ||
9 | + longitude and latitude must be in radians. The Easting | ||
10 | + and Northing values will be returned in meters. | ||
11 | + | ||
12 | + PROGRAMMER DATE | ||
13 | + ---------- ---- | ||
14 | + R. Marsden August 2009 | ||
15 | + Winwaed Software Tech LLC, http://www.winwaed.com | ||
16 | + | ||
17 | + This function was adapted from the Miller Cylindrical Projection in the Proj4php | ||
18 | + library. | ||
19 | + | ||
20 | + Note: This implementation assumes a Spherical Earth. The (commented) code | ||
21 | + has been included for the ellipsoidal forward transform, but derivation of | ||
22 | + the ellispoidal inverse transform is beyond me. Note that most of the | ||
23 | + Proj4php implementations do NOT currently support ellipsoidal figures. | ||
24 | + Therefore this is not seen as a problem - especially this lack of support | ||
25 | + is explicitly stated here. | ||
26 | + | ||
27 | + ALGORITHM REFERENCES | ||
28 | + | ||
29 | + 1. "Cartographic Projection Procedures for the UNIX Environment - | ||
30 | + A User's Manual" by Gerald I. Evenden, USGS Open File Report 90-284 | ||
31 | + and Release 4 Interim Reports (2003) | ||
32 | + | ||
33 | + 2. Snyder, John P., "Flattening the Earth - Two Thousand Years of Map | ||
34 | + Projections", Univ. Chicago Press, 1993 | ||
35 | + ****************************************************************************** */ | ||
36 | + | ||
37 | +/** | ||
38 | + * Author : Julien Moquet | ||
39 | + * | ||
40 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
41 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
42 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
43 | + */ | ||
44 | +class Proj4phpProjCea { | ||
45 | + /* Initialize the Cylindrical Equal Area projection | ||
46 | + ------------------------------------------- */ | ||
47 | + | ||
48 | + public function init() { | ||
49 | + //no-op | ||
50 | + } | ||
51 | + | ||
52 | + /* Cylindrical Equal Area forward equations--mapping lat,long to x,y | ||
53 | + ------------------------------------------------------------ */ | ||
54 | + public function forward( $p ) { | ||
55 | + | ||
56 | + $lon = $p->x; | ||
57 | + $lat = $p->y; | ||
58 | + | ||
59 | + /* Forward equations | ||
60 | + ----------------- */ | ||
61 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
62 | + $x = $this->x0 + $this->a * $dlon * cos( $this->lat_ts ); | ||
63 | + $y = $this->y0 + $this->a * sin( $lat ) / cos( $this->lat_ts ); | ||
64 | + /* Elliptical Forward Transform | ||
65 | + Not implemented due to a lack of a matchign inverse function | ||
66 | + { | ||
67 | + $Sin_Lat = sin(lat); | ||
68 | + $Rn = $this->a * (sqrt(1.0e0 - $this->es * Sin_Lat * Sin_Lat )); | ||
69 | + x = $this->x0 + $this->a * dlon * cos($this->lat_ts); | ||
70 | + y = $this->y0 + Rn * sin(lat) / cos($this->lat_ts); | ||
71 | + } | ||
72 | + */ | ||
73 | + | ||
74 | + $p->x = $x; | ||
75 | + $p->y = $y; | ||
76 | + | ||
77 | + return $p; | ||
78 | + } | ||
79 | + | ||
80 | + /** | ||
81 | + * Cylindrical Equal Area inverse equations--mapping x,y to lat/long | ||
82 | + * | ||
83 | + * @param type $p | ||
84 | + * @return type | ||
85 | + */ | ||
86 | + public function inverse( $p ) { | ||
87 | + $p->x -= $this->x0; | ||
88 | + $p->y -= $this->y0; | ||
89 | + | ||
90 | + $p->x = Proj4php::$common->adjust_lon( $this->long0 + ($p->x / $this->a) / cos( $this->lat_ts ) ); | ||
91 | + $p->y = asin( ($p->y / $this->a) * cos( $this->lat_ts ) ); | ||
92 | + | ||
93 | + return $p; | ||
94 | + } | ||
95 | +} | ||
96 | + | ||
97 | +Proj4php::$proj['cea'] = new Proj4phpProjCea(); | ||
0 | \ No newline at end of file | 98 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqc.php
0 → 100644
@@ -0,0 +1,58 @@ | @@ -0,0 +1,58 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/* similar to equi.js FIXME proj4 uses eqc */ | ||
10 | +class Proj4phpProjEqc { | ||
11 | + | ||
12 | + public function init() { | ||
13 | + | ||
14 | + if( !$this->x0 ) | ||
15 | + $this->x0 = 0; | ||
16 | + if( !$this->y0 ) | ||
17 | + $this->y0 = 0; | ||
18 | + if( !$this->lat0 ) | ||
19 | + $this->lat0 = 0; | ||
20 | + if( !$this->long0 ) | ||
21 | + $this->long0 = 0; | ||
22 | + if( !$this->lat_ts ) | ||
23 | + $this->lat_ts = 0; | ||
24 | + if( !$this->title ) | ||
25 | + $this->title = "Equidistant Cylindrical (Plate Carre)"; | ||
26 | + | ||
27 | + $this->rc = cos( $this->lat_ts ); | ||
28 | + } | ||
29 | + | ||
30 | + // forward equations--mapping lat,long to x,y | ||
31 | + // ----------------------------------------------------------------- | ||
32 | + public function forward( $p ) { | ||
33 | + | ||
34 | + $lon = $p->x; | ||
35 | + $lat = $p->y; | ||
36 | + | ||
37 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
38 | + $dlat = Proj4php::$common->adjust_lat( $lat - $this->lat0 ); | ||
39 | + $p->x = $this->x0 + ($this->a * $dlon * $this->rc); | ||
40 | + $p->y = $this->y0 + ($this->a * $dlat ); | ||
41 | + return $p; | ||
42 | + } | ||
43 | + | ||
44 | + // inverse equations--mapping x,y to lat/long | ||
45 | + // ----------------------------------------------------------------- | ||
46 | + public function inverse( $p ) { | ||
47 | + | ||
48 | + $x = $p->x; | ||
49 | + $y = $p->y; | ||
50 | + | ||
51 | + $p->x = Proj4php::$common->adjust_lon( $this->long0 + (($x - $this->x0) / ($this->a * $this->rc)) ); | ||
52 | + $p->y = Proj4php::$common->adjust_lat( $this->lat0 + (($y - $this->y0) / ($this->a )) ); | ||
53 | + return $p; | ||
54 | + } | ||
55 | + | ||
56 | +} | ||
57 | + | ||
58 | +Proj4php::$proj['eqc'] = new Proj4phpProjEqc(); | ||
0 | \ No newline at end of file | 59 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/eqdc.php
0 → 100644
@@ -0,0 +1,152 @@ | @@ -0,0 +1,152 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME EQUIDISTANT CONIC | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and Northing | ||
13 | + for the Equidistant Conic projection. The longitude and | ||
14 | + latitude must be in radians. The Easting and Northing values | ||
15 | + will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + T. Mittan Mar, 1993 | ||
20 | + | ||
21 | + ALGORITHM REFERENCES | ||
22 | + | ||
23 | + 1. Snyder, John $p->, "Map Projections--A Working Manual", U.S. Geological | ||
24 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
25 | + State Government Printing Office, Washington D.C., 1987. | ||
26 | + | ||
27 | + 2. Snyder, John $p-> and Voxland, Philip M., "An Album of Map Projections", | ||
28 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
29 | + Printing Office, Washington D.C., 1989. | ||
30 | +*******************************************************************************/ | ||
31 | + | ||
32 | +/* Variables common to all subroutines in this code file | ||
33 | +-----------------------------------------------------*/ | ||
34 | + | ||
35 | +class Proj4phpProjEqdc { | ||
36 | + | ||
37 | + /* Initialize the Equidistant Conic projection | ||
38 | + ------------------------------------------ */ | ||
39 | + public function init() { | ||
40 | + | ||
41 | + /* Place parameters in static storage for common use | ||
42 | + ------------------------------------------------- */ | ||
43 | + if( !$this->mode ) | ||
44 | + $this->mode = 0; //chosen default mode | ||
45 | + $this->temp = $this->b / $this->a; | ||
46 | + $this->es = 1.0 - pow( $this->temp, 2 ); | ||
47 | + $this->e = sqrt( $this->es ); | ||
48 | + $this->e0 = Proj4php::$common->e0fn( $this->es ); | ||
49 | + $this->e1 = Proj4php::$common->e1fn( $this->es ); | ||
50 | + $this->e2 = Proj4php::$common->e2fn( $this->es ); | ||
51 | + $this->e3 = Proj4php::$common->e3fn( $this->es ); | ||
52 | + | ||
53 | + $this->sinphi = sin( $this->lat1 ); | ||
54 | + $this->cosphi = cos( $this->lat1 ); | ||
55 | + | ||
56 | + $this->ms1 = Proj4php::$common->msfnz( $this->e, $this->sinphi, $this->cosphi ); | ||
57 | + $this->ml1 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat1 ); | ||
58 | + | ||
59 | + /* format B | ||
60 | + --------- */ | ||
61 | + if( $this->mode != 0 ) { | ||
62 | + if( abs( $this->lat1 + $this->lat2 ) < Proj4php::$common->EPSLN ) { | ||
63 | + Proj4php::reportError( "eqdc:Init:EqualLatitudes" ); | ||
64 | + //return(81); | ||
65 | + } | ||
66 | + $this->sinphi = sin( $this->lat2 ); | ||
67 | + $this->cosphi = cos( $this->lat2 ); | ||
68 | + | ||
69 | + $this->ms2 = Proj4php::$common->msfnz( $this->e, $this->sinphi, $this->cosphi ); | ||
70 | + $this->ml2 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat2 ); | ||
71 | + if( abs( $this->lat1 - $this->lat2 ) >= Proj4php::$common->EPSLN ) { | ||
72 | + $this->ns = ($this->ms1 - $this->ms2) / ($this->ml2 - $this->ml1); | ||
73 | + } else { | ||
74 | + $this->ns = $this->sinphi; | ||
75 | + } | ||
76 | + } else { | ||
77 | + $this->ns = $this->sinphi; | ||
78 | + } | ||
79 | + $this->g = $this->ml1 + $this->ms1 / $this->ns; | ||
80 | + $this->ml0 = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); | ||
81 | + $this->rh = $this->a * ($this->g - $this->ml0); | ||
82 | + } | ||
83 | + | ||
84 | + /* Equidistant Conic forward equations--mapping lat,long to x,y | ||
85 | + ----------------------------------------------------------- */ | ||
86 | + public function forward( $p ) { | ||
87 | + $lon = $p->x; | ||
88 | + $lat = $p->y; | ||
89 | + | ||
90 | + /* Forward equations | ||
91 | + ----------------- */ | ||
92 | + $ml = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); | ||
93 | + $rh1 = $this->a * ($this->g - $ml); | ||
94 | + $theta = $this->ns * Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
95 | + | ||
96 | + $x = $this->x0 + $rh1 * sin( $theta ); | ||
97 | + $y = $this->y0 + $this->rh - $rh1 * cos( $theta ); | ||
98 | + $p->x = $x; | ||
99 | + $p->y = $y; | ||
100 | + | ||
101 | + return $p; | ||
102 | + } | ||
103 | + | ||
104 | + /* Inverse equations | ||
105 | + ----------------- */ | ||
106 | + public function inverse( $p ) { | ||
107 | + | ||
108 | + $p->x -= $this->x0; | ||
109 | + $p->y = $this->rh - $p->y + $this->y0; | ||
110 | + | ||
111 | + if( $this->ns >= 0 ) { | ||
112 | + $rh1 = sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
113 | + $con = 1.0; | ||
114 | + } else { | ||
115 | + $rh1 = -sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
116 | + $con = -1.0; | ||
117 | + } | ||
118 | + $theta = 0.0; | ||
119 | + if( $rh1 != 0.0 ) | ||
120 | + $theta = atan2( $con * $p->x, $con * $p->y ); | ||
121 | + $ml = $this->g - $rh1 / $this->a; | ||
122 | + $lat = $this->phi3z( $ml, $this->e0, $this->e1, $this->e2, $this->e3 ); | ||
123 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + $theta / $this->ns ); | ||
124 | + | ||
125 | + $p->x = $lon; | ||
126 | + $p->y = $lat; | ||
127 | + | ||
128 | + return $p; | ||
129 | + } | ||
130 | + | ||
131 | + /* Function to compute latitude, phi3, for the inverse of the Equidistant | ||
132 | + Conic projection. | ||
133 | + ----------------------------------------------------------------- */ | ||
134 | + | ||
135 | + public function phi3z( $ml, $e0, $e1, $e2, $e3 ) { | ||
136 | + | ||
137 | + $phi = $ml; | ||
138 | + for( $i = 0; $i < 15; $i++ ) { | ||
139 | + $dphi = ($ml + $e1 * sin( 2.0 * $phi ) - $e2 * sin( 4.0 * $phi ) + $e3 * sin( 6.0 * $phi )) / $e0 - $phi; | ||
140 | + $phi += $dphi; | ||
141 | + if( abs( $dphi ) <= .0000000001 ) { | ||
142 | + return $phi; | ||
143 | + } | ||
144 | + } | ||
145 | + | ||
146 | + Proj4php::reportError( "PHI3Z-CONV:Latitude failed to converge after 15 iterations" ); | ||
147 | + | ||
148 | + return null; | ||
149 | + } | ||
150 | +} | ||
151 | + | ||
152 | +Proj4php::$proj['eqdc'] = new Proj4phpProjEqdc(); | ||
0 | \ No newline at end of file | 153 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/equi.php
0 → 100644
@@ -0,0 +1,80 @@ | @@ -0,0 +1,80 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME EQUIRECTANGULAR | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Equirectangular projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + T. Mittan Mar, 1993 | ||
20 | + | ||
21 | + ALGORITHM REFERENCES | ||
22 | + | ||
23 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
24 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
25 | + State Government Printing Office, Washington D.C., 1987. | ||
26 | + | ||
27 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
28 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
29 | + Printing Office, Washington D.C., 1989. | ||
30 | + *******************************************************************************/ | ||
31 | +class Proj4phpProjEqui { | ||
32 | + | ||
33 | + public function init() { | ||
34 | + if( !$this->x0 ) | ||
35 | + $this->x0 = 0; | ||
36 | + if( !$this->y0 ) | ||
37 | + $this->y0 = 0; | ||
38 | + if( !$this->lat0 ) | ||
39 | + $this->lat0 = 0; | ||
40 | + if( !$this->long0 ) | ||
41 | + $this->long0 = 0; | ||
42 | + ///$this->t2; | ||
43 | + } | ||
44 | + | ||
45 | + /* Equirectangular forward equations--mapping lat,long to x,y | ||
46 | + --------------------------------------------------------- */ | ||
47 | + public function forward( $p ) { | ||
48 | + | ||
49 | + $lon = $p->x; | ||
50 | + $lat = $p->y; | ||
51 | + | ||
52 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
53 | + $x = $this->x0 + $this->a * $dlon * cos( $this->lat0 ); | ||
54 | + $y = $this->y0 + $this->a * $lat; | ||
55 | + | ||
56 | + $this->t1 = $x; | ||
57 | + $this->t2 = cos( $this->lat0 ); | ||
58 | + $p->x = $x; | ||
59 | + $p->y = $y; | ||
60 | + return $p; | ||
61 | + } | ||
62 | + | ||
63 | + /* Equirectangular inverse equations--mapping x,y to lat/long | ||
64 | + --------------------------------------------------------- */ | ||
65 | + public function inverse( $p ) { | ||
66 | + | ||
67 | + $p->x -= $this->x0; | ||
68 | + $p->y -= $this->y0; | ||
69 | + $lat = $p->y / $this->a; | ||
70 | + | ||
71 | + if( abs( $lat ) > Proj4php::$common->HALF_PI ) { | ||
72 | + Proj4php::reportError( "equi:Inv:DataError" ); | ||
73 | + } | ||
74 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + $p->x / ($this->a * cos( $this->lat0 )) ); | ||
75 | + $p->x = $lon; | ||
76 | + $p->y = $lat; | ||
77 | + } | ||
78 | +} | ||
79 | + | ||
80 | +Proj4php::$proj['equi'] = new Proj4phpProjEqui(); | ||
0 | \ No newline at end of file | 81 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gauss.php
0 → 100644
@@ -0,0 +1,74 @@ | @@ -0,0 +1,74 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +class Proj4phpProjGauss { | ||
10 | + | ||
11 | + /** | ||
12 | + * | ||
13 | + */ | ||
14 | + public function init() { | ||
15 | + | ||
16 | + $sphi = sin( $this->lat0 ); | ||
17 | + $cphi = cos( $this->lat0 ); | ||
18 | + $cphi *= $cphi; | ||
19 | + $this->rc = sqrt( 1.0 - $this->es ) / (1.0 - $this->es * $sphi * $sphi); | ||
20 | + $this->C = sqrt( 1.0 + $this->es * $cphi * $cphi / (1.0 - $this->es) ); | ||
21 | + $this->phic0 = asin( $sphi / $this->C ); | ||
22 | + $this->ratexp = 0.5 * $this->C * $this->e; | ||
23 | + $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 )); | ||
24 | + } | ||
25 | + | ||
26 | + /** | ||
27 | + * | ||
28 | + * @param type $p | ||
29 | + * @return type | ||
30 | + */ | ||
31 | + public function forward( $p ) { | ||
32 | + $lon = $p->x; | ||
33 | + $lat = $p->y; | ||
34 | + | ||
35 | + $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; | ||
36 | + $p->x = $this->C * $lon; | ||
37 | + | ||
38 | + return $p; | ||
39 | + } | ||
40 | + | ||
41 | + /** | ||
42 | + * | ||
43 | + * @param type $p | ||
44 | + * @return null | ||
45 | + */ | ||
46 | + public function inverse( $p ) { | ||
47 | + | ||
48 | + $DEL_TOL = 1e-14; | ||
49 | + $lon = $p->x / $this->C; | ||
50 | + $lat = $p->y; | ||
51 | + $num = pow( tan( 0.5 * $lat + Proj4php::$common->FORTPI ) / $this->K, 1. / $this->C ); | ||
52 | + | ||
53 | + for( $i = Proj4php::$common->MAX_ITER; $i > 0; --$i ) { | ||
54 | + $lat = 2.0 * atan( $num * Proj4php::$common->srat( $this->e * sin( $p->y ), -0.5 * $this->e ) ) - Proj4php::$common->HALF_PI; | ||
55 | + if( abs( $lat - $p->y ) < $DEL_TOL ) | ||
56 | + break; | ||
57 | + $p->y = $lat; | ||
58 | + } | ||
59 | + | ||
60 | + /* convergence failed */ | ||
61 | + if( !$i ) { | ||
62 | + Proj4php::reportError( "gauss:inverse:convergence failed" ); | ||
63 | + return null; | ||
64 | + } | ||
65 | + | ||
66 | + $p->x = $lon; | ||
67 | + $p->y = $lat; | ||
68 | + | ||
69 | + return $p; | ||
70 | + } | ||
71 | + | ||
72 | +} | ||
73 | + | ||
74 | +Proj4php::$proj['gauss'] = new Proj4phpProjGauss(); | ||
0 | \ No newline at end of file | 75 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gnom.php
0 → 100644
@@ -0,0 +1,145 @@ | @@ -0,0 +1,145 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/***************************************************************************** | ||
10 | + NAME GNOMONIC | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Gnomonic Projection. | ||
14 | + Implementation based on the existing sterea and ortho | ||
15 | + implementations. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + Richard Marsden November 2009 | ||
20 | + | ||
21 | + ALGORITHM REFERENCES | ||
22 | + | ||
23 | + 1. Snyder, John P., "Flattening the Earth - Two Thousand Years of Map | ||
24 | + Projections", University of Chicago Press 1993 | ||
25 | + | ||
26 | + 2. Wolfram Mathworld "Gnomonic Projection" | ||
27 | + http://mathworld.wolfram.com/GnomonicProjection.html | ||
28 | + Accessed: 12th November 2009 | ||
29 | +******************************************************************************/ | ||
30 | + | ||
31 | +class Proj4phpProjGnom { | ||
32 | + | ||
33 | + /** | ||
34 | + * Initialize the Gnomonic projection | ||
35 | + * | ||
36 | + * @todo $def not used in context...? | ||
37 | + * @param type $def | ||
38 | + */ | ||
39 | + public function init( $def ) { | ||
40 | + | ||
41 | + /* Place parameters in static storage for common use | ||
42 | + ------------------------------------------------- */ | ||
43 | + $this->sin_p14 = sin( $this->lat0 ); | ||
44 | + $this->cos_p14 = cos( $this->lat0 ); | ||
45 | + | ||
46 | + // Approximation for projecting points to the horizon (infinity) | ||
47 | + $this->infinity_dist = 1000 * $this->a; | ||
48 | + $this->rc = 1; | ||
49 | + } | ||
50 | + | ||
51 | + /* Gnomonic forward equations--mapping lat,long to x,y | ||
52 | + --------------------------------------------------- */ | ||
53 | + public function forward( $p ) { | ||
54 | + | ||
55 | + /* | ||
56 | + $sinphi; | ||
57 | + $cosphi; // sin and cos value | ||
58 | + $dlon; // delta longitude value | ||
59 | + $coslon; // cos of longitude | ||
60 | + $ksp; // scale factor | ||
61 | + $g; | ||
62 | + */ | ||
63 | + | ||
64 | + $lon = $p->x; | ||
65 | + $lat = $p->y; | ||
66 | + /* Forward equations | ||
67 | + ----------------- */ | ||
68 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
69 | + | ||
70 | + $sinphi = sin( $lat ); | ||
71 | + $cosphi = cos( $lat ); | ||
72 | + | ||
73 | + $coslon = cos( $dlon ); | ||
74 | + $g = $this->sin_p14 * $sinphi + $this->cos_p14 * $cosphi * $coslon; | ||
75 | + $ksp = 1.0; | ||
76 | + | ||
77 | + if( (g > 0) || (abs( g ) <= Proj4php::$common->EPSLN) ) { | ||
78 | + $x = $this->x0 + $this->a * $ksp * $cosphi * sin( $dlon ) / $g; | ||
79 | + $y = $this->y0 + $this->a * $ksp * ($this->cos_p14 * $sinphi - $this->sin_p14 * $cosphi * $coslon) / $g; | ||
80 | + } else { | ||
81 | + Proj4php::reportError( "orthoFwdPointError" ); | ||
82 | + | ||
83 | + // Point is in the opposing hemisphere and is unprojectable | ||
84 | + // We still need to return a reasonable point, so we project | ||
85 | + // to infinity, on a bearing | ||
86 | + // equivalent to the northern hemisphere equivalent | ||
87 | + // This is a reasonable approximation for short shapes and lines that | ||
88 | + // straddle the horizon. | ||
89 | + | ||
90 | + $x = $this->x0 + $this->infinity_dist * $cosphi * sin( $dlon ); | ||
91 | + $y = $this->y0 + $this->infinity_dist * ($this->cos_p14 * $sinphi - $this->sin_p14 * $cosphi * $coslon); | ||
92 | + } | ||
93 | + | ||
94 | + $p->x = $x; | ||
95 | + $p->y = $y; | ||
96 | + | ||
97 | + return $p; | ||
98 | + } | ||
99 | + | ||
100 | + /** | ||
101 | + * | ||
102 | + * @param type $p | ||
103 | + * @return type | ||
104 | + */ | ||
105 | + public function inverse( $p ) { | ||
106 | + | ||
107 | + /* | ||
108 | + $rh; // Rho | ||
109 | + $z; // angle | ||
110 | + $sinc; | ||
111 | + $cosc; | ||
112 | + $c; | ||
113 | + $lon; | ||
114 | + $lat; | ||
115 | + */ | ||
116 | + | ||
117 | + /* Inverse equations | ||
118 | + ----------------- */ | ||
119 | + $p->x = ($p->x - $this->x0) / $this->a; | ||
120 | + $p->y = ($p->y - $this->y0) / $this->a; | ||
121 | + | ||
122 | + $p->x /= $this->k0; | ||
123 | + $p->y /= $this->k0; | ||
124 | + | ||
125 | + if( ($rh = sqrt( $p->x * $p->x + $p->y * $p->y ) ) ) { | ||
126 | + $c = atan2( $rh, $this->rc ); | ||
127 | + $sinc = sin( $c ); | ||
128 | + $cosc = cos( $c ); | ||
129 | + | ||
130 | + $lat = Proj4php::$common->asinz( $cosc * $this->sin_p14 + ($p->y * $sinc * $this->cos_p14) / $rh ); | ||
131 | + $lon = atan2( $p->x * sinc, rh * $this->cos_p14 * $cosc - $p->y * $this->sin_p14 * $sinc ); | ||
132 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + $lon ); | ||
133 | + } else { | ||
134 | + $lat = $this->phic0; | ||
135 | + $lon = 0.0; | ||
136 | + } | ||
137 | + | ||
138 | + $p->x = $lon; | ||
139 | + $p->y = $lat; | ||
140 | + | ||
141 | + return $p; | ||
142 | + } | ||
143 | +} | ||
144 | + | ||
145 | +Proj4php::$proj['gnom'] = new Proj4phpProjGnom(); | ||
0 | \ No newline at end of file | 146 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/gstmerc.php
0 → 100644
@@ -0,0 +1,63 @@ | @@ -0,0 +1,63 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +class Proj4phpProjGstmerc { | ||
10 | + | ||
11 | + public function init() { | ||
12 | + | ||
13 | + // array of: a, b, lon0, lat0, k0, x0, y0 | ||
14 | + $temp = $this->b / $this->a; | ||
15 | + $this->e = sqrt( 1.0 - $temp * $temp ); | ||
16 | + $this->lc = $this->long0; | ||
17 | + $this->rs = sqrt( 1.0 + $this->e * $this->e * pow( cos( $this->lat0 ), 4.0 ) / (1.0 - $this->e * $this->e) ); | ||
18 | + $sinz = sin( $this->lat0 ); | ||
19 | + $pc = asin( $sinz / $this->rs ); | ||
20 | + $sinzpc = sin( $pc ); | ||
21 | + $this->cp = Proj4php::$common->latiso( 0.0, $pc, $sinzpc ) - $this->rs * Proj4php::$common->latiso( $this->e, $this->lat0, $sinz ); | ||
22 | + $this->n2 = $this->k0 * $this->a * sqrt( 1.0 - $this->e * $this->e ) / (1.0 - $this->e * $this->e * $sinz * $sinz); | ||
23 | + $this->xs = $this->x0; | ||
24 | + $this->ys = $this->y0 - $this->n2 * $pc; | ||
25 | + | ||
26 | + if( !$this->title ) | ||
27 | + $this->title = "Gauss Schreiber transverse mercator"; | ||
28 | + } | ||
29 | + | ||
30 | + // forward equations--mapping lat,long to x,y | ||
31 | + // ----------------------------------------------------------------- | ||
32 | + public function forward( $p ) { | ||
33 | + | ||
34 | + $lon = $p->x; | ||
35 | + $lat = $p->y; | ||
36 | + | ||
37 | + $L = $this->rs * ($lon - $this->lc); | ||
38 | + $Ls = $this->cp + ($this->rs * Proj4php::$common->latiso( $this->e, $lat, sin( $lat ) )); | ||
39 | + $lat1 = asin( sin( $L ) / Proj4php::$common->cosh( $Ls ) ); | ||
40 | + $Ls1 = Proj4php::$common->latiso( 0.0, $lat1, sin( $lat1 ) ); | ||
41 | + $p->x = $this->xs + ($this->n2 * $Ls1); | ||
42 | + $p->y = $this->ys + ($this->n2 * atan( Proj4php::$common->sinh( $Ls ) / cos( $L ) )); | ||
43 | + return $p; | ||
44 | + } | ||
45 | + | ||
46 | + // inverse equations--mapping x,y to lat/long | ||
47 | + // ----------------------------------------------------------------- | ||
48 | + public function inverse( $p ) { | ||
49 | + | ||
50 | + $x = $p->x; | ||
51 | + $y = $p->y; | ||
52 | + | ||
53 | + $L = atan( Proj4php::$common->sinh( ($x - $this->xs) / $this->n2 ) / cos( ($y - $this->ys) / $this->n2 ) ); | ||
54 | + $lat1 = asin( sin( ($y - $this->ys) / $this->n2 ) / Proj4php::$common->cosh( ($x - $this->xs) / $this->n2 ) ); | ||
55 | + $LC = Proj4php::$common->latiso( 0.0, $lat1, sin( $lat1 ) ); | ||
56 | + $p->x = $this->lc + $L / $this->rs; | ||
57 | + $p->y = Proj4php::$common->invlatiso( $this->e, ($LC - $this->cp) / $this->rs ); | ||
58 | + return $p; | ||
59 | + } | ||
60 | + | ||
61 | +} | ||
62 | + | ||
63 | +Proj4php::$proj['gstmerc'] = new Proj4phpProjGestmerc(); |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/krovak.php
0 → 100644
@@ -0,0 +1,157 @@ | @@ -0,0 +1,157 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | + NOTES: According to EPSG the full Krovak projection method should have | ||
5 | + the following parameters. Within PROJ.4 the azimuth, and pseudo | ||
6 | + standard parallel are hardcoded in the algorithm and can't be | ||
7 | + altered from outside. The others all have defaults to match the | ||
8 | + common usage with Krovak projection. | ||
9 | + | ||
10 | + lat_0 = latitude of centre of the projection | ||
11 | + | ||
12 | + lon_0 = longitude of centre of the projection | ||
13 | + | ||
14 | + * * = azimuth (true) of the centre line passing through the centre of the projection | ||
15 | + | ||
16 | + * * = latitude of pseudo standard parallel | ||
17 | + | ||
18 | + k = scale factor on the pseudo standard parallel | ||
19 | + | ||
20 | + x_0 = False Easting of the centre of the projection at the apex of the cone | ||
21 | + | ||
22 | + y_0 = False Northing of the centre of the projection at the apex of the cone | ||
23 | + | ||
24 | +**/ | ||
25 | +class Proj4phpProjKrovak { | ||
26 | + | ||
27 | + /** | ||
28 | + * | ||
29 | + */ | ||
30 | + public function init() { | ||
31 | + /* we want Bessel as fixed ellipsoid */ | ||
32 | + $this->a = 6377397.155; | ||
33 | + $this->es = 0.006674372230614; | ||
34 | + $this->e = sqrt( $this->es ); | ||
35 | + /* if latitude of projection center is not set, use 49d30'N */ | ||
36 | + if( !$this->lat0 ) { | ||
37 | + $this->lat0 = 0.863937979737193; | ||
38 | + } | ||
39 | + if( !$this->long0 ) { | ||
40 | + $this->long0 = 0.7417649320975901 - 0.308341501185665; | ||
41 | + } | ||
42 | + /* if scale not set default to 0.9999 */ | ||
43 | + if( !$this->k0 ) { | ||
44 | + $this->k0 = 0.9999; | ||
45 | + } | ||
46 | + $this->s45 = 0.785398163397448; /* 45° */ | ||
47 | + $this->s90 = 2 * $this->s45; | ||
48 | + $this->fi0 = $this->lat0; /* Latitude of projection centre 49° 30' */ | ||
49 | + /* Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, | ||
50 | + e2=0.006674372230614; | ||
51 | + */ | ||
52 | + $this->e2 = $this->es; /* 0.006674372230614; */ | ||
53 | + $this->e = sqrt( $this->e2 ); | ||
54 | + $this->alfa = sqrt( 1. + ($this->e2 * pow( cos( $this->fi0 ), 4 )) / (1. - $this->e2) ); | ||
55 | + $this->uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ | ||
56 | + $this->u0 = asin( sin( $this->fi0 ) / $this->alfa ); | ||
57 | + $this->g = pow( (1. + $this->e * sin( $this->fi0 )) / (1. - $this->e * sin( $this->fi0 )), $this->alfa * $this->e / 2. ); | ||
58 | + $this->k = tan( $this->u0 / 2. + $this->s45 ) / pow( tan( $this->fi0 / 2. + $this->s45 ), $this->alfa ) * $this->g; | ||
59 | + $this->k1 = $this->k0; | ||
60 | + $this->n0 = $this->a * sqrt( 1. - $this->e2 ) / (1. - $this->e2 * pow( sin( $this->fi0 ), 2 )); | ||
61 | + $this->s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */ | ||
62 | + $this->n = sin( $this->s0 ); | ||
63 | + $this->ro0 = $this->k1 * $this->n0 / tan( $this->s0 ); | ||
64 | + $this->ad = $this->s90 - $this->uq; | ||
65 | + $this->czech = true; /* Always use czech GIS coordinates -> negative ones */ | ||
66 | + } | ||
67 | + | ||
68 | + /** | ||
69 | + * ellipsoid | ||
70 | + * calculate xy from lat/lon | ||
71 | + * Constants, identical to inverse transform function | ||
72 | + * | ||
73 | + * @param type $p | ||
74 | + * @return type | ||
75 | + */ | ||
76 | + public function forward( $p ) { | ||
77 | + | ||
78 | + $lon = $p->x; | ||
79 | + $lat = $p->y; | ||
80 | + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); // Delta longitude | ||
81 | + | ||
82 | + /* Transformation */ | ||
83 | + $gfi = pow( ((1. + $this->e * sin( $lat )) / (1. - $this->e * sin( $lat )) ), ($this->alfa * $this->e / 2. ) ); | ||
84 | + $u = 2. * (atan( $this->k * pow( tan( $lat / 2. + $this->s45 ), $this->alfa ) / $gfi ) - $this->s45); | ||
85 | + $deltav = - $delta_lon * $this->alfa; | ||
86 | + $s = asin( cos( $this->ad ) * sin( $u ) + sin( $this->ad ) * cos( $u ) * cos( $deltav ) ); | ||
87 | + $d = asin( cos( $u ) * sin( $deltav ) / cos( $s ) ); | ||
88 | + $eps = $this->n * $d; | ||
89 | + $ro = $this->ro0 * pow( tan( $this->s0 / 2. + $this->s45 ), $this->n ) / pow( tan( $s / 2. + $this->s45 ), $this->n ); | ||
90 | + /* x and y are reverted! */ | ||
91 | + //$p->y = ro * cos(eps) / a; | ||
92 | + //$p->x = ro * sin(eps) / a; | ||
93 | + $p->y = $ro * cos( $eps ) / 1.0; | ||
94 | + $p->x = $ro * sin( $eps ) / 1.0; | ||
95 | + | ||
96 | + if( $this->czech ) { | ||
97 | + $p->y *= -1.0; | ||
98 | + $p->x *= -1.0; | ||
99 | + } | ||
100 | + | ||
101 | + return $p; | ||
102 | + } | ||
103 | + | ||
104 | + /** | ||
105 | + * calculate lat/lon from xy | ||
106 | + * | ||
107 | + * @param Point $p | ||
108 | + * @return Point $p | ||
109 | + */ | ||
110 | + public function inverse( $p ) { | ||
111 | + | ||
112 | + /* Transformation */ | ||
113 | + /* revert y, x */ | ||
114 | + $tmp = $p->x; | ||
115 | + $p->x = $p->y; | ||
116 | + $p->y = $tmp; | ||
117 | + | ||
118 | + if( $this->czech ) { | ||
119 | + $p->y *= -1.0; | ||
120 | + $p->x *= -1.0; | ||
121 | + } | ||
122 | + | ||
123 | + $ro = sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
124 | + $eps = atan2( $p->y, $p->x ); | ||
125 | + $d = $eps / sin( $this->s0 ); | ||
126 | + $s = 2. * (atan( pow( $this->ro0 / $ro, 1. / $this->n ) * tan( $this->s0 / 2. + $this->s45 ) ) - $this->s45); | ||
127 | + $u = asin( cos( $this->ad ) * sin( $s ) - sin( $this->ad ) * cos( $s ) * cos( $d ) ); | ||
128 | + $deltav = asin( cos( $s ) * sin( $d ) / cos( $u ) ); | ||
129 | + $p->x = $this->long0 - $deltav / $this->alfa; | ||
130 | + | ||
131 | + /* ITERATION FOR $lat */ | ||
132 | + $fi1 = $u; | ||
133 | + $ok = 0; | ||
134 | + $iter = 0; | ||
135 | + do { | ||
136 | + $p->y = 2. * ( atan( pow( $this->k, -1. / $this->alfa ) * | ||
137 | + pow( tan( $u / 2. + $this->s45 ), 1. / $this->alfa ) * | ||
138 | + pow( (1. + $this->e * sin( $fi1 )) / (1. - $this->e * sin( $fi1 )), $this->e / 2. ) | ||
139 | + ) - $this->s45); | ||
140 | + if( abs( $fi1 - $p->y ) < 0.0000000001 ) | ||
141 | + $ok = 1; | ||
142 | + $fi1 = $p->y; | ||
143 | + $iter += 1; | ||
144 | + } while( $ok == 0 && $iter < 15 ); | ||
145 | + | ||
146 | + if( $iter >= 15 ) { | ||
147 | + Proj4php::reportError( "PHI3Z-CONV:Latitude failed to converge after 15 iterations" ); | ||
148 | + //console.log('iter:', iter); | ||
149 | + return null; | ||
150 | + } | ||
151 | + | ||
152 | + return $p; | ||
153 | + } | ||
154 | + | ||
155 | +} | ||
156 | + | ||
157 | +Proj4php::$proj['krovak'] = new Proj4phpProjKrovak(); |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/laea.php
0 → 100644
@@ -0,0 +1,398 @@ | @@ -0,0 +1,398 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | + * Author : Julien Moquet | ||
5 | + * | ||
6 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
7 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
8 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
9 | + */ | ||
10 | +/* * ***************************************************************************** | ||
11 | + NAME LAMBERT AZIMUTHAL EQUAL-AREA | ||
12 | + | ||
13 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
14 | + Northing for the Lambert Azimuthal Equal-Area projection. The | ||
15 | + longitude and latitude must be in radians. The Easting | ||
16 | + and Northing values will be returned in meters. | ||
17 | + | ||
18 | + PROGRAMMER DATE | ||
19 | + ---------- ---- | ||
20 | + D. Steinwand, EROS March, 1991 | ||
21 | + | ||
22 | + This function was adapted from the Lambert Azimuthal Equal Area projection | ||
23 | + code (FORTRAN) in the General Cartographic Transformation Package software | ||
24 | + which is available from the U.S. Geological Survey National Mapping Division. | ||
25 | + | ||
26 | + ALGORITHM REFERENCES | ||
27 | + | ||
28 | + 1. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, | ||
29 | + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. | ||
30 | + | ||
31 | + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
32 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
33 | + State Government Printing Office, Washington D.C., 1987. | ||
34 | + | ||
35 | + 3. "Software Documentation for GCTP General Cartographic Transformation | ||
36 | + Package", U.S. Geological Survey National Mapping Division, May 1982. | ||
37 | + * ***************************************************************************** */ | ||
38 | + | ||
39 | +class Proj4phpProjLaea { | ||
40 | + | ||
41 | + protected $S_POLE = 1; | ||
42 | + protected $N_POLE = 2; | ||
43 | + protected $EQUIT = 3; | ||
44 | + protected $OBLIQ = 4; | ||
45 | + | ||
46 | + protected $P00 = .33333333333333333333; | ||
47 | + protected $P01 = .17222222222222222222; | ||
48 | + protected $P02 = .10257936507936507936; | ||
49 | + protected $P10 = .06388888888888888888; | ||
50 | + protected $P11 = .06640211640211640211; | ||
51 | + protected $P20 = .01641501294219154443; | ||
52 | + | ||
53 | + /* Initialize the Lambert Azimuthal Equal Area projection | ||
54 | + ------------------------------------------------------ */ | ||
55 | + public function init() { | ||
56 | + $t = abs( $this->lat0 ); | ||
57 | + if( abs( $t - Proj4php::$common->HALF_PI ) < Proj4php::$common->EPSLN ) { | ||
58 | + $this->mode = $this->lat0 < 0. ? $this->S_POLE : $this->N_POLE; | ||
59 | + } else if( abs( $t ) < Proj4php::$common->EPSLN ) { | ||
60 | + $this->mode = $this->EQUIT; | ||
61 | + } else { | ||
62 | + $this->mode = $this->OBLIQ; | ||
63 | + } | ||
64 | + if( $this->es > 0 ) { | ||
65 | + #$sinphi; | ||
66 | + | ||
67 | + $this->qp = Proj4php::$common->qsfnz( $this->e, 1.0 ); | ||
68 | + $this->mmf = .5 / (1. - $this->es); | ||
69 | + $this->apa = $this->authset( $this->es ); | ||
70 | + switch( $this->mode ) { | ||
71 | + case $this->N_POLE: | ||
72 | + case $this->S_POLE: | ||
73 | + $this->dd = 1.; | ||
74 | + break; | ||
75 | + case $this->EQUIT: | ||
76 | + $this->rq = sqrt( .5 * $this->qp ); | ||
77 | + $this->dd = 1. / $this->rq; | ||
78 | + $this->xmf = 1.; | ||
79 | + $this->ymf = .5 * $this->qp; | ||
80 | + break; | ||
81 | + case $this->OBLIQ: | ||
82 | + $this->rq = sqrt( .5 * $this->qp ); | ||
83 | + $sinphi = sin( $this->lat0 ); | ||
84 | + $this->sinb1 = Proj4php::$common->qsfnz( $this->e, $sinphi ) / $this->qp; | ||
85 | + $this->cosb1 = sqrt( 1. - $this->sinb1 * $this->sinb1 ); | ||
86 | + $this->dd = cos( $this->lat0 ) / (sqrt( 1. - $this->es * $sinphi * $sinphi ) * $this->rq * $this->cosb1); | ||
87 | + $this->ymf = ($this->xmf = $this->rq) / $this->dd; | ||
88 | + $this->xmf *= $this->dd; | ||
89 | + break; | ||
90 | + } | ||
91 | + } else { | ||
92 | + if( $this->mode == $this->OBLIQ ) { | ||
93 | + $this->sinph0 = sin( $this->lat0 ); | ||
94 | + $this->cosph0 = cos( $this->lat0 ); | ||
95 | + } | ||
96 | + } | ||
97 | + } | ||
98 | + | ||
99 | + /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y | ||
100 | + ----------------------------------------------------------------------- */ | ||
101 | + public function forward( $p ) { | ||
102 | + | ||
103 | + /* Forward equations | ||
104 | + ----------------- */ | ||
105 | + #$x; | ||
106 | + #$y; | ||
107 | + $lam = $p->x; | ||
108 | + $phi = $p->y; | ||
109 | + $lam = Proj4php::$common->adjust_lon( $lam - $this->long0 ); | ||
110 | + | ||
111 | + if( $this->sphere ) { | ||
112 | + /* | ||
113 | + $coslam; | ||
114 | + $cosphi; | ||
115 | + $sinphi; | ||
116 | + */ | ||
117 | + | ||
118 | + $sinphi = sin( $phi ); | ||
119 | + $cosphi = cos( $phi ); | ||
120 | + $coslam = cos( $lam ); | ||
121 | + switch( $this->mode ) { | ||
122 | + case $this->OBLIQ: | ||
123 | + case $this->EQUIT: | ||
124 | + $y = ($this->mode == $this->EQUIT) ? 1. + $cosphi * $coslam : 1. + $this->sinph0 * $sinphi + $this->cosph0 * $cosphi * $coslam; | ||
125 | + if( y <= Proj4php::$common->EPSLN ) { | ||
126 | + Proj4php::reportError( "laea:fwd:y less than eps" ); | ||
127 | + return null; | ||
128 | + } | ||
129 | + $y = sqrt( 2. / $y ); | ||
130 | + $x = $y * cosphi * sin( $lam ); | ||
131 | + $y *= ($this->mode == $this->EQUIT) ? $sinphi : $this->cosph0 * $sinphi - $this->sinph0 * $cosphi * $coslam; | ||
132 | + break; | ||
133 | + case $this->N_POLE: | ||
134 | + $coslam = -$coslam; | ||
135 | + case $this->S_POLE: | ||
136 | + if( abs( $phi + $this->phi0 ) < Proj4php::$common->EPSLN ) { | ||
137 | + Proj4php::reportError( "laea:fwd:phi < eps" ); | ||
138 | + return null; | ||
139 | + } | ||
140 | + $y = Proj4php::$common->FORTPI - $phi * .5; | ||
141 | + $y = 2. * (($this->mode == $this->S_POLE) ? cos( $y ) : sin( $y )); | ||
142 | + $x = $y * sin( $lam ); | ||
143 | + $y *= $coslam; | ||
144 | + break; | ||
145 | + } | ||
146 | + } else { | ||
147 | + /* | ||
148 | + $coslam; | ||
149 | + $sinlam; | ||
150 | + $sinphi; | ||
151 | + $q; | ||
152 | + */ | ||
153 | + $sinb = 0.0; | ||
154 | + $cosb = 0.0; | ||
155 | + $b = 0.0; | ||
156 | + | ||
157 | + $coslam = cos( $lam ); | ||
158 | + $sinlam = sin( $lam ); | ||
159 | + $sinphi = sin( $phi ); | ||
160 | + $q = Proj4php::$common->qsfnz( $this->e, $sinphi ); | ||
161 | + if( $this->mode == $this->OBLIQ || $this->mode == $this->EQUIT ) { | ||
162 | + $sinb = $q / $this->qp; | ||
163 | + $cosb = sqrt( 1. - $sinb * $sinb ); | ||
164 | + } | ||
165 | + switch( $this->mode ) { | ||
166 | + case $this->OBLIQ: | ||
167 | + $b = 1. + $this->sinb1 * $sinb + $this->cosb1 * $cosb * $coslam; | ||
168 | + break; | ||
169 | + case $this->EQUIT: | ||
170 | + $b = 1. + $cosb * $coslam; | ||
171 | + break; | ||
172 | + case $this->N_POLE: | ||
173 | + $b = Proj4php::$common->HALF_PI + $phi; | ||
174 | + $q = $this->qp - $q; | ||
175 | + break; | ||
176 | + case $this->S_POLE: | ||
177 | + $b = $phi - Proj4php::$common->HALF_PI; | ||
178 | + $q = $this->qp + $q; | ||
179 | + break; | ||
180 | + } | ||
181 | + if( abs( $b ) < Proj4php::$common->EPSLN ) { | ||
182 | + Proj4php::reportError( "laea:fwd:b < eps" ); | ||
183 | + return null; | ||
184 | + } | ||
185 | + switch( $this->mode ) { | ||
186 | + case $this->OBLIQ: | ||
187 | + case $this->EQUIT: | ||
188 | + $b = sqrt( 2. / $b ); | ||
189 | + if( $this->mode == $this->OBLIQ ) { | ||
190 | + $y = $this->ymf * $b * ($this->cosb1 * $sinb - $this->sinb1 * $cosb * $coslam); | ||
191 | + } else { | ||
192 | + $y = ($b = sqrt( 2. / (1. + $cosb * $coslam) )) * $sinb * $this->ymf; | ||
193 | + } | ||
194 | + $x = $this->xmf * $b * $cosb * $sinlam; | ||
195 | + break; | ||
196 | + case $this->N_POLE: | ||
197 | + case $this->S_POLE: | ||
198 | + if( q >= 0. ) { | ||
199 | + $x = ($b = sqrt( $q )) * $sinlam; | ||
200 | + $y = $coslam * (($this->mode == $this->S_POLE) ? $b : -$b); | ||
201 | + } else { | ||
202 | + $x = $y = 0.; | ||
203 | + } | ||
204 | + break; | ||
205 | + } | ||
206 | + } | ||
207 | + | ||
208 | + //v 1.0 | ||
209 | + /* | ||
210 | + $sin_lat=sin(lat); | ||
211 | + $cos_lat=cos(lat); | ||
212 | + | ||
213 | + $sin_delta_lon=sin(delta_lon); | ||
214 | + $cos_delta_lon=cos(delta_lon); | ||
215 | + | ||
216 | + $g =$this->sin_lat_o * sin_lat +$this->cos_lat_o * cos_lat * cos_delta_lon; | ||
217 | + if (g == -1.0) { | ||
218 | + Proj4php::reportError("laea:fwd:Point projects to a circle of radius "+ 2.0 * R); | ||
219 | + return null; | ||
220 | + } | ||
221 | + $ksp = $this->a * sqrt(2.0 / (1.0 + g)); | ||
222 | + $x = ksp * cos_lat * sin_delta_lon + $this->x0; | ||
223 | + $y = ksp * ($this->cos_lat_o * sin_lat - $this->sin_lat_o * cos_lat * cos_delta_lon) + $this->y0; | ||
224 | + */ | ||
225 | + $p->x = $this->a * $x + $this->x0; | ||
226 | + $p->y = $this->a * $y + $this->y0; | ||
227 | + | ||
228 | + return $p; | ||
229 | + } | ||
230 | + | ||
231 | + /* Inverse equations | ||
232 | + ----------------- */ | ||
233 | + public function inverse( $p ) { | ||
234 | + $p->x -= $this->x0; | ||
235 | + $p->y -= $this->y0; | ||
236 | + $x = $p->x / $this->a; | ||
237 | + $y = $p->y / $this->a; | ||
238 | + | ||
239 | + if( $this->sphere ) { | ||
240 | + $cosz = 0.0; | ||
241 | + #$rh; | ||
242 | + $sinz = 0.0; | ||
243 | + | ||
244 | + $rh = sqrt( $x * $x + $y * $y ); | ||
245 | + $phi = $rh * .5; | ||
246 | + if( $phi > 1. ) { | ||
247 | + Proj4php::reportError( "laea:Inv:DataError" ); | ||
248 | + return null; | ||
249 | + } | ||
250 | + $phi = 2. * asin( $phi ); | ||
251 | + if( $this->mode == $this->OBLIQ || $this->mode == $this->EQUIT ) { | ||
252 | + $sinz = sin( $phi ); | ||
253 | + $cosz = cos( $phi ); | ||
254 | + } | ||
255 | + switch( $this->mode ) { | ||
256 | + case $this->EQUIT: | ||
257 | + $phi = (abs( $rh ) <= Proj4php::$common->EPSLN) ? 0. : asin( $y * $sinz / $rh ); | ||
258 | + $x *= $sinz; | ||
259 | + $y = $cosz * $rh; | ||
260 | + break; | ||
261 | + case $this->OBLIQ: | ||
262 | + $phi = (abs( $rh ) <= Proj4php::$common->EPSLN) ? $this->phi0 : asin( $cosz * $this->sinph0 + $y * $sinz * $this->cosph0 / $rh ); | ||
263 | + $x *= $sinz * $this->cosph0; | ||
264 | + $y = ($cosz - sin( $phi ) * $this->sinph0) * $rh; | ||
265 | + break; | ||
266 | + case $this->N_POLE: | ||
267 | + $y = -$y; | ||
268 | + $phi = Proj4php::$common->HALF_PI - $phi; | ||
269 | + break; | ||
270 | + case $this->S_POLE: | ||
271 | + $phi -= Proj4php::$common->HALF_PI; | ||
272 | + break; | ||
273 | + } | ||
274 | + $lam = ($y == 0. && ($this->mode == $this->EQUIT || $this->mode == $this->OBLIQ)) ? 0. : atan2( $x, $y ); | ||
275 | + } else { | ||
276 | + /* | ||
277 | + $cCe; | ||
278 | + $sCe; | ||
279 | + $q; | ||
280 | + $rho; | ||
281 | + */ | ||
282 | + $ab = 0.0; | ||
283 | + | ||
284 | + switch( $this->mode ) { | ||
285 | + case $this->EQUIT: | ||
286 | + case $this->OBLIQ: | ||
287 | + $x /= $this->dd; | ||
288 | + $y *= $this->dd; | ||
289 | + $rho = sqrt( $x * $x + $y * $y ); | ||
290 | + if( $rho < Proj4php::$common->EPSLN ) { | ||
291 | + $p->x = 0.; | ||
292 | + $p->y = $this->phi0; | ||
293 | + return $p; | ||
294 | + } | ||
295 | + $sCe = 2. * asin( .5 * $rho / $this->rq ); | ||
296 | + $cCe = cos( $sCe ); | ||
297 | + $x *= ($sCe = sin( $sCe )); | ||
298 | + if( $this->mode == $this->OBLIQ ) { | ||
299 | + $ab = $cCe * $this->sinb1 + $y * $sCe * $this->cosb1 / $rho; | ||
300 | + $q = $this->qp * $ab; | ||
301 | + $y = $rho * $this->cosb1 * $cCe - $y * $this->sinb1 * $sCe; | ||
302 | + } else { | ||
303 | + $ab = $y * $sCe / $rho; | ||
304 | + $q = $this->qp * $ab; | ||
305 | + $y = $rho * $cCe; | ||
306 | + } | ||
307 | + break; | ||
308 | + case $this->N_POLE: | ||
309 | + $y = -$y; | ||
310 | + case $this->S_POLE: | ||
311 | + $q = ($x * $x + $y * $y); | ||
312 | + if( !$q ) { | ||
313 | + $p->x = 0.; | ||
314 | + $p->y = $this->phi0; | ||
315 | + return $p; | ||
316 | + } | ||
317 | + /* | ||
318 | + q = $this->qp - q; | ||
319 | + */ | ||
320 | + $ab = 1. - $q / $this->qp; | ||
321 | + if( $this->mode == $this->S_POLE ) { | ||
322 | + $ab = - $ab; | ||
323 | + } | ||
324 | + break; | ||
325 | + } | ||
326 | + $lam = atan2( $x, $y ); | ||
327 | + $phi = $this->authlat( asin( $ab ), $this->apa ); | ||
328 | + } | ||
329 | + | ||
330 | + /* | ||
331 | + $Rh = sqrt($p->x *$p->x +$p->y * $p->y); | ||
332 | + $temp = Rh / (2.0 * $this->a); | ||
333 | + | ||
334 | + if (temp > 1) { | ||
335 | + Proj4php::reportError("laea:Inv:DataError"); | ||
336 | + return null; | ||
337 | + } | ||
338 | + | ||
339 | + $z = 2.0 * Proj4php::$common.asinz(temp); | ||
340 | + $sin_z=sin(z); | ||
341 | + $cos_z=cos(z); | ||
342 | + | ||
343 | + $lon =$this->long0; | ||
344 | + if (abs(Rh) > Proj4php::$common->EPSLN) { | ||
345 | + $lat = Proj4php::$common.asinz($this->sin_lat_o * cos_z +$this-> cos_lat_o * sin_z *$p->y / Rh); | ||
346 | + $temp =abs($this->lat0) - Proj4php::$common->HALF_PI; | ||
347 | + if (abs(temp) > Proj4php::$common->EPSLN) { | ||
348 | + temp = cos_z -$this->sin_lat_o * sin(lat); | ||
349 | + if(temp!=0.0) lon=Proj4php::$common->adjust_lon($this->long0+atan2($p->x*sin_z*$this->cos_lat_o,temp*Rh)); | ||
350 | + } else if ($this->lat0 < 0.0) { | ||
351 | + lon = Proj4php::$common->adjust_lon($this->long0 - atan2(-$p->x,$p->y)); | ||
352 | + } else { | ||
353 | + lon = Proj4php::$common->adjust_lon($this->long0 + atan2($p->x, -$p->y)); | ||
354 | + } | ||
355 | + } else { | ||
356 | + lat = $this->lat0; | ||
357 | + } | ||
358 | + */ | ||
359 | + //return(OK); | ||
360 | + $p->x = Proj4php::$common->adjust_lon( $this->long0 + $lam ); | ||
361 | + $p->y = $phi; | ||
362 | + return $p; | ||
363 | + } | ||
364 | + | ||
365 | + /** | ||
366 | + * determine latitude from authalic latitude | ||
367 | + * | ||
368 | + * @param type $es | ||
369 | + * @return type | ||
370 | + */ | ||
371 | + public function authset( $es ) { | ||
372 | + #$t; | ||
373 | + $APA = array( ); | ||
374 | + $APA[0] = $es * $this->P00; | ||
375 | + $t = $es * $es; | ||
376 | + $APA[0] += $t * $this->P01; | ||
377 | + $APA[1] = $t * $this->P10; | ||
378 | + $t *= $es; | ||
379 | + $APA[0] += $t * $this->P02; | ||
380 | + $APA[1] += $t * $this->P11; | ||
381 | + $APA[2] = $t * $this->P20; | ||
382 | + return $APA; | ||
383 | + } | ||
384 | + | ||
385 | + /** | ||
386 | + * | ||
387 | + * @param type $beta | ||
388 | + * @param type $APA | ||
389 | + * @return type | ||
390 | + */ | ||
391 | + public function authlat( $beta, $APA ) { | ||
392 | + $t = $beta + $beta; | ||
393 | + return($beta + $APA[0] * sin( $t ) + $APA[1] * sin( $t + $t ) + $APA[2] * sin( $t + $t + $t )); | ||
394 | + } | ||
395 | + | ||
396 | +} | ||
397 | + | ||
398 | +Proj4php::$proj['laea'] = new Proj4phpProjLaea(); | ||
0 | \ No newline at end of file | 399 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/lcc.php
0 → 100644
@@ -0,0 +1,166 @@ | @@ -0,0 +1,166 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME LAMBERT CONFORMAL CONIC | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Lambert Conformal Conic projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + | ||
18 | + ALGORITHM REFERENCES | ||
19 | + | ||
20 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
21 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
22 | + State Government Printing Office, Washington D.C., 1987. | ||
23 | + | ||
24 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
25 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
26 | + *******************************************************************************/ | ||
27 | + | ||
28 | + | ||
29 | +//<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 | ||
30 | +// Initialize the Lambert Conformal conic projection | ||
31 | +// ----------------------------------------------------------------- | ||
32 | +//class Proj4phpProjlcc = Class.create(); | ||
33 | +class Proj4phpProjLcc { | ||
34 | + | ||
35 | + public function init() { | ||
36 | + // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north | ||
37 | + //double c_lat; /* center latitude */ | ||
38 | + //double c_lon; /* center longitude */ | ||
39 | + //double lat1; /* first standard parallel */ | ||
40 | + //double lat2; /* second standard parallel */ | ||
41 | + //double r_maj; /* major axis */ | ||
42 | + //double r_min; /* minor axis */ | ||
43 | + //double false_east; /* x offset in meters */ | ||
44 | + //double false_north; /* y offset in meters */ | ||
45 | + | ||
46 | + //if lat2 is not defined | ||
47 | + if( !isset($this->lat2) ) { | ||
48 | + $this->lat2 = $this->lat0; | ||
49 | + } | ||
50 | + | ||
51 | + //if k0 is not defined | ||
52 | + if( !isset($this->k0) ) | ||
53 | + $this->k0 = 1.0; | ||
54 | + | ||
55 | + // Standard Parallels cannot be equal and on opposite sides of the equator | ||
56 | + if( abs( $this->lat1 + $this->lat2 ) < Proj4php::$common->EPSLN ) { | ||
57 | + Proj4php::reportError( "lcc:init: Equal Latitudes" ); | ||
58 | + return; | ||
59 | + } | ||
60 | + | ||
61 | + $temp = $this->b / $this->a; | ||
62 | + $this->e = sqrt( 1.0 - $temp * $temp ); | ||
63 | + | ||
64 | + $sin1 = sin( $this->lat1 ); | ||
65 | + $cos1 = cos( $this->lat1 ); | ||
66 | + $ms1 = Proj4php::$common->msfnz( $this->e, $sin1, $cos1 ); | ||
67 | + $ts1 = Proj4php::$common->tsfnz( $this->e, $this->lat1, $sin1 ); | ||
68 | + | ||
69 | + $sin2 = sin( $this->lat2 ); | ||
70 | + $cos2 = cos( $this->lat2 ); | ||
71 | + $ms2 = Proj4php::$common->msfnz( $this->e, $sin2, $cos2 ); | ||
72 | + $ts2 = Proj4php::$common->tsfnz( $this->e, $this->lat2, $sin2 ); | ||
73 | + | ||
74 | + $ts0 = Proj4php::$common->tsfnz( $this->e, $this->lat0, sin( $this->lat0 ) ); | ||
75 | + | ||
76 | + if( abs( $this->lat1 - $this->lat2 ) > Proj4php::$common->EPSLN ) { | ||
77 | + $this->ns = log( $ms1 / $ms2 ) / log( $ts1 / $ts2 ); | ||
78 | + } else { | ||
79 | + $this->ns = $sin1; | ||
80 | + } | ||
81 | + $this->f0 = $ms1 / ($this->ns * pow( $ts1, $this->ns )); | ||
82 | + $this->rh = $this->a * $this->f0 * pow( $ts0, $this->ns ); | ||
83 | + | ||
84 | + if( !isset($this->title) ) | ||
85 | + $this->title = "Lambert Conformal Conic"; | ||
86 | + } | ||
87 | + | ||
88 | + // Lambert Conformal conic forward equations--mapping lat,long to x,y | ||
89 | + // ----------------------------------------------------------------- | ||
90 | + public function forward( $p ) { | ||
91 | + | ||
92 | + $lon = $p->x; | ||
93 | + $lat = $p->y; | ||
94 | + | ||
95 | + // convert to radians | ||
96 | + if( $lat <= 90.0 && $lat >= -90.0 && $lon <= 180.0 && $lon >= -180.0 ) { | ||
97 | + //lon = lon * Proj4php::$common.D2R; | ||
98 | + //lat = lat * Proj4php::$common.D2R; | ||
99 | + } else { | ||
100 | + Proj4php::reportError( "lcc:forward: llInputOutOfRange: " . $lon . " : " . $lat ); | ||
101 | + return null; | ||
102 | + } | ||
103 | + | ||
104 | + $con = abs( abs( $lat ) - Proj4php::$common->HALF_PI ); | ||
105 | + | ||
106 | + if( $con > Proj4php::$common->EPSLN ) { | ||
107 | + $ts = Proj4php::$common->tsfnz( $this->e, $lat, sin( $lat ) ); | ||
108 | + $rh1 = $this->a * $this->f0 * pow( $ts, $this->ns ); | ||
109 | + } else { | ||
110 | + $con = $lat * $this->ns; | ||
111 | + if( $con <= 0 ) { | ||
112 | + Proj4php::reportError( "lcc:forward: No Projection" ); | ||
113 | + return null; | ||
114 | + } | ||
115 | + $rh1 = 0; | ||
116 | + } | ||
117 | + | ||
118 | + $theta = $this->ns * Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
119 | + $p->x = $this->k0 * ($rh1 * sin( $theta )) + $this->x0; | ||
120 | + $p->y = $this->k0 * ($this->rh - $rh1 * cos( $theta )) + $this->y0; | ||
121 | + | ||
122 | + return $p; | ||
123 | + } | ||
124 | + | ||
125 | + /** | ||
126 | + * Lambert Conformal Conic inverse equations--mapping x,y to lat/long | ||
127 | + * | ||
128 | + * @param type $p | ||
129 | + * @return null | ||
130 | + */ | ||
131 | + public function inverse( $p ) { | ||
132 | + | ||
133 | + $x = ($p->x - $this->x0) / $this->k0; | ||
134 | + $y = ($this->rh - ($p->y - $this->y0) / $this->k0); | ||
135 | + if( $this->ns > 0 ) { | ||
136 | + $rh1 = sqrt( $x * $x + $y * $y ); | ||
137 | + $con = 1.0; | ||
138 | + } else { | ||
139 | + $rh1 = -sqrt( $x * $x + $y * $y ); | ||
140 | + $con = -1.0; | ||
141 | + } | ||
142 | + $theta = 0.0; | ||
143 | + if( $rh1 != 0 ) { | ||
144 | + $theta = atan2( ($con * $x ), ($con * $y ) ); | ||
145 | + } | ||
146 | + if( ($rh1 != 0) || ($this->ns > 0.0) ) { | ||
147 | + $con = 1.0 / $this->ns; | ||
148 | + $ts = pow( ($rh1 / ($this->a * $this->f0) ), $con ); | ||
149 | + $lat = Proj4php::$common->phi2z( $this->e, $ts ); | ||
150 | + if( $lat == -9999 ) | ||
151 | + return null; | ||
152 | + } else { | ||
153 | + $lat = -Proj4php::$common->HALF_PI; | ||
154 | + } | ||
155 | + $lon = Proj4php::$common->adjust_lon( $theta / $this->ns + $this->long0 ); | ||
156 | + | ||
157 | + $p->x = $lon; | ||
158 | + $p->y = $lat; | ||
159 | + | ||
160 | + return $p; | ||
161 | + } | ||
162 | +} | ||
163 | + | ||
164 | +Proj4php::$proj['lcc'] = new Proj4phpProjLcc(); | ||
165 | + | ||
166 | + |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/merc.php
0 → 100644
@@ -0,0 +1,129 @@ | @@ -0,0 +1,129 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | + * Author : Julien Moquet | ||
5 | + * | ||
6 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
7 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
8 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
9 | + */ | ||
10 | +/* * ***************************************************************************** | ||
11 | + NAME MERCATOR | ||
12 | + | ||
13 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
14 | + Northing for the Mercator projection. The | ||
15 | + longitude and latitude must be in radians. The Easting | ||
16 | + and Northing values will be returned in meters. | ||
17 | + | ||
18 | + PROGRAMMER DATE | ||
19 | + ---------- ---- | ||
20 | + D. Steinwand, EROS Nov, 1991 | ||
21 | + T. Mittan Mar, 1993 | ||
22 | + | ||
23 | + ALGORITHM REFERENCES | ||
24 | + | ||
25 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
26 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
27 | + State Government Printing Office, Washington D.C., 1987. | ||
28 | + | ||
29 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
30 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
31 | + Printing Office, Washington D.C., 1989. | ||
32 | + * ***************************************************************************** */ | ||
33 | + | ||
34 | +//static double r_major = a; /* major axis */ | ||
35 | +//static double r_minor = b; /* minor axis */ | ||
36 | +//static double lon_center = long0; /* Center longitude (projection center) */ | ||
37 | +//static double lat_origin = lat0; /* center latitude */ | ||
38 | +//static double e,es; /* eccentricity constants */ | ||
39 | +//static double m1; /* small value m */ | ||
40 | +//static double false_northing = y0; /* y offset in meters */ | ||
41 | +//static double false_easting = x0; /* x offset in meters */ | ||
42 | +//scale_fact = k0 | ||
43 | + | ||
44 | +class Proj4phpProjMerc { | ||
45 | + | ||
46 | + public function init() { | ||
47 | + //?$this->temp = $this->r_minor / $this->r_major; | ||
48 | + //$this->temp = $this->b / $this->a; | ||
49 | + //$this->es = 1.0 - sqrt($this->temp); | ||
50 | + //$this->e = sqrt( $this->es ); | ||
51 | + //?$this->m1 = cos($this->lat_origin) / (sqrt( 1.0 - $this->es * sin($this->lat_origin) * sin($this->lat_origin))); | ||
52 | + //$this->m1 = cos(0.0) / (sqrt( 1.0 - $this->es * sin(0.0) * sin(0.0))); | ||
53 | + if( $this->lat_ts ) { | ||
54 | + if( $this->sphere ) { | ||
55 | + $this->k0 = cos( $this->lat_ts ); | ||
56 | + } else { | ||
57 | + $this->k0 = Proj4php::$common->msfnz( $this->es, sin( $this->lat_ts ), cos( $this->lat_ts ) ); | ||
58 | + } | ||
59 | + } | ||
60 | + } | ||
61 | + | ||
62 | + /* Mercator forward equations--mapping lat,long to x,y | ||
63 | + -------------------------------------------------- */ | ||
64 | + | ||
65 | + public function forward( $p ) { | ||
66 | + | ||
67 | + //alert("ll2m coords : ".coords); | ||
68 | + $lon = $p->x; | ||
69 | + $lat = $p->y; | ||
70 | + // convert to radians | ||
71 | + if( $lat * Proj4php::$common->R2D > 90.0 && | ||
72 | + $lat * Proj4php::$common->R2D < -90.0 && | ||
73 | + $lon * Proj4php::$common->R2D > 180.0 && | ||
74 | + $lon * Proj4php::$common->R2D < -180.0 ) { | ||
75 | + Proj4php::reportError( "merc:forward: llInputOutOfRange: " . $lon . " : " . $lat ); | ||
76 | + return null; | ||
77 | + } | ||
78 | + | ||
79 | + if( abs( abs( $lat ) - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN ) { | ||
80 | + Proj4php::reportError( "merc:forward: ll2mAtPoles" ); | ||
81 | + return null; | ||
82 | + } else { | ||
83 | + if( $this->sphere ) { | ||
84 | + $x = $this->x0 + $this->a * $this->k0 * Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
85 | + $y = $this->y0 + $this->a * $this->k0 * log( tan( Proj4php::$common->FORTPI + 0.5 * $lat ) ); | ||
86 | + } else { | ||
87 | + $sinphi = sin( lat ); | ||
88 | + $ts = Proj4php::$common->tsfnz( $this->e, $lat, $sinphi ); | ||
89 | + $x = $this->x0 + $this->a * $this->k0 * Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
90 | + $y = $this->y0 - $this->a * $this->k0 * log( $ts ); | ||
91 | + } | ||
92 | + | ||
93 | + $p->x = $x; | ||
94 | + $p->y = $y; | ||
95 | + | ||
96 | + return $p; | ||
97 | + } | ||
98 | + } | ||
99 | + | ||
100 | + /* Mercator inverse equations--mapping x,y to lat/long | ||
101 | + -------------------------------------------------- */ | ||
102 | + | ||
103 | + public function inverse( $p ) { | ||
104 | + | ||
105 | + $x = $p->x - $this->x0; | ||
106 | + $y = $p->y - $this->y0; | ||
107 | + | ||
108 | + if( $this->sphere ) { | ||
109 | + $lat = Proj4php::$common->HALF_PI - 2.0 * atan( exp( -$y / $this->a * $this->k0 ) ); | ||
110 | + } else { | ||
111 | + $ts = exp( -$y / ($this->a * $this->k0) ); | ||
112 | + $lat = Proj4php::$common->phi2z( $this->e, $ts ); | ||
113 | + if( $lat == -9999 ) { | ||
114 | + Proj4php::reportError( "merc:inverse: lat = -9999" ); | ||
115 | + return null; | ||
116 | + } | ||
117 | + } | ||
118 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + $x / ($this->a * $this->k0) ); | ||
119 | + | ||
120 | + $p->x = $lon; | ||
121 | + $p->y = $lat; | ||
122 | + return $p; | ||
123 | + } | ||
124 | + | ||
125 | +} | ||
126 | + | ||
127 | +Proj4php::$proj['merc'] = new Proj4phpProjMerc(); | ||
128 | + | ||
129 | + |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/mill.php
0 → 100644
@@ -0,0 +1,82 @@ | @@ -0,0 +1,82 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME MILLER CYLINDRICAL | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Miller Cylindrical projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + T. Mittan March, 1993 | ||
20 | + | ||
21 | + This function was adapted from the Lambert Azimuthal Equal Area projection | ||
22 | + code (FORTRAN) in the General Cartographic Transformation Package software | ||
23 | + which is available from the U.S. Geological Survey National Mapping Division. | ||
24 | + | ||
25 | + ALGORITHM REFERENCES | ||
26 | + | ||
27 | + 1. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, | ||
28 | + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. | ||
29 | + | ||
30 | + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
31 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
32 | + State Government Printing Office, Washington D.C., 1987. | ||
33 | + | ||
34 | + 3. "Software Documentation for GCTP General Cartographic Transformation | ||
35 | + Package", U.S. Geological Survey National Mapping Division, May 1982. | ||
36 | + * ***************************************************************************** */ | ||
37 | + | ||
38 | +class Proj4phpProjMill { | ||
39 | + /* Initialize the Miller Cylindrical projection | ||
40 | + ------------------------------------------- */ | ||
41 | + | ||
42 | + public function init() { | ||
43 | + //no-op | ||
44 | + } | ||
45 | + | ||
46 | + /* Miller Cylindrical forward equations--mapping lat,long to x,y | ||
47 | + ------------------------------------------------------------ */ | ||
48 | + public function forward( $p ) { | ||
49 | + | ||
50 | + $lon = $p->x; | ||
51 | + $lat = $p->y; | ||
52 | + | ||
53 | + /* Forward equations | ||
54 | + ----------------- */ | ||
55 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
56 | + $x = $this->x0 + $this->a * $dlon; | ||
57 | + $y = $this->y0 + $this->a * log( tan( (Proj4php::$common->PI / 4.0) + ($lat / 2.5) ) ) * 1.25; | ||
58 | + | ||
59 | + $p->x = $x; | ||
60 | + $p->y = $y; | ||
61 | + | ||
62 | + return $p; | ||
63 | + } | ||
64 | + | ||
65 | + /* Miller Cylindrical inverse equations--mapping x,y to lat/long | ||
66 | + ------------------------------------------------------------ */ | ||
67 | + public function inverse( $p ) { | ||
68 | + | ||
69 | + $p->x -= $this->x0; | ||
70 | + $p->y -= $this->y0; | ||
71 | + | ||
72 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + $p->x / $this->a ); | ||
73 | + $lat = 2.5 * (atan( exp( 0.8 * $p->y / $this->a ) ) - Proj4php::$common->PI / 4.0); | ||
74 | + | ||
75 | + $p->x = $lon; | ||
76 | + $p->y = $lat; | ||
77 | + | ||
78 | + return $p; | ||
79 | + } | ||
80 | +} | ||
81 | + | ||
82 | +Proj4php::$proj['mill'] = new Proj4phpProjMill(); | ||
0 | \ No newline at end of file | 83 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/moll.php
0 → 100644
@@ -0,0 +1,121 @@ | @@ -0,0 +1,121 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME MOLLWEIDE | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the MOllweide projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + D. Steinwand, EROS May, 1991; Updated Sept, 1992; Updated Feb, 1993 | ||
20 | + S. Nelson, EDC Jun, 2993; Made corrections in precision and | ||
21 | + number of iterations. | ||
22 | + | ||
23 | + ALGORITHM REFERENCES | ||
24 | + | ||
25 | + 1. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
26 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
27 | + Printing Office, Washington D.C., 1989. | ||
28 | + | ||
29 | + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
30 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
31 | + State Government Printing Office, Washington D.C., 1987. | ||
32 | + ****************************************************************************** */ | ||
33 | + | ||
34 | +class Proj4phpProjMoll { | ||
35 | + /* Initialize the Mollweide projection | ||
36 | + ------------------------------------ */ | ||
37 | + | ||
38 | + public function init() { | ||
39 | + //no-op | ||
40 | + } | ||
41 | + | ||
42 | + /* Mollweide forward equations--mapping lat,long to x,y | ||
43 | + ---------------------------------------------------- */ | ||
44 | + public function forward( $p ) { | ||
45 | + | ||
46 | + /* Forward equations | ||
47 | + ----------------- */ | ||
48 | + $lon = $p->x; | ||
49 | + $lat = $p->y; | ||
50 | + | ||
51 | + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
52 | + $theta = $lat; | ||
53 | + $con = Proj4php::$common->PI * sin( $lat ); | ||
54 | + | ||
55 | + /* Iterate using the Newton-Raphson method to find theta | ||
56 | + ----------------------------------------------------- */ | ||
57 | + for( $i = 0; true; ++$i ) { | ||
58 | + $delta_theta = -($theta + sin( $theta ) - $con) / (1.0 + cos( $theta )); | ||
59 | + $theta += $delta_theta; | ||
60 | + if( abs( $delta_theta ) < Proj4php::$common->EPSLN ) | ||
61 | + break; | ||
62 | + if( $i >= 50 ) { | ||
63 | + Proj4php::reportError( "moll:Fwd:IterationError" ); | ||
64 | + //return(241); | ||
65 | + } | ||
66 | + } | ||
67 | + $theta /= 2.0; | ||
68 | + | ||
69 | + /* If the latitude is 90 deg, force the x coordinate to be "0 . false easting" | ||
70 | + this is done here because of precision problems with "cos(theta)" | ||
71 | + -------------------------------------------------------------------------- */ | ||
72 | + if( Proj4php::$common->PI / 2 - abs( $lat ) < Proj4php::$common->EPSLN ) | ||
73 | + $delta_lon = 0; | ||
74 | + $x = 0.900316316158 * $this->a * $delta_lon * cos( $theta ) + $this->x0; | ||
75 | + $y = 1.4142135623731 * $this->a * sin( $theta ) + $this->y0; | ||
76 | + | ||
77 | + $p->x = $x; | ||
78 | + $p->y = $y; | ||
79 | + return $p; | ||
80 | + } | ||
81 | + | ||
82 | + /** | ||
83 | + * | ||
84 | + * @param type $p | ||
85 | + * @return type | ||
86 | + */ | ||
87 | + public function inverse( $p ) { | ||
88 | + #$theta; | ||
89 | + #$arg; | ||
90 | + | ||
91 | + /* Inverse equations | ||
92 | + ----------------- */ | ||
93 | + $p->x-= $this->x0; | ||
94 | + //~ $p->y -= $this->y0; | ||
95 | + $arg = $p->y / (1.4142135623731 * $this->a); | ||
96 | + | ||
97 | + /* Because of division by zero problems, 'arg' can not be 1.0. Therefore | ||
98 | + a number very close to one is used instead. | ||
99 | + ------------------------------------------------------------------- */ | ||
100 | + if( abs( $arg ) > 0.999999999999 ) | ||
101 | + $arg = 0.999999999999; | ||
102 | + $theta = asin( $arg ); | ||
103 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + ($p->x / (0.900316316158 * $this->a * cos( $theta ))) ); | ||
104 | + if( $lon < (-Proj4php::$common->PI) ) | ||
105 | + $lon = -Proj4php::$common->PI; | ||
106 | + if( $lon > Proj4php::$common->PI ) | ||
107 | + $lon = Proj4php::$common->PI; | ||
108 | + $arg = (2.0 * $theta + sin( 2.0 * $theta )) / Proj4php::$common->PI; | ||
109 | + if( abs( $arg ) > 1.0 ) | ||
110 | + $arg = 1.0; | ||
111 | + $lat = asin( $arg ); | ||
112 | + //return(OK); | ||
113 | + | ||
114 | + $p->x = $lon; | ||
115 | + $p->y = $lat; | ||
116 | + | ||
117 | + return $p; | ||
118 | + } | ||
119 | +} | ||
120 | + | ||
121 | +Proj4php::$proj['moll'] = new Proj4phpProjMoll(); | ||
0 | \ No newline at end of file | 122 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/nzmg.php
0 → 100644
@@ -0,0 +1,338 @@ | @@ -0,0 +1,338 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME NEW ZEALAND MAP GRID | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the New Zealand Map Grid projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + | ||
18 | + ALGORITHM REFERENCES | ||
19 | + | ||
20 | + 1. Department of Land and Survey Technical Circular 1973/32 | ||
21 | + http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf | ||
22 | + | ||
23 | + 2. OSG Technical Report 4.1 | ||
24 | + http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf | ||
25 | + | ||
26 | + | ||
27 | + IMPLEMENTATION NOTES | ||
28 | + | ||
29 | + The two references use different symbols for the calculated values. This | ||
30 | + implementation uses the variable names similar to the symbols in reference [1]. | ||
31 | + | ||
32 | + The alogrithm uses different units for delta latitude and delta longitude. | ||
33 | + The delta latitude is assumed to be in units of seconds of arc x 10^-5. | ||
34 | + The delta longitude is the usual radians. Look out for these conversions. | ||
35 | + | ||
36 | + The algorithm is described using complex arithmetic. There were three | ||
37 | + options: | ||
38 | + * find and use a Javascript library for complex arithmetic | ||
39 | + * write my own complex library | ||
40 | + * expand the complex arithmetic by hand to simple arithmetic | ||
41 | + | ||
42 | + This implementation has expanded the complex multiplication operations | ||
43 | + into parallel simple arithmetic operations for the real and imaginary parts. | ||
44 | + The imaginary part is way over to the right of the display; this probably | ||
45 | + violates every coding standard in the world, but, to me, it makes it much | ||
46 | + more obvious what is going on. | ||
47 | + | ||
48 | + The following complex operations are used: | ||
49 | + - addition | ||
50 | + - multiplication | ||
51 | + - division | ||
52 | + - complex number raised to integer power | ||
53 | + - summation | ||
54 | + | ||
55 | + A summary of complex arithmetic operations: | ||
56 | + (from http://en.wikipedia.org/wiki/Complex_arithmetic) | ||
57 | + addition: (a + bi) + (c + di) = (a + c) + (b + d)i | ||
58 | + subtraction: (a + bi) - (c + di) = (a - c) + (b - d)i | ||
59 | + multiplication: (a + bi) x (c + di) = (ac - bd) + (bc + ad)i | ||
60 | + division: (a + bi) / (c + di) = [(ac + bd)/(cc + dd)] + [(bc - ad)/(cc + dd)]i | ||
61 | + | ||
62 | + The algorithm needs to calculate summations of simple and complex numbers. This is | ||
63 | + implemented using a for-loop, pre-loading the summed value to zero. | ||
64 | + | ||
65 | + The algorithm needs to calculate theta^2, theta^3, etc while doing a summation. | ||
66 | + There are three possible implementations: | ||
67 | + - use pow in the summation loop - except for complex numbers | ||
68 | + - precalculate the values before running the loop | ||
69 | + - calculate theta^n = theta^(n-1) * theta during the loop | ||
70 | + This implementation uses the third option for both real and complex arithmetic. | ||
71 | + | ||
72 | + For example | ||
73 | + psi_n = 1; | ||
74 | + sum = 0; | ||
75 | + for (n = 1; n <=6; n++) { | ||
76 | + psi_n1 = psi_n * psi; // calculate psi^(n+1) | ||
77 | + psi_n = psi_n1; | ||
78 | + sum = sum + A[n] * psi_n; | ||
79 | + } | ||
80 | + | ||
81 | + | ||
82 | + TEST VECTORS | ||
83 | + | ||
84 | + NZMG E, N: 2487100.638 6751049.719 metres | ||
85 | + NZGD49 long, lat: 172.739194 -34.444066 degrees | ||
86 | + | ||
87 | + NZMG E, N: 2486533.395 6077263.661 metres | ||
88 | + NZGD49 long, lat: 172.723106 -40.512409 degrees | ||
89 | + | ||
90 | + NZMG E, N: 2216746.425 5388508.765 metres | ||
91 | + NZGD49 long, lat: 169.172062 -46.651295 degrees | ||
92 | + | ||
93 | + Note that these test vectors convert from NZMG metres to lat/long referenced | ||
94 | + to NZGD49, not the more usual WGS84. The difference is about 70m N/S and about | ||
95 | + 10m E/W. | ||
96 | + | ||
97 | + These test vectors are provided in reference [1]. Many more test | ||
98 | + vectors are available in | ||
99 | + http://www.linz.govt.nz/docs/topography/topographicdata/placenamesdatabase/nznamesmar08.zip | ||
100 | + which is a catalog of names on the 260-series maps. | ||
101 | + | ||
102 | + | ||
103 | + EPSG CODES | ||
104 | + | ||
105 | + NZMG EPSG:27200 | ||
106 | + NZGD49 EPSG:4272 | ||
107 | + | ||
108 | + http://spatialreference.org/ defines these as | ||
109 | + Proj4php.defs["EPSG:4272"] = "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs "; | ||
110 | + 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 "; | ||
111 | + | ||
112 | + | ||
113 | + LICENSE | ||
114 | + Copyright: Stephen Irons 2008 | ||
115 | + Released under terms of the LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
116 | + | ||
117 | + * ***************************************************************************** */ | ||
118 | + | ||
119 | +/** | ||
120 | + Initialize New Zealand Map Grip projection | ||
121 | + */ | ||
122 | +class Proj4phpProjNzmg { | ||
123 | + | ||
124 | + /** | ||
125 | + * iterations: Number of iterations to refine inverse transform. | ||
126 | + * 0 -> km accuracy | ||
127 | + * 1 -> m accuracy -- suitable for most mapping applications | ||
128 | + * 2 -> mm accuracy | ||
129 | + */ | ||
130 | + protected $iterations = 1; | ||
131 | + | ||
132 | + /** | ||
133 | + * | ||
134 | + */ | ||
135 | + public function init() { | ||
136 | + $this->A = array( ); | ||
137 | + $this->A[1] = +0.6399175073; | ||
138 | + $this->A[2] = -0.1358797613; | ||
139 | + $this->A[3] = +0.063294409; | ||
140 | + $this->A[4] = -0.02526853; | ||
141 | + $this->A[5] = +0.0117879; | ||
142 | + $this->A[6] = -0.0055161; | ||
143 | + $this->A[7] = +0.0026906; | ||
144 | + $this->A[8] = -0.001333; | ||
145 | + $this->A[9] = +0.00067; | ||
146 | + $this->A[10] = -0.00034; | ||
147 | + | ||
148 | + $this->B_re = array( ); | ||
149 | + $this->B_im = array( ); | ||
150 | + $this->B_re[1] = +0.7557853228; | ||
151 | + $this->B_im[1] = 0.0; | ||
152 | + $this->B_re[2] = +0.249204646; | ||
153 | + $this->B_im[2] = +0.003371507; | ||
154 | + $this->B_re[3] = -0.001541739; | ||
155 | + $this->B_im[3] = +0.041058560; | ||
156 | + $this->B_re[4] = -0.10162907; | ||
157 | + $this->B_im[4] = +0.01727609; | ||
158 | + $this->B_re[5] = -0.26623489; | ||
159 | + $this->B_im[5] = -0.36249218; | ||
160 | + $this->B_re[6] = -0.6870983; | ||
161 | + $this->B_im[6] = -1.1651967; | ||
162 | + | ||
163 | + $this->C_re = array( ); | ||
164 | + $this->C_im = array( ); | ||
165 | + $this->C_re[1] = +1.3231270439; | ||
166 | + $this->C_im[1] = 0.0; | ||
167 | + $this->C_re[2] = -0.577245789; | ||
168 | + $this->C_im[2] = -0.007809598; | ||
169 | + $this->C_re[3] = +0.508307513; | ||
170 | + $this->C_im[3] = -0.112208952; | ||
171 | + $this->C_re[4] = -0.15094762; | ||
172 | + $this->C_im[4] = +0.18200602; | ||
173 | + $this->C_re[5] = +1.01418179; | ||
174 | + $this->C_im[5] = +1.64497696; | ||
175 | + $this->C_re[6] = +1.9660549; | ||
176 | + $this->C_im[6] = +2.5127645; | ||
177 | + | ||
178 | + $this->D = array( ); | ||
179 | + $this->D[1] = +1.5627014243; | ||
180 | + $this->D[2] = +0.5185406398; | ||
181 | + $this->D[3] = -0.03333098; | ||
182 | + $this->D[4] = -0.1052906; | ||
183 | + $this->D[5] = -0.0368594; | ||
184 | + $this->D[6] = +0.007317; | ||
185 | + $this->D[7] = +0.01220; | ||
186 | + $this->D[8] = +0.00394; | ||
187 | + $this->D[9] = -0.0013; | ||
188 | + } | ||
189 | + | ||
190 | + /** | ||
191 | + New Zealand Map Grid Forward - long/lat to x/y | ||
192 | + long/lat in radians | ||
193 | + */ | ||
194 | + public function forward( $p ) { | ||
195 | + | ||
196 | + $lon = $p->x; | ||
197 | + $lat = $p->y; | ||
198 | + | ||
199 | + $delta_lat = $lat - $this->lat0; | ||
200 | + $delta_lon = $lon - $this->long0; | ||
201 | + | ||
202 | + // 1. Calculate d_phi and d_psi ... // and d_lambda | ||
203 | + // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. | ||
204 | + $d_phi = $delta_lat / Proj4php::$common->SEC_TO_RAD * 1E-5; | ||
205 | + $d_lambda = $delta_lon; | ||
206 | + $d_phi_n = 1; // d_phi^0 | ||
207 | + | ||
208 | + $d_psi = 0; | ||
209 | + for( $n = 1; $n <= 10; $n++ ) { | ||
210 | + $d_phi_n = $d_phi_n * $d_phi; | ||
211 | + $d_psi = $d_psi + $this->A[$n] * $d_phi_n; | ||
212 | + } | ||
213 | + | ||
214 | + // 2. Calculate theta | ||
215 | + $th_re = $d_psi; | ||
216 | + $th_im = $d_lambda; | ||
217 | + | ||
218 | + // 3. Calculate z | ||
219 | + $th_n_re = 1; | ||
220 | + $th_n_im = 0; // theta^0 | ||
221 | + #$th_n_re1; | ||
222 | + #$th_n_im1; | ||
223 | + | ||
224 | + $z_re = 0; | ||
225 | + $z_im = 0; | ||
226 | + for( $n = 1; $n <= 6; $n++ ) { | ||
227 | + $th_n_re1 = $th_n_re * $th_re - $th_n_im * $th_im; | ||
228 | + $th_n_im1 = $th_n_im * $th_re + $th_n_re * $th_im; | ||
229 | + $th_n_re = $th_n_re1; | ||
230 | + $th_n_im = $th_n_im1; | ||
231 | + $z_re = $z_re + $this->B_re[$n] * $th_n_re - $this->B_im[$n] * $th_n_im; | ||
232 | + $z_im = $z_im + $this->B_im[$n] * $th_n_re + $this->B_re[$n] * $th_n_im; | ||
233 | + } | ||
234 | + | ||
235 | + // 4. Calculate easting and northing | ||
236 | + $p->x = ($z_im * $this->a) + $this->x0; | ||
237 | + $p->y = ($z_re * $this->a) + $this->y0; | ||
238 | + | ||
239 | + return $p; | ||
240 | + } | ||
241 | + | ||
242 | + /** | ||
243 | + New Zealand Map Grid Inverse - x/y to long/lat | ||
244 | + */ | ||
245 | + public function inverse( $p ) { | ||
246 | + | ||
247 | + $x = $p->x; | ||
248 | + $y = $p->y; | ||
249 | + | ||
250 | + $delta_x = $x - $this->x0; | ||
251 | + $delta_y = $y - $this->y0; | ||
252 | + | ||
253 | + // 1. Calculate z | ||
254 | + $z_re = $delta_y / $this->a; | ||
255 | + $z_im = $delta_x / $this->a; | ||
256 | + | ||
257 | + // 2a. Calculate theta - first approximation gives km accuracy | ||
258 | + $z_n_re = 1; | ||
259 | + $z_n_im = 0; // z^0 | ||
260 | + $z_n_re1; | ||
261 | + $z_n_im1; | ||
262 | + | ||
263 | + $th_re = 0; | ||
264 | + $th_im = 0; | ||
265 | + for( $n = 1; $n <= 6; $n++ ) { | ||
266 | + $z_n_re1 = $z_n_re * $z_re - $z_n_im * $z_im; | ||
267 | + $z_n_im1 = $z_n_im * $z_re + $z_n_re * $z_im; | ||
268 | + $z_n_re = $z_n_re1; | ||
269 | + $z_n_im = $z_n_im1; | ||
270 | + $th_re = $th_re + $this->C_re[$n] * $z_n_re - $this->C_im[$n] * $z_n_im; | ||
271 | + $th_im = $th_im + $this->C_im[$n] * $z_n_re + $this->C_re[$n] * $z_n_im; | ||
272 | + } | ||
273 | + | ||
274 | + // 2b. Iterate to refine the accuracy of the calculation | ||
275 | + // 0 iterations gives km accuracy | ||
276 | + // 1 iteration gives m accuracy -- good enough for most mapping applications | ||
277 | + // 2 iterations bives mm accuracy | ||
278 | + for( $i = 0; $i < $this->iterations; $i++ ) { | ||
279 | + $th_n_re = $th_re; | ||
280 | + $th_n_im = $th_im; | ||
281 | + $th_n_re1; | ||
282 | + $th_n_im1; | ||
283 | + | ||
284 | + $num_re = $z_re; | ||
285 | + $num_im = $z_im; | ||
286 | + for( $n = 2; $n <= 6; $n++ ) { | ||
287 | + $th_n_re1 = $th_n_re * th_re - $th_n_im * $th_im; | ||
288 | + $th_n_im1 = $th_n_im * $th_re + $th_n_re * $th_im; | ||
289 | + $th_n_re = $th_n_re1; | ||
290 | + $th_n_im = $th_n_im1; | ||
291 | + $num_re = $num_re + ($n - 1) * ($this->B_re[$n] * $th_n_re - $this->B_im[$n] * $th_n_im); | ||
292 | + $num_im = $num_im + (n - 1) * ($this->B_im[$n] * $th_n_re + $this->B_re[$n] * $th_n_im); | ||
293 | + } | ||
294 | + | ||
295 | + $th_n_re = 1; | ||
296 | + $th_n_im = 0; | ||
297 | + $den_re = $this->B_re[1]; | ||
298 | + $den_im = $this->B_im[1]; | ||
299 | + for( $n = 2; $n <= 6; $n++ ) { | ||
300 | + $th_n_re1 = $th_n_re * $th_re - $th_n_im * $th_im; | ||
301 | + $th_n_im1 = $th_n_im * $th_re + $th_n_re * $th_im; | ||
302 | + $th_n_re = $th_n_re1; | ||
303 | + $th_n_im = $th_n_im1; | ||
304 | + $den_re = $den_re + $n * ($this->B_re[$n] * $th_n_re - $this->B_im[$n] * $th_n_im); | ||
305 | + $den_im = $den_im + $n * ($this->B_im[n] * $th_n_re + $this->B_re[$n] * $th_n_im); | ||
306 | + } | ||
307 | + | ||
308 | + // Complex division | ||
309 | + $den2 = $den_re * $den_re + $den_im * $den_im; | ||
310 | + $th_re = ($num_re * $den_re + $num_im * $den_im) / $den2; | ||
311 | + $th_im = ($num_im * $den_re - $num_re * $den_im) / $den2; | ||
312 | + } | ||
313 | + | ||
314 | + // 3. Calculate d_phi ... // and d_lambda | ||
315 | + $d_psi = $th_re; | ||
316 | + $d_lambda = $th_im; | ||
317 | + $d_psi_n = 1; // d_psi^0 | ||
318 | + | ||
319 | + $d_phi = 0; | ||
320 | + for( $n = 1; $n <= 9; $n++ ) { | ||
321 | + $d_psi_n = $d_psi_n * $d_psi; | ||
322 | + $d_phi = $d_phi + $this->D[$n] * $d_psi_n; | ||
323 | + } | ||
324 | + | ||
325 | + // 4. Calculate latitude and longitude | ||
326 | + // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. | ||
327 | + $lat = $this->lat0 + ($d_phi * Proj4php::$common->SEC_TO_RAD * 1E5); | ||
328 | + $lon = $this->long0 + $d_lambda; | ||
329 | + | ||
330 | + $p->x = $lon; | ||
331 | + $p->y = $lat; | ||
332 | + | ||
333 | + return $p; | ||
334 | + } | ||
335 | + | ||
336 | +} | ||
337 | + | ||
338 | +Proj4php::$proj['nzmg'] = new Proj4phpProjNzmg(); |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/omerc.php
0 → 100644
@@ -0,0 +1,301 @@ | @@ -0,0 +1,301 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/* * ***************************************************************************** | ||
10 | + NAME OBLIQUE MERCATOR (HOTINE) | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Oblique Mercator projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + T. Mittan Mar, 1993 | ||
20 | + | ||
21 | + ALGORITHM REFERENCES | ||
22 | + | ||
23 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
24 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
25 | + State Government Printing Office, Washington D.C., 1987. | ||
26 | + | ||
27 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
28 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
29 | + Printing Office, Washington D.C., 1989. | ||
30 | + * ***************************************************************************** */ | ||
31 | + | ||
32 | +class Proj4phpProjOmerc { | ||
33 | + /* Initialize the Oblique Mercator projection | ||
34 | + ------------------------------------------ */ | ||
35 | + | ||
36 | + public function init() { | ||
37 | + if( !$this->mode ) | ||
38 | + $this->mode = 0; | ||
39 | + if( !$this->lon1 ) { | ||
40 | + $this->lon1 = 0; | ||
41 | + $this->mode = 1; | ||
42 | + } | ||
43 | + if( !$this->lon2 ) | ||
44 | + $this->lon2 = 0; | ||
45 | + if( !$this->lat2 ) | ||
46 | + $this->lat2 = 0; | ||
47 | + | ||
48 | + /* Place parameters in static storage for common use | ||
49 | + ------------------------------------------------- */ | ||
50 | + $temp = $this->b / $this->a; | ||
51 | + $es = 1.0 - pow( $temp, 2 ); | ||
52 | + $e = sqrt( $es ); | ||
53 | + | ||
54 | + $this->sin_p20 = sin( $this->lat0 ); | ||
55 | + $this->cos_p20 = cos( $this->lat0 ); | ||
56 | + | ||
57 | + $this->con = 1.0 - $this->es * $this->sin_p20 * $this->sin_p20; | ||
58 | + $this->com = sqrt( 1.0 - $es ); | ||
59 | + $this->bl = sqrt( 1.0 + $this->es * pow( $this->cos_p20, 4.0 ) / (1.0 - $es) ); | ||
60 | + $this->al = $this->a * $this->bl * $this->k0 * $this->com / $this->con; | ||
61 | + if( abs( $this->lat0 ) < Proj4php::$common->EPSLN ) { | ||
62 | + $this->ts = 1.0; | ||
63 | + $this->d = 1.0; | ||
64 | + $this->el = 1.0; | ||
65 | + } else { | ||
66 | + $this->ts = Proj4php::$common->tsfnz( $this->e, $this->lat0, $this->sin_p20 ); | ||
67 | + $this->con = sqrt( $this->con ); | ||
68 | + $this->d = $this->bl * $this->com / ($this->cos_p20 * $this->con); | ||
69 | + if( ($this->d * $this->d - 1.0) > 0.0 ) { | ||
70 | + if( $this->lat0 >= 0.0 ) { | ||
71 | + $this->f = $this->d + sqrt( $this->d * $this->d - 1.0 ); | ||
72 | + } else { | ||
73 | + $this->f = $this->d - sqrt( $this->d * $this->d - 1.0 ); | ||
74 | + } | ||
75 | + } else { | ||
76 | + $this->f = $this->d; | ||
77 | + } | ||
78 | + $this->el = $this->f * pow( $this->ts, $this->bl ); | ||
79 | + } | ||
80 | + | ||
81 | + //$this->longc=52.60353916666667; | ||
82 | + | ||
83 | + if( $this->mode != 0 ) { | ||
84 | + $this->g = .5 * ($this->f - 1.0 / $this->f); | ||
85 | + $this->gama = Proj4php::$common->asinz( sin( $this->alpha ) / $this->d ); | ||
86 | + $this->longc = $this->longc - Proj4php::$common->asinz( $this->g * tan( $this->gama ) ) / $this->bl; | ||
87 | + | ||
88 | + /* Report parameters common to format B | ||
89 | + ------------------------------------- */ | ||
90 | + //genrpt(azimuth * R2D,"Azimuth of Central Line: "); | ||
91 | + //cenlon(lon_origin); | ||
92 | + // cenlat(lat_origin); | ||
93 | + | ||
94 | + $this->con = abs( $this->lat0 ); | ||
95 | + if( ($this->con > Proj4php::$common->EPSLN) && (abs( $this->con - Proj4php::$common->HALF_PI ) > Proj4php::$common->EPSLN) ) { | ||
96 | + $this->singam = sin( $this->gama ); | ||
97 | + $this->cosgam = cos( $this->gama ); | ||
98 | + | ||
99 | + $this->sinaz = sin( $this->alpha ); | ||
100 | + $this->cosaz = cos( $this->alpha ); | ||
101 | + | ||
102 | + if( $this->lat0 >= 0 ) { | ||
103 | + $this->u = ($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); | ||
104 | + } else { | ||
105 | + $this->u = -($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); | ||
106 | + } | ||
107 | + } else { | ||
108 | + Proj4php::reportError( "omerc:Init:DataError" ); | ||
109 | + } | ||
110 | + } else { | ||
111 | + $this->sinphi = sin( $this->at1 ); | ||
112 | + $this->ts1 = Proj4php::$common->tsfnz( $this->e, $this->lat1, $this->sinphi ); | ||
113 | + $this->sinphi = sin( $this->lat2 ); | ||
114 | + $this->ts2 = Proj4php::$common->tsfnz( $this->e, $this->lat2, $this->sinphi ); | ||
115 | + $this->h = pow( $this->ts1, $this->bl ); | ||
116 | + $this->l = pow( $this->ts2, $this->bl ); | ||
117 | + $this->f = $this->el / $this->h; | ||
118 | + $this->g = .5 * ($this->f - 1.0 / $this->f); | ||
119 | + $this->j = ($this->el * $this->el - $this->l * $this->h) / ($this->el * $this->el + $this->l * $this->h); | ||
120 | + $this->p = ($this->l - $this->h) / ($this->l + $this->h); | ||
121 | + $this->dlon = $this->lon1 - $this->lon2; | ||
122 | + if( $this->dlon < -Proj4php::$common->PI ) | ||
123 | + $this->lon2 = $this->lon2 - 2.0 * Proj4php::$common->PI; | ||
124 | + if( $this->dlon > Proj4php::$common->PI ) | ||
125 | + $this->lon2 = $this->lon2 + 2.0 * Proj4php::$common->PI; | ||
126 | + $this->dlon = $this->lon1 - $this->lon2; | ||
127 | + $this->longc = .5 * ($this->lon1 + $this->lon2) - atan( $this->j * tan( .5 * $this->bl * $this->dlon ) / $this->p ) / $this->bl; | ||
128 | + $this->dlon = Proj4php::$common->adjust_lon( $this->lon1 - $this->longc ); | ||
129 | + $this->gama = atan( sin( $this->bl * $this->dlon ) / $this->g ); | ||
130 | + $this->alpha = Proj4php::$common->asinz( $this->d * sin( $this->gama ) ); | ||
131 | + | ||
132 | + /* Report parameters common to format A | ||
133 | + ------------------------------------- */ | ||
134 | + if( abs( $this->lat1 - $this->lat2 ) <= Proj4php::$common->EPSLN ) { | ||
135 | + Proj4php::reportError( "omercInitDataError" ); | ||
136 | + //return(202); | ||
137 | + } else { | ||
138 | + $this->con = abs( $this->lat1 ); | ||
139 | + } | ||
140 | + if( ($this->con <= Proj4php::$common->EPSLN) || (abs( $this->con - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN) ) { | ||
141 | + Proj4php::reportError( "omercInitDataError" ); | ||
142 | + //return(202); | ||
143 | + } else { | ||
144 | + if( abs( abs( $this->lat0 ) - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN ) { | ||
145 | + Proj4php::reportError( "omercInitDataError" ); | ||
146 | + //return(202); | ||
147 | + } | ||
148 | + } | ||
149 | + | ||
150 | + $this->singam = sin( $this->gam ); | ||
151 | + $this->cosgam = cos( $this->gam ); | ||
152 | + | ||
153 | + $this->sinaz = sin( $this->alpha ); | ||
154 | + $this->cosaz = cos( $this->alpha ); | ||
155 | + | ||
156 | + | ||
157 | + if( $this->lat0 >= 0 ) { | ||
158 | + $this->u = ($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); | ||
159 | + } else { | ||
160 | + $this->u = -($this->al / $this->bl) * atan( sqrt( $this->d * $this->d - 1.0 ) / $this->cosaz ); | ||
161 | + } | ||
162 | + } | ||
163 | + } | ||
164 | + | ||
165 | + /* Oblique Mercator forward equations--mapping lat,long to x,y | ||
166 | + ---------------------------------------------------------- */ | ||
167 | + public function forward( $p ) { | ||
168 | + | ||
169 | + /* | ||
170 | + $theta; // angle | ||
171 | + $sin_phi; | ||
172 | + $cos_phi; // sin and cos value | ||
173 | + $b; // temporary values | ||
174 | + $c; | ||
175 | + $t; | ||
176 | + $tq; // temporary values | ||
177 | + $con; | ||
178 | + $n; | ||
179 | + $ml; // cone constant, small m | ||
180 | + $q; | ||
181 | + $us; | ||
182 | + $vl; | ||
183 | + $ul; | ||
184 | + $vs; | ||
185 | + $s; | ||
186 | + $dlon; | ||
187 | + $ts1; | ||
188 | + */ | ||
189 | + | ||
190 | + $lon = $p->x; | ||
191 | + $lat = $p->y; | ||
192 | + | ||
193 | + /* Forward equations | ||
194 | + ----------------- */ | ||
195 | + $sin_phi = sin( $lat ); | ||
196 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->longc ); | ||
197 | + $vl = sin( $this->bl * $dlon ); | ||
198 | + if( abs( abs( $lat ) - Proj4php::$common->HALF_PI ) > Proj4php::$common->EPSLN ) { | ||
199 | + $ts1 = Proj4php::$common->tsfnz( $this->e, $lat, $sin_phi ); | ||
200 | + $q = $this->el / (pow( $ts1, $this->bl )); | ||
201 | + $s = .5 * ($q - 1.0 / $q); | ||
202 | + $t = .5 * ($q + 1.0 / $q); | ||
203 | + $ul = ($s * $this->singam - $vl * $this->cosgam) / $t; | ||
204 | + $con = cos( $this->bl * $dlon ); | ||
205 | + if( abs( con ) < .0000001 ) { | ||
206 | + $us = $this->al * $this->bl * $dlon; | ||
207 | + } else { | ||
208 | + $us = $this->al * atan( ($s * $this->cosgam + $vl * $this->singam) / $con ) / $this->bl; | ||
209 | + if( $con < 0 ) | ||
210 | + $us = $us + Proj4php::$common->PI * $this->al / $this->bl; | ||
211 | + } | ||
212 | + } else { | ||
213 | + if( $lat >= 0 ) { | ||
214 | + $ul = $this->singam; | ||
215 | + } else { | ||
216 | + $ul = -$this->singam; | ||
217 | + } | ||
218 | + $us = $this->al * $lat / $this->bl; | ||
219 | + } | ||
220 | + if( abs( abs( $ul ) - 1.0 ) <= Proj4php::$common->EPSLN ) { | ||
221 | + //alert("Point projects into infinity","omer-for"); | ||
222 | + Proj4php::reportError( "omercFwdInfinity" ); | ||
223 | + //return(205); | ||
224 | + } | ||
225 | + $vs = .5 * $this->al * log( (1.0 - $ul) / (1.0 + $ul) ) / $this->bl; | ||
226 | + $us = $us - $this->u; | ||
227 | + $p->x = $this->x0 + $vs * $this->cosaz + $us * $this->sinaz; | ||
228 | + $p->y = $this->y0 + $us * $this->cosaz - $vs * $this->sinaz; | ||
229 | + | ||
230 | + return $p; | ||
231 | + } | ||
232 | + | ||
233 | + /** | ||
234 | + * | ||
235 | + * @param type $p | ||
236 | + * @return type | ||
237 | + */ | ||
238 | + public function inverse( $p ) { | ||
239 | + /* | ||
240 | + $delta_lon; /* Delta longitude (Given longitude - center | ||
241 | + $theta; /* angle | ||
242 | + $delta_theta; /* adjusted longitude | ||
243 | + $sin_phi; | ||
244 | + $cos_phi; /* sin and cos value | ||
245 | + $b; /* temporary values | ||
246 | + $c; | ||
247 | + $t; | ||
248 | + $tq; /* temporary values | ||
249 | + $con; | ||
250 | + $n; | ||
251 | + $ml; /* cone constant, small m | ||
252 | + $vs; | ||
253 | + $us; | ||
254 | + $q; | ||
255 | + $s; | ||
256 | + $ts1; | ||
257 | + $vl; | ||
258 | + $ul; | ||
259 | + $bs; | ||
260 | + $dlon; | ||
261 | + $flag; | ||
262 | + */ | ||
263 | + | ||
264 | + /* Inverse equations | ||
265 | + ----------------- */ | ||
266 | + $p->x -= $this->x0; | ||
267 | + $p->y -= $this->y0; | ||
268 | + #$flag = 0; | ||
269 | + $vs = $p->x * $this->cosaz - $p->y * $this->sinaz; | ||
270 | + $us = $p->y * $this->cosaz + $p->x * $this->sinaz; | ||
271 | + $us = $us + $this->u; | ||
272 | + $q = exp( -$this->bl * $vs / $this->al ); | ||
273 | + $s = .5 * ($q - 1.0 / $q); | ||
274 | + $t = .5 * ($q + 1.0 / $q); | ||
275 | + $vl = sin( $this->bl * $us / $this->al ); | ||
276 | + $ul = ($vl * $this->cosgam + $s * $this->singam) / $t; | ||
277 | + if( abs( abs( $ul ) - 1.0 ) <= Proj4php::$common->EPSLN ) { | ||
278 | + $lon = $this->longc; | ||
279 | + if( ul >= 0.0 ) { | ||
280 | + $lat = Proj4php::$common->HALF_PI; | ||
281 | + } else { | ||
282 | + $lat = -Proj4php::$common->HALF_PI; | ||
283 | + } | ||
284 | + } else { | ||
285 | + $con = 1.0 / $this->bl; | ||
286 | + $ts1 = pow( ($this->el / sqrt( (1.0 + $ul) / (1.0 - $ul) ) ), $con ); | ||
287 | + $lat = Proj4php::$common->phi2z( $this->e, $ts1 ); | ||
288 | + //if ($flag != 0) | ||
289 | + //return($flag); | ||
290 | + //~ con = cos($this->bl * us /al); | ||
291 | + $theta = $this->longc - atan2( ($s * $this->cosgam - $vl * $this->singam ), $con ) / $this->bl; | ||
292 | + $lon = Proj4php::$common->adjust_lon( $theta ); | ||
293 | + } | ||
294 | + $p->x = $lon; | ||
295 | + $p->y = $lat; | ||
296 | + return $p; | ||
297 | + } | ||
298 | + | ||
299 | +} | ||
300 | + | ||
301 | +Proj4php::$proj['omerc'] = new Proj4phpProjOmerc(); | ||
0 | \ No newline at end of file | 302 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/ortho.php
0 → 100644
@@ -0,0 +1,139 @@ | @@ -0,0 +1,139 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/* * ***************************************************************************** | ||
10 | + NAME ORTHOGRAPHIC | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Orthographic projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + T. Mittan Mar, 1993 | ||
20 | + | ||
21 | + ALGORITHM REFERENCES | ||
22 | + | ||
23 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
24 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
25 | + State Government Printing Office, Washington D.C., 1987. | ||
26 | + | ||
27 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
28 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
29 | + Printing Office, Washington D.C., 1989. | ||
30 | + * ***************************************************************************** */ | ||
31 | + | ||
32 | +class Proj4phpProjOrtho { | ||
33 | + | ||
34 | + /* Initialize the Orthographic projection | ||
35 | + ------------------------------------- */ | ||
36 | + public function init( $def ) { | ||
37 | + //double temp; /* temporary variable */ | ||
38 | + | ||
39 | + /* Place parameters in static storage for common use | ||
40 | + ------------------------------------------------- */; | ||
41 | + $this->sin_p14 = sin( $this->lat0 ); | ||
42 | + $this->cos_p14 = cos( $this->lat0 ); | ||
43 | + } | ||
44 | + | ||
45 | + /* Orthographic forward equations--mapping lat,long to x,y | ||
46 | + --------------------------------------------------- */ | ||
47 | + public function forward( $p ) { | ||
48 | + | ||
49 | + /* | ||
50 | + $sinphi; | ||
51 | + $cosphi; // sin and cos value | ||
52 | + $dlon; // delta longitude value | ||
53 | + $coslon; // cos of longitude | ||
54 | + $ksp; // scale factor | ||
55 | + $g; | ||
56 | + */ | ||
57 | + | ||
58 | + $lon = $p->x; | ||
59 | + $lat = $p->y; | ||
60 | + | ||
61 | + /* Forward equations | ||
62 | + ----------------- */ | ||
63 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
64 | + | ||
65 | + $sinphi = sin( $lat ); | ||
66 | + $cosphi = cos( $lat ); | ||
67 | + | ||
68 | + $coslon = cos( $dlon ); | ||
69 | + $g = $this->sin_p14 * sinphi + $this->cos_p14 * $cosphi * $coslon; | ||
70 | + $ksp = 1.0; | ||
71 | + | ||
72 | + if( ($g > 0) || (abs( $g ) <= Proj4php::$common->EPSLN) ) { | ||
73 | + $x = $this->a * $ksp * $cosphi * sin( $dlon ); | ||
74 | + $y = $this->y0 + $this->a * $ksp * ($this->cos_p14 * $sinphi - $this->sin_p14 * $cosphi * $coslon); | ||
75 | + } else { | ||
76 | + Proj4php::reportError( "orthoFwdPointError" ); | ||
77 | + } | ||
78 | + | ||
79 | + $p->x = $x; | ||
80 | + $p->y = $y; | ||
81 | + | ||
82 | + return $p; | ||
83 | + } | ||
84 | + | ||
85 | + /** | ||
86 | + * | ||
87 | + * @param type $p | ||
88 | + * @return type | ||
89 | + */ | ||
90 | + public function inverse( $p ) { | ||
91 | + | ||
92 | + /* | ||
93 | + $rh; // height above ellipsoid | ||
94 | + $z; // angle | ||
95 | + $sinz; | ||
96 | + $cosz; // sin of z and cos of z | ||
97 | + $temp; | ||
98 | + $con; | ||
99 | + $lon; | ||
100 | + $lat; | ||
101 | + */ | ||
102 | + | ||
103 | + /* Inverse equations | ||
104 | + ----------------- */ | ||
105 | + $p->x -= $this->x0; | ||
106 | + $p->y -= $this->y0; | ||
107 | + $rh = sqrt( $p->x * $p->x + $p->y * $p->y ); | ||
108 | + if( $rh > $this->a + .0000001 ) { | ||
109 | + Proj4php::reportError( "orthoInvDataError" ); | ||
110 | + } | ||
111 | + $z = Proj4php::$common->asinz( $rh / $this->a ); | ||
112 | + | ||
113 | + $sinz = sin( $z ); | ||
114 | + $cosz = cos( $z ); | ||
115 | + | ||
116 | + $lon = $this->long0; | ||
117 | + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { | ||
118 | + $lat = $this->lat0; | ||
119 | + } | ||
120 | + $lat = Proj4php::$common->asinz( $cosz * $this->sin_p14 + ($p->y * $sinz * $this->cos_p14) / $rh ); | ||
121 | + $con = abs( $this->lat0 ) - Proj4php::$common->HALF_PI; | ||
122 | + if( abs( con ) <= Proj4php::$common->EPSLN ) { | ||
123 | + if( $this->lat0 >= 0 ) { | ||
124 | + $lon = Proj4php::$common->adjust_lon( $this->long0 + atan2( $p->x, -$p->y ) ); | ||
125 | + } else { | ||
126 | + $lon = Proj4php::$common->adjust_lon( $this->long0 - atan2( -$p->x, $p->y ) ); | ||
127 | + } | ||
128 | + } | ||
129 | + $con = $cosz - $this->sin_p14 * sin( $lat ); | ||
130 | + | ||
131 | + $p->x = $lon; | ||
132 | + $p->y = $lat; | ||
133 | + | ||
134 | + return $p; | ||
135 | + } | ||
136 | + | ||
137 | +} | ||
138 | + | ||
139 | +Proj4php::$proj['ortho'] = new Proj4phpProjOrtho(); | ||
0 | \ No newline at end of file | 140 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/poly.php
0 → 100644
@@ -0,0 +1,192 @@ | @@ -0,0 +1,192 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | + | ||
10 | + | ||
11 | +/* Function to compute, phi4, the latitude for the inverse of the | ||
12 | + Polyconic projection. | ||
13 | + ------------------------------------------------------------ */ | ||
14 | +function phi4z( $eccent, $e0, $e1, $e2, $e3, $a, $b, &$c, $phi ) { | ||
15 | + /* | ||
16 | + $sinphi; | ||
17 | + $sin2ph; | ||
18 | + $tanph; | ||
19 | + $ml; | ||
20 | + $mlp; | ||
21 | + $con1; | ||
22 | + $con2; | ||
23 | + $con3; | ||
24 | + $dphi; | ||
25 | + $i; | ||
26 | + */ | ||
27 | + | ||
28 | + $phi = $a; | ||
29 | + for( $i = 1; $i <= 15; $i++ ) { | ||
30 | + $sinphi = sin( $phi ); | ||
31 | + $tanphi = tan( $phi ); | ||
32 | + $c = $tanphi * sqrt( 1.0 - $eccent * $sinphi * $sinphi ); | ||
33 | + $sin2ph = sin( 2.0 * $phi ); | ||
34 | + /* | ||
35 | + ml = e0 * *phi - e1 * sin2ph + e2 * sin (4.0 * *phi); | ||
36 | + mlp = e0 - 2.0 * e1 * cos (2.0 * *phi) + 4.0 * e2 * cos (4.0 * *phi); | ||
37 | + */ | ||
38 | + $ml = $e0 * $phi - $e1 * $sin2ph + $e2 * sin( 4.0 * $phi ) - $e3 * sin( 6.0 * $phi ); | ||
39 | + $mlp = $e0 - 2.0 * $e1 * cos( 2.0 * $phi ) + 4.0 * $e2 * cos( 4.0 * $phi ) - 6.0 * $e3 * cos( 6.0 * $phi ); | ||
40 | + $con1 = 2.0 * $ml + $c * ($ml * $ml + $b) - 2.0 * $a * ($c * $ml + 1.0); | ||
41 | + $con2 = $eccent * $sin2ph * ($ml * $ml + $b - 2.0 * $a * $ml) / (2.0 * $c); | ||
42 | + $con3 = 2.0 * ($a - $ml) * ($c * $mlp - 2.0 / $sin2ph) - 2.0 * $mlp; | ||
43 | + $dphi = $con1 / ($con2 + $con3); | ||
44 | + $phi += $dphi; | ||
45 | + if( abs( $dphi ) <= .0000000001 ) | ||
46 | + return($phi); | ||
47 | + } | ||
48 | + | ||
49 | + Proj4php::reportError( "phi4z: No convergence" ); | ||
50 | + | ||
51 | + return null; | ||
52 | +} | ||
53 | + | ||
54 | +/* Function to compute the constant e4 from the input of the eccentricity | ||
55 | + of the spheroid, x. This constant is used in the Polar Stereographic | ||
56 | + projection. | ||
57 | + -------------------------------------------------------------------- */ | ||
58 | +function e4fn( $x ) { | ||
59 | + #$con; | ||
60 | + #$com; | ||
61 | + $con = 1.0 + $x; | ||
62 | + $com = 1.0 - $x; | ||
63 | + return (sqrt( (pow( $con, $con )) * (pow( $com, $com )) )); | ||
64 | +} | ||
65 | + | ||
66 | +/* * ***************************************************************************** | ||
67 | + NAME POLYCONIC | ||
68 | + | ||
69 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
70 | + Northing for the Polyconic projection. The | ||
71 | + longitude and latitude must be in radians. The Easting | ||
72 | + and Northing values will be returned in meters. | ||
73 | + | ||
74 | + PROGRAMMER DATE | ||
75 | + ---------- ---- | ||
76 | + T. Mittan Mar, 1993 | ||
77 | + | ||
78 | + ALGORITHM REFERENCES | ||
79 | + | ||
80 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
81 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
82 | + State Government Printing Office, Washington D.C., 1987. | ||
83 | + | ||
84 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
85 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
86 | + Printing Office, Washington D.C., 1989. | ||
87 | + * ***************************************************************************** */ | ||
88 | + | ||
89 | +class Proj4phpProjPoly { | ||
90 | + | ||
91 | + /* Initialize the POLYCONIC projection | ||
92 | + ---------------------------------- */ | ||
93 | + public function init() { | ||
94 | + #$temp; /* temporary variable */ | ||
95 | + if( $this->lat0 == 0 ) | ||
96 | + $this->lat0 = 90; //$this->lat0 ca | ||
97 | + | ||
98 | + /* Place parameters in static storage for common use | ||
99 | + ------------------------------------------------- */ | ||
100 | + $this->temp = $this->b / $this->a; | ||
101 | + $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 | ||
102 | + $this->e = sqrt( $this->es ); | ||
103 | + $this->e0 = Proj4php::$common->e0fn( $this->es ); | ||
104 | + $this->e1 = Proj4php::$common->e1fn( $this->es ); | ||
105 | + $this->e2 = Proj4php::$common->e2fn( $this->es ); | ||
106 | + $this->e3 = Proj4php::$common->e3fn( $this->es ); | ||
107 | + $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 | ||
108 | + //if (!$this->ml0) {$this->ml0=0;} | ||
109 | + } | ||
110 | + | ||
111 | + /* Polyconic forward equations--mapping lat,long to x,y | ||
112 | + --------------------------------------------------- */ | ||
113 | + public function forward( $p ) { | ||
114 | + | ||
115 | + /* | ||
116 | + $sinphi; | ||
117 | + $cosphi; // sin and cos value | ||
118 | + $al; // temporary values | ||
119 | + $c; // temporary values | ||
120 | + $con; | ||
121 | + $ml; // cone constant, small m | ||
122 | + $ms; // small m | ||
123 | + $x; | ||
124 | + $y; | ||
125 | + */ | ||
126 | + | ||
127 | + $lon = $p->x; | ||
128 | + $lat = $p->y; | ||
129 | + | ||
130 | + $con = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
131 | + | ||
132 | + if( abs( $lat ) <= .0000001 ) { | ||
133 | + $x = $this->x0 + $this->a * $con; | ||
134 | + $y = $this->y0 - $this->a * $this->ml0; | ||
135 | + } else { | ||
136 | + $sinphi = sin( $lat ); | ||
137 | + $cosphi = cos( $lat ); | ||
138 | + | ||
139 | + $ml = Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); | ||
140 | + $ms = Proj4php::$common->msfnz( $this->e, $sinphi, $cosphi ); | ||
141 | + | ||
142 | + $x = $this->x0 + $this->a * $ms * sin( $sinphi ) / $sinphi; | ||
143 | + $y = $this->y0 + $this->a * ($ml - $this->ml0 + $ms * (1.0 - cos( $sinphi )) / $sinphi); | ||
144 | + } | ||
145 | + | ||
146 | + $p->x = $x; | ||
147 | + $p->y = $y; | ||
148 | + | ||
149 | + return $p; | ||
150 | + } | ||
151 | + | ||
152 | + /* Inverse equations | ||
153 | + ----------------- */ | ||
154 | + public function inverse( $p ) { | ||
155 | + | ||
156 | + /* | ||
157 | + $sin_phi; | ||
158 | + $cos_phi; // sin and cos values | ||
159 | + $al; // temporary values | ||
160 | + $b; // temporary values | ||
161 | + $c; // temporary values | ||
162 | + $con; | ||
163 | + $ml; // cone constant, small m | ||
164 | + $iflg; // error flag | ||
165 | + $lon; | ||
166 | + $lat; | ||
167 | + */ | ||
168 | + | ||
169 | + $p->x -= $this->x0; | ||
170 | + $p->y -= $this->y0; | ||
171 | + $al = $this->ml0 + $p->y / $this->a; | ||
172 | + $iflg = 0; | ||
173 | + | ||
174 | + if( abs( $al ) <= .0000001 ) { | ||
175 | + $lon = $p->x / $this->a + $this->long0; | ||
176 | + $lat = 0.0; | ||
177 | + } else { | ||
178 | + $b = $al * $al + ($p->x / $this->a) * ($p->x / $this->a); | ||
179 | + $iflg = phi4z( $this->es, $this->e0, $this->e1, $this->e2, $this->e3, $this->al, $b, $c, $lat ); | ||
180 | + if( $iflg != 1 ) | ||
181 | + return($iflg); | ||
182 | + $lon = Proj4php::$common->adjust_lon( (Proj4php::$common->asinz( $p->x * $c / $this->a ) / sin( $lat )) + $this->long0 ); | ||
183 | + } | ||
184 | + | ||
185 | + $p->x = $lon; | ||
186 | + $p->y = $lat; | ||
187 | + return $p; | ||
188 | + } | ||
189 | + | ||
190 | +} | ||
191 | + | ||
192 | +Proj4php::$proj['poly'] = new Proj4phpProjPoly(); | ||
0 | \ No newline at end of file | 193 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sinu.php
0 → 100644
@@ -0,0 +1,139 @@ | @@ -0,0 +1,139 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME SINUSOIDAL | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Sinusoidal projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + D. Steinwand, EROS May, 1991 | ||
20 | + | ||
21 | + This function was adapted from the Sinusoidal projection code (FORTRAN) in the | ||
22 | + General Cartographic Transformation Package software which is available from | ||
23 | + the U.S. Geological Survey National Mapping Division. | ||
24 | + | ||
25 | + ALGORITHM REFERENCES | ||
26 | + | ||
27 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
28 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
29 | + State Government Printing Office, Washington D.C., 1987. | ||
30 | + | ||
31 | + 2. "Software Documentation for GCTP General Cartographic Transformation | ||
32 | + Package", U.S. Geological Survey National Mapping Division, May 1982. | ||
33 | + * ***************************************************************************** */ | ||
34 | + | ||
35 | +class Proj4phpProjSinu { | ||
36 | + | ||
37 | + /* Initialize the Sinusoidal projection | ||
38 | + ------------------------------------ */ | ||
39 | + public function init() { | ||
40 | + /* Place parameters in static storage for common use | ||
41 | + ------------------------------------------------- */ | ||
42 | + #$this->R = 6370997.0; //Radius of earth | ||
43 | + | ||
44 | + if( !$this->sphere ) { | ||
45 | + $this->en = Proj4php::$common->pj_enfn( $this->es ); | ||
46 | + } else { | ||
47 | + $this->n = 1.; | ||
48 | + $this->m = 0.; | ||
49 | + $this->es = 0; | ||
50 | + $this->C_y = sqrt( ($this->m + 1.) / $this->n ); | ||
51 | + $this->C_x = $this->C_y / ($this->m + 1.); | ||
52 | + } | ||
53 | + } | ||
54 | + | ||
55 | + /* Sinusoidal forward equations--mapping lat,long to x,y | ||
56 | + ----------------------------------------------------- */ | ||
57 | + public function forward( $p ) { | ||
58 | + | ||
59 | + #$x,y,delta_lon; | ||
60 | + $lon = $p->x; | ||
61 | + $lat = $p->y; | ||
62 | + | ||
63 | + /* Forward equations | ||
64 | + ----------------- */ | ||
65 | + $lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
66 | + | ||
67 | + if( isset($this->sphere) ) { | ||
68 | + if( !$this->m ) { | ||
69 | + $lat = $this->n != 1. ? asin( $this->n * sin( $lat ) ) : $lat; | ||
70 | + } else { | ||
71 | + $k = $this->n * sin( $lat ); | ||
72 | + for( $i = Proj4php::$common->MAX_ITER; $i; --$i ) { | ||
73 | + $V = ($this->m * $lat + sin( $lat ) - $k) / ($this->m + cos( $lat )); | ||
74 | + $lat -= $V; | ||
75 | + if( abs( $V ) < Proj4php::$common->EPSLN ) | ||
76 | + break; | ||
77 | + } | ||
78 | + } | ||
79 | + $x = $this->a * $this->C_x * $lon * ($this->m + cos( $lat )); | ||
80 | + $y = $this->a * $this->C_y * $lat; | ||
81 | + } else { | ||
82 | + | ||
83 | + $s = sin( $lat ); | ||
84 | + $c = cos( $lat ); | ||
85 | + $y = $this->a * Proj4php::$common->pj_mlfn( $lat, $s, $c, $this->en ); | ||
86 | + $x = $this->a * $lon * $c / sqrt( 1. - $this->es * $s * $s ); | ||
87 | + } | ||
88 | + | ||
89 | + $p->x = $x; | ||
90 | + $p->y = $y; | ||
91 | + | ||
92 | + return $p; | ||
93 | + } | ||
94 | + | ||
95 | + /** | ||
96 | + * | ||
97 | + * @param type $p | ||
98 | + * @return type | ||
99 | + */ | ||
100 | + public function inverse( $p ) { | ||
101 | + #$lat; | ||
102 | + #$temp; | ||
103 | + #$lon; | ||
104 | + | ||
105 | + /* Inverse equations | ||
106 | + ----------------- */ | ||
107 | + $p->x -= $this->x0; | ||
108 | + $p->y -= $this->y0; | ||
109 | + $lat = $p->y / $this->a; | ||
110 | + | ||
111 | + if( isset($this->sphere) ) { | ||
112 | + | ||
113 | + $p->y /= $this->C_y; | ||
114 | + $lat = $this->m ? asin( ($this->m * $p->y + sin( $p->y )) / $this->n ) : ( $this->n != 1. ? asin( sin( $p->y ) / $this->n ) : $p->y ); | ||
115 | + $lon = $p->x / ($this->C_x * ($this->m + cos( $p->y ))); | ||
116 | + } | ||
117 | + else { | ||
118 | + $lat = Proj4php::$common->pj_inv_mlfn( $p->y / $this->a, $this->es, $this->en ); | ||
119 | + $s = abs( $lat ); | ||
120 | + | ||
121 | + if( $s < Proj4php::$common->HALF_PI ) { | ||
122 | + $s = sin( $lat ); | ||
123 | + $temp = $this->long0 + $p->x * sqrt( 1. - $this->es * $s * $s ) / ($this->a * cos( $lat )); | ||
124 | + //temp = $this->long0 + $p->x / ($this->a * cos($lat)); | ||
125 | + $lon = Proj4php::$common->adjust_lon( $temp ); | ||
126 | + } else if( ($s - Proj4php::$common->EPSLN) < Proj4php::$common->HALF_PI ) { | ||
127 | + $lon = $this->long0; | ||
128 | + } | ||
129 | + } | ||
130 | + | ||
131 | + $p->x = $lon; | ||
132 | + $p->y = $lat; | ||
133 | + | ||
134 | + return $p; | ||
135 | + } | ||
136 | + | ||
137 | +} | ||
138 | + | ||
139 | +Proj4php::$proj['sinu'] = new Proj4phpProjSinu(); | ||
0 | \ No newline at end of file | 140 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/somerc.php
0 → 100644
@@ -0,0 +1,135 @@ | @@ -0,0 +1,135 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME SWISS OBLIQUE MERCATOR | ||
11 | + | ||
12 | + PURPOSE: Swiss projection. | ||
13 | + WARNING: X and Y are inverted (weird) in the swiss coordinate system. Not | ||
14 | + here, since we want X to be horizontal and Y vertical. | ||
15 | + | ||
16 | + ALGORITHM REFERENCES | ||
17 | + 1. "Formules et constantes pour le Calcul pour la | ||
18 | + projection cylindrique conforme à axe oblique et pour la transformation entre | ||
19 | + des systèmes de référence". | ||
20 | + http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf | ||
21 | + | ||
22 | +*******************************************************************************/ | ||
23 | + | ||
24 | +class Proj4phpProjSomerc { | ||
25 | + | ||
26 | + /** | ||
27 | + * | ||
28 | + */ | ||
29 | + public function init() { | ||
30 | + $phy0 = $this->lat0; | ||
31 | + $this->lambda0 = $this->long0; | ||
32 | + $sinPhy0 = sin( $phy0 ); | ||
33 | + $semiMajorAxis = $this->a; | ||
34 | + $invF = $this->rf; | ||
35 | + $flattening = 1 / $invF; | ||
36 | + $e2 = 2 * $flattening - pow( $flattening, 2 ); | ||
37 | + $e = $this->e = sqrt( $e2 ); | ||
38 | + $this->R = $this->k0 * $semiMajorAxis * sqrt( 1 - $e2 ) / (1 - $e2 * pow( $sinPhy0, 2.0 )); | ||
39 | + $this->alpha = sqrt( 1 + $e2 / (1 - $e2) * pow( cos( $phy0 ), 4.0 ) ); | ||
40 | + $this->b0 = asin( $sinPhy0 / $this->alpha ); | ||
41 | + $this->K = log( tan( Proj4php::$common->PI / 4.0 + $this->b0 / 2.0 ) ) | ||
42 | + - $this->alpha | ||
43 | + * log( tan( Proj4php::$common->PI / 4.0 + $phy0 / 2.0 ) ) | ||
44 | + + $this->alpha | ||
45 | + * $e / 2 | ||
46 | + * log( (1 + $e * $sinPhy0) | ||
47 | + / (1 - $e * $sinPhy0) ); | ||
48 | + } | ||
49 | + | ||
50 | + /** | ||
51 | + * | ||
52 | + * @param type $p | ||
53 | + * @return type | ||
54 | + */ | ||
55 | + public function forward( $p ) { | ||
56 | + $Sa1 = log( tan( Proj4php::$common->PI / 4.0 - $p->y / 2.0 ) ); | ||
57 | + $Sa2 = $this->e / 2.0 | ||
58 | + * log( (1 + $this->e * sin( $p->y )) | ||
59 | + / (1 - $this->e * sin( $p->y )) ); | ||
60 | + $S = -$this->alpha * ($Sa1 + $Sa2) + $this->K; | ||
61 | + | ||
62 | + // spheric latitude | ||
63 | + $b = 2.0 * (atan( exp( $S ) ) - proj4phpCommon::PI / 4.0); | ||
64 | + | ||
65 | + // spheric longitude | ||
66 | + $I = $this->alpha * ($p->x - $this->lambda0); | ||
67 | + | ||
68 | + // psoeudo equatorial rotation | ||
69 | + $rotI = atan( sin( $I ) | ||
70 | + / (sin( $this->b0 ) * tan( $b ) + | ||
71 | + cos( $this->b0 ) * cos( $I )) ); | ||
72 | + | ||
73 | + $rotB = asin( cos( $this->b0 ) * sin( $b ) - | ||
74 | + sin( $this->b0 ) * cos( $b ) * cos( $I ) ); | ||
75 | + | ||
76 | + $p->y = $this->R / 2.0 | ||
77 | + * log( (1 + sin( $rotB )) / (1 - sin( $rotB )) ) | ||
78 | + + $this->y0; | ||
79 | + | ||
80 | + $p->x = $this->R * $rotI + $this->x0; | ||
81 | + | ||
82 | + return $p; | ||
83 | + } | ||
84 | + | ||
85 | + /** | ||
86 | + * | ||
87 | + * @param type $p | ||
88 | + * @return type | ||
89 | + */ | ||
90 | + public function inverse( $p ) { | ||
91 | + | ||
92 | + $Y = $p->x - $this->x0; | ||
93 | + $X = $p->y - $this->y0; | ||
94 | + | ||
95 | + $rotI = $Y / $this->R; | ||
96 | + $rotB = 2 * (atan( exp( $X / $this->R ) ) - Proj4php::$common->PI / 4.0); | ||
97 | + | ||
98 | + $b = asin( cos( $this->b0 ) * sin( $rotB ) | ||
99 | + + sin( $this->b0 ) * cos( $rotB ) * cos( $rotI ) ); | ||
100 | + $I = atan( sin( $rotI ) | ||
101 | + / (cos( $this->b0 ) * cos( $rotI ) - sin( $this->b0 ) | ||
102 | + * tan( $rotB )) ); | ||
103 | + | ||
104 | + $lambda = $this->lambda0 + $I / $this->alpha; | ||
105 | + | ||
106 | + $S = 0.0; | ||
107 | + $phy = $b; | ||
108 | + $prevPhy = -1000.0; | ||
109 | + $iteration = 0; | ||
110 | + while( abs( $phy - $prevPhy ) > 0.0000001 ) { | ||
111 | + if( ++$iteration > 20 ) { | ||
112 | + Proj4php::reportError( "omercFwdInfinity" ); | ||
113 | + return; | ||
114 | + } | ||
115 | + //S = log(tan(PI / 4.0 + phy / 2.0)); | ||
116 | + $S = 1.0 | ||
117 | + / $this->alpha | ||
118 | + * (log( tan( Proj4php::$common->PI / 4.0 + $b / 2.0 ) ) - $this->K) | ||
119 | + + $this->e | ||
120 | + * log( tan( Proj4php::$common->PI / 4.0 | ||
121 | + + asin( $this->e * sin( $phy ) ) | ||
122 | + / 2.0 ) ); | ||
123 | + $prevPhy = $phy; | ||
124 | + $phy = 2.0 * atan( exp( $S ) ) - Proj4php::$common->PI / 2.0; | ||
125 | + } | ||
126 | + | ||
127 | + $p->x = $lambda; | ||
128 | + $p->y = $phy; | ||
129 | + | ||
130 | + return $p; | ||
131 | + } | ||
132 | + | ||
133 | +} | ||
134 | + | ||
135 | +Proj4php::$proj['somerc'] = new Proj4phpProjSomerc(); | ||
0 | \ No newline at end of file | 136 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/stere.php
0 → 100644
@@ -0,0 +1,303 @@ | @@ -0,0 +1,303 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | + | ||
10 | +// Initialize the Stereographic projection | ||
11 | +class Proj4phpProjStere { | ||
12 | + | ||
13 | + protected $TOL = 1.e-8; | ||
14 | + protected $NITER = 8; | ||
15 | + protected $CONV = 1.e-10; | ||
16 | + protected $S_POLE = 0; | ||
17 | + protected $N_POLE = 1; | ||
18 | + protected $OBLIQ = 2; | ||
19 | + protected $EQUIT = 3; | ||
20 | + | ||
21 | + /** | ||
22 | + * | ||
23 | + * @param type $phit | ||
24 | + * @param type $sinphi | ||
25 | + * @param type $eccen | ||
26 | + * @return type | ||
27 | + */ | ||
28 | + public function ssfn_( $phit, $sinphi, $eccen ) { | ||
29 | + $sinphi *= $eccen; | ||
30 | + return (tan( .5 * (Proj4php::$common->HALF_PI + $phit) ) * pow( (1. - $sinphi) / (1. + $sinphi), .5 * $eccen )); | ||
31 | + } | ||
32 | + | ||
33 | + /** | ||
34 | + * | ||
35 | + */ | ||
36 | + public function init() { | ||
37 | + $this->phits = $this->lat_ts ? $this->lat_ts : Proj4php::$common->HALF_PI; | ||
38 | + $t = abs( $this->lat0 ); | ||
39 | + if( (abs( $t ) - Proj4php::$common->HALF_PI) < Proj4php::$common->EPSLN ) { | ||
40 | + $this->mode = $this->lat0 < 0. ? $this->S_POLE : $this->N_POLE; | ||
41 | + } else { | ||
42 | + $this->mode = $t > Proj4php::$common->EPSLN ? $this->OBLIQ : $this->EQUIT; | ||
43 | + } | ||
44 | + $this->phits = abs( $this->phits ); | ||
45 | + if( $this->es ) { | ||
46 | + #$X; | ||
47 | + | ||
48 | + switch( $this->mode ) { | ||
49 | + case $this->N_POLE: | ||
50 | + case $this->S_POLE: | ||
51 | + if( abs( $this->phits - Proj4php::$common->HALF_PI ) < Proj4php::$common->EPSLN ) { | ||
52 | + $this->akm1 = 2. * $this->k0 / sqrt( pow( 1 + $this->e, 1 + $this->e ) * pow( 1 - $this->e, 1 - $this->e ) ); | ||
53 | + } else { | ||
54 | + $t = sin( $this->phits ); | ||
55 | + $this->akm1 = cos( $this->phits ) / Proj4php::$common->tsfnz( $this->e, $this->phits, $t ); | ||
56 | + $t *= $this->e; | ||
57 | + $this->akm1 /= sqrt( 1. - $t * $t ); | ||
58 | + } | ||
59 | + break; | ||
60 | + case $this->EQUIT: | ||
61 | + $this->akm1 = 2. * $this->k0; | ||
62 | + break; | ||
63 | + case $this->OBLIQ: | ||
64 | + $t = sin( $this->lat0 ); | ||
65 | + $X = 2. * atan( $this->ssfn_( $this->lat0, $t, $this->e ) ) - Proj4php::$common->HALF_PI; | ||
66 | + $t *= $this->e; | ||
67 | + $this->akm1 = 2. * $this->k0 * cos( $this->lat0 ) / sqrt( 1. - $t * $t ); | ||
68 | + $this->sinX1 = sin( $X ); | ||
69 | + $this->cosX1 = cos( $X ); | ||
70 | + break; | ||
71 | + } | ||
72 | + } else { | ||
73 | + switch( $this->mode ) { | ||
74 | + case $this->OBLIQ: | ||
75 | + $this->sinph0 = sin( $this->lat0 ); | ||
76 | + $this->cosph0 = cos( $this->lat0 ); | ||
77 | + case $this->EQUIT: | ||
78 | + $this->akm1 = 2. * $this->k0; | ||
79 | + break; | ||
80 | + case $this->S_POLE: | ||
81 | + case $this->N_POLE: | ||
82 | + $this->akm1 = abs( $this->phits - Proj4php::$common->HALF_PI ) >= Proj4php::$common->EPSLN ? | ||
83 | + cos( $this->phits ) / tan( Proj4php::$common->FORTPI - .5 * $this->phits ) : | ||
84 | + 2. * $this->k0; | ||
85 | + break; | ||
86 | + } | ||
87 | + } | ||
88 | + } | ||
89 | + | ||
90 | + /** | ||
91 | + * Stereographic forward equations--mapping lat,long to x,y | ||
92 | + * | ||
93 | + * @param type $p | ||
94 | + * @return type | ||
95 | + */ | ||
96 | + public function forward( $p ) { | ||
97 | + | ||
98 | + $lon = $p->x; | ||
99 | + $lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
100 | + $lat = $p->y; | ||
101 | + #$x; | ||
102 | + #$y; | ||
103 | + | ||
104 | + if( $this->sphere ) { | ||
105 | + /* | ||
106 | + $sinphi; | ||
107 | + $cosphi; | ||
108 | + $coslam; | ||
109 | + $sinlam; | ||
110 | + */ | ||
111 | + | ||
112 | + $sinphi = sin( $lat ); | ||
113 | + $cosphi = cos( $lat ); | ||
114 | + $coslam = cos( $lon ); | ||
115 | + $sinlam = sin( $lon ); | ||
116 | + switch( $this->mode ) { | ||
117 | + case $this->EQUIT: | ||
118 | + $y = 1. + $cosphi * $coslam; | ||
119 | + if( y <= Proj4php::$common->EPSLN ) { | ||
120 | + Proj4php::reportError("stere:forward:Equit"); | ||
121 | + } | ||
122 | + $y = $this->akm1 / $y; | ||
123 | + $x = $y * $cosphi * $sinlam; | ||
124 | + $y *= $sinphi; | ||
125 | + break; | ||
126 | + case $this->OBLIQ: | ||
127 | + $y = 1. + $this->sinph0 * $sinphi + $this->cosph0 * $cosphi * $coslam; | ||
128 | + if( $y <= Proj4php::$common->EPSLN ) { | ||
129 | + Proj4php::reportError("stere:forward:Obliq"); | ||
130 | + } | ||
131 | + $y = $this->akm1 / $y; | ||
132 | + $x = $y * $cosphi * $sinlam; | ||
133 | + $y *= $this->cosph0 * $sinphi - $this->sinph0 * $cosphi * $coslam; | ||
134 | + break; | ||
135 | + case $this->N_POLE: | ||
136 | + $coslam = -$coslam; | ||
137 | + $lat = -$lat; | ||
138 | + //Note no break here so it conitnues through S_POLE | ||
139 | + case $this->S_POLE: | ||
140 | + if( abs( $lat - Proj4php::$common->HALF_PI ) < $this->TOL ) { | ||
141 | + Proj4php::reportError("stere:forward:S_POLE"); | ||
142 | + } | ||
143 | + $y = $this->akm1 * tan( Proj4php::$common->FORTPI + .5 * $lat ); | ||
144 | + $x = $sinlam * $y; | ||
145 | + $y *= $coslam; | ||
146 | + break; | ||
147 | + } | ||
148 | + } else { | ||
149 | + $coslam = cos( $lon ); | ||
150 | + $sinlam = sin( $lon ); | ||
151 | + $sinphi = sin( $lat ); | ||
152 | + if( $this->mode == $this->OBLIQ || $this->mode == $this->EQUIT ) { | ||
153 | + $Xt = 2. * atan( $this->ssfn_( $lat, $sinphi, $this->e ) ); | ||
154 | + $sinX = sin( $Xt - Proj4php::$common->HALF_PI ); | ||
155 | + $cosX = cos( $Xt ); | ||
156 | + } | ||
157 | + switch( $this->mode ) { | ||
158 | + case $this->OBLIQ: | ||
159 | + $A = $this->akm1 / ($this->cosX1 * (1. + $this->sinX1 * $sinX + $this->cosX1 * $cosX * $coslam)); | ||
160 | + $y = $A * ($this->cosX1 * $sinX - $this->sinX1 * $cosX * $coslam); | ||
161 | + $x = $A * $cosX; | ||
162 | + break; | ||
163 | + case $this->EQUIT: | ||
164 | + $A = 2. * $this->akm1 / (1. + $cosX * $coslam); | ||
165 | + $y = $A * $sinX; | ||
166 | + $x = $A * $cosX; | ||
167 | + break; | ||
168 | + case $this->S_POLE: | ||
169 | + $lat = -$lat; | ||
170 | + $coslam = - $coslam; | ||
171 | + $sinphi = -$sinphi; | ||
172 | + case $this->N_POLE: | ||
173 | + $x = $this->akm1 * Proj4php::$common->tsfnz( $this->e, $lat, $sinphi ); | ||
174 | + $y = - $x * $coslam; | ||
175 | + break; | ||
176 | + } | ||
177 | + $x = $x * $sinlam; | ||
178 | + } | ||
179 | + | ||
180 | + $p->x = $x * $this->a + $this->x0; | ||
181 | + $p->y = $y * $this->a + $this->y0; | ||
182 | + | ||
183 | + return $p; | ||
184 | + } | ||
185 | + | ||
186 | + | ||
187 | + /** | ||
188 | + * Stereographic inverse equations--mapping x,y to lat/long | ||
189 | + * | ||
190 | + * @param type $p | ||
191 | + * @return type | ||
192 | + */ | ||
193 | + public function inverse( $p ) { | ||
194 | + $x = ($p->x - $this->x0) / $this->a; /* descale and de-offset */ | ||
195 | + $y = ($p->y - $this->y0) / $this->a; | ||
196 | + /* | ||
197 | + $lon; | ||
198 | + $lat; | ||
199 | + $cosphi; | ||
200 | + $sinphi; | ||
201 | + $rho; | ||
202 | + $tp = 0.0; | ||
203 | + $phi_l = 0.0; | ||
204 | + $i; | ||
205 | + */ | ||
206 | + $halfe = 0.0; | ||
207 | + $pi2 = 0.0; | ||
208 | + | ||
209 | + if( $this->sphere ) { | ||
210 | + /* | ||
211 | + $c; | ||
212 | + $rh; | ||
213 | + $sinc; | ||
214 | + $cosc; | ||
215 | + */ | ||
216 | + | ||
217 | + $rh = sqrt( $x * $x + $y * $y ); | ||
218 | + $c = 2. * atan( $rh / $this->akm1 ); | ||
219 | + $sinc = sin( $c ); | ||
220 | + $cosc = cos( $c ); | ||
221 | + $lon = 0.; | ||
222 | + | ||
223 | + switch( $this->mode ) { | ||
224 | + case $this->EQUIT: | ||
225 | + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { | ||
226 | + $lat = 0.; | ||
227 | + } else { | ||
228 | + $lat = asin( $y * $sinc / $rh ); | ||
229 | + } | ||
230 | + if( $cosc != 0. || $x != 0. ) | ||
231 | + $lon = atan2( $x * $sinc, $cosc * $rh ); | ||
232 | + break; | ||
233 | + case $this->OBLIQ: | ||
234 | + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { | ||
235 | + $lat = $this->phi0; | ||
236 | + } else { | ||
237 | + $lat = asin( $cosc * $this->sinph0 + $y * $sinc * $this->cosph0 / $rh ); | ||
238 | + } | ||
239 | + $c = $cosc - $this->sinph0 * sin( $lat ); | ||
240 | + if( $c != 0. || $x != 0. ) { | ||
241 | + $lon = atan2( $x * $sinc * $this->cosph0, $c * $rh ); | ||
242 | + } | ||
243 | + break; | ||
244 | + case $this->N_POLE: | ||
245 | + $y = -$y; | ||
246 | + case $this->S_POLE: | ||
247 | + if( abs( $rh ) <= Proj4php::$common->EPSLN ) { | ||
248 | + $lat = $this->phi0; | ||
249 | + } else { | ||
250 | + $lat = asin( $this->mode == $this->S_POLE ? -$cosc : $cosc ); | ||
251 | + } | ||
252 | + $lon = ($x == 0. && $y == 0.) ? 0. : atan2( $x, $y ); | ||
253 | + break; | ||
254 | + } | ||
255 | + $p->x = Proj4php::$common->adjust_lon( $lon + $this->long0 ); | ||
256 | + $p->y = $lat; | ||
257 | + } else { | ||
258 | + $rho = sqrt( $x * $x + $y * $y ); | ||
259 | + switch( $this->mode ) { | ||
260 | + case $this->OBLIQ: | ||
261 | + case $this->EQUIT: | ||
262 | + $tp = 2. * atan2( $rho * $this->cosX1, $this->akm1 ); | ||
263 | + $cosphi = cos( $tp ); | ||
264 | + $sinphi = sin( $tp ); | ||
265 | + if( $rho == 0.0 ) { | ||
266 | + $phi_l = asin( $cosphi * $this->sinX1 ); | ||
267 | + } else { | ||
268 | + $phi_l = asin( $cosphi * $this->sinX1 + ($y * $sinphi * $this->cosX1 / $rho) ); | ||
269 | + } | ||
270 | + | ||
271 | + $tp = tan( .5 * (Proj4php::$common->HALF_PI + $phi_l) ); | ||
272 | + $x *= $sinphi; | ||
273 | + $y = $rho * $this->cosX1 * $cosphi - $y * $this->sinX1 * $sinphi; | ||
274 | + $pi2 = Proj4php::$common->HALF_PI; | ||
275 | + $halfe = .5 * $this->e; | ||
276 | + break; | ||
277 | + case $this->N_POLE: | ||
278 | + $y = -$y; | ||
279 | + case $this->S_POLE: | ||
280 | + $tp = - $rho / $this->akm1; | ||
281 | + $phi_l = Proj4php::$common->HALF_PI - 2. * atan( $tp ); | ||
282 | + $pi2 = -Proj4php::$common->HALF_PI; | ||
283 | + $halfe = -.5 * $this->e; | ||
284 | + break; | ||
285 | + } | ||
286 | + for( $i = $this->NITER; $i--; $phi_l = $lat ) { //check this | ||
287 | + $sinphi = $this->e * sin( $phi_l ); | ||
288 | + $lat = 2. * atan( $tp * pow( (1. + $sinphi) / (1. - $sinphi), $halfe ) ) - $pi2; | ||
289 | + if( abs( phi_l - lat ) < $this->CONV ) { | ||
290 | + if( $this->mode == $this->S_POLE ) | ||
291 | + $lat = -$lat; | ||
292 | + $lon = ($x == 0. && $y == 0.) ? 0. : atan2( $x, $y ); | ||
293 | + $p->x = Proj4php::$common->adjust_lon( $lon + $this->long0 ); | ||
294 | + $p->y = $lat; | ||
295 | + return $p; | ||
296 | + } | ||
297 | + } | ||
298 | + } | ||
299 | + } | ||
300 | + | ||
301 | +} | ||
302 | + | ||
303 | +Proj4php::$proj['stere'] = new Proj4phpProjStere(); | ||
0 | \ No newline at end of file | 304 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/sterea.php
0 → 100644
@@ -0,0 +1,91 @@ | @@ -0,0 +1,91 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +class Proj4phpProjSterea { | ||
10 | + | ||
11 | + public $dependsOn = 'gauss'; | ||
12 | + | ||
13 | + /** | ||
14 | + * | ||
15 | + * @return void | ||
16 | + */ | ||
17 | + public function init() { | ||
18 | + | ||
19 | + if( !$this->rc ) { | ||
20 | + Proj4php::reportError( "sterea:init:E_ERROR_0" ); | ||
21 | + return; | ||
22 | + } | ||
23 | + | ||
24 | + $this->sinc0 = sin( $this->phic0 ); | ||
25 | + $this->cosc0 = cos( $this->phic0 ); | ||
26 | + $this->R2 = 2.0 * $this->rc; | ||
27 | + | ||
28 | + if( !$this->title ) | ||
29 | + $this->title = "Oblique Stereographic Alternative"; | ||
30 | + } | ||
31 | + | ||
32 | + /** | ||
33 | + * | ||
34 | + * @param type $p | ||
35 | + * @return type | ||
36 | + */ | ||
37 | + public function forward( $p ) { | ||
38 | + | ||
39 | + $p->x = Proj4php::$common->adjust_lon( $p->x - $this->long0 ); /* adjust del longitude */ | ||
40 | + $p = Proj4php::$proj['gauss']->forward( $p ); | ||
41 | + $sinc = sin( $p->y ); | ||
42 | + $cosc = cos( $p->y ); | ||
43 | + $cosl = cos( $p->x ); | ||
44 | + $k = $this->k0 * $this->R2 / (1.0 + $this->sinc0 * $sinc + $this->cosc0 * $cosc * $cosl); | ||
45 | + | ||
46 | + $p->x = $k * $cosc * sin( $p->x ); | ||
47 | + $p->y = $k * ($this->cosc0 * sinc - $this->sinc0 * $cosc * $cosl); | ||
48 | + | ||
49 | + $p->x = $this->a * $p->x + $this->x0; | ||
50 | + $p->y = $this->a * $p->y + $this->y0; | ||
51 | + | ||
52 | + return $p; | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * | ||
57 | + * @param type $p | ||
58 | + * @return type | ||
59 | + */ | ||
60 | + public function inverse( $p ) { | ||
61 | + | ||
62 | + #$lon; | ||
63 | + #$lat; | ||
64 | + $p->x = ($p->x - $this->x0) / $this->a; /* descale and de-offset */ | ||
65 | + $p->y = ($p->y - $this->y0) / $this->a; | ||
66 | + | ||
67 | + $p->x /= $this->k0; | ||
68 | + $p->y /= $this->k0; | ||
69 | + | ||
70 | + if( ($rho = sqrt( $p->x * $p->x + $p->y * $p->y ) ) ) { | ||
71 | + $c = 2.0 * atan2( $rho, $this->R2 ); | ||
72 | + $sinc = sin( $c ); | ||
73 | + $cosc = cos( $c ); | ||
74 | + $lat = asin( $cosc * $this->sinc0 + $p->y * $sinc * $this->cosc0 / $rho ); | ||
75 | + $lon = atan2( $p->x * $sinc, $rho * $this->cosc0 * $cosc - $p->y * $this->sinc0 * $sinc ); | ||
76 | + } else { | ||
77 | + $lat = $this->phic0; | ||
78 | + $lon = 0.; | ||
79 | + } | ||
80 | + | ||
81 | + $p->x = $lon; | ||
82 | + $p->y = $lat; | ||
83 | + $p = Proj4php::$proj['gauss']->inverse( $p ); | ||
84 | + $p->x = Proj4php::$common->adjust_lon( $p->x + $this->long0 ); /* adjust longitude to CM */ | ||
85 | + | ||
86 | + return $p; | ||
87 | + } | ||
88 | + | ||
89 | +} | ||
90 | + | ||
91 | +Proj4php::$proj['sterea'] = new Proj4phpProjSterea(); |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/tmerc.php
0 → 100644
@@ -0,0 +1,166 @@ | @@ -0,0 +1,166 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME TRANSVERSE MERCATOR | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Transverse Mercator projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + ALGORITHM REFERENCES | ||
18 | + | ||
19 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
20 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
21 | + State Government Printing Office, Washington D.C., 1987. | ||
22 | + | ||
23 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
24 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
25 | + Printing Office, Washington D.C., 1989. | ||
26 | +*******************************************************************************/ | ||
27 | + | ||
28 | +/** | ||
29 | + Initialize Transverse Mercator projection | ||
30 | + */ | ||
31 | +class Proj4phpProjTmerc { | ||
32 | + | ||
33 | + private $e0, $e1, $e2, $e3, $ml0; | ||
34 | + | ||
35 | + /** | ||
36 | + * | ||
37 | + */ | ||
38 | + public function init() { | ||
39 | + | ||
40 | + $this->e0 = Proj4php::$common->e0fn( $this->es ); | ||
41 | + $this->e1 = Proj4php::$common->e1fn( $this->es ); | ||
42 | + $this->e2 = Proj4php::$common->e2fn( $this->es ); | ||
43 | + $this->e3 = Proj4php::$common->e3fn( $this->es ); | ||
44 | + $this->ml0 = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); | ||
45 | + } | ||
46 | + | ||
47 | + /** | ||
48 | + Transverse Mercator Forward - long/lat to x/y | ||
49 | + long/lat in radians | ||
50 | + */ | ||
51 | + public function forward( $p ) { | ||
52 | + | ||
53 | + $lon = $p->x; | ||
54 | + $lat = $p->y; | ||
55 | + | ||
56 | + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); // Delta longitude | ||
57 | + #$con = 0; // cone constant | ||
58 | + #$x = 0; | ||
59 | + #$y = 0; | ||
60 | + $sin_phi = sin( $lat ); | ||
61 | + $cos_phi = cos( $lat ); | ||
62 | + | ||
63 | + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ | ||
64 | + $b = $cos_phi * sin( $delta_lon ); | ||
65 | + if( (abs( abs( $b ) - 1.0 )) < .0000000001 ) { | ||
66 | + Proj4php::reportError( "tmerc:forward: Point projects into infinity" ); | ||
67 | + return(93); | ||
68 | + } else { | ||
69 | + $x = .5 * $this->a * $this->k0 * log( (1.0 + $b) / (1.0 - $b) ); | ||
70 | + $con = acos( $cos_phi * cos( $delta_lon ) / sqrt( 1.0 - $b * $b ) ); | ||
71 | + if( $lat < 0 ) | ||
72 | + $con = - $con; | ||
73 | + $y = $this->a * $this->k0 * ($con - $this->lat0); | ||
74 | + } | ||
75 | + } else { | ||
76 | + $al = $cos_phi * $delta_lon; | ||
77 | + $als = pow( $al, 2 ); | ||
78 | + $c = $this->ep2 * pow( $cos_phi, 2 ); | ||
79 | + $tq = tan( $lat ); | ||
80 | + $t = pow( $tq, 2 ); | ||
81 | + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); | ||
82 | + $n = $this->a / sqrt( $con ); | ||
83 | + | ||
84 | + $ml = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); | ||
85 | + | ||
86 | + $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; | ||
87 | + $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; | ||
88 | + } | ||
89 | + | ||
90 | + $p->x = $x; | ||
91 | + $p->y = $y; | ||
92 | + | ||
93 | + return $p; | ||
94 | + } | ||
95 | + | ||
96 | + /** | ||
97 | + Transverse Mercator Inverse - x/y to long/lat | ||
98 | + */ | ||
99 | + public function inverse( $p ) { | ||
100 | + | ||
101 | + #$phi; /* temporary angles */ | ||
102 | + #$delta_phi; /* difference between longitudes */ | ||
103 | + $max_iter = 6; /* maximun number of iterations */ | ||
104 | + | ||
105 | + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ | ||
106 | + $f = exp( $p->x / ($this->a * $this->k0) ); | ||
107 | + $g = .5 * ($f - 1 / $f); | ||
108 | + $temp = $this->lat0 + $p->y / ($this->a * $this->k0); | ||
109 | + $h = cos( $temp ); | ||
110 | + $con = sqrt( (1.0 - $h * $h) / (1.0 + $g * $g) ); | ||
111 | + $lat = Proj4php::$common->asinz( $con ); | ||
112 | + if( $temp < 0 ) | ||
113 | + $lat = -$lat; | ||
114 | + if( ($g == 0) && ($h == 0) ) { | ||
115 | + $lon = $this->long0; | ||
116 | + } else { | ||
117 | + $lon = Proj4php::$common->adjust_lon( atan2( $g, $h ) + $this->long0 ); | ||
118 | + } | ||
119 | + } else { // ellipsoidal form | ||
120 | + $x = $p->x - $this->x0; | ||
121 | + $y = $p->y - $this->y0; | ||
122 | + | ||
123 | + $con = ($this->ml0 + $y / $this->k0) / $this->a; | ||
124 | + $phi = $con; | ||
125 | + | ||
126 | + for( $i = 0; true; $i++ ) { | ||
127 | + $delta_phi = (($con + $this->e1 * sin( 2.0 * $phi ) - $this->e2 * sin( 4.0 * $phi ) + $this->e3 * sin( 6.0 * $phi )) / $this->e0) - $phi; | ||
128 | + $phi += $delta_phi; | ||
129 | + if( abs( $delta_phi ) <= Proj4php::$common->EPSLN ) | ||
130 | + break; | ||
131 | + if( $i >= $max_iter ) { | ||
132 | + Proj4php::reportError( "tmerc:inverse: Latitude failed to converge" ); | ||
133 | + return(95); | ||
134 | + } | ||
135 | + } // for() | ||
136 | + if( abs( $phi ) < Proj4php::$common->HALF_PI ) { | ||
137 | + // sincos(phi, &sin_phi, &cos_phi); | ||
138 | + $sin_phi = sin( $phi ); | ||
139 | + $cos_phi = cos( $phi ); | ||
140 | + $tan_phi = tan( $phi ); | ||
141 | + $c = $this->ep2 * pow( $cos_phi, 2 ); | ||
142 | + $cs = pow( $c, 2 ); | ||
143 | + $t = pow( $tan_phi, 2 ); | ||
144 | + $ts = pow( $t, 2 ); | ||
145 | + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); | ||
146 | + $n = $this->a / sqrt( $con ); | ||
147 | + $r = $n * (1.0 - $this->es) / $con; | ||
148 | + $d = $x / ($n * $this->k0); | ||
149 | + $ds = pow( $d, 2 ); | ||
150 | + $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))); | ||
151 | + $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) ); | ||
152 | + } else { | ||
153 | + $lat = Proj4php::$common->HALF_PI * Proj4php::$common->sign( $y ); | ||
154 | + $lon = $this->long0; | ||
155 | + } | ||
156 | + } | ||
157 | + | ||
158 | + $p->x = $lon; | ||
159 | + $p->y = $lat; | ||
160 | + | ||
161 | + return $p; | ||
162 | + } | ||
163 | + | ||
164 | +} | ||
165 | + | ||
166 | +Proj4php::$proj['tmerc'] = new Proj4phpProjTmerc(); | ||
0 | \ No newline at end of file | 167 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/utm.php
0 → 100644
@@ -0,0 +1,182 @@ | @@ -0,0 +1,182 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME TRANSVERSE MERCATOR | ||
11 | + | ||
12 | + PURPOSE: Transforms input longitude and latitude to Easting and | ||
13 | + Northing for the Transverse Mercator projection. The | ||
14 | + longitude and latitude must be in radians. The Easting | ||
15 | + and Northing values will be returned in meters. | ||
16 | + | ||
17 | + ALGORITHM REFERENCES | ||
18 | + | ||
19 | + 1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
20 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
21 | + State Government Printing Office, Washington D.C., 1987. | ||
22 | + | ||
23 | + 2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections", | ||
24 | + U.S. Geological Survey Professional Paper 1453 , United State Government | ||
25 | + Printing Office, Washington D.C., 1989. | ||
26 | +*******************************************************************************/ | ||
27 | + | ||
28 | +/** | ||
29 | + Initialize Transverse Mercator projection | ||
30 | + */ | ||
31 | +class Proj4phpProjUtm{ | ||
32 | + | ||
33 | + //public $dependsOn = 'tmerc'; | ||
34 | + | ||
35 | + public $utmSouth = false; // UTM north/south | ||
36 | + private $e0, $e1, $e2, $e3, $ml0; | ||
37 | + | ||
38 | + /** | ||
39 | + * | ||
40 | + * @return void | ||
41 | + */ | ||
42 | + public function init() { | ||
43 | + | ||
44 | + if( !isset($this->zone) ) { | ||
45 | + Proj4php::reportError( "utm:init: zone must be specified for UTM" ); | ||
46 | + return; | ||
47 | + } | ||
48 | + | ||
49 | + $this->lat0 = 0.0; | ||
50 | + $this->long0 = ((6 * abs( $this->zone )) - 183) * Proj4php::$common->D2R; | ||
51 | + $this->x0 = 500000.0; | ||
52 | + $this->y0 = $this->utmSouth ? 10000000.0 : 0.0; | ||
53 | + $this->k0 = 0.9996; | ||
54 | + | ||
55 | + $this->e0 = Proj4php::$common->e0fn( $this->es ); | ||
56 | + $this->e1 = Proj4php::$common->e1fn( $this->es ); | ||
57 | + $this->e2 = Proj4php::$common->e2fn( $this->es ); | ||
58 | + $this->e3 = Proj4php::$common->e3fn( $this->es ); | ||
59 | + $this->ml0 = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $this->lat0 ); | ||
60 | + } | ||
61 | + | ||
62 | + /** | ||
63 | + Transverse Mercator Forward - long/lat to x/y | ||
64 | + long/lat in radians | ||
65 | + */ | ||
66 | + | ||
67 | + public function forward( $p ) { | ||
68 | + | ||
69 | + $lon = $p->x; | ||
70 | + $lat = $p->y; | ||
71 | + | ||
72 | + $delta_lon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); // Delta longitude | ||
73 | + #$con = 0; // cone constant | ||
74 | + #$x = 0; | ||
75 | + #$y = 0; | ||
76 | + $sin_phi = sin( $lat ); | ||
77 | + $cos_phi = cos( $lat ); | ||
78 | + | ||
79 | + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ | ||
80 | + $b = $cos_phi * sin( $delta_lon ); | ||
81 | + if( (abs( abs( $b ) - 1.0 )) < .0000000001 ) { | ||
82 | + Proj4php::reportError( "tmerc:forward: Point projects into infinity" ); | ||
83 | + return(93); | ||
84 | + } else { | ||
85 | + $x = .5 * $this->a * $this->k0 * log( (1.0 + $b) / (1.0 - $b) ); | ||
86 | + $con = acos( $cos_phi * cos( $delta_lon ) / sqrt( 1.0 - $b * $b ) ); | ||
87 | + if( $lat < 0 ) | ||
88 | + $con = - $con; | ||
89 | + $y = $this->a * $this->k0 * ($con - $this->lat0); | ||
90 | + } | ||
91 | + } else { | ||
92 | + $al = $cos_phi * $delta_lon; | ||
93 | + $als = pow( $al, 2 ); | ||
94 | + $c = $this->ep2 * pow( $cos_phi, 2 ); | ||
95 | + $tq = tan( $lat ); | ||
96 | + $t = pow( $tq, 2 ); | ||
97 | + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); | ||
98 | + $n = $this->a / sqrt( $con ); | ||
99 | + | ||
100 | + $ml = $this->a * Proj4php::$common->mlfn( $this->e0, $this->e1, $this->e2, $this->e3, $lat ); | ||
101 | + | ||
102 | + $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; | ||
103 | + $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; | ||
104 | + } | ||
105 | + | ||
106 | + $p->x = $x; | ||
107 | + $p->y = $y; | ||
108 | + | ||
109 | + return $p; | ||
110 | + } | ||
111 | + | ||
112 | + /** | ||
113 | + Transverse Mercator Inverse - x/y to long/lat | ||
114 | + */ | ||
115 | + public function inverse( $p ) { | ||
116 | + | ||
117 | + #$phi; /* temporary angles */ | ||
118 | + #$delta_phi; /* difference between longitudes */ | ||
119 | + $max_iter = 6; /* maximun number of iterations */ | ||
120 | + if( isset($this->sphere) && $this->sphere === true ) { /* spherical form */ | ||
121 | + $f = exp( $p->x / ($this->a * $this->k0) ); | ||
122 | + $g = .5 * ($f - 1 / $f); | ||
123 | + $temp = $this->lat0 + $p->y / ($this->a * $this->k0); | ||
124 | + $h = cos( $temp ); | ||
125 | + $con = sqrt( (1.0 - $h * $h) / (1.0 + $g * $g) ); | ||
126 | + $lat = Proj4php::$common->asinz( $con ); | ||
127 | + if( $temp < 0 ) | ||
128 | + $lat = -$lat; | ||
129 | + if( ($g == 0) && ($h == 0) ) { | ||
130 | + $lon = $this->long0; | ||
131 | + } else { | ||
132 | + $lon = Proj4php::$common->adjust_lon( atan2( $g, $h ) + $this->long0 ); | ||
133 | + } | ||
134 | + } else { // ellipsoidal form | ||
135 | + $x = $p->x - $this->x0; | ||
136 | + $y = $p->y - $this->y0; | ||
137 | + | ||
138 | + $con = ($this->ml0 + $y / $this->k0) / $this->a; | ||
139 | + $phi = $con; | ||
140 | + | ||
141 | + for( $i = 0; true; $i++ ) { | ||
142 | + $delta_phi = (($con + $this->e1 * sin( 2.0 * $phi ) - $this->e2 * sin( 4.0 * $phi ) + $this->e3 * sin( 6.0 * $phi )) / $this->e0) - $phi; | ||
143 | + $phi += $delta_phi; | ||
144 | + if( abs( $delta_phi ) <= Proj4php::$common->EPSLN ) | ||
145 | + break; | ||
146 | + if( $i >= $max_iter ) { | ||
147 | + Proj4php::reportError( "tmerc:inverse: Latitude failed to converge" ); | ||
148 | + return(95); | ||
149 | + } | ||
150 | + } // for() | ||
151 | + | ||
152 | + | ||
153 | + if( abs( $phi ) < Proj4php::$common->HALF_PI ) { | ||
154 | + // sincos(phi, &sin_phi, &cos_phi); | ||
155 | + $sin_phi = sin( $phi ); | ||
156 | + $cos_phi = cos( $phi ); | ||
157 | + $tan_phi = tan( $phi ); | ||
158 | + $c = $this->ep2 * pow( $cos_phi, 2 ); | ||
159 | + $cs = pow( $c, 2 ); | ||
160 | + $t = pow( $tan_phi, 2 ); | ||
161 | + $ts = pow( $t, 2 ); | ||
162 | + $con = 1.0 - $this->es * pow( $sin_phi, 2 ); | ||
163 | + $n = $this->a / sqrt( $con ); | ||
164 | + $r = $n * (1.0 - $this->es) / $con; | ||
165 | + $d = $x / ($n * $this->k0); | ||
166 | + $ds = pow( $d, 2 ); | ||
167 | + $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))); | ||
168 | + $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) ); | ||
169 | + } else { | ||
170 | + $lat = Proj4php::$common->HALF_PI * Proj4php::$common->sign( $y ); | ||
171 | + $lon = $this->long0; | ||
172 | + } | ||
173 | + } | ||
174 | + | ||
175 | + $p->x = $lon; | ||
176 | + $p->y = $lat; | ||
177 | + | ||
178 | + return $p; | ||
179 | + } | ||
180 | +} | ||
181 | + | ||
182 | +Proj4php::$proj['utm'] = new Proj4phpProjUtm(); | ||
0 | \ No newline at end of file | 183 | \ No newline at end of file |
pacotes/proj4php-proj4php5.2/src/proj4php/projCode/vandg.php
0 → 100644
@@ -0,0 +1,167 @@ | @@ -0,0 +1,167 @@ | ||
1 | +<?php | ||
2 | +/** | ||
3 | + * Author : Julien Moquet | ||
4 | + * | ||
5 | + * Inspired by Proj4php from Mike Adair madairATdmsolutions.ca | ||
6 | + * and Richard Greenwood rich@greenwoodma$p->com | ||
7 | + * License: LGPL as per: http://www.gnu.org/copyleft/lesser.html | ||
8 | + */ | ||
9 | +/******************************************************************************* | ||
10 | + NAME VAN DER GRINTEN | ||
11 | + | ||
12 | + PURPOSE: Transforms input Easting and Northing to longitude and | ||
13 | + latitude for the Van der Grinten projection. The | ||
14 | + Easting and Northing must be in meters. The longitude | ||
15 | + and latitude values will be returned in radians. | ||
16 | + | ||
17 | + PROGRAMMER DATE | ||
18 | + ---------- ---- | ||
19 | + T. Mittan March, 1993 | ||
20 | + | ||
21 | + This function was adapted from the Van Der Grinten projection code | ||
22 | + (FORTRAN) in the General Cartographic Transformation Package software | ||
23 | + which is available from the U.S. Geological Survey National Mapping Division. | ||
24 | + | ||
25 | + ALGORITHM REFERENCES | ||
26 | + | ||
27 | + 1. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, | ||
28 | + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. | ||
29 | + | ||
30 | + 2. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological | ||
31 | + Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United | ||
32 | + State Government Printing Office, Washington D.C., 1987. | ||
33 | + | ||
34 | + 3. "Software Documentation for GCTP General Cartographic Transformation | ||
35 | + Package", U.S. Geological Survey National Mapping Division, May 1982. | ||
36 | + * ***************************************************************************** */ | ||
37 | + | ||
38 | +class Proj4phpProjVandg { | ||
39 | + | ||
40 | + /* Initialize the Van Der Grinten projection | ||
41 | + ---------------------------------------- */ | ||
42 | + public function init() { | ||
43 | + $this->R = 6370997.0; //Radius of earth | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * | ||
48 | + * @param type $p | ||
49 | + * @return type | ||
50 | + */ | ||
51 | + public function forward( $p ) { | ||
52 | + | ||
53 | + $lon = $p->x; | ||
54 | + $lat = $p->y; | ||
55 | + | ||
56 | + /* Forward equations | ||
57 | + ----------------- */ | ||
58 | + $dlon = Proj4php::$common->adjust_lon( $lon - $this->long0 ); | ||
59 | + $x; | ||
60 | + $y; | ||
61 | + | ||
62 | + if( abs( $lat ) <= Proj4php::$common->EPSLN ) { | ||
63 | + $x = $this->x0 + $this->R * $dlon; | ||
64 | + $y = $this->y0; | ||
65 | + } | ||
66 | + $theta = Proj4php::$common->asinz( 2.0 * abs( $lat / Proj4php::$common->PI ) ); | ||
67 | + if( (abs( $dlon ) <= Proj4php::$common->EPSLN) || (abs( abs( $lat ) - Proj4php::$common->HALF_PI ) <= Proj4php::$common->EPSLN) ) { | ||
68 | + $x = $this->x0; | ||
69 | + if( $lat >= 0 ) { | ||
70 | + $y = $this->y0 + Proj4php::$common->PI * $this->R * tan( .5 * $theta ); | ||
71 | + } else { | ||
72 | + $y = $this->y0 + Proj4php::$common->PI * $this->R * - tan( .5 * $theta ); | ||
73 | + } | ||
74 | + // return(OK); | ||
75 | + } | ||
76 | + $al = .5 * abs( (Proj4php::$common->PI / $dlon) - ($dlon / Proj4php::$common->PI) ); | ||
77 | + $asq = $al * $al; | ||
78 | + $sinth = sin( $theta ); | ||
79 | + $costh = cos( $theta ); | ||
80 | + | ||
81 | + $g = $costh / ($sinth + $costh - 1.0); | ||
82 | + $gsq = $g * $g; | ||
83 | + $m = $g * (2.0 / $sinth - 1.0); | ||
84 | + $msq = $m * $m; | ||
85 | + $con = Proj4php::$common->PI * $this->R * ($al * ($g - $msq) + sqrt( $asq * ($g - $sq) * ($g - $msq) - ($msq + $asq) * ($gsq - $msq) )) / ($msq + $asq); | ||
86 | + if( $dlon < 0 ) { | ||
87 | + $con = -$con; | ||
88 | + } | ||
89 | + $x = $this->x0 + $con; | ||
90 | + $con = abs( $con / (Proj4php::$common->PI * $this->R) ); | ||
91 | + if( $lat >= 0 ) { | ||
92 | + $y = $this->y0 + Proj4php::$common->PI * $this->R * sqrt( 1.0 - $con * $con - 2.0 * $al * $con ); | ||
93 | + } else { | ||
94 | + $y = $this->y0 - Proj4php::$common->PI * $this->R * sqrt( 1.0 - $con * $con - 2.0 * $al * $con ); | ||
95 | + } | ||
96 | + | ||
97 | + $p->x = $x; | ||
98 | + $p->y = $y; | ||
99 | + | ||
100 | + return $p; | ||
101 | + } | ||
102 | + | ||
103 | + /* Van Der Grinten inverse equations--mapping x,y to lat/long | ||
104 | + --------------------------------------------------------- */ | ||
105 | + | ||
106 | + public function inverse( $p ) { | ||
107 | + | ||
108 | + /* | ||
109 | + $dlon; | ||
110 | + $xx; | ||
111 | + $yy; | ||
112 | + $xys; | ||
113 | + $c1; | ||
114 | + $c2; | ||
115 | + $c3; | ||
116 | + $al; | ||
117 | + $asq; | ||
118 | + $a1; | ||
119 | + $m1; | ||
120 | + $con; | ||
121 | + $th1; | ||
122 | + $d; | ||
123 | + */ | ||
124 | + | ||
125 | + /* inverse equations | ||
126 | + ----------------- */ | ||
127 | + $p->x -= $this->x0; | ||
128 | + $p->y -= $this->y0; | ||
129 | + $con = Proj4php::$common->PI * $this->R; | ||
130 | + $xx = $p->x / $con; | ||
131 | + $yy = $p->y / $con; | ||
132 | + $xys = $xx * $xx + $yy * $yy; | ||
133 | + $c1 = -abs( $yy ) * (1.0 + $xys); | ||
134 | + $c2 = $c1 - 2.0 * $yy * $yy + $xx * $xx; | ||
135 | + $c3 = -2.0 * $c1 + 1.0 + 2.0 * $yy * $yy + $xys * $xys; | ||
136 | + $d = $yy * $yy / $c3 + (2.0 * $c2 * $c2 * $c2 / $c3 / $c3 / $c3 - 9.0 * $c1 * $c2 / $c3 / $c3) / 27.0; | ||
137 | + $a1 = ($c1 - $c2 * $c2 / 3.0 / $c3) / $c3; | ||
138 | + $m1 = 2.0 * sqrt( -$a1 / 3.0 ); | ||
139 | + $con = ((3.0 * $d) / $a1) / $m1; | ||
140 | + if( abs( $con ) > 1.0 ) { | ||
141 | + if( $con >= 0.0 ) { | ||
142 | + $con = 1.0; | ||
143 | + } else { | ||
144 | + $con = -1.0; | ||
145 | + } | ||
146 | + } | ||
147 | + $th1 = acos( $con ) / 3.0; | ||
148 | + if( $p->$y >= 0 ) { | ||
149 | + $lat = (-$m1 * cos( $th1 + Proj4php::$common->PI / 3.0 ) - $c2 / 3.0 / $c3) * Proj4php::$common->PI; | ||
150 | + } else { | ||
151 | + $lat = -(-m1 * cos( $th1 + Proj4php::$common->PI / 3.0 ) - $c2 / 3.0 / $c3) * Proj4php::$common->PI; | ||
152 | + } | ||
153 | + | ||
154 | + if( abs( $xx ) < Proj4php::$common->EPSLN ) { | ||
155 | + $lon = $this->$long0; | ||
156 | + } | ||
157 | + $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 ); | ||
158 | + | ||
159 | + $p->x = $lon; | ||
160 | + $p->y = $lat; | ||
161 | + | ||
162 | + return $p; | ||
163 | + } | ||
164 | + | ||
165 | +} | ||
166 | + | ||
167 | +Proj4php::$proj['vandg'] = new Proj4phpProjVandg(); | ||
0 | \ No newline at end of file | 168 | \ No newline at end of file |
@@ -0,0 +1,87 @@ | @@ -0,0 +1,87 @@ | ||
1 | +<?php | ||
2 | +include_once("../src/proj4php/proj4php.php"); | ||
3 | + | ||
4 | +$proj4 = new Proj4php(); | ||
5 | +$projL93 = new Proj4phpProj('EPSG:2154',$proj4); | ||
6 | +$projWGS84 = new Proj4phpProj('EPSG:4326',$proj4); | ||
7 | +$projLI = new Proj4phpProj('EPSG:27571',$proj4); | ||
8 | +$projLSud = new Proj4phpProj('EPSG:27563',$proj4); | ||
9 | +$projL72 = new Proj4phpProj('EPSG:31370',$proj4); | ||
10 | +$proj25833 = new Proj4phpProj('EPSG:25833',$proj4); | ||
11 | +$proj31468 = new Proj4phpProj('EPSG:31468',$proj4); | ||
12 | +$proj5514 = new Proj4phpProj('EPSG:5514',$proj4); | ||
13 | + | ||
14 | +// GPS | ||
15 | +// latitude longitude | ||
16 | +// 48,831938 2,355781 | ||
17 | +// 48°49'54.977'' 2°21'20.812'' | ||
18 | +// | ||
19 | +// L93 | ||
20 | +// 652709.401 6859290.946 | ||
21 | +// | ||
22 | +// LI | ||
23 | +// 601413.709 1125717.730 | ||
24 | +// | ||
25 | + | ||
26 | +$pointSrc = new proj4phpPoint('652709.401','6859290.946'); | ||
27 | +echo "Source : ".$pointSrc->toShortString()." in L93 <br>"; | ||
28 | +$pointDest = $proj4->transform($projL93,$projWGS84,$pointSrc); | ||
29 | +echo "Conversion : ".$pointDest->toShortString()." in WGS84<br><br>"; | ||
30 | + | ||
31 | +$pointSrc = $pointDest; | ||
32 | +echo "Source : ".$pointSrc->toShortString()." in WGS84<br>"; | ||
33 | +$pointDest = $proj4->transform($projWGS84,$projLSud,$pointSrc); | ||
34 | +echo "Conversion : ".$pointDest->toShortString()." in Lambert Sud<br><br>"; | ||
35 | + | ||
36 | +$pointSrc = $pointDest; | ||
37 | +echo "Source : ".$pointSrc->toShortString()." in Lambert Sud<br>"; | ||
38 | +$pointDest = $proj4->transform($projLSud,$projWGS84,$pointSrc); | ||
39 | +echo "Conversion : ".$pointDest->toShortString()." in WGS84<br><br>"; | ||
40 | + | ||
41 | +$pointSrc = $pointDest; | ||
42 | +echo "Source : ".$pointSrc->toShortString()." in WGS84<br>"; | ||
43 | +$pointDest = $proj4->transform($projWGS84,$projLI,$pointSrc); | ||
44 | +echo "Conversion : ".$pointDest->toShortString()." in LI <br><br>"; | ||
45 | + | ||
46 | +$pointSrc = $pointDest; | ||
47 | +echo "Source : ".$pointSrc->toShortString()." in LI<br>"; | ||
48 | +$pointDest = $proj4->transform($projLI,$projL93,$pointSrc); | ||
49 | +echo "Conversion : ".$pointDest->toShortString()." in L93<br><br>"; | ||
50 | + | ||
51 | + | ||
52 | + | ||
53 | +$pointSrc = new proj4phpPoint('177329.253543','58176.702191'); | ||
54 | +echo "Source : ".$pointSrc->toShortString()." in Lambert 1972<br>"; | ||
55 | +$pointDest = $proj4->transform($projL72,$projWGS84,$pointSrc); | ||
56 | +echo "Conversion : ".$pointDest->toShortString()." in WGS84<br><br>"; | ||
57 | + | ||
58 | +$pointSrc = $pointDest; | ||
59 | +echo "Source : ".$pointSrc->toShortString()." in WGS84<br>"; | ||
60 | +$pointDest = $proj4->transform($projWGS84,$projL72,$pointSrc); | ||
61 | +echo "Conversion : ".$pointDest->toShortString()." in Lambert 1972<br><br>"; | ||
62 | + | ||
63 | + | ||
64 | +$pointSrc = $pointDest; | ||
65 | +echo "Source : ".$pointSrc->toShortString()." in Lambert 1972<br>"; | ||
66 | +$pointDest = $proj4->transform($projL72,$proj25833,$pointSrc); | ||
67 | +echo "Conversion : ".$pointDest->toShortString()." in EPSG:25833<br><br>"; | ||
68 | + | ||
69 | +$pointSrc = $pointDest; | ||
70 | +echo "Source : ".$pointSrc->toShortString()." in EPSG:25833<br>"; | ||
71 | +$pointDest = $proj4->transform($proj25833,$projWGS84,$pointSrc); | ||
72 | +echo "Conversion : ".$pointDest->toShortString()." in WGS84<br><br>"; | ||
73 | + | ||
74 | +$pointSrc = $pointDest; | ||
75 | +echo "Source : ".$pointSrc->toShortString()." in WGS84<br>"; | ||
76 | +$pointDest = $proj4->transform($projWGS84,$proj31468,$pointSrc); | ||
77 | +echo "Conversion : ".$pointDest->toShortString()." in EPSG:31468<br><br>"; | ||
78 | + | ||
79 | +$pointSrc = new proj4phpPoint('-868208.53', '-1095793.57'); | ||
80 | +echo "Source : ".$pointSrc->toShortString()." in S-JTSK<br>"; | ||
81 | +$pointDest = $proj4->transform($proj5514,$projWGS84,$pointSrc); | ||
82 | +echo "Conversion : ".$pointDest->toShortString()." in WGS84<br><br>"; | ||
83 | + | ||
84 | +$pointSrc = $pointDest; | ||
85 | +echo "Source : ".$pointSrc->toShortString()." in WGS84<br>"; | ||
86 | +$pointDest = $proj4->transform($projWGS84,$proj5514,$pointSrc); | ||
87 | +echo "Conversion : ".$pointDest->toShortString()." in S-JTSK<br><br>"; |