Compare commits

..
1 Commits
Author SHA1 Message Date
Frank Warmerdam c2525b5c88 correct mutex creation on win32 to be in unlocked state (#63)
git-svn-id: http://svn.osgeo.org/metacrs/proj/branches/4.7@1832 4e78687f-474d-0410-85f9-8d5e500ac6b2
2010-03-28 22:13:28 +00:00
789 changed files with 194454 additions and 182050 deletions
-98
View File
@@ -1,98 +0,0 @@
*~
*.bak
*.pyc
build.local.bat
build.local.sh
Makefile
Makefile.in
CMakeFiles
CMakeCache.txt
CTestTestfile.cmake
cmake_install.cmake
install_manifest.txt
cmake/project-config*.cmake
README
/.vs*
/*.manifest
/*.swp
/*build*
/aclocal.m4
/autom4te.cache
/config.cache
/config.guess
/config.log
/config.status
/config.sub
/configure
/compile
/depcomp
/install-sh
/libtool
/ltmain.sh
/missing
/nbproject
/proj.pc
/bin
/lib
/DartConfiguration.tcl
/Testing
# docs
/html/dl
/html/robots.txt
/docs/plot/images
/latex
# m4
/m4/libtool.m4
/m4/ltoptions.m4
/m4/ltsugar.m4
/m4/ltversion.m4
/m4/lt~obsolete.m4
# nad
/nad/install
/nad/WI
/nad/prvi
/nad/WO
/nad/alaska
/nad/FL
/nad/README.NADUS
/nad/stpaul
/nad/stgeorge
/nad/TN
/nad/conus
/nad/MD
/nad/hawaii
/nad/stlrnc
/nad/null
/nad/*.lla
# src
/src/*.o
/src/*.lo
/src/*.la
/src/proj.dll
/src/*.lib
/src/*.pdb
/src/*.exp
/src/*.opt
/src/*.obj
/src/*.exe
/src/.libs
/src/.deps
/src/*.manifest
/src/*.swp
/src/nad2nad
/src/nad2bin
/src/proj
/src/geod
/src/stamp-h*
/src/proj_config.h
/src/proj_config.h.in
/src/cs2cs
/src/multistresstest
/src/test228
/docs/build
-45
View File
@@ -1,45 +0,0 @@
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
build:
os: "ubuntu-22.04"
tools:
python: "mambaforge-4.10"
jobs:
post_checkout:
# Cancel building pull requests when there aren't changed in the docs directory or YAML file.
# You can add any other files or directories that you'd like here as well,
# like your docs requirements file, or other files that will change your docs build.
#
# If there are no changes (git diff exits with 0) we force the command to return with 183.
# This is a special exit code on Read the Docs that will cancel the build immediately.
- |
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/5.0 -- docs/ .readthedocs.yaml;
then
exit 183;
fi
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | grep -viq "skip ci") || exit 183
pre_build:
- ./docs/rtd/pre_build.sh
- ./docs/rtd/plot.sh
apt_packages:
- cmake
- ninja-build
- gcc
formats:
- pdf
- epub
conda:
environment: docs/environment.yml
sphinx:
configuration: docs/source/conf.py
fail_on_warning: true
+2 -8
View File
@@ -1,9 +1,8 @@
Original Author:
Gerald Evenden
Gerald Evenden
Maintainer(s):
Frank Warmerdam <warmerdam@pobox.com>
Howard Butler <howard@hobu.co>
Contributors:
Brent Fraser <bfraser@geoanalytic.com>
@@ -11,9 +10,4 @@ Chris Stuber <imap@chesapeake.net>
Craig Bruce <cbruce@cubewerx.com>
Victor Osipkov <vctos@email.com>
Andrea Antonello <andrea.antonello@hydrologis.com>
Charles Karney <charles.karney@sri.com>
Karsten Engsager
Knud Poder
Kristian Evers <kreve@sdfe.dk>
Thomas Knudsen <thokn@sdfe.dk>
Even Rouault <even.rouault@spatialys.com>
-165
View File
@@ -1,165 +0,0 @@
#################################################################################
#
# This file is part of CMake configuration for PROJ4 library (inspired from SOCI
# CMake, Copyright (C) 2009-2010 Mateusz Loskot <mateusz@loskot.net> )
#
# Copyright (C) 2011 Nicolas David <nicolas.david@ign.fr>
# Distributed under the MIT license
#
#################################################################################
# General settings
#################################################################################
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
# proj4 is an ANSI C project
project(PROJ4 C)
set(PROJECT_INTERN_NAME PROJ)
if (NOT CMAKE_VERSION VERSION_LESS 3.1)
cmake_policy(SET CMP0054 NEW)
endif ()
# Set warnings
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
# Suppress warning 4996 about sprintf, etc., being unsafe
set(CMAKE_C_FLAGS "/wd4996 /WX ${CMAKE_C_FLAGS}")
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_C_FLAGS "-std=c89 -Wall -Wextra -Wswitch -Werror \
-Wunused-parameter -Wmissing-prototypes -Wmissing-declarations -Wformat \
-Werror=format-security -Wshadow ${CMAKE_C_FLAGS}")
elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
set(CMAKE_C_FLAGS "-std=c89 -Wall -Wextra -Wswitch -Werror \
-Wc99-extensions -Wc11-extensions -Wunused-parameter -Wmissing-prototypes \
-Wmissing-declarations -Wformat -Werror=format-security -Wshadow \
-Wfloat-conversion ${CMAKE_C_FLAGS}")
endif()
# Tell Intel compiler to do arithmetic accurately. This is needed to
# stop the compiler from ignoring parentheses in expressions like
# (a + b) + c and from simplifying 0.0 + x to x (which is wrong if
# x = -0.0).
if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
if (MSVC)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fp:precise")
else ()
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise")
endif ()
endif ()
#################################################################################
# PROJ4 CMake modules
#################################################################################
# Path to additional CMake modules
set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
include(Proj4Utilities)
message(STATUS "")
colormsg(_HIBLUE_ "Configuring PROJ:")
#################################################################################
#PROJ version information
#################################################################################
include(Proj4Version)
proj_version(MAJOR 5 MINOR 0 PATCH 0)
set(PROJ_API_VERSION "13")
set(PROJ_BUILD_VERSION "13.1.0")
#################################################################################
# Build features and variants
#################################################################################
include(Proj4SystemInfo)
include(Proj4Config)
include(Proj4Mac)
include(policies)
#################################################################################
# threading configuration
#################################################################################
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package (Threads)
include(CheckIncludeFiles)
include(CheckSymbolExists)
CHECK_SYMBOL_EXISTS(PTHREAD_MUTEX_RECURSIVE pthread.h HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN)
if (HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN)
add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1)
endif()
include (CheckCSourceCompiles)
if (MSVC)
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} /WX")
else ()
set (CMAKE_REQUIRED_LIBRARIES m)
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} -Werror")
endif ()
# Check whether the C99 math function: hypot, atanh, etc. are available.
check_c_source_compiles (
"#include <math.h>
int main() {
int q;
return (int)(hypot(3.0, 4.0) + atanh(0.8) + cbrt(8.0) +
remquo(100.0, 90.0, &q) +
remainder(100.0, 90.0) + copysign(1.0, -0.0));
}\n" C99_MATH)
if (C99_MATH)
add_definitions (-DHAVE_C99_MATH=1)
else ()
add_definitions (-DHAVE_C99_MATH=0)
endif ()
boost_report_value(PROJ_PLATFORM_NAME)
boost_report_value(PROJ_COMPILER_NAME)
# Set a default build type for single-configuration cmake generators if
# no build type is set.
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Release)
endif ()
if (MSVC OR CMAKE_CONFIGURATION_TYPES)
# For multi-config systems and for Visual Studio, the debug version of
# the library has _d appended.
set (CMAKE_DEBUG_POSTFIX _d)
endif ()
option(PROJ4_TESTS "Enable build of collection of PROJ4 tests" ON)
boost_report_value(PROJ4_TESTS)
if(PROJ4_TESTS)
include(CTest)
enable_testing()
endif(PROJ4_TESTS)
include(Proj4Test)
# Put the libraries and binaries that get built into directories at the
# top of the build tree rather than in hard-to-find leaf
# directories. This simplifies manual testing and the use of the build
# tree rather than installed Boost libraries.
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
#################################################################################
# Installation
#################################################################################
include(Proj4InstallPath)
set(BINDIR "${DEFAULT_BINDIR}" CACHE PATH "The directory to install binaries into.")
set(LIBDIR "${DEFAULT_LIBDIR}" CACHE PATH "The directory to install libraries into.")
set(DATADIR "${DEFAULT_DATADIR}" CACHE PATH "The directory to install data files into.")
set(DOCDIR "${DEFAULT_DOCDIR}" CACHE PATH "The directory to install doc files into.")
set(INCLUDEDIR "${DEFAULT_INCLUDEDIR}" CACHE PATH "The directory to install includes into.")
set(CMAKECONFIGDIR "${DEFAULT_CMAKEDIR}" CACHE PATH "The directory to install cmake config files into.")
#################################################################################
# Build configured components
#################################################################################
include_directories(${PROJ4_SOURCE_DIR}/src)
message(STATUS "")
add_subdirectory(nad)
add_subdirectory(src)
add_subdirectory(man)
add_subdirectory(cmake)
add_subdirectory(test)
-184
View File
@@ -1,184 +0,0 @@
# How to contribute to PROJ.4
PROJ.4 has a wide and varied user base. Some are highly skilled geodesists with a deep
knowledge of map projections and reference systems, some are GIS software developers
and others are GIS users. All users, regardless of the profession or skill level,
has the ability to contribute to PROJ.4. Here's a few suggestion on how:
* Help PROJ.4-users that is less experienced than yourself.
* Write a bug report
* Request a new feature
* Write documentation for your favorite map projection
* Fix a bug
* Implement a new feature
In the following sections you can find some guidelines on how to contribute.
As PROJ.4 is managed on GitHub most contributions require that you have a GitHub
account. Familiarity with [issues](https://guides.github.com/features/issues/) and
the [GitHub Flow](https://guides.github.com/introduction/flow/) is an advantage.
## Help a fellow PROJ.4 user
The main forum for support for PROJ.4 is the mailing list. You can subscribe to
the mailing list [here](http://lists.maptools.org/mailman/listinfo/proj) and read
the archive [here](http://lists.maptools.org/pipermail/proj/).
If you have questions about the usage of PROJ.4 the mailing list is also the place to go.
Please *do not* use the GitHub issue tracker as a support forum. Your question is much
more likely to be answered on the mailing list, as many more people follow that than
the issue tracker.
## Adding bug reports
Bug reports are handled in the [issue tracker](https://github.com/OSGeo/proj.4/issues)
on PROJ.4's home on GitHub. Writing a good bug report is not easy. But fixing a poorly
documented bug is not easy either, so please put in the effort it takes to create a
thorough bug report.
A good bug report includes at least:
* A title that quickly explains the problem
* A description of the problem and how it can be reproduced
* Version of PROJ.4 being used
* Version numbers of any other relevant software being used, e.g. operating system
* A description of what already has been done to solve the problem
The more information that is given up front, the more likely it is that a developer
will find interest in solving the problem. You will probably get follow-up questions
after submitting a bug report. Please answer them in a timely manner if you have an
interest in getting the issue solved.
Finally, please only submit bug reports that are actually related to PROJ.4. If the
issue materializes in software that uses PROJ.4 it is likely a problem with that
particular software. Make sure that it actually is a PROJ.4 problem before you submit
an issue. If you can reproduce the problem only by using tools from PROJ.4 it is
definitely a problem with PROJ.4.
## Feature requests
Got an idea for a new feature in PROJ.4? Submit a thorough description of the new
feature in the [issue tracker](https://github.com/OSGeo/proj.4/issues). Please
include any technical documents that can help the developer make the new feature a
reality. An example of this could be a publicly available academic paper that
describes a new projection. Also, including a numerical test case will make it
much easier to verify that an implementation of your requested feature actually
works as you expect.
Note that not all feature requests are accepted.
## Write documentation
PROJ.4 is in dire need of better documentation. Any contributions of documentation
are greatly appreciated. The PROJ.4 documentation is available on [proj4.org](ttp://proj4.org).
The website is generated with [Sphinx](http://www.sphinx-doc.org/en/stable/). Contributions
to the documentation should be made as [Pull Requests](https://github.com/OSGeo/proj.4/pulls)
on GitHub.
If you intend to document one of PROJ.4's supported projections please use the
[Mercator projection](http://proj4.org/projections/merc.html) as a template.
## Code contributions
Code contributions can be either bug fixes or new features. The process is the same
for both, so they will be discussed together in this section.
### Making Changes
* Create a topic branch from where you want to base your work.
* You usually should base your topic branch off of the master branch.
* To quickly create a topic branch: `git checkout -b my-topic-branch`
* Make commits of logical units.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Make sure your commit messages are in the [proper format](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
* Make sure you have added the necessary tests for your changes.
* Make sure that all tests pass
### Submitting Changes
* Push your changes to a topic branch in your fork of the repository.
* Submit a pull request to the PROJ.4 repository in the OSGeo organization.
* If your pull request fixes/references an issue, include that issue number in the pull request. For example:
```
Wiz the bang
Fixes #123.
```
* PROJ.4 developers will look at your patch and take an appropriate action.
### Coding conventions
#### Programming language
PROJ.4 is developed strictly in ANSI C 89.
#### Coding style
We don't enforce any particular coding style, but please try to keep it as simple as possible.
If improving existing code, please try to conform with the style of the locally surrounding code.
#### Whitespace
Throughout the PROJ.4 code base you will see differing whitespace use.
The general rule is to keep whitespace in whatever form it is
in the file you are currently editing. If the file has a mix of tabs and space please
convert the tabs to space in a separate commit before making any other changes. This
makes it a lot easier to see the changes in diffs when evaluating the changed code. New
files should use spaces as whitespace.
#### File names
Files in which projections are implemented are prefixed with an upper-case `PJ_` and most other
files are prefixed with lower-case `pj_`. Some file deviate from this pattern, most of them dates
back to the very early releases of PROJ.4. New contributions should follow the pj-prefix pattern.
Unless there are obvious reasons not to.
#### Legalese
Commiters are the front line gatekeepers to keep the code base clear of improperly contributed code.
It is important to the PROJ.4 users, developers and the OSGeo foundation to avoid contributing any
code to the project without it being clearly licensed under the project license.
Generally speaking the key issues are that those providing code to be included in the repository
understand that the code will be released under the MIT/X license, and that the person providing
the code has the right to contribute the code. For the commiter themselves understanding about
the license is hopefully clear. For other contributors, the commiter should verify the understanding
unless the commiter is very comfortable that the contributor understands the license (for
instance frequent contributors).
If the contribution was developed on behalf of an employer (on work time, as part of a work project,
etc) then it is important that an appropriate representative of the employer understand that the
code will be contributed under the MIT/X license. The arrangement should be cleared with an
authorized supervisor/manager, etc.
The code should be developed by the contributor, or the code should be from a source which can be
rightfully contributed such as from the public domain, or from an open source project under a
compatible license.
All unusual situations need to be discussed and/or documented.
Commiters should adhere to the following guidelines, and may be personally legally liable for
improperly contributing code to the source repository:
* Make sure the contributor (and possibly employer) is aware of the contribution terms.
* Code coming from a source other than the contributor (such as adapted from another project)
should be clearly marked as to the original source, copyright holders, license terms and so forth.
This information can be in the file headers, but should also be added to the project licensing
file if not exactly matching normal project licensing (COPYING).
* Existing copyright headers and license text should never be stripped from a file. If a copyright
holder wishes to give up copyright they must do so in writing to the foundation before copyright
messages are removed. If license terms are changed it has to be by agreement (written in email is
ok) of the copyright holders.
* Code with licenses requiring credit, or disclosure to users should be added to COPYING.
* When substantial contributions are added to a file (such as substantial patches) the
author/contributor should be added to the list of copyright holders for the file.
* If there is uncertainty about whether a change is proper to contribute to the code base, please
seek more information from the project steering committee, or the foundation legal counsel.
## Additional Resources
* [General GitHub documentation](http://help.github.com/)
* [GitHub pull request documentation](https://help.github.com/articles/about-pull-requests/)
## Acknowledgements
The _code contribution_ section of this CONTRIBUTING file is inspired by
[PDAL's](https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md) and the _legalese_ section is
modified from [GDAL contributer guidelines](https://trac.osgeo.org/gdal/wiki/rfc3_commiters)
+93 -743
View File
File diff suppressed because it is too large Load Diff
-51
View File
@@ -1,51 +0,0 @@
##
# osgeo/proj.4
FROM ubuntu:xenial
MAINTAINER Howard Butler <howard@hobu.co>
# Setup build env
RUN mkdir /build
RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 16126D3A3E5C1192 \
&& apt-get update \
&& apt-get install -y --fix-missing --no-install-recommends \
software-properties-common build-essential ca-certificates \
git make cmake wget unzip libtool automake python-pip \
libpython-dev libjpeg-dev zlib1g-dev \
python-dev python-pip g++ doxygen dvipng \
cmake libjpeg8-dev zlib1g-dev texlive-latex-base \
texlive-latex-extra git \
graphviz python-matplotlib \
python-setuptools imagemagick \
&& apt-get remove --purge -y $BUILD_PACKAGES && rm -rf /var/lib/apt/lists/*
RUN mkdir /vdatum \
&& cd /vdatum \
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj \
&& wget http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj \
&& rm -rf /vdatum
RUN pip install Sphinx breathe \
sphinx_bootstrap_theme awscli sphinxcontrib-bibtex \
sphinx_rtd_theme
RUN git clone https://github.com/OSGeo/proj.4.git \
&& cd proj.4 \
&& ./autogen.sh \
&& ./configure --prefix=/usr \
&& make \
&& make install \
&& cd /proj.4/docs \
&& make html \
&& rm -rf /proj.4
+21 -38
View File
@@ -1,38 +1,28 @@
Preparing a PROJ.4 Release
==========================
1) Update the version number in configure.ac (in AC_INIT()).
1a) Update the version number in PROJ_BUILD_VERSION in CMakeLists.txt
1b) Update the version number in doc/source/conf.py
1c) Update version numbers in man pages in man/man1/ and man/man3/
1) Update the version number in configure.in (in AC_INIT()).
2) Update the version number in proj_api.h (#define PJ_VERSION).
2a) Update PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR and PROJ_VERSION_PATCH
in src/proj.h
3) Update the version number, and date in src/pj_release.c.
4) Update the version number in the -version-info definition in
src/Makefile.am. It consists of "current:revision:age".
4) Update the version number in the -version-info definition in
src/Makefile.am. It consists of "current:revision:age".
4a) Increment PROJ_BUILD_VERSION in CMakeLists.txt to follow
libtool versioning
- If the library source code has changed at all since the last update,
then increment revision (c:r:a becomes c:r+1:a).
- If the library source code has changed at all since the last update,
then increment revision (c:r:a becomes c:r+1:a).
- If any interfaces have been added, removed, or changed since the last
update, increment current, and set revision to 0.
- If any interfaces have been added, removed, or changed since the last
update, increment current, and set revision to 0.
- If any interfaces have been added since the last public release, then
increment age.
- If any interfaces have been added since the last public release, then
increment age.
- If any interfaces have been removed since the last public release, then
set age to 0.
- If any interfaces have been removed since the last public release, then
set age to 0.
4.5) Run "autogen.sh" (hopefully on the same machine it was last run on)
4.5) Run "automake" and "autoconf".
5) Add a note to the ChangeLog that a new release is being issued, and what
the release number is.
@@ -45,31 +35,24 @@
- %setup line
- rm -rf line
8) If this is a major release, prepare a branch.
git checkout -b 5.0
9) Tag the release
git tag 5.0.0
9) Tag the release with a command like "cvs tag -F proj_4_4_3".
10) Do a "make dist-all" in the proj root directory. After some grinding
this should result in files like proj-4.4.3.tar.gz and proj-4.4.3.zip
being created. These are full source distributions.
being created. These are full source distributions.
11) Put these in the proj ftp area on /osgeo/download/proj on
download.osgeo.org. This can be done via scp using a command like the
following.
11) Put these in the proj ftp area on ftp.remotesensing.org. This can be
done via scp using a command like the following.
scp proj-4.4.3.{tar.gz,zip} warmerdam@download.osgeo.org:/osgeo/download/proj
scp proj-4.4.3.{tar.gz,zip} frankw@upload.osgeo.org:/osgeo/download/proj
12) Announce the new release on the PROJ.4 and MetaCRS mailing lists.
12) Announce the new release on the PROJ.4 and MetaCRS mailing lists.
13) Issue a new release report on GitHub:
13) Issue a new release report on Freshmeat.
https://github.com/OSGeo/proj.4/releases/new
http://freshmeat.net/projects/proj.4/
NOTES:
o Information about preparing binary releases, and RPMs should be formalized.
o A "beta" release step should likely be incorporated.
o A "beta" release step should likely be incorporated.
+2 -13
View File
@@ -1,16 +1,5 @@
SUBDIRS = src man nad jniwrap cmake test
SUBDIRS = src man nad jniwrap
EXTRA_DIST = makefile.vc nmake.opt CMakeLists.txt
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = proj.pc
EXTRA_DIST = makefile.vc nmake.opt
AUTOMAKE_OPTIONS = dist-zip
ACLOCAL_AMFLAGS = -I m4
README: README.md
fgrep -v "[![" $< > $@
clean-local:
$(RM) README
+613
View File
@@ -0,0 +1,613 @@
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
ChangeLog INSTALL NEWS config.guess config.sub depcomp \
install-sh ltconfig ltmain.sh missing mkinstalldirs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/src/proj_config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
JNI_INCLUDE = @JNI_INCLUDE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MUTEX_SETTING = @MUTEX_SETTING@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = src man nad jniwrap
EXTRA_DIST = makefile.vc nmake.opt
AUTOMAKE_OPTIONS = dist-zip
all: all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d $(distdir) || mkdir $(distdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-libtool distclean-tags \
distcleancheck distdir distuninstallcheck dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
+35 -513
View File
@@ -1,486 +1,8 @@
5.0.1 Release Notes
-------------------
BUG FIXES
------------
All bug fix numbers refer to issues or pull requests indexed at
https://github.com/OSGeo/proj.4/
o Handle ellipsoid change correctly in pipelines when
+towgs84=0,0,0 is set #881
o Handle the case where nad_ctable2_init returns NULL #883
o Avoid shadowed declaration errors with old gcc #880
o Expand +datum properly +datum in pipelines #872
o Fail gracefully when incorrect headers are encountered in grid
files #875
o Improve roundtrip stability in pipelines using +towgs84 #871
o Fixed typo in gie error codes #861
o Numerical stability fixes to the geodesic package #826 #843
o Make sure that transient errors are returned correctly #857
o Make sure that locally installed header files are not used when
building PROJ #849
o Fix inconsistent parameter names in proj.h/proj_4D_api.c #842
o Make sure +vunits is applied #833
o Fix incorrect Web Mercator transformations #834
THANKS TO
------------
Version 5.0.1 is made possible by the following contributors:
Mike Toews
Kurt Schwehr
Even Rouault
Charles Karney
Thomas Knudsen
Kristian Evers
5.0.0 Release Notes
-------------------
This version of PROJ introduces some significant extensions and
improvements to (primarily) the geodetic functionality of the system.
The main driver for introducing the new features is the emergence of
dynamic reference frames, the increasing use of high accuracy GNSS,
and the related growing demand for accurate coordinate
transformations. While older versions of PROJ included some geodetic
functionality, the new framework lays the foundation for turning PROJ
into a generic geospatial coordinate transformation engine.
The core of the library is still the well established projection code.
The new functionality is primarily exposed in a new programming
interface and a new command line utility, "cct" (for "Coordinate
Conversion and Transformation"). The old programming interface is
still available and can - to some extent - use the new geodetic
transformation features.
The internal architecture has also seen many changes and much
improvement. So far, these improvements respect the existing
programming interface. But the process has revealed a need to simplify
and reduce the code base, in order to support sustained active
development.
!!!
!!! Therefore we have scheduled regular releases over the coming years
!!! which will gradually remove the old programming interface.
!!!
!!! This will cause breaking changes with the next two major version
!!! releases, which will affect all projects that depend on PROJ
!!! (cf. section "deprecations" below).
!!!
The decision to break the existing API has not been easy, but has
ultimately been deemed necessary to ensure the long term survival of
the project. Not only by improving the maintainability immensely, but
also by extending the potential user (and hence developer) community.
The end goal is to deliver a generic coordinate transformation
software package with a clean and concise code base appealing to
both users and developers.
VERSIONING AND NAMING
---------------------
For the first time in more than 25 years the major version number of
the software is changed. The decision to do this is based on the many
new features and new API. While backwards compatibility remains -
except in a few rare corner cases - the addition of a new and improved
programming interface warrants a new major release.
The new major version number unfortunately leaves the project in a bit
of a conundrum regarding the name. For the majority of the life-time
of the product it has been known as PROJ.4, but since we have now
reached version 5 the name is no longer aligned with the version
number.
Hence we have decided to decouple the name from the version number and
from this version and onwards the product will simply be called PROJ.
In recognition of the history of the software we are keeping PROJ.4 as
the *name of the organizing project*. The same project team also
produces the datum-grid package.
In summary:
o The PROJ.4 project provides the product PROJ, which is now at
version 5.0.0.
o The foundational component of PROJ is the library libproj.
o Other PROJ components include the application proj, which provides
a command line interface to libproj.
o The PROJ.4 project also distributes the datum-grid package,
which at the time of writing is at version 1.6.0.
UPDATES
-------
o Introduced new API in proj.h.
- The new API is orthogonal to the existing proj_api.h API and the
internally used projects.h API.
- The new API adds the ability to transform spatiotemporal (4D)
coordinates.
- Functions in the new API use the "proj_" namespace.
- Data types in the new API use the "PJ_" namespace, with a few
historic exceptions such as XY, XYZ, LP and LPZ.
o Introduced the concept of "transformation pipelines" that makes it
possible to do complex geodetic transformations of spatiotemporal
coordinates by daisy chaining simple coordinate operations.
o Introduced cct, the Coordinate Conversion and Transformation
application.
o Introduced gie, the Geospatial Integrity Investigation Environment.
- Selftest invoked by -C flag in proj has been removed
- Ported approx. 1300 built-in selftests to gie format
- Ported approx. 1000 tests from the gigs test framework
- Added approx. 200 new tests
o Adopted terminology from the OGC/ISO-19100 geospatial standards
series. Key definitions are:
- At the most generic level, a *coordinate operation* is a change
of coordinates, based on a one-to-one relationship, from one
coordinate reference system to another.
- A *transformation* is a coordinate operation in which the two
coordinate reference systems are based on different datums, e.g.
a change from a global reference frame to a regional frame.
- A *conversion* is a coordinate operation in which both
coordinate reference systems are based on the same datum,
e.g. change of units of coordinates.
- A *projection* is a coordinate conversion from an ellipsoidal
coordinate system to a plane. Although projections are simply
conversions according to the standard, they are treated as
separate entities in PROJ as they make up the vast majority
of operations in the library.
o New operations:
- The pipeline operator (pipeline)
- Transformations:
+ Helmert transform (helmert)
+ Horner real and complex polynomial evaluation (horner)
+ Horizontal gridshift (hgridshift)
+ Vertical gridshift (vgridshift)
+ Molodensky transform (molodensky)
+ Kinematic gridshift with deformation model (deformation)
- Conversions:
+ Unit conversion (unitconvert)
+ Axis swap (axisswap)
- Projections:
+ Central Conic projection (ccon)
o Significant documentation updates, including
- Overhaul of the structure of the documentation
- A better introduction to the use of PROJ
- A complete reference to the new proj.h API
- a complete rewrite of the section on geodesic calculations
- Figures for all projections
o New "free format" option for operation definitions, which
permits separating tokens by whitespace when specifying key/value-
pairs, e.g. "proj = merc lat_0 = 45".
o Added metadata to init-files that can be read with the
proj_init_info() function in the new proj.h API.
o Added ITRF2000, ITRF2008 and ITRF2014 init-files with ITRF
transformation parameters, including plate motion model
parameters.
o Added ellipsoid parameters for GSK2011, PZ90 and "danish". The
latter is similar to the already supported andrae ellipsoid,
but has a slightly different semimajor axis.
o Added Copenhagen prime meridian.
o Updated EPSG database to version 9.2.0.
o Geodesic library updated to version 1.49.2-c.
o Support for analytical partial derivatives has been removed.
o Improved performance in Winkel Tripel and Aitoff.
o Introduced pj_has_inverse() function to proj_api.h. Checks if an
operation has an inverse. Use this instead of checking whether
P->inv exists, since that can no longer be relied on.
o ABI version number updated to 13:0:0.
o Removed support for Windows CE.
o Removed the VB6 COM interface.
BUG FIXES
------------
All bug fix numbers refer to issues indexed at
https://github.com/OSGeo/proj.4/issues/
o Fixed incorrect convergence calculation in Lambert Conformal
Conic. #16.
o Handle ellipsoid parameters correctly when using +nadgrids=@null.
#22.
o Return correct latitude when using negative northings in
Transverse Mercator (tmerc). #138.
o Return correct result at origin in inverse Mod. Stererographic
of Alaska. #161.
o Return correct result at origin in inverse Mod. Stererographic
of 48 U.S. #162.
o Return correct result at origin in inverse Mod. Stererographic
of 50 U.S. #163.
o Return correct result at origin in inverse Lee Oblated
Stereographic. #164.
o Return correct result at origin in inverse Miller Oblated
Stereographic. #164.
o Fixed scaling and wrap-around issues in Oblique Cylindrical
Equal Area. #166.
o Corrected a coefficient error in inverse Transverse Mercator. #174.
o Respect -r flag when calling proj with -V. #184.
o Remove multiplication by 2 at the equator error in Stereographic
projection. #194.
o Allow +alpha=0 and +gamma=0 when using Oblique Mercator. #195.
o Return correct result of inverse Oblique Mercator when alpha is
between 90 and 270. #331.
o Avoid segmentation fault when accessing point outside grid. #369.
o Avoid segmentation fault on NaN input in Robin inverse. #463.
o Very verbose use of proj (-V) on Windows is fixed. #484.
o Fixed memory leak in General Oblique Transformation. #497.
o Equations for meridian convergence and partial derivatives have
been corrected for non-conformal projections. #526.
o Fixed scaling of cartesian coordinates in pj_transform(). #726.
o Additional bug fixes courtesy of Google's OSS-Fuzz program:
https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=proj4
DEPRECATIONS
------------
o The projects.h header and the functions related to it is
considered deprecated from version 5.0.0 and onwards.
!!! PROJECTS.H WILL BE REMOVED FROM THE LIBRARY !!!
!!! WITH VERSION 6.0.0 !!!
o The nmake build system on Windows will not be supported from
version 6.0.0 on onwards. Use CMake instead.
!!! NMAKE BUILD SYSTEM WILL BE REMOVED FROM THE LIBRARY !!!
!!! WITH VERSION 6.0.0 !!!
o The proj_api.h header and the functions related to it is
consided deprecated from version 5.0.0 and onwards.
!!! PROJ_API.H WILL BE REMOVED FROM THE LIBRARY !!!
!!! WITH VERSION 7.0.0 !!!
THANKS TO
------------
Version 5.0.0 is made possible by the following contributors:
Lukasz Komsta
Maxim Churilin
edechaux
dusanjovic
Zoltan Siki
Tom Fili
Nicolas David
Mike Toews
Micah Cochran
Luke Campbell
Ilya Oshchepkov
Adam Wulkiewicz
Jonas Tittmann
Mateusz Loskot
Etienne Jacques
Bas Couwenberg
Elliott Sales de Andrade
Charles Karney
Aaron Puchert
Julien Moquet
Charles Karney
Howard Butler
Even Rouault
Thomas Knudsen
Kristian Evers
4.9.3 Release Notes
-------------------
o UTM now uses etmerc, following NGA recommendations. Tests adjusted
for tiny changes in values.
o new projections: Times, Natural Earth II, Compact Miller, Patterson
Cylindrical, and inverse for Hammer and Eckert-Greifendorff.
o runtime self tests are now opt-in instead of opt-out
o math constants moved to projects.h
o bugfixes
o New (optional) runtime self tests added to proj
4.9.2 Release Notes
-------------------
o proj_def.dat was missing from source distribution
see https://github.com/OSGeo/proj.4/issues/274 for more detail
o Update Geodesic library from GeographicLib
o Remove setlocale() use in pj_init_ctx()
o Renamed PVALUE in pj_param.c to prevent clash with Windows
4.9.1 Release Notes
-------------------
o 4.9.0RC2 release was abandoned because it was not promoted in a
timely fashion. Subsequent maintenance of tickets has continued,
and a new 4.9.1 release was issued in its place.
o Implement inverse solution for Winkel Tripel from Drazan Tutic #250
o More CMake configuration tweaks. The CMake configuration is probably
not at feature parity with the autotools builds at this point but it
is converging #256
o Tweak initialization ordering around setlocal which may have caused
issues #237
o Support out-of-tree autoconf builds more completely #247
o Fix NaN handling by geod_inverse and geod_polygon_addedge #251 & #253
o Update config.sub and config.guess #257
o Adapt Charles Karney's CMake patches for smoother build #258
o Define default PROJ_LIB location for CMake compilation #261
o Fix Windows compilation on PJ_aitoff.c
o Align CMake SOVERSION with autotools #263
o Regenerate nad/epsg with GDAL r28536 to avoid precision loss in TOWGS84
parameters, e.g. on Amersfoort / RD EPSG:4289 (#260)
o Add CMake project-config.cmake scripts (#264 from Charles Karney)
o Dial back test sensitivity #255
4.9.0 Release Notes
-------------------
o Implement CMake as an option for building PROJ.4
o Implement new virtual file api (projFileAPI) so that all access to grid
shift and init files can be hooked.
o Replace geodesic implementation with one from Charles Karney and add a
supported public interface (geodesic.h).
o Upgraded to EPSG 8.5.
o Removed old (deprecated) Java bindings in favor of the new api introduced
in 4.8.0.
o Implement the calcofi (Cal Coop Ocean Fish Invest Lines/Stations) projection
o Install projects.h again for applications that want access to internal
structures and functions despite the inherent fragility.
o Various bug fixes and cleanup.
o Added the CalCOFI pseudo-projection, #135
4.8.0 Release Notes
-------------------
o Added the Natural Earth projection.
o Added HEALPIX, rHEALPIX and Icosahedral Snyder Equal Area projections.
o nad2bin now produces "CTable2" format grid shift files by default which
are platform independent.
o nad2nad removed, use cs2cs for datum shift operations.
o projects.h no longer installed as a public include file. Please try to
only use proj_api.h.
o Add pj_get_spheroid_defn() accessor.
o Added an alternate version of pj_init() that takes a projCtx (execution
context) structure to address multithreading issues with error management
and to provide a support for application hookable error reporting and
logging.
o Upgrade to EPSG 7.9. Some changes in ideal datum selection.
o JNI bindings reworked, org.proj4.Projections deprecated in favor of
org.proj4.PJ.
o Added preliminary vertical datum support.
o Fix various multithreading issues, particular in datum grid handling code.
o Added support for the +axis= option for alternate axis orientations as
part of a coordinate system (used for TM South Orientated support).
o +proj=omerc implementatioin replaced with code from libproj4. +rot_conv
flag no longer works, and some coordinate systems (ie. Malaysian) will
need to use +gamma instead. "epsg" init file updated accordingly.
4.7.0 Release Notes
-------------------
o Added in memory caching of init file search results for substantial
acceleration in some application environments (like MapServer).
acceleration in some application environments (like MapServer).
o Regenerated nad/epsg init file with EPSG 7.1 database, including new
support for Google Mercator (EPSG:3857).
@@ -499,15 +21,15 @@ o The PROJ.4 project also distributes the datum-grid package,
if more than 90 degrees away from the central meridian (#5). This change
may only be temporary till a more comprehensive solution is found.
o Fixed handling of extra text in cs2cs.
o Fixed handling of extra text in cs2cs.
o Renamed INSTALL to INSTALL.TXT.
o The eqc projection has been generalized to include a latitude of origin.
o Added the glabsgm (Gauss Laborde / Sphere Geometric Mean) projection,
and gstmerc variation.
o nad/IGNF init catalogue created.
o added the ntf_r93.gsb datum shift file.
@@ -515,9 +37,9 @@ o The PROJ.4 project also distributes the datum-grid package,
o Add /Op in nmake.opt compile options to avoid VC7 optimization bug (#12)
o Fix testvarious test script so it works properly when grid files available
4.6.0 Release Notes
-------------------
@@ -528,28 +50,28 @@ o The PROJ.4 project also distributes the datum-grid package,
ellipsoids getting changed to spheres for spherical projections.
o Upgrade to EPSG 6.13
o Added "900913" "Google Mercator" code in nad/esri.extra.
o Avoid some static variable based multi-threading problems.
o Avoid some static variable based multi-threading problems.
o Improve error recovery if ctable style datum shift grid fails to load.
o Support drive letters properly in PROJ_LIB paths for win32.
o Fix occasional problem with DMS parsing.
o Fix occasional problem with DMS parsing.
o Removed non-functional mpoly projection.
o add lonlat, and latlon as aliases for longlat.
o add lonlat, and latlon as aliases for longlat.
4.5.0 Release Notes
-------------------
o Microsoft Visual Studio 8 compatibility changes.
o Upgraded to EPSG 6.11.1 database.
o Microsoft Visual Studio 8 compatibility changes.
o Upgraded to EPSG 6.11.1 database.
o Several bug fixes to pj_transform() to handle transient errors properly.
@@ -564,15 +86,15 @@ o The PROJ.4 project also distributes the datum-grid package,
4.4.9 Release Notes
-------------------
o Win32 build uses proj.dll by default now.
o Win32 build uses proj.dll by default now.
o Added accessor functions for the datums, ellps, prime_meridians, units and
main projection definition lists so they can be used on windows where
main projection definition lists so they can be used on windows where
data objects exported from the DLL don't work easily.
o Added JNI (Java Native Interface) support within the jniwrap directory,
o Added JNI (Java Native Interface) support within the jniwrap directory,
and some supporting entry points directly in the proj dll/so. See
--with-jni configure switch, and jniwrap/README.
--with-jni configure switch, and jniwrap/README.
o Added the proj=stereoa and proj=geos projections, incorporated from
Gerald's libproj4.
@@ -585,38 +107,38 @@ o The PROJ.4 project also distributes the datum-grid package,
o Updated epsg file to EPSG 6.5, added other.extra pseudo-EPSG WMS definitions
o Made significant fixes to prime meridian support.
o Made significant fixes to prime meridian support.
o Substantially change pj_datum_transform(), so it and pj_transform() will
work between coordinate systems with different ellipsoids but no datum
shift information (assume +towgs84=0,0,0).
shift information (assume +towgs84=0,0,0).
o Added pj_get_release() function.
o Ensure pj_transform() will try to transform all points in provided list if
even some might transform properly.
o Ensure pj_transform() will try to transform all points in provided list if
even some might transform properly.
o Improved the accuracy of Geocentric_To_Geodetic() via an iterative
solution.
solution.
o Various other bug fixes.
o Various other bug fixes.
4.4.7 Release Notes
-------------------
o Added NTv2 (.gsb) grid shift file support.
o Added NTv2 (.gsb) grid shift file support.
o Modified datum shift support so that data file data is only loaded if
needed. Also added 'null' grid as a fallback option, and support for
making grids optional (prefix with '@' in +nadgrids).
needed. Also added 'null' grid as a fallback option, and support for
making grids optional (prefix with '@' in +nadgrids).
o Regenerated nad/epsg file with towgs84 parameters for non-greenwich prime
o Regenerated nad/epsg file with towgs84 parameters for non-greenwich prime
meridians.
o Updated nad/esri file with better generated form from Paul Ramsey.
o Various bug fixes.
o Various bug fixes.
4.4.6 Release Notes
@@ -626,17 +148,17 @@ o The PROJ.4 project also distributes the datum-grid package,
Gerald.
o Updated 'espg' translation file for EPSG 6.2.2 with better support for
prime meridians.
prime meridians.
o Added Prime Meridians via +pm command switch to cs2cs (and pj_transform).
o Fixed bug with 7 parameter transforms.
o Fixed bug with 7 parameter transforms.
o Added 'esri' pseudo-epsg coordinate system file.
o Added 'esri' pseudo-epsg coordinate system file.
o Cleanup so that PROJ.4 compiles clean as C++ code.
o Added pj_get_def() to expand definitions of stuff like +init clauses.
o Added a Krovak implementation (proj=krov). Note this may change again
in the next release.
in the next release.
+130
View File
@@ -0,0 +1,130 @@
-------------------- P R O J . 4 --------------------
This is Release 4.4 of cartographic projection software.
PLEASE read the following information as well as READMEs in the src
and nad directories.
For more information on PROJ.4 maintenance please see the web page at:
http://www.remotesensing.org/proj
or
http://proj.maptools.org/
---------------------------------------------------
Installation:
-------------
FSF's configuration procedure is used to ease installation of the
PROJ.4 system.
The default destination path prefix for installed files is /usr/local.
Results from the installation script will be placed into subdirectories
bin, include, lib, man/man1 and man/man3. If this default path prefix
is proper, then execute:
./configure
If another path prefix is required, then execute:
./configure --prefix=/my/path
In either case, the directory of the prefix path must exist and be
writable by the installer.
After executing configure, execute:
make
make install
The install target will create, if necessary, all required sub-directories.
Windows Build
-------------
PROJ.4 can be built with Microsoft Visual C/C++ using the makefile.vc
in the PROJ directory. First edit the PROJ\nmake.opt and modify
the INSTDIR value at the top to point to the directory where
the PROJ tree shall be installed. If you want to install into
C:\PROJ, it can remain unchanged.
Then use the makefile.vc to build the software:
eg.
C:\> cd proj
C:\PROJ> nmake /f makefile.vc
C:\PROJ> nmake /f makefile.vc install-all
Note that you have to have the VC++ environment variables, and path
setup properly. This may involve running the VCVARS32.BAT script out
of the Visual C++ tree.
The makefile.vc builds proj.exe, proj.dll and proj.lib.
It should also be possible to build using the Unix instructions
and Cygwin32, but this hasn't been tested recently.
---------------------------------------------------
Distribution files and format.
------------------------------
Sources are distributed in one or more files. The principle elements
of the system are in a compress tar file named `PROJ.4.x.tar.gz' where
"x" will indicate level.sub-level of the release. For U.S. users
interested in NADCON datum shifting procedures, additional files
containing conversion matricies are distributed with the name
`PROJ.4.x.y.tar' where y is an uppercase letter starting with "A."
These supplementary files will contain compressed files and thus
the tar file is not compressed.
Interim reports on Rel. 4 proj are available in PostScript form as
*.ps.gz . New and old users are strongly recommended to carefully read
these manuals. They are supplements and NOT a replacement for the full
manual OF 90-284 (which new users should also obtain).
---------------------------------------------------
Principle new aspects of system:
--------------------------------
ANSI X3.159-1989 C code. Site must have ANSI C compiler and header files.
Several method of determining radius from specified ellipsoid.
Use of initialization files through +init=file:key. Default projection
specifications also may be defined in an ASCII file.
+inv option REMOVED and -I may be used in its place. Use of invproj
alias of proj still functions as per Rel.3.
+ellps=list and +proj=list REMOVED. Use respective -le and -lp.
+units= to specify cartesian coordinate system units. To get list
use -lu.
-v added to dump final cartographic parameters employed.
Addition of computing scale factors and angular distortion added through
-S option. Valuable for designing new projection parameter details.
-V option which verbosely lists projected point characteristics.
Programmers may use projection library with calls to pj_init,
pj_fwd, pj_inv and pj_transform.
Program nad2nad for conversion of data to and from NAD27 and NAD83
datums.
Program cs2cs for converting between coordinate systems, with optional
datum translation.
-------------------------------------------------------------
Things currently left undone:
----------------------------
proj_def.dat NOT fully in place. Needs additional settings for
many of the projections. Probably will not be completed until main
manual rewritten.
-137
View File
@@ -1,137 +0,0 @@
# PROJ
[![Travis Status](https://travis-ci.org/OSGeo/proj.4.svg?branch=master)](https://travis-ci.org/OSGeo/proj.4)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/584j49uguwoo5evi?svg=true)](https://ci.appveyor.com/project/OSGeo/proj-4)
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/proj.4/badge.svg?branch=master)](https://coveralls.io/github/OSGeo/proj.4?branch=master)
PROJ is a generic coordinate transformation software, that transforms
coordinates from one coordinate reference system (CRS) to another.
This includes cartographic projections as well as geodetic transformations.
For more information on the PROJ.4 project please see the web page at:
http://proj4.org/
The PROJ.4 mailing list can be found at:
http://lists.maptools.org/mailman/listinfo/proj
See the NEWS file for changes between versions.
The following command line utilities are included in the PROJ package:
- proj, for cartographic projection of geodetic coordinates
- cs2cs, for transformation from one CRS to another CRS.
- geod, for geodesic (great circle) computations.
- cct, for generic Coordinate Conversions and Transformations.
- gie, the Geospatial Integrity Investigation Environment.
## Installation
### Building with CMake
cd proj
mkdir build
cd build
cmake ..
cmake --build .
On Windows, one may need to specify generator:
cmake -G "Visual Studio 15 2017" ..
Tests are run with
ctest
The test suite requires that the proj-datumgrid package is installed
in `PROJ_LIB`.
### Building on Unix/Linux
FSF's configuration procedure is used to ease installation of the
PROJ system.
The default destination path prefix for installed files is `/usr/local`.
Results from the installation script will be placed into subdirectories
`bin`, `include`, `lib`, `man/man1` and `man/man3`.
If this default path prefix is proper, then execute:
./configure
If another path prefix is required, then execute:
./configure --prefix=/my/path
In either case, the directory of the prefix path must exist and be
writable by the installer.
After executing configure, execute:
make
make install
The install target will create, if necessary, all required sub-directories.
Tests are run with
make check
The test suite requires that the proj-datumgrid package is installed
in `PROJ_LIB`.
### Building on Windows with NMAKE
PROJ can be built with Microsoft Visual C/C++ using the `makefile.vc`
in the `PROJ` directory. First edit the `PROJ\nmake.opt` and
modify the `INSTDIR` value at the top to point to the directory
where the PROJ tree shall be installed.
If you want to install into `C:\PROJ`, it can remain unchanged.
Then use the `makefile.vc` to build the software e.g.:
C:\> cd proj
C:\PROJ> nmake /f makefile.vc
C:\PROJ> nmake /f makefile.vc install-all
Note that you have to have the VC++ environment variables, and path
setup properly. This may involve running the `VCVARS32.BAT`
script out of the Visual C++ tree.
The `makefile.vc` builds `proj.exe`, `proj.dll` and `proj.lib`.
On Windows you have to set the `PROJ_LIB` environment variable to make
sure that PROJ can find the resource files that it needs. For the
default install directory you can set `PROJ_LIB` with:
C:\> set PROJ_LIB=C:\PROJ\share
### Distribution files and format
Sources are distributed in one or more files. The principle elements
of the system are in a compress tar file named `proj-x.y.z.tar.gz` where
"x" will indicate major release number, "y" indicates minor release
number and "z" indicates the patch number of the release.
In addition to the PROJ software package, distributions of datum
conversion grid files and PROJ parameter files are also available.
The grid package is distributed under the name `proj-datumgrid-x.y.zip`,
where "x" is the major release version and "y" the minor release
version numbers. Similarly regional packages are distributed. The
regional packages contain resources that are not essential to the
functionality of PROJ but still of value to users in the region
specific to the package. All grids that were in proj-datumgrids-1.6
remain in proj-datumgrids-1.7; the regional datumgrid files contain
grids for datums not previously supported (prior to PROJ 5.0.0).
The resource packages can be downloaded from the PROJ.4 website.
More info on the contents of the various resource packages can be
found at the
[proj-datumgrid GitHub repository](https://github.com/OSGeo/proj-datumgrid).
The resource file packages should be extracted to `PROJ_LIB`
where PROJ will find them after installation. The default location of
`PROJ_LIB` on UNIX-based systems is `/usr/local/share/proj` but it may
be changed to a different directory. On Windows you have to define
`PROJ_LIB` yourself.
Vendored
+7484
View File
File diff suppressed because it is too large Load Diff
+4 -3
View File
@@ -1,4 +1,5 @@
#!/bin/sh
# $Id$
#
# Autotools boostrapping script
#
@@ -26,9 +27,9 @@ if test "$OSTYPE" = "IRIX" -o "$OSTYPE" = "IRIX64"; then
fi
echo "Running aclocal"
aclocal -I ./m4 || giveup
echo "Running autoheader"
autoheader || giveup
aclocal || giveup
#echo "Running autoheader"
#autoheader || giveup
echo "Running libtoolize"
$LIBTOOLIZE --force --copy || giveup
echo "Running automake"
-27
View File
@@ -1,27 +0,0 @@
# proj-config.cmake for the install tree. It's installed in
# ${INSTALL_CMAKE_DIR} and @PROJECT_ROOT_DIR@ is the relative
# path to the root from there. (Note that the whole install tree can
# be relocated.)
file(RELATIVE_PATH PROJECT_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKECONFIGDIR} ${CMAKE_INSTALL_PREFIX})
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
configure_file (project-config.cmake.in project-config.cmake @ONLY)
configure_file (project-config-version.cmake.in
project-config-version.cmake @ONLY)
install (FILES
"${CMAKE_CURRENT_BINARY_DIR}/project-config.cmake"
DESTINATION "${CMAKECONFIGDIR}"
RENAME "${PROJECT_NAME_LOWER}-config.cmake")
install (FILES
"${CMAKE_CURRENT_BINARY_DIR}/project-config-version.cmake"
DESTINATION "${CMAKECONFIGDIR}"
RENAME "${PROJECT_NAME_LOWER}-config-version.cmake")
# Make information about the cmake targets (the library and the tools)
# available.
install (EXPORT targets
FILE ${PROJECT_NAME_LOWER}-targets.cmake
DESTINATION "${CMAKECONFIGDIR}")
install (EXPORT targets
NAMESPACE ${PROJECT_NAME}::
FILE ${PROJECT_NAME_LOWER}-namespace-targets.cmake
DESTINATION "${CMAKECONFIGDIR}")
-14
View File
@@ -1,14 +0,0 @@
EXTRA_DIST = CMakeLists.txt \
Proj4InstallPath.cmake \
Proj4SystemInfo.cmake \
Proj4Utilities.cmake \
proj_config.cmake.in \
Proj4Config.cmake \
Proj4Mac.cmake \
Proj4Test.cmake \
Proj4Version.cmake \
policies.cmake \
proj_config.cmake.in \
project-config-version.cmake.in \
project-config.cmake.in
-41
View File
@@ -1,41 +0,0 @@
################################################################################
# SociConfig.cmake - CMake build configuration of SOCI library
################################################################################
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
################################################################################
include (CheckIncludeFiles)
include (CheckLibraryExists)
include (CheckFunctionExists)
# check needed include file
check_include_files (dlfcn.h HAVE_DLFCN_H)
check_include_files (inttypes.h HAVE_INTTYPES_H)
check_include_files (jni.h HAVE_JNI_H)
check_include_files (memory.h HAVE_MEMORY_H)
check_include_files (stdint.h HAVE_STDINT_H)
check_include_files (stdlib.h HAVE_STDLIB_H)
check_include_files (string.h HAVE_STRING_H)
check_include_files (sys/stat.h HAVE_SYS_STAT_H)
check_include_files (sys/types.h HAVE_SYS_TYPES_H)
check_include_files (unistd.h HAVE_UNISTD_H)
check_include_files("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
# check libm need on unix
check_library_exists(m ceil "" HAVE_LIBM)
set(PACKAGE "proj")
set(PACKAGE_BUGREPORT "https://github.com/OSGeo/proj.4/issues")
set(PACKAGE_NAME "PROJ.4 Projections")
set(PACKAGE_STRING "PROJ.4 Projections ${${PROJECT_INTERN_NAME}_VERSION}")
set(PACKAGE_TARNAME "proj")
set(PACKAGE_VERSION "${${PROJECT_INTERN_NAME}_VERSION}")
configure_file(cmake/proj_config.cmake.in src/proj_config.h)
-83
View File
@@ -1,83 +0,0 @@
#----------------------------------------------
# installation path settings
#----------------------------------------------
if(WIN32)
if(DEFINED ENV{OSGEO4W_ROOT})
set(OSGEO4W_ROOT_DIR $ENV{OSGEO4W_ROOT})
else()
set(OSGEO4W_ROOT_DIR c:/OSGeo4W)
endif()
set(DEFAULT_PROJ_ROOT_DIR ${OSGEO4W_ROOT_DIR})
endif()
if(UNIX)
set(DEFAULT_PROJ_ROOT_DIR "/usr/local/")
endif(UNIX)
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX ${DEFAULT_PROJ_ROOT_DIR} CACHE PATH "Proj.4 install
prefix" FORCE)
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
#TODO
# for data install testing the PROJ_LIB envVar
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
if(WIN32)
set(DEFAULT_BIN_SUBDIR bin)
set(DEFAULT_LIB_SUBDIR local/lib)
set(DEFAULT_DATA_SUBDIR share)
set(DEFAULT_INCLUDE_SUBDIR local/include)
set(DEFAULT_DOC_SUBDIR share/doc/proj)
set(DEFAULT_CMAKE_SUBDIR local/lib/cmake/${PROJECT_NAME_LOWER})
elseif(UNIX)
include(GNUInstallDirs)
set(DEFAULT_BIN_SUBDIR ${CMAKE_INSTALL_BINDIR})
set(DEFAULT_LIB_SUBDIR ${CMAKE_INSTALL_LIBDIR})
set(DEFAULT_DATA_SUBDIR ${CMAKE_INSTALL_DATAROOTDIR}/proj)
set(DEFAULT_INCLUDE_SUBDIR ${CMAKE_INSTALL_INCLUDEDIR})
set(DEFAULT_DOC_SUBDIR ${CMAKE_INSTALL_DOCDIR})
set(DEFAULT_CMAKE_SUBDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME_LOWER})
else()
# Common locatoins for Unix and Mac OS X
set(DEFAULT_BIN_SUBDIR bin)
set(DEFAULT_LIB_SUBDIR lib)
set(DEFAULT_DATA_SUBDIR share/proj)
set(DEFAULT_DOC_SUBDIR doc/proj)
set(DEFAULT_INCLUDE_SUBDIR include)
set(DEFAULT_DOC_SUBDIR share/doc/proj)
set(DEFAULT_CMAKE_SUBDIR lib/cmake/${PROJECT_NAME_LOWER})
endif()
# Locations are changeable by user to customize layout of Proj.4 installation
# (default values are platform-specific)
set(PROJ_BIN_SUBDIR ${DEFAULT_BIN_SUBDIR} CACHE STRING
"Subdirectory where executables will be installed")
set(PROJ_LIB_SUBDIR ${DEFAULT_LIB_SUBDIR} CACHE STRING
"Subdirectory where libraries will be installed")
set(PROJ_INCLUDE_SUBDIR ${DEFAULT_INCLUDE_SUBDIR} CACHE STRING
"Subdirectory where header files will be installed")
set(PROJ_DATA_SUBDIR ${DEFAULT_DATA_SUBDIR} CACHE STRING
"Subdirectory where data will be installed")
set(PROJ_DOC_SUBDIR ${DEFAULT_DOC_SUBDIR} CACHE STRING
"Subdirectory where doc will be installed")
set(PROJ_CMAKE_SUBDIR ${DEFAULT_CMAKE_SUBDIR} CACHE STRING
"Subdirectory where cmake proj4-config file will be installed")
# Mark *DIR variables as advanced and dedicated to use by power-users only.
mark_as_advanced(PROJ_ROOT_DIR
PROJ_BIN_SUBDIR
PROJ_LIB_SUBDIR
PROJ_INCLUDE_SUBDIR
PROJ_DATA_SUBDIR
PROJ_DOC_SUBDIR
PROJ_CMAKE_SUBDIR )
set(DEFAULT_BINDIR "${PROJ_BIN_SUBDIR}")
set(DEFAULT_LIBDIR "${PROJ_LIB_SUBDIR}")
set(DEFAULT_DATADIR "${PROJ_DATA_SUBDIR}")
set(DEFAULT_DOCDIR "${PROJ_DOC_SUBDIR}")
set(DEFAULT_INCLUDEDIR "${PROJ_INCLUDE_SUBDIR}")
set(DEFAULT_CMAKEDIR "${PROJ_CMAKE_SUBDIR}")
-23
View File
@@ -1,23 +0,0 @@
if(APPLE)
set(FRAMEWORKDIR "Library/Frameworks" CACHE PATH "the path to install framework")
set(BUNDLEDIR "Applications/OSGEO" CACHE PATH "the path to install bundle")
file(RELATIVE_PATH BUNDLE_FRAME_REL_PATH_AAA "/${FRAMEWORKDIR}" "/aaa")
string(LENGTH ${BUNDLE_FRAME_REL_PATH_AAA} AAA_LENGTH)
math(EXPR RELATIVE_PATH_LENGTH "${AAA_LENGTH}-4")
string(SUBSTRING ${BUNDLE_FRAME_REL_PATH_AAA} 0 ${RELATIVE_PATH_LENGTH} BUNDLE_FRAME_REL_PATH)
set(PROJ_INSTALL_NAME_DIR "@executable_path/${BUNDLE_FRAME_REL_PATH}/${FRAMEWORKDIR}" )
else(APPLE)
set(FRAMEWORKDIR "")
set(BUNDLEDIR "")
set(PROJ_INSTALL_NAME_DIR "")
endif(APPLE)
set(PROJ_RESOURCES "" )
if(APPLE)
option(BUILD_FRAMEWORKS_AND_BUNDLE "if set to ON, build a library framework and application bundle, otherwise install classical UNIX bin/lib" OFF )
set(DEFAULT_BINDIR ${BUNDLEDIR})
boost_report_value(BUNDLEDIR)
boost_report_value(PROJ_INSTALL_NAME_DIR)
boost_report_value(FRAMEWORKDIR)
endif(APPLE)
-89
View File
@@ -1,89 +0,0 @@
################################################################################
# SociSystemInfo.cmake - part of CMake configuration of Proj.4 library
#
# Based on idea taken from http://code.google.com/p/softart/ project
################################################################################
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
################################################################################
# The following variables are defined:
# PROJ_COMPILER_NAME - name of compiler toolset, follows Boost toolset naming.
# PROJ_PLATFORM_NAME - target platform name: x64, x86 or win32
################################################################################
set(PROJ_COMPILER_NAME)
set(PROJ_PLATFORM_NAME)
if(MINGW OR UNIX)
exec_program(gcc ARGS -dumpversion OUTPUT_VARIABLE GCC_VERSION)
string(REPLACE "." "" GCC_VERSION_STR_FULL ${GCC_VERSION})
string(REGEX MATCH "[0-9]+\\.[0-9]+" GCC_VERSION_MAJOR_MINOR ${GCC_VERSION})
endif()
if(WIN32)
# Compilers, taken from http://predef.sourceforge.net/precomp.html#sec34
if(MSVC)
if(MSVC_VERSION EQUAL 1200)
set(PROJ_COMPILER_NAME "msvc-6.0")
endif()
if(MSVC_VERSION EQUAL 1300)
set(PROJ_COMPILER_NAME "msvc-7.0")
endif()
if(MSVC_VERSION EQUAL 1310)
set(PROJ_COMPILER_NAME "msvc-7.1") #Visual Studio 2003
endif()
if(MSVC_VERSION EQUAL 1400)
set(PROJ_COMPILER_NAME "msvc-8.0") #Visual Studio 2005
endif()
if(MSVC_VERSION EQUAL 1500)
set(PROJ_COMPILER_NAME "msvc-9.0") #Visual Studio 2008
endif()
if(MSVC_VERSION EQUAL 1600)
set(PROJ_COMPILER_NAME "msvc-10.0") #Visual Studio 2010
endif()
if(MSVC_VERSION EQUAL 1700)
set(PROJ_COMPILER_NAME "msvc-11.0") #Visual Studio 2012
endif()
if(MSVC_VERSION EQUAL 1800)
set(PROJ_COMPILER_NAME "msvc-12.0") #Visual Studio 2013
endif()
if(MSVC_VERSION EQUAL 1900) # CMake 3.1+
set(PROJ_COMPILER_NAME "msvc-14.0") #Visual Studio 2015
endif()
if(MSVC_VERSION GREATER 1900 AND MSVC_VERSION LESS 1920) # CMake 3.8+
set(PROJ_COMPILER_NAME "msvc-14.1") #Visual Studio 2017
endif()
endif(MSVC)
if(MINGW)
set(PROJ_COMPILER_NAME "mingw-${GCC_VERSION}")
endif( MINGW )
if(CMAKE_GENERATOR MATCHES "Win64")
set(PROJ_PLATFORM_NAME "x64")
else()
set(PROJ_PLATFORM_NAME "win32")
endif()
endif(WIN32)
if(UNIX)
set(PROJ_COMPILER_NAME "gcc-${GCC_VERSION}")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
set(PROJ_PLATFORM_NAME "x64")
else()
set(PROJ_PLATFORM_NAME "x86")
endif()
endif(UNIX)
if(NOT PROJ_COMPILER_NAME)
colormsg(_RED_ "WARNING:")
colormsg(RED "Could not determine compiler toolset name to set PROJ_COMPILER_NAME variable.")
endif()
if(NOT PROJ_COMPILER_NAME)
colormsg(_RED_ "WARNING:")
colormsg(RED "Could not determine platform name to set PROJ_COMPILER_NAME variable.")
endif()
-45
View File
@@ -1,45 +0,0 @@
#
# add test with sh script
#
function(proj_add_test_script_sh SH_NAME BIN_USE)
if(UNIX)
get_filename_component(testname ${SH_NAME} NAME_WE)
set(TEST_OK 1)
if(ARGV2)
set(TEST_OK 0)
set(GRID_FULLNAME ${PROJECT_SOURCE_DIR}/nad/${ARGV2})
if(EXISTS ${GRID_FULLNAME})
set(TEST_OK 1)
endif(EXISTS ${GRID_FULLNAME})
endif(ARGV2)
if( CMAKE_VERSION VERSION_LESS 2.8.4 )
set(TEST_OK 0)
message(STATUS "test with bash script need a cmake version >= 2.8.4")
endif()
if(${TEST_OK})
add_test( NAME "${testname}"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/nad
COMMAND ${PROJECT_SOURCE_DIR}/nad/${SH_NAME}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${${BIN_USE}}
)
endif(${TEST_OK})
endif(UNIX)
endfunction()
function(proj_add_gie_test TESTNAME TESTCASE)
set(GIE_BIN "gie")
set(TESTFILE ${CMAKE_SOURCE_DIR}/test/${TESTCASE})
add_test( NAME ${TESTNAME}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/test
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GIE_BIN}
${TESTFILE}
)
endfunction()
-456
View File
@@ -1,456 +0,0 @@
################################################################################
# SociUtilities.cmake - part of CMake configuration of Proj4 library
#
# Based on BoostUtilities.cmake from CMake configuration for Boost
################################################################################
# Copyright (C) 2007 Douglas Gregor <doug.gregor@gmail.com>
# Copyright (C) 2007 Troy Straszheim
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
#
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt
################################################################################
# Macros in this module:
#
# list_contains: Determine whether a string value is in a list.
#
# car: Return the first element in a list
#
# cdr: Return all but the first element in a list
#
# parse_arguments: Parse keyword arguments for use in other macros.
#
# proj_report_directory_property
#
# proj_target_output_name:
#
################################################################################
# This utility macro determines whether a particular string value
# occurs within a list of strings:
#
# list_contains(result string_to_find arg1 arg2 arg3 ... argn)
#
# This macro sets the variable named by result equal to TRUE if
# string_to_find is found anywhere in the following arguments.
macro(list_contains var value)
set(${var})
foreach (value2 ${ARGN})
if (${value} STREQUAL ${value2})
set(${var} TRUE)
endif (${value} STREQUAL ${value2})
endforeach (value2)
endmacro(list_contains)
# This utility macro extracts the first argument from the list of
# arguments given, and places it into the variable named var.
#
# car(var arg1 arg2 ...)
macro(car var)
set(${var} ${ARGV1})
endmacro(car)
# This utility macro extracts all of the arguments given except the
# first, and places them into the variable named var.
#
# car(var arg1 arg2 ...)
macro(cdr var junk)
set(${var} ${ARGN})
endmacro(cdr)
# The parse_arguments macro will take the arguments of another macro and
# define several variables. The first argument to parse_arguments is a
# prefix to put on all variables it creates. The second argument is a
# list of names, and the third argument is a list of options. Both of
# these lists should be quoted. The rest of parse_arguments are
# arguments from another macro to be parsed.
#
# parse_arguments(prefix arg_names options arg1 arg2...)
#
# For each item in options, parse_arguments will create a variable with
# that name, prefixed with prefix_. So, for example, if prefix is
# MY_MACRO and options is OPTION1;OPTION2, then parse_arguments will
# create the variables MY_MACRO_OPTION1 and MY_MACRO_OPTION2. These
# variables will be set to true if the option exists in the command line
# or false otherwise.
#
# For each item in arg_names, parse_arguments will create a variable
# with that name, prefixed with prefix_. Each variable will be filled
# with the arguments that occur after the given arg_name is encountered
# up to the next arg_name or the end of the arguments. All options are
# removed from these lists. parse_arguments also creates a
# prefix_DEFAULT_ARGS variable containing the list of all arguments up
# to the first arg_name encountered.
macro(parse_arguments prefix arg_names option_names)
set(DEFAULT_ARGS)
foreach(arg_name ${arg_names})
set(${prefix}_${arg_name})
endforeach(arg_name)
foreach(option ${option_names})
set(${prefix}_${option} FALSE)
endforeach(option)
set(current_arg_name DEFAULT_ARGS)
set(current_arg_list)
foreach(arg ${ARGN})
list_contains(is_arg_name ${arg} ${arg_names})
if (is_arg_name)
set(${prefix}_${current_arg_name} ${current_arg_list})
set(current_arg_name ${arg})
set(current_arg_list)
else (is_arg_name)
list_contains(is_option ${arg} ${option_names})
if (is_option)
set(${prefix}_${arg} TRUE)
else (is_option)
set(current_arg_list ${current_arg_list} ${arg})
endif (is_option)
endif (is_arg_name)
endforeach(arg)
set(${prefix}_${current_arg_name} ${current_arg_list})
endmacro(parse_arguments)
# Perform a reverse topological sort on the given LIST.
#
# topological_sort(my_list "MY_" "_EDGES")
#
# LIST is the name of a variable containing a list of elements to be
# sorted in reverse topological order. Each element in the list has a
# set of outgoing edges (for example, those other list elements that
# it depends on). In the resulting reverse topological ordering
# (written back into the variable named LIST), an element will come
# later in the list than any of the elements that can be reached by
# following its outgoing edges and the outgoing edges of any vertices
# they target, recursively. Thus, if the edges represent dependencies
# on build targets, for example, the reverse topological ordering is
# the order in which one would build those targets.
#
# For each element E in this list, the edges for E are contained in
# the variable named ${PREFIX}${E}${SUFFIX}, where E is the
# upper-cased version of the element in the list. If no such variable
# exists, then it is assumed that there are no edges. For example, if
# my_list contains a, b, and c, one could provide a dependency graph
# using the following variables:
#
# MY_A_EDGES b
# MY_B_EDGES
# MY_C_EDGES a b
#
# With the involcation of topological_sort shown above and these
# variables, the resulting reverse topological ordering will be b, a,
# c.
function(topological_sort LIST PREFIX SUFFIX)
# Clear the stack and output variable
set(VERTICES "${${LIST}}")
set(STACK)
set(${LIST})
# Loop over all of the vertices, starting the topological sort from
# each one.
foreach(VERTEX ${VERTICES})
string(TOUPPER ${VERTEX} UPPER_VERTEX)
# If we haven't already processed this vertex, start a depth-first
# search from where.
if (NOT FOUND_${UPPER_VERTEX})
# Push this vertex onto the stack with all of its outgoing edges
string(REPLACE ";" " " NEW_ELEMENT
"${VERTEX};${${PREFIX}${UPPER_VERTEX}${SUFFIX}}")
list(APPEND STACK ${NEW_ELEMENT})
# We've now seen this vertex
set(FOUND_${UPPER_VERTEX} TRUE)
# While the depth-first search stack is not empty
list(LENGTH STACK STACK_LENGTH)
while(STACK_LENGTH GREATER 0)
# Remove the vertex and its remaining out-edges from the top
# of the stack
list(GET STACK -1 OUT_EDGES)
list(REMOVE_AT STACK -1)
# Get the source vertex and the list of out-edges
separate_arguments(OUT_EDGES)
list(GET OUT_EDGES 0 SOURCE)
list(REMOVE_AT OUT_EDGES 0)
# While there are still out-edges remaining
list(LENGTH OUT_EDGES OUT_DEGREE)
while (OUT_DEGREE GREATER 0)
# Pull off the first outgoing edge
list(GET OUT_EDGES 0 TARGET)
list(REMOVE_AT OUT_EDGES 0)
string(TOUPPER ${TARGET} UPPER_TARGET)
if (NOT FOUND_${UPPER_TARGET})
# We have not seen the target before, so we will traverse
# its outgoing edges before coming back to our
# source. This is the key to the depth-first traversal.
# We've now seen this vertex
set(FOUND_${UPPER_TARGET} TRUE)
# Push the remaining edges for the current vertex onto the
# stack
string(REPLACE ";" " " NEW_ELEMENT
"${SOURCE};${OUT_EDGES}")
list(APPEND STACK ${NEW_ELEMENT})
# Setup the new source and outgoing edges
set(SOURCE ${TARGET})
string(TOUPPER ${SOURCE} UPPER_SOURCE)
set(OUT_EDGES
${${PREFIX}${UPPER_SOURCE}${SUFFIX}})
endif(NOT FOUND_${UPPER_TARGET})
list(LENGTH OUT_EDGES OUT_DEGREE)
endwhile (OUT_DEGREE GREATER 0)
# We have finished all of the outgoing edges for
# SOURCE; add it to the resulting list.
list(APPEND ${LIST} ${SOURCE})
# Check the length of the stack
list(LENGTH STACK STACK_LENGTH)
endwhile(STACK_LENGTH GREATER 0)
endif (NOT FOUND_${UPPER_VERTEX})
endforeach(VERTEX)
set(${LIST} ${${LIST}} PARENT_SCOPE)
endfunction(topological_sort)
# Small little hack that tweaks a component name (as used for CPack)
# to make sure to avoid certain names that cause problems. Sets the
# variable named varname to the "sanitized" name.
#
# FIXME: This is a complete hack. We probably need to fix the CPack
# generators (NSIS in particular) to get rid of the need for this.
macro(fix_cpack_component_name varname name)
if (${name} STREQUAL "foreach")
set(${varname} "boost_foreach")
else()
set(${varname} ${name})
endif()
endmacro()
#
# A big shout out to the cmake gurus @ compiz
#
function (colormsg)
string (ASCII 27 _escape)
set(WHITE "29")
set(GRAY "30")
set(RED "31")
set(GREEN "32")
set(YELLOW "33")
set(BLUE "34")
set(MAG "35")
set(CYAN "36")
foreach (color WHITE GRAY RED GREEN YELLOW BLUE MAG CYAN)
set(HI${color} "1\;${${color}}")
set(LO${color} "2\;${${color}}")
set(_${color}_ "4\;${${color}}")
set(_HI${color}_ "1\;4\;${${color}}")
set(_LO${color}_ "2\;4\;${${color}}")
endforeach()
set(str "")
set(coloron FALSE)
foreach(arg ${ARGV})
if (NOT ${${arg}} STREQUAL "")
if (CMAKE_COLOR_MAKEFILE)
set(str "${str}${_escape}[${${arg}}m")
set(coloron TRUE)
endif()
else()
set(str "${str}${arg}")
if (coloron)
set(str "${str}${_escape}[0m")
set(coloron FALSE)
endif()
set(str "${str} ")
endif()
endforeach()
message(STATUS ${str})
endfunction()
# colormsg("Colors:"
# WHITE "white" GRAY "gray" GREEN "green"
# RED "red" YELLOW "yellow" BLUE "blue" MAG "mag" CYAN "cyan"
# _WHITE_ "white" _GRAY_ "gray" _GREEN_ "green"
# _RED_ "red" _YELLOW_ "yellow" _BLUE_ "blue" _MAG_ "mag" _CYAN_ "cyan"
# _HIWHITE_ "white" _HIGRAY_ "gray" _HIGREEN_ "green"
# _HIRED_ "red" _HIYELLOW_ "yellow" _HIBLUE_ "blue" _HIMAG_ "mag" _HICYAN_ "cyan"
# HIWHITE "white" HIGRAY "gray" HIGREEN "green"
# HIRED "red" HIYELLOW "yellow" HIBLUE "blue" HIMAG "mag" HICYAN "cyan"
# "right?")
#
# pretty-prints the value of a variable so that the
# equals signs align
#
function(boost_report_value NAME)
string(LENGTH "${NAME}" varlen)
# LOG
#message(STATUS "boost_report_value: NAME=${NAME} (${varlen})")
#message(STATUS "boost_report_value: \${NAME}=${${NAME}}")
math(EXPR padding_len 40-${varlen})
string(SUBSTRING " "
0 ${padding_len} varpadding)
colormsg("${NAME}${varpadding} = ${${NAME}}")
endfunction()
function(trace NAME)
if(BOOST_CMAKE_TRACE)
string(LENGTH "${NAME}" varlen)
math(EXPR padding_len 40-${varlen})
string(SUBSTRING "........................................"
0 ${padding_len} varpadding)
message("${NAME} ${varpadding} ${${NAME}}")
endif()
endfunction()
#
# pretty-prints the value of a variable so that the
# equals signs align
#
function(boost_report_pretty PRETTYNAME VARNAME)
string(LENGTH "${PRETTYNAME}" varlen)
math(EXPR padding_len 30-${varlen})
string(SUBSTRING " "
0 ${padding_len} varpadding)
message(STATUS "${PRETTYNAME}${varpadding} = ${${VARNAME}}")
endfunction()
#
# assert that ARG is actually a library target
#
macro(dependency_check ARG)
trace(ARG)
if (NOT "${ARG}" STREQUAL "")
get_target_property(deptype ${ARG} TYPE)
if(NOT deptype MATCHES ".*_LIBRARY$")
set(DEPENDENCY_OKAY FALSE)
list(APPEND DEPENDENCY_FAILURES ${ARG})
endif()
endif()
endmacro()
#
# Pretty-print of given property of current directory.
#
macro(proj_report_directory_property PROPNAME)
get_directory_property(${PROPNAME} ${PROPNAME})
boost_report_value(${PROPNAME})
endmacro()
#
# Scans the current directory and returns a list of subdirectories.
# Author: Robert Fleming
# Source: http://www.cmake.org/pipermail/cmake/2008-February/020114.html
#
# Third parameter is 1 if you want relative paths returned.
# Usage: list_subdirectories(the_list_is_returned_here /path/to/project TRUE)
#
macro(list_subdirectories retval curdir return_relative)
file(GLOB sub-dir RELATIVE ${curdir} *)
set(list_of_dirs "")
foreach(dir ${sub-dir})
if(IS_DIRECTORY ${curdir}/${dir})
if (${return_relative})
set(list_of_dirs ${list_of_dirs} ${dir})
else()
set(list_of_dirs ${list_of_dirs} ${curdir}/${dir})
endif()
endif()
endforeach()
set(${retval} ${list_of_dirs})
endmacro()
#
# Generates output name for given target depending on platform and version.
# For instance, on Windows, libraries get ABI version suffix soci_coreXY.{dll|lib}.
#
function(proj_target_output_name TARGET_NAME OUTPUT_NAME)
if(NOT DEFINED TARGET_NAME)
message(SEND_ERROR "Error, the variable TARGET_NAME is not defined!")
endif()
if(NOT DEFINED ${PROJECT_INTERN_NAME}_VERSION)
message(SEND_ERROR "Error, the variable ${${PROJECT_INTERN_NAME}_VERSION} is not defined!")
endif()
# On Windows, ABI version is specified using binary file name suffix.
# On Unix, suffix is empty and SOVERSION is used instead.
if (WIN32)
string(LENGTH "${${PROJECT_INTERN_NAME}_ABI_VERSION}" abilen)
if(abilen GREATER 0)
set(SUFFIX "_${${PROJECT_INTERN_NAME}_ABI_VERSION}")
endif()
endif()
set(${OUTPUT_NAME} ${TARGET_NAME}${SUFFIX} PARENT_SCOPE)
endfunction()
#
# conversion from lla name to lla convert name ( without lla extension)
#
function(proj_lla_output_name LLA_INPUT_NAME LLA_OUTPUT_NAME )
get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE)
get_filename_component(pathname ${LLA_INPUT_NAME} PATH)
set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE)
set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE)
endfunction()
function(proj_lla_target_name LLA_INPUT_NAME LLA_TARGET )
get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE)
set(${LLA_TARGET} ${filename} PARENT_SCOPE)
endfunction()
#
# in place conversion of lla file to gsb
#
function(proj_convert_grid_lla2gsb GRID_DIRECTORY)
set(NAD2BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set(NAD2BIN_PATH ${NAD2BIN_DIR}/nad2bin${CMAKE_EXECUTABLE_SUFFIX})
file(TO_NATIVE_PATH ${NAD2BIN_PATH} NAD2BIN_EXE)
file(GLOB LLA_FILES ${${GRID_DIRECTORY}}/*.lla)
foreach(LLA ${LLA_FILES} )
proj_lla_output_name(${LLA} DEST_FILE)
file(TO_NATIVE_PATH ${DEST_FILE} DEST)
proj_lla_target_name(${LLA} LLA_TARGET)
if(NOT EXISTS ${DEST})
add_custom_target( ${LLA_TARGET} ALL
COMMAND ${NAD2BIN_EXE} ${DEST} "<" ${LLA}
DEPENDS nad2bin )
endif(NOT EXISTS ${DEST})
endforeach(LLA)
endfunction()
#
# add lla output list to an existing file list
#
function(proj_append_lla_output_file LLA_INPUT_FILE FILE_LIST)
set(LIST_OUT ${${FILE_LIST}})
foreach(LLA ${${LLA_INPUT_FILE}} )
proj_lla_output_name(${LLA} DEST_FILE)
file(TO_NATIVE_PATH ${DEST_FILE} DEST)
set(LIST_OUT ${LIST_OUT} ${DEST_FILE} )
endforeach(LLA ${LLA_INPUT_FILE})
set(${FILE_LIST} ${LIST_OUT} PARENT_SCOPE)
endfunction()
-47
View File
@@ -1,47 +0,0 @@
################################################################################
# Proj4Version.cmake - part of CMake configuration of Proj4 library
################################################################################
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
#
# Distributed under the Boost Software License, Version 1.0
################################################################################
# Macros in this module:
#
# proj_version - defines version information for PROJ library
# (best known as PROJ4 because MAJOR version is 4 since a very long time)
################################################################################
# Defines version information for PROJ library
#
# proj_version(MAJOR major_version MINOR minor_version PATCH patch_level)
#
# MAJOR.MINOR version is used to set SOVERSION
#
macro(proj_version)
parse_arguments(THIS_VERSION "MAJOR;MINOR;PATCH;"
""
${ARGN})
# Set version components
set(${PROJECT_INTERN_NAME}_VERSION_MAJOR ${THIS_VERSION_MAJOR})
set(${PROJECT_INTERN_NAME}_VERSION_MINOR ${THIS_VERSION_MINOR})
set(${PROJECT_INTERN_NAME}_VERSION_PATCH ${THIS_VERSION_PATCH})
# Set VERSION string
set(${PROJECT_INTERN_NAME}_VERSION
"${${PROJECT_INTERN_NAME}_VERSION_MAJOR}.${${PROJECT_INTERN_NAME}_VERSION_MINOR}.${${PROJECT_INTERN_NAME}_VERSION_PATCH}")
# Set ABI version string used to name binary output
# On Windows, ABI version is specified using binary file name suffix.
if(WIN32)
set(${PROJECT_INTERN_NAME}_ABI_VERSION
"${${PROJECT_INTERN_NAME}_VERSION_MAJOR}_${${PROJECT_INTERN_NAME}_VERSION_MINOR}")
endif()
message(STATUS "")
boost_report_value(${PROJECT_INTERN_NAME}_VERSION)
if(WIN32)
boost_report_value(${PROJECT_INTERN_NAME}_ABI_VERSION)
endif(WIN32)
endmacro()
-4
View File
@@ -1,4 +0,0 @@
if (CMAKE_MAJOR_VERSION GREATER 2)
cmake_policy(SET CMP0042 NEW) # osx rpath
cmake_policy(SET CMP0011 NEW) # policy setting
endif()
-48
View File
@@ -1,48 +0,0 @@
# Version checking for @PROJECT_NAME@
set (PACKAGE_VERSION "@PROJ_VERSION@")
set (PACKAGE_VERSION_MAJOR "@PROJ_VERSION_MAJOR@")
set (PACKAGE_VERSION_MINOR "@PROJ_VERSION_MINOR@")
set (PACKAGE_VERSION_PATCH "@PROJ_VERSION_PATCH@")
if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_NAME@")
# Check package name (in particular, because of the way cmake finds
# package config files, the capitalization could easily be "wrong").
# This is necessary to ensure that the automatically generated
# variables, e.g., <package>_FOUND, are consistently spelled.
set (REASON "package = @PROJECT_NAME@, NOT ${PACKAGE_FIND_NAME}")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (NOT (APPLE OR (NOT DEFINED CMAKE_SIZEOF_VOID_P) OR
CMAKE_SIZEOF_VOID_P EQUAL @CMAKE_SIZEOF_VOID_P@))
# Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple
# since a multi-architecture library is built for that platform).
set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (MSVC AND NOT MSVC_VERSION STREQUAL "@MSVC_VERSION@")
# Reject if there's a mismatch in MSVC compiler versions
set (REASON "_MSC_VER = @MSVC_VERSION@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (NOT CMAKE_CROSSCOMPILING STREQUAL "@CMAKE_CROSSCOMPILING@")
# Reject if there's a mismatch in ${CMAKE_CROSSCOMPILING}
set (REASON "cross-compiling = @CMAKE_CROSSCOMPILING@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (CMAKE_CROSSCOMPILING AND
NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND
CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@"))
# Reject if cross-compiling and there's a mismatch in the target system
set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (PACKAGE_FIND_VERSION)
if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
set (PACKAGE_VERSION_EXACT TRUE)
elseif (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION
AND PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR)
set (PACKAGE_VERSION_COMPATIBLE TRUE)
endif ()
endif ()
# If unsuitable, append the reason to the package version so that it's
# visible to the user.
if (PACKAGE_VERSION_UNSUITABLE)
set (PACKAGE_VERSION "${PACKAGE_VERSION} (${REASON})")
endif ()
-32
View File
@@ -1,32 +0,0 @@
# Configure @PROJECT_NAME@
#
# Set
# @PROJECT_NAME@_FOUND = 1
# @PROJECT_NAME@_INCLUDE_DIRS = /usr/local/include
# @PROJECT_NAME@_LIBRARIES = proj
# @PROJECT_NAME@_LIBRARY_DIRS = /usr/local/lib
# @PROJECT_NAME@_BINARY_DIRS = /usr/local/bin
# @PROJECT_NAME@_VERSION = 4.9.1 (for example)
message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}")
# @PROJECT_NAME@_VERSION is set by version file
message (STATUS
"@PROJECT_NAME@ configuration, version ${@PROJECT_NAME@_VERSION}")
# Tell the user project where to find our headers and libraries
get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
get_filename_component (_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE)
set (@PROJECT_NAME@_INCLUDE_DIRS "${_ROOT}/@INCLUDEDIR@")
set (@PROJECT_NAME@_LIBRARY_DIRS "${_ROOT}/@LIBDIR@")
set (@PROJECT_NAME@_BINARY_DIRS "${_ROOT}/@BINDIR@")
set (@PROJECT_NAME@_LIBRARIES proj)
# Read in the exported definition of the library
include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake")
include ("${_DIR}/@PROJECT_NAME_LOWER@-namespace-targets.cmake")
unset (_ROOT)
unset (_DIR)
# For backward compatibility with old releases of libgeotiff
set (@PROJECT_NAME@_INCLUDE_DIR ${@PROJECT_NAME@_INCLUDE_DIRS})
BIN
View File
Binary file not shown.
+72
View File
@@ -0,0 +1,72 @@
// COMTest1.cpp : Implementation of DLL Exports.
// Note: Proxy/Stub Information
// To build a separate proxy/stub DLL,
// run nmake -f COMTest1ps.mk in the project directory.
#include "stdafx.h"
#include "resource.h"
#include <initguid.h>
#include "COMTest1.h"
#include "COMTest1_i.c"
#include "ProjDef.h"
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_ProjDef, CProjDef)
END_OBJECT_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
_Module.Init(ObjectMap, hInstance, &LIBID_PROJ4Lib);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}
/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
return _Module.RegisterServer(TRUE);
}
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}
+9
View File
@@ -0,0 +1,9 @@
; COMTest1.def : Declares the module parameters.
LIBRARY "PROJ4COM.DLL"
EXPORTS
DllCanUnloadNow @1 PRIVATE
DllGetClassObject @2 PRIVATE
DllRegisterServer @3 PRIVATE
DllUnregisterServer @4 PRIVATE
+350
View File
@@ -0,0 +1,350 @@
# Microsoft Developer Studio Project File - Name="COMTest1" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=COMTest1 - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "COMTest1.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "COMTest1.mak" CFG="COMTest1 - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "COMTest1 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "COMTest1 - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "COMTest1 - Win32 Release MinSize" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "COMTest1 - Win32 Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "COMTest1 - Win32 Unicode Release MinSize" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "COMTest1 - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "COMTest1 - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "C:\warmerda\proj\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib C:\warmerda\proj\src\proj_i.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/PROJ4COM.dll" /pdbtype:sept
# Begin Custom Build - Performing registration
OutDir=.\Debug
TargetPath=.\Debug\PROJ4COM.dll
InputPath=.\Debug\PROJ4COM.dll
SOURCE="$(InputPath)"
"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
# End Custom Build
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "DebugU"
# PROP BASE Intermediate_Dir "DebugU"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "DebugU"
# PROP Intermediate_Dir "DebugU"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# Begin Custom Build - Performing registration
OutDir=.\DebugU
TargetPath=.\DebugU\COMTest1.dll
InputPath=.\DebugU\COMTest1.dll
SOURCE="$(InputPath)"
"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
if "%OS%"=="" goto NOTNT
if not "%OS%"=="Windows_NT" goto NOTNT
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
goto end
:NOTNT
echo Warning : Cannot register Unicode DLL on Windows 95
:end
# End Custom Build
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinSize"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseMinSize"
# PROP BASE Intermediate_Dir "ReleaseMinSize"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseMinSize"
# PROP Intermediate_Dir "ReleaseMinSize"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# Begin Custom Build - Performing registration
OutDir=.\ReleaseMinSize
TargetPath=.\ReleaseMinSize\COMTest1.dll
InputPath=.\ReleaseMinSize\COMTest1.dll
SOURCE="$(InputPath)"
"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
# End Custom Build
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinDependency"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseMinDependency"
# PROP BASE Intermediate_Dir "ReleaseMinDependency"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseMinDependency"
# PROP Intermediate_Dir "ReleaseMinDependency"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# Begin Custom Build - Performing registration
OutDir=.\ReleaseMinDependency
TargetPath=.\ReleaseMinDependency\COMTest1.dll
InputPath=.\ReleaseMinDependency\COMTest1.dll
SOURCE="$(InputPath)"
"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
# End Custom Build
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinSize"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseUMinSize"
# PROP BASE Intermediate_Dir "ReleaseUMinSize"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseUMinSize"
# PROP Intermediate_Dir "ReleaseUMinSize"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# Begin Custom Build - Performing registration
OutDir=.\ReleaseUMinSize
TargetPath=.\ReleaseUMinSize\COMTest1.dll
InputPath=.\ReleaseUMinSize\COMTest1.dll
SOURCE="$(InputPath)"
"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
if "%OS%"=="" goto NOTNT
if not "%OS%"=="Windows_NT" goto NOTNT
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
goto end
:NOTNT
echo Warning : Cannot register Unicode DLL on Windows 95
:end
# End Custom Build
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinDependency"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseUMinDependency"
# PROP BASE Intermediate_Dir "ReleaseUMinDependency"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseUMinDependency"
# PROP Intermediate_Dir "ReleaseUMinDependency"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# Begin Custom Build - Performing registration
OutDir=.\ReleaseUMinDependency
TargetPath=.\ReleaseUMinDependency\COMTest1.dll
InputPath=.\ReleaseUMinDependency\COMTest1.dll
SOURCE="$(InputPath)"
"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
if "%OS%"=="" goto NOTNT
if not "%OS%"=="Windows_NT" goto NOTNT
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
goto end
:NOTNT
echo Warning : Cannot register Unicode DLL on Windows 95
:end
# End Custom Build
!ENDIF
# Begin Target
# Name "COMTest1 - Win32 Debug"
# Name "COMTest1 - Win32 Unicode Debug"
# Name "COMTest1 - Win32 Release MinSize"
# Name "COMTest1 - Win32 Release MinDependency"
# Name "COMTest1 - Win32 Unicode Release MinSize"
# Name "COMTest1 - Win32 Unicode Release MinDependency"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\COMTest1.cpp
# End Source File
# Begin Source File
SOURCE=.\COMTest1.def
# End Source File
# Begin Source File
SOURCE=.\COMTest1.idl
!IF "$(CFG)" == "COMTest1 - Win32 Debug"
# ADD MTL /tlb ".\PROJ4COM.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Debug"
# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinSize"
# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinDependency"
# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinSize"
# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf
!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinDependency"
# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\COMTest1.rc
# End Source File
# Begin Source File
SOURCE=.\ProjDef.cpp
# End Source File
# Begin Source File
SOURCE=.\StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\ProjDef.h
# End Source File
# Begin Source File
SOURCE=.\Resource.h
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\ProjDef.rgs
# End Source File
# End Group
# End Target
# End Project
+29
View File
@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "COMTest1"=.\COMTest1.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################
+44
View File
@@ -0,0 +1,44 @@
// COMTest1.idl : IDL source for COMTest1.dll
//
// This file will be processed by the MIDL tool to
// produce the type library (COMTest1.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(28849AA6-E8FB-4077-8D7A-D83CDFC2DC44),
dual,
helpstring("IProjDef Interface"),
pointer_default(unique)
]
interface IProjDef : IDispatch
{
[id(1), helpstring("method Initialize")] HRESULT Initialize([in] BSTR proj_string, [out, retval] int *success );
[id(2), helpstring("method TransformPoint3D")] HRESULT TransformPoint3D([in] IUnknown *srcProj,
[in,out] double *x, [in, out] double *y, [in, out] double *z, [out, retval] int *success );
[id(3), helpstring("method GetHandle")] HRESULT GetHandle([out, retval] long *pHandle );
[id(4), helpstring("method IsLatLong")] HRESULT IsLatLong([out, retval] int *result);
[id(5), helpstring("method GetLastError")] HRESULT GetLastError([out, retval] BSTR *error );
};
[
uuid(A0ADE3D8-9A85-4BD3-AD56-BFEF42495130),
version(1.0),
helpstring("PROJ.4")
]
library PROJ4Lib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(B9B8F0A3-D9F8-4537-9A03-329DC9AE144C),
helpstring("ProjDef Class")
]
coclass ProjDef
{
[default] interface IProjDef;
};
};
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+89
View File
@@ -0,0 +1,89 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: COMTest1 - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating command line "midl.exe /tlb ".\PROJ4COM.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf "C:\warmerda\proj\com\COMTest1.idl""
Creating command line "rc.exe /l 0x409 /fo"Debug/COMTest1.res" /d "_DEBUG" "C:\warmerda\proj\com\COMTest1.rc""
Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F4.tmp" with contents
[
/nologo /MTd /W3 /Gm /ZI /Od /I "C:\warmerda\proj\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/COMTest1.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"C:\warmerda\proj\com\COMTest1.cpp"
"C:\warmerda\proj\com\ProjDef.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F4.tmp"
Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F5.tmp" with contents
[
/nologo /MTd /W3 /Gm /ZI /Od /I "C:\warmerda\proj\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/COMTest1.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"C:\warmerda\proj\com\StdAfx.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F5.tmp"
Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F6.tmp" with contents
[
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib C:\warmerda\proj\src\proj_i.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"Debug/PROJ4COM.pdb" /debug /machine:I386 /def:".\COMTest1.def" /out:"Debug/PROJ4COM.dll" /implib:"Debug/PROJ4COM.lib" /pdbtype:sept
.\Debug\COMTest1.obj
.\Debug\ProjDef.obj
.\Debug\StdAfx.obj
.\Debug\COMTest1.res
]
Creating command line "link.exe @C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F6.tmp"
Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F7.bat" with contents
[
@echo off
regsvr32 /s /c ".\Debug\PROJ4COM.dll"
echo regsvr32 exec. time > ".\Debug\regsvr32.trg"
]
Creating command line "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F7.bat"
Creating Type Library...
Microsoft (R) MIDL Compiler Version 5.01.0164
Copyright (c) Microsoft Corp 1991-1997. All rights reserved.
Processing C:\warmerda\proj\com\COMTest1.idl
COMTest1.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\oaidl.idl
oaidl.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\objidl.idl
objidl.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\unknwn.idl
unknwn.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\wtypes.idl
wtypes.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\basetsd.h
basetsd.h
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\guiddef.h
guiddef.h
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\ocidl.idl
ocidl.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\oleidl.idl
oleidl.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\servprov.idl
servprov.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\urlmon.idl
urlmon.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\msxml.idl
msxml.idl
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\oaidl.acf
oaidl.acf
Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\ocidl.acf
ocidl.acf
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
COMTest1.cpp
ProjDef.cpp
Generating Code...
Linking...
Creating library Debug/PROJ4COM.lib and object Debug/PROJ4COM.exp
<h3>Output Window</h3>
Performing registration
<h3>Results</h3>
PROJ4COM.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>
+128
View File
@@ -0,0 +1,128 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"1 TYPELIB ""COMTest1.tlb""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "\0"
VALUE "FileDescription", "PROJ.4 COM Module\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "PROJ4\0"
VALUE "LegalCopyright", "Copyright 2005\0"
VALUE "LegalTrademarks", "\0"
VALUE "OLESelfRegister", "\0"
VALUE "OriginalFilename", "PROJ4COM.DLL\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "PROJ.4 COM\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// REGISTRY
//
IDR_PROJDEF REGISTRY DISCARDABLE "ProjDef.rgs"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_PROJNAME "PROJ4COM"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
1 TYPELIB "PROJ4COM.tlb"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
+571
View File
@@ -0,0 +1,571 @@
/* this ALWAYS GENERATED file contains the proxy stub code */
/* File created by MIDL compiler version 5.01.0164 */
/* at Tue Oct 18 23:21:00 2005
*/
/* Compiler settings for C:\warmerda\proj\com\COMTest1.idl:
Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext
error checks: allocation ref bounds_check enum stub_data
*/
//@@MIDL_FILE_HEADING( )
#define USE_STUBLESS_PROXY
/* verify that the <rpcproxy.h> version is high enough to compile this file*/
#ifndef __REDQ_RPCPROXY_H_VERSION__
#define __REQUIRED_RPCPROXY_H_VERSION__ 440
#endif
#include "rpcproxy.h"
#ifndef __RPCPROXY_H_VERSION__
#error this stub requires an updated version of <rpcproxy.h>
#endif // __RPCPROXY_H_VERSION__
#include "COMTest1.h"
#define TYPE_FORMAT_STRING_SIZE 81
#define PROC_FORMAT_STRING_SIZE 171
typedef struct _MIDL_TYPE_FORMAT_STRING
{
short Pad;
unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
} MIDL_TYPE_FORMAT_STRING;
typedef struct _MIDL_PROC_FORMAT_STRING
{
short Pad;
unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
} MIDL_PROC_FORMAT_STRING;
extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
/* Object interface: IUnknown, ver. 0.0,
GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
/* Object interface: IDispatch, ver. 0.0,
GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
/* Object interface: IProjDef, ver. 0.0,
GUID={0x28849AA6,0xE8FB,0x4077,{0x8D,0x7A,0xD8,0x3C,0xDF,0xC2,0xDC,0x44}} */
extern const MIDL_STUB_DESC Object_StubDesc;
extern const MIDL_SERVER_INFO IProjDef_ServerInfo;
#pragma code_seg(".orpc")
extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[1];
static const MIDL_STUB_DESC Object_StubDesc =
{
0,
NdrOleAllocate,
NdrOleFree,
0,
0,
0,
0,
0,
__MIDL_TypeFormatString.Format,
1, /* -error bounds_check flag */
0x20000, /* Ndr library version */
0,
0x50100a4, /* MIDL Version 5.1.164 */
0,
UserMarshalRoutines,
0, /* notify & notify_flag routine table */
1, /* Flags */
0, /* Reserved3 */
0, /* Reserved4 */
0 /* Reserved5 */
};
static const unsigned short IProjDef_FormatStringOffsetTable[] =
{
(unsigned short) -1,
(unsigned short) -1,
(unsigned short) -1,
(unsigned short) -1,
0,
34,
86,
114,
142
};
static const MIDL_SERVER_INFO IProjDef_ServerInfo =
{
&Object_StubDesc,
0,
__MIDL_ProcFormatString.Format,
&IProjDef_FormatStringOffsetTable[-3],
0,
0,
0,
0
};
static const MIDL_STUBLESS_PROXY_INFO IProjDef_ProxyInfo =
{
&Object_StubDesc,
__MIDL_ProcFormatString.Format,
&IProjDef_FormatStringOffsetTable[-3],
0,
0,
0
};
CINTERFACE_PROXY_VTABLE(12) _IProjDefProxyVtbl =
{
&IProjDef_ProxyInfo,
&IID_IProjDef,
IUnknown_QueryInterface_Proxy,
IUnknown_AddRef_Proxy,
IUnknown_Release_Proxy ,
0 /* (void *)-1 /* IDispatch::GetTypeInfoCount */ ,
0 /* (void *)-1 /* IDispatch::GetTypeInfo */ ,
0 /* (void *)-1 /* IDispatch::GetIDsOfNames */ ,
0 /* IDispatch_Invoke_Proxy */ ,
(void *)-1 /* IProjDef::Initialize */ ,
(void *)-1 /* IProjDef::TransformPoint3D */ ,
(void *)-1 /* IProjDef::GetHandle */ ,
(void *)-1 /* IProjDef::IsLatLong */ ,
(void *)-1 /* IProjDef::GetLastError */
};
static const PRPC_STUB_FUNCTION IProjDef_table[] =
{
STUB_FORWARDING_FUNCTION,
STUB_FORWARDING_FUNCTION,
STUB_FORWARDING_FUNCTION,
STUB_FORWARDING_FUNCTION,
NdrStubCall2,
NdrStubCall2,
NdrStubCall2,
NdrStubCall2,
NdrStubCall2
};
CInterfaceStubVtbl _IProjDefStubVtbl =
{
&IID_IProjDef,
&IProjDef_ServerInfo,
12,
&IProjDef_table[-3],
CStdStubBuffer_DELEGATING_METHODS
};
#pragma data_seg(".rdata")
static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[1] =
{
{
BSTR_UserSize
,BSTR_UserMarshal
,BSTR_UserUnmarshal
,BSTR_UserFree
}
};
#if !defined(__RPC_WIN32__)
#error Invalid build platform for this stub.
#endif
#if !(TARGET_IS_NT40_OR_LATER)
#error You need a Windows NT 4.0 or later to run this stub because it uses these features:
#error -Oif or -Oicf, [wire_marshal] or [user_marshal] attribute, more than 32 methods in the interface.
#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
#error This app will die there with the RPC_X_WRONG_STUB_VERSION error.
#endif
static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
{
0,
{
/* Procedure Initialize */
0x33, /* FC_AUTO_HANDLE */
0x6c, /* Old Flags: object, Oi2 */
/* 2 */ NdrFcLong( 0x0 ), /* 0 */
/* 6 */ NdrFcShort( 0x7 ), /* 7 */
#ifndef _ALPHA_
/* 8 */ NdrFcShort( 0x10 ), /* x86, MIPS, PPC Stack size/offset = 16 */
#else
NdrFcShort( 0x20 ), /* Alpha Stack size/offset = 32 */
#endif
/* 10 */ NdrFcShort( 0x0 ), /* 0 */
/* 12 */ NdrFcShort( 0x10 ), /* 16 */
/* 14 */ 0x6, /* Oi2 Flags: clt must size, has return, */
0x3, /* 3 */
/* Parameter proj_string */
/* 16 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
#ifndef _ALPHA_
/* 18 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */
#else
NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */
#endif
/* 20 */ NdrFcShort( 0x1a ), /* Type Offset=26 */
/* Parameter success */
/* 22 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
#ifndef _ALPHA_
/* 24 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */
#else
NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */
#endif
/* 26 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Return value */
/* 28 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
#ifndef _ALPHA_
/* 30 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */
#else
NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */
#endif
/* 32 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Procedure TransformPoint3D */
/* 34 */ 0x33, /* FC_AUTO_HANDLE */
0x6c, /* Old Flags: object, Oi2 */
/* 36 */ NdrFcLong( 0x0 ), /* 0 */
/* 40 */ NdrFcShort( 0x8 ), /* 8 */
#ifndef _ALPHA_
/* 42 */ NdrFcShort( 0x1c ), /* x86, MIPS, PPC Stack size/offset = 28 */
#else
NdrFcShort( 0x38 ), /* Alpha Stack size/offset = 56 */
#endif
/* 44 */ NdrFcShort( 0x30 ), /* 48 */
/* 46 */ NdrFcShort( 0x40 ), /* 64 */
/* 48 */ 0x6, /* Oi2 Flags: clt must size, has return, */
0x6, /* 6 */
/* Parameter srcProj */
/* 50 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
#ifndef _ALPHA_
/* 52 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */
#else
NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */
#endif
/* 54 */ NdrFcShort( 0x28 ), /* Type Offset=40 */
/* Parameter x */
/* 56 */ NdrFcShort( 0x158 ), /* Flags: in, out, base type, simple ref, */
#ifndef _ALPHA_
/* 58 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */
#else
NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */
#endif
/* 60 */ 0xc, /* FC_DOUBLE */
0x0, /* 0 */
/* Parameter y */
/* 62 */ NdrFcShort( 0x158 ), /* Flags: in, out, base type, simple ref, */
#ifndef _ALPHA_
/* 64 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */
#else
NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */
#endif
/* 66 */ 0xc, /* FC_DOUBLE */
0x0, /* 0 */
/* Parameter z */
/* 68 */ NdrFcShort( 0x158 ), /* Flags: in, out, base type, simple ref, */
#ifndef _ALPHA_
/* 70 */ NdrFcShort( 0x10 ), /* x86, MIPS, PPC Stack size/offset = 16 */
#else
NdrFcShort( 0x20 ), /* Alpha Stack size/offset = 32 */
#endif
/* 72 */ 0xc, /* FC_DOUBLE */
0x0, /* 0 */
/* Parameter success */
/* 74 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
#ifndef _ALPHA_
/* 76 */ NdrFcShort( 0x14 ), /* x86, MIPS, PPC Stack size/offset = 20 */
#else
NdrFcShort( 0x28 ), /* Alpha Stack size/offset = 40 */
#endif
/* 78 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Return value */
/* 80 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
#ifndef _ALPHA_
/* 82 */ NdrFcShort( 0x18 ), /* x86, MIPS, PPC Stack size/offset = 24 */
#else
NdrFcShort( 0x30 ), /* Alpha Stack size/offset = 48 */
#endif
/* 84 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Procedure GetHandle */
/* 86 */ 0x33, /* FC_AUTO_HANDLE */
0x6c, /* Old Flags: object, Oi2 */
/* 88 */ NdrFcLong( 0x0 ), /* 0 */
/* 92 */ NdrFcShort( 0x9 ), /* 9 */
#ifndef _ALPHA_
/* 94 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */
#else
NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */
#endif
/* 96 */ NdrFcShort( 0x0 ), /* 0 */
/* 98 */ NdrFcShort( 0x10 ), /* 16 */
/* 100 */ 0x4, /* Oi2 Flags: has return, */
0x2, /* 2 */
/* Parameter pHandle */
/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
#ifndef _ALPHA_
/* 104 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */
#else
NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */
#endif
/* 106 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Return value */
/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
#ifndef _ALPHA_
/* 110 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */
#else
NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */
#endif
/* 112 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Procedure IsLatLong */
/* 114 */ 0x33, /* FC_AUTO_HANDLE */
0x6c, /* Old Flags: object, Oi2 */
/* 116 */ NdrFcLong( 0x0 ), /* 0 */
/* 120 */ NdrFcShort( 0xa ), /* 10 */
#ifndef _ALPHA_
/* 122 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */
#else
NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */
#endif
/* 124 */ NdrFcShort( 0x0 ), /* 0 */
/* 126 */ NdrFcShort( 0x10 ), /* 16 */
/* 128 */ 0x4, /* Oi2 Flags: has return, */
0x2, /* 2 */
/* Parameter result */
/* 130 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
#ifndef _ALPHA_
/* 132 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */
#else
NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */
#endif
/* 134 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Return value */
/* 136 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
#ifndef _ALPHA_
/* 138 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */
#else
NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */
#endif
/* 140 */ 0x8, /* FC_LONG */
0x0, /* 0 */
/* Procedure GetLastError */
/* 142 */ 0x33, /* FC_AUTO_HANDLE */
0x6c, /* Old Flags: object, Oi2 */
/* 144 */ NdrFcLong( 0x0 ), /* 0 */
/* 148 */ NdrFcShort( 0xb ), /* 11 */
#ifndef _ALPHA_
/* 150 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */
#else
NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */
#endif
/* 152 */ NdrFcShort( 0x0 ), /* 0 */
/* 154 */ NdrFcShort( 0x8 ), /* 8 */
/* 156 */ 0x5, /* Oi2 Flags: srv must size, has return, */
0x2, /* 2 */
/* Parameter error */
/* 158 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
#ifndef _ALPHA_
/* 160 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */
#else
NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */
#endif
/* 162 */ NdrFcShort( 0x46 ), /* Type Offset=70 */
/* Return value */
/* 164 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
#ifndef _ALPHA_
/* 166 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */
#else
NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */
#endif
/* 168 */ 0x8, /* FC_LONG */
0x0, /* 0 */
0x0
}
};
static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
{
0,
{
NdrFcShort( 0x0 ), /* 0 */
/* 2 */
0x12, 0x0, /* FC_UP */
/* 4 */ NdrFcShort( 0xc ), /* Offset= 12 (16) */
/* 6 */
0x1b, /* FC_CARRAY */
0x1, /* 1 */
/* 8 */ NdrFcShort( 0x2 ), /* 2 */
/* 10 */ 0x9, /* Corr desc: FC_ULONG */
0x0, /* */
/* 12 */ NdrFcShort( 0xfffc ), /* -4 */
/* 14 */ 0x6, /* FC_SHORT */
0x5b, /* FC_END */
/* 16 */
0x17, /* FC_CSTRUCT */
0x3, /* 3 */
/* 18 */ NdrFcShort( 0x8 ), /* 8 */
/* 20 */ NdrFcShort( 0xfffffff2 ), /* Offset= -14 (6) */
/* 22 */ 0x8, /* FC_LONG */
0x8, /* FC_LONG */
/* 24 */ 0x5c, /* FC_PAD */
0x5b, /* FC_END */
/* 26 */ 0xb4, /* FC_USER_MARSHAL */
0x83, /* 131 */
/* 28 */ NdrFcShort( 0x0 ), /* 0 */
/* 30 */ NdrFcShort( 0x4 ), /* 4 */
/* 32 */ NdrFcShort( 0x0 ), /* 0 */
/* 34 */ NdrFcShort( 0xffffffe0 ), /* Offset= -32 (2) */
/* 36 */
0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
/* 38 */ 0x8, /* FC_LONG */
0x5c, /* FC_PAD */
/* 40 */
0x2f, /* FC_IP */
0x5a, /* FC_CONSTANT_IID */
/* 42 */ NdrFcLong( 0x0 ), /* 0 */
/* 46 */ NdrFcShort( 0x0 ), /* 0 */
/* 48 */ NdrFcShort( 0x0 ), /* 0 */
/* 50 */ 0xc0, /* 192 */
0x0, /* 0 */
/* 52 */ 0x0, /* 0 */
0x0, /* 0 */
/* 54 */ 0x0, /* 0 */
0x0, /* 0 */
/* 56 */ 0x0, /* 0 */
0x46, /* 70 */
/* 58 */
0x11, 0x8, /* FC_RP [simple_pointer] */
/* 60 */ 0xc, /* FC_DOUBLE */
0x5c, /* FC_PAD */
/* 62 */
0x11, 0x4, /* FC_RP [alloced_on_stack] */
/* 64 */ NdrFcShort( 0x6 ), /* Offset= 6 (70) */
/* 66 */
0x13, 0x0, /* FC_OP */
/* 68 */ NdrFcShort( 0xffffffcc ), /* Offset= -52 (16) */
/* 70 */ 0xb4, /* FC_USER_MARSHAL */
0x83, /* 131 */
/* 72 */ NdrFcShort( 0x0 ), /* 0 */
/* 74 */ NdrFcShort( 0x4 ), /* 4 */
/* 76 */ NdrFcShort( 0x0 ), /* 0 */
/* 78 */ NdrFcShort( 0xfffffff4 ), /* Offset= -12 (66) */
0x0
}
};
const CInterfaceProxyVtbl * _COMTest1_ProxyVtblList[] =
{
( CInterfaceProxyVtbl *) &_IProjDefProxyVtbl,
0
};
const CInterfaceStubVtbl * _COMTest1_StubVtblList[] =
{
( CInterfaceStubVtbl *) &_IProjDefStubVtbl,
0
};
PCInterfaceName const _COMTest1_InterfaceNamesList[] =
{
"IProjDef",
0
};
const IID * _COMTest1_BaseIIDList[] =
{
&IID_IDispatch,
0
};
#define _COMTest1_CHECK_IID(n) IID_GENERIC_CHECK_IID( _COMTest1, pIID, n)
int __stdcall _COMTest1_IID_Lookup( const IID * pIID, int * pIndex )
{
if(!_COMTest1_CHECK_IID(0))
{
*pIndex = 0;
return 1;
}
return 0;
}
const ExtendedProxyFileInfo COMTest1_ProxyFileInfo =
{
(PCInterfaceProxyVtblList *) & _COMTest1_ProxyVtblList,
(PCInterfaceStubVtblList *) & _COMTest1_StubVtblList,
(const PCInterfaceName * ) & _COMTest1_InterfaceNamesList,
(const IID ** ) & _COMTest1_BaseIIDList,
& _COMTest1_IID_Lookup,
1,
2,
0, /* table of [async_uuid] interfaces */
0, /* Filler1 */
0, /* Filler2 */
0 /* Filler3 */
};
+11
View File
@@ -0,0 +1,11 @@
LIBRARY "COMTest1PS"
DESCRIPTION 'Proxy/Stub DLL'
EXPORTS
DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
GetProxyDllInfo @3 PRIVATE
DllRegisterServer @4 PRIVATE
DllUnregisterServer @5 PRIVATE
+16
View File
@@ -0,0 +1,16 @@
COMTest1ps.dll: dlldata.obj COMTest1_p.obj COMTest1_i.obj
link /dll /out:COMTest1ps.dll /def:COMTest1ps.def /entry:DllMain dlldata.obj COMTest1_p.obj COMTest1_i.obj \
kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib \
.c.obj:
cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL \
$<
clean:
@del COMTest1ps.dll
@del COMTest1ps.lib
@del COMTest1ps.exp
@del dlldata.obj
@del COMTest1_p.obj
@del COMTest1_i.obj
+115
View File
@@ -0,0 +1,115 @@
// ProjDef.cpp : Implementation of CProjDef
#include "stdafx.h"
#include "COMTest1.h"
#include "ProjDef.h"
#include "proj_api.h"
/////////////////////////////////////////////////////////////////////////////
// CProjDef
STDMETHODIMP CProjDef::Initialize(BSTR proj_string, int *success)
{
USES_CONVERSION;
psProj = pj_init_plus( W2A(proj_string) );
if( psProj != NULL )
*success = 1;
else
{
SetProjError( "pj_init_plus failed." );
//SetError( (const char *) W2A(proj_string) );
*success = 0;
}
return S_OK;
}
STDMETHODIMP CProjDef::TransformPoint3D(IUnknown *srcProj, double *x, double *y, double *z, int *success)
{
void *psProjOther;
IProjDef *srcProjReal;
srcProj->QueryInterface( IID_IProjDef, (void **) &srcProjReal );
srcProjReal->GetHandle( (long *) &psProjOther );
if( psProjOther == NULL || psProj == NULL )
{
SetError( "One of projections not set." );
*success = 0;
return E_FAIL;
}
if( pj_is_latlong( psProjOther ) )
{
*x *= DEG_TO_RAD;
*y *= DEG_TO_RAD;
}
*success = pj_transform( psProjOther, psProj, 1, 0, x, y, z ) == 0;
if( ! *success )
SetProjError( "pj_transform failed." );
else if( pj_is_latlong( psProj ) )
{
*x *= RAD_TO_DEG;
*y *= RAD_TO_DEG;
}
return S_OK;
}
STDMETHODIMP CProjDef::GetHandle(long *pHandle)
{
*pHandle = (long) psProj;
return S_OK;
}
STDMETHODIMP CProjDef::IsLatLong(int *result)
{
if( psProj != NULL )
{
*result = pj_is_latlong( (projPJ) psProj );
return S_OK;
}
else
{
SetError( "Projection is null" );
return E_FAIL;
}
}
STDMETHODIMP CProjDef::GetLastError( BSTR *error )
{
*error = SysAllocString( sLastError );
return S_OK;
}
void CProjDef::SetError( const char *pszMessage )
{
USES_CONVERSION;
if( sLastError != NULL )
{
SysFreeString( sLastError );
sLastError = NULL;
}
sLastError = SysAllocString( A2BSTR( pszMessage ) );
}
void CProjDef::SetProjError( const char *pszMessage )
{
int *pj_errno = pj_get_errno_ref();
if( *pj_errno > 0 )
SetError( strerror( *pj_errno ) );
else if( *pj_errno < 0 )
SetError( pj_strerrno( *pj_errno ) );
else
SetError( pszMessage );
}
Executable
+49
View File
@@ -0,0 +1,49 @@
// ProjDef.h : Declaration of the CProjDef
#ifndef __PROJDEF_H_
#define __PROJDEF_H_
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CProjDef
class ATL_NO_VTABLE CProjDef :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CProjDef, &CLSID_ProjDef>,
public IDispatchImpl<IProjDef, &IID_IProjDef, &LIBID_PROJ4Lib>
{
public:
CProjDef()
{
psProj = NULL;
sLastError = NULL;
SetError("");
}
DECLARE_REGISTRY_RESOURCEID(IDR_PROJDEF)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CProjDef)
COM_INTERFACE_ENTRY(IProjDef)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IProjDef
public:
STDMETHOD(GetLastError)( BSTR *error );
STDMETHOD(IsLatLong)(/*[out]*/ int *result);
STDMETHOD(GetHandle)(long *pHandle);
STDMETHOD(TransformPoint3D)(IUnknown *srcProj, double *x, double *y, double *z, int *success);
STDMETHOD(Initialize)(BSTR proj_string, int *success);
private:
void SetError( const char *pszMessage );
void SetProjError( const char *pszMessage );
BSTR sLastError;
void *psProj;
};
#endif //__PROJDEF_H_
+26
View File
@@ -0,0 +1,26 @@
HKCR
{
COMTest1.ProjDef.1 = s 'ProjDef Class'
{
CLSID = s '{B9B8F0A3-D9F8-4537-9A03-329DC9AE144C}'
}
COMTest1.ProjDef = s 'ProjDef Class'
{
CLSID = s '{B9B8F0A3-D9F8-4537-9A03-329DC9AE144C}'
CurVer = s 'PROJ4.ProjDef.1'
}
NoRemove CLSID
{
ForceRemove {B9B8F0A3-D9F8-4537-9A03-329DC9AE144C} = s 'ProjDef Class'
{
ProgID = s 'PROJ4.ProjDef.1'
VersionIndependentProgID = s 'PROJ4.ProjDef'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Both'
}
'TypeLib' = s '{A0ADE3D8-9A85-4BD3-AD56-BFEF42495130}'
}
}
}
Executable
+41
View File
@@ -0,0 +1,41 @@
PROJ.4 COM Interface
====================
This directory contains a Visual Studio 6 project to build
a COM object with a partial interface to PROJ.4.
Once built, you should be able to:
regsvr32 debug\proj4com.dll
Then in VB6:
o Add the type library as a resource and enable it.
o Setup code like the following:
Private Sub Command1_Click()
Dim pUTM As PROJ4Lib.IProjDef
Dim pLL As PROJ4Lib.IProjDef
Set pUTM = New PROJ4Lib.ProjDef
Set pLL = New PROJ4Lib.ProjDef
pUTM.Initialize ("+proj=utm +zone=11 +datum=WGS84")
pLL.Initialize ("+proj=latlong +datum=WGS84")
Dim X As Double, Y As Double, Z As Double
X = 25000
Y = 3000000
Z = 0
MsgBox X & " " & Y
If pLL.TransformPoint3D(pUTM, X, Y, Z) = 0 Then
MsgBox "TransformPoint3D " & pLL.GetLastError()
End If
MsgBox X & " " & Y
End Sub
Executable
+12
View File
@@ -0,0 +1,12 @@
// stdafx.cpp : source file that includes just the standard includes
// stdafx.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
#ifdef _ATL_STATIC_REGISTRY
#include <statreg.h>
#include <statreg.cpp>
#endif
#include <atlimpl.cpp>
Executable
+27
View File
@@ -0,0 +1,27 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently
#if !defined(AFX_STDAFX_H__760250DA_0BD5_40FD_AC2A_6DDA09FFA21E__INCLUDED_)
#define AFX_STDAFX_H__760250DA_0BD5_40FD_AC2A_6DDA09FFA21E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define STRICT
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#define _ATL_APARTMENT_THREADED
#include <atlbase.h>
//You may derive a class from CComModule and use it if you want to override
//something, but do not change the name of _Module
extern CComModule _Module;
#include <atlcom.h>
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__760250DA_0BD5_40FD_AC2A_6DDA09FFA21E__INCLUDED)
+50
View File
@@ -0,0 +1,50 @@
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3090
ClientLeft = 60
ClientTop = 450
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3090
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 615
Left = 1680
TabIndex = 0
Top = 2160
Width = 975
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Dim pUTM As PROJ4Lib.IProjDef
Dim pLL As PROJ4Lib.IProjDef
Set pUTM = New PROJ4Lib.ProjDef
Set pLL = New PROJ4Lib.ProjDef
pUTM.Initialize ("+proj=utm +zone=11 +datum=WGS84")
pLL.Initialize ("+proj=latlong +datum=WGS84")
Dim X As Double, Y As Double, Z As Double
X = 25000
Y = 3000000
Z = 0
MsgBox X & " " & Y
If pLL.TransformPoint3D(pUTM, X, Y, Z) = 0 Then
MsgBox "TransformPoint3D " & pLL.GetLastError()
End If
MsgBox X & " " & Y
End Sub
Executable
+38
View File
@@ -0,0 +1,38 @@
/*********************************************************
DllData file -- generated by MIDL compiler
DO NOT ALTER THIS FILE
This file is regenerated by MIDL on every IDL file compile.
To completely reconstruct this file, delete it and rerun MIDL
on all the IDL files in this DLL, specifying this file for the
/dlldata command line option
*********************************************************/
#define PROXY_DELEGATION
#include <rpcproxy.h>
#ifdef __cplusplus
extern "C" {
#endif
EXTERN_PROXY_FILE( COMTest1 )
PROXYFILE_LIST_START
/* Start of list */
REFERENCE_PROXY_FILE( COMTest1 ),
/* End of list */
PROXYFILE_LIST_END
DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )
#ifdef __cplusplus
} /*extern "C" */
#endif
/* end of generated dlldata file */
Executable
+17
View File
@@ -0,0 +1,17 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by COMTest1.rc
//
#define IDS_PROJNAME 100
#define IDR_PROJDEF 101
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 201
#define _APS_NEXT_COMMAND_VALUE 32768
#define _APS_NEXT_CONTROL_VALUE 201
#define _APS_NEXT_SYMED_VALUE 102
#endif
#endif
Vendored Executable
+1516
View File
File diff suppressed because it is too large Load Diff
Vendored Executable
+1622
View File
File diff suppressed because it is too large Load Diff
Vendored Executable
+21433
View File
File diff suppressed because it is too large Load Diff
-149
View File
@@ -1,149 +0,0 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([PROJ.4 Projections], 5.0.1, [https://github.com/OSGeo/proj.4/issues], proj)
AC_CONFIG_MACRO_DIR([m4])
AC_LANG(C)
AC_CONFIG_AUX_DIR([.])
AM_INIT_AUTOMAKE
AM_CONFIG_HEADER(src/proj_config.h)
dnl Enable as much warnings as possible
AX_CFLAGS_WARN_ALL(C_WFLAGS)
AC_SUBST(C_WFLAGS,$C_WFLAGS)
dnl Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AM_PROG_LIBTOOL
dnl Checks for libraries.
save_CFLAGS="$CFLAGS"
CFLAGS=`echo "$CFLAGS" | sed "s/-Werror/ /"`
AC_CHECK_LIB(m,exp,,,)
CFLAGS="$save_CFLAGS"
dnl We check for headers
AC_HEADER_STDC
dnl Check flag for accurate arithmetic with Intel compiler. This is
dnl needed to stop the compiler from ignoring parentheses in expressions
dnl like (a + b) + c and from simplifying 0.0 + x to x (which is wrong if
dnl x = -0.0).
AX_CHECK_COMPILE_FLAG([-fp-model precise],
[CFLAGS="$CFLAGS -fp-model precise"],,[-Werror])
dnl Check for C99 math functions
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wall -Werror"
AC_MSG_CHECKING([for C99 math functions])
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[#include <math.h>],
[int q;
return (int)(hypot(3.0, 4.0) + atanh(0.8) + cbrt(8.0) +
remquo(100.0, 90.0, &q) +
remainder(100.0, 90.0) + copysign(1.0, -0.0));])],
[AC_MSG_RESULT([yes]);C99_MATH="-DHAVE_C99_MATH=1"],
[AC_MSG_RESULT([no]);C99_MATH="-DHAVE_C99_MATH=0"])
CFLAGS="$save_CFLAGS $C99_MATH"
AC_SEARCH_LIBS([sqrt], [m])
AC_CHECK_FUNC(localeconv, [AC_DEFINE(HAVE_LOCALECONV,1,[Define to 1 if you have localeconv])])
dnl ---------------------------------------------------------------------------
dnl Check for JNI support.
dnl ---------------------------------------------------------------------------
JNI_INCLUDE=
export JNI_INCLUDE
AC_ARG_WITH(jni,
[AS_HELP_STRING([--with-jni=dir],
[Include Java/JNI support, add optional include dir])
],,)
if test "$with_jni" = "yes" ; then
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
AC_MSG_CHECKING(whether to enable Java/JNI support)
AC_MSG_RESULT([enabled])
elif test "$with_jni" != "no" -a "$with_jni" != "" ; then
AC_MSG_CHECKING(whether to enable Java/JNI support)
if test \! -r "$with_jni/jni.h" ; then
AC_MSG_ERROR(Did not find $with_jni/jni.h)
fi
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
AC_MSG_RESULT([enabled])
JNI_INCLUDE="-I$with_jni"
elif test "$with_jni" = "" ; then
AC_CHECK_HEADERS(jni.h)
AC_MSG_CHECKING(whether to enable Java/JNI support)
if test "$ac_cv_header_jni_h" = "no" ; then
AC_MSG_RESULT([disabled])
else
AC_MSG_RESULT([enabled])
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
fi
else
AC_MSG_CHECKING(whether to enable Java/JNI support)
AC_MSG_RESULT([disabled])
fi
AC_SUBST(JNI_INCLUDE,$JNI_INCLUDE)
dnl ---------------------------------------------------------------------------
dnl Provide a mechanism to disable real mutex support (if lacking win32 or
dnl posix mutexes for instance).
dnl ---------------------------------------------------------------------------
AC_ARG_WITH([mutex],
AS_HELP_STRING([--without-mutex],
[Disable real mutex locks (lacking pthreads)]),,)
AC_MSG_CHECKING([for mutexes])
THREAD_LIB=""
if test "$with_mutex" = yes -o x"$with_mutex" = x ; then
MUTEX_SETTING=pthread
AC_CHECK_LIB(pthread,pthread_create,PTHREAD_EXISTS=YES,,,)
if test -n "$PTHREAD_EXISTS" ; then
THREAD_LIB="-lpthread"
fi
AC_CHECK_LIB(pthread,pthread_mutexattr_settype,,,)
AC_CHECK_DECL(PTHREAD_MUTEX_RECURSIVE,
AC_DEFINE(HAVE_PTHREAD_MUTEX_RECURSIVE, [], [Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE]),
,
[#include <pthread.h>])
AC_MSG_RESULT([enabled, pthread])
else
MUTEX_SETTING=stub
AC_MSG_RESULT([disabled by user])
fi
AC_SUBST(MUTEX_SETTING,$MUTEX_SETTING)
AC_SUBST(THREAD_LIB,$THREAD_LIB)
AC_CONFIG_FILES([Makefile cmake/Makefile src/Makefile
test/Makefile test/gie/Makefile test/gigs/Makefile
man/Makefile man/man1/Makefile man/man3/Makefile nad/Makefile
jniwrap/Makefile jniwrap/org/Makefile jniwrap/org/proj4/Makefile])
AC_CONFIG_FILES([nad/install], [chmod +x nad/install])
AC_CONFIG_FILES([proj.pc])
AC_OUTPUT
+99
View File
@@ -0,0 +1,99 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([PROJ.4 Projections], 4.7.0, [warmerdam@pobox.com], proj)
AC_LANG(C)
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
AM_CONFIG_HEADER(src/proj_config.h)
dnl Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AM_PROG_LIBTOOL
dnl Checks for libraries.
AC_CHECK_LIB(m,exp,,,)
dnl We check for headers
AC_HEADER_STDC
dnl ---------------------------------------------------------------------------
dnl Check for JNI support.
dnl ---------------------------------------------------------------------------
JNI_INCLUDE=
export JNI_INCLUDE
AC_ARG_WITH(jni,
[ --with-jni=dir Include Java/JNI support, add optional include dir],,)
if test "$with_jni" = "yes" ; then
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
AC_MSG_CHECKING(whether to enable Java/JNI support)
AC_MSG_RESULT([enabled])
elif test "$with_jni" != "no" -a "$with_jni" != "" ; then
AC_MSG_CHECKING(whether to enable Java/JNI support)
if test \! -r "$with_jni/jni.h" ; then
AC_MSG_ERROR(Did not find $with_jni/jni.h)
fi
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
AC_MSG_RESULT([enabled])
JNI_INCLUDE="-I$with_jni"
elif test "$with_jni" = "" ; then
AC_CHECK_HEADERS(jni.h)
AC_MSG_CHECKING(whether to enable Java/JNI support)
if test "$ac_cv_header_jni_h" = "no" ; then
AC_MSG_RESULT([disabled])
else
AC_MSG_RESULT([enabled])
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
fi
else
AC_MSG_CHECKING(whether to enable Java/JNI support)
AC_MSG_RESULT([disabled])
fi
AC_SUBST(JNI_INCLUDE,$JNI_INCLUDE)
dnl ---------------------------------------------------------------------------
dnl Provide a mechanism to disable real mutex support (if lacking win32 or
dnl posix mutexes for instance).
dnl ---------------------------------------------------------------------------
AC_ARG_WITH([mutex],
AS_HELP_STRING([--without-mutex],
[Disable real mutex locks (lacking pthreads)]),,)
AC_MSG_CHECKING([for mutexes])
if test "$with_mutex" = yes -o x"$with_mutex" = x ; then
MUTEX_SETTING=pthread
AC_MSG_RESULT([enabled, pthread])
else
MUTEX_SETTING=stub
AC_MSG_RESULT([disabled by user])
fi
AC_SUBST(MUTEX_SETTING,$MUTEX_SETTING)
AC_OUTPUT(Makefile src/Makefile man/Makefile man/man1/Makefile \
man/man3/Makefile nad/Makefile \
jniwrap/Makefile jniwrap/org/Makefile jniwrap/org/proj4/Makefile)
Executable
+423
View File
@@ -0,0 +1,423 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
# Copyright 1999, 2000 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# `libtool' can also be set to `yes' or `no'.
if test -z "$depfile"; then
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
dir=`echo "$object" | sed 's,/.*$,/,'`
if test "$dir" = "$object"; then
dir=
fi
# FIXME: should be _deps on DOS.
depfile="$dir.deps/$base"
fi
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. This file always lives in the current directory.
# Also, the AIX compiler puts `$object:' at the start of each line;
# $object doesn't have directory information.
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
outname="$stripped.o"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir.libs/$base.d"
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a space and a tab in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'. We will use -o /dev/null later,
# however we can't do the remplacement now because
# `-o $object' might simply not be used
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
"$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
-*)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
-62
View File
@@ -1,62 +0,0 @@
# This is the config file for building proj.4 and running its test suite
# with Travis-ci.org
cache:
directories:
- $HOME/.ccache
matrix:
fast_finish: true
include:
- os: linux
compiler: gcc
language: c
sudo: required
services:
- docker
env:
- BUILD_NAME=linux_gcc
- DETAILS="linux, gcc"
- os: linux
compiler: clang
language: c
sudo: required
services:
- docker
env:
- BUILD_NAME=linux_clang
- DETAILS="linux, clang"
- os: osx
language: c
env:
- BUILD_NAME=osx
- DETAILS="osx"
- os: linux
compiler: gcc
language: c
sudo: required
env:
- BUILD_NAME=mingw32
- DETAILS="mingw32"
# allow_failures:
# - os: osx
before_install: ./travis/${BUILD_NAME}/before_install.sh
install: ./travis/${BUILD_NAME}/install.sh
script:
- echo "done"
after_success: ./travis/${BUILD_NAME}/after_success.sh
notifications:
#email:
# recipients:
# - gdal-commits@lists.osgeo.org
irc:
channels:
- "irc.freenode.org#gdal"
use_notice: true
-78
View File
@@ -1,78 +0,0 @@
platform:
- x64
- x86
environment:
matrix:
# Does not work
# VS 2008
# - BUILD_TYPE: cmake
# VS_VERSION: Visual Studio 9 2008
# VS 2010
- BUILD_TYPE: cmake
VS_VERSION: Visual Studio 10
# VS 2012
- BUILD_TYPE: cmake
VS_VERSION: Visual Studio 11
# VS 2013
- BUILD_TYPE: cmake
VS_VERSION: Visual Studio 12
# VS 2015
- BUILD_TYPE: cmake
VS_VERSION: Visual Studio 14
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# VS 2017
- BUILD_TYPE: cmake
VS_VERSION: Visual Studio 15
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- BUILD_TYPE: nmake
shallow_clone: true
build_script:
- echo build_script
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x86" call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat"
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64
- if "%BUILD_TYPE%" == "nmake" nmake /f makefile.vc
- if "%BUILD_TYPE%" == "nmake" nmake /f makefile.vc install-all
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" cd src
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" nmake /f makefile.vc multistresstest.exe
# Disabled for now as it scales badly
# - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" multistresstest.exe
- if "%BUILD_TYPE%" == "cmake" if "%platform%" == "x64" SET VS_FULL=%VS_VERSION% Win64
- if "%BUILD_TYPE%" == "cmake" if "%platform%" == "x86" SET VS_FULL=%VS_VERSION%
- if "%BUILD_TYPE%" == "cmake" echo "%VS_FULL%"
# warning C4706: assignment within conditional expression
- if "%BUILD_TYPE%" == "cmake" cmake -G "%VS_FULL%" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=../bin -DBUILD_LIBPROJ_SHARED=ON -DCMAKE_C_FLAGS="/W4 /wd4706 /WX /D_CRT_SECURE_NO_WARNINGS"
- if "%BUILD_TYPE%" == "cmake" cmake --build . --config Release
test_script:
- echo test_script
- if "%BUILD_TYPE%" == "cmake" set PROJ_LIB=C:\projects\proj-4\nad
- if "%BUILD_TYPE%" == "nmake" set PROJ_LIB=C:\PROJ\SHARE
- cd %PROJ_LIB%
- curl -O http://download.osgeo.org/proj/proj-datumgrid-1.6.zip
- curl -O http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx
- curl -O -k https://raw.githubusercontent.com/OSGeo/proj-datumgrid/master/BETA2007.gsb
- 7z e -aoa -y proj-datumgrid-1.6.zip
- dir
- cd ..
- dir
- cd bin
- echo "Contents of current directory:"
- dir
- echo "Contents of ..\test\gie:"
- dir ..\test\gie
- echo "Contents of PROJ_LIB " %PROJ_LIB%
- dir %PROJ_LIB%
- gie.exe ..\test\gie\*.gie ..\test\gigs\*.gie
deploy: off
-216
View File
@@ -1,216 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/proj4.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/proj4.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/proj4"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/proj4"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
+809
View File
@@ -0,0 +1,809 @@
%!PS-Adobe-2.0
%%Creator: dvips 5.55 Copyright 1986, 1994 Radical Eye Software
%%Title: swiss.dvi
%%CreationDate: Sat Aug 5 14:07:55 1995
%%Pages: 2
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSCommandLine: dvips swiss
%DVIPSParameters: dpi=300, comments removed
%DVIPSSource: TeX output 1995.08.05:1405
%%BeginProcSet: tex.pro
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end
%%EndProcSet
TeXDict begin 40258431 52099146 1000 300 300
(/home/gie/MAPGEN/proj.tex/swiss/swiss.dvi) @start /Fa
10 118 df<3F00070007000E000E000E000E001C001C001C001C0039C03E603830383070
38703870387038E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>98
D<01E007100C1018083810701070607F80E000E000E000E000E000E0086010602030C01F
000D127B9113>101 D<01800380010000000000000000000000000000001C0026004700
47008E008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>
105 D<1F800380038007000700070007000E000E000E000E001C001C001C001C00380038
00380038007000700070007000E400E400E400E40068003800091D7C9C0B>108
D<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701
C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01
C01D127C9122>I<01E007180C0C180C380C300E700E700EE01CE01CE01CE018E038E030
E06060C031801E000F127B9115>111 D<07870004D98008E0C008E0C011C0E011C0E001
C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C000E70000E
00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<03C4062C0C3C
181C3838303870387038E070E070E070E070E0E0C0E0C0E061E063C03DC001C001C00380
03800380038007803FF00E1A7B9113>I<01F006080C080C1C18181C001F001FC00FF007
F0007800386030E030C030806060C01F000E127D9111>115 D<1E030027070047070047
0700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C0038388038388018388018
39001C5900078E0011127C9116>117 D E /Fb 2 111 df<00200060006000C000C000C0
018001800180030003000300060006000C000C000C001800180018003000300030006000
60006000C000C000C0000B1D7E9511>61 D<30F8590C4E0C9C0C980C180C180C30183019
303130316032601C100D7F8C15>110 D E /Fc 5 53 df<006000006000006000006000
006000006000006000006000006000006000FFFFF0FFFFF0006000006000006000006000
00600000600000600000600000600000600014167E9119>43 D<0F0030C0606060604020
C030C030C030C030C030C030C030C030C03040206060606030C00F000C137E9211>48
D<0C001C00EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C
00FFC00A137D9211>I<1F0060C06060F070F030603000700070006000C001C001800200
04000810101020207FE0FFE00C137E9211>I<006000E000E00160026006600C60086010
6020606060C060FFFC0060006000600060006003FC0E137F9211>52
D E /Fd 2 113 df<FFFFFF80FFFFFF8019027D8A20>0 D<000000004000000000C00000
000180000000018000000003000000000300000000060000000006000000000C00000000
0C00000000180000000018000000003000000000300000000060000000006000000000C0
00000000C0000000018000000001800000000300000C000300003C000600004E00060000
8E000C000007000C0000070018000003801800000380300000038030000001C060000001
C060000000E0C0000000E0C0000000718000000071800000003B000000003B000000001E
000000001E000000000C000000000C000000222A7E8123>112 D
E /Fe 2 49 df<FFFFC0FFFFC012027D871A>0 D<040E0E1C1C1C38383070706060C0C0
070F7F8F0A>48 D E /Ff 16 122 df<07800001C00000E00000E00000F0000070000070
00007000003800003800003800003C00001C00001C00001E00000E00001E00003F000067
0000C7000187800303800703800E03801C03C03801C07001C0E001E06000E0131D7E9C18
>21 D<0FFFF81FFFF83FFFF0608400408400808C00010C00010C00030C00030C00020C00
061C00061C000E1C000C1C001C0E001C0E00180C0015127E9118>25
D<000100000200000200000200000200000400000400000400000400000800000800007E
0001C9800710E00C1060181070381030702030702030E02070E02070E04070E040E0E040
E06041C06083803086001C9C0007E0000100000100000100000100000200000200000200
0002000014257E9C19>30 D<00010003000600060006000C000C000C0018001800180030
003000300060006000C000C000C0018001800180030003000300060006000C000C000C00
180018001800300030003000600060006000C000C00010297E9E15>61
D<0001F808000E061800380138006000F001C0007003800070070000300F0000200E0000
201C0000203C0000203C000000780000007800000078000000F0000000F0000000F00000
00F0000000F0000100F0000100F0000100700002007000020030000400380008001C0010
000E0060000701800000FE00001D1E7E9C1E>67 D<01FFC07F80003C001E000038001800
003800200000380040000038008000007002000000700400000070080000007010000000
E040000000E0C0000000E1E0000000E2E0000001C470000001D070000001E038000001C0
380000038038000003801C000003801C000003800E000007000E000007000E0000070007
000007000700000F00078000FFE03FF000211C7E9B23>75 D<01FFFE00003C03C0003800
E0003800F00038007000380070007000F0007000F0007000F0007001E000E001C000E007
8000E01E0000FFF00001C0300001C0180001C01C0001C01C0003801C0003801C0003801C
0003801C0007003C0007003C0807003C0807003C100F001E10FFE00E20000007C01D1D7E
9B20>82 D<01E3000717000C0F00180F00380E00300E00700E00700E00E01C00E01C00E0
1C00E01C00E03880E03880E038806078803199001E0E0011127E9116>97
D<01F0030C0E0C1C1E383C301870007000E000E000E000E000E000E0046008601030601F
800F127E9112>99 D<01F007080C0818043808300870307FC0E000E000E000E000E000E0
046008601030600F800E127E9113>101 D<0001E0000630000E78000CF0001C60001C00
001C00001C00003C0000380000380003FFC0003800003800007000007000007000007000
00700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C000018000
038000038000630000F30000F60000E4000078000015257E9C14>I<0FC00001C00001C0
000380000380000380000380000700000700000700000700000E07000E18800E21C00E23
C01C47801C83001D00001E00003F800039C00038E00038E00070E10070E10070E10070E2
00E06200603C00121D7E9C16>107 D<381F004E61804681C04701C08F01C08E01C00E01
C00E01C01C03801C03801C03801C0700380710380710380E10380E207006403003801412
7E9119>110 D<00C001C001C001C00380038003800380FFF00700070007000E000E000E
000E001C001C001C001C00382038203840384018800F000C1A80990F>116
D<07878008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C0
00638080F38080F38100E5810084C60078780013127E9118>120
D<1C00C02701C04701C04701C08703808703800E03800E03801C07001C07001C07001C07
00180E00180E00180E001C1E000C3C0007DC00001C00001800603800F03000F06000E0C0
004180003E0000121A7E9114>I E /Fg 4 22 df<0000300000600000C0000180000300
000700000E00000C0000180000380000300000700000E00000C00001C000018000038000
0380000300000700000600000E00000E00000C00001C00001C00001C0000180000380000
380000380000380000700000700000700000700000700000700000700000E00000E00000
E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
E00000E00000E00000E00000E00000E00000E00000700000700000700000700000700000
7000007000003800003800003800003800001800001C00001C00001C00000C00000E0000
0E000006000007000003000003800003800001800001C00000C00000E000007000003000
003800001800000C00000E000007000003000001800000C0000060000030146377811F>
18 D<C000006000003000001800000C00000E000007000003000001800001C00000C000
00E000007000003000003800001800001C00001C00000C00000E00000600000700000700
0003000003800003800003800001800001C00001C00001C00001C00000E00000E00000E0
0000E00000E00000E00000E0000070000070000070000070000070000070000070000070
000070000070000070000070000070000070000070000070000070000070000070000070
0000700000E00000E00000E00000E00000E00000E00000E00001C00001C00001C00001C0
000180000380000380000380000300000700000700000600000E00000C00001C00001C00
00180000380000300000700000E00000C00001C0000180000300000700000E00000C0000
180000300000600000C0000014637F811F>I<FFE0FFE0FFE0E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFE0FFE0FF
E00B63768116>I<FFE0FFE0FFE000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E0FFE0FFE0FFE00B63808116>I
E /Fh 24 120 df<003FC00001F0300003C0380007C07C000F807C000F807C000F803800
0F8000000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C00
0F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C00
0F807C000F807C007FE1FF807FE1FF80191D809C1B>12 D<00038000000380000007C000
0007C0000007C000000FE000000FE000001FF000001BF000001BF0000031F8000031F800
0061FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003FFFF8003001F80
03001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE1F1C7E9B24>65
D<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000FC0FC000
7C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC000
7E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01FC0FFFFFF
00FFFFF8001F1C7E9B25>68 D<FFFFFF00FFFFFF000FC01F000FC007000FC003000FC003
800FC003800FC001800FC181800FC181800FC180000FC180000FC380000FFF80000FFF80
000FC380000FC180000FC180000FC180000FC180000FC000000FC000000FC000000FC000
000FC000000FC00000FFFF0000FFFF0000191C7E9B1E>70 D<FFFFFFFF07E007E007E007
E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
E007E007E0FFFFFFFF101C7F9B12>73 D<FFFFF800FFFFFE000FC03F800FC00F800FC007
C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC007C00FC00F800FC03F
000FFFFC000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
000FC000000FC000000FC00000FFFC0000FFFC00001B1C7E9B21>80
D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE
003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000
E0F001C0FC03C0EFFF0083FC00141C7D9B1B>83 D<0FF8001C1E003E0F803E07803E07C0
1C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F8
0FE1F815127F9117>97 D<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F8
0000F80000F80000F800007800007801803C01801C03000E0E0003F80011127E9115>99
D<000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F001F9
F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801
F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C01C078
01C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F
038001FC0013127F9116>I<03F8F00E0F381E0F381C07303C07803C07803C07803C0780
1C07001E0F000E0E001BF8001000001800001800001FFF001FFFC00FFFE01FFFF07801F8
F00078F00078F000787000707800F01E03C007FF00151B7F9118>103
D<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F
001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>105
D<007800FC00FC00FC00FC007800000000000000000000000003FC03FC007C007C007C00
7C007C007C007C007C007C007C007C007C007C007C007C007C007C007C707CF87CF878F8
F070E01F800E26839D0F>I<FF0000FF00001F00001F00001F00001F00001F00001F0000
1F00001F00001F00001F0FF81F0FF81F03801F07001F0C001F18001F70001FF8001FFC00
1FBC001F3E001F1F001F0F001F0F801F07C01F03E0FFC7FCFFC7FC161D7F9C19>I<FF00
FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C0E>I<FF0FC07E00FF31E18F
001F40F207801F80FC07C01F80FC07C01F00F807C01F00F807C01F00F807C01F00F807C0
1F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C0FF
E7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40F01F80F81F80F81F00F81F00
F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF1812
7F911B>I<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F8
00F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<FE3E00FE4700
1E8F801E8F801E8F801F07001F00001F00001F00001F00001F00001F00001F00001F0000
1F00001F0000FFF000FFF00011127F9114>114 D<1FD830786018E018E018F000FF807F
E07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<0300030003000300
070007000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C
1F0C0F08079803F00E1A7F9913>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C180
07C18003E30003E30001F60001F60001FE0000FC0000FC0000780000780000300016127F
9119>118 D<FF8FF8FEFF8FF8FE1F03E0301F03E0301F83E0700F83F0600F86F06007C6
F0C007CEF8C007EC79C003EC7D8003F83D8001F83F0001F83F0001F01F0000F01E0000E0
0E0000E00E001F127F9122>I E /Fi 45 122 df<E038F078F078F078F078F078F078F0
78E038E03860300D0B7C9816>34 D<0387000387000387000387000387000387007FFFC0
FFFFE0FFFFE0070E00070E00070E000E1C000E1C000E1C000E1C00FFFFE0FFFFE07FFFC0
1C38001C38001C38001C38001C38001C380013197F9816>I<30787C3C1C1C1C1C3878F0
E040060D789816>39 D<01C00001C00001C00001C00001C00001C00001C00001C000FFFF
80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00011137E9516
>43 D<70F8F8F8700505788416>46 D<03E0000FF8001FFC001E3C00380E00780F007007
00700700E00380E00380E00380E00380E00380E00380E00380E00380F007807007007007
00780F003C1E001E3C001FFC000FF80003E00011197E9816>48 D<01800380038007800F
807F80FF807380038003800380038003800380038003800380038003800380038003807F
F87FFC7FF80E197C9816>I<07E0001FF8003FFC00783E00E00700F00780F00380600380
000380000380000700000700000E00001C0000380000700000E00001C0000380000F0000
1E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E007807
00300700000700000700000E00003E0007FC0007F00007FC00001E000007000003000003
80000380600380F00380E00700781E003FFC001FF80007E00011197E9816>I<007C0000
FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C00381C00781C00F0
1C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC001FFC001FFC013
197F9816>I<3FFE003FFE003FFE00380000380000380000380000380000380000380000
3BF0003FFC003FFE003C0F00300700000380000380600380F00380F00380E00700781E00
3FFC001FF80007E00011197E9816>I<00F80003FC0007FE000F07001C0F00380F007806
00700000700000E3F800EFFC00FFFE00F80F00F00700F00380E00380E003807003807003
807007803807003C1E001FFC000FF80003E00011197E9816>I<E00000FFFF80FFFF80FF
FF80E00F00E01E00001C0000380000780000700000E00000E00001C00001C00001C00003
8000038000038000038000070000070000070000070000070000070000070000111A7E99
16>I<07F0001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001FFC00
07F0001FFC003C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE00
1FFC0007F00011197E9816>I<03E0000FF8001FFC003C1E00700E00700700E00700E007
80E00380E00380E00780700780780F803FFF801FFB800FE380000700000700300700780E
00781C007078003FF0001FE0000F800011197E9816>I<70F8F8F8700000000000000000
70F8F8F8700512789116>I<000180000780001F80003E0000F80001F00007C0000F8000
3E0000FC0000F00000FC00003E00000F800007C00001F00000F800003E00001F80000780
00018011157E9616>60 D<7FFF00FFFF80FFFF80000000000000000000000000000000FF
FF80FFFF807FFF00110B7E9116>I<C00000F00000FC00003E00000F800007C00001F000
00F800003E00001F80000780001F80003E0000F80001F00007C0000F80003E0000FC0000
F00000C0000011157E9616>I<01F18007FB800FFF801F0F803C07803803807003807003
80F00000E00000E00000E00000E00000E00000E00000E00000F000007003807003803803
803C07001F0F000FFE0007FC0001F00011197E9816>67 D<7FFFC0FFFFC07FFFC01C01C0
1C01C01C01C01C01C01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C00
1C00001C00E01C00E01C00E01C00E01C00E07FFFE0FFFFE07FFFE013197F9816>69
D<7F1FC0FFBFE07F1FC01C07001C07001C07001C07001C07001C07001C07001FFF001FFF
001FFF001C07001C07001C07001C07001C07001C07001C07001C07001C07007F1FC0FFBF
E07F1FC013197F9816>72 D<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC700
1DC7001CC7001CC7001CE7001CE7001CE7001C67001C67001C77001C77001C37001C3700
1C37001C17007F1F00FF9F007F0F0013197F9816>78 D<07E3001FFF003FFF00781F00F0
0700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F0000070000
0380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>83
D<FFFF80FFFF80FFFF8011037E7E16>95 D<1FE0003FF0007FF800783C00300E00000E00
000E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E0
13127E9116>97 D<7E0000FE00007E00000E00000E00000E00000E00000E3E000EFF000F
FF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F
83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE3C1E780C7000E000E000E000
E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F00007F00003F000007
0000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700E007
00E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816>I<03
E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010
127D9116>I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF00
01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
3FFE007FFF003FFE0011197F9816>I<018003C003C0018000000000000000007FC07FC0
7FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7FFF101A7D99
16>105 D<003000780078003000000000000000001FF81FF81FF8003800380038003800
38003800380038003800380038003800380038003800380038003800386070F0F0FFE07F
C03F800D237E9916>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7F
E00E7FE00E0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07
000E07807F87F0FFCFF07F87F01419809816>I<FFC000FFC000FFC00001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C000FFFF80FFFF80FFFF8011197E9816>I<F9C380FFEFC0
FFFFE03C78E03C78E03870E03870E03870E03870E03870E03870E03870E03870E03870E0
3870E0FE7CF8FE7CF8FE3C781512809116>I<7E3C00FEFE007FFF000F87800F03800E03
800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7
F01512809116>I<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E0
0380E00380F00780700700780F003C1E001FFC000FF80003E00011127E9116>I<7E3E00
FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E0
0F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E00007FC000
FFE0007FC000141B809116>I<FF0FC0FF3FE0FF7FE007F04007C0000780000780000700
00070000070000070000070000070000070000070000FFFC00FFFC00FFFC0013127F9116
>114 D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFC
FFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF0007
000007000007000007000007000007000007000007010007038007038007038007870003
FE0001FC0000F80011177F9616>I<FF1FE0FFBFE0FF1FE0380380380380380380380380
38E38019F30019F30019B3001DB7001DB7001DB7001DB7000F1E000F1E000F1E0013127F
9116>119 D<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E000
01F00003B800073C00071C000E0E007F1FC0FF3FE07F1FC013127F9116>I<7F1FC0FF9F
E07F1FC01C07000E07000E0E000E0E00070E00071C00071C00039C00039C0003980001B8
0001B80000F00000F00000F00000E00000E00000E00001C00079C0007BC0007F80003F00
003C0000131B7F9116>I E /Fj 25 122 df<70F8FCFC7404040404080810102040060F
7C840E>44 D<70F8F8F87005057C840E>46 D<008003800F80F380038003800380038003
800380038003800380038003800380038003800380038003800380038003800380038003
80038003800380038007C0FFFE0F217CA018>49 D<03F8000C1E001007002007804007C0
7807C07803C07807C03807C0000780000780000700000F00000E0000380003F000001C00
000F000007800007800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C0
400780200780100F000C1C0003F00013227EA018>51 D<000200000600000E00000E0000
1E00001E00002E00004E00004E00008E00008E00010E00020E00020E00040E00040E0008
0E00100E00100E00200E00200E00400E00800E00FFFFF8000E00000E00000E00000E0000
0E00000E00000E00001F0001FFF015217FA018>I<1000801E07001FFF001FFE001FF800
13E00010000010000010000010000010000010000010F800130E00140700180380100380
0001C00001C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C0
4003802007001006000C1C0003F00013227EA018>I<01F000060C000C06001807003803
80700380700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003
E03803E01805E00C05E00619E003E1E00001C00001C00001C00003800003803003007807
00780600700C002018001030000FC00013227EA018>57 D<000180000001800000018000
0003C0000003C0000003C0000005E0000005E000000DF0000008F0000008F0000010F800
001078000010780000203C0000203C0000203C0000401E0000401E0000401E0000800F00
00800F0000FFFF000100078001000780030007C0020003C0020003C0040003E0040001E0
040001E00C0000F00C0000F03E0001F8FF800FFF20237EA225>65
D<FFFFFFC00F8007C0078001C0078000C007800040078000400780006007800020078000
200780002007802020078020000780200007802000078060000780E00007FFE0000780E0
000780600007802000078020000780200007802008078000080780000807800010078000
1007800010078000300780003007800070078000E00F8003E0FFFFFFE01D227EA121>69
D<0007F008003C0C1800E0021801C001B8038000F8070000780F0000381E0000381E0000
183C0000183C0000187C0000087800000878000008F8000000F8000000F8000000F80000
00F8000000F8000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000
781E0000781E0000780F00007807000078038000B801C000B800E00318003C0C080007F0
0020247DA226>71 D<FFFC0FC00780078007800780078007800780078007800780078007
800780078007800780078007800780078007800780078007800780078007800780078007
800FC0FFFC0E227EA112>73 D<FFFFE000000F803C000007800E00000780078000078007
C000078003C000078003E000078003E000078003E000078003E000078003E000078003C0
00078007C000078007800007800E000007803C000007FFE0000007807000000780380000
07801C000007801E000007800E000007800F000007800F000007800F000007800F000007
800F800007800F800007800F800007800F808007800FC080078007C0800FC003C100FFFC
01E2000000007C0021237EA124>82 D<0FE0001838003C0C003C0E001807000007000007
0000070000FF0007C7001E07003C0700780700700700F00708F00708F00708F00F087817
083C23900FC1E015157E9418>97 D<0E0000FE00001E00000E00000E00000E00000E0000
0E00000E00000E00000E00000E00000E00000E00000E1F000E61C00E80600F00300E0038
0E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E0038
0F00700C80600C41C0083F0017237FA21B>I<0000E0000FE00001E00000E00000E00000
E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C01
E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800
E03800E01801E00C02E0070CF001F0FE17237EA21B>100 D<01FC000707000C03801C01
C03801C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800
203800201C00400E008007030000FC0013157F9416>I<00007001F198071E180E0E181C
07001C07003C07803C07803C07803C07801C07001C07000E0E000F1C0019F00010000010
00001800001800001FFE000FFFC00FFFE03800F0600030400018C00018C00018C0001860
00306000303800E00E038003FE0015217F9518>103 D<0E00FE001E000E000E000E000E
000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E000E000E000E000E000E000E00FFE00B237FA20E>108
D<0E1F80FE60C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00
700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18157F941B>110
D<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E
000E000F00FFF010157F9413>114 D<0F8830786018C018C008C008E008F0007F803FE0
0FF001F8003C801C800C800CC00CC008E018D0308FC00E157E9413>I<02000200020002
000600060006000E001E003E00FFF80E000E000E000E000E000E000E000E000E000E000E
000E040E040E040E040E040E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E
00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E
00700E00F00E00F006017003827800FC7F18157F941B>I<FFC1FE1E00780E00300E0020
0E002007004007004003808003808003808001C10001C10000E20000E20000E200007400
00740000380000380000380000100017157F941A>I<FFC1FE1E00780E00300E00200E00
2007004007004003808003808003808001C10001C10000E20000E20000E2000074000074
00003800003800003800001000001000002000002000002000004000F04000F08000F180
004300003C0000171F7F941A>121 D E /Fk 28 125 df<78FCFCFCFC7806067B8511>
46 D<00006000000060000000E0000001E0000001E0000003E0000003E0000005E00000
09E0000009E0000011E0000021E0000021E0000041E0000081E0000081E0000101E00002
01E0000201E0000401E0000801E0000801E0001001E0003001E0002001E0004001E000C0
01E000FFFFFF80FFFFFF800001E0000001E0000001E0000001E0000001E0000001E00000
01E0000001E0000003F000007FFF80007FFF8019287EA71E>52 D<03FFFF03FFFF0007E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E03003E07803E0FC03E0FC03E0FC03C0F807C0400780200F00
300E000C3C0003F000182A7DA81F>74 D<FFE0000003FFC0FFE0000003FFC007E0000003
F80002F0000005F00002F0000005F0000278000009F0000278000009F0000278000009F0
00023C000011F000023C000011F000021E000021F000021E000021F000021E000021F000
020F000041F000020F000041F0000207800081F0000207800081F0000207800081F00002
03C00101F0000203C00101F0000203E00201F0000201E00201F0000201E00201F0000200
F00401F0000200F00401F0000200F00401F0000200780801F0000200780801F00002003C
1001F00002003C1001F00002003C1001F00002001E2001F00002001E2001F00002000F40
01F00002000F4001F00002000F4001F0000200078001F0000700078001F0000F80030003
F800FFF803007FFFC0FFF803007FFFC032297EA837>77 D<FFE0001FFFFFF0001FFF03F8
0001F002F80000E0027C000040027E000040023E000040021F000040021F800040020F80
00400207C000400207E000400203E000400201F000400201F800400200F8004002007C00
4002007E004002003E004002001F004002001F804002000F8040020007C040020003E040
020003E040020001F040020000F840020000F8400200007C400200003E400200003E4002
00001F400200000FC00200000FC002000007C002000003C002000003C007000001C00F80
0000C0FFF80000C0FFF800004028297EA82D>I<0001FF0000000F01E000003C00780000
78003C0000E0000E0001E0000F0003C000078007800003C00F800003E01F000001F01F00
0001F03E000000F83E000000F87E000000FC7E000000FC7C0000007C7C0000007CFC0000
007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC000000
7EFC0000007E7C0000007C7E000000FC7E000000FC7E000000FC3E000000F83F000001F8
1F000001F01F000001F00F800003E007800003C007C00007C003E0000F8000F0001E0000
78003C00003C007800000F01E0000001FF0000272B7DA92E>I<FFFFFF8000FFFFFFF000
07E000FC0003E0003E0003E0001F0003E0000F8003E0000FC003E00007C003E00007E003
E00007E003E00007E003E00007E003E00007E003E00007E003E00007C003E0000FC003E0
000F8003E0001F0003E0003E0003E001F80003FFFFE00003E000000003E000000003E000
000003E000000003E000000003E000000003E000000003E000000003E000000003E00000
0003E000000003E000000003E000000003E000000003E000000003E000000003E0000000
07F0000000FFFF800000FFFF80000023297EA829>I<FFFFFE000000FFFFFFC0000007E0
03F0000003E000FC000003E0003E000003E0001F000003E0001F800003E0000F800003E0
000FC00003E0000FC00003E0000FC00003E0000FC00003E0000FC00003E0000FC00003E0
000F800003E0001F000003E0001E000003E0003C000003E000F8000003E003E0000003FF
FE00000003E00780000003E001E0000003E000F0000003E00078000003E0007C000003E0
003C000003E0003E000003E0003E000003E0003E000003E0003E000003E0003F000003E0
003F000003E0003F000003E0003F000003E0003F008003E0003F808003E0001F808007F0
000F8100FFFF8007C100FFFF8003C20000000000FC00292A7EA82C>82
D<00FE010003FF83000F81E3001E0037003C001F0038000F007800070070000700F00003
00F0000300F0000300F0000100F8000100F8000100FC0000007C0000007F0000003FE000
001FFF00000FFFE00007FFF80003FFFC00007FFE000007FF0000007F0000001F8000000F
80000007C0000007C0800003C0800003C0800003C0800003C0C00003C0C0000380C00003
80E0000780F0000700F8000E00EE001C00C3C07800C1FFF000803FC0001A2B7DA921>I<
01FC00000E0780001001C0003C00E0003E00F0003E0078001C0078000800780000007800
0000780000007800007FF80003E078000F8078001F0078003E0078007C00780078007820
F8007820F8007820F8007820F800F8207C00F8203C013C401F063FC007F80F001B1A7E99
1E>97 D<07800000FF800000FF8000000F80000007800000078000000780000007800000
07800000078000000780000007800000078000000780000007800000078000000783F000
078C1C0007B0070007A0038007C003C0078001E0078001E0078000F0078000F0078000F8
078000F8078000F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0
078001E0078001C007C003C00740078007200E0006181C000407E0001D2A7FA921>I<00
7F8001C0700780080F003C1E007C3C007C3C00387C0010780000F80000F80000F80000F8
0000F80000F80000F80000F800007800007C00003C00043C00041E00080F001007802001
C0C0007F00161A7E991B>I<007E0003C3800700E00E00F01C00703C00783C003878003C
78003CF8003CF8003CFFFFFCF80000F80000F80000F80000F800007800007C00003C0004
3C00041E00080E001007002001C0C0007F00161A7E991B>101 D<0F001F801F801F801F
800F0000000000000000000000000000000000000007807F807F800F8007800780078007
800780078007800780078007800780078007800780078007800780078007800780FFF8FF
F80D297FA811>105 D<007800FC00FC00FC00FC00780000000000000000000000000000
00000000007C07FC07FC007C003C003C003C003C003C003C003C003C003C003C003C003C
003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C7038F838
F870F07060C01F800E3582A812>I<0780FF80FF800F8007800780078007800780078007
800780078007800780078007800780078007800780078007800780078007800780078007
8007800780078007800780078007800780078007800780FFFCFFFC0E2A7FA911>108
D<0781F800FC00FF860E030700FF98070C03800FA0079003C007A003D001E007C003E001
E007C003E001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001
E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001
E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001
E0FFFC7FFE3FFFFFFC7FFE3FFF301A7F9933>I<0783F800FF8C1C00FF900E000FA00700
07A0078007C0078007C00780078007800780078007800780078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780
0780078007800780FFFCFFFCFFFCFFFC1E1A7F9921>I<007F000001C1C000070070000E
0038001C001C003C001E003C001E0078000F0078000F00F8000F80F8000F80F8000F80F8
000F80F8000F80F8000F80F8000F80F8000F8078000F0078000F003C001E003C001E001E
003C000E0038000700700001C1C000007F0000191A7E991E>I<0783F000FF8C1C00FFB0
0F0007A0078007C003C0078003E0078001E0078001F0078001F0078000F8078000F80780
00F8078000F8078000F8078000F8078000F8078000F0078001F0078001F0078001E00780
03C007C003C007C0078007A00E0007983C000787E0000780000007800000078000000780
0000078000000780000007800000078000000780000007800000FFFC0000FFFC00001D26
7F9921>I<003F008001E0C180038021800F0013801E000B801E000F803C0007807C0007
807C00078078000780F8000780F8000780F8000780F8000780F8000780F8000780F80007
807C0007807C0007803C0007803E000F801E000F800F0017800780278001E0C780007F07
800000078000000780000007800000078000000780000007800000078000000780000007
80000007800000FFFC0000FFFC1E267E9920>I<0787C0FF98E0FF91F00FA1F007C1F007
C0E007C00007800007800007800007800007800007800007800007800007800007800007
800007800007800007800007800007800007C000FFFE00FFFE00141A7F9917>I<07F840
1C06C03001C06000C06000C0E00040E00040F00040F800007E00007FF0003FFE000FFF00
03FF80003FC00007C08001E08001E0C000E0C000E0C000E0E000C0F001C0F80180C40700
83F800131A7E9918>I<0080000080000080000080000180000180000180000380000380
000780000F80001FFF80FFFF800780000780000780000780000780000780000780000780
000780000780000780000780000780000780400780400780400780400780400780400780
4003C08001C08000E100003E0012257FA417>I<07800780FF80FF80FF80FF800F800F80
078007800780078007800780078007800780078007800780078007800780078007800780
0780078007800780078007800780078007800780078007800780078007800F8007800F80
0380178001C027C000E047FC003F87FC1E1A7F9921>I<FFF1FFC1FFFFF1FFC1FF0F803E
00780F001E003007801E002007801E002007801F002003C03F004003C027004003C02780
4001E067808001E043808001E043C08000F081C10000F081C10000F881E300007900E200
007900E200007D00F600003E007400003E007400001E007800001C003800001C00380000
0C0030000008001000281A7F992B>119 D<FFF00FF8FFF00FF80F8003C0078003800780
010003C0020003C0020003E0020001E0040001E0040000F0080000F0080000F818000078
100000781000003C2000003C2000003E6000001E4000001E4000000F8000000F80000007
000000070000000700000002000000020000000400000004000000040000000800007008
0000F8100000F8100000F8200000F0400000608000001F0000001D267F9920>121
D<FFFFFFFFFFFFFFE03B0180903C>124 D E /Fl 65 125 df<007E0001C18003018007
03C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C07F87F8151D809C17>12 D<003F07E00001C09C18000380F018000701F03C000E01E0
3C000E00E018000E00E000000E00E000000E00E000000E00E000000E00E00000FFFFFFFC
000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00
0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E
00E01C000E00E01C007FC7FCFF80211D809C23>14 D<6060F0F0F8F86868080808080808
101010102020404080800D0C7F9C15>34 D<60F0F8680808081010204080050C7C9C0C>
39 D<004000800100020006000C000C0018001800300030007000600060006000E000E0
00E000E000E000E000E000E000E000E000E000E000600060006000700030003000180018
000C000C00060002000100008000400A2A7D9E10>I<800040002000100018000C000C00
0600060003000300038001800180018001C001C001C001C001C001C001C001C001C001C0
01C001C0018001800180038003000300060006000C000C00180010002000400080000A2A
7E9E10>I<00060000000600000006000000060000000600000006000000060000000600
000006000000060000000600000006000000060000FFFFFFE0FFFFFFE000060000000600
000006000000060000000600000006000000060000000600000006000000060000000600
0000060000000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C830C>I<
FFE0FFE00B0280890E>I<60F0F06004047C830C>I<03C00C301818300C300C700E600660
06E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E300C30
0C18180C3007E0101D7E9B15>48 D<030007003F00C70007000700070007000700070007
000700070007000700070007000700070007000700070007000700070007000F80FFF80D
1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C
00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E018
30201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E000F00
0F700FF80FF80FF80FF00E401C201C183007E0101D7E9B15>I<000C00000C00001C0000
3C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C0030
1C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001
FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02430281830
1C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E9B15
>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007
E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<4000007FFF
807FFF007FFF0040020080040080040080080000100000100000200000600000400000C0
0000C00001C0000180000180000380000380000380000380000780000780000780000780
00078000078000030000111D7E9B15>I<03E00C301008200C2006600660066006700678
0C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C1C
1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007E007
6007700F300F18170C2707C700060006000E300C780C78187010203030C00F80101D7E9B
15>I<60F0F0600000000000000000000060F0F06004127C910C>I<7FFFFFC0FFFFFFE000
00000000000000000000000000000000000000000000000000000000000000FFFFFFE07F
FFFFC01B0C7E8F20>61 D<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F
001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F
000F0F000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D>66
D<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000
807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F00000
00F0000000700000807800008078000080380000801C0001001C0001000E000200070004
000180080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E00
0F0007000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E0
0F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F000380
0F0007800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F00
3C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F06000FFE
000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F00
0C0F003CFFFFFC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F
00040F02040F02000F02000F02000F06000FFE000F06000F02000F02000F02000F02000F
00000F00000F00000F00000F00000F00000F00000F8000FFF800161C7E9B1B>I<FFF3FF
C00F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C
000F003C000F003C000F003C000FFFFC000F003C000F003C000F003C000F003C000F003C
000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C00FFF3FF
C01A1C7E9B1F>72 D<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F
000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF00C1C7F9B0F>I<
1FFF00F80078007800780078007800780078007800780078007800780078007800780078
0078007800787078F878F878F878F0F040E021C01F00101D7F9B15>I<FF8000FF800F80
00F8000F8000F8000BC00178000BC00178000BC001780009E002780009E002780008F004
780008F004780008F0047800087808780008780878000878087800083C107800083C1078
00083C107800081E207800081E207800081E207800080F407800080F4078000807807800
0807807800080780780008030078001C03007800FF8307FF80211C7E9B26>77
D<FF007FC00F800E000F8004000BC0040009E0040009E0040008F0040008F80400087804
00083C0400083C0400081E0400080F0400080F0400080784000807C4000803C4000801E4
000801E4000800F40008007C0008007C0008003C0008003C0008001C0008000C001C000C
00FF8004001A1C7E9B1F>I<003F800000E0E0000380380007001C000E000E001C000700
3C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0
F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C000780
1C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<FFFF800F00
E00F00780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00
E00FFF800F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
000F0000FFF000171C7E9B1C>I<FFFF00000F01E0000F0078000F003C000F001C000F00
1E000F001E000F001E000F001E000F001C000F003C000F0078000F01E0000FFF00000F03
C0000F00E0000F00F0000F0078000F0078000F0078000F0078000F0078000F0078000F00
78100F0078100F0038100F003C20FFF01C20000007C01C1D7E9B1F>82
D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00
007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001
C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F
00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F
0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>
I<FFF07FC00F000E000F0004000F0004000F0004000F0004000F0004000F0004000F0004
000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
000F0004000F0004000F0004000F0004000700080007800800038010000180100000C020
000070C000001F00001A1D7E9B1F>I<FFE0FFE0FF1F001F003C1E001E00180F001F0010
0F001F00100F001F001007801F00200780278020078027802003C027804003C043C04003
C043C04003E043C04001E081E08001E081E08001E081E08000F100F10000F100F10000F1
00F100007900FA00007A007A00007A007A00003E007C00003C003C00003C003C00003C00
3C00001800180000180018000018001800281D7F9B2B>87 D<1FC000307000783800781C
00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C
40304E801F870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C0000
1C00001C00001C00001C00001C7C001D86001E03001C01801C01C01C00C01C00E01C00E0
1C00E01C00E01C00E01C00E01C00C01C01C01C01801E030019060010F800131D7F9C17>
I<07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007
C00E127E9112>I<003F0000070000070000070000070000070000070000070000070000
070000070003E7000C1700180F00300700700700600700E00700E00700E00700E00700E0
0700E00700600700700700300700180F000C370007C7E0131D7E9C17>I<03E00C301818
300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F127F9112>
I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E
000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038003C4C0
0C38C01C3880181800381C00381C00381C00381C001818001C38000C300013C000100000
3000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C0600180300300
1C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C00001C00001C00001C00
001C00001C00001C00001C7C001C87001D03001E03801C03801C03801C03801C03801C03
801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>I<18
003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<00C001E001E000C0
00000000000000000000000000000FE000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E000B25839C0D>
I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C3F
C01C0F001C0C001C08001C10001C20001C40001CE0001DE0001E70001C78001C38001C3C
001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01E01C00
1C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C
01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF802112
7F9124>I<FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C00
180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C0600180700380
3003001806000E1C0003F00012127F9115>I<FC7C001D86001E03001C01801C01C01C00
C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C01801E03001D06001CF8
001C00001C00001C00001C00001C00001C00001C0000FF8000131A7F9117>I<03C1000C
3300180B00300F00700700700700E00700E00700E00700E00700E00700E0070060070070
0700300F00180F000C370007C70000070000070000070000070000070000070000070000
3FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C
001C001C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F803FE00FF0
00F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C
003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E
2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C03801C03801C03801C03
801C03801C03801C03801C03801C03801C07800C07800E1B8003E3F014127F9117>I<FF
07E03C03801C01001C01000E02000E020007040007040007040003880003880003D80001
D00001D00000E00000E00000E00000400013127F9116>I<FF3FCFE03C0F03801C070180
1C0701001C0B01000E0B82000E0B82000E1182000711C4000711C4000720C40003A0E800
03A0E80003C0680001C0700001C0700001803000008020001B127F911E>I<7F8FF00F03
800F030007020003840001C80001D80000F00000700000780000F800009C00010E00020E
000607000403801E07C0FF0FF81512809116>I<FF07E03C03801C01001C01000E02000E
020007040007040007040003880003880003D80001D00001D00000E00000E00000E00000
4000004000008000008000F08000F10000F300006600003C0000131A7F9116>I<FFFFFF
FFFF802901808B2A>124 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300dpi
TeXDict begin
%%EndSetup
%%Page: 1 1
1 0 bop 1673 -75 a Fl(1)554 70 y Fk(Supplemen)n(tary)19
b(PR)n(OJ.4)h(Notes|)521 145 y(Swiss)f(Oblique)g(Mercator)h(Pro)s
(jection)817 203 y Fj(August)d(5,)f(1995)840 261 y(Release)g(4.3.3)749
319 y(b)o(y)g(Gerald)g(I.)f(Ev)o(enden)324 401 y Fl(This)10
b(pro)r(jection)g(is)g(an)g(oblique)f(Mercator)i(that)f(is)g(based)h
(up)q(on)f(a)g(metho)q(d)f(in)o(v)o(olving)262 451 y(three)15
b(steps:)312 526 y(1.)20 b(conformally)11 b(transform)i(ellipsoid)g(co)
q(ordinates)h(to)g(a)g(sphere,)312 605 y(2.)20 b(transform)13
b(the)h(spherical)g(system)f(so)g(that)h(the)g(sp)q(eci\014ed)h(pro)r
(jection)f(origin)e(will)365 655 y(lie)i(on)f(the)i(equator,)e(and)312
734 y(3.)20 b(p)q(erform)13 b(spherical)i(Mercator)g(con)o(v)o(ersion)f
(to)f(cartesian)i(co)q(ordinates.)262 809 y(The)f(pro)r(jection)h(name)
e(used)j(here)f(is)f(ten)o(tativ)o(e)h(and)f(is)g(deriv)o(ed)h(from)e
(it)h(use)h(with)f(the)262 859 y(Swiss)g(co)q(ordinate)g(system)g
(CH1903.)324 909 y(This)e(pro)r(jection)g(is)g(selected)i(in)e(the)h
(PR)o(OJ.4)f(system)g(b)o(y)g Fi(+proj=somerc)d Fl(with)j(pa-)262
959 y(rameters)g Fi(+lon_0=)f Fl(and)h Fi(+lat_0)f Fl(required)i(to)f
(sp)q(ecify)h(pro)r(jection)g(origin.)j(Optionally)m(,)262
1008 y(false)c(easting)i(and)f(northing,)f Fi(+x_0=)g
Fl(and)h Fi(+y_0)p Fl(,)f(ma)o(y)f(b)q(e)j(used)g(as)f(w)o(ell)g(as)g
(origin)f(scale)262 1058 y(factor)18 b Fi(k_0)p Fl(.)32
b(F)m(or)18 b(usage)h(with)f(the)i(Swiss)e(CH1903)g(system,)h
Fi(+init=world:CH1903)262 1108 y Fl(ma)o(y)11 b(b)q(e)k(used.)262
1214 y Fh(Ac)o(kno)o(wledgemen)o(t)262 1291 y Fl(The)23
b(dev)o(elopmen)o(t)f(presen)o(ted)j(here)f(w)o(as)f(due)g(to)g(the)h
(kind)e(assistance)i(of)f(Daniel)262 1341 y(Ebneter)17
b(of)f(the)g(Univ)o(ersit)o(y)h(of)e(Bern)i(who)f(con)o(tributed)h(in)o
(v)n(aluable)d(do)q(cumen)o(tation,)262 1390 y(co)q(de)g(and)g(other)h
(information)c(that)k(allo)o(w)o(ed)d(deriv)n(ation)i(of)f(the)i(basic)
f(pro)r(jection)h(and)262 1440 y(pro)o(vided)e(b)q(enc)o(hmark)h(v)n
(alues.)262 1547 y Fh(F)l(orw)o(ard)h(Pro)s(jection)262
1623 y Fl(The)e(\014rst)h(step)g(is)f(the)g(con)o(v)o(ersion)h(of)e
(geo)q(detic)i(latitude)e(to)h(a)g(sphere)i(b)o(y)e(the)g(follo)o(wing)
262 1673 y(equation:)355 1777 y(ln)6 b(tan)463 1719 y
Fg(\022)498 1749 y Ff(\031)p 498 1768 26 2 v 500 1806
a Fl(4)538 1777 y(+)584 1749 y Ff(\036)609 1734 y Fe(0)p
584 1768 37 2 v 592 1806 a Fl(2)626 1719 y Fg(\023)698
1777 y Fl(=)42 b Ff(c)797 1719 y Fg(\024)818 1777 y Fl(ln)7
b(tan)927 1719 y Fg(\022)962 1749 y Ff(\031)p 962 1768
26 2 v 964 1806 a Fl(4)1002 1777 y(+)1048 1749 y Ff(\036)p
1048 1768 25 2 v 1050 1806 a Fl(2)1078 1719 y Fg(\023)1118
1777 y Fd(\000)1165 1749 y Ff(e)p 1164 1768 21 2 v 1164
1806 a Fl(2)1197 1777 y(ln)1238 1719 y Fg(\022)1274 1749
y Fl(1)i(+)g Ff(e)e Fl(sin)g Ff(\036)p 1274 1768 181
2 v 1274 1806 a Fl(1)i Fd(\000)g Ff(e)e Fl(sin)g Ff(\036)1459
1719 y Fg(\023\025)1521 1777 y Fl(+)i Ff(K)44 b Fl(\(1\))620
1866 y Ff(\025)644 1849 y Fe(0)698 1866 y Fl(=)e Ff(c)p
Fl(\()p Ff(\025)9 b Fd(\000)h Ff(\025)905 1872 y Fc(0)923
1866 y Fl(\))702 b(\(2\))262 1948 y(where)12 b Ff(\036)g
Fl(is)f(latitude)h(on)f(the)i(ellipsoid,)d Ff(\036)929
1933 y Fe(0)952 1948 y Fl(is)i(latitude)f(on)h(the)g(sphere)i(and)d
Ff(e)h Fl(is)g(ellipsoid)262 1998 y(eccen)o(tricit)o(y)m(.)21
b(The)16 b(factors)f Ff(c)f Fl(and)h Ff(K)j Fl(are)d(determined)g(from)
e(the)j(designated)f(latitude)262 2048 y(origin)d(of)i(the)g(pro)r
(jection:)k Ff(\036)736 2054 y Fc(0)755 2048 y Fl(.)g(First,)c
Ff(c)f Fl(is)h(obtained)g(from:)759 2165 y Ff(c)d Fl(=)832
2106 y Fg(\022)863 2165 y Fl(1)e(+)939 2137 y Ff(e)958
2122 y Fc(2)984 2137 y Fl(cos)1040 2122 y Fc(4)1065 2137
y Ff(\036)1090 2143 y Fc(0)p 939 2155 170 2 v 969 2193
a Fl(1)g Fd(\000)h Ff(e)1060 2181 y Fc(2)1114 2106 y
Fg(\023)1144 2113 y Fc(1)p Fb(=)p Fc(2)262 2269 y Fl(Next)k(the)g
(equiv)n(alen)o(t)g(origin)e(latitude)i(on)g(the)g(sphere)i(is)d
(obtained)h(b)o(y:)844 2370 y(sin)7 b Ff(\036)927 2353
y Fe(0)927 2380 y Fc(0)956 2370 y Fl(=)1005 2342 y(sin)g
Ff(\036)1088 2348 y Fc(0)p 1005 2360 102 2 v 1047 2398
a Ff(c)262 2466 y Fl(Substitute)14 b Ff(\036)487 2472
y Fc(0)520 2466 y Fl(and)f Ff(\036)625 2450 y Fe(0)625
2476 y Fc(0)657 2466 y Fl(in)o(to)h(Eqn.)f(1)h(and)g(solv)o(e)f(for)h
Ff(K)s Fl(.)324 2515 y(Next)i(the)g(spherical)g(co)q(ordinates,)g
Ff(\036)934 2500 y Fe(0)961 2515 y Fl(and)g Ff(\025)1068
2500 y Fe(0)1080 2515 y Fl(,)f(are)h(rotated)g(b)o(y)f
Ff(\036)1409 2521 y Fc(0)1443 2515 y Fl(ab)q(out)h(an)f(axis)262
2565 y(through)k(the)h(equator)g(and)f(p)q(erp)q(endicular)h(to)g(the)g
(plane)f(of)g(the)h(cen)o(tral)f(meridian)262 2615 y(\(W)m(ra)o(y's)12
b Fa(simple)j(oblique)p Fl(\))f(so)g(that)g(the)g(latitude)g
Ff(\036)1092 2621 y Fc(0)1124 2615 y Fl(b)q(ecomes)g
Ff(\036)1314 2600 y Fe(00)1347 2615 y Fl(=)d(0)j(at)g
Ff(\025)1500 2621 y Fc(0)1519 2615 y Fl(:)583 2697 y(sin)7
b Ff(\036)666 2679 y Fe(00)728 2697 y Fl(=)42 b(cos)8
b Ff(\036)890 2679 y Fe(0)890 2707 y Fc(0)915 2697 y
Fl(sin)f Ff(\036)998 2679 y Fe(0)1018 2697 y Fd(\000)j
Fl(sin)d Ff(\036)1143 2679 y Fe(0)1143 2707 y Fc(0)1168
2697 y Fl(cos)h Ff(\036)1256 2679 y Fe(0)1274 2697 y
Fl(cos)f Ff(\025)1360 2679 y Fe(0)1641 2697 y Fl(\(3\))583
2759 y(sin)g Ff(\025)665 2742 y Fe(00)728 2759 y Fl(=)42
b(cos)8 b Ff(\036)890 2742 y Fe(0)908 2759 y Fl(sin)f
Ff(\025)990 2742 y Fe(0)1002 2759 y Ff(=)g Fl(cos)g Ff(\036)1117
2742 y Fe(00)1641 2759 y Fl(\(4\))p eop
%%Page: 2 2
2 1 bop 1673 -75 a Fl(2)324 70 y(Finally)m(,)9 b(transform)i(the)h
(rotated)h(co)q(ordinates)f(to)g(cartesian)g(b)o(y)g(the)g(spherical)g
(form)262 120 y(of)h(the)h(Mercator)h(pro)r(jection:)690
234 y Ff(y)43 b Fl(=)f Ff(R)7 b Fl(ln)g(tan)974 175 y
Fg(\022)1010 206 y Ff(\031)p 1010 224 26 2 v 1012 263
a Fl(4)1049 234 y(+)1096 206 y Ff(\036)1121 191 y Fe(00)p
1096 224 46 2 v 1108 263 a Fl(2)1147 175 y Fg(\023)1186
234 y Fl(+)j Ff(y)1248 240 y Fc(0)1641 234 y Fl(\(5\))688
323 y Ff(x)41 b Fl(=)h Ff(R\025)883 306 y Fe(00)914 323
y Fl(+)9 b Ff(x)979 329 y Fc(0)1641 323 y Fl(\(6\))262
415 y(where)14 b Ff(R)f Fl(is)g(the)h(geometric)e(mean)g(of)h(the)g
(merdinal)f(and)h(parallel)f(radius)h(at)g(the)h(refer-)262
464 y(ence)h(p)q(oin)o(t:)780 543 y Ff(R)c Fl(=)h Ff(k)889
549 y Fc(0)907 543 y Ff(a)980 480 y Fd(p)p 1015 480 110
2 v 35 x Fl(1)d Fd(\000)g Ff(e)1105 503 y Fc(2)p 934
533 237 2 v 934 574 a Fl(1)g Fd(\000)h Ff(e)1025 562
y Fc(2)1051 574 y Fl(sin)1101 557 y Fc(2)1127 574 y Ff(\036)1152
580 y Fc(0)262 640 y Fl(where)17 b Ff(a)g Fl(is)f(the)h(ma)r(jor)e
(axis)h(of)g(the)h(ellipsoid.)25 b(The)17 b(scaling)f(factor,)h
Ff(k)1445 646 y Fc(0)1463 640 y Fl(,)g(is)f(not)h(used)262
690 y(\(=)12 b(1\))j(in)f(the)h(Swiss)g(v)o(ersion)f(but)h(it)f(can)h
(reduce)h(o)o(v)o(erall)d(scale)i(error)g(if)f(appropriately)262
740 y(applied.)262 848 y Fh(In)o(v)o(erse)g(Pro)s(jection)262
924 y Fl(T)m(o)f(get)h(the)g(cartesian)h(co)q(ordinates)g(bac)o(k)e(in)
o(to)h(the)g(rotated)g(spherical)h(system:)632 1038 y
Ff(\036)657 1021 y Fe(00)719 1038 y Fl(=)42 b(2)821 980
y Fg(\024)843 1038 y Ff(tan)905 1021 y Fe(\000)p Fc(1)956
1038 y Fl(exp)1026 980 y Fg(\022)1062 1010 y Ff(y)11
b Fd(\000)e Ff(y)1154 1016 y Fc(0)p 1062 1029 112 2 v
1102 1067 a Ff(R)1178 980 y Fg(\023)1218 1038 y Fd(\000)1265
1010 y Ff(\031)p 1265 1029 26 2 v 1267 1067 a Fl(4)1295
980 y Fg(\025)1641 1038 y Fl(\(7\))632 1147 y Ff(\025)656
1130 y Fe(00)719 1147 y Fl(=)798 1119 y Ff(y)i Fd(\000)e
Ff(y)890 1125 y Fc(0)p 798 1137 112 2 v 838 1175 a Ff(R)1641
1147 y Fl(\(8\))262 1250 y(Rotate)k(the)i(spherical)f(co)q(ordinates)h
(bac)o(k)e(to)h(the)h(original)d(p)q(osition:)573 1341
y(sin)7 b Ff(\036)656 1324 y Fe(0)709 1341 y Fl(=)42
b(cos)7 b Ff(\036)870 1324 y Fe(0)870 1351 y Fc(0)896
1341 y Fl(sin)g Ff(\036)979 1324 y Fe(00)1009 1341 y
Fl(+)i(sin)e Ff(\036)1133 1324 y Fe(0)1133 1351 y Fc(0)1158
1341 y Fl(cos)h Ff(\036)1246 1324 y Fe(00)1274 1341 y
Fl(cos)f Ff(\025)1360 1324 y Fe(00)1641 1341 y Fl(\(9\))574
1403 y(sin)g Ff(\025)656 1386 y Fe(0)709 1403 y Fl(=)42
b(cos)7 b Ff(\036)870 1386 y Fe(00)898 1403 y Fl(sin)g
Ff(\025)980 1386 y Fe(00)1002 1403 y Ff(=)g Fl(cos)g
Ff(\036)1117 1386 y Fe(0)1620 1403 y Fl(\(10\))324 1495
y(The)19 b(ellipsoid)e(longitude)h(is)h(obtained)f(from)f(Eqn.)i(2)f
(but)h(latitude)f(requires)i(ap-)262 1544 y(plication)c(of)h
(Newton-Raphson)g(metho)q(d)g(for)g(a)g(solution)g(of)g(Eqn.)g(1:)25
b Ff(x)1471 1550 y Fb(n)p Fc(+1)1553 1544 y Fl(=)18 b
Ff(x)1627 1550 y Fb(n)1661 1544 y Fd(\000)262 1594 y
Ff(f)t Fl(\()p Ff(x)326 1600 y Fb(n)349 1594 y Fl(\))p
Ff(=f)410 1579 y Fe(0)422 1594 y Fl(\()p Ff(x)462 1600
y Fb(n)485 1594 y Fl(\).)g(The)c(correction)h(ratio)e(is:)461
1656 y Fg(\024)483 1715 y Ff(C)f Fl(+)d(ln)e(tan)675
1656 y Fg(\022)710 1686 y Ff(\031)p 710 1705 26 2 v 712
1743 a Fl(4)750 1715 y(+)796 1686 y Ff(\036)p 796 1705
25 2 v 798 1743 a Fl(2)826 1656 y Fg(\023)866 1715 y
Fd(\000)913 1686 y Ff(e)p 912 1705 21 2 v 912 1743 a
Fl(2)945 1715 y(ln)986 1656 y Fg(\022)1022 1686 y Fl(1)i(+)g
Ff(e)e Fl(sin)g Ff(\036)p 1022 1705 181 2 v 1022 1743
a Fl(1)i Fd(\000)g Ff(e)e Fl(sin)g Ff(\036)1207 1656
y Fg(\023\025)1272 1686 y Fl(1)i Fd(\000)g Ff(e)1362
1671 y Fc(2)1388 1686 y Fl(sin)1439 1669 y Fc(2)1464
1686 y Ff(\036)p 1272 1705 218 2 v 1326 1743 a Fl(1)g
Fd(\000)g Ff(e)1416 1731 y Fc(2)262 1828 y Fl(where:)703
1893 y Ff(C)15 b Fl(=)796 1865 y(1)p 796 1883 21 2 v
797 1921 a Ff(c)829 1834 y Fg(\024)851 1893 y Ff(K)d
Fd(\000)e Fl(ln)c(tan)1048 1834 y Fg(\022)1084 1865 y
Ff(\031)p 1084 1883 26 2 v 1086 1921 a Fl(4)1123 1893
y(+)1170 1865 y Ff(\036)p 1170 1883 25 2 v 1172 1921
a Fl(2)1199 1834 y Fg(\023\025)262 1992 y Fl(Use)19 b
Ff(\036)371 1977 y Fe(0)402 1992 y Fl(as)g(the)h(initial)d(estimate)h
(of)h Ff(\036)f Fl(and)h(iterate)h(un)o(til)e(the)i(correction)g(ratio)
e(has)262 2042 y(reac)o(hed)d(su\016cien)o(t)f(tolerance.)19
b(The)14 b(function)g(is)g(rapidly)e(con)o(v)o(ergen)o(t.)262
2150 y Fh(Standard)h(De\014nition)262 2227 y Fl(The)f(follo)o(wing)d
(en)o(try)j(has)g(b)q(een)h(placed)f(in)f(the)i Fi(world)d
Fl(\014le)i(to)g(facilitate)e(CH1903)h(usage)262 2277
y(with)i(the)i(PR)o(OJ.4)e(system)h(b)o(y)f(sp)q(ecifying)h
Fi(+init=world:CH1903)o Fl(:)262 2360 y Fi(<CH1903>)20
b(#)h(Swiss)g(Coordinate)f(System)349 2409 y(+proj=somerc)f
(+lat_0=46d57'8.66)o(0"N)g(+lon_0=7d26'22.5)o(00"E)349
2459 y(+ellps=bessel)g(+x_0=600000)g(+y_0=200000)349
2509 y(+k_0=1.)42 b(no_defs)20 b(<>)262 2592 y Fl(Note,)g(the)f
(original)e(are)j("rev)o(erse)g(engineered")h(from)c(decimal)g(v)n
(alues)i(as)g(I)g(susp)q(ect)262 2642 y(original)12 b(sp)q
(eci\014cations)j(w)o(ere)f(in)g(DMS)f(format|needs)g(v)o
(eri\014cation.)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF
-13
View File
@@ -1,13 +0,0 @@
name: proj
channels:
- conda-forge
dependencies:
- descartes
- geojson
- matplotlib
- shapely < 1.8
- pip
- pip:
- Jinja2 < 3.1
- sphinx < 3
- sphinx-rtd-theme < 1.0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

+62681
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because one or more lines are too long
-30822
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-7
View File
@@ -1,7 +0,0 @@
for f in $(ls *.png)
do
convert $f -fx '(r+g+b)/3' -colorspace Gray $f
done;
-424
View File
@@ -1,424 +0,0 @@
#!/usr/bin/env python3
'''
Plot map data in different projections supported by PROJ.
Call with:
> python plot.py plotdefs outdir [plotname, [plotname, [plotname, ...]]]
The output dir is optional. Uses current dir if not set.
Inputs:
------
plotdefs: A JSON file with setup for each auto-generated plot.
outdir: Directory to put the plots in.
plotname: A list of plot names within the plotdefs file. More
than one plotname can be given at once.
Plot definitions:
----------------
Plots are defined by a JSON dict. A plot is defined by a name, filename,
bounding box (lat/long space), a proj-string, plottype and resolution.
An example of the setup for the plot for the Airy projection is shown below:
{
"filename": "airy.png",
"latmax": 90,
"latmin": -90,
"lonmax": 90,
"lonmin": -90,
"name": "airy",
"projstring": "+proj=airy",
"res": "low",
"type": "poly"
}
"res" can be either "low" or "med" and "type" can be either "poly"(gon)
or "line". The rest of the inputs are fairly free form.
Change PROJ to path on your local system before running the script.
'''
import argparse
import os
import shutil
import sys
import json
import subprocess
import functools
from pathlib import Path
import geojson
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import MultiPolygon, Polygon, box as Box
from shapely.geometry import shape
from shapely.ops import transform
from descartes import PolygonPatch
PROJ_COMMAND = os.environ.get('PROJ_EXE', '../../src/proj')
if not os.path.exists(PROJ_COMMAND):
PROJ = shutil.which('proj')
if PROJ is None:
raise ValueError("specify PROJ_EXE or modify PATH to find proj")
else:
PROJ = PROJ_COMMAND
PROJ_LIB = os.environ.get('PROJ_LIB', '../../nad')
LINE_LOW = 'data/coastline.geojson'
LINE_MED = 'data/coastline50.geojson'
POLY_LOW = 'data/land.geojson'
POLY_MED = 'data/land50.geojson'
GRATICULE_WIDTH = 15
N_POINTS = 1000
# colors
COLOR_LAND = '#000000'
COLOR_COAST = '#000000'
COLOR_GRAT = '#888888'
def interp_coords(coords, tol):
'''
Interpolates extra coordinates when the euclidean distance between adjacent
points are larger than given tolerance.
The function tries to densify a list of coordinates based on a simple measure.
If two adjacent points in the input coordinate list are further away from each
other than the specified tolerance, the list will be densified between those two
points. Roughly speaking, a point will be inserted every `tol` between the
points.
Inputs:
-------
coords: 2xN numpy array with geodetic coordinates
tol: Euclidean distance tolerance.
Returns:
--------
A densified numpy array of coordinates. If tol < 0 the input array is returned
unchanged.
'''
if tol < 0:
return coords
x, y = coords
x = np.array(x)
y = np.array(y)
dsts = np.hypot(np.diff(x), np.diff(y))
# Points to the *beginning* of the segment.
I = np.where(dsts > tol)[0]
offset = 0
xy = []
for i in I:
# Add points that are already below tolerance.
xy.append((x[offset:i], y[offset:i]))
# Interpolate between points above tolerance.
n = int(np.ceil(dsts[i] / tol))
x1 = np.linspace(x[i], x[i + 1], n + 1)
y1 = np.linspace(y[i], y[i + 1], n + 1)
xy.append((x1[:-1], y1[:-1]))
offset = i + 1
xy.append((x[offset:], y[offset:]))
xy = np.concatenate(xy, axis=1)
return xy.T
def project(coordinates, proj_string, in_radians=False):
'''
Project geographical coordinates
Input:
------
coordinates: numpy ndarray of size (N,2) and type double.
longitude, latitude
proj_string: Definition of output projection
Out:
----
numpy ndarray with shape (N,2) with N pairs of 2D
coordinates (x, y).
'''
# proj expects binary input to be in radians
if not in_radians:
coordinates = np.deg2rad(coordinates)
coordinates = coordinates.astype(np.double, copy=False)
# set up cmd call. -b for binary in/out
args = [PROJ, '-b']
args.extend(proj_string.split(' '))
try:
proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
env={'PROJ_LIB': os.path.abspath(PROJ_LIB)})
except FileNotFoundError as e:
print("'proj' binary not found, set the PROJ_EXE environment variable "
"to point to your local 'proj' binary --%s--" % e)
exit(1)
stdout, _ = proc.communicate(coordinates.tobytes(order='C'))
out = np.frombuffer(stdout, dtype=np.double)
return np.reshape(out, (-1, 2))
def project_xy(x, y, proj_string):
'''
Wrapper for project() that works with shapely.ops.transform().
'''
a = project(np.column_stack((x, y)), proj_string)
return a.T
def meridian(lon, lat_min, lat_max):
'''
Calculate meridian coordinates.
'''
coords = np.zeros((N_POINTS, 2))
coords[:, 0] = lon
coords[:, 1] = np.linspace(lat_min, lat_max, N_POINTS)
return coords
def parallel(lat, lon_min, lon_max):
'''
Calculate parallel coordinates.
'''
coords = np.zeros((N_POINTS, 2))
coords[:, 0] = np.linspace(lon_min, lon_max, N_POINTS)
coords[:, 1] = lat
return coords
def build_graticule(lonmin=-180, lonmax=180, latmin=-85, latmax=85):
'''
Build graticule
'''
# we might get unwanted floats
lonmin = int(lonmin)
lonmax = int(lonmax)
latmin = int(latmin)
latmax = int(latmax)
graticule = []
for lon in range(lonmin, lonmax+1, GRATICULE_WIDTH):
graticule.append(meridian(lon, latmin, latmax))
for lat in range(latmin, latmax+1, GRATICULE_WIDTH):
graticule.append(parallel(lat, lonmin, lonmax))
return graticule
def resample_polygon(polygon):
'''
Use interp_coords() to resample (multi)polygons.
'''
try:
xy = polygon.exterior.coords.xy
except AttributeError: #no xy's
return polygon
ext = interp_coords(xy, 2)
# interiors
rings = []
for int_ring in polygon.interiors:
rings.append(interp_coords(int_ring.coords.xy, 2))
return Polygon(ext, rings)
def plot_with_interruptions(axes, x, y, delta_cut=1e100, **kwargs):
"""
Plot x/y with proper splitting for interrupted projections.
"""
_x = np.atleast_1d(x)
_y = np.atleast_1d(y)
dx = np.nan_to_num(_x[1: ]) - np.nan_to_num(_x[0: -1])
dy = np.nan_to_num(_y[1: ]) - np.nan_to_num(_y[0: -1])
split, = ((np.abs(dx) > delta_cut) | (np.abs(dy) > delta_cut)).nonzero()
split = np.append(split, _x.size - 1)
split += 1
last_part = 0
for part in split:
axes.plot(x[last_part: part],
y[last_part: part],
**kwargs)
last_part = part
def plotproj(plotdef, data, outdir):
'''
Plot map.
'''
axes = plt.axes()
box = Box(
plotdef['lonmin'], plotdef['latmin'],
plotdef['lonmax'], plotdef['latmax'])
for feat in data["features"]:
geom = shape(feat["geometry"])
if not geom.intersects(box):
continue
temp_pol = geom.intersection(box)
if plotdef['type'] == 'poly':
if isinstance(temp_pol, MultiPolygon):
polys = [resample_polygon(polygon) for polygon in temp_pol.geoms]
pol = MultiPolygon(polys)
else:
pol = resample_polygon(temp_pol)
else:
pol = temp_pol
trans = functools.partial(project_xy, proj_string=plotdef['projstring'])
proj_geom = transform(trans, pol)
if plotdef['type'] == 'poly':
try:
patch = PolygonPatch(proj_geom, fc=COLOR_LAND, zorder=0)
axes.add_patch(patch)
except TypeError:
pass
else:
x, y = proj_geom.xy
plot_with_interruptions(axes, x, y, color=COLOR_COAST, linewidth=0.5,
delta_cut=plotdef.get('delta_cut', 1e100))
# Plot frame
frame = [
parallel(plotdef['latmin'], plotdef['lonmin'], plotdef['lonmax']),
parallel(plotdef['latmax'], plotdef['lonmin'], plotdef['lonmax']),
]
for line in frame:
line = project(line, plotdef['projstring'])
x = line[:, 0]
y = line[:, 1]
plot_with_interruptions(axes, x, y, color='black', linestyle='-',
delta_cut=plotdef.get('delta_cut', 1e6))
graticule = build_graticule(
plotdef['lonmin'],
plotdef['lonmax'],
plotdef['latmin'],
plotdef['latmax'],
)
# Plot graticule
for feature in graticule:
feature = project(feature, plotdef['projstring'])
x = feature[:, 0]
y = feature[:, 1]
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
delta_cut=plotdef.get('delta_cut', 1e6))
# Plot interrupted boundaries if necessary
interrupted_lines = []
if 'top_interrupted_lons' in plotdef:
for lon in plotdef['top_interrupted_lons']:
for delta in [-0.0001, 0.0001]:
merid = meridian(lon + delta, 0.0, plotdef['latmax'])
interrupted_lines.append(project(merid, plotdef['projstring']))
if 'bottom_interrupted_lons' in plotdef:
for lon in plotdef['bottom_interrupted_lons']:
for delta in [-0.0001, 0.0001]:
merid = meridian(lon + delta, plotdef['latmin'], 0)
interrupted_lines.append(project(merid, plotdef['projstring']))
for line in interrupted_lines:
x = line[:, 0]
y = line[:, 1]
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
delta_cut=plotdef.get('delta_cut', 1e100))
# Switch off the axis lines...
plt.axis('off')
# ... and additionally switch off the visibility of the axis lines and
# labels so they can be removed by "bbox_inches='tight'" when saving
axes.get_xaxis().set_visible(False)
axes.get_yaxis().set_visible(False)
font = {
'family': 'serif',
'color': 'black',
'style': 'italic',
'size': 12
}
# Make sure the plot is not stretched
axes.set_aspect('equal')
outdir = Path(outdir)
if not outdir.exists():
outdir.mkdir(parents=True)
if not outdir.is_dir():
raise OSError("outdir is not a directory")
plt.savefig(outdir / plotdef['filename'],
dpi=400,
bbox_inches='tight')
# Clean up
axes = None
del axes
plt.close()
def main(plotdefs, outdir, plots=[]):
'''
Main function of plotting script.
Parses json-file with plot setups and runs the plotting
for each plot setup.
'''
plotdefs = json.loads(Path(plotdefs).read_text())
data = {
('line', 'low'): geojson.loads(Path(LINE_LOW).read_text()),
('line', 'med'): geojson.loads(Path(LINE_MED).read_text()),
('poly', 'low'): geojson.loads(Path(POLY_LOW).read_text()),
('poly', 'med'): geojson.loads(Path(POLY_MED).read_text()),
}
for i, plotdef in enumerate(plotdefs):
if plots != [] and plotdef['name'] not in plots:
continue
print(i, plotdef['projstring'])
if 'skip' in plotdef.keys():
print('skipping')
continue
plotproj(plotdef, data[(plotdef['type'], plotdef['res'])], outdir)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
'plotdefs',
help='A JSON file with setup for each auto-generated plot')
parser.add_argument(
'outdir',
help='Directory to put the plots in.')
parser.add_argument(
'plots', nargs='*',
help='A list of plot names within the plotdefs file. '
'More than one plotname can be given at once.')
args = parser.parse_args()
sys.exit(main(**vars(args)))
File diff suppressed because it is too large Load Diff
+17201
View File
File diff suppressed because it is too large Load Diff
+37203
View File
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,12 +0,0 @@
#!/bin/sh
set -e
export PATH="$HOME/.local/bin:$PATH"
export PROJ_LIB="$HOME/.local/share/proj"
cd docs/plot
python plot.py plotdefs.json images
cd ../..
mkdir -p docs/source/operations/projections/images/
cp -r docs/plot/images/* docs/source/operations/projections/images/
-9
View File
@@ -1,9 +0,0 @@
#!/bin/sh
set -e
mkdir build
cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-Wno-error -DCMAKE_INSTALL_PREFIX=$HOME/.local ..
ninja install
-57
View File
@@ -1,57 +0,0 @@
/* override table width restrictions */
@media screen and (min-width: 767px) {
.wy-table-responsive table td {
/* !important prevents the common CSS stylesheets from overriding
this as on RTD they are loaded after this stylesheet */
white-space: normal !important;
}
.wy-table-responsive {
overflow: visible !important;
}
}
/* Align equation numbers to the right of the equation, not above */
div.math {
position: relative;
padding-right: 2.5em;
}
.eqno {
height: 100%;
position: absolute;
right: 0;
padding-left: 5px;
padding-bottom: 5px;
}
.eqno:before {
/* Force vertical alignment of number */
display: inline-block;
height: 100%;
vertical-align: middle;
content: "";
}
.eqno .headerlink {
display: none;
visibility: hidden;
font-size: 14px;
padding-left: .3em;
}
.eqno:hover .headerlink {
display: inline-block;
visibility: hidden;
margin-right: -1.05em;
}
.eqno .headerlink:after {
visibility: visible;
content: "\f0c1";
font-family: FontAwesome;
display: inline-block;
margin-left: -.9em;
}
/* Make responsive */
.MathJax_Display {
max-width: 100%;
overflow-x: auto;
overflow-y: hidden;
}
-312
View File
@@ -1,312 +0,0 @@
# -*- coding: utf-8 -*-
#
# PROJ.4 documentation build configuration file, created by
# sphinx-quickstart on Wed Feb 24 10:47:15 2016.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.mathjax',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'PROJ.4'
copyright = u'1983-2018'
author = u'Gerald Evenden, Frank Warmerdam, and others'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = u'5.0'
# The full version, including alpha/beta/rc tags.
release = u'5.0.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
# language = 'en'
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
today = 'April 2018'
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = []
# The reST default role (used for this markup: `text`) to use for all
# documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# Specify default language for syntax highlighting.
highlight_language = 'none'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
import sphinx_rtd_theme
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
html_theme = "sphinx_rtd_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
htm_css_files = [
'theme_overrides.css', # override wide tables in RTD theme
]
html_context = {
'display_github': True,
'theme_vcs_pageview_mode': 'edit',
'github_user': 'OSGeo',
'github_repo': 'PROJ',
'github_version': '/5.0/docs/source/',
}
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
html_last_updated_fmt = '%d %b %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
html_show_sourcelink = False
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
#html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
#html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'proj4doc'
# -- Options for LaTeX output ---------------------------------------------
preamble = r"""
\ifdefined\DeclareUnicodeCharacter
\DeclareUnicodeCharacter{2032}{$'$}% prime
\fi
\usepackage[notbib,notindex]{tocbibind}
"""
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
'preamble': preamble,
'inputenc': r'\usepackage[utf8]{inputenc}',
# Latex figure (float) alignment
#'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'proj4.tex', u'PROJ.4 Documentation',
author, 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'proj4', u'PROJ.4 Documentation',
[author], 1)
]
# If true, show URL addresses after external links.
#man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'proj4', u'PROJ.4 Documentation',
author, 'proj4', 'One line description of project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
-242
View File
@@ -1,242 +0,0 @@
.. _contributing:
===========================
Contributing
===========================
PROJ has a wide and varied user base. Some are highly skilled
geodesists with a deep knowledge of map projections and reference
systems, some are GIS software developers and others are GIS users. All
users, regardless of the profession or skill level, has the ability to
contribute to PROJ. Here's a few suggestion on how:
- Help PROJ-users that is less experienced than yourself.
- Write a bug report
- Request a new feature
- Write documentation for your favorite map projection
- Fix a bug
- Implement a new feature
In the following sections you can find some guidelines on how to
contribute. As PROJ is managed on GitHub most contributions require
that you have a GitHub account. Familiarity with
`issues <https://guides.github.com/features/issues/>`__ and the `GitHub
Flow <https://guides.github.com/introduction/flow/>`__ is an advantage.
Help a fellow PROJ user
-------------------------
The main forum for support for PROJ is the mailing list. You can
subscribe to the mailing list
`here <http://lists.maptools.org/mailman/listinfo/proj>`__ and read the
archive `here <http://lists.maptools.org/pipermail/proj/>`__.
If you have questions about the usage of PROJ the mailing list is also
the place to go. Please *do not* use the GitHub issue tracker as a
support forum. Your question is much more likely to be answered on the
mailing list, as many more people follow that than the issue tracker.
Adding bug reports
------------------
Bug reports are handled in the `issue
tracker <https://github.com/OSGeo/proj.4/issues>`__ on PROJ's home on
GitHub. Writing a good bug report is not easy. But fixing a poorly
documented bug is not easy either, so please put in the effort it takes
to create a thorough bug report.
A good bug report includes at least:
- A title that quickly explains the problem
- A description of the problem and how it can be reproduced
- Version of PROJ being used
- Version numbers of any other relevant software being used, e.g.
operating system
- A description of what already has been done to solve the problem
The more information that is given up front, the more likely it is that
a developer will find interest in solving the problem. You will probably
get follow-up questions after submitting a bug report. Please answer
them in a timely manner if you have an interest in getting the issue
solved.
Finally, please only submit bug reports that are actually related to
PROJ. If the issue materializes in software that uses PROJ it is
likely a problem with that particular software. Make sure that it
actually is a PROJ problem before you submit an issue. If you can
reproduce the problem only by using tools from PROJ it is definitely a
problem with PROJ.
Feature requests
----------------
Got an idea for a new feature in PROJ? Submit a thorough description
of the new feature in the `issue
tracker <https://github.com/OSGeo/proj.4/issues>`__. Please include any
technical documents that can help the developer make the new feature a
reality. An example of this could be a publicly available academic paper
that describes a new projection. Also, including a numerical test case
will make it much easier to verify that an implementation of your
requested feature actually works as you expect.
Note that not all feature requests are accepted.
Write documentation
-------------------
PROJ is in dire need of better documentation. Any contributiions of
documentation are greatly appreaciated. The PROJ documentation is
available on `proj4.org <ttp://proj4.org>`__. The website is generated
with `Sphinx <http://www.sphinx-doc.org/en/stable/>`__. Contributions to
the documentation should be made as `Pull
Requests <https://github.com/OSGeo/proj.4/pulls>`__ on GitHub.
If you intend to document one of PROJ's supported projections please
use the `Mercator projection <http://proj4.org/projections/merc.html>`__
as a template.
Code contributions
------------------
Code contributions can be either bug fixes or new features. The process
is the same for both, so they will be discussed together in this
section.
Making Changes
~~~~~~~~~~~~~~
- Create a topic branch from where you want to base your work.
- You usually should base your topic branch off of the master branch.
- To quickly create a topic branch: ``git checkout -b my-topic-branch``
- Make commits of logical units.
- Check for unnecessary whitespace with ``git diff --check`` before
committing.
- Make sure your commit messages are in the `proper
format <http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html>`__.
- Make sure you have added the necessary tests for your changes.
- Make sure that all tests pass
Submitting Changes
~~~~~~~~~~~~~~~~~~
- Push your changes to a topic branch in your fork of the repository.
- Submit a pull request to the PROJ repository in the OSGeo
organization.
- If your pull request fixes/references an issue, include that issue
number in the pull request. For example:
::
Wiz the bang
Fixes #123.
- PROJ developers will look at your patch and take an appropriate
action.
Coding conventions
~~~~~~~~~~~~~~~~~~
Programming language
^^^^^^^^^^^^^^^^^^^^
PROJ is developed strictly in ANSI C 89.
Coding style
^^^^^^^^^^^^
We don't enforce any particular coding style, but please try to keep it
as simple as possible. If improving existing code, please try to conform
with the style of the locally surrounding code.
Whitespace
^^^^^^^^^^
Throughout the PROJ code base you will see differing whitespace use.
The general rule is to keep whitespace in whatever form it is in the
file you are currently editing. If the file has a mix of tabs and space
please convert the tabs to space in a separate commit before making any
other changes. This makes it a lot easier to see the changes in diffs
when evaulating the changed code. New files should use spaces as
whitespace.
File names
^^^^^^^^^^
Files in which projections are implemented are prefixed with an
upper-case ``PJ_`` and most other files are prefixed with lower-case
``pj_``. Some file deviate from this pattern, most of them dates back to
the very early releases of PROJ. New contributions should follow the
pj-prefix pattern. Unless there are obvious reasons not to.
Legalese
~~~~~~~~
Commiters are the front line gatekeepers to keep the code base clear of
improperly contributed code. It is important to the PROJ users,
developers and the OSGeo foundation to avoid contributing any code to
the project without it being clearly licensed under the project license.
Generally speaking the key issues are that those providing code to be
included in the repository understand that the code will be released
under the MIT/X license, and that the person providing the code has the
right to contribute the code. For the commiter themselves understanding
about the license is hopefully clear. For other contributors, the
commiter should verify the understanding unless the commiter is very
comfortable that the contributor understands the license (for instance
frequent contributors).
If the contribution was developed on behalf of an employer (on work
time, as part of a work project, etc) then it is important that an
appropriate representative of the employer understand that the code will
be contributed under the MIT/X license. The arrangement should be
cleared with an authorized supervisor/manager, etc.
The code should be developed by the contributor, or the code should be
from a source which can be rightfully contributed such as from the
public domain, or from an open source project under a compatible
license.
All unusual situations need to be discussed and/or documented.
Commiters should adhere to the following guidelines, and may be
personally legally liable for improperly contributing code to the source
repository:
- Make sure the contributor (and possibly employer) is aware of the
contribution terms.
- Code coming from a source other than the contributor (such as adapted
from another project) should be clearly marked as to the original
source, copyright holders, license terms and so forth. This
information can be in the file headers, but should also be added to
the project licensing file if not exactly matching normal project
licensing (COPYING).
- Existing copyright headers and license text should never be stripped
from a file. If a copyright holder wishes to give up copyright they
must do so in writing to the foundation before copyright messages are
removed. If license terms are changed it has to be by agreement
(written in email is ok) of the copyright holders.
- Code with licenses requiring credit, or disclosure to users should be
added to COPYING.
- When substantial contributions are added to a file (such as
substantial patches) the author/contributor should be added to the
list of copyright holders for the file.
- If there is uncertainty about whether a change is proper to
contribute to the code base, please seek more information from the
project steering committee, or the foundation legal counsel.
Additional Resources
--------------------
- `General GitHub documentation <http://help.github.com/>`__
- `GitHub pull request
documentation <https://help.github.com/articles/about-pull-requests/>`__
Acknowledgements
----------------
The *code contribution* section of this CONTRIBUTING file is inspired by
`PDAL's <https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md>`__
and the *legalese* section is modified from `GDAL contributer
guidelines <https://trac.osgeo.org/gdal/wiki/rfc3_commiters>`__
-43
View File
@@ -1,43 +0,0 @@
.. _bindings:
********************************************************************************
Language bindings
********************************************************************************
PROJ bindings are available for a number of different development platforms.
Python
======
`pyproj <http://pypi.python.org/pypi/pyproj>`_:
Python interface (wrapper for PROJ)
Ruby
=======
`proj4rb <http://proj4rb.rubyforge.org>`_:
Bindings for PROJ in ruby
TCL
========
`proj4tcl <http://wiki.tcl.tk/41270>`_:
Bindings for PROJ in tcl (critcl source)
MySQL
=====
`fProj4 <http://sourceforge.net/projects/mysqlscientific/files/fPROJ4/>`_:
Bindings for PROJ in MySQL
Excel
========
`proj.xll <https://github.com/jbuonagurio/proj.xll>`_:
Excel add-in for PROJ map projections
Visual Basic
==================
`PROJ VB Wrappers <http://ftp.dfg.ca.gov/Public/BDB/Tools/proj4/proj_api.zip>`_:
By Eric G. Miller.
-30
View File
@@ -1,30 +0,0 @@
.. _cmake:
********************************************************************************
Using PROJ in CMake projects
********************************************************************************
The recommended way to use the PROJ library in a CMake project is to
link to the imported library target ``${PROJ4_LIBRARIES}`` provided by
the CMake configuration which comes with the library. Typical usage is:
.. code::
find_package(PROJ4)
target_link_libraries(MyApp ${PROJ4_LIBRARIES})
By adding the imported library target ``${PROJ4_LIBRARIES}`` to the
target link libraries, CMake will also pass the include directories to
the compiler. This requires that you use CMake version 2.8.11 or later.
If you are using an older version of CMake, then add
.. code::
include_directories(${PROJ4_INCLUDE_DIRS})
The CMake command ``find_package`` will look for the configuration in a
number of places. The lookup can be adjusted for all packages by setting
the cache variable or environment variable ``CMAKE_PREFIX_PATH``. In
particular, CMake will consult (and set) the cache variable
``PROJ4_DIR``.
@@ -1,7 +0,0 @@
.. _errorhandling:
================================================================================
Error handling
================================================================================
-21
View File
@@ -1,21 +0,0 @@
.. _development:
================================================================================
Development
================================================================================
These pages are primarily focused towards developers either contributing to the
PROJ project or using the library in their own software.
.. toctree::
:maxdepth: 1
quickstart
transformations
errorhandling
threads
reference/index
cmake
bindings
migration
-193
View File
@@ -1,193 +0,0 @@
.. _API_migration:
================================================================================
Version 4 to 5 API Migration
================================================================================
This is a transition guide for developers wanting to migrate their code to use
PROJ version 5.
Background
###############################################################################
Before we go on, a bit of background is needed. The new API takes a different
view of the world than the old because it is needed in order to obtain high
accuracy transformations. The old API is constructed in such a way that any transformation
between two coordinate reference systems *must* pass through the ill-defined
WGS84 reference frame, using it as a hub. The new API does away with this limitation to
transformations in PROJ. It is still possible to do that type of transformations
but in many cases there will be a better alternative.
The world view represented by the old API is always sufficient if all you care about is
meter level accuracy - and in many cases it will provide much higher accuracy
than that. But the view that “WGS84 is the *true* foundation of the world, and
everything else can be transformed natively to and from WGS84” is inherently flawed.
First and foremost because any time WGS84 is mentioned, you should ask yourself
“Which of the six WGS84 realizations are we talking about here?”.
Second, because for many (especially legacy) systems, it may not be straightforward
to transform to WGS84 (or actually ITRF-something, ETRS-something or NAD-something
which appear to be the practical meaning of the term WGS84 in everyday PROJ related
work), while centimeter-level accurate transformations may exist between pairs of
older systems.
The concept of a hub reference frame (“datum”) is not inherently bad, but in many
cases you need to handle and select that datum with more care than the old API allows.
The primary aim of the new API is to allow just that. And to do that, you must realize
that the world is inherently 4 dimensional. You may in many cases assume one or more of
the coordinates to be constant, but basically, to obtain geodetic accuracy transformations,
you need to work in 4 dimensions.
Now, having described the background for introducing the new API, let's try to show
how to use it. First note that in order to go from system A to system B, the old API
starts by doing an **inverse** transformation from system A to WGS84, then does a
**forward** transformation from WGS84 to system B.
With ``cs2cs`` being the command line interface to the old API, and ``cct`` being the same
for the new, this example of doing the same thing in both world views will should give
an idea of the differences:
::
$ echo 300000 6100000 | cs2cs +proj=utm +zone=33 +ellps=GRS80 +to +proj=utm +zone=32 +ellps=GRS80
683687.87 6099299.66 0.00
$ echo 300000 6100000 0 0 | cct +proj=pipeline +step +inv +proj=utm +zone=33 +ellps=GRS80 +step +proj=utm +zone=32 +ellps=GRS80
683687.8667 6099299.6624 0.0000 0.0000
Lookout for the ``+inv`` in the first ``+step``, indicating an inverse transform.
Code example
###############################################################################
The difference between the old and new API is shown here with a few examples. Below
we implement the same program with the two different API's. The program reads
input latitude and longitude from the command line and convert them to
projected coordinates with the Mercator projection.
We start by writing the program for PROJ v. 4:
.. code-block:: C
#include <proj_api.h>
main(int argc, char **argv) {
projPJ pj_merc, pj_latlong;
double x, y;
if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) )
return 1;
if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) )
return 1;
while (scanf("%lf %lf", &x, &y) == 2) {
x *= DEG_TO_RAD;
y *= DEG_TO_RAD;
p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL );
printf("%.2f\t%.2f\n", x, y);
}
return 0;
}
The same program implemented using PROJ v. 5:
.. code-block:: C
#include <proj.h>
main(int argc, char **argv) {
PJ *P;
PJ_COORD c;
P = proj_create(PJ_DEFAULT_CTX, "+proj=merc +ellps=clrk66 +lat_ts=33");
if (P==0)
return 1;
while (scanf("%lf %lf", &c.lp.lam, &c.lp.phi) == 2) {
c.lp.lam = proj_todeg(c.lp.lam);
c.lp.phi = proj_todeg(c.lp.phi);
c = proj_trans(P, PJ_FWD, c);
printf("%.2f\t%.2f\n", c.xy.x, c.xy.y);
}
}
Looking at the two different programs, there's a few immediate
differences that catches the eye. First off, the included header file describing
the API has changed from ``proj_api.h`` to simply ``proj.h``. All functions in ``proj.h``
belongs to the ``proj_`` namespace.
With the new API also comes new datatypes. E.g. the transformation object ``projPJ``
which has been changed to a pointer of type ``PJ``. This is done to highlight the
actual nature of the object, instead of hiding it away behind a typedef. New data
types for handling coordinates have also been introduced. In the above example we
use the ``PJ_COORD``, which is a union of various types. The benefit of this is that
it is possible to use the various structs in the union to communicate what state
the data is in at different points in the program. For instance as in the above
example where the coordinate is read from STDIN as a geodetic coordinate,
communicated to the reader of the code by using the ``c.lp`` struct.
After it has been projected we print it to STDOUT by accessing the individual
elements in ``c.xy`` to illustrate that the coordinate is now in projected space.
Data types are prefixed with `PJ_`.
The final, and perhaps biggest, change is that the fundamental concept of
transformations in PROJ are now handled in a single transformation object (``PJ``)
and not by stating the source and destination systems as previously. It is of
course still possible to do just that, but the transformation object now
captures the whole transformation from source to destination in one. In the
example with the old API the source system is described as
``+proj=latlon +ellps=clrk66`` and the destination system is described as
``+proj=merc +ellps=clrk66 +lat_ts=33``. Since the Mercator projection accepts
geodetic coordinates as its input, the description of the source in this case
is superflous. We use that to our advantage in the new API and simply state
the destination. This is simple at a glance, but is actually a big conceptual
change. We are now focused on the path between two systems instead of what the
source and destination systems are.
Function mapping from old to new API
###############################################################################
+---------------------------------------+---------------------------------------+
| **Old API functions** | **New API functions** |
+---------------------------------------+---------------------------------------+
| pj_fwd | proj_trans |
+---------------------------------------+---------------------------------------+
| pj_inv | proj_trans |
+---------------------------------------+---------------------------------------+
| pj_fwd3 | proj_trans |
+---------------------------------------+---------------------------------------+
| pj_inv3 | proj_trans |
+---------------------------------------+---------------------------------------+
| pj_transform | proj_trans_array or proj_trans_generic|
+---------------------------------------+---------------------------------------+
| pj_init | proj_create |
+---------------------------------------+---------------------------------------+
| pj_init_plus | proj_create |
+---------------------------------------+---------------------------------------+
| pj_free | proj_destroy |
+---------------------------------------+---------------------------------------+
| pj_is_latlong | proj_angular_output |
+---------------------------------------+---------------------------------------+
| pj_is_geocent | proj_angular_outout |
+---------------------------------------+---------------------------------------+
| pj_get_def | proj_pj_info |
+---------------------------------------+---------------------------------------+
| pj_latlong_from_proj | *No equivalent* |
+---------------------------------------+---------------------------------------+
| pj_set_finder | *No equivalent* |
+---------------------------------------+---------------------------------------+
| pj_set_searchpath | *No equivalent* |
+---------------------------------------+---------------------------------------+
| pj_deallocate_grids | *No equivalent* |
+---------------------------------------+---------------------------------------+
| pj_strerrno | *No equivalent* |
+---------------------------------------+---------------------------------------+
| pj_get_errno_ref | proj_errno |
+---------------------------------------+---------------------------------------+
| pj_get_release | proj_info |
+---------------------------------------+---------------------------------------+
-100
View File
@@ -1,100 +0,0 @@
.. _dev_quickstart:
================================================================================
Quick start
================================================================================
This is a short introduction to the PROJ API. In the following section we
create a simple program that transforms a geodetic coordinate to UTM and back
again. The program is explained a few lines at a time. The complete program can
be seen at the end of the section.
See the following sections for more in-depth descriptions of different parts of
the PROJ API or consult the :doc:`API reference <reference/index>` for specifics.
Before the PROJ API can be used it is necessary to include the ``proj.h`` header
file. Here ``stdio.h`` is also included so we can print some text to the screen:
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 39-40
Let's declare a few variables that'll be used later in the program. Each variable
will be discussed below.
See the :doc:`reference for more info on data types <reference/datatypes>`.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 43-45
:dedent: 4
For use in multi-threaded programs the ``PJ_CONTEXT`` threading-context is used.
In this particular example it is not needed, but for the sake of completeness
it created here. The section on :doc:`threads <threads>` discusses
this in detail.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 48
:dedent: 4
Next we create the ``PJ`` transformation object ``P`` with the function
``proj_create``. ``proj_create`` takes the threading context ``C`` created above,
and a proj-string that defines the desired transformation. Here we transform
from geodetic coordinate to UTM zone 32N.
It is recommended to create one threading-context per thread used by the program.
This ensures that all ``PJ`` objects created in the same context will be sharing
resources such as error-numbers and loaded grids.
In case the creation of the ``PJ`` object fails an error message is displayed and
the program returns. See :doc:`errorhandling` for further
details.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 50-52
:dedent: 4
PROJ uses it's own data structures for handling coordinates. Here we use a
``PJ_COORD`` which is easily assigned with the function ``proj_coord``. Note
that the input values are converted to radians with ``proj_torad``. This is
necessary since PROJ is using radians internally. See :doc:`transformations`
for further details.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 56
:dedent: 4
The coordinate defined above is transformed with ``proj_trans_coord``. For this
a ``PJ`` object, a transformation direction (either forward or inverse) and the
coordinate is needed. The transformed coordinate is returned in ``b``.
Here the forward (``PJ_FWD``) transformation from geodetic to UTM is made.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 59-60
:dedent: 4
The inverse transformation (UTM to geodetic) is done similar to above,
this time using ``PJ_INV`` as the direction.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 61-62
:dedent: 4
Before ending the program the allocated memory needs to be released again:
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 65-66
:dedent: 4
A complete compilable version of the above can be seen here:
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:linenos:
:lines: 39-
@@ -1,746 +0,0 @@
.. _datatypes:
================================================================================
Data types
================================================================================
This section describes the numerous data types in use in PROJ.4. As a rule
of thumb PROJ.4 data types are prefixed with ``PJ_``, or in one particular case,
is simply called :c:type:`PJ`. A few notable exceptions can be traced
back to the very early days of PROJ.4 when the ``PJ_`` prefix was not
consistenly used.
Transformation objects
--------------------------------------------------------------------------------
.. c:type:: PJ
Object containing everything related to a given projection or transformation.
As a user of the PROJ.4 library you are only exposed to pointers to this
object and the contents is hidden behind the public API. :c:type:`PJ` objects
are created with :c:func:`proj_create` and destroyed with
:c:func:`proj_destroy`.
.. c:type:: PJ_DIRECTION
Enumeration that is used to convey in which direction a given transformation
should be performed. Used in transformation function call as described in
the section on :ref:`transformation functions <coord_trans_functions>`.
Forward transformations are defined with the :c:
.. code-block:: C
typedef enum proj_direction {
PJ_FWD = 1, /* Forward */
PJ_IDENT = 0, /* Do nothing */
PJ_INV = -1 /* Inverse */
} PJ_DIRECTION;
.. c:member:: PJ_FWD
Perform transformation in the forward direction.
.. c:member:: PJ_IDENT
Identity. Do nothing.
.. c:member:: PJ_INV
Perform transformation in the inverse direction.
.. c:type:: PJ_CONTEXT
Context objects enable safe multi-threaded usage of PROJ.4. Each :c:type:`PJ`
object is connected to a context (if not specified, the default context is
used). All operations within a context should be performed in the same thread.
:c:type:`PJ_CONTEXT` objects are created with :c:func:`proj_context_create`
and destroyed with :c:func:`proj_context_destroy`.
.. c:type:: PJ_AREA
Opaque object describing an area in which a transformation is performed.
.. note:: This object is not fully implemented yet. It is to be used with
:c:func:`proj_create_crs_to_crs` to select the best transformation
between the two input coordinate reference systems.
2 dimensional coordinates
--------------------------------------------------------------------------------
Various 2-dimensional coordinate data types.
.. c:type:: PJ_LP
Geodetic coordinate, latitude and longitude. Usually in radians.
.. code-block:: C
typedef struct { double lam, phi; } PJ_LP;
.. c:member:: double PJ_LP.lam
Longitude. Lambda.
.. c:member:: double PJ_LP.phi
Latitude. Phi.
.. c:type:: PJ_XY
2-dimensional cartesian coordinate.
.. code-block:: C
typedef struct { double x, y; } PJ_XY;
.. c:member:: double PJ_XY.x
Easting.
.. c:member:: double PJ_XY.y
Northing.
.. c:type:: PJ_UV
2-dimensional generic coordinate. Usually used when contents can be either
a :c:type:`PJ_XY` or :c:type:`PJ_LP`.
.. code-block:: C
typedef struct {double u, v; } PJ_UV;
.. c:member:: double PJ_UV.u
Longitude or easting, depending on use.
.. c:member:: double PJ_UV.v
Latitude or northing, depending on use.
3 dimensional coordinates
--------------------------------------------------------------------------------
The following data types are the 3-dimensional equivalents to the data
types above.
.. c:type:: PJ_LPZ
3-dimensional version of :c:type:`PJ_LP`. Holds longitude, latitude and
a vertical component.
.. code-block:: C
typedef struct { double lam, phi, z; } PJ_LPZ;
.. c:member:: double PJ_LPZ.lam
Longitude. Lambda.
.. c:member:: double PJ_LPZ.phi
Latitude. Phi.
.. c:member:: double PJ_LPZ.z
Vertical component.
.. c:type:: PJ_XYZ
Cartesian coordinate in 3 dimensions. Extension of :c:type:`PJ_XY`.
.. code-block:: C
typedef struct { double x, y, z; } PJ_XYZ;
.. c:member:: double PJ_XYZ.x
Easting or the X component of a 3D cartesian system.
.. c:member:: double PJ_XYZ.y
Northing or the Y component of a 3D cartesian system.
.. c:member:: double PJ_XYZ.z
Vertical component or the Z component of a 3D cartesian system.
.. c:type:: PJ_UVW
3-dimensional extension of :c:type:`PJ_UV`.
.. code-block:: C
typedef struct {double u, v, w; } PJ_UVW;
.. c:member:: double PJ_UVW.u
Longitude or easting, depending on use.
.. c:member:: double PJ_UVW.v
Latitude or northing, depending on use.
.. c:member:: double PJ_UVW.w
Vertical component.
Spatiotemporal coordinate types
--------------------------------------------------------------------------------
The following data types are extensions of the triplets above into the time
domain.
.. c:type:: PJ_LPZT
Spatiotemporal version of :c:type:`PJ_LPZ`.
.. code-block:: C
typedef struct {
double lam;
double phi;
double z;
double t;
} PJ_LPZT;
.. c:member:: double PJ_LPZT.lam
Longitude.
.. c:member:: double PJ_LPZT.phi
Latitude
.. c:member:: double PJ_LPZT.z
Vertical component.
.. c:member:: double PJ_LPZT.t
Time component.
.. c:type:: PJ_XYZT
Generic spatiotemporal coordinate. Usefull for e.g. cartesian coordinates with
an attached time-stamp.
.. code-block:: C
typedef struct {
double x;
double y;
double z;
double t;
} PJ_XYZT;
.. c:member:: double PJ_XYZT.x
Easting or the X component of a 3D cartesian system.
.. c:member:: double PJ_XYZT.y
Northing or the Y component of a 3D cartesian system.
.. c:member:: double PJ_XYZT.z
Vertical or the Z component of a 3D cartesian system.
.. c:member:: double PJ_XYZT.t
Time component.
.. c:type:: PJ_UVWT
Spatiotemporal version of :c:type:`PJ_UVW`.
.. code-block:: C
typedef struct { double u, v, w, t; } PJ_UVWT;
.. c:member:: double PJ_UVWT.e
First horizontal component.
.. c:member:: double PJ_UVWT.n
Second horizontal component.
.. c:member:: double PJ_UVWT.w
Vertical component.
.. c:member:: double PJ_UVWT.t
Temporal component.
Ancillary types for geodetic computations
--------------------------------------------------------------------------------
.. c:type:: PJ_OPK
Rotations, for instance three euler angles.
.. code-block:: C
typedef struct { double o, p, k; } PJ_OPK;
.. c:member:: double PJ_OPK.o
First rotation angle, omega.
.. c:member:: double PJ_OPK.p
Second rotation angle, phi.
.. c:member:: double PJ_OPK.k
Third rotation angle, kappa.
Complex coordinate types
--------------------------------------------------------------------------------
.. c:type:: PJ_COORD
General purpose coordinate union type, applicable in two, three and four dimensions.
This is the default coordinate datatype used in PROJ.
.. code-block:: C
typedef union {
double v[4];
PJ_XYZT xyzt;
PJ_UVWT uvwt;
PJ_LPZT lpzt;
PJ_XYZ xyz;
PJ_UVW uvw;
PJ_LPZ lpz;
PJ_XY xy;
PJ_UV uv;
PJ_LP lp;
} PJ_COORD ;
.. c:member:: double v[4]
Generic four-dimensional vector.
.. c:member:: PJ_XYZT PJ_COORD.xyzt
Spatiotemporal cartesian coordinate.
.. c:member:: PJ_UVWT PJ_COORD.uvwt
Spatiotemporal generic coordinate.
.. c:member:: PJ_LPZT PJ_COORD.lpzt
Longitude, latitude, vertical and time components.
.. c:member:: PJ_XYZ PJ_COORD.xyz
3-dimensional cartesian coordinate.
.. c:member:: PJ_UVW PJ_COORD.uvw
3-dimensional generic coordinate.
.. c:member:: PJ_LPZ PJ_COORD.lpz
Longitude, latitude and vertical component.
.. c:member:: PJ_XY PJ_COORD.xy
2-dimensional cartesian coordinate.
.. c:member:: PJ_UV PJ_COORD.uv
2-dimensional generic coordinate.
.. c:member:: PJ_LP PJ_COORD.lp
Longitude and latitude.
Projection derivatives
-------------------------------------------------------------------------------
.. c:type:: PJ_FACTORS
Various cartographic properties, such as scale factors, angular distortion
and meridian convergence. Calculated with :c:func:`proj_factors`.
.. code-block:: C
typedef struct {
double meridional_scale;
double parallel_scale;
double areal_scale;
double angular_distortion;
double meridian_parallel_angle;
double meridian_convergence;
double tissot_semimajor;
double tissot_semiminor;
double dx_dlam;
double dx_dphi;
double dy_dlam;
double dy_dphi;
} PJ_FACTORS;
.. c:member:: double PJ_FACTORS.meridional_scale
Meridional scale at coordinate :math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.parallel_scale
Parallel scale at coordinate :math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.areal_scale
Areal scale factor at coordinate :math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.angular_distortion
Angular distortion at coordinate :math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.meridian_parallel_angle
Meridian/parallel angle, :math:`\theta^\prime`, at coordinate :math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.meridian_convergence
Meridian convergence at coordinate :math:`\left(\lambda,\phi\right)`.
Sometimes also described as *grid declination*.
.. c:member:: double PJ_FACTORS.tissot_semimajor
Maximum scale factor.
.. c:member:: double PJ_FACTORS.tissot_semiminor
Minimum scale factor.
.. c:member:: double PJ_FACTORS.dx_dlam
Partial derivative :math:`\frac{\partial x}{\partial \lambda}` of coordinate
:math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.dy_dlam
Partial derivative :math:`\frac{\partial y}{\partial \lambda}` of coordinate
:math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.dx_dphi
Partial derivative :math:`\frac{\partial x}{\partial \phi}` of coordinate
:math:`\left(\lambda,\phi\right)`.
.. c:member:: double PJ_FACTORS.dy_dphi
Partial derivative :math:`\frac{\partial y}{\partial \phi}` of coordinate
:math:`\left(\lambda,\phi\right)`.
List structures
-------------------------------------------------------------------------------
.. c:type:: PJ_OPERATIONS
Description a PROJ.4 operation
.. code-block:: C
struct PJ_OPERATIONS {
char *id; /* operation keyword */
PJ *(*proj)(PJ *); /* operation entry point */
char * const *descr; /* description text */
};
.. c:member:: char *id
Operation keyword.
.. c:member:: PJ *(*op)(PJ *)
Operation entry point.
.. c:member:: char * const *
Description of operation.
.. c:type:: PJ_ELLPS
Description of ellipsoids defined in PROJ.4
.. code-block:: C
struct PJ_ELLPS {
char *id;
char *major;
char *ell;
char *name;
};
.. c:member:: char *id
Keyword name of the ellipsoid.
.. c:member:: char *major
Semi-major axis of the ellipsoid, or radius in case of a sphere.
.. c:member:: char *ell
Elliptical parameter, e.g. `rf=298.257` or `b=6356772.2`.
.. c:member:: char *name
Name of the ellipsoid
.. c:type:: PJ_UNITS
Distance units defined in PROJ.
.. code-block:: C
struct PJ_UNITS {
char *id; /* units keyword */
char *to_meter; /* multiply by value to get meters */
char *name; /* comments */
double factor; /* to_meter factor in actual numbers */
};
.. c:member:: char *id
Keyword for the unit.
.. c:member:: char *to_meter
Text representation of the factor that converts a given unit to meters
.. c:member:: char *name
Name of the unit.
.. c:member:: double factor
Conversion factor that converts the unit to meters.
.. c:type:: PJ_PRIME_MERIDIANS
Prime meridians defined in PROJ.
.. code-block:: C
struct PJ_PRIME_MERIDIANS {
char *id;
char *defn;
};
.. c:member:: char *id
Keyword for the prime meridian
.. c:member:: char *def
Offset from Greenwich in DMS format.
Info structures
-------------------------------------------------------------------------------
.. c:type:: PJ_INFO
Struct holding information about the current instance of PROJ. Struct is
populated by :c:func:`proj_info`.
.. code-block:: C
typedef struct {
int major;
int minor;
int patch;
const char *release;
const char *version;
const char *searchpath;
} PJ_INFO;
.. c:member:: const char *PJ_INFO.release
Release info. Version number and release date,
e.g. "Rel. 4.9.3, 15 August 2016".
.. c:member:: const char *PJ_INFO.version
Text representation of the full version number,
e.g. "4.9.3".
.. c:member:: int PJ_INFO.major
Major version number.
.. c:member:: int PJ_INFO.minor
Minor version number.
.. c:member:: int PJ_INFO.patch
Patch level of release.
.. c:member:: const char PJ_INFO.searchpath
Search path for PROJ. List of directories separated by
semicolons (Windows) or colons (non-Windows), e.g.
"C:\\Users\\doctorwho;C:\\OSGeo4W64\\share\\proj".
Grids and init files are looked for in directories in the search path.
.. c:type:: PJ_PROJ_INFO
Struct holding information about a :c:type:`PJ` object. Populated by
:c:func:`proj_pj_info`. The :c:type:`PJ_PROJ_INFO` object provides a
view into the internals of a :c:type:`PJ`, so once the :c:type:`PJ`
is destroyed or otherwise becomes invalid, so does the
:c:type:`PJ_PROJ_INFO`
.. code-block:: C
typedef struct {
const char *id;
const char *description;
const char *definition;
int has_inverse;
double accuracy;
} PJ_PROJ_INFO;
.. c:member:: const char *PJ_PROJ_INFO.id
Short ID of the operation the :c:type:`PJ` object is based on, that is,
what comes afther the ``+proj=`` in a proj-string, e.g. "*merc*".
.. c:member:: const char *PJ_PROJ_INFO.description
Long describes of the operation the :c:type:`PJ` object is based on,
e.g. "*Mercator Cyl, Sph&Ell lat_ts=*".
.. c:member:: const char *PJ_PROJ_INFO.definition
The proj-string that was used to create the :c:type:`PJ` object with,
e.g. "*+proj=merc +lat_0=24 +lon_0=53 +ellps=WGS84*".
.. c:member:: int PJ_PROJ_INFO.has_inverse
1 if an inverse mapping of the defined operation exists, otherwise 0.
.. c:member:: double PJ_PROJ_INFO.accuracy
Expected accuracy of the transformation. -1 if unknown.
.. c:type:: PJ_GRID_INFO
Struct holding information about a specific grid in the search path of
PROJ. Populated with the function :c:func:`proj_grid_info`.
.. code-block:: C
typedef struct {
char gridname[32];
char filename[260];
char format[8];
LP lowerleft;
LP upperright;
int n_lon, n_lat;
double cs_lon, cs_lat;
} PJ_GRID_INFO;
.. c:member:: char PJ_GRID_INFO.gridname[32]
Name of grid, e.g. "*BETA2007.gsb*".
.. c:member:: char PJ_GRID_INFO
Full path of grid file, e.g. *"C:\\OSGeo4W64\\share\\proj\\BETA2007.gsb"*
.. c:member:: char PJ_GRID_INFO.format[8]
File format of grid file, e.g. "*ntv2*"
.. c:member:: LP PJ_GRID_INFO.lowerleft
Geodetic coordinate of lower left corner of grid.
.. c:member:: LP PJ_GRID_INFO.upperright
Geodetic coordinate of upper right corner of grid.
.. c:member:: int PJ_GRID_INFO.n_lon
Number of grid cells in the longitudinal direction.
.. c:member:: int PJ_GRID_INFO.n_lat
Number of grid cells in the latitudianl direction.
.. c:member:: double PJ_GRID_INFO.cs_lon
Cell size in the longitudinal direction. In radians.
.. c:member:: double PJ_GRID_INFO.cs_lat
Cell size in the latitudinal direction. In radians.
.. c:type:: PJ_INIT_INFO
Struct holding information about a specific init file in the search path of
PROJ. Populated with the function :c:func:`proj_init_info`.
.. code-block:: C
typedef struct {
char name[32];
char filename[260];
char version[32];
char origin[32];
char lastupdate[16];
} PJ_INIT_INFO;
.. c:member:: char PJ_INIT_INFO.name[32]
Name of init file, e.g. "*epsg*".
.. c:member:: char PJ_INIT_INFO.filename[260]
Full path of init file, e.g. "*C:\\OSGeo4W64\\share\\proj\\epsg*"
.. c:member:: char PJ_INIT_INFO.version[32]
Version number of init-file, e.g. "*9.0.0*"
.. c:member:: char PJ_INIT_INFO.origin[32]
Originating entity of the init file, e.g. "*EPSG*"
.. c:member:: char PJ_INIT_INFO.lastupdate
Date of last update of the init-file.
@@ -1,270 +0,0 @@
.. _api:
********************************************************************************
Deprecated API
********************************************************************************
.. contents:: Contents
:depth: 3
:backlinks: none
Introduction
------------
Procedure ``pj_init()`` selects and initializes a cartographic
projection with its argument control parameters. ``argc`` is the number
of elements in the array of control strings argv that each contain
individual cartographic control keyword assignments (+ proj arguments).
The list must contain at least the proj=projection and Earth’s radius or
elliptical parameters. If the initialization of the projection is
successful a valid address is returned otherwise a NULL value.
The ``pj_init_plus()`` function operates similarly to ``pj_init()`` but
takes a single string containing the definition, with each parameter
prefixed with a plus sign. For example
``+proj=utm +zone=11 +ellps=WGS84``.
Once initialization is performed either forward or inverse projections
can be performed with the returned value of ``pj_init()`` used as the
argument proj. The argument structure projUV values u and v contain
respective longitude and latitude or x and y. Latitude and longitude are
in radians. If a projection operation fails, both elements of projUV are
set to ``HUGE_VAL`` (defined in ``math.h``).
Note: all projections have a forward mode, but some do not have an
inverse projection. If the projection does not have an inverse the
projPJ structure element inv will be ``NULL``.
The ``pj_transform`` function may be used to transform points between
the two provided coordinate systems. In addition to converting between
cartographic projection coordinates and geographic coordinates, this
function also takes care of datum shifts if possible between the source
and destination coordinate system. Unlike ``pj_fwd()`` and ``pj_inv()``
it is also allowable for the coordinate system definitions
``(projPJ *)`` to be geographic coordinate systems (defined as
``+proj=latlong``).
The x, y and z arrays contain the input values of the points, and are replaced with the output values.
The function returns zero on success, or the error number (also in ``pj_errno``)
on failure.
Memory associated with the projection may be freed with ``pj_free()``.
Example
-------
The following program reads latitude and longitude values in decimal
degrees, performs Mercator projection with a Clarke 1866 ellipsoid and a
33° latitude of true scale and prints the projected cartesian values in
meters:
.. code::
#include <proj_api.h>
main(int argc, char **argv) {
projPJ pj_merc, pj_latlong;
double x, y;
if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) )
exit(1);
if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) )
exit(1);
while (scanf("%lf %lf", &x, &y) == 2) {
x *= DEG_TO_RAD;
y *= DEG_TO_RAD;
p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL );
printf("%.2f\t%.2f\n", x, y);
}
exit(0);
}
For this program, an input of ``-16 20.25`` would give a result of
``-1495284.21 1920596.79``.
API Functions
-------------
pj_transform
============
::
int pj_transform( projPJ srcdefn,
projPJ dstdefn,
long point_count,
int point_offset,
double *x,
double *y,
double *z );
Transform the x/y/z points from the source coordinate system to the
destination coordinate system.
``srcdefn``: source (input) coordinate system.
``dstdefn``: destination (output) coordinate system.
``point_count``: the number of points to be processed (the size of the
x/y/z arrays).
``point_offset``: the step size from value to value (measured in
doubles) within the x/y/z arrays - normally 1 for a packed array. May be
used to operate on xyz interleaved point arrays.
``x``/``y``/``z``: The array of X, Y and Z coordinate values passed as
input, and modified in place for output. The Z may optionally be NULL.
``return``: The return is zero on success, or a PROJ.4 error code.
The ``pj_transform()`` function transforms the passed in list of points
from the source coordinate system to the destination coordinate system.
Note that geographic locations need to be passed in radians, not decimal
degrees, and will be returned similarly. The ``z`` array may be passed
as NULL if Z values are not available.
If there is an overall failure, an error code will be returned from the
function. If individual points fail to transform - for instance due to
being over the horizon - then those x/y/z values will be set to
``HUGE_VAL`` on return. Input values that are ``HUGE_VAL`` will not be
transformed.
pj_init_plus
============
::
projPJ pj_init_plus(const char *definition);
This function converts a string representation of a coordinate system
definition into a projPJ object suitable for use with other API
functions. On failure the function will return NULL and set pj_errno.
The definition should be of the general form
``+proj=tmerc +lon_0 +datum=WGS84``. Refer to PROJ.4 documentation and
the :ref:`transformation` notes for additional detail.
Coordinate system objects allocated with ``pj_init_plus()`` should be
deallocated with ``pj_free()``.
pj_free
=======
::
void pj_free( projPJ pj );
Frees all resources associated with pj.
pj_is_latlong
=============
::
int pj_is_latlong( projPJ pj );
Returns TRUE if the passed coordinate system is geographic
(``proj=latlong``).
pj_is_geocent
=============
::
int pj_is_geocent( projPJ pj );``
Returns TRUE if the coordinate system is geocentric (``proj=geocent``).
pj_get_def
==========
::
char *pj_get_def( projPJ pj, int options);``
Returns the PROJ.4 initialization string suitable for use with
``pj_init_plus()`` that would produce this coordinate system, but with
the definition expanded as much as possible (for instance ``+init=`` and
``+datum=`` definitions).
pj_latlong_from_proj
====================
::
projPJ pj_latlong_from_proj( projPJ pj_in );``
Returns a new coordinate system definition which is the geographic
coordinate (lat/long) system underlying ``pj_in``.
pj_set_finder
==============
::
void pj_set_finder( const char *(*new_finder)(const char *) );``
Install a custom function for finding init and grid shift files.
pj_set_searchpath
=================
::
void pj_set_searchpath ( int count, const char **path );``
Set a list of directories to search for init and grid shift files.
pj_deallocate_grids
===================
::
void pj_deallocate_grids( void );``
Frees all resources associated with loaded and cached datum shift grids.
pj_strerrno
===========
::
char *pj_strerrno( int );``
Returns the error text associated with the passed in error code.
pj_get_errno_ref
================
::
int *pj_get_errno_ref( void );``
Returns a pointer to the global pj\_errno error variable.
pj_get_release
==============
::
const char *pj_get_release( void );``
Returns an internal string describing the release version.
Obsolete Functions
~~~~~~~~~~~~~~~~~~
``XY pj_fwd( LP lp, PJ *P );``
``LP pj_inv( XY xy, PJ *P );``
``projPJ pj_init(int argc, char **argv);``
.. _more info: pj_transform

Some files were not shown because too many files have changed in this diff Show More