diff options
384 files changed, 16512 insertions, 49587 deletions
diff --git a/examples/declarative/declarative.pro b/examples/declarative/declarative.pro index 3d2ee028..4636d378 100644 --- a/examples/declarative/declarative.pro +++ b/examples/declarative/declarative.pro @@ -1,4 +1,5 @@ TEMPLATE = subdirs SUBDIRS += flickr \ mapviewer \ - qmlplaces + qmlplaces \ + map3d diff --git a/examples/declarative/flickr/flickr.pro b/examples/declarative/flickr/flickr.pro index 85401ca2..0fe03ca2 100644 --- a/examples/declarative/flickr/flickr.pro +++ b/examples/declarative/flickr/flickr.pro @@ -1,7 +1,7 @@ TEMPLATE=app TARGET = qml_location_flickr -QT += declarative network location +QT += declarative network location qtquick1 SOURCES += qmllocationflickr.cpp symbian { diff --git a/examples/declarative/map3d/Dialog.qml b/examples/declarative/map3d/Dialog.qml new file mode 100644 index 00000000..59b5b3b4 --- /dev/null +++ b/examples/declarative/map3d/Dialog.qml @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "common" as Common + +Item { + id: dialog + signal goButtonClicked + signal cancelButtonClicked + + anchors.fill: parent + + property alias title: titleBar.text + property alias dialogModel: dialogModel + property alias length: dialogModel.count + property int gap: 20 + property int listItemHeight: 54 + + function setModel(objects) + { + for (var i=0; i< objects.length; i++){ + dialogModel.append({"label": objects[i][0], "inputText": objects[i][1]}) + } + } + + Rectangle { + id: fader + anchors.fill: parent + opacity: 0.7 + color: "darkgrey" + MouseArea { + id: mouseArea + anchors.fill: parent + } + } + + Rectangle { + id: dialogRectangle + + color: "lightsteelblue" + opacity: 1 + width: parent.width - gap; + height: listview.height + titleBar.height + buttonGo.height + gap*2 + + anchors { + top: parent.top + topMargin: 50 + left: parent.left + leftMargin: gap/2 + } + + border.width: 1 + border.color: "darkblue" + radius: 5 + + Common.TitleBar { + id: titleBar; + width: parent.width; height: 40; + anchors.top: parent.top; anchors.left: parent.left; + opacity: 0.9; text: dialog.title; + onClicked: { dialog.cancelButtonClicked() } + } + + ListModel { + id: dialogModel + } + + Component{ + id: listDelegate + Column { + id: column1 + height: listItemHeight + Text { id: fieldTitle; text: label; height: 24;} + Rectangle { + id: inputRectangle + width: dialogRectangle.width - gap; height: 30 + color: "whitesmoke" + border.width: 1 + radius: 5 + TextInput { + id: inputField + text: inputText + focus: true + width: parent.width - anchors.leftMargin + + anchors { + left: parent.left; + verticalCenter: parent.verticalCenter; + leftMargin: 5 + } + onTextChanged: + { + dialogModel.set(index, {"inputText": text}) + } + } + MouseArea { + anchors.fill: parent + onClicked: inputField.forceActiveFocus(); + } + } + } + } + + ListView { + id: listview + anchors { + top: titleBar.bottom + topMargin: gap + left: parent.left + leftMargin: gap/2 + } + model: dialogModel + delegate: listDelegate + spacing: gap + interactive: false + Component.onCompleted: { + height = (listItemHeight + gap)*length + } + } + + Common.Button { + id: buttonGo + text: "Go!" + anchors.top: listview.bottom + width: 80; height: 32 + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + dialog.goButtonClicked () + } + } + } +} + diff --git a/examples/declarative/map3d/TitleBar.qml b/examples/declarative/map3d/TitleBar.qml new file mode 100755 index 00000000..0a85802e --- /dev/null +++ b/examples/declarative/map3d/TitleBar.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 5.0 + +Item { + id: titleBar + BorderImage { source: "titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Item { + id: container + width: (parent.width * 2) - 55 ; height: parent.height + + Image { + id: quitButton + anchors.left: parent.left//; anchors.leftMargin: 0 + anchors.verticalCenter: parent.verticalCenter + source: "quit.png" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + + Text { + id: categoryText + anchors { + left: quitButton.right; leftMargin: 10; rightMargin: 10 + verticalCenter: parent.verticalCenter + } + elide: Text.ElideLeft + text: "Mapviewer example" + font.bold: true; color: "White"; style: Text.Raised; styleColor: "Black" + } + } + transitions: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad } + } +} diff --git a/examples/declarative/map3d/blinky.gif b/examples/declarative/map3d/blinky.gif Binary files differnew file mode 100644 index 00000000..f665b527 --- /dev/null +++ b/examples/declarative/map3d/blinky.gif diff --git a/examples/declarative/map3d/common/Button.qml b/examples/declarative/map3d/common/Button.qml new file mode 100755 index 00000000..a74de923 --- /dev/null +++ b/examples/declarative/map3d/common/Button.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: container + + signal clicked + + property alias text: buttonText.text + property alias color: buttonText.color + + function disable() { + container.state = "Disabled"; + } + + function enable() { + container.state = ""; + } + + BorderImage { + id: buttonImage + source: "../resources/button.sci" + width: container.width; height: container.height + } + + MouseArea { + id: mouseRegion + anchors.fill: buttonImage + hoverEnabled: true + onClicked: { container.clicked(); } + } + Text { + id: buttonText + color: "white" + anchors.centerIn: buttonImage; font.bold: true + style: Text.Raised; styleColor: "black" + } + + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed == true + PropertyChanges { target: buttonImage; source: "../resources/button_pressed.png" } + PropertyChanges { target: buttonText; style: Text.Sunken } + }, + State { + name: "Hovered" + when: mouseRegion.containsMouse + PropertyChanges{ target: buttonImage; source: "../resources/button_hovered.png" } + }, + State { + name: "Disabled" + PropertyChanges{ target: buttonText; color: "grey" } + PropertyChanges{ target: mouseRegion; enabled: false } + } + ] +} diff --git a/examples/declarative/map3d/common/Menu.qml b/examples/declarative/map3d/common/Menu.qml new file mode 100644 index 00000000..89efc983 --- /dev/null +++ b/examples/declarative/map3d/common/Menu.qml @@ -0,0 +1,109 @@ +import QtQuick 2.0 + +Item { + id: menu + property int gap: 0 + property int button: 0 + property alias orientation: menuView.orientation + property alias count: menuModel.count + property int itemHeight //to create menu just set menu item height and width, do not set menu's height and width explicitly + property int itemWidth +// height: (menuView.orientation == ListView.Horizontal)? itemHeight : itemHeight * count + width: (menuView.orientation == ListView.Horizontal)? itemWidth * count : itemWidth + + signal clicked + + function setModel(objects) + { + for (var i=0; i< objects.length; i++){ + menuModel.append({"label": objects[i], "enabledItem" : true}) + } + height = (menuView.orientation == ListView.Horizontal)? itemHeight : itemHeight * count + } + + function disableItem(index){ + menuModel.set(index, {"enabledItem": false}) + } + + function enableItem(index){ + menuModel.set(index, {"enabledItem": true}) + } + + ListModel { + id: menuModel + } + + Component{ + id: menuItemDelegate + Item { + height: itemHeight + width: itemWidth + + BorderImage { + id: menuItemImage; + source: "../resources/menuItem.sci"; + height: parent.height + 14; + width: parent.width + y: -7 + } + + Text { + id: menuItemText + text: label; + elide: Text.ElideLeft + font.bold: true; + color: "white" + style: Text.Raised; + styleColor: "dimgrey" + anchors.verticalCenter: parent.verticalCenter + Component.onCompleted: { + if (menuView.orientation == ListView.Horizontal){ + anchors.horizontalCenter = parent.horizontalCenter + } + else { + anchors.left = parent.left + anchors.leftMargin = 10 + } + } + } + MouseArea { + id: mouseRegion + anchors.fill: parent + hoverEnabled: true + enabled: enabledItem + onClicked: { + button = index + menu.clicked() + } + } + + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed == true + PropertyChanges { target: menuItemImage; source: "../resources/menuItem_pressed.png"} + PropertyChanges { target: menuItemText; style: Text.Sunken } + }, + State { + name: "Hovered" + when: mouseRegion.containsMouse == true + PropertyChanges { target: menuItemImage; source: "../resources/menuItem_hovered.png"} + }, + State { + name: "Disabled" + when: mouseRegion.enabled == false + PropertyChanges { target: menuItemText; color: "grey"} + } + ] + } + } + + ListView { + id: menuView + anchors.fill: parent + model: menuModel + delegate: menuItemDelegate + spacing: gap + interactive: false + } +} diff --git a/examples/declarative/map3d/common/Slider.qml b/examples/declarative/map3d/common/Slider.qml new file mode 100644 index 00000000..ce3b37b9 --- /dev/null +++ b/examples/declarative/map3d/common/Slider.qml @@ -0,0 +1,109 @@ +/*/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: slider; + height: 40 + // value is read/write. + property int value + property real minimum: 0 + property real maximum: 1 + property int xMin: 2 + property int xMax: slider.width - handle.width-xMin + + Rectangle { + anchors.fill: parent + border.width: 0; + radius: 8 + color: "dimgrey" + opacity: 0.6 + } + + Rectangle { + id: handle; smooth: true + width: 30; + y: xMin; + x: xMin + (value - minimum) * slider.xMax / (maximum - minimum) + + height: slider.height-4; radius: 6 + gradient: normalGradient + + Gradient { + id: normalGradient + GradientStop { position: 0.0; color: "lightgrey" } + GradientStop { position: 1.0; color: "gray" } + } + + Gradient { + id: pressedGradient + GradientStop { position: 0.0; color: "lightgray" } + GradientStop { position: 1.0; color: "black" } + } + + Gradient { + id: hoveredGradient + GradientStop { position: 0.0; color: "lightgrey" } + GradientStop { position: 1.0; color: "dimgrey" } + } + + MouseArea { + id: mouseRegion + hoverEnabled: true + anchors.fill: parent; drag.target: parent + drag.axis: Drag.XAxis; drag.minimumX: slider.xMin; drag.maximumX: slider.xMax + onPositionChanged: { value = (maximum - minimum) * (handle.x-slider.xMin) / (slider.xMax - slider.xMin) + minimum; } + } + } + + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed + PropertyChanges { target: handle; gradient: pressedGradient } + }, + State { + name: "Hovered" + when: mouseRegion.containsMouse + PropertyChanges { target: handle; gradient: hoveredGradient } + } + ] +} diff --git a/examples/declarative/map3d/common/TitleBar.qml b/examples/declarative/map3d/common/TitleBar.qml new file mode 100755 index 00000000..f0700a8d --- /dev/null +++ b/examples/declarative/map3d/common/TitleBar.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: titleBar + + property alias text:titleText.text + property alias hoverEnabled: mouseRegion.hoverEnabled + signal clicked + + BorderImage { source: "../resources/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Image { + id: quitButton + anchors.right: parent.right; anchors.rightMargin: 10 + anchors.verticalCenter: parent.verticalCenter + source: "../resources/quit.png" + MouseArea { + id: mouseRegion + hoverEnabled: true + anchors.fill: parent + onClicked: { titleBar.clicked(); } + } + } + + Text { + id: titleText + anchors { + left: parent.left; leftMargin: 10; verticalCenter: parent.verticalCenter + } + elide: Text.ElideLeft + font.bold: true; color: "white"; style: Text.Raised; styleColor: "dimgrey" + } + + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed + PropertyChanges { target: quitButton; source: "../resources/quit_pressed.png" } + }, + State { + name: "Hover" + when: mouseRegion.containsMouse + PropertyChanges { target: quitButton; source: "../resources/quit_hovered.png" } + } + ] +} diff --git a/examples/declarative/map3d/map3d.pro b/examples/declarative/map3d/map3d.pro new file mode 100644 index 00000000..555b276d --- /dev/null +++ b/examples/declarative/map3d/map3d.pro @@ -0,0 +1,18 @@ +TARGET = qml_location_map3d +TEMPLATE=app + +QT += declarative network + +SOURCES += qmlmap3d.cpp + +RESOURCES += \ + map3d.qrc + +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/mapviewer +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.qml *.png *.sci +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/mapviewer + +INSTALLS += target sources + +OTHER_FILES += \ + map3d.qml diff --git a/examples/declarative/map3d/map3d.qml b/examples/declarative/map3d/map3d.qml new file mode 100644 index 00000000..645a03a4 --- /dev/null +++ b/examples/declarative/map3d/map3d.qml @@ -0,0 +1,600 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Qt.location 5.0 +import Qt.location.test 5.0 +import "common" as Common + +Item { + objectName: "The page." + width: 1140 //360 + height: 1085 // 640 + //width: 360 + //height: 640 + id: page + + //Rectangle { + // id: bottleAnimation + // width: animation.width; height: animation.height + 8 + // } + + // From location.test plugin + TestModel { + id: testModel + datatype: 'coordinate' + datacount: 8 + delay: 0 + crazyMode: false // generate arbitrarily updates. interval is set below, and the number of items is varied between 0..datacount + crazyLevel: 2000 // the update interval varies between 3...crazyLevel (ms) + } + + Item { + visible: false + id: shaderItem + width: 256 + height: 256 + x: 100 + y: 100 + Rectangle { + radius: 20 + id: shaderRect + width: parent.width + height: parent.height/4 + color: 'red' + z: 1 + Text {text: "Wicked!"} + + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "DeepSkyBlue"; to: "red"; duration: 2000 } + ColorAnimation { from: "red"; to: "DeepSkyBlue"; duration: 2000 } + } + } + Rectangle { + id: shaderRect2 + opacity: 0.5 + //width: parent.width + anchors.fill: shaderRect + //height: parent.height/4 + color: 'green' + Text {text: "Sick!"} + } + Rectangle { + id: shaderRect3 + width: parent.width + anchors.top: shaderRect2.bottom + height: parent.height/4 + color: 'blue' + Text {text: "Sick!"} + } + Rectangle { + width: parent.width + anchors.top: shaderRect3.bottom + height: parent.height/4 + color: 'yellow' + Text {text: "Sick!"} + } + } + + Column { + id: buttonColumn + anchors.top: page.top + anchors.left: map.right + spacing: 2 + + Rectangle {color: "lightblue"; width: 80; height: 80; + Text {text: "Crazy mode:\n" + testModel.crazyMode + "\nclick to\ntoggle."} + MouseArea{ anchors.fill: parent; + onClicked: testModel.crazyMode = !testModel.crazyMode + onDoubleClicked: map.removeMapItem(mapItem1) + } + } + AnimatedImage { + MouseArea { anchors.fill: parent; onClicked: mapItem2.source = parent } + width: 80 + height: 80 + playing: testModel.crazyMode + source: "blinky.gif" + } + Rectangle {color: "lightblue"; width: 80; height: 80; + Text {text: "Click:\nadd item1\nDouble-click:\nrm item1"} + MouseArea{ anchors.fill: parent; + onClicked: {console.log('----------------adding item 1'); map.addMapItem(externalStaticMapItem1);} + onDoubleClicked: {console.log('+++++++++++++++ removing item 1'); map.removeMapItem(externalStaticMapItem1);} + } + } + Rectangle {color: "lightblue"; width: 80; height: 80; + Text {text: "Click:\nadd item2\nDouble-click:\nrm item2"} + MouseArea{ anchors.fill: parent; + onClicked: {console.log('adding item 2'); map.addMapItem(externalStaticMapItem2);} + onDoubleClicked: {console.log('removing item 2'); map.removeMapItem(externalStaticMapItem2);} + } + } + } + + /* + MapItem { + id: externalStaticMapItem1 + objectName: "externalStaticMapItem1" + coordinate: brisbaneCoordinate + zoomLevel: 5.0 + source: Rectangle { + color: "gray" + width: 140 + height: 20 + Text {font.pixelSize: 15;text: "ext map item 1"; font.bold: true; color: 'red'} + } + } + + MapItem { + id: externalStaticMapItem2 + objectName: "externalStaticMapItem2" + coordinate: brisbaneCoordinate2 + zoomLevel: 5.0 + source: Rectangle { + color: "gray" + width: 140 + height: 20 + Text {font.pixelSize: 15;text: "ext map item 2"; font.bold: true; color: 'red'} + } + } + */ + + /* + MapItem { + id: mapItem1 + source: AnimatedImage {width: 80; height: 80; playing: true; source: "walk.gif"} + } + */ + + //AnimatedImage {width: 80; height: 80; playing: true; source: "walk.gif"} + //MapItem {id: mapItem2 } + //MapItem {id: mapItem3 } + //MapItem {id: mapItem4 } + //MapItem {id: mapItem5 } + //MapItem {id: mapItem6 } + //MapItem {id: mapItem7 } + //MapItem {id: mapItem8 } + + Coordinate { + id: brisbaneCoordinate + latitude: -27.5 + longitude: 140 + } + + Coordinate { + id: brisbaneCoordinate2 + latitude: -30.5 + longitude: 140 + } + + Map3D { + id: map + z: 3 + + /* + MapItem { + objectName: 'blinky static item' + zoomLevel: 7 // at which map's zoom level the width and height are '1-to-1' + coordinate: brisbaneCoordinate + source: AnimatedImage { + width: 80 + height: 80 + playing: true + source: "blinky.gif" + } + } + */ + + + //MapItem { + // source: Rectangle { width: 40; height: 40; color: 'chocolate' + // } + // } + /* + MapObjectView { + id: theObjectView + model: testModel + delegate: Component { + MapItem { + objectName: 'one of many items from model' + visible: true + live: true + recursive: true + source: Rectangle { + width: 300; height: 300; color: 'green' + Component.onCompleted: { + var num = (Math.floor(4 * Math.random())); + switch (num % 4) { + case 0: + color = "#ff0000"; + break; + case 1: + color = "#0000ff"; + break; + case 2: + color = "#00ffff"; + break; + case 3: + color = "#00ff00"; + break; + } + } + + } + coordinate: Coordinate { + latitude: modeldata.coordinate.latitude; + longitude: modeldata.coordinate.longitude; + } + } + } + } + */ + + // From location.test plugin + PinchGenerator { + id: pinchGenerator + anchors.fill: parent + target: map + enabled: false + focus: true // enables keyboard control for convinience + replaySpeedFactor: 1.1 // replay with 1.1 times the recording speed to better see what happens + Text { + text: "PinchArea state: " + pinchGenerator.state + "\n" + + "Swipes recorded: " + pinchGenerator.count + "\n" + + "Replay speed factor: " + pinchGenerator.replaySpeedFactor + } + } + /* + Keys.onPressed: { + if (event.key == Qt.Key_A) { + console.log('Key A was pressed'); + //event.accepted = true; + } + } + */ + + Row { + id: textRow1 + spacing: 15 + y: 1050 + Text {id: firstText; text: "Map zoom level: " + map.zoomLevel; color: 'red'; font.bold: true} + Text {text: "Pinch zoom sensitivity: " + map.pinch.maximumZoomLevelChange; color: firstText.color; font.bold: true} + Text {text: "Pinch rotation sensitivity: " + map.pinch.rotationSpeed; color: firstText.color; font.bold: true} + } + + Row { + spacing: 15 + anchors.top: textRow1.bottom + Text {text: "Pinch tilt sensitivity: " + map.pinch.maximumTiltChange; color: firstText.color; font.bold: true} + Text {text: "Flick deceleration: " + map.flick.deceleration; color: firstText.color; font.bold: true} + Text {text: "Weather: Sunny, mild, late showers."; color: firstText.color; font.bold: true} + } + plugin : Plugin {name : "nokia"} + // commented features are checked to work at least somehow + x: 0 + y: 0 + //size.width: 100 + //size.height: 100 + //anchors.left: parent.left + //anchors.bottom: parent.bottom + //anchors.leftMargin: 70 + //scale: 2 + //visible: false + //transform: Translate {y: 200} + //anchors.fill: page + width: page.width - 80 + height: 1000 + zoomLevel: 5.1 + + // pinch.activeGestures: MapPinch.ZoomGesture | RotationGesture + pinch.activeGestures: MapPinch.NoGesture + + pinch.enabled: true + pinch.maximumZoomLevel: 20 // biggest zoomlevel allowed + pinch.minimumZoomLevel: 1 // smallest zoomlevel allowed + pinch.maximumZoomLevelChange: 1.0 // maximum zoomlevel changes per pinch + pinch.maximumRotation: 0 // unlimited + pinch.minimumRotation: 0 // unlimited + pinch.rotationSpeed: 1.0 // default ~follows angle between fingers + pinch.maximumTilt: 90 + pinch.minimumTilt: 0 + pinch.maximumTiltChange: 35 + + // Flicking + flick.enabled: true + flick.deceleration: 3000 + flick.onFlickStarted: {console.log ('flick started signal F Start ++++++++++++++++++ ') } + flick.onFlickEnded: {console.log ('flick ended signal F Stop ------------------ ') } + flick.onMovementStarted: {console.log('movement started signal M Start ++++++++++++++++++ ') } + flick.onMovementEnded: {console.log ('movement ended signal M Stop ------------------ ') } + + + onWheel: { + console.log('map wheel event, rotation in degrees: ' + delta/8); + if (delta > 0) map.zoomLevel += 0.25 + else map.zoomLevel -= 0.25 + } + + pinch.onPinchStarted: { + console.log('Map element pinch started---------+++++++++++++++++++++++++++++++++++++') + pinchRect1.x = pinch.point1.x; pinchRect1.y = pinch.point1.y; + pinchRect2.x = pinch.point2.x; pinchRect2.y = pinch.point2.y; + pinchRect1.visible = true; pinchRect2.visible = true; + //console.log('Point 1 x: ' + pinch.point1.x + ' Point2 x' + pinch.point2.x) + //console.log('Center x: ' + pinch.center.x + ' Point1 y: ' + pinch.point1.y) + } + pinch.onPinchUpdated: { + console.log('Map element pinch updated---------+++++++++++++++++++++++++++++++++++++') + pinchRect1.x = pinch.point1.x; pinchRect1.y = pinch.point1.y; + pinchRect2.x = pinch.point2.x; pinchRect2.y = pinch.point2.y; + } + pinch.onPinchFinished: { + console.log('Map element pinch finished ---------+++++++++++++++++++++++++++++++++++++') + pinchRect1.visible = false; pinchRect2.visible = false; + //map.pinch.minimumZoomLevel = map.zoomLevel - 2 + //map.pinch.maximumZoomLevel = map.zoomLevel + 2 + } + + + //focus : true + center: Coordinate { + latitude: 51.5 + longitude: -0.11 + } +// MouseArea { +// id: mapMouse +// objectName: "mouse area in map within Map" +// anchors.fill: parent // should not be set +// enabled: true + +// onCanceled: {console.log('mouse area in map canceled')} +// onEntered: {console.log('mouse area in map entered')} +// onExited: {console.log('mouse area in map exited')} +// //onPositionChanged: {console.log('mouse area in map position changed')} +// onReleased: {console.log('mouse area in map released')} + +// onPressed: {console.log('mouse area in map in map pressed')} +// onDoubleClicked: {console.log('mouse area in map in map doubleclicked')} +// onPressAndHold: {console.log('mouse area in map press and hold signal received')} +// onClicked: {console.log('mouse area in map in map clicked')} + +// //drag.target: map +// //drag.axis: Drag.XandYAxis +// //drag.minimumX: 0 +// //drag.maximumX: page.width - map.width +// //drag.minimumY: 0 +// //drag.maximumY: page.height - map.height +// } + + MouseArea { + id: excessiveMouseAreaGeneratesWarningForTestPurposes + } + + // <unsupported so far> + //rotation: 10 // strangely impacts the size of the map element though + //transform: Scale { origin.x: 25; origin.y: 25; xScale: 3} // weirdly translates the item + //transform: Rotation { origin.y: 25; origin.x: 25; angle: 45} // weirdly translates the item + //z: 4 // map will always be under everything, will not be supported + //opacity: 0.4 // doesn't probably make sense + //clip: true // not implemented, not sure if very useful either + // </unsupported so far> + } + + + + Row { + id: buttonRow + anchors.leftMargin: 2 + anchors.topMargin: 2 + anchors.top: map.bottom; + spacing: 2 + Rectangle { id: rowRect1; width: 80; height: 45; color: 'peru'; + MouseArea { anchors.fill: parent; onClicked: { map.pinch.maximumZoomLevelChange += 0.1} + Text {text: "Pinch zoom\nsensitivity+"} + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.pinch.maximumZoomLevelChange -= 0.1} + Text {text: "Pinch zoom\nsensitivity-"} + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.pinch.rotationSpeed += 0.1} + Text {text: "Pinch rotation\nsensitivity+"} + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.pinch.rotationSpeed -= 0.1} + Text {text: "Pinch rotation\nsensitivity-"} + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.pinch.maximumTiltChange += 1} + Text {text: "Pinch tilt\nsensitivity+"} + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.pinch.maximumTiltChange -= 1} + Text {text: "Pinch tilt\nsensitivity-"} + } + } + Rectangle { id: rowRectPinchGen; width: rowRect1.width; height: rowRect1.height; color: 'lightsteelblue'; + Text { text: "Pinch\nzoom:\n" + ((map.pinch.activeGestures & MapPinch.ZoomGesture) > 0? "Yes":"No")} + MouseArea { + anchors.fill: parent; + onClicked: { + console.log('map pinch active gestures' + map.pinch.activeGestures); + if (map.pinch.activeGestures & MapPinch.ZoomGesture) + map.pinch.activeGestures &= ~MapPinch.ZoomGesture + else + map.pinch.activeGestures += MapPinch.ZoomGesture + } + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRectPinchGen.color; + Text { text: "Pinch\nrotation:\n" + ((map.pinch.activeGestures & MapPinch.RotationGesture) > 0? "Yes":"No")} + MouseArea { + anchors.fill: parent; + onClicked: { + console.log('map pinch active gestures' + map.pinch.activeGestures); + if (map.pinch.activeGestures & MapPinch.RotationGesture) + map.pinch.activeGestures &= ~MapPinch.RotationGesture + else + map.pinch.activeGestures += MapPinch.RotationGesture + } + } + } + + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRectPinchGen.color; + Text { text: "Pinch\ntilt:\n" + ((map.pinch.activeGestures & MapPinch.TiltGesture) > 0? "Yes":"No")} + MouseArea { + anchors.fill: parent; + onClicked: { + console.log('map pinch active gestures' + map.pinch.activeGestures); + if (map.pinch.activeGestures & MapPinch.TiltGesture) + map.pinch.activeGestures &= ~MapPinch.TiltGesture + else + map.pinch.activeGestures += MapPinch.TiltGesture + } + } + + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRectPinchGen.color; + Text { id: generatorEnabledText; text: pinchGenerator.enabled? "Pinch Gen\nEnabled" : "Pinch Gen\nDisabled"; font.bold: true} + MouseArea { + anchors.fill: parent; + onClicked: { + if (pinchGenerator.focus == true) { + pinchGenerator.focus = false; + pinchGenerator.enabled = false; + pinchGenerator.z = -1 + map.focus = true; + } else { + pinchGenerator.focus = true + pinchGenerator.enabled = true; + pinchGenerator.z = 10 + map.focus = false + } + } + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + Text {text: map.flick.enabled? "Flick\nEnabled":"Flick\nDisabled"; font.bold: true} + MouseArea { anchors.fill: parent; onClicked: {map.flick.enabled = !map.flick.enabled} } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.flick.deceleration += 200} + Text {text: "Flick\ndeceleration+"} + } + } + Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color; + MouseArea { anchors.fill: parent; onClicked: {map.flick.deceleration -= 200} + Text {text: "Flick\ndeceleration-"} + } + } + } // Row + + Rectangle { + id: pinchRect1 + color: 'red' + visible: false + z: 10 + width: 5 + height: 5 + } + Rectangle { + id: pinchRect2 + color: 'red' + visible: false + z: 10 + width: 5 + height: 5 + } + + Repeater { + id: swipeView1 + model: pinchGenerator.swipe1 + delegate: Component { + Rectangle { + Text {id: touchPointText} + Component.onCompleted: { + if (modelData.touchState == 1) { // Qt.TouchPointPressed + color = "pink"; width = 15; height = 15 + touchPointText.text = 'From' + } + else if (modelData.touchState == 2) { // Qt.TouchPointMoved + color = 'yellow'; width = 5; height = 5 + } + else if (modelData.touchState == 8) { // Qt.TouchPointReleased + color = 'red'; width = 15; height = 15 + touchPointText.text = 'To' + } + } + x: modelData.targetX; y: modelData.targetY + } + } + } + + Repeater { + id: swipeView2 + model: pinchGenerator.swipe2 + delegate: Component { + Rectangle { + Text {id: touchPoint2Text} + Component.onCompleted: { + if (modelData.touchState == 1) { // Qt.TouchPointPressed + color = "green"; width = 15; height = 15 + touchPoint2Text.text = 'From' + } + else if (modelData.touchState == 2) { // Qt.TouchPointMoved + color = 'yellow'; width = 5; height = 5 + } + else if (modelData.touchState == 8) { // Qt.TouchPointReleased + color = 'blue'; width = 15; height = 15 + touchPoint2Text.text = 'To' + } + } + x: modelData.targetX; y: modelData.targetY + } + } + } +} diff --git a/examples/declarative/map3d/map3d.qrc b/examples/declarative/map3d/map3d.qrc new file mode 100644 index 00000000..3b5e4e1f --- /dev/null +++ b/examples/declarative/map3d/map3d.qrc @@ -0,0 +1,24 @@ +<RCC> + <qresource prefix="/"> + <file>map3d.qml</file> + <file>Dialog.qml</file> + <file>common/TitleBar.qml</file> + <file>common/Button.qml</file> + <file>common/Slider.qml</file> + <file>common/Menu.qml</file> + <file>resources/button.png</file> + <file>resources/button.sci</file> + <file>resources/quit.png</file> + <file>resources/titlebar.png</file> + <file>resources/titlebar.sci</file> + <file>resources/quit_pressed.png</file> + <file>resources/menuItem.png</file> + <file>resources/menuItem.sci</file> + <file>resources/menuItem_pressed.png</file> + <file>resources/quit_hovered.png</file> + <file>resources/menuItem_hovered.png</file> + <file>resources/button_pressed.png</file> + <file>resources/button_hovered.png</file> + <file>blinky.gif</file> + </qresource> +</RCC> diff --git a/examples/declarative/map3d/qmlmap3d.cpp b/examples/declarative/map3d/qmlmap3d.cpp new file mode 100644 index 00000000..0072e2f1 --- /dev/null +++ b/examples/declarative/map3d/qmlmap3d.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QApplication> +#include <QtDeclarative/QDeclarativeEngine> +#include <QNetworkProxy> +#include <QtDeclarative/qsgview.h> + +// QML2 app + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + // For internal testing purposes + //qmlRegisterType<PinchGenerator>("QtQuick", 2, 0, "PinchGenerator"); + + QGLFormat f = QGLFormat::defaultFormat(); + f.setSampleBuffers(true); + //f.setSwapInterval(1); + QSGView view(f); + + const QString mainQmlApp = QLatin1String("qrc:///map3d.qml"); + view.setSource(QUrl(mainQmlApp)); + // Temporary development-time proxy setting. TODO improve later. + QNetworkProxy proxy; + proxy.setType(QNetworkProxy::HttpProxy); + proxy.setHostName("nokes.nokia.com"); + proxy.setPort(8080); + QNetworkProxy::setApplicationProxy(proxy); + // Qt.quit() called in embedded .qml by default only emits + // quit() signal, so do this (optionally use Qt.exit()). + QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit())); + if (QApplication::arguments().contains(QLatin1String("-maximize"))) { + view.showMaximized(); + } else if (QApplication::arguments().contains(QLatin1String("-fullscreen"))) { + view.showFullScreen(); + } else { + //view.setGeometry(QRect(100, 100, 360, 640)); + //view.showMaximized(); + view.show(); + } + view.raise(); + return app.exec(); +} diff --git a/examples/declarative/map3d/quit.png b/examples/declarative/map3d/quit.png Binary files differnew file mode 100755 index 00000000..5bda1b6e --- /dev/null +++ b/examples/declarative/map3d/quit.png diff --git a/examples/declarative/map3d/resources/button.png b/examples/declarative/map3d/resources/button.png Binary files differnew file mode 100755 index 00000000..11310013 --- /dev/null +++ b/examples/declarative/map3d/resources/button.png diff --git a/examples/declarative/map3d/resources/button.sci b/examples/declarative/map3d/resources/button.sci new file mode 100755 index 00000000..a34a58b6 --- /dev/null +++ b/examples/declarative/map3d/resources/button.sci @@ -0,0 +1,5 @@ +border.left: 15 +border.top: 4 +border.bottom: 4 +border.right: 15 +source: button.png diff --git a/examples/declarative/map3d/resources/button_hovered.png b/examples/declarative/map3d/resources/button_hovered.png Binary files differnew file mode 100755 index 00000000..7c9b9b63 --- /dev/null +++ b/examples/declarative/map3d/resources/button_hovered.png diff --git a/examples/declarative/map3d/resources/button_pressed.png b/examples/declarative/map3d/resources/button_pressed.png Binary files differnew file mode 100755 index 00000000..b290b6b9 --- /dev/null +++ b/examples/declarative/map3d/resources/button_pressed.png diff --git a/examples/declarative/map3d/resources/menuItem.png b/examples/declarative/map3d/resources/menuItem.png Binary files differnew file mode 100755 index 00000000..51c90082 --- /dev/null +++ b/examples/declarative/map3d/resources/menuItem.png diff --git a/examples/declarative/map3d/resources/menuItem.sci b/examples/declarative/map3d/resources/menuItem.sci new file mode 100755 index 00000000..0418d94c --- /dev/null +++ b/examples/declarative/map3d/resources/menuItem.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 12 +border.bottom: 12 +border.right: 10 +source: titlebar.png diff --git a/examples/declarative/map3d/resources/menuItem_hovered.png b/examples/declarative/map3d/resources/menuItem_hovered.png Binary files differnew file mode 100755 index 00000000..16c1a94e --- /dev/null +++ b/examples/declarative/map3d/resources/menuItem_hovered.png diff --git a/examples/declarative/map3d/resources/menuItem_pressed.png b/examples/declarative/map3d/resources/menuItem_pressed.png Binary files differnew file mode 100755 index 00000000..3ab14f1f --- /dev/null +++ b/examples/declarative/map3d/resources/menuItem_pressed.png diff --git a/examples/declarative/map3d/resources/quit.png b/examples/declarative/map3d/resources/quit.png Binary files differnew file mode 100755 index 00000000..5bda1b6e --- /dev/null +++ b/examples/declarative/map3d/resources/quit.png diff --git a/examples/declarative/map3d/resources/quit_hovered.png b/examples/declarative/map3d/resources/quit_hovered.png Binary files differnew file mode 100755 index 00000000..d4b900cf --- /dev/null +++ b/examples/declarative/map3d/resources/quit_hovered.png diff --git a/examples/declarative/map3d/resources/quit_pressed.png b/examples/declarative/map3d/resources/quit_pressed.png Binary files differnew file mode 100755 index 00000000..05c4ef83 --- /dev/null +++ b/examples/declarative/map3d/resources/quit_pressed.png diff --git a/examples/declarative/map3d/resources/titlebar.png b/examples/declarative/map3d/resources/titlebar.png Binary files differnew file mode 100755 index 00000000..51c90082 --- /dev/null +++ b/examples/declarative/map3d/resources/titlebar.png diff --git a/examples/declarative/map3d/resources/titlebar.sci b/examples/declarative/map3d/resources/titlebar.sci new file mode 100755 index 00000000..0418d94c --- /dev/null +++ b/examples/declarative/map3d/resources/titlebar.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 12 +border.bottom: 12 +border.right: 10 +source: titlebar.png diff --git a/examples/declarative/map3d/titlebar.png b/examples/declarative/map3d/titlebar.png Binary files differnew file mode 100755 index 00000000..51c90082 --- /dev/null +++ b/examples/declarative/map3d/titlebar.png diff --git a/examples/declarative/map3d/titlebar.sci b/examples/declarative/map3d/titlebar.sci new file mode 100755 index 00000000..0418d94c --- /dev/null +++ b/examples/declarative/map3d/titlebar.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 12 +border.bottom: 12 +border.right: 10 +source: titlebar.png diff --git a/examples/declarative/mapviewer/mapviewer.pro b/examples/declarative/mapviewer/mapviewer.pro index adc53344..5d931a8e 100644 --- a/examples/declarative/mapviewer/mapviewer.pro +++ b/examples/declarative/mapviewer/mapviewer.pro @@ -1,7 +1,7 @@ TARGET = qml_location_mapviewer TEMPLATE=app -QT += qtquick1 declarative network +QT += declarative network SOURCES += qmlmapviewer.cpp symbian { diff --git a/examples/examples.pro b/examples/examples.pro index 1161e17a..085f0672 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -1,3 +1,2 @@ TEMPLATE = subdirs -SUBDIRS += declarative \ - maps +SUBDIRS += declarative map3d diff --git a/examples/map3d/camerawidget.cpp b/examples/map3d/camerawidget.cpp new file mode 100644 index 00000000..6b1e0dd2 --- /dev/null +++ b/examples/map3d/camerawidget.cpp @@ -0,0 +1,114 @@ +#include "camerawidget.h" + +#include <QLabel> +#include <QLineEdit> +#include <QPushButton> +#include <QVBoxLayout> +#include <QGridLayout> + +CameraWidget::CameraWidget(QWidget *parent) + : QWidget(parent) +{ + setupUi(); +} + +void CameraWidget::setupUi() +{ + QLabel *latLabel = new QLabel("Latitude"); + lat_ = new QLineEdit(); + + QLabel *lonLabel = new QLabel("Longitude"); + lon_ = new QLineEdit(); + + QLabel *distanceLabel = new QLabel("Distance"); + distance_ = new QLineEdit(); + + QLabel *zoomLevelLabel = new QLabel("Zoom Level"); + zoomLevel_ = new QLineEdit(); + + QLabel *zoomFactorLabel = new QLabel("Zoom Factor"); + zoomFactor_ = new QLineEdit(); + + QLabel *bearingLabel = new QLabel("Bearing"); + bearing_ = new QLineEdit(); + + QLabel *tiltLabel = new QLabel("Tilt"); + tilt_ = new QLineEdit(); + + QLabel *rollLabel = new QLabel("Roll"); + roll_ = new QLineEdit(); + + QGridLayout *grid = new QGridLayout(); + grid->addWidget(latLabel, 0, 0); + grid->addWidget(lat_, 0, 1); + grid->addWidget(lonLabel, 1, 0); + grid->addWidget(lon_, 1, 1); + grid->addWidget(distanceLabel, 2, 0); + grid->addWidget(distance_, 2, 1); + grid->addWidget(zoomLevelLabel, 3, 0); + grid->addWidget(zoomLevel_, 3, 1); + grid->addWidget(zoomFactorLabel, 4, 0); + grid->addWidget(zoomFactor_, 4, 1); + grid->addWidget(bearingLabel, 5, 0); + grid->addWidget(bearing_, 5, 1); + grid->addWidget(tiltLabel, 6, 0); + grid->addWidget(tilt_, 6, 1); + grid->addWidget(rollLabel, 7, 0); + grid->addWidget(roll_, 7, 1); + + update_ = new QPushButton("Update"); + connect(update_, + SIGNAL(clicked()), + this, + SLOT(updateCamera())); + + capture_ = new QPushButton("Capture"); + connect(capture_, + SIGNAL(clicked()), + this, + SIGNAL(capture())); + + QVBoxLayout *layout = new QVBoxLayout(); + layout->addLayout(grid); + layout->addWidget(update_); + layout->addWidget(capture_); + + setLayout(layout); +} + +CameraData CameraWidget::camera() const +{ + return cam_; +} + +void CameraWidget::setCamera(const CameraData& camera) +{ + cam_ = camera; + + lat_->setText(QString::number(cam_.center().latitude(), 'g', 10)); + lon_->setText(QString::number(cam_.center().longitude(), 'g', 10)); + distance_->setText(QString::number(cam_.distance(), 'g', 4)); + zoomLevel_->setText(QString::number(cam_.zoomLevel())); + zoomFactor_->setText(QString::number(cam_.zoomFactor())); + bearing_->setText(QString::number(cam_.bearing(), 'g', 10)); + tilt_->setText(QString::number(cam_.tilt(), 'g', 10)); + roll_->setText(QString::number(cam_.roll(), 'g', 10)); +} + +void CameraWidget::updateCamera() +{ + double lat = lat_->text().toDouble(); + double lon = lon_->text().toDouble(); + cam_.setCenter(QGeoCoordinate(lat, lon)); + if (!zoomFactor_->text().isEmpty()) { + cam_.setZoomFactor(zoomFactor_->text().toDouble()); + } else { + cam_.setZoomLevel(zoomLevel_->text().toInt()); + cam_.setDistance(distance_->text().toDouble()); + } + cam_.setBearing(bearing_->text().toDouble()); + cam_.setTilt(tilt_->text().toDouble()); + cam_.setRoll(roll_->text().toDouble()); + + emit updated(); +} diff --git a/examples/map3d/camerawidget.h b/examples/map3d/camerawidget.h new file mode 100644 index 00000000..d3e8faa4 --- /dev/null +++ b/examples/map3d/camerawidget.h @@ -0,0 +1,46 @@ +#ifndef CAMERAWIDGET_H +#define CAMERAWIDGET_H + +#include <QWidget> + +#include "cameradata.h" + +class QLineEdit; +class QPushButton; + +class CameraWidget : public QWidget +{ + Q_OBJECT +public: + CameraWidget(QWidget *parent = 0); + + CameraData camera() const; + +public slots: + void setCamera(const CameraData& camera); + +private slots: + void updateCamera(); + +signals: + void updated(); + void capture(); + +private: + void setupUi(); + + CameraData cam_; + + QLineEdit *lat_; + QLineEdit *lon_; + QLineEdit *distance_; + QLineEdit *zoomLevel_; + QLineEdit *zoomFactor_; + QLineEdit *bearing_; + QLineEdit *tilt_; + QLineEdit *roll_; + QPushButton *update_; + QPushButton *capture_; +}; + +#endif // CAMERAWIDGET_H diff --git a/examples/map3d/main.cpp b/examples/map3d/main.cpp new file mode 100644 index 00000000..4c9d0b85 --- /dev/null +++ b/examples/map3d/main.cpp @@ -0,0 +1,45 @@ +#include <QApplication> + +#include <QUrl> +#include <QSettings> +#include <QProcessEnvironment> +#include <QNetworkProxyFactory> + +#include "mainwidget.h" + +int main(int argc, char** argv) +{ + QApplication app(argc, argv); + + // not in the tutorial text: set up a proxy server from + // a QSettings file if necessary (useful on Linux) + + QApplication::setOrganizationName("Nokia"); + QApplication::setApplicationName("Maps3D"); + + QSettings settings; + + QVariant value = settings.value("http.proxy"); + if (value.isValid()) { + QUrl url(value.toString(), QUrl::TolerantMode); + QNetworkProxy proxy; + proxy.setType(QNetworkProxy::HttpProxy); + proxy.setHostName(url.host()); + proxy.setPort(url.port(8080)); + QNetworkProxy::setApplicationProxy(proxy); + } + + int bm = 0; + + if (argc == 2) { + bool ok = false; + bm = QString(QLatin1String(argv[1])).toInt(&ok); + if (!ok) + bm = 0; + } + + MainWidget *w = new MainWidget(0, bm); + w->show(); + + return app.exec(); +} diff --git a/examples/map3d/mainwidget.cpp b/examples/map3d/mainwidget.cpp new file mode 100644 index 00000000..1ad6a6dd --- /dev/null +++ b/examples/map3d/mainwidget.cpp @@ -0,0 +1,300 @@ +#include "mainwidget.h" + +#include "tilecache.h" +#include "tileview.h" +#include "camerawidget.h" + +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QGridLayout> +#include <QTextEdit> +#include <QPushButton> +#include <QLabel> +#include <QLineEdit> +#include <QTimer> +#include <QComboBox> + +#include <QApplication> + +#include <QPropertyAnimation> +#include <QSequentialAnimationGroup> + +MainWidget::MainWidget(QWidget *parent, int bm) + : QWidget(parent), + exitWhenDone_(false) +{ + TileCache *cache = new TileCache(); + + tileView_ = new TileView(cache); + tileView_->setMinimumSize(450, 450); + + camera1_ = new CameraWidget(); + + connect(camera1_, + SIGNAL(updated()), + this, + SLOT(camera1Update())); + connect(camera1_, + SIGNAL(capture()), + this, + SLOT(camera1Capture())); + + camera2_ = new CameraWidget(); + + animate1_ = new QPushButton("Go"); + connect(animate1_, + SIGNAL(clicked()), + this, + SLOT(animate1Clicked())); + + animate2_ = new QPushButton("Go"); + connect(animate2_, + SIGNAL(clicked()), + this, + SLOT(animate2Clicked())); + + QLabel *durationLabel = new QLabel("Duration"); + duration_ = new QLineEdit(); + duration_->setText("2000"); + + QLabel *easingLabel = new QLabel("Easing Curve"); + easing_ = new QComboBox(); + easing_->setEditable(false); + + easing_->addItem("Linear", 0); + + easing_->addItem("InQuad", 1); + easing_->addItem("OutQuad", 2); + easing_->addItem("InOutQuad", 3); + easing_->addItem("OutInQuad", 4); + + easing_->addItem("InCubic", 5); + easing_->addItem("OutCubic", 6); + easing_->addItem("InOutCubic", 7); + easing_->addItem("OutInCubic", 8); + + easing_->addItem("InQuart", 9); + easing_->addItem("OutQuart", 10); + easing_->addItem("InOutQuart", 11); + easing_->addItem("OutInQuart", 12); + + easing_->addItem("InQunit", 13); + easing_->addItem("OutQunit", 14); + easing_->addItem("InOutQunit", 15); + easing_->addItem("OutInQunit", 16); + + easing_->addItem("InSine", 17); + easing_->addItem("OutSine", 18); + easing_->addItem("InOutSine", 19); + easing_->addItem("OutInSine", 20); + + easing_->addItem("InExpo", 21); + easing_->addItem("OutExpo", 22); + easing_->addItem("InOutExpo", 23); + easing_->addItem("OutInExpo", 24); + + easing_->addItem("InCirc", 25); + easing_->addItem("OutCirc", 26); + easing_->addItem("InOutCirc", 27); + easing_->addItem("OutInCirc", 28); + + easing_->addItem("InElastic", 29); + easing_->addItem("OutElastic", 30); + easing_->addItem("InOutElastic", 31); + easing_->addItem("OutInElastic", 32); + + easing_->addItem("InBounce", 33); + easing_->addItem("OutBounce", 34); + easing_->addItem("InOutBounce", 35); + easing_->addItem("OutInBounce", 36); + + easing_->addItem("InBack", 37); + easing_->addItem("OutBack", 38); + easing_->addItem("InOutBack", 39); + easing_->addItem("OutInBack", 40); + + connect(camera2_, + SIGNAL(updated()), + this, + SLOT(camera2Update())); + connect(camera2_, + SIGNAL(capture()), + this, + SLOT(camera2Capture())); + + bm1Button_ = new QPushButton("Benchmark 1"); + connect(bm1Button_, + SIGNAL(clicked()), + this, + SLOT(runBenchmark1())); + + QGridLayout *animateLayout = new QGridLayout; + animateLayout->addWidget(durationLabel, 0, 0); + animateLayout->addWidget(duration_, 0, 1); + animateLayout->addWidget(easingLabel, 1, 0); + animateLayout->addWidget(easing_, 1, 1); + + QGridLayout *cameraLayout = new QGridLayout; + cameraLayout->addWidget(camera1_, 0, 0); + cameraLayout->addWidget(camera2_, 0, 1); + cameraLayout->addLayout(animateLayout, 1, 0, 1, 2); + cameraLayout->addWidget(animate1_, 2, 0); + cameraLayout->addWidget(animate2_, 2, 1); + cameraLayout->addWidget(bm1Button_, 3, 0); + cameraLayout->setRowStretch(4, 1); + + QHBoxLayout *layout = new QHBoxLayout; + layout->addLayout(cameraLayout, 0); + layout->addWidget(tileView_, 1); + + CameraData c1; + camera1_->setCamera(c1); + CameraData c2; + c2.setCenter(QGeoCoordinate(-19.2, 146.75)); + c2.setZoomFactor(8.0); + camera2_->setCamera(c2); + + setLayout(layout); + + if (bm == 1) { + exitWhenDone_ = true; + QTimer::singleShot(0, this, SLOT(runBenchmark1())); + } +} + +void MainWidget::runBenchmark1() +{ + oldAutoUpdate_ = tileView_->map()->autoUpdate(); + tileView_->map()->setAutoUpdate(true); + + CameraData newCameraData; + newCameraData.setCenter(QGeoCoordinate(-19.2, 146.75)); + newCameraData.setZoomFactor(8.0); + // hack to get the internal projection set in the cameradata object + tileView_->map()->setCameraData(newCameraData); + CameraData newCamera = tileView_->map()->cameraData(); + + CameraData oldCameraData; + oldCameraData.setCenter(QGeoCoordinate(-27.5, 153)); + oldCameraData.setZoomFactor(4.0); + // hack to get the internal projection set in the cameradata object + tileView_->map()->setCameraData(oldCameraData); + CameraData oldCamera = tileView_->map()->cameraData(); + + QPropertyAnimation *a20f = new QPropertyAnimation(tileView_->map(), "camera", this); + a20f->setStartValue(QVariant::fromValue(oldCamera)); + a20f->setEndValue(QVariant::fromValue(newCamera)); + a20f->setDuration(20000); + + QPropertyAnimation *a20b = new QPropertyAnimation(tileView_->map(), "camera", this); + a20b->setStartValue(QVariant::fromValue(newCamera)); + a20b->setEndValue(QVariant::fromValue(oldCamera)); + a20b->setDuration(20000); + + QPropertyAnimation *a2f = new QPropertyAnimation(tileView_->map(), "camera", this); + a2f->setStartValue(QVariant::fromValue(oldCamera)); + a2f->setEndValue(QVariant::fromValue(newCamera)); + a2f->setDuration(2000); + + QPropertyAnimation *a2b = new QPropertyAnimation(tileView_->map(), "camera", this); + a2b->setStartValue(QVariant::fromValue(newCamera)); + a2b->setEndValue(QVariant::fromValue(oldCamera)); + a2b->setDuration(2000); + + QSequentialAnimationGroup *s2 = new QSequentialAnimationGroup(this); + s2->addAnimation(a2f); + s2->addAnimation(a2b); + s2->setLoopCount(10); + + QSequentialAnimationGroup *s = new QSequentialAnimationGroup(this); + s->addAnimation(a20f); + s->addAnimation(a20b); + s->addAnimation(s2); + + if (exitWhenDone_) { + connect(s, + SIGNAL(finished()), + qApp, + SLOT(quit())); + } + + QTimer::singleShot(0, s, SLOT(start())); + +} + +void MainWidget::camera1Update() +{ + tileView_->map()->setCameraData(camera1_->camera()); + if (!tileView_->map()->autoUpdate()) + tileView_->map()->update(); +} + +void MainWidget::camera2Update() +{ + tileView_->map()->setCameraData(camera2_->camera()); + if (!tileView_->map()->autoUpdate()) + tileView_->map()->update(); +} + +void MainWidget::camera1Capture() +{ + camera1_->setCamera(tileView_->map()->cameraData()); +} + +void MainWidget::camera2Capture() +{ + camera2_->setCamera(tileView_->map()->cameraData()); +} + +void MainWidget::animate1Clicked() +{ + oldAutoUpdate_ = tileView_->map()->autoUpdate(); + tileView_->map()->setAutoUpdate(true); + CameraData oldCamera = tileView_->map()->cameraData(); + CameraData newCamera = camera1_->camera(); + + QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this); + + connect(a, + SIGNAL(finished()), + this, + SLOT(animationFinished())); + + a->setStartValue(QVariant::fromValue(oldCamera)); + a->setEndValue(QVariant::fromValue(newCamera)); + a->setDuration(duration_->text().toInt()); + a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt())); + + QTimer::singleShot(0, a, SLOT(start())); +} + +void MainWidget::animate2Clicked() +{ + oldAutoUpdate_ = tileView_->map()->autoUpdate(); + tileView_->map()->setAutoUpdate(true); + CameraData oldCamera = tileView_->map()->cameraData(); + CameraData newCamera = camera2_->camera(); + + QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this); + + connect(a, + SIGNAL(finished()), + this, + SLOT(animationFinished())); + + a->setStartValue(QVariant::fromValue(oldCamera)); + a->setEndValue(QVariant::fromValue(newCamera)); + a->setDuration(duration_->text().toInt()); + a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt())); + +// TilePlan *tp = new TilePlan(a); +// tileView_->map()->mapCamera()->prepareAnimation(tp); +// delete tp; + + QTimer::singleShot(0, a, SLOT(start())); +} + +void MainWidget::animationFinished() +{ + tileView_->map()->setAutoUpdate(oldAutoUpdate_); +} diff --git a/examples/map3d/mainwidget.h b/examples/map3d/mainwidget.h new file mode 100644 index 00000000..3a7f072d --- /dev/null +++ b/examples/map3d/mainwidget.h @@ -0,0 +1,48 @@ +#ifndef MAINWIDGET_H +#define MAINWIDGET_H + +#include <QWidget> + +class TileView; +class CameraWidget; + +class QTextEdit; +class QPushButton; +class QLineEdit; +class QComboBox; + +class MainWidget : public QWidget +{ + Q_OBJECT +public: + MainWidget(QWidget *parent = 0, int bm = 0); + +public slots: + void camera1Update(); + void camera1Capture(); + void camera2Update(); + void camera2Capture(); + void animate1Clicked(); + void animate2Clicked(); + void animationFinished(); + + void runBenchmark1(); + +private: + TileView *tileView_; + + CameraWidget *camera1_; + CameraWidget *camera2_; + QLineEdit *duration_; + QComboBox *easing_; + QPushButton *animate1_; + QPushButton *animate2_; + + QPushButton *bm1Button_; + + bool exitWhenDone_; + + bool oldAutoUpdate_; +}; + +#endif // MAINWIDGET_H diff --git a/examples/map3d/map3d.pro b/examples/map3d/map3d.pro new file mode 100644 index 00000000..058b1f47 --- /dev/null +++ b/examples/map3d/map3d.pro @@ -0,0 +1,26 @@ + +TEMPLATE = app +TARGET = map3d + +CONFIG += qt warn_on qt3d + +QT += network location + +INCLUDEPATH += ../../src/location/mapsgl/map3d + +HEADERS += \ + camerawidget.h \ + mainwidget.h \ + tileview.h + +SOURCES += \ + main.cpp \ + camerawidget.cpp \ + mainwidget.cpp \ + tileview.cpp + +#install +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d +sources.files = $$SOURCES $HEADERS $$RESOURCES $$FORMS *.pro +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d +INSTALLS += target sources diff --git a/examples/map3d/tileview.cpp b/examples/map3d/tileview.cpp new file mode 100644 index 00000000..48ddd9ff --- /dev/null +++ b/examples/map3d/tileview.cpp @@ -0,0 +1,254 @@ +#include "tileview.h" + +#include "tilecache.h" +#include "tile.h" +#include "cameradata.h" +#include "mapitem.h" + +#include "qgeocoordinate.h" + +#include "qgeoserviceprovider.h" +#include "qgeomappingmanager.h" + +#include <qglscenenode.h> +#include <qglbuilder.h> +#include <qgeometrydata.h> + +#include <QApplication> +#include <QKeyEvent> +#include <QTimer> + +#include <QColor> + +#include <QPropertyAnimation> + +#include <cmath> + +#include <QDebug> + +TileView::TileView(TileCache *tileCache, QWidget *parent) : + QGLView(parent), + tileCache_(tileCache) +{ + serviceProvider_ = new QGeoServiceProvider("nokia"); + map_ = new Map(tileCache, this); + map_->setMappingManager(serviceProvider_->mappingManager()); + map_->setAutoUpdate(false); + + connect(map_, + SIGNAL(updateRequired()), + this, + SLOT(update())); + + setCamera(map_->glCamera()); + + +// MapItem *item1 = new MapItem; +// item1->setCoordinate(QGeoCoordinate(-27, 153)); +// item1->setSize(QSizeF(128, 128)); +// item1->setZoom(5); +// map_->addMapItem(item1); + +// MapItem *item2 = new MapItem; +// item2->setCoordinate(QGeoCoordinate(-27, 153)); +// item2->setSize(QSizeF(128, 128)); +// item2->setAnchor(QPointF(128, 128)); +// item2->setZoom(5); +// map_->addMapItem(item2); + +// MapItem *item3 = new MapItem; +// item3->setCoordinate(QGeoCoordinate(-27, 153)); +// item3->setSize(QSizeF(256.0, 256.0)); +// item3->setAnchor(QPointF(-256.0, -256.0)); +// item3->setZoom(6); +// map_->addMapItem(item3); +} + +TileView::~TileView() +{ + delete serviceProvider_; +} + +Map* TileView::map() +{ + return map_; +} + +void TileView::closeEvent(QCloseEvent *) +{ + qApp->quit(); +} + +void TileView::paintGL(QGLPainter *painter) +{ + map_->paintGL(painter); +// QGLSceneNode *node = map_->sceneNodeForRendering(); +// if (node) { +// node->draw(painter); +// map_->sceneNodeRenderingDone(); +// } +} + +void TileView::showEvent(QShowEvent *) +{ + updateAspectRatio(); +} + +void TileView::resizeEvent(QResizeEvent *event) +{ + QGLView::resizeEvent(event); + updateAspectRatio(); +} + +void TileView::updateAspectRatio() +{ + map_->resize(width(), height()); +} + +void TileView::enterEvent(QEvent *) +{ + setFocus(); + grabKeyboard(); +} + +void TileView::leaveEvent(QEvent *) +{ + releaseKeyboard(); +} + +void TileView::keyPressEvent(QKeyEvent *e) +{ + CameraData cameraData = map_->cameraData(); + if (e->key() == Qt::Key_Left) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLongitude(coord.longitude() - 1); + cameraData.setCenter(coord); + } else { + cameraData.setBearing(cameraData.bearing() - 5.0); + } + } else if (e->key() == Qt::Key_Right) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLongitude(coord.longitude() + 1); + cameraData.setCenter(coord); + } else { + cameraData.setBearing(cameraData.bearing() + 5.0); + } + } else if (e->key() == Qt::Key_Up) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() + 1); + cameraData.setCenter(coord); + } else { + cameraData.setTilt(cameraData.tilt() - 5.0); + } + } else if (e->key() == Qt::Key_Down) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() - 1); + cameraData.setCenter(coord); + } else { + cameraData.setTilt(cameraData.tilt() + 5.0); + } + } else if (e->key() == Qt::Key_Plus) { + if (e->modifiers() & Qt::ShiftModifier) { + cameraData.setDistance(cameraData.distance() / 2.0); + cameraData.setZoomLevel(cameraData.zoomLevel() + 1); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() / 1.1); + } + } else if (e->key() == Qt::Key_Minus) { + if (e->modifiers() & Qt::ShiftModifier) { + if (cameraData.zoomLevel() != 1) + cameraData.setZoomLevel(cameraData.zoomLevel() - 1); + cameraData.setDistance(cameraData.distance() * 2.0); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() * 1.1); + } + } else if (e->key() == Qt::Key_U) { + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } + map_->setCameraData(cameraData); + update(); +} + +void TileView::wheelEvent(QWheelEvent *e) +{ + CameraData cameraData = map_->cameraData(); + if (e->delta() > 0) { + if (e->modifiers() & Qt::ShiftModifier) { + cameraData.setDistance(cameraData.distance() / 2.0); + cameraData.setZoomLevel(cameraData.zoomLevel() + 1); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() / 1.1); + } + } else { + if (e->modifiers() & Qt::ShiftModifier) { + if (cameraData.zoomLevel() != 1) + cameraData.setZoomLevel(cameraData.zoomLevel() - 1); + cameraData.setDistance(cameraData.distance() * 2.0); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() * 1.1); + } + } + map_->setCameraData(cameraData); + update(); + + e->accept(); +} + +void TileView::mousePressEvent(QMouseEvent *e) +{ + switch (e->button()) { + case Qt::LeftButton: + mousePos_ = e->pos(); +// QGeoCoordinate coord = map_->screenPositionToCoordinate(mousePos_); +// qDebug() << __FUNCTION__ +// << "mousePos " << mousePos_ +// << " -> coord " << coord +// << " -> screen " << map_->coordinateToScreenPosition(coord); + break; + default: + break; + } + e->accept(); +} + +void TileView::mouseReleaseEvent(QMouseEvent *) +{ +} + +void TileView::mouseMoveEvent(QMouseEvent *e) +{ + CameraData cameraData = map_->cameraData(); + + if ((e->buttons() & Qt::LeftButton) == Qt::LeftButton) + { + // Pixel pan support?! + QPoint delta = (mousePos_ - e->pos()) / 50; + + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() + delta.y()); + coord.setLongitude(coord.longitude() - delta.x()); + cameraData.setCenter(coord); + + map_->setCameraData(cameraData); + update(); + } + e->accept(); +} diff --git a/examples/map3d/tileview.h b/examples/map3d/tileview.h new file mode 100644 index 00000000..51774087 --- /dev/null +++ b/examples/map3d/tileview.h @@ -0,0 +1,51 @@ +#ifndef TILEVIEW_H +#define TILEVIEW_H + +#include <qglview.h> + +#include "cameradata.h" +#include "map.h" + +class QGLPainter; +class QGLSceneNode; +class TileCache; +class Tile; +class TileSpec; +class MapSphere; +class QGeoServiceProvider; +class ScriptEngine; + +class TileView : public QGLView +{ + Q_OBJECT +public: + explicit TileView(TileCache *tileCache, QWidget *parent = 0); + ~TileView(); + + Map *map(); + + void paintGL(QGLPainter *painter); + +protected: + void showEvent(QShowEvent *); + void resizeEvent(QResizeEvent *); + void enterEvent(QEvent *); + void leaveEvent(QEvent *e); + void keyPressEvent(QKeyEvent *e); + void closeEvent(QCloseEvent *); + + void wheelEvent(QWheelEvent *e); + void mousePressEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + +private: + void updateAspectRatio(); + + QGeoServiceProvider *serviceProvider_; + TileCache *tileCache_; + Map *map_; + QPoint mousePos_; +}; + +#endif // TILEVIEW_H diff --git a/src/3rdparty/proj.pri b/src/3rdparty/proj.pri deleted file mode 100644 index b954a9ad..00000000 --- a/src/3rdparty/proj.pri +++ /dev/null @@ -1,7 +0,0 @@ -INCLUDEPATH += $$PWD/proj/include - -DEFINES += DISABLE_CVSID - -symbian { - LIBS += -llibpthread -llibm -} diff --git a/src/3rdparty/proj.pro b/src/3rdparty/proj.pro deleted file mode 100644 index beee478d..00000000 --- a/src/3rdparty/proj.pro +++ /dev/null @@ -1,158 +0,0 @@ -TEMPLATE=lib -CONFIG+=static - -include(proj.pri) - -CONFIG += warn_off - -SOURCES += \ - $$PWD/proj/PJ_aeqd.c \ - $$PWD/proj/PJ_gnom.c \ - $$PWD/proj/PJ_laea.c \ - $$PWD/proj/PJ_mod_ster.c \ - $$PWD/proj/PJ_nsper.c \ - $$PWD/proj/PJ_nzmg.c \ - $$PWD/proj/PJ_ortho.c \ - $$PWD/proj/PJ_stere.c \ - $$PWD/proj/PJ_sterea.c \ - $$PWD/proj/PJ_aea.c \ - $$PWD/proj/PJ_bipc.c \ - $$PWD/proj/PJ_bonne.c \ - $$PWD/proj/PJ_eqdc.c \ - $$PWD/proj/PJ_imw_p.c \ - $$PWD/proj/PJ_krovak.c \ - $$PWD/proj/PJ_lcc.c \ - $$PWD/proj/PJ_poly.c \ - $$PWD/proj/PJ_rpoly.c \ - $$PWD/proj/PJ_sconics.c \ - $$PWD/proj/proj_rouss.c \ - $$PWD/proj/PJ_cass.c \ - $$PWD/proj/PJ_cc.c \ - $$PWD/proj/PJ_cea.c \ - $$PWD/proj/PJ_eqc.c \ - $$PWD/proj/PJ_gall.c \ - $$PWD/proj/PJ_labrd.c \ - $$PWD/proj/PJ_lsat.c \ - $$PWD/proj/PJ_merc.c \ - $$PWD/proj/PJ_mill.c \ - $$PWD/proj/PJ_ocea.c \ - $$PWD/proj/PJ_omerc.c \ - $$PWD/proj/PJ_somerc.c \ - $$PWD/proj/PJ_tcc.c \ - $$PWD/proj/PJ_tcea.c \ - $$PWD/proj/PJ_tmerc.c \ - $$PWD/proj/PJ_airy.c \ - $$PWD/proj/PJ_aitoff.c \ - $$PWD/proj/PJ_august.c \ - $$PWD/proj/PJ_bacon.c \ - $$PWD/proj/PJ_chamb.c \ - $$PWD/proj/PJ_hammer.c \ - $$PWD/proj/PJ_lagrng.c \ - $$PWD/proj/PJ_larr.c \ - $$PWD/proj/PJ_lask.c \ - $$PWD/proj/PJ_nocol.c \ - $$PWD/proj/PJ_ob_tran.c \ - $$PWD/proj/PJ_oea.c \ - $$PWD/proj/PJ_tpeqd.c \ - $$PWD/proj/PJ_vandg.c \ - $$PWD/proj/PJ_vandg2.c \ - $$PWD/proj/PJ_vandg4.c \ - $$PWD/proj/PJ_wag7.c \ - $$PWD/proj/PJ_lcca.c \ - $$PWD/proj/PJ_geos.c \ - $$PWD/proj/PJ_boggs.c \ - $$PWD/proj/PJ_collg.c \ - $$PWD/proj/PJ_crast.c \ - $$PWD/proj/PJ_denoy.c \ - $$PWD/proj/PJ_eck1.c \ - $$PWD/proj/PJ_eck2.c \ - $$PWD/proj/PJ_eck3.c \ - $$PWD/proj/PJ_eck4.c \ - $$PWD/proj/PJ_eck5.c \ - $$PWD/proj/PJ_fahey.c \ - $$PWD/proj/PJ_fouc_s.c \ - $$PWD/proj/PJ_gins8.c \ - $$PWD/proj/PJ_gstmerc.c \ - $$PWD/proj/PJ_gn_sinu.c \ - $$PWD/proj/PJ_goode.c \ - $$PWD/proj/PJ_hatano.c \ - $$PWD/proj/PJ_loxim.c \ - $$PWD/proj/PJ_mbt_fps.c \ - $$PWD/proj/PJ_mbtfpp.c \ - $$PWD/proj/PJ_mbtfpq.c \ - $$PWD/proj/PJ_moll.c \ - $$PWD/proj/PJ_nell.c \ - $$PWD/proj/PJ_nell_h.c \ - $$PWD/proj/PJ_putp2.c \ - $$PWD/proj/PJ_putp3.c \ - $$PWD/proj/PJ_putp4p.c \ - $$PWD/proj/PJ_putp5.c \ - $$PWD/proj/PJ_putp6.c \ - $$PWD/proj/PJ_robin.c \ - $$PWD/proj/PJ_sts.c \ - $$PWD/proj/PJ_urm5.c \ - $$PWD/proj/PJ_urmfps.c \ - $$PWD/proj/PJ_wag2.c \ - $$PWD/proj/PJ_wag3.c \ - $$PWD/proj/PJ_wink1.c \ - $$PWD/proj/PJ_wink2.c \ - $$PWD/proj/pj_latlong.c \ - $$PWD/proj/pj_geocent.c \ - $$PWD/proj/aasincos.c \ - $$PWD/proj/adjlon.c \ - $$PWD/proj/bch2bps.c \ - $$PWD/proj/bchgen.c \ - $$PWD/proj/biveval.c \ - $$PWD/proj/dmstor.c \ - $$PWD/proj/mk_cheby.c \ - $$PWD/proj/pj_auth.c \ - $$PWD/proj/pj_deriv.c \ - $$PWD/proj/pj_ell_set.c \ - $$PWD/proj/pj_ellps.c \ - $$PWD/proj/pj_errno.c \ - $$PWD/proj/pj_factors.c \ - $$PWD/proj/pj_fwd.c \ - $$PWD/proj/pj_init.c \ - $$PWD/proj/pj_inv.c \ - $$PWD/proj/pj_list.c \ - $$PWD/proj/pj_malloc.c \ - $$PWD/proj/pj_mlfn.c \ - $$PWD/proj/pj_msfn.c \ - $$PWD/proj/proj_mdist.c \ - $$PWD/proj/pj_open_lib_qt.cpp \ - $$PWD/proj/pj_param.c \ - $$PWD/proj/pj_phi2.c \ - $$PWD/proj/pj_pr_list.c \ - $$PWD/proj/pj_qsfn.c \ - $$PWD/proj/pj_strerrno.c \ - $$PWD/proj/pj_tsfn.c \ - $$PWD/proj/pj_units.c \ - $$PWD/proj/pj_zpoly1.c \ - $$PWD/proj/rtodms.c \ - $$PWD/proj/vector1.c \ - $$PWD/proj/pj_release.c \ - $$PWD/proj/pj_gauss.c \ - $$PWD/proj/nad_cvt.c \ - $$PWD/proj/nad_init.c \ - $$PWD/proj/nad_intr.c \ - $$PWD/proj/emess.c \ - $$PWD/proj/pj_apply_gridshift.c \ - $$PWD/proj/pj_datums.c \ - $$PWD/proj/pj_datum_set.c \ - $$PWD/proj/pj_transform.c \ - $$PWD/proj/geocent.c \ - $$PWD/proj/pj_utils.c \ - $$PWD/proj/pj_gridinfo.c \ - $$PWD/proj/pj_gridlist.c \ - $$PWD/proj/pj_mutex.c \ - $$PWD/proj/pj_initcache.c - -unix { - DEFINES += MUTEX_pthread -} - -win32 { - DEFINES += MUTEX_win32 -} - -RESOURCES += $$PWD/proj/data.qrc diff --git a/src/3rdparty/proj/PJ_aea.c b/src/3rdparty/proj/PJ_aea.c deleted file mode 100644 index c3799365..00000000 --- a/src/3rdparty/proj/PJ_aea.c +++ /dev/null @@ -1,162 +0,0 @@ -/****************************************************************************** - * $Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Implementation of the aea (Albers Equal Area) projection. - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PROJ_PARMS__ \ - double ec; \ - double n; \ - double c; \ - double dd; \ - double n2; \ - double rho0; \ - double rho; \ - double phi1; \ - double phi2; \ - double *en; \ - int ellips; - -#define PJ_LIB__ -#include <projects.h> - -PJ_CVSID("$Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -# define EPS10 1.e-10 -# define TOL7 1.e-7 - -PROJ_HEAD(aea, "Albers Equal Area") - "\n\tConic Sph&Ell\n\tlat_1= lat_2="; -PROJ_HEAD(leac, "Lambert Equal Area Conic") - "\n\tConic, Sph&Ell\n\tlat_1= south"; -/* determine latitude angle phi-1 */ -# define N_ITER 15 -# define EPSILON 1.0e-7 -# define TOL 1.0e-10 - static double -phi1_(double qs, double Te, double Tone_es) { - int i; - double Phi, sinpi, cospi, con, com, dphi; - - Phi = asin (.5 * qs); - if (Te < EPSILON) - return( Phi ); - i = N_ITER; - do { - sinpi = sin (Phi); - cospi = cos (Phi); - con = Te * sinpi; - com = 1. - con * con; - dphi = .5 * com * com / cospi * (qs / Tone_es - - sinpi / com + .5 / Te * log ((1. - con) / - (1. + con))); - Phi += dphi; - } while (fabs(dphi) > TOL && --i); - return( i ? Phi : HUGE_VAL ); -} -FORWARD(e_forward); /* ellipsoid & spheroid */ - if ((P->rho = P->c - (P->ellips ? P->n * pj_qsfn(sin(lp.phi), - P->e, P->one_es) : P->n2 * sin(lp.phi))) < 0.) F_ERROR - P->rho = P->dd * sqrt(P->rho); - xy.x = P->rho * sin( lp.lam *= P->n ); - xy.y = P->rho0 - P->rho * cos(lp.lam); - return (xy); -} -INVERSE(e_inverse) /* ellipsoid & spheroid */; - if( (P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) { - if (P->n < 0.) { - P->rho = -P->rho; - xy.x = -xy.x; - xy.y = -xy.y; - } - lp.phi = P->rho / P->dd; - if (P->ellips) { - lp.phi = (P->c - lp.phi * lp.phi) / P->n; - if (fabs(P->ec - fabs(lp.phi)) > TOL7) { - if ((lp.phi = phi1_(lp.phi, P->e, P->one_es)) == HUGE_VAL) - I_ERROR - } else - lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - } else if (fabs(lp.phi = (P->c - lp.phi * lp.phi) / P->n2) <= 1.) - lp.phi = asin(lp.phi); - else - lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - lp.lam = atan2(xy.x, xy.y) / P->n; - } else { - lp.lam = 0.; - lp.phi = P->n > 0. ? HALFPI : - HALFPI; - } - return (lp); -} -FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } - static PJ * -setup(PJ *P) { - double cosphi, sinphi; - int secant; - - if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); - P->n = sinphi = sin(P->phi1); - cosphi = cos(P->phi1); - secant = fabs(P->phi1 - P->phi2) >= EPS10; - if( (P->ellips = (P->es > 0.))) { - double ml1, m1; - - if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - m1 = pj_msfn(sinphi, cosphi, P->es); - ml1 = pj_qsfn(sinphi, P->e, P->one_es); - if (secant) { /* secant cone */ - double ml2, m2; - - sinphi = sin(P->phi2); - cosphi = cos(P->phi2); - m2 = pj_msfn(sinphi, cosphi, P->es); - ml2 = pj_qsfn(sinphi, P->e, P->one_es); - P->n = (m1 * m1 - m2 * m2) / (ml2 - ml1); - } - P->ec = 1. - .5 * P->one_es * log((1. - P->e) / - (1. + P->e)) / P->e; - P->c = m1 * m1 + P->n * ml1; - P->dd = 1. / P->n; - P->rho0 = P->dd * sqrt(P->c - P->n * pj_qsfn(sin(P->phi0), - P->e, P->one_es)); - } else { - if (secant) P->n = .5 * (P->n + sin(P->phi2)); - P->n2 = P->n + P->n; - P->c = cosphi * cosphi + P->n2 * sinphi; - P->dd = 1. / P->n; - P->rho0 = P->dd * sqrt(P->c - P->n2 * sin(P->phi0)); - } - P->inv = e_inverse; P->fwd = e_forward; - return P; -} -ENTRY1(aea,en) - P->phi1 = pj_param(P->params, "rlat_1").f; - P->phi2 = pj_param(P->params, "rlat_2").f; -ENDENTRY(setup(P)) -ENTRY1(leac,en) - P->phi2 = pj_param(P->params, "rlat_1").f; - P->phi1 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_aeqd.c b/src/3rdparty/proj/PJ_aeqd.c deleted file mode 100644 index dea9edff..00000000 --- a/src/3rdparty/proj/PJ_aeqd.c +++ /dev/null @@ -1,271 +0,0 @@ -/****************************************************************************** - * $Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection. - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PROJ_PARMS__ \ - double sinph0; \ - double cosph0; \ - double *en; \ - double M1; \ - double N1; \ - double Mp; \ - double He; \ - double G; \ - int mode; -#define PJ_LIB__ -#include <projects.h> - -PJ_CVSID("$Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam"; - -#define EPS10 1.e-10 -#define TOL 1.e-14 - -#define N_POLE 0 -#define S_POLE 1 -#define EQUIT 2 -#define OBLIQ 3 -FORWARD(e_guam_fwd); /* Guam elliptical */ - double cosphi, sinphi, t; - - cosphi = cos(lp.phi); - sinphi = sin(lp.phi); - t = 1. / sqrt(1. - P->es * sinphi * sinphi); - xy.x = lp.lam * cosphi * t; - xy.y = pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->M1 + - .5 * lp.lam * lp.lam * cosphi * sinphi * t; - return (xy); -} -FORWARD(e_forward); /* elliptical */ - double coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA; - - coslam = cos(lp.lam); - cosphi = cos(lp.phi); - sinphi = sin(lp.phi); - switch (P->mode) { - case N_POLE: - coslam = - coslam; - case S_POLE: - xy.x = (rho = fabs(P->Mp - pj_mlfn(lp.phi, sinphi, cosphi, P->en))) * - sin(lp.lam); - xy.y = rho * coslam; - break; - case EQUIT: - case OBLIQ: - if (fabs(lp.lam) < EPS10 && fabs(lp.phi - P->phi0) < EPS10) { - xy.x = xy.y = 0.; - break; - } - t = atan2(P->one_es * sinphi + P->es * P->N1 * P->sinph0 * - sqrt(1. - P->es * sinphi * sinphi), cosphi); - ct = cos(t); st = sin(t); - Az = atan2(sin(lp.lam) * ct, P->cosph0 * st - P->sinph0 * coslam * ct); - cA = cos(Az); sA = sin(Az); - s = aasin( fabs(sA) < TOL ? - (P->cosph0 * st - P->sinph0 * coslam * ct) / cA : - sin(lp.lam) * ct / sA ); - H = P->He * cA; - H2 = H * H; - c = P->N1 * s * (1. + s * s * (- H2 * (1. - H2)/6. + - s * ( P->G * H * (1. - 2. * H2 * H2) / 8. + - s * ((H2 * (4. - 7. * H2) - 3. * P->G * P->G * (1. - 7. * H2)) / - 120. - s * P->G * H / 48.)))); - xy.x = c * sA; - xy.y = c * cA; - break; - } - return (xy); -} -FORWARD(s_forward); /* spherical */ - double coslam, cosphi, sinphi; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - switch (P->mode) { - case EQUIT: - xy.y = cosphi * coslam; - goto oblcon; - case OBLIQ: - xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; -oblcon: - if (fabs(fabs(xy.y) - 1.) < TOL) - if (xy.y < 0.) - F_ERROR - else - xy.x = xy.y = 0.; - else { - xy.y = acos(xy.y); - xy.y /= sin(xy.y); - xy.x = xy.y * cosphi * sin(lp.lam); - xy.y *= (P->mode == EQUIT) ? sinphi : - P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; - } - break; - case N_POLE: - lp.phi = -lp.phi; - coslam = -coslam; - case S_POLE: - if (fabs(lp.phi - HALFPI) < EPS10) F_ERROR; - xy.x = (xy.y = (HALFPI + lp.phi)) * sin(lp.lam); - xy.y *= coslam; - break; - } - return (xy); -} -INVERSE(e_guam_inv); /* Guam elliptical */ - double x2, t; - int i; - - x2 = 0.5 * xy.x * xy.x; - lp.phi = P->phi0; - for (i = 0; i < 3; ++i) { - t = P->e * sin(lp.phi); - lp.phi = pj_inv_mlfn(P->M1 + xy.y - - x2 * tan(lp.phi) * (t = sqrt(1. - t * t)), P->es, P->en); - } - lp.lam = xy.x * t / cos(lp.phi); - return (lp); -} -INVERSE(e_inverse); /* elliptical */ - double c, Az, cosAz, A, B, D, E, F, psi, t; - - if ((c = hypot(xy.x, xy.y)) < EPS10) { - lp.phi = P->phi0; - lp.lam = 0.; - return (lp); - } - if (P->mode == OBLIQ || P->mode == EQUIT) { - cosAz = cos(Az = atan2(xy.x, xy.y)); - t = P->cosph0 * cosAz; - B = P->es * t / P->one_es; - A = - B * t; - B *= 3. * (1. - A) * P->sinph0; - D = c / P->N1; - E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.)); - F = 1. - E * E * (A / 2. + B * E / 6.); - psi = aasin(P->sinph0 * cos(E) + t * sin(E)); - lp.lam = aasin(sin(Az) * sin(E) / cos(psi)); - if ((t = fabs(psi)) < EPS10) - lp.phi = 0.; - else if (fabs(t - HALFPI) < 0.) - lp.phi = HALFPI; - else - lp.phi = atan((1. - P->es * F * P->sinph0 / sin(psi)) * tan(psi) / - P->one_es); - } else { /* Polar */ - lp.phi = pj_inv_mlfn(P->mode == N_POLE ? P->Mp - c : P->Mp + c, - P->es, P->en); - lp.lam = atan2(xy.x, P->mode == N_POLE ? -xy.y : xy.y); - } - return (lp); -} -INVERSE(s_inverse); /* spherical */ - double cosc, c_rh, sinc; - - if ((c_rh = hypot(xy.x, xy.y)) > PI) { - if (c_rh - EPS10 > PI) I_ERROR; - c_rh = PI; - } else if (c_rh < EPS10) { - lp.phi = P->phi0; - lp.lam = 0.; - return (lp); - } - if (P->mode == OBLIQ || P->mode == EQUIT) { - sinc = sin(c_rh); - cosc = cos(c_rh); - if (P->mode == EQUIT) { - lp.phi = aasin(xy.y * sinc / c_rh); - xy.x *= sinc; - xy.y = cosc * c_rh; - } else { - lp.phi = aasin(cosc * P->sinph0 + xy.y * sinc * P->cosph0 / - c_rh); - xy.y = (cosc - P->sinph0 * sin(lp.phi)) * c_rh; - xy.x *= sinc * P->cosph0; - } - lp.lam = xy.y == 0. ? 0. : atan2(xy.x, xy.y); - } else if (P->mode == N_POLE) { - lp.phi = HALFPI - c_rh; - lp.lam = atan2(xy.x, -xy.y); - } else { - lp.phi = c_rh - HALFPI; - lp.lam = atan2(xy.x, xy.y); - } - return (lp); -} -FREEUP; - if (P) { - if (P->en) - pj_dalloc(P->en); - pj_dalloc(P); - } -} -ENTRY1(aeqd, en) - P->phi0 = pj_param(P->params, "rlat_0").f; - if (fabs(fabs(P->phi0) - HALFPI) < EPS10) { - P->mode = P->phi0 < 0. ? S_POLE : N_POLE; - P->sinph0 = P->phi0 < 0. ? -1. : 1.; - P->cosph0 = 0.; - } else if (fabs(P->phi0) < EPS10) { - P->mode = EQUIT; - P->sinph0 = 0.; - P->cosph0 = 1.; - } else { - P->mode = OBLIQ; - P->sinph0 = sin(P->phi0); - P->cosph0 = cos(P->phi0); - } - if (! P->es) { - P->inv = s_inverse; P->fwd = s_forward; - } else { - if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - if (pj_param(P->params, "bguam").i) { - P->M1 = pj_mlfn(P->phi0, P->sinph0, P->cosph0, P->en); - P->inv = e_guam_inv; P->fwd = e_guam_fwd; - } else { - switch (P->mode) { - case N_POLE: - P->Mp = pj_mlfn(HALFPI, 1., 0., P->en); - break; - case S_POLE: - P->Mp = pj_mlfn(-HALFPI, -1., 0., P->en); - break; - case EQUIT: - case OBLIQ: - P->inv = e_inverse; P->fwd = e_forward; - P->N1 = 1. / sqrt(1. - P->es * P->sinph0 * P->sinph0); - P->G = P->sinph0 * (P->He = P->e / sqrt(P->one_es)); - P->He *= P->cosph0; - break; - } - P->inv = e_inverse; P->fwd = e_forward; - } - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_airy.c b/src/3rdparty/proj/PJ_airy.c deleted file mode 100644 index 2de02ee2..00000000 --- a/src/3rdparty/proj/PJ_airy.c +++ /dev/null @@ -1,124 +0,0 @@ -/****************************************************************************** - * $Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Implementation of the airy (Airy) projection. - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PROJ_PARMS__ \ - double p_halfpi; \ - double sinph0; \ - double cosph0; \ - double Cb; \ - int mode; \ - int no_cut; /* do not cut at hemisphere limit */ -#define PJ_LIB__ -#include <projects.h> - -PJ_CVSID("$Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b="; - -# define EPS 1.e-10 -# define N_POLE 0 -# define S_POLE 1 -# define EQUIT 2 -# define OBLIQ 3 -FORWARD(s_forward); /* spheroid */ - double sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz; - - sinlam = sin(lp.lam); - coslam = cos(lp.lam); - switch (P->mode) { - case EQUIT: - case OBLIQ: - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - cosz = cosphi * coslam; - if (P->mode == OBLIQ) - cosz = P->sinph0 * sinphi + P->cosph0 * cosz; - if (!P->no_cut && cosz < -EPS) - F_ERROR; - if (fabs(s = 1. - cosz) > EPS) { - t = 0.5 * (1. + cosz); - Krho = -log(t)/s - P->Cb / t; - } else - Krho = 0.5 - P->Cb; - xy.x = Krho * cosphi * sinlam; - if (P->mode == OBLIQ) - xy.y = Krho * (P->cosph0 * sinphi - - P->sinph0 * cosphi * coslam); - else - xy.y = Krho * sinphi; - break; - case S_POLE: - case N_POLE: - lp.phi = fabs(P->p_halfpi - lp.phi); - if (!P->no_cut && (lp.phi - EPS) > HALFPI) - F_ERROR; - if ((lp.phi *= 0.5) > EPS) { - t = tan(lp.phi); - Krho = -2.*(log(cos(lp.phi)) / t + t * P->Cb); - xy.x = Krho * sinlam; - xy.y = Krho * coslam; - if (P->mode == N_POLE) - xy.y = -xy.y; - } else - xy.x = xy.y = 0.; - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(airy) - double beta; - - P->no_cut = pj_param(P->params, "bno_cut").i; - beta = 0.5 * (HALFPI - pj_param(P->params, "rlat_b").f); - if (fabs(beta) < EPS) - P->Cb = -0.5; - else { - P->Cb = 1./tan(beta); - P->Cb *= P->Cb * log(cos(beta)); - } - if (fabs(fabs(P->phi0) - HALFPI) < EPS) - if (P->phi0 < 0.) { - P->p_halfpi = -HALFPI; - P->mode = S_POLE; - } else { - P->p_halfpi = HALFPI; - P->mode = N_POLE; - } - else { - if (fabs(P->phi0) < EPS) - P->mode = EQUIT; - else { - P->mode = OBLIQ; - P->sinph0 = sin(P->phi0); - P->cosph0 = cos(P->phi0); - } - } - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_aitoff.c b/src/3rdparty/proj/PJ_aitoff.c deleted file mode 100644 index a49b30bb..00000000 --- a/src/3rdparty/proj/PJ_aitoff.c +++ /dev/null @@ -1,76 +0,0 @@ -/****************************************************************************** - * $Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel) - * projections. - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PROJ_PARMS__ \ - double cosphi1; \ - int mode; -#define PJ_LIB__ -#include <projects.h> - -PJ_CVSID("$Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph"; -PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1"; - -FORWARD(s_forward); /* spheroid */ - double c, d; - - if((d = acos(cos(lp.phi) * cos(c = 0.5 * lp.lam)))) {/* basic Aitoff */ - xy.x = 2. * d * cos(lp.phi) * sin(c) * (xy.y = 1. / sin(d)); - xy.y *= d * sin(lp.phi); - } else - xy.x = xy.y = 0.; - if (P->mode) { /* Winkel Tripel */ - xy.x = (xy.x + lp.lam * P->cosphi1) * 0.5; - xy.y = (xy.y + lp.phi) * 0.5; - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->inv = 0; - P->fwd = s_forward; - P->es = 0.; - return P; -} -ENTRY0(aitoff) - P->mode = 0; -ENDENTRY(setup(P)) -ENTRY0(wintri) - P->mode = 1; - if (pj_param(P->params, "tlat_1").i) - { - if ((P->cosphi1 = cos(pj_param(P->params, "rlat_1").f)) == 0.) - E_ERROR(-22) - } - else /* 50d28' or acos(2/pi) */ - P->cosphi1 = 0.636619772367581343; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_august.c b/src/3rdparty/proj/PJ_august.c deleted file mode 100644 index 4e6dab98..00000000 --- a/src/3rdparty/proj/PJ_august.c +++ /dev/null @@ -1,18 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv."; -#define M 1.333333333333333 -FORWARD(s_forward); /* spheroid */ - double t, c1, c, x1, x12, y1, y12; - - t = tan(.5 * lp.phi); - c1 = sqrt(1. - t * t); - c = 1. + c1 * cos(lp.lam *= .5); - x1 = sin(lp.lam) * c1 / c; - y1 = t / c; - xy.x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 * y1)); - xy.y = M * y1 * (3. + 3. * x12 - y12); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(august) P->inv = 0; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_bacon.c b/src/3rdparty/proj/PJ_bacon.c deleted file mode 100644 index dfc559b8..00000000 --- a/src/3rdparty/proj/PJ_bacon.c +++ /dev/null @@ -1,41 +0,0 @@ -# define HLFPI2 2.46740110027233965467 -# define EPS 1e-10 -#define PROJ_PARMS__ \ - int bacn; \ - int ortl; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv."; -PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv."; -PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv."; -FORWARD(s_forward); /* spheroid */ - double ax, f; - - xy.y = P->bacn ? HALFPI * sin(lp.phi) : lp.phi; - if ((ax = fabs(lp.lam)) >= EPS) { - if (P->ortl && ax >= HALFPI) - xy.x = sqrt(HLFPI2 - lp.phi * lp.phi + EPS) + ax - HALFPI; - else { - f = 0.5 * (HLFPI2 / ax + ax); - xy.x = ax - f + sqrt(f * f - xy.y * xy.y); - } - if (lp.lam < 0.) xy.x = - xy.x; - } else - xy.x = 0.; - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(bacon) - P->bacn = 1; - P->ortl = 0; - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) -ENTRY0(apian) - P->bacn = P->ortl = 0; - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) -ENTRY0(ortel) - P->bacn = 0; - P->ortl = 1; - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_bipc.c b/src/3rdparty/proj/PJ_bipc.c deleted file mode 100644 index 5cb74256..00000000 --- a/src/3rdparty/proj/PJ_bipc.c +++ /dev/null @@ -1,132 +0,0 @@ -#define PROJ_PARMS__ \ - int noskew; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") - "\n\tConic Sph."; -# define EPS 1e-10 -# define EPS10 1e-10 -# define ONEEPS 1.000000001 -# define NITER 10 -# define lamB -.34894976726250681539 -# define n .63055844881274687180 -# define F 1.89724742567461030582 -# define Azab .81650043674686363166 -# define Azba 1.82261843856185925133 -# define T 1.27246578267089012270 -# define rhoc 1.20709121521568721927 -# define cAzc .69691523038678375519 -# define sAzc .71715351331143607555 -# define C45 .70710678118654752469 -# define S45 .70710678118654752410 -# define C20 .93969262078590838411 -# define S20 -.34202014332566873287 -# define R110 1.91986217719376253360 -# define R104 1.81514242207410275904 -FORWARD(s_forward); /* spheroid */ - double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r; - int tag; - - cphi = cos(lp.phi); - sphi = sin(lp.phi); - cdlam = cos(sdlam = lamB - lp.lam); - sdlam = sin(sdlam); - if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { - Az = lp.phi < 0. ? PI : 0.; - tphi = HUGE_VAL; - } else { - tphi = sphi / cphi; - Az = atan2(sdlam , C45 * (tphi - cdlam)); - } - if( (tag = (Az > Azba)) ) { - cdlam = cos(sdlam = lp.lam + R110); - sdlam = sin(sdlam); - z = S20 * sphi + C20 * cphi * cdlam; - if (fabs(z) > 1.) { - if (fabs(z) > ONEEPS) F_ERROR - else z = z < 0. ? -1. : 1.; - } else - z = acos(z); - if (tphi != HUGE_VAL) - Az = atan2(sdlam, (C20 * tphi - S20 * cdlam)); - Av = Azab; - xy.y = rhoc; - } else { - z = S45 * (sphi + cphi * cdlam); - if (fabs(z) > 1.) { - if (fabs(z) > ONEEPS) F_ERROR - else z = z < 0. ? -1. : 1.; - } else - z = acos(z); - Av = Azba; - xy.y = -rhoc; - } - if (z < 0.) F_ERROR; - r = F * (t = pow(tan(.5 * z), n)); - if ((al = .5 * (R104 - z)) < 0.) F_ERROR; - al = (t + pow(al, n)) / T; - if (fabs(al) > 1.) { - if (fabs(al) > ONEEPS) F_ERROR - else al = al < 0. ? -1. : 1.; - } else - al = acos(al); - if (fabs(t = n * (Av - Az)) < al) - r /= cos(al + (tag ? t : -t)); - xy.x = r * sin(t); - xy.y += (tag ? -r : r) * cos(t); - if (P->noskew) { - t = xy.x; - xy.x = -xy.x * cAzc - xy.y * sAzc; - xy.y = -xy.y * cAzc + t * sAzc; - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double t, r, rp, rl, al, z, fAz, Az, s, c, Av; - int neg, i; - - if (P->noskew) { - t = xy.x; - xy.x = -xy.x * cAzc + xy.y * sAzc; - xy.y = -xy.y * cAzc - t * sAzc; - } - if( (neg = (xy.x < 0.)) ) { - xy.y = rhoc - xy.y; - s = S20; - c = C20; - Av = Azab; - } else { - xy.y += rhoc; - s = S45; - c = C45; - Av = Azba; - } - rl = rp = r = hypot(xy.x, xy.y); - fAz = fabs(Az = atan2(xy.x, xy.y)); - for (i = NITER; i ; --i) { - z = 2. * atan(pow(r / F,1 / n)); - al = acos((pow(tan(.5 * z), n) + - pow(tan(.5 * (R104 - z)), n)) / T); - if (fAz < al) - r = rp * cos(al + (neg ? Az : -Az)); - if (fabs(rl - r) < EPS) - break; - rl = r; - } - if (! i) I_ERROR; - Az = Av - Az / n; - lp.phi = asin(s * cos(z) + c * sin(z) * cos(Az)); - lp.lam = atan2(sin(Az), c / tan(z) - s * cos(Az)); - if (neg) - lp.lam -= R110; - else - lp.lam = lamB - lp.lam; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(bipc) - P->noskew = pj_param(P->params, "bns").i; - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_boggs.c b/src/3rdparty/proj/PJ_boggs.c deleted file mode 100644 index 48fdc9ab..00000000 --- a/src/3rdparty/proj/PJ_boggs.c +++ /dev/null @@ -1,32 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl., no inv., Sph."; -# define NITER 20 -# define EPS 1e-7 -# define ONETOL 1.000001 -# define FXC 2.00276 -# define FXC2 1.11072 -# define FYC 0.49931 -# define FYC2 1.41421356237309504880 -FORWARD(s_forward); /* spheroid */ - double theta, th1, c; - int i; - - theta = lp.phi; - if (fabs(fabs(lp.phi) - HALFPI) < EPS) - xy.x = 0.; - else { - c = sin(theta) * PI; - for (i = NITER; i; --i) { - theta -= th1 = (theta + sin(theta) - c) / - (1. + cos(theta)); - if (fabs(th1) < EPS) break; - } - theta *= 0.5; - xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta)); - } - xy.y = FYC * (lp.phi + FYC2 * sin(theta)); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(boggs) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_bonne.c b/src/3rdparty/proj/PJ_bonne.c deleted file mode 100644 index 81a5bf98..00000000 --- a/src/3rdparty/proj/PJ_bonne.c +++ /dev/null @@ -1,85 +0,0 @@ -#define PROJ_PARMS__ \ - double phi1; \ - double cphi1; \ - double am1; \ - double m1; \ - double *en; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") - "\n\tConic Sph&Ell\n\tlat_1="; -#define EPS10 1e-10 -FORWARD(e_forward); /* ellipsoid */ - double rh, E, c; - - rh = P->am1 + P->m1 - pj_mlfn(lp.phi, E = sin(lp.phi), c = cos(lp.phi), P->en); - E = c * lp.lam / (rh * sqrt(1. - P->es * E * E)); - xy.x = rh * sin(E); - xy.y = P->am1 - rh * cos(E); - return (xy); -} -FORWARD(s_forward); /* spheroid */ - double E, rh; - - rh = P->cphi1 + P->phi1 - lp.phi; - if (fabs(rh) > EPS10) { - xy.x = rh * sin(E = lp.lam * cos(lp.phi) / rh); - xy.y = P->cphi1 - rh * cos(E); - } else - xy.x = xy.y = 0.; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double rh; - - rh = hypot(xy.x, xy.y = P->cphi1 - xy.y); - lp.phi = P->cphi1 + P->phi1 - rh; - if (fabs(lp.phi) > HALFPI) I_ERROR; - if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) - lp.lam = 0.; - else - lp.lam = rh * atan2(xy.x, xy.y) / cos(lp.phi); - return (lp); -} -INVERSE(e_inverse); /* ellipsoid */ - double s, rh; - - rh = hypot(xy.x, xy.y = P->am1 - xy.y); - lp.phi = pj_inv_mlfn(P->am1 + P->m1 - rh, P->es, P->en); - if ((s = fabs(lp.phi)) < HALFPI) { - s = sin(lp.phi); - lp.lam = rh * atan2(xy.x, xy.y) * - sqrt(1. - P->es * s * s) / cos(lp.phi); - } else if (fabs(s - HALFPI) <= EPS10) - lp.lam = 0.; - else I_ERROR; - return (lp); -} -FREEUP; - if (P) { - if (P->en) - pj_dalloc(P->en); - pj_dalloc(P); - } -} -ENTRY1(bonne, en) - double c; - - P->phi1 = pj_param(P->params, "rlat_1").f; - if (fabs(P->phi1) < EPS10) E_ERROR(-23); - if (P->es) { - P->en = pj_enfn(P->es); - P->m1 = pj_mlfn(P->phi1, P->am1 = sin(P->phi1), - c = cos(P->phi1), P->en); - P->am1 = c / (sqrt(1. - P->es * P->am1 * P->am1) * P->am1); - P->inv = e_inverse; - P->fwd = e_forward; - } else { - if (fabs(P->phi1) + EPS10 >= HALFPI) - P->cphi1 = 0.; - else - P->cphi1 = 1. / tan(P->phi1); - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_cass.c b/src/3rdparty/proj/PJ_cass.c deleted file mode 100644 index 4539c66b..00000000 --- a/src/3rdparty/proj/PJ_cass.c +++ /dev/null @@ -1,79 +0,0 @@ -#define PROJ_PARMS__ \ - double m0; \ - double n; \ - double t; \ - double a1; \ - double c; \ - double r; \ - double dd; \ - double d2; \ - double a2; \ - double tn; \ - double *en; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(cass, "Cassini") "\n\tCyl, Sph&Ell"; -# define EPS10 1e-10 -# define C1 .16666666666666666666 -# define C2 .00833333333333333333 -# define C3 .04166666666666666666 -# define C4 .33333333333333333333 -# define C5 .06666666666666666666 -FORWARD(e_forward); /* ellipsoid */ - xy.y = pj_mlfn(lp.phi, P->n = sin(lp.phi), P->c = cos(lp.phi), P->en); - P->n = 1./sqrt(1. - P->es * P->n * P->n); - P->tn = tan(lp.phi); P->t = P->tn * P->tn; - P->a1 = lp.lam * P->c; - P->c *= P->es * P->c / (1 - P->es); - P->a2 = P->a1 * P->a1; - xy.x = P->n * P->a1 * (1. - P->a2 * P->t * - (C1 - (8. - P->t + 8. * P->c) * P->a2 * C2)); - xy.y -= P->m0 - P->n * P->tn * P->a2 * - (.5 + (5. - P->t + 6. * P->c) * P->a2 * C3); - return (xy); -} -FORWARD(s_forward); /* spheroid */ - xy.x = asin(cos(lp.phi) * sin(lp.lam)); - xy.y = atan2(tan(lp.phi) , cos(lp.lam)) - P->phi0; - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double ph1; - - ph1 = pj_inv_mlfn(P->m0 + xy.y, P->es, P->en); - P->tn = tan(ph1); P->t = P->tn * P->tn; - P->n = sin(ph1); - P->r = 1. / (1. - P->es * P->n * P->n); - P->n = sqrt(P->r); - P->r *= (1. - P->es) * P->n; - P->dd = xy.x / P->n; - P->d2 = P->dd * P->dd; - lp.phi = ph1 - (P->n * P->tn / P->r) * P->d2 * - (.5 - (1. + 3. * P->t) * P->d2 * C3); - lp.lam = P->dd * (1. + P->t * P->d2 * - (-C4 + (1. + 3. * P->t) * P->d2 * C5)) / cos(ph1); - return (lp); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = asin(sin(P->dd = xy.y + P->phi0) * cos(xy.x)); - lp.lam = atan2(tan(xy.x), cos(P->dd)); - return (lp); -} -FREEUP; - if (P) { - if (P->en) - pj_dalloc(P->en); - pj_dalloc(P); - } -} -ENTRY1(cass, en) - if (P->es) { - if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - P->m0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); - P->inv = e_inverse; - P->fwd = e_forward; - } else { - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_cc.c b/src/3rdparty/proj/PJ_cc.c deleted file mode 100644 index be1191b6..00000000 --- a/src/3rdparty/proj/PJ_cc.c +++ /dev/null @@ -1,19 +0,0 @@ -#define PROJ_PARMS__ \ - double ap; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph"; -#define EPS10 1.e-10 -FORWARD(s_forward); /* spheroid */ - if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; - xy.x = lp.lam; - xy.y = tan(lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = atan(xy.y); - lp.lam = xy.x; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(cc) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_cea.c b/src/3rdparty/proj/PJ_cea.c deleted file mode 100644 index 97e4f3aa..00000000 --- a/src/3rdparty/proj/PJ_cea.c +++ /dev/null @@ -1,61 +0,0 @@ -#define PROJ_PARMS__ \ - double qp; \ - double *apa; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(cea, "Equal Area Cylindrical") "\n\tCyl, Sph&Ell\n\tlat_ts="; -# define EPS 1e-10 -FORWARD(e_forward); /* spheroid */ - xy.x = P->k0 * lp.lam; - xy.y = .5 * pj_qsfn(sin(lp.phi), P->e, P->one_es) / P->k0; - return (xy); -} -FORWARD(s_forward); /* spheroid */ - xy.x = P->k0 * lp.lam; - xy.y = sin(lp.phi) / P->k0; - return (xy); -} -INVERSE(e_inverse); /* spheroid */ - lp.phi = pj_authlat(asin( 2. * xy.y * P->k0 / P->qp), P->apa); - lp.lam = xy.x / P->k0; - return (lp); -} -INVERSE(s_inverse); /* spheroid */ - double t; - - if ((t = fabs(xy.y *= P->k0)) - EPS <= 1.) { - if (t >= 1.) - lp.phi = xy.y < 0. ? -HALFPI : HALFPI; - else - lp.phi = asin(xy.y); - lp.lam = xy.x / P->k0; - } else I_ERROR; - return (lp); -} -FREEUP; - if (P) { - if (P->apa) - pj_dalloc(P->apa); - pj_dalloc(P); - } -} -ENTRY1(cea, apa) - double t; - - if (pj_param(P->params, "tlat_ts").i && - (P->k0 = cos(t = pj_param(P->params, "rlat_ts").f)) < 0.) E_ERROR(-24) - else - t = 0.; - if (P->es) { - t = sin(t); - P->k0 /= sqrt(1. - P->es * t * t); - P->e = sqrt(P->es); - if (!(P->apa = pj_authset(P->es))) E_ERROR_0; - P->qp = pj_qsfn(1., P->e, P->one_es); - P->inv = e_inverse; - P->fwd = e_forward; - } else { - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_chamb.c b/src/3rdparty/proj/PJ_chamb.c deleted file mode 100644 index c17a7133..00000000 --- a/src/3rdparty/proj/PJ_chamb.c +++ /dev/null @@ -1,112 +0,0 @@ -typedef struct { double r, Az; } VECT; -#define PROJ_PARMS__ \ - struct { /* control point data */ \ - double phi, lam; \ - double cosphi, sinphi; \ - VECT v; \ - XY p; \ - double Az; \ - } c[3]; \ - XY p; \ - double beta_0, beta_1, beta_2; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv." -"\n\tlat_1= lon_1= lat_2= lon_2= lat_3= lon_3="; -#include <stdio.h> -#define THIRD 0.333333333333333333 -#define TOL 1e-9 - static VECT /* distance and azimuth from point 1 to point 2 */ -vect(double dphi, double c1, double s1, double c2, double s2, double dlam) { - VECT v; - double cdl, dp, dl; - - cdl = cos(dlam); - if (fabs(dphi) > 1. || fabs(dlam) > 1.) - v.r = aacos(s1 * s2 + c1 * c2 * cdl); - else { /* more accurate for smaller distances */ - dp = sin(.5 * dphi); - dl = sin(.5 * dlam); - v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl)); - } - if (fabs(v.r) > TOL) - v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl); - else - v.r = v.Az = 0.; - return v; -} - static double /* law of cosines */ -lc(double b,double c,double a) { - return aacos(.5 * (b * b + c * c - a * a) / (b * c)); -} -FORWARD(s_forward); /* spheroid */ - double sinphi, cosphi, a; - VECT v[3]; - int i, j; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - for (i = 0; i < 3; ++i) { /* dist/azimiths from control */ - v[i] = vect(lp.phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, - cosphi, sinphi, lp.lam - P->c[i].lam); - if ( ! v[i].r) - break; - v[i].Az = adjlon(v[i].Az - P->c[i].v.Az); - } - if (i < 3) /* current point at control point */ - xy = P->c[i].p; - else { /* point mean of intersepts */ - xy = P->p; - for (i = 0; i < 3; ++i) { - j = i == 2 ? 0 : i + 1; - a = lc(P->c[i].v.r, v[i].r, v[j].r); - if (v[i].Az < 0.) - a = -a; - if (! i) { /* coord comp unique to each arc */ - xy.x += v[i].r * cos(a); - xy.y -= v[i].r * sin(a); - } else if (i == 1) { - a = P->beta_1 - a; - xy.x -= v[i].r * cos(a); - xy.y -= v[i].r * sin(a); - } else { - a = P->beta_2 - a; - xy.x += v[i].r * cos(a); - xy.y += v[i].r * sin(a); - } - } - xy.x *= THIRD; /* mean of arc intercepts */ - xy.y *= THIRD; - } - return xy; -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(chamb) - int i, j; - char line[10]; - - for (i = 0; i < 3; ++i) { /* get control point locations */ - (void)sprintf(line, "rlat_%d", i+1); - P->c[i].phi = pj_param(P->params, line).f; - (void)sprintf(line, "rlon_%d", i+1); - P->c[i].lam = pj_param(P->params, line).f; - P->c[i].lam = adjlon(P->c[i].lam - P->lam0); - P->c[i].cosphi = cos(P->c[i].phi); - P->c[i].sinphi = sin(P->c[i].phi); - } - for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */ - j = i == 2 ? 0 : i + 1; - P->c[i].v = vect(P->c[j].phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, - P->c[j].cosphi, P->c[j].sinphi, P->c[j].lam - P->c[i].lam); - if (! P->c[i].v.r) E_ERROR(-25); - /* co-linearity problem ignored for now */ - } - P->beta_0 = lc(P->c[0].v.r, P->c[2].v.r, P->c[1].v.r); - P->beta_1 = lc(P->c[0].v.r, P->c[1].v.r, P->c[2].v.r); - P->beta_2 = PI - P->beta_0; - P->p.y = 2. * (P->c[0].p.y = P->c[1].p.y = P->c[2].v.r * sin(P->beta_0)); - P->c[2].p.y = 0.; - P->c[0].p.x = - (P->c[1].p.x = 0.5 * P->c[0].v.r); - P->p.x = P->c[2].p.x = P->c[0].p.x + P->c[2].v.r * cos(P->beta_0); - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_collg.c b/src/3rdparty/proj/PJ_collg.c deleted file mode 100644 index ca389a63..00000000 --- a/src/3rdparty/proj/PJ_collg.c +++ /dev/null @@ -1,29 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph."; -#define FXC 1.12837916709551257390 -#define FYC 1.77245385090551602729 -#define ONEEPS 1.0000001 -FORWARD(s_forward); /* spheroid */ - if ((xy.y = 1. - sin(lp.phi)) <= 0.) - xy.y = 0.; - else - xy.y = sqrt(xy.y); - xy.x = FXC * lp.lam * xy.y; - xy.y = FYC * (1. - xy.y); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / FYC - 1.; - if (fabs(lp.phi = 1. - lp.phi * lp.phi) < 1.) - lp.phi = asin(lp.phi); - else if (fabs(lp.phi) > ONEEPS) I_ERROR - else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - if ((lp.lam = 1. - sin(lp.phi)) <= 0.) - lp.lam = 0.; - else - lp.lam = xy.x / (FXC * sqrt(lp.lam)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(collg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_crast.c b/src/3rdparty/proj/PJ_crast.c deleted file mode 100644 index 5351a390..00000000 --- a/src/3rdparty/proj/PJ_crast.c +++ /dev/null @@ -1,22 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") -"\n\tPCyl., Sph."; -#define XM 0.97720502380583984317 -#define RXM 1.02332670794648848847 -#define YM 3.06998012383946546542 -#define RYM 0.32573500793527994772 -#define THIRD 0.333333333333333333 -FORWARD(s_forward); /* spheroid */ - lp.phi *= THIRD; - xy.x = XM * lp.lam * (2. * cos(lp.phi + lp.phi) - 1.); - xy.y = YM * sin(lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = 3. * asin(xy.y * RYM); - lp.lam = xy.x * RXM / (2. * cos((lp.phi + lp.phi) * THIRD) - 1); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(crast) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_denoy.c b/src/3rdparty/proj/PJ_denoy.c deleted file mode 100644 index 8b800318..00000000 --- a/src/3rdparty/proj/PJ_denoy.c +++ /dev/null @@ -1,18 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph."; -#define C0 0.95 -#define C1 -.08333333333333333333 -#define C3 .00166666666666666666 -#define D1 0.9 -#define D5 0.03 -FORWARD(s_forward); /* spheroid */ - xy.y = lp.phi; - xy.x = lp.lam; - lp.lam = fabs(lp.lam); - xy.x *= cos((C0 + lp.lam * (C1 + lp.lam * lp.lam * C3)) * - (lp.phi * (D1 + D5 * lp.phi * lp.phi * lp.phi * lp.phi))); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(denoy) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_eck1.c b/src/3rdparty/proj/PJ_eck1.c deleted file mode 100644 index 9b31b095..00000000 --- a/src/3rdparty/proj/PJ_eck1.c +++ /dev/null @@ -1,19 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl., Sph."; -#define FC .92131773192356127802 -#define RP .31830988618379067154 -FORWARD(s_forward); /* spheroid */ - xy.x = FC * lp.lam * (1. - RP * fabs(lp.phi)); - xy.y = FC * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / FC; - lp.lam = xy.x / (FC * (1. - RP * fabs(lp.phi))); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(eck1) - P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_eck2.c b/src/3rdparty/proj/PJ_eck2.c deleted file mode 100644 index f8e0154e..00000000 --- a/src/3rdparty/proj/PJ_eck2.c +++ /dev/null @@ -1,28 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl. Sph."; -#define FXC 0.46065886596178063902 -#define FYC 1.44720250911653531871 -#define C13 0.33333333333333333333 -#define ONEEPS 1.0000001 -FORWARD(s_forward); /* spheroid */ - xy.x = FXC * lp.lam * (xy.y = sqrt(4. - 3. * sin(fabs(lp.phi)))); - xy.y = FYC * (2. - xy.y); - if ( lp.phi < 0.) xy.y = -xy.y; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.lam = xy.x / (FXC * ( lp.phi = 2. - fabs(xy.y) / FYC) ); - lp.phi = (4. - lp.phi * lp.phi) * C13; - if (fabs(lp.phi) >= 1.) { - if (fabs(lp.phi) > ONEEPS) I_ERROR - else - lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - } else - lp.phi = asin(lp.phi); - if (xy.y < 0) - lp.phi = -lp.phi; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(eck2); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_eck3.c b/src/3rdparty/proj/PJ_eck3.c deleted file mode 100644 index d7755f0c..00000000 --- a/src/3rdparty/proj/PJ_eck3.c +++ /dev/null @@ -1,50 +0,0 @@ -#define PROJ_PARMS__ \ - double C_x, C_y, A, B; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph."; -PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph."; -PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph."; -PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph."; -FORWARD(s_forward); /* spheroid */ - xy.y = P->C_y * lp.phi; - xy.x = P->C_x * lp.lam * (P->A + asqrt(1. - P->B * lp.phi * lp.phi)); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / P->C_y; - lp.lam = xy.x / (P->C_x * (P->A + asqrt(1. - P->B * lp.phi * lp.phi))); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->es = 0.; - P->inv = s_inverse; - P->fwd = s_forward; - return P; -} -ENTRY0(eck3) - P->C_x = .42223820031577120149; - P->C_y = .84447640063154240298; - P->A = 1.; - P->B = 0.4052847345693510857755; -ENDENTRY(setup(P)) -ENTRY0(kav7) - P->C_x = 0.2632401569273184856851; - P->C_x = 0.8660254037844; - P->C_y = 1.; - P->A = 0.; - P->B = 0.30396355092701331433; -ENDENTRY(setup(P)) -ENTRY0(wag6); - P->C_x = P->C_y = 0.94745; - P->A = 0.; - P->B = 0.30396355092701331433; -ENDENTRY(setup(P)) -ENTRY0(putp1); - P->C_x = 1.89490; - P->C_y = 0.94745; - P->A = -0.5; - P->B = 0.30396355092701331433; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_eck4.c b/src/3rdparty/proj/PJ_eck4.c deleted file mode 100644 index 2b5c8101..00000000 --- a/src/3rdparty/proj/PJ_eck4.c +++ /dev/null @@ -1,44 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph."; -#define C_x .42223820031577120149 -#define C_y 1.32650042817700232218 -#define RC_y .75386330736002178205 -#define C_p 3.57079632679489661922 -#define RC_p .28004957675577868795 -#define EPS 1e-7 -#define NITER 6 -FORWARD(s_forward); /* spheroid */ - double p, V, s, c; - int i; - - p = C_p * sin(lp.phi); - V = lp.phi * lp.phi; - lp.phi *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 ); - for (i = NITER; i ; --i) { - c = cos(lp.phi); - s = sin(lp.phi); - lp.phi -= V = (lp.phi + s * (c + 2.) - p) / - (1. + c * (c + 2.) - s * s); - if (fabs(V) < EPS) - break; - } - if (!i) { - xy.x = C_x * lp.lam; - xy.y = lp.phi < 0. ? -C_y : C_y; - } else { - xy.x = C_x * lp.lam * (1. + cos(lp.phi)); - xy.y = C_y * sin(lp.phi); - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double c; - - lp.phi = aasin(xy.y / C_y); - lp.lam = xy.x / (C_x * (1. + (c = cos(lp.phi)))); - lp.phi = aasin((lp.phi + sin(lp.phi) * (c + 2.)) / C_p); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(eck4); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_eck5.c b/src/3rdparty/proj/PJ_eck5.c deleted file mode 100644 index 3eeb3326..00000000 --- a/src/3rdparty/proj/PJ_eck5.c +++ /dev/null @@ -1,18 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph."; -#define XF 0.44101277172455148219 -#define RXF 2.26750802723822639137 -#define YF 0.88202554344910296438 -#define RYF 1.13375401361911319568 -FORWARD(s_forward); /* spheroid */ - xy.x = XF * (1. + cos(lp.phi)) * lp.lam; - xy.y = YF * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.lam = RXF * xy.x / (1. + cos( lp.phi = RYF * xy.y)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(eck5); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_eqc.c b/src/3rdparty/proj/PJ_eqc.c deleted file mode 100644 index 533fb63e..00000000 --- a/src/3rdparty/proj/PJ_eqc.c +++ /dev/null @@ -1,23 +0,0 @@ -#define PROJ_PARMS__ \ - double rc; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") - "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]"; -FORWARD(s_forward); /* spheroid */ - xy.x = P->rc * lp.lam; - xy.y = lp.phi - P->phi0; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.lam = xy.x / P->rc; - lp.phi = xy.y + P->phi0; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(eqc) - if ((P->rc = cos(pj_param(P->params, "rlat_ts").f)) <= 0.) E_ERROR(-24); - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_eqdc.c b/src/3rdparty/proj/PJ_eqdc.c deleted file mode 100644 index eda95b0d..00000000 --- a/src/3rdparty/proj/PJ_eqdc.c +++ /dev/null @@ -1,85 +0,0 @@ -#define PROJ_PARMS__ \ - double phi1; \ - double phi2; \ - double n; \ - double rho; \ - double rho0; \ - double c; \ - double *en; \ - int ellips; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(eqdc, "Equidistant Conic") - "\n\tConic, Sph&Ell\n\tlat_1= lat_2="; -# define EPS10 1.e-10 -FORWARD(e_forward); /* sphere & ellipsoid */ - P->rho = P->c - (P->ellips ? pj_mlfn(lp.phi, sin(lp.phi), - cos(lp.phi), P->en) : lp.phi); - xy.x = P->rho * sin( lp.lam *= P->n ); - xy.y = P->rho0 - P->rho * cos(lp.lam); - return (xy); -} -INVERSE(e_inverse); /* sphere & ellipsoid */ - if ((P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) { - if (P->n < 0.) { - P->rho = -P->rho; - xy.x = -xy.x; - xy.y = -xy.y; - } - lp.phi = P->c - P->rho; - if (P->ellips) - lp.phi = pj_inv_mlfn(lp.phi, P->es, P->en); - lp.lam = atan2(xy.x, xy.y) / P->n; - } else { - lp.lam = 0.; - lp.phi = P->n > 0. ? HALFPI : - HALFPI; - } - return (lp); -} -SPECIAL(fac) { - double sinphi, cosphi; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - fac->code |= IS_ANAL_HK; - fac->h = 1.; - fac->k = P->n * (P->c - (P->ellips ? pj_mlfn(lp.phi, sinphi, - cosphi, P->en) : lp.phi)) / pj_msfn(sinphi, cosphi, P->es); -} -FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } -ENTRY1(eqdc, en) - double cosphi, sinphi; - int secant; - - P->phi1 = pj_param(P->params, "rlat_1").f; - P->phi2 = pj_param(P->params, "rlat_2").f; - if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); - if (!(P->en = pj_enfn(P->es))) - E_ERROR_0; - P->n = sinphi = sin(P->phi1); - cosphi = cos(P->phi1); - secant = fabs(P->phi1 - P->phi2) >= EPS10; - if( (P->ellips = (P->es > 0.)) ) { - double ml1, m1; - - m1 = pj_msfn(sinphi, cosphi, P->es); - ml1 = pj_mlfn(P->phi1, sinphi, cosphi, P->en); - if (secant) { /* secant cone */ - sinphi = sin(P->phi2); - cosphi = cos(P->phi2); - P->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / - (pj_mlfn(P->phi2, sinphi, cosphi, P->en) - ml1); - } - P->c = ml1 + m1 / P->n; - P->rho0 = P->c - pj_mlfn(P->phi0, sin(P->phi0), - cos(P->phi0), P->en); - } else { - if (secant) - P->n = (cosphi - cos(P->phi2)) / (P->phi2 - P->phi1); - P->c = P->phi1 + cos(P->phi1) / P->n; - P->rho0 = P->c - P->phi0; - } - P->inv = e_inverse; - P->fwd = e_forward; - P->spc = fac; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_fahey.c b/src/3rdparty/proj/PJ_fahey.c deleted file mode 100644 index 93e9b38d..00000000 --- a/src/3rdparty/proj/PJ_fahey.c +++ /dev/null @@ -1,17 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph."; -#define TOL 1e-6 -FORWARD(s_forward); /* spheroid */ - xy.y = 1.819152 * ( xy.x = tan(0.5 * lp.phi) ); - xy.x = 0.819152 * lp.lam * asqrt(1 - xy.x * xy.x); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = 2. * atan(xy.y /= 1.819152); - lp.lam = fabs(xy.y = 1. - xy.y * xy.y) < TOL ? 0. : - xy.x / (0.819152 * sqrt(xy.y)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(fahey) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_fouc_s.c b/src/3rdparty/proj/PJ_fouc_s.c deleted file mode 100644 index dee05a96..00000000 --- a/src/3rdparty/proj/PJ_fouc_s.c +++ /dev/null @@ -1,45 +0,0 @@ -#define PROJ_PARMS__ \ - double n, n1; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl., Sph."; -#define MAX_ITER 10 -#define LOOP_TOL 1e-7 -FORWARD(s_forward); /* spheroid */ - double t; - - t = cos(lp.phi); - xy.x = lp.lam * t / (P->n + P->n1 * t); - xy.y = P->n * lp.phi + P->n1 * sin(lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double V; - int i; - - if (P->n) { - lp.phi = xy.y; - for (i = MAX_ITER; i ; --i) { - lp.phi -= V = (P->n * lp.phi + P->n1 * sin(lp.phi) - xy.y ) / - (P->n + P->n1 * cos(lp.phi)); - if (fabs(V) < LOOP_TOL) - break; - } - if (!i) - lp.phi = xy.y < 0. ? -HALFPI : HALFPI; - } else - lp.phi = aasin(xy.y); - V = cos(lp.phi); - lp.lam = xy.x * (P->n + P->n1 * V) / V; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(fouc_s) - P->n = pj_param(P->params, "dn").f; - if (P->n < 0. || P->n > 1.) - E_ERROR(-99) - P->n1 = 1. - P->n; - P->es = 0; - P->inv = s_inverse; - P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_gall.c b/src/3rdparty/proj/PJ_gall.c deleted file mode 100644 index 3c507bd0..00000000 --- a/src/3rdparty/proj/PJ_gall.c +++ /dev/null @@ -1,19 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(gall, "Gall (Gall Stereographic)") "\n\tCyl, Sph"; -#define YF 1.70710678118654752440 -#define XF 0.70710678118654752440 -#define RYF 0.58578643762690495119 -#define RXF 1.41421356237309504880 -FORWARD(s_forward); /* spheroid */ - xy.x = XF * lp.lam; - xy.y = YF * tan(.5 * lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.lam = RXF * xy.x; - lp.phi = 2. * atan(xy.y * RYF); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(gall) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_geos.c b/src/3rdparty/proj/PJ_geos.c deleted file mode 100644 index db9dd7e5..00000000 --- a/src/3rdparty/proj/PJ_geos.c +++ /dev/null @@ -1,142 +0,0 @@ -/* -** libproj -- library of cartographic projections -** -** Copyright (c) 2004 Gerald I. Evenden -*/ -static const char -LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $"; -/* -** See also (section 4.4.3.2): -** http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf -** -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#define PROJ_PARMS__ \ - double h; \ - double radius_p; \ - double radius_p2; \ - double radius_p_inv2; \ - double radius_g; \ - double radius_g_1; \ - double C; -#define PJ_LIB__ -#include <projects.h> - -PROJ_HEAD(geos, "Geostationary Satellite View") "\n\tAzi, Sph&Ell\n\th="; - -FORWARD(s_forward); /* spheroid */ - double Vx, Vy, Vz, tmp; - -/* Calculation of the three components of the vector from satellite to -** position on earth surface (lon,lat).*/ - tmp = cos(lp.phi); - Vx = cos (lp.lam) * tmp; - Vy = sin (lp.lam) * tmp; - Vz = sin (lp.phi); -/* Check visibility.*/ - if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) F_ERROR; -/* Calculation based on view angles from satellite.*/ - tmp = P->radius_g - Vx; - xy.x = P->radius_g_1 * atan(Vy / tmp); - xy.y = P->radius_g_1 * atan(Vz / hypot(Vy, tmp)); - return (xy); -} -FORWARD(e_forward); /* ellipsoid */ - double r, Vx, Vy, Vz, tmp; - -/* Calculation of geocentric latitude. */ - lp.phi = atan (P->radius_p2 * tan (lp.phi)); -/* Calculation of the three components of the vector from satellite to -** position on earth surface (lon,lat).*/ - r = (P->radius_p) / hypot(P->radius_p * cos (lp.phi), sin (lp.phi)); - Vx = r * cos (lp.lam) * cos (lp.phi); - Vy = r * sin (lp.lam) * cos (lp.phi); - Vz = r * sin (lp.phi); -/* Check visibility. */ - if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * P->radius_p_inv2) < 0.) - F_ERROR; -/* Calculation based on view angles from satellite. */ - tmp = P->radius_g - Vx; - xy.x = P->radius_g_1 * atan (Vy / tmp); - xy.y = P->radius_g_1 * atan (Vz / hypot (Vy, tmp)); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double Vx, Vy, Vz, a, b, c, det, k; - -/* Setting three components of vector from satellite to position.*/ - Vx = -1.0; - Vy = tan (xy.x / (P->radius_g - 1.0)); - Vz = tan (xy.y / (P->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy); -/* Calculation of terms in cubic equation and determinant.*/ - a = Vy * Vy + Vz * Vz + Vx * Vx; - b = 2 * P->radius_g * Vx; - if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR; -/* Calculation of three components of vector from satellite to position.*/ - k = (-b - sqrt(det)) / (2 * a); - Vx = P->radius_g + k * Vx; - Vy *= k; - Vz *= k; -/* Calculation of longitude and latitude.*/ - lp.lam = atan2 (Vy, Vx); - lp.phi = atan (Vz * cos (lp.lam) / Vx); - return (lp); -} -INVERSE(e_inverse); /* ellipsoid */ - double Vx, Vy, Vz, a, b, c, det, k; - -/* Setting three components of vector from satellite to position.*/ - Vx = -1.0; - Vy = tan (xy.x / P->radius_g_1); - Vz = tan (xy.y / P->radius_g_1) * hypot(1.0, Vy); -/* Calculation of terms in cubic equation and determinant.*/ - a = Vz / P->radius_p; - a = Vy * Vy + a * a + Vx * Vx; - b = 2 * P->radius_g * Vx; - if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR; -/* Calculation of three components of vector from satellite to position.*/ - k = (-b - sqrt(det)) / (2. * a); - Vx = P->radius_g + k * Vx; - Vy *= k; - Vz *= k; -/* Calculation of longitude and latitude.*/ - lp.lam = atan2 (Vy, Vx); - lp.phi = atan (Vz * cos (lp.lam) / Vx); - lp.phi = atan (P->radius_p_inv2 * tan (lp.phi)); - return (lp); -} -FREEUP; if (P) free(P); } -ENTRY0(geos) - if ((P->h = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); - if (P->phi0) E_ERROR(-46); - P->radius_g = 1. + (P->radius_g_1 = P->h / P->a); - P->C = P->radius_g * P->radius_g - 1.0; - if (P->es) { - P->radius_p = sqrt (P->one_es); - P->radius_p2 = P->one_es; - P->radius_p_inv2 = P->rone_es; - P->inv = e_inverse; - P->fwd = e_forward; - } else { - P->radius_p = P->radius_p2 = P->radius_p_inv2 = 1.0; - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_gins8.c b/src/3rdparty/proj/PJ_gins8.c deleted file mode 100644 index 0747d761..00000000 --- a/src/3rdparty/proj/PJ_gins8.c +++ /dev/null @@ -1,17 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph., no inv."; -#define Cl 0.000952426 -#define Cp 0.162388 -#define C12 0.08333333333333333 -FORWARD(s_forward); /* spheroid */ - double t = lp.phi * lp.phi; - - xy.y = lp.phi * (1. + t * C12); - xy.x = lp.lam * (1. - Cp * t); - t = lp.lam * lp.lam; - xy.x *= (0.87 - Cl * t * t); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(gins8) P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_gn_sinu.c b/src/3rdparty/proj/PJ_gn_sinu.c deleted file mode 100644 index 3bf9854f..00000000 --- a/src/3rdparty/proj/PJ_gn_sinu.c +++ /dev/null @@ -1,100 +0,0 @@ -#define PROJ_PARMS__ \ - double *en; \ - double m, n, C_x, C_y; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph.\n\tm= n="; -PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") "\n\tPCyl, Sph&Ell"; -PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph."; -PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph."; -#define EPS10 1e-10 -#define MAX_ITER 8 -#define LOOP_TOL 1e-7 -/* Ellipsoidal Sinusoidal only */ -FORWARD(e_forward); /* ellipsoid */ - double s, c; - - xy.y = pj_mlfn(lp.phi, s = sin(lp.phi), c = cos(lp.phi), P->en); - xy.x = lp.lam * c / sqrt(1. - P->es * s * s); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double s; - - if ((s = fabs(lp.phi = pj_inv_mlfn(xy.y, P->es, P->en))) < HALFPI) { - s = sin(lp.phi); - lp.lam = xy.x * sqrt(1. - P->es * s * s) / cos(lp.phi); - } else if ((s - EPS10) < HALFPI) - lp.lam = 0.; - else I_ERROR; - return (lp); -} -/* General spherical sinusoidals */ -FORWARD(s_forward); /* sphere */ - if (!P->m) - lp.phi = P->n != 1. ? aasin(P->n * sin(lp.phi)): lp.phi; - else { - double k, V; - int i; - - k = P->n * sin(lp.phi); - for (i = MAX_ITER; i ; --i) { - lp.phi -= V = (P->m * lp.phi + sin(lp.phi) - k) / - (P->m + cos(lp.phi)); - if (fabs(V) < LOOP_TOL) - break; - } - if (!i) - F_ERROR - } - xy.x = P->C_x * lp.lam * (P->m + cos(lp.phi)); - xy.y = P->C_y * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* sphere */ - double s; - - xy.y /= P->C_y; - lp.phi = P->m ? aasin((P->m * xy.y + sin(xy.y)) / P->n) : - ( P->n != 1. ? aasin(sin(xy.y) / P->n) : xy.y ); - lp.lam = xy.x / (P->C_x * (P->m + cos(xy.y))); - return (lp); -} -FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } - static void /* for spheres, only */ -setup(PJ *P) { - P->es = 0; - P->C_x = (P->C_y = sqrt((P->m + 1.) / P->n))/(P->m + 1.); - P->inv = s_inverse; - P->fwd = s_forward; -} -ENTRY1(sinu, en) - if (!(P->en = pj_enfn(P->es))) - E_ERROR_0; - if (P->es) { - P->inv = e_inverse; - P->fwd = e_forward; - } else { - P->n = 1.; - P->m = 0.; - setup(P); - } -ENDENTRY(P) -ENTRY1(eck6, en) - P->m = 1.; - P->n = 2.570796326794896619231321691; - setup(P); -ENDENTRY(P) -ENTRY1(mbtfps, en) - P->m = 0.5; - P->n = 1.785398163397448309615660845; - setup(P); -ENDENTRY(P) -ENTRY1(gn_sinu, en) - if (pj_param(P->params, "tn").i && pj_param(P->params, "tm").i) { - P->n = pj_param(P->params, "dn").f; - P->m = pj_param(P->params, "dm").f; - } else - E_ERROR(-99) - setup(P); -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_gnom.c b/src/3rdparty/proj/PJ_gnom.c deleted file mode 100644 index 11deb86c..00000000 --- a/src/3rdparty/proj/PJ_gnom.c +++ /dev/null @@ -1,105 +0,0 @@ -#define PROJ_PARMS__ \ - double sinph0; \ - double cosph0; \ - int mode; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph."; -#define EPS10 1.e-10 -#define N_POLE 0 -#define S_POLE 1 -#define EQUIT 2 -#define OBLIQ 3 -FORWARD(s_forward); /* spheroid */ - double coslam, cosphi, sinphi; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - switch (P->mode) { - case EQUIT: - xy.y = cosphi * coslam; - break; - case OBLIQ: - xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; - break; - case S_POLE: - xy.y = - sinphi; - break; - case N_POLE: - xy.y = sinphi; - break; - } - if (xy.y <= EPS10) F_ERROR; - xy.x = (xy.y = 1. / xy.y) * cosphi * sin(lp.lam); - switch (P->mode) { - case EQUIT: - xy.y *= sinphi; - break; - case OBLIQ: - xy.y *= P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; - break; - case N_POLE: - coslam = - coslam; - case S_POLE: - xy.y *= cosphi * coslam; - break; - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double rh, cosz, sinz; - - rh = hypot(xy.x, xy.y); - sinz = sin(lp.phi = atan(rh)); - cosz = sqrt(1. - sinz * sinz); - if (fabs(rh) <= EPS10) { - lp.phi = P->phi0; - lp.lam = 0.; - } else { - switch (P->mode) { - case OBLIQ: - lp.phi = cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh; - if (fabs(lp.phi) >= 1.) - lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; - else - lp.phi = asin(lp.phi); - xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh; - xy.x *= sinz * P->cosph0; - break; - case EQUIT: - lp.phi = xy.y * sinz / rh; - if (fabs(lp.phi) >= 1.) - lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; - else - lp.phi = asin(lp.phi); - xy.y = cosz * rh; - xy.x *= sinz; - break; - case S_POLE: - lp.phi -= HALFPI; - break; - case N_POLE: - lp.phi = HALFPI - lp.phi; - xy.y = -xy.y; - break; - } - lp.lam = atan2(xy.x, xy.y); - } - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(gnom) - if (fabs(fabs(P->phi0) - HALFPI) < EPS10) - P->mode = P->phi0 < 0. ? S_POLE : N_POLE; - else if (fabs(P->phi0) < EPS10) - P->mode = EQUIT; - else { - P->mode = OBLIQ; - P->sinph0 = sin(P->phi0); - P->cosph0 = cos(P->phi0); - } - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_goode.c b/src/3rdparty/proj/PJ_goode.c deleted file mode 100644 index ed8ded8b..00000000 --- a/src/3rdparty/proj/PJ_goode.c +++ /dev/null @@ -1,46 +0,0 @@ -#define PROJ_PARMS__ \ - struct PJconsts *sinu; \ - struct PJconsts *moll; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph."; - C_NAMESPACE PJ -*pj_sinu(PJ *), *pj_moll(PJ *); -#define Y_COR 0.05280 -#define PHI_LIM .71093078197902358062 -FORWARD(s_forward); /* spheroid */ - if (fabs(lp.phi) <= PHI_LIM) - xy = P->sinu->fwd(lp, P->sinu); - else { - xy = P->moll->fwd(lp, P->moll); - xy.y -= lp.phi >= 0.0 ? Y_COR : -Y_COR; - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - if (fabs(xy.y) <= PHI_LIM) - lp = P->sinu->inv(xy, P->sinu); - else { - xy.y += xy.y >= 0.0 ? Y_COR : -Y_COR; - lp = P->moll->inv(xy, P->moll); - } - return (lp); -} -FREEUP; - if (P) { - if (P->sinu) - (*(P->sinu->pfree))(P->sinu); - if (P->moll) - (*(P->moll->pfree))(P->moll); - pj_dalloc(P); - } -} -ENTRY2(goode, sinu, moll) - P->es = 0.; - if (!(P->sinu = pj_sinu(0)) || !(P->moll = pj_moll(0))) - E_ERROR_0; - if (!(P->sinu = pj_sinu(P->sinu)) || !(P->moll = pj_moll(P->moll))) - E_ERROR_0; - P->fwd = s_forward; - P->inv = s_inverse; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_gstmerc.c b/src/3rdparty/proj/PJ_gstmerc.c deleted file mode 100644 index 23b86ee8..00000000 --- a/src/3rdparty/proj/PJ_gstmerc.c +++ /dev/null @@ -1,48 +0,0 @@ -#define PROJ_PARMS__ \ - double lamc;\ - double phic;\ - double c;\ - double n1;\ - double n2;\ - double XS;\ - double YS; - -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") - "\n\tCyl, Sph&Ell\n\tlat_0= lon_0= k_0="; -FORWARD(s_forward); /* spheroid */ - double L, Ls, sinLs1, Ls1; - L= P->n1*lp.lam; - Ls= P->c+P->n1*log(pj_tsfn(-1.0*lp.phi,-1.0*sin(lp.phi),P->e)); - sinLs1= sin(L)/cosh(Ls); - Ls1= log(pj_tsfn(-1.0*asin(sinLs1),0.0,0.0)); - xy.x= (P->XS + P->n2*Ls1)*P->ra; - xy.y= (P->YS + P->n2*atan(sinh(Ls)/cos(L)))*P->ra; - /*fprintf(stderr,"fwd:\nL =%16.13f\nLs =%16.13f\nLs1 =%16.13f\nLP(%16.13f,%16.13f)=XY(%16.4f,%16.4f)\n",L,Ls,Ls1,lp.lam+P->lam0,lp.phi,(xy.x*P->a + P->x0)*P->to_meter,(xy.y*P->a + P->y0)*P->to_meter);*/ - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double L, LC, sinC; - L= atan(sinh((xy.x*P->a - P->XS)/P->n2)/cos((xy.y*P->a - P->YS)/P->n2)); - sinC= sin((xy.y*P->a - P->YS)/P->n2)/cosh((xy.x*P->a - P->XS)/P->n2); - LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0)); - lp.lam= L/P->n1; - lp.phi= -1.0*pj_phi2(exp((LC-P->c)/P->n1),P->e); - /*fprintf(stderr,"inv:\nL =%16.13f\nsinC =%16.13f\nLC =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy.x/P->ra)+P->x0)/P->to_meter,((xy.y/P->ra)+P->y0)/P->to_meter,lp.lam+P->lam0,lp.phi);*/ - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(gstmerc) - P->lamc= P->lam0; - P->n1= sqrt(1.0+P->es*pow(cos(P->phi0),4.0)/(1.0-P->es)); - P->phic= asin(sin(P->phi0)/P->n1); - P->c= log(pj_tsfn(-1.0*P->phic,0.0,0.0)) - -P->n1*log(pj_tsfn(-1.0*P->phi0,-1.0*sin(P->phi0),P->e)); - P->n2= P->k0*P->a*sqrt(1.0-P->es)/(1.0-P->es*sin(P->phi0)*sin(P->phi0)); - P->XS= 0;/* -P->x0 */ - P->YS= -1.0*P->n2*P->phic;/* -P->y0 */ - P->inv= s_inverse; - P->fwd= s_forward; - /*fprintf(stderr,"a (m) =%16.4f\ne =%16.13f\nl0(rad)=%16.13f\np0(rad)=%16.13f\nk0 =%16.4f\nX0 (m)=%16.4f\nY0 (m)=%16.4f\n\nlC(rad)=%16.13f\npC(rad)=%16.13f\nc =%16.13f\nn1 =%16.13f\nn2 (m) =%16.4f\nXS (m) =%16.4f\nYS (m) =%16.4f\n", P->a, P->e, P->lam0, P->phi0, P->k0, P->x0, P->y0, P->lamc, P->phic, P->c, P->n1, P->n2, P->XS +P->x0, P->YS + P->y0);*/ -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_hammer.c b/src/3rdparty/proj/PJ_hammer.c deleted file mode 100644 index a2ba02aa..00000000 --- a/src/3rdparty/proj/PJ_hammer.c +++ /dev/null @@ -1,29 +0,0 @@ -#define PROJ_PARMS__ \ - double w; \ - double m, rm; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") - "\n\tMisc Sph, no inv.\n\tW= M="; -FORWARD(s_forward); /* spheroid */ - double cosphi, d; - - d = sqrt(2./(1. + (cosphi = cos(lp.phi)) * cos(lp.lam *= P->w))); - xy.x = P->m * d * cosphi * sin(lp.lam); - xy.y = P->rm * d * sin(lp.phi); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(hammer) - if (pj_param(P->params, "tW").i) { - if ((P->w = fabs(pj_param(P->params, "dW").f)) <= 0.) E_ERROR(-27); - } else - P->w = .5; - if (pj_param(P->params, "tM").i) { - if ((P->m = fabs(pj_param(P->params, "dM").f)) <= 0.) E_ERROR(-27); - } else - P->m = 1.; - P->rm = 1. / P->m; - P->m /= P->w; - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_hatano.c b/src/3rdparty/proj/PJ_hatano.c deleted file mode 100644 index 8e0ff5ce..00000000 --- a/src/3rdparty/proj/PJ_hatano.c +++ /dev/null @@ -1,50 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph."; -#define NITER 20 -#define EPS 1e-7 -#define ONETOL 1.000001 -#define CN 2.67595 -#define CS 2.43763 -#define RCN 0.37369906014686373063 -#define RCS 0.41023453108141924738 -#define FYCN 1.75859 -#define FYCS 1.93052 -#define RYCN 0.56863737426006061674 -#define RYCS 0.51799515156538134803 -#define FXC 0.85 -#define RXC 1.17647058823529411764 -FORWARD(s_forward); /* spheroid */ - double th1, c; - int i; - - c = sin(lp.phi) * (lp.phi < 0. ? CS : CN); - for (i = NITER; i; --i) { - lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi)); - if (fabs(th1) < EPS) break; - } - xy.x = FXC * lp.lam * cos(lp.phi *= .5); - xy.y = sin(lp.phi) * (lp.phi < 0. ? FYCS : FYCN); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double th; - - th = xy.y * ( xy.y < 0. ? RYCS : RYCN); - if (fabs(th) > 1.) - if (fabs(th) > ONETOL) I_ERROR - else th = th > 0. ? HALFPI : - HALFPI; - else - th = asin(th); - lp.lam = RXC * xy.x / cos(th); - th += th; - lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN); - if (fabs(lp.phi) > 1.) - if (fabs(lp.phi) > ONETOL) I_ERROR - else lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; - else - lp.phi = asin(lp.phi); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(hatano) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_imw_p.c b/src/3rdparty/proj/PJ_imw_p.c deleted file mode 100644 index 135b3dab..00000000 --- a/src/3rdparty/proj/PJ_imw_p.c +++ /dev/null @@ -1,151 +0,0 @@ -#define PROJ_PARMS__ \ - double P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2; \ - double phi_1, phi_2, lam_1; \ - double *en; \ - int mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(imw_p, "International Map of the World Polyconic") - "\n\tMod. Polyconic, Ell\n\tlat_1= and lat_2= [lon_1=]"; -#define TOL 1e-10 -#define EPS 1e-10 - static int -phi12(PJ *P, double *del, double *sig) { - int err = 0; - - if (!pj_param(P->params, "tlat_1").i || - !pj_param(P->params, "tlat_2").i) { - err = -41; - } else { - P->phi_1 = pj_param(P->params, "rlat_1").f; - P->phi_2 = pj_param(P->params, "rlat_2").f; - *del = 0.5 * (P->phi_2 - P->phi_1); - *sig = 0.5 * (P->phi_2 + P->phi_1); - err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0; - } - return err; -} - static XY -loc_for(LP lp, PJ *P, double *yc) { - XY xy; - - if (! lp.phi) { - xy.x = lp.lam; - xy.y = 0.; - } else { - double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C; - - sp = sin(lp.phi); - m = pj_mlfn(lp.phi, sp, cos(lp.phi), P->en); - xa = P->Pp + P->Qp * m; - ya = P->P + P->Q * m; - R = 1. / (tan(lp.phi) * sqrt(1. - P->es * sp * sp)); - C = sqrt(R * R - xa * xa); - if (lp.phi < 0.) C = - C; - C += ya - R; - if (P->mode < 0) { - xb = lp.lam; - yb = P->C2; - } else { - t = lp.lam * P->sphi_2; - xb = P->R_2 * sin(t); - yb = P->C2 + P->R_2 * (1. - cos(t)); - } - if (P->mode > 0) { - xc = lp.lam; - *yc = 0.; - } else { - t = lp.lam * P->sphi_1; - xc = P->R_1 * sin(t); - *yc = P->R_1 * (1. - cos(t)); - } - D = (xb - xc)/(yb - *yc); - B = xc + D * (C + R - *yc); - xy.x = D * sqrt(R * R * (1 + D * D) - B * B); - if (lp.phi > 0) - xy.x = - xy.x; - xy.x = (B + xy.x) / (1. + D * D); - xy.y = sqrt(R * R - xy.x * xy.x); - if (lp.phi > 0) - xy.y = - xy.y; - xy.y += C + R; - } - return (xy); -} -FORWARD(e_forward); /* ellipsoid */ - double yc; - xy = loc_for(lp, P, &yc); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - XY t; - double yc; - - lp.phi = P->phi_2; - lp.lam = xy.x / cos(lp.phi); - do { - t = loc_for(lp, P, &yc); - lp.phi = ((lp.phi - P->phi_1) * (xy.y - yc) / (t.y - yc)) + P->phi_1; - lp.lam = lp.lam * xy.x / t.x; - } while (fabs(t.x - xy.x) > TOL || fabs(t.y - xy.y) > TOL); - return (lp); -} - static void -xy(PJ *P, double phi, double *x, double *y, double *sp, double *R) { - double F; - - *sp = sin(phi); - *R = 1./(tan(phi) * sqrt(1. - P->es * *sp * *sp )); - F = P->lam_1 * *sp; - *y = *R * (1 - cos(F)); - *x = *R * sin(F); -} -FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } -ENTRY1(imw_p, en) - double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2; - int i; - - if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - if( (i = phi12(P, &del, &sig)) != 0) - E_ERROR(i); - if (P->phi_2 < P->phi_1) { /* make sure P->phi_1 most southerly */ - del = P->phi_1; - P->phi_1 = P->phi_2; - P->phi_2 = del; - } - if (pj_param(P->params, "tlon_1").i) - P->lam_1 = pj_param(P->params, "rlon_1").f; - else { /* use predefined based upon latitude */ - sig = fabs(sig * RAD_TO_DEG); - if (sig <= 60) sig = 2.; - else if (sig <= 76) sig = 4.; - else sig = 8.; - P->lam_1 = sig * DEG_TO_RAD; - } - P->mode = 0; - if (P->phi_1) xy(P, P->phi_1, &x1, &y1, &P->sphi_1, &P->R_1); - else { - P->mode = 1; - y1 = 0.; - x1 = P->lam_1; - } - if (P->phi_2) xy(P, P->phi_2, &x2, &T2, &P->sphi_2, &P->R_2); - else { - P->mode = -1; - T2 = 0.; - x2 = P->lam_1; - } - m1 = pj_mlfn(P->phi_1, P->sphi_1, cos(P->phi_1), P->en); - m2 = pj_mlfn(P->phi_2, P->sphi_2, cos(P->phi_2), P->en); - t = m2 - m1; - s = x2 - x1; - y2 = sqrt(t * t - s * s) + y1; - P->C2 = y2 - T2; - t = 1. / t; - P->P = (m2 * y1 - m1 * y2) * t; - P->Q = (y2 - y1) * t; - P->Pp = (m2 * x1 - m1 * x2) * t; - P->Qp = (x2 - x1) * t; - P->fwd = e_forward; - P->inv = e_inverse; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_krovak.c b/src/3rdparty/proj/PJ_krovak.c deleted file mode 100644 index 53e50994..00000000 --- a/src/3rdparty/proj/PJ_krovak.c +++ /dev/null @@ -1,253 +0,0 @@ -/****************************************************************************** - * $Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Implementation of the krovak (Krovak) projection. - * Definition: http://www.ihsenergy.com/epsg/guid7.html#1.4.3 - * Author: Thomas Flemming, tf@ttqv.com - * - ****************************************************************************** - * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - *****************************************************************************/ - -#define PROJ_PARMS__ \ - double C_x; -#define PJ_LIB__ - -#include <projects.h> -#include <string.h> -#include <stdio.h> - -PJ_CVSID("$Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; - -/** - NOTES: According to EPSG the full Krovak projection method should have - the following parameters. Within PROJ.4 the azimuth, and pseudo - standard parallel are hardcoded in the algorithm and can't be - altered from outside. The others all have defaults to match the - common usage with Krovak projection. - - lat_0 = latitude of centre of the projection - - lon_0 = longitude of centre of the projection - - ** = azimuth (true) of the centre line passing through the centre of the projection - - ** = latitude of pseudo standard parallel - - k = scale factor on the pseudo standard parallel - - x_0 = False Easting of the centre of the projection at the apex of the cone - - y_0 = False Northing of the centre of the projection at the apex of the cone - - **/ - - - -FORWARD(e_forward); /* ellipsoid */ -/* calculate xy from lat/lon */ - - char errmess[255]; - char tmp[16]; - -/* Constants, identical to inverse transform function */ - double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; - double gfi, u, fi0, lon17, lamdd, deltav, s, d, eps, ro; - - - s45 = 0.785398163397448; /* 45° */ - s90 = 2 * s45; - fi0 = P->phi0; /* Latitude of projection centre 49° 30' */ - - /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must - be set to 1 here. - Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, - e2=0.006674372230614; - */ - a = 1; /* 6377397.155; */ - /* e2 = P->es;*/ /* 0.006674372230614; */ - e2 = 0.006674372230614; - e = sqrt(e2); - - alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2)); - - uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ - u0 = asin(sin(fi0) / alfa); - g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. ); - - k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g; - - k1 = P->k0; - n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2)); - s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */ - n = sin(s0); - ro0 = k1 * n0 / tan(s0); - ad = s90 - uq; - -/* Transformation */ - - gfi =pow ( ((1. + e * sin(lp.phi)) / - (1. - e * sin(lp.phi))) , (alfa * e / 2.)); - - u= 2. * (atan(k * pow( tan(lp.phi / 2. + s45), alfa) / gfi)-s45); - - deltav = - lp.lam * alfa; - - s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav)); - d = asin(cos(u) * sin(deltav) / cos(s)); - eps = n * d; - ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n) ; - - /* x and y are reverted! */ - xy.y = ro * cos(eps) / a; - xy.x = ro * sin(eps) / a; - - if( !pj_param(P -> params, "tczech").i ) - { - xy.y *= -1.0; - xy.x *= -1.0; - } - - return (xy); -} - - - -INVERSE(e_inverse); /* ellipsoid */ - /* calculate lat/lon from xy */ - -/* Constants, identisch wie in der Umkehrfunktion */ - double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; - double u, l24, lamdd, deltav, s, d, eps, ro, fi1, xy0, lon17; - int ok; - - s45 = 0.785398163397448; /* 45° */ - s90 = 2 * s45; - fi0 = P->phi0; /* Latitude of projection centre 49° 30' */ - - - /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must - be set to 1 here. - Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, - e2=0.006674372230614; - */ - a = 1; /* 6377397.155; */ - /* e2 = P->es; */ /* 0.006674372230614; */ - e2 = 0.006674372230614; - e = sqrt(e2); - - alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2)); - uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ - u0 = asin(sin(fi0) / alfa); - g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. ); - - k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g; - - k1 = P->k0; - n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2)); - s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */ - n = sin(s0); - ro0 = k1 * n0 / tan(s0); - ad = s90 - uq; - - -/* Transformation */ - /* revert y, x*/ - xy0=xy.x; - xy.x=xy.y; - xy.y=xy0; - - if( !pj_param(P -> params, "tczech").i ) - { - xy.x *= -1.0; - xy.y *= -1.0; - } - - ro = sqrt(xy.x * xy.x + xy.y * xy.y); - eps = atan2(xy.y, xy.x); - d = eps / sin(s0); - s = 2. * (atan( pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45); - - u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d)); - deltav = asin(cos(s) * sin(d) / cos(u)); - - lp.lam = P->lam0 - deltav / alfa; - -/* ITERATION FOR lp.phi */ - fi1 = u; - - ok = 0; - do - { - lp.phi = 2. * ( atan( pow( k, -1. / alfa) * - pow( tan(u / 2. + s45) , 1. / alfa) * - pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.) - ) - s45); - - if (fabs(fi1 - lp.phi) < 0.000000000000001) ok=1; - fi1 = lp.phi; - - } - while (ok==0); - - lp.lam -= P->lam0; - - return (lp); -} - -FREEUP; if (P) pj_dalloc(P); } - -ENTRY0(krovak) - double ts; - /* read some Parameters, - * here Latitude Truescale */ - - ts = pj_param(P->params, "rlat_ts").f; - P->C_x = ts; - - /* we want Bessel as fixed ellipsoid */ - P->a = 6377397.155; - P->e = sqrt(P->es = 0.006674372230614); - - /* if latitude of projection center is not set, use 49d30'N */ - if (!pj_param(P->params, "tlat_0").i) - P->phi0 = 0.863937979737193; - - /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */ - /* that will correspond to using longitudes relative to greenwich */ - /* as input and output, instead of lat/long relative to Ferro */ - if (!pj_param(P->params, "tlon_0").i) - P->lam0 = 0.7417649320975901 - 0.308341501185665; - - /* if scale not set default to 0.9999 */ - if (!pj_param(P->params, "tk").i) - P->k0 = 0.9999; - - /* always the same */ - P->inv = e_inverse; - P->fwd = e_forward; - -ENDENTRY(P) - diff --git a/src/3rdparty/proj/PJ_labrd.c b/src/3rdparty/proj/PJ_labrd.c deleted file mode 100644 index 70cd2f42..00000000 --- a/src/3rdparty/proj/PJ_labrd.c +++ /dev/null @@ -1,109 +0,0 @@ -#define PROJ_PARMS__ \ - double Az, kRg, p0s, A, C, Ca, Cb, Cc, Cd; \ - int rot; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(labrd, "Laborde") "\n\tCyl, Sph\n\tSpecial for Madagascar"; -#define EPS 1.e-10 -FORWARD(e_forward); - double V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6, - x2, y2, t; - - V1 = P->A * log( tan(FORTPI + .5 * lp.phi) ); - t = P->e * sin(lp.phi); - V2 = .5 * P->e * P->A * log ((1. + t)/(1. - t)); - ps = 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI); - I1 = ps - P->p0s; - cosps = cos(ps); cosps2 = cosps * cosps; - sinps = sin(ps); sinps2 = sinps * sinps; - I4 = P->A * cosps; - I2 = .5 * P->A * I4 * sinps; - I3 = I2 * P->A * P->A * (5. * cosps2 - sinps2) / 12.; - I6 = I4 * P->A * P->A; - I5 = I6 * (cosps2 - sinps2) / 6.; - I6 *= P->A * P->A * - (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.; - t = lp.lam * lp.lam; - xy.x = P->kRg * lp.lam * (I4 + t * (I5 + t * I6)); - xy.y = P->kRg * (I1 + t * (I2 + t * I3)); - x2 = xy.x * xy.x; - y2 = xy.y * xy.y; - V1 = 3. * xy.x * y2 - xy.x * x2; - V2 = xy.y * y2 - 3. * x2 * xy.y; - xy.x += P->Ca * V1 + P->Cb * V2; - xy.y += P->Ca * V2 - P->Cb * V1; - return (xy); -} -INVERSE(e_inverse); /* ellipsoid & spheroid */ - double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s, - I7, I8, I9, I10, I11, d, Re; - int i; - - x2 = xy.x * xy.x; - y2 = xy.y * xy.y; - V1 = 3. * xy.x * y2 - xy.x * x2; - V2 = xy.y * y2 - 3. * x2 * xy.y; - V3 = xy.x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 )); - V4 = xy.y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 )); - xy.x += - P->Ca * V1 - P->Cb * V2 + P->Cc * V3 + P->Cd * V4; - xy.y += P->Cb * V1 - P->Ca * V2 - P->Cd * V3 + P->Cc * V4; - ps = P->p0s + xy.y / P->kRg; - pe = ps + P->phi0 - P->p0s; - for ( i = 20; i; --i) { - V1 = P->A * log(tan(FORTPI + .5 * pe)); - tpe = P->e * sin(pe); - V2 = .5 * P->e * P->A * log((1. + tpe)/(1. - tpe)); - t = ps - 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI); - pe += t; - if (fabs(t) < EPS) - break; - } -/* - if (!i) { - } else { - } -*/ - t = P->e * sin(pe); - t = 1. - t * t; - Re = P->one_es / ( t * sqrt(t) ); - t = tan(ps); - t2 = t * t; - s = P->kRg * P->kRg; - d = Re * P->k0 * P->kRg; - I7 = t / (2. * d); - I8 = t * (5. + 3. * t2) / (24. * d * s); - d = cos(ps) * P->kRg * P->A; - I9 = 1. / d; - d *= s; - I10 = (1. + 2. * t2) / (6. * d); - I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s); - x2 = xy.x * xy.x; - lp.phi = pe + x2 * (-I7 + I8 * x2); - lp.lam = xy.x * (I9 + x2 * (-I10 + x2 * I11)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(labrd) - double Az, sinp, R, N, t; - - P->rot = pj_param(P->params, "bno_rot").i == 0; - Az = pj_param(P->params, "razi").f; - sinp = sin(P->phi0); - t = 1. - P->es * sinp * sinp; - N = 1. / sqrt(t); - R = P->one_es * N / t; - P->kRg = P->k0 * sqrt( N * R ); - P->p0s = atan( sqrt(R / N) * tan(P->phi0) ); - P->A = sinp / sin(P->p0s); - t = P->e * sinp; - P->C = .5 * P->e * P->A * log((1. + t)/(1. - t)) + - - P->A * log( tan(FORTPI + .5 * P->phi0)) - + log( tan(FORTPI + .5 * P->p0s)); - t = Az + Az; - P->Ca = (1. - cos(t)) * ( P->Cb = 1. / (12. * P->kRg * P->kRg) ); - P->Cb *= sin(t); - P->Cc = 3. * (P->Ca * P->Ca - P->Cb * P->Cb); - P->Cd = 6. * P->Ca * P->Cb; - P->inv = e_inverse; - P->fwd = e_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_laea.c b/src/3rdparty/proj/PJ_laea.c deleted file mode 100644 index d32bb0be..00000000 --- a/src/3rdparty/proj/PJ_laea.c +++ /dev/null @@ -1,233 +0,0 @@ -#define PROJ_PARMS__ \ - double sinb1; \ - double cosb1; \ - double xmf; \ - double ymf; \ - double mmf; \ - double qp; \ - double dd; \ - double rq; \ - double *apa; \ - int mode; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") "\n\tAzi, Sph&Ell"; -#define sinph0 P->sinb1 -#define cosph0 P->cosb1 -#define EPS10 1.e-10 -#define NITER 20 -#define CONV 1.e-10 -#define N_POLE 0 -#define S_POLE 1 -#define EQUIT 2 -#define OBLIQ 3 -FORWARD(e_forward); /* ellipsoid */ - double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0; - - coslam = cos(lp.lam); - sinlam = sin(lp.lam); - sinphi = sin(lp.phi); - q = pj_qsfn(sinphi, P->e, P->one_es); - if (P->mode == OBLIQ || P->mode == EQUIT) { - sinb = q / P->qp; - cosb = sqrt(1. - sinb * sinb); - } - switch (P->mode) { - case OBLIQ: - b = 1. + P->sinb1 * sinb + P->cosb1 * cosb * coslam; - break; - case EQUIT: - b = 1. + cosb * coslam; - break; - case N_POLE: - b = HALFPI + lp.phi; - q = P->qp - q; - break; - case S_POLE: - b = lp.phi - HALFPI; - q = P->qp + q; - break; - } - if (fabs(b) < EPS10) F_ERROR; - switch (P->mode) { - case OBLIQ: - xy.y = P->ymf * ( b = sqrt(2. / b) ) - * (P->cosb1 * sinb - P->sinb1 * cosb * coslam); - goto eqcon; - break; - case EQUIT: - xy.y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * P->ymf; -eqcon: - xy.x = P->xmf * b * cosb * sinlam; - break; - case N_POLE: - case S_POLE: - if (q >= 0.) { - xy.x = (b = sqrt(q)) * sinlam; - xy.y = coslam * (P->mode == S_POLE ? b : -b); - } else - xy.x = xy.y = 0.; - break; - } - return (xy); -} -FORWARD(s_forward); /* spheroid */ - double coslam, cosphi, sinphi; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - switch (P->mode) { - case EQUIT: - xy.y = 1. + cosphi * coslam; - goto oblcon; - case OBLIQ: - xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; -oblcon: - if (xy.y <= EPS10) F_ERROR; - xy.x = (xy.y = sqrt(2. / xy.y)) * cosphi * sin(lp.lam); - xy.y *= P->mode == EQUIT ? sinphi : - cosph0 * sinphi - sinph0 * cosphi * coslam; - break; - case N_POLE: - coslam = -coslam; - case S_POLE: - if (fabs(lp.phi + P->phi0) < EPS10) F_ERROR; - xy.y = FORTPI - lp.phi * .5; - xy.y = 2. * (P->mode == S_POLE ? cos(xy.y) : sin(xy.y)); - xy.x = xy.y * sin(lp.lam); - xy.y *= coslam; - break; - } - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double cCe, sCe, q, rho, ab=0.0; - - switch (P->mode) { - case EQUIT: - case OBLIQ: - if ((rho = hypot(xy.x /= P->dd, xy.y *= P->dd)) < EPS10) { - lp.lam = 0.; - lp.phi = P->phi0; - return (lp); - } - cCe = cos(sCe = 2. * asin(.5 * rho / P->rq)); - xy.x *= (sCe = sin(sCe)); - if (P->mode == OBLIQ) { - q = P->qp * (ab = cCe * P->sinb1 + xy.y * sCe * P->cosb1 / rho); - xy.y = rho * P->cosb1 * cCe - xy.y * P->sinb1 * sCe; - } else { - q = P->qp * (ab = xy.y * sCe / rho); - xy.y = rho * cCe; - } - break; - case N_POLE: - xy.y = -xy.y; - case S_POLE: - if (!(q = (xy.x * xy.x + xy.y * xy.y)) ) { - lp.lam = 0.; - lp.phi = P->phi0; - return (lp); - } - /* - q = P->qp - q; - */ - ab = 1. - q / P->qp; - if (P->mode == S_POLE) - ab = - ab; - break; - } - lp.lam = atan2(xy.x, xy.y); - lp.phi = pj_authlat(asin(ab), P->apa); - return (lp); -} -INVERSE(s_inverse); /* spheroid */ - double cosz=0.0, rh, sinz=0.0; - - rh = hypot(xy.x, xy.y); - if ((lp.phi = rh * .5 ) > 1.) I_ERROR; - lp.phi = 2. * asin(lp.phi); - if (P->mode == OBLIQ || P->mode == EQUIT) { - sinz = sin(lp.phi); - cosz = cos(lp.phi); - } - switch (P->mode) { - case EQUIT: - lp.phi = fabs(rh) <= EPS10 ? 0. : asin(xy.y * sinz / rh); - xy.x *= sinz; - xy.y = cosz * rh; - break; - case OBLIQ: - lp.phi = fabs(rh) <= EPS10 ? P->phi0 : - asin(cosz * sinph0 + xy.y * sinz * cosph0 / rh); - xy.x *= sinz * cosph0; - xy.y = (cosz - sin(lp.phi) * sinph0) * rh; - break; - case N_POLE: - xy.y = -xy.y; - lp.phi = HALFPI - lp.phi; - break; - case S_POLE: - lp.phi -= HALFPI; - break; - } - lp.lam = (xy.y == 0. && (P->mode == EQUIT || P->mode == OBLIQ)) ? - 0. : atan2(xy.x, xy.y); - return (lp); -} -FREEUP; - if (P) { - if (P->apa) - pj_dalloc(P->apa); - pj_dalloc(P); - } -} -ENTRY1(laea,apa) - double t; - - if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10) - P->mode = P->phi0 < 0. ? S_POLE : N_POLE; - else if (fabs(t) < EPS10) - P->mode = EQUIT; - else - P->mode = OBLIQ; - if (P->es) { - double sinphi; - - P->e = sqrt(P->es); - P->qp = pj_qsfn(1., P->e, P->one_es); - P->mmf = .5 / (1. - P->es); - P->apa = pj_authset(P->es); - switch (P->mode) { - case N_POLE: - case S_POLE: - P->dd = 1.; - break; - case EQUIT: - P->dd = 1. / (P->rq = sqrt(.5 * P->qp)); - P->xmf = 1.; - P->ymf = .5 * P->qp; - break; - case OBLIQ: - P->rq = sqrt(.5 * P->qp); - sinphi = sin(P->phi0); - P->sinb1 = pj_qsfn(sinphi, P->e, P->one_es) / P->qp; - P->cosb1 = sqrt(1. - P->sinb1 * P->sinb1); - P->dd = cos(P->phi0) / (sqrt(1. - P->es * sinphi * sinphi) * - P->rq * P->cosb1); - P->ymf = (P->xmf = P->rq) / P->dd; - P->xmf *= P->dd; - break; - } - P->inv = e_inverse; - P->fwd = e_forward; - } else { - if (P->mode == OBLIQ) { - sinph0 = sin(P->phi0); - cosph0 = cos(P->phi0); - } - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_lagrng.c b/src/3rdparty/proj/PJ_lagrng.c deleted file mode 100644 index d0e123a9..00000000 --- a/src/3rdparty/proj/PJ_lagrng.c +++ /dev/null @@ -1,35 +0,0 @@ -#define PROJ_PARMS__ \ - double hrw; \ - double rw; \ - double a1; -#define TOL 1e-10 -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(lagrng, "Lagrange") "\n\tMisc Sph, no inv.\n\tW="; -FORWARD(s_forward); /* spheroid */ - double v, c; - - if (fabs(fabs(lp.phi) - HALFPI) < TOL) { - xy.x = 0; - xy.y = lp.phi < 0 ? -2. : 2.; - } else { - lp.phi = sin(lp.phi); - v = P->a1 * pow((1. + lp.phi)/(1. - lp.phi), P->hrw); - if ((c = 0.5 * (v + 1./v) + cos(lp.lam *= P->rw)) < TOL) - F_ERROR; - xy.x = 2. * sin(lp.lam) / c; - xy.y = (v - 1./v) / c; - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(lagrng) - double phi1; - - if ((P->rw = pj_param(P->params, "dW").f) <= 0) E_ERROR(-27); - P->hrw = 0.5 * (P->rw = 1. / P->rw); - phi1 = pj_param(P->params, "rlat_1").f; - if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) E_ERROR(-22); - P->a1 = pow((1. - phi1)/(1. + phi1), P->hrw); - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_larr.c b/src/3rdparty/proj/PJ_larr.c deleted file mode 100644 index 5bab2b09..00000000 --- a/src/3rdparty/proj/PJ_larr.c +++ /dev/null @@ -1,12 +0,0 @@ -#define PROJ_PARMS__ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv."; -#define SIXTH .16666666666666666 -FORWARD(s_forward); /* sphere */ - xy.x = 0.5 * lp.lam * (1. + sqrt(cos(lp.phi))); - xy.y = lp.phi / (cos(0.5 * lp.phi) * cos(SIXTH * lp.lam)); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(larr) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_lask.c b/src/3rdparty/proj/PJ_lask.c deleted file mode 100644 index 05e80a19..00000000 --- a/src/3rdparty/proj/PJ_lask.c +++ /dev/null @@ -1,26 +0,0 @@ -#define PROJ_PARMS__ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv."; -#define a10 0.975534 -#define a12 -0.119161 -#define a32 -0.0143059 -#define a14 -0.0547009 -#define b01 1.00384 -#define b21 0.0802894 -#define b03 0.0998909 -#define b41 0.000199025 -#define b23 -0.0285500 -#define b05 -0.0491032 -FORWARD(s_forward); /* sphere */ - double l2, p2; - - l2 = lp.lam * lp.lam; - p2 = lp.phi * lp.phi; - xy.x = lp.lam * (a10 + p2 * (a12 + l2 * a32 + p2 * a14)); - xy.y = lp.phi * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) + - p2 * (b03 + p2 * b05)); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(lask) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_lcc.c b/src/3rdparty/proj/PJ_lcc.c deleted file mode 100644 index 80a85d0b..00000000 --- a/src/3rdparty/proj/PJ_lcc.c +++ /dev/null @@ -1,105 +0,0 @@ -#define PROJ_PARMS__ \ - double phi1; \ - double phi2; \ - double n; \ - double rho0; \ - double c; \ - int ellips; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(lcc, "Lambert Conformal Conic") - "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0"; -# define EPS10 1.e-10 -FORWARD(e_forward); /* ellipsoid & spheroid */ - double rho; - if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { - if ((lp.phi * P->n) <= 0.) F_ERROR; - rho = 0.; - } - else - rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), - P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); - xy.x = P->k0 * (rho * sin( lp.lam *= P->n ) ); - xy.y = P->k0 * (P->rho0 - rho * cos(lp.lam) ); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid & spheroid */ - double rho; - xy.x /= P->k0; - xy.y /= P->k0; - if( (rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) { - if (P->n < 0.) { - rho = -rho; - xy.x = -xy.x; - xy.y = -xy.y; - } - if (P->ellips) { - if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e)) - == HUGE_VAL) - I_ERROR; - } else - lp.phi = 2. * atan(pow(P->c / rho, 1./P->n)) - HALFPI; - lp.lam = atan2(xy.x, xy.y) / P->n; - } else { - lp.lam = 0.; - lp.phi = P->n > 0. ? HALFPI : - HALFPI; - } - return (lp); -} -SPECIAL(fac) { - double rho; - if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { - if ((lp.phi * P->n) <= 0.) return; - rho = 0.; - } else - rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), - P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); - fac->code |= IS_ANAL_HK + IS_ANAL_CONV; - fac->k = fac->h = P->k0 * P->n * rho / - pj_msfn(sin(lp.phi), cos(lp.phi), P->es); - fac->conv = - P->n * lp.lam; -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(lcc) - double cosphi, sinphi; - int secant; - - P->phi1 = pj_param(P->params, "rlat_1").f; - if (pj_param(P->params, "tlat_2").i) - P->phi2 = pj_param(P->params, "rlat_2").f; - else { - P->phi2 = P->phi1; - if (!pj_param(P->params, "tlat_0").i) - P->phi0 = P->phi1; - } - if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); - P->n = sinphi = sin(P->phi1); - cosphi = cos(P->phi1); - secant = fabs(P->phi1 - P->phi2) >= EPS10; - if( (P->ellips = (P->es != 0.)) ) { - double ml1, m1; - - P->e = sqrt(P->es); - m1 = pj_msfn(sinphi, cosphi, P->es); - ml1 = pj_tsfn(P->phi1, sinphi, P->e); - if (secant) { /* secant cone */ - P->n = log(m1 / - pj_msfn(sinphi = sin(P->phi2), cos(P->phi2), P->es)); - P->n /= log(ml1 / pj_tsfn(P->phi2, sinphi, P->e)); - } - P->c = (P->rho0 = m1 * pow(ml1, -P->n) / P->n); - P->rho0 *= (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. : - pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), P->n); - } else { - if (secant) - P->n = log(cosphi / cos(P->phi2)) / - log(tan(FORTPI + .5 * P->phi2) / - tan(FORTPI + .5 * P->phi1)); - P->c = cosphi * pow(tan(FORTPI + .5 * P->phi1), P->n) / P->n; - P->rho0 = (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. : - P->c * pow(tan(FORTPI + .5 * P->phi0), -P->n); - } - P->inv = e_inverse; - P->fwd = e_forward; - P->spc = fac; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_lcca.c b/src/3rdparty/proj/PJ_lcca.c deleted file mode 100644 index 2bb101ad..00000000 --- a/src/3rdparty/proj/PJ_lcca.c +++ /dev/null @@ -1,72 +0,0 @@ -static const char RCS_ID[] = "$Id: PJ_lcca.c 1504 2009-01-06 02:11:57Z warmerdam $"; -/* PROJ.4 Cartographic Projection System -*/ -#define MAX_ITER 10 -#define DEL_TOL 1e-12 -#define PROJ_PARMS__ \ - double *en; \ - double r0, l, M0; \ - double C; -#define PJ_LIB__ -#include <projects.h> - -PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") - "\n\tConic, Sph&Ell\n\tlat_0="; - - static double /* func to compute dr */ -fS(double S, double C) { - return(S * ( 1. + S * S * C)); -} - static double /* deriv of fs */ -fSp(double S, double C) { - return(1. + 3.* S * S * C); -} -FORWARD(e_forward); /* ellipsoid */ - double S, S3, r, dr; - - S = pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) - P->M0; - dr = fS(S, P->C); - r = P->r0 - dr; - xy.x = P->k0 * (r * sin( lp.lam *= P->l ) ); - xy.y = P->k0 * (P->r0 - r * cos(lp.lam) ); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid & spheroid */ - double theta, dr, S, dif; - int i; - - xy.x /= P->k0; - xy.y /= P->k0; - theta = atan2(xy.x , P->r0 - xy.y); - dr = xy.y - xy.x * tan(0.5 * theta); - lp.lam = theta / P->l; - S = dr; - for (i = MAX_ITER; i ; --i) { - S -= (dif = (fS(S, P->C) - dr) / fSp(S, P->C)); - if (fabs(dif) < DEL_TOL) break; - } - if (!i) I_ERROR - lp.phi = pj_inv_mlfn(S + P->M0, P->es, P->en); - return (lp); -} -FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } -ENTRY0(lcca) - double s2p0, N0, R0, tan0, tan20; - - if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - if (!pj_param(P->params, "tlat_0").i) E_ERROR(50); - if (P->phi0 == 0.) E_ERROR(51); - P->l = sin(P->phi0); - P->M0 = pj_mlfn(P->phi0, P->l, cos(P->phi0), P->en); - s2p0 = P->l * P->l; - R0 = 1. / (1. - P->es * s2p0); - N0 = sqrt(R0); - R0 *= P->one_es * N0; - tan0 = tan(P->phi0); - tan20 = tan0 * tan0; - P->r0 = N0 / tan0; - P->C = 1. / (6. * R0 * N0); - P->inv = e_inverse; - P->fwd = e_forward; -ENDENTRY(P) - diff --git a/src/3rdparty/proj/PJ_loxim.c b/src/3rdparty/proj/PJ_loxim.c deleted file mode 100644 index 80c15318..00000000 --- a/src/3rdparty/proj/PJ_loxim.c +++ /dev/null @@ -1,41 +0,0 @@ -#define PROJ_PARMS__ \ - double phi1; \ - double cosphi1; \ - double tanphi1; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(loxim, "Loximuthal") "\n\tPCyl Sph"; -#define EPS 1e-8 -FORWARD(s_forward); /* spheroid */ - xy.y = lp.phi - P->phi1; - if (fabs(xy.y) < EPS) - xy.x = lp.lam * P->cosphi1; - else { - xy.x = FORTPI + 0.5 * lp.phi; - if (fabs(xy.x) < EPS || fabs(fabs(xy.x) - HALFPI) < EPS) - xy.x = 0.; - else - xy.x = lp.lam * xy.y / log( tan(xy.x) / P->tanphi1 ); - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y + P->phi1; - if (fabs(xy.y) < EPS) - lp.lam = xy.x / P->cosphi1; - else - if (fabs( lp.lam = FORTPI + 0.5 * lp.phi ) < EPS || - fabs(fabs(lp.lam) - HALFPI) < EPS) - lp.lam = 0.; - else - lp.lam = xy.x * log( tan(lp.lam) / P->tanphi1 ) / xy.y ; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(loxim); - P->phi1 = pj_param(P->params, "rlat_1").f; - if ((P->cosphi1 = cos(P->phi1)) < EPS) E_ERROR(-22); - P->tanphi1 = tan(FORTPI + 0.5 * P->phi1); - P->inv = s_inverse; P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_lsat.c b/src/3rdparty/proj/PJ_lsat.c deleted file mode 100644 index e8edb542..00000000 --- a/src/3rdparty/proj/PJ_lsat.c +++ /dev/null @@ -1,171 +0,0 @@ -/* based upon Snyder and Linck, USGS-NMD */ -#define PROJ_PARMS__ \ - double a2, a4, b, c1, c3; \ - double q, t, u, w, p22, sa, ca, xj, rlm, rlm2; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(lsat, "Space oblique for LANDSAT") - "\n\tCyl, Sph&Ell\n\tlsat= path="; -#define TOL 1e-7 -#define PI_HALFPI 4.71238898038468985766 -#define TWOPI_HALFPI 7.85398163397448309610 - static void -seraz0(double lam, double mult, PJ *P) { - double sdsq, h, s, fc, sd, sq, d__1; - - lam *= DEG_TO_RAD; - sd = sin(lam); - sdsq = sd * sd; - s = P->p22 * P->sa * cos(lam) * sqrt((1. + P->t * sdsq) / (( - 1. + P->w * sdsq) * (1. + P->q * sdsq))); - d__1 = 1. + P->q * sdsq; - h = sqrt((1. + P->q * sdsq) / (1. + P->w * sdsq)) * ((1. + - P->w * sdsq) / (d__1 * d__1) - P->p22 * P->ca); - sq = sqrt(P->xj * P->xj + s * s); - P->b += fc = mult * (h * P->xj - s * s) / sq; - P->a2 += fc * cos(lam + lam); - P->a4 += fc * cos(lam * 4.); - fc = mult * s * (h + P->xj) / sq; - P->c1 += fc * cos(lam); - P->c3 += fc * cos(lam * 3.); -} -FORWARD(e_forward); /* ellipsoid */ - int l, nn; - double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph, - lamtp, cl, sd, sp, fac, sav, tanphi; - - if (lp.phi > HALFPI) - lp.phi = HALFPI; - else if (lp.phi < -HALFPI) - lp.phi = -HALFPI; - lampp = lp.phi >= 0. ? HALFPI : PI_HALFPI; - tanphi = tan(lp.phi); - for (nn = 0;;) { - sav = lampp; - lamtp = lp.lam + P->p22 * lampp; - cl = cos(lamtp); - if (fabs(cl) < TOL) - lamtp -= TOL; - fac = lampp - sin(lampp) * (cl < 0. ? -HALFPI : HALFPI); - for (l = 50; l; --l) { - lamt = lp.lam + P->p22 * sav; - if (fabs(c = cos(lamt)) < TOL) - lamt -= TOL; - xlam = (P->one_es * tanphi * P->sa + sin(lamt) * P->ca) / c; - lamdp = atan(xlam) + fac; - if (fabs(fabs(sav) - fabs(lamdp)) < TOL) - break; - sav = lamdp; - } - if (!l || ++nn >= 3 || (lamdp > P->rlm && lamdp < P->rlm2)) - break; - if (lamdp <= P->rlm) - lampp = TWOPI_HALFPI; - else if (lamdp >= P->rlm2) - lampp = HALFPI; - } - if (l) { - sp = sin(lp.phi); - phidp = aasin((P->one_es * P->ca * sp - P->sa * cos(lp.phi) * - sin(lamt)) / sqrt(1. - P->es * sp * sp)); - tanph = log(tan(FORTPI + .5 * phidp)); - sd = sin(lamdp); - sdsq = sd * sd; - s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq) - / ((1. + P->w * sdsq) * (1. + P->q * sdsq))); - d = sqrt(P->xj * P->xj + s * s); - xy.x = P->b * lamdp + P->a2 * sin(2. * lamdp) + P->a4 * - sin(lamdp * 4.) - tanph * s / d; - xy.y = P->c1 * sd + P->c3 * sin(lamdp * 3.) + tanph * P->xj / d; - } else - xy.x = xy.y = HUGE_VAL; - return xy; -} -INVERSE(e_inverse); /* ellipsoid */ - int nn; - double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp; - - lamdp = xy.x / P->b; - nn = 50; - do { - sav = lamdp; - sd = sin(lamdp); - sdsq = sd * sd; - s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq) - / ((1. + P->w * sdsq) * (1. + P->q * sdsq))); - lamdp = xy.x + xy.y * s / P->xj - P->a2 * sin( - 2. * lamdp) - P->a4 * sin(lamdp * 4.) - s / P->xj * ( - P->c1 * sin(lamdp) + P->c3 * sin(lamdp * 3.)); - lamdp /= P->b; - } while (fabs(lamdp - sav) >= TOL && --nn); - sl = sin(lamdp); - fac = exp(sqrt(1. + s * s / P->xj / P->xj) * (xy.y - - P->c1 * sl - P->c3 * sin(lamdp * 3.))); - phidp = 2. * (atan(fac) - FORTPI); - dd = sl * sl; - if (fabs(cos(lamdp)) < TOL) - lamdp -= TOL; - spp = sin(phidp); - sppsq = spp * spp; - lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * - P->ca - spp * P->sa * sqrt((1. + P->q * dd) * ( - 1. - sppsq) - sppsq * P->u) / cos(lamdp)) / (1. - sppsq - * (1. + P->u))); - sl = lamt >= 0. ? 1. : -1.; - scl = cos(lamdp) >= 0. ? 1. : -1; - lamt -= HALFPI * (1. - scl) * sl; - lp.lam = lamt - P->p22 * lamdp; - if (fabs(P->sa) < TOL) - lp.phi = aasin(spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); - else - lp.phi = atan((tan(lamdp) * cos(lamt) - P->ca * sin(lamt)) / - (P->one_es * P->sa)); - return lp; -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(lsat) - int land, path; - double lam, alf, esc, ess; - - land = pj_param(P->params, "ilsat").i; - if (land <= 0 || land > 5) E_ERROR(-28); - path = pj_param(P->params, "ipath").i; - if (path <= 0 || path > (land <= 3 ? 251 : 233)) E_ERROR(-29); - if (land <= 3) { - P->lam0 = DEG_TO_RAD * 128.87 - TWOPI / 251. * path; - P->p22 = 103.2669323; - alf = DEG_TO_RAD * 99.092; - } else { - P->lam0 = DEG_TO_RAD * 129.3 - TWOPI / 233. * path; - P->p22 = 98.8841202; - alf = DEG_TO_RAD * 98.2; - } - P->p22 /= 1440.; - P->sa = sin(alf); - P->ca = cos(alf); - if (fabs(P->ca) < 1e-9) - P->ca = 1e-9; - esc = P->es * P->ca * P->ca; - ess = P->es * P->sa * P->sa; - P->w = (1. - esc) * P->rone_es; - P->w = P->w * P->w - 1.; - P->q = ess * P->rone_es; - P->t = ess * (2. - P->es) * P->rone_es * P->rone_es; - P->u = esc * P->rone_es; - P->xj = P->one_es * P->one_es * P->one_es; - P->rlm = PI * (1. / 248. + .5161290322580645); - P->rlm2 = P->rlm + TWOPI; - P->a2 = P->a4 = P->b = P->c1 = P->c3 = 0.; - seraz0(0., 1., P); - for (lam = 9.; lam <= 81.0001; lam += 18.) - seraz0(lam, 4., P); - for (lam = 18; lam <= 72.0001; lam += 18.) - seraz0(lam, 2., P); - seraz0(90., 1., P); - P->a2 /= 30.; - P->a4 /= 60.; - P->b /= 30.; - P->c1 /= 15.; - P->c3 /= 45.; - P->inv = e_inverse; P->fwd = e_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_mbt_fps.c b/src/3rdparty/proj/PJ_mbt_fps.c deleted file mode 100644 index 63e02ca3..00000000 --- a/src/3rdparty/proj/PJ_mbt_fps.c +++ /dev/null @@ -1,38 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl., Sph."; -#define MAX_ITER 10 -#define LOOP_TOL 1e-7 -#define C1 0.45503 -#define C2 1.36509 -#define C3 1.41546 -#define C_x 0.22248 -#define C_y 1.44492 -#define C1_2 0.33333333333333333333333333 -FORWARD(s_forward); /* spheroid */ - double k, V, t; - int i; - - k = C3 * sin(lp.phi); - for (i = MAX_ITER; i ; --i) { - t = lp.phi / C2; - lp.phi -= V = (C1 * sin(t) + sin(lp.phi) - k) / - (C1_2 * cos(t) + cos(lp.phi)); - if (fabs(V) < LOOP_TOL) - break; - } - t = lp.phi / C2; - xy.x = C_x * lp.lam * (1. + 3. * cos(lp.phi)/cos(t) ); - xy.y = C_y * sin(t); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double t, s; - - lp.phi = C2 * (t = aasin(xy.y / C_y)); - lp.lam = xy.x / (C_x * (1. + 3. * cos(lp.phi)/cos(t))); - lp.phi = aasin((C1 * sin(t) + sin(lp.phi)) / C3); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(mbt_fps) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_mbtfpp.c b/src/3rdparty/proj/PJ_mbtfpp.c deleted file mode 100644 index 9549a23a..00000000 --- a/src/3rdparty/proj/PJ_mbtfpp.c +++ /dev/null @@ -1,32 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl., Sph."; -#define CS .95257934441568037152 -#define FXC .92582009977255146156 -#define FYC 3.40168025708304504493 -#define C23 .66666666666666666666 -#define C13 .33333333333333333333 -#define ONEEPS 1.0000001 -FORWARD(s_forward); /* spheroid */ - lp.phi = asin(CS * sin(lp.phi)); - xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.); - xy.y = FYC * sin(C13 * lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / FYC; - if (fabs(lp.phi) >= 1.) { - if (fabs(lp.phi) > ONEEPS) I_ERROR - else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; - } else - lp.phi = asin(lp.phi); - lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) ); - if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) { - if (fabs(lp.phi) > ONEEPS) I_ERROR - else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; - } else - lp.phi = asin(lp.phi); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(mbtfpp) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_mbtfpq.c b/src/3rdparty/proj/PJ_mbtfpq.c deleted file mode 100644 index 3298db4f..00000000 --- a/src/3rdparty/proj/PJ_mbtfpq.c +++ /dev/null @@ -1,47 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl., Sph."; -#define NITER 20 -#define EPS 1e-7 -#define ONETOL 1.000001 -#define C 1.70710678118654752440 -#define RC 0.58578643762690495119 -#define FYC 1.87475828462269495505 -#define RYC 0.53340209679417701685 -#define FXC 0.31245971410378249250 -#define RXC 3.20041258076506210122 -FORWARD(s_forward); /* spheroid */ - double th1, c; - int i; - - c = C * sin(lp.phi); - for (i = NITER; i; --i) { - lp.phi -= th1 = (sin(.5*lp.phi) + sin(lp.phi) - c) / - (.5*cos(.5*lp.phi) + cos(lp.phi)); - if (fabs(th1) < EPS) break; - } - xy.x = FXC * lp.lam * (1.0 + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); - xy.y = FYC * sin(0.5 * lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double t; - - lp.phi = RYC * xy.y; - if (fabs(lp.phi) > 1.) { - if (fabs(lp.phi) > ONETOL) I_ERROR - else if (lp.phi < 0.) { t = -1.; lp.phi = -PI; } - else { t = 1.; lp.phi = PI; } - } else - lp.phi = 2. * asin(t = lp.phi); - lp.lam = RXC * xy.x / (1. + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); - lp.phi = RC * (t + sin(lp.phi)); - if (fabs(lp.phi) > 1.) - if (fabs(lp.phi) > ONETOL) I_ERROR - else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - else - lp.phi = asin(lp.phi); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(mbtfpq) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_merc.c b/src/3rdparty/proj/PJ_merc.c deleted file mode 100644 index f8e0426a..00000000 --- a/src/3rdparty/proj/PJ_merc.c +++ /dev/null @@ -1,47 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts="; -#define EPS10 1.e-10 -FORWARD(e_forward); /* ellipsoid */ - if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; - xy.x = P->k0 * lp.lam; - xy.y = - P->k0 * log(pj_tsfn(lp.phi, sin(lp.phi), P->e)); - return (xy); -} -FORWARD(s_forward); /* spheroid */ - if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; - xy.x = P->k0 * lp.lam; - xy.y = P->k0 * log(tan(FORTPI + .5 * lp.phi)); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - if ((lp.phi = pj_phi2(exp(- xy.y / P->k0), P->e)) == HUGE_VAL) I_ERROR; - lp.lam = xy.x / P->k0; - return (lp); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = HALFPI - 2. * atan(exp(-xy.y / P->k0)); - lp.lam = xy.x / P->k0; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(merc) - double phits=0.0; - int is_phits; - - if( (is_phits = pj_param(P->params, "tlat_ts").i) ) { - phits = fabs(pj_param(P->params, "rlat_ts").f); - if (phits >= HALFPI) E_ERROR(-24); - } - if (P->es) { /* ellipsoid */ - if (is_phits) - P->k0 = pj_msfn(sin(phits), cos(phits), P->es); - P->inv = e_inverse; - P->fwd = e_forward; - } else { /* sphere */ - if (is_phits) - P->k0 = cos(phits); - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_mill.c b/src/3rdparty/proj/PJ_mill.c deleted file mode 100644 index 03c35598..00000000 --- a/src/3rdparty/proj/PJ_mill.c +++ /dev/null @@ -1,15 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph"; -FORWARD(s_forward); /* spheroid */ - xy.x = lp.lam; - xy.y = log(tan(FORTPI + lp.phi * .4)) * 1.25; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.lam = xy.x; - lp.phi = 2.5 * (atan(exp(.8 * xy.y)) - FORTPI); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(mill) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_mod_ster.c b/src/3rdparty/proj/PJ_mod_ster.c deleted file mode 100644 index 854f35e1..00000000 --- a/src/3rdparty/proj/PJ_mod_ster.c +++ /dev/null @@ -1,211 +0,0 @@ -/* based upon Snyder and Linck, USGS-NMD */ -#define PROJ_PARMS__ \ - COMPLEX *zcoeff; \ - double cchio, schio; \ - int n; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(mil_os, "Miller Oblated Stereographic") "\n\tAzi(mod)"; -PROJ_HEAD(lee_os, "Lee Oblated Stereographic") "\n\tAzi(mod)"; -PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") "\n\tAzi(mod)"; -PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") "\n\tAzi(mod)"; -PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") "\n\tAzi(mod)"; -#define EPSLN 1e-10 - -FORWARD(e_forward); /* ellipsoid */ - double sinlon, coslon, esphi, chi, schi, cchi, s; - COMPLEX p; - - sinlon = sin(lp.lam); - coslon = cos(lp.lam); - esphi = P->e * sin(lp.phi); - chi = 2. * atan(tan((HALFPI + lp.phi) * .5) * - pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI; - schi = sin(chi); - cchi = cos(chi); - s = 2. / (1. + P->schio * schi + P->cchio * cchi * coslon); - p.r = s * cchi * sinlon; - p.i = s * (P->cchio * schi - P->schio * cchi * coslon); - p = pj_zpoly1(p, P->zcoeff, P->n); - xy.x = p.r; - xy.y = p.i; - return xy; -} -INVERSE(e_inverse); /* ellipsoid */ - int nn; - COMPLEX p, fxy, fpxy, dp; - double den, rh, z, sinz, cosz, chi, phi, dphi, esphi; - - p.r = xy.x; - p.i = xy.y; - for (nn = 20; nn ;--nn) { - fxy = pj_zpolyd1(p, P->zcoeff, P->n, &fpxy); - fxy.r -= xy.x; - fxy.i -= xy.y; - den = fpxy.r * fpxy.r + fpxy.i * fpxy.i; - dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den; - dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den; - p.r += dp.r; - p.i += dp.i; - if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) - break; - } - if (nn) { - rh = hypot(p.r, p.i); - z = 2. * atan(.5 * rh); - sinz = sin(z); - cosz = cos(z); - lp.lam = P->lam0; - if (fabs(rh) <= EPSLN) { - lp.phi = P->phi0; - return lp; - } - chi = aasin(cosz * P->schio + p.i * sinz * P->cchio / rh); - phi = chi; - for (nn = 20; nn ;--nn) { - esphi = P->e * sin(phi); - dphi = 2. * atan(tan((HALFPI + chi) * .5) * - pow((1. + esphi) / (1. - esphi), P->e * .5)) - HALFPI - phi; - phi += dphi; - if (fabs(dphi) <= EPSLN) - break; - } - } - if (nn) { - lp.phi = phi; - lp.lam = atan2(p.r * sinz, rh * P->cchio * cosz - p.i * - P->schio * sinz); - } else - lp.lam = lp.phi = HUGE_VAL; - return lp; -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { /* general initialization */ - double esphi, chio; - - if (P->es) { - esphi = P->e * sin(P->phi0); - chio = 2. * atan(tan((HALFPI + P->phi0) * .5) * - pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI; - } else - chio = P->phi0; - P->schio = sin(chio); - P->cchio = cos(chio); - P->inv = e_inverse; P->fwd = e_forward; - return P; -} -ENTRY0(mil_os) - static COMPLEX /* Miller Oblated Stereographic */ -AB[] = { - {0.924500, 0.}, - {0., 0.}, - {0.019430, 0.} -}; - - P->n = 2; - P->lam0 = DEG_TO_RAD * 20.; - P->phi0 = DEG_TO_RAD * 18.; - P->zcoeff = AB; - P->es = 0.; -ENDENTRY(setup(P)) -ENTRY0(lee_os) - static COMPLEX /* Lee Oblated Stereographic */ -AB[] = { - {0.721316, 0.}, - {0., 0.}, - {-0.0088162, -0.00617325} -}; - - P->n = 2; - P->lam0 = DEG_TO_RAD * -165.; - P->phi0 = DEG_TO_RAD * -10.; - P->zcoeff = AB; - P->es = 0.; -ENDENTRY(setup(P)) -ENTRY0(gs48) - static COMPLEX /* 48 United States */ -AB[] = { - {0.98879, 0.}, - {0., 0.}, - {-0.050909, 0.}, - {0., 0.}, - {0.075528, 0.} -}; - - P->n = 4; - P->lam0 = DEG_TO_RAD * -96.; - P->phi0 = DEG_TO_RAD * -39.; - P->zcoeff = AB; - P->es = 0.; - P->a = 6370997.; -ENDENTRY(setup(P)) -ENTRY0(alsk) - static COMPLEX -ABe[] = { /* Alaska ellipsoid */ - {.9945303, 0.}, - {.0052083, -.0027404}, - {.0072721, .0048181}, - {-.0151089, -.1932526}, - {.0642675, -.1381226}, - {.3582802, -.2884586}}, -ABs[] = { /* Alaska sphere */ - {.9972523, 0.}, - {.0052513, -.0041175}, - {.0074606, .0048125}, - {-.0153783, -.1968253}, - {.0636871, -.1408027}, - {.3660976, -.2937382} -}; - - P->n = 5; - P->lam0 = DEG_TO_RAD * -152.; - P->phi0 = DEG_TO_RAD * 64.; - if (P->es) { /* fixed ellipsoid/sphere */ - P->zcoeff = ABe; - P->a = 6378206.4; - P->e = sqrt(P->es = 0.00676866); - } else { - P->zcoeff = ABs; - P->a = 6370997.; - } -ENDENTRY(setup(P)) -ENTRY0(gs50) - static COMPLEX -ABe[] = { /* GS50 ellipsoid */ - {.9827497, 0.}, - {.0210669, .0053804}, - {-.1031415, -.0571664}, - {-.0323337, -.0322847}, - {.0502303, .1211983}, - {.0251805, .0895678}, - {-.0012315, -.1416121}, - {.0072202, -.1317091}, - {-.0194029, .0759677}, - {-.0210072, .0834037} -}, -ABs[] = { /* GS50 sphere */ - {.9842990, 0.}, - {.0211642, .0037608}, - {-.1036018, -.0575102}, - {-.0329095, -.0320119}, - {.0499471, .1223335}, - {.0260460, .0899805}, - {.0007388, -.1435792}, - {.0075848, -.1334108}, - {-.0216473, .0776645}, - {-.0225161, .0853673} -}; - - P->n = 9; - P->lam0 = DEG_TO_RAD * -120.; - P->phi0 = DEG_TO_RAD * 45.; - if (P->es) { /* fixed ellipsoid/sphere */ - P->zcoeff = ABe; - P->a = 6378206.4; - P->e = sqrt(P->es = 0.00676866); - } else { - P->zcoeff = ABs; - P->a = 6370997.; - } -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_moll.c b/src/3rdparty/proj/PJ_moll.c deleted file mode 100644 index ce14cfbc..00000000 --- a/src/3rdparty/proj/PJ_moll.c +++ /dev/null @@ -1,62 +0,0 @@ -#define PROJ_PARMS__ \ - double C_x, C_y, C_p; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(moll, "Mollweide") "\n\tPCyl., Sph."; -PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl., Sph."; -PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl., Sph."; -#define MAX_ITER 10 -#define LOOP_TOL 1e-7 -FORWARD(s_forward); /* spheroid */ - double k, V; - int i; - - k = P->C_p * sin(lp.phi); - for (i = MAX_ITER; i ; --i) { - lp.phi -= V = (lp.phi + sin(lp.phi) - k) / - (1. + cos(lp.phi)); - if (fabs(V) < LOOP_TOL) - break; - } - if (!i) - lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; - else - lp.phi *= 0.5; - xy.x = P->C_x * lp.lam * cos(lp.phi); - xy.y = P->C_y * sin(lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double th, s; - - lp.phi = aasin(xy.y / P->C_y); - lp.lam = xy.x / (P->C_x * cos(lp.phi)); - lp.phi += lp.phi; - lp.phi = aasin((lp.phi + sin(lp.phi)) / P->C_p); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P, double p) { - double r, sp, p2 = p + p; - - P->es = 0; - sp = sin(p); - r = sqrt(TWOPI * sp / (p2 + sin(p2))); - P->C_x = 2. * r / PI; - P->C_y = r / sp; - P->C_p = p2 + sin(p2); - P->inv = s_inverse; - P->fwd = s_forward; - return P; -} -ENTRY0(moll) ENDENTRY(setup(P, HALFPI)) -ENTRY0(wag4) ENDENTRY(setup(P, PI/3.)) -ENTRY0(wag5) - P->es = 0; - P->C_x = 0.90977; - P->C_y = 1.65014; - P->C_p = 3.00896; - P->inv = s_inverse; - P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_nell.c b/src/3rdparty/proj/PJ_nell.c deleted file mode 100644 index 5de57cbc..00000000 --- a/src/3rdparty/proj/PJ_nell.c +++ /dev/null @@ -1,31 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(nell, "Nell") "\n\tPCyl., Sph."; -#define MAX_ITER 10 -#define LOOP_TOL 1e-7 -FORWARD(s_forward); /* spheroid */ - double k, V; - int i; - - k = 2. * sin(lp.phi); - V = lp.phi * lp.phi; - lp.phi *= 1.00371 + V * (-0.0935382 + V * -0.011412); - for (i = MAX_ITER; i ; --i) { - lp.phi -= V = (lp.phi + sin(lp.phi) - k) / - (1. + cos(lp.phi)); - if (fabs(V) < LOOP_TOL) - break; - } - xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); - xy.y = lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double th, s; - - lp.lam = 2. * xy.x / (1. + cos(xy.y)); - lp.phi = aasin(0.5 * (xy.y + sin(xy.y))); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(nell) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_nell_h.c b/src/3rdparty/proj/PJ_nell_h.c deleted file mode 100644 index 670dea88..00000000 --- a/src/3rdparty/proj/PJ_nell_h.c +++ /dev/null @@ -1,30 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl., Sph."; -#define NITER 9 -#define EPS 1e-7 -FORWARD(s_forward); /* spheroid */ - xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); - xy.y = 2.0 * (lp.phi - tan(0.5 *lp.phi)); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double V, c, p; - int i; - - p = 0.5 * xy.y; - for (i = NITER; i ; --i) { - c = cos(0.5 * lp.phi); - lp.phi -= V = (lp.phi - tan(lp.phi/2) - p)/(1. - 0.5/(c*c)); - if (fabs(V) < EPS) - break; - } - if (!i) { - lp.phi = p < 0. ? -HALFPI : HALFPI; - lp.lam = 2. * xy.x; - } else - lp.lam = 2. * xy.x / (1. + cos(lp.phi)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(nell_h) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_nocol.c b/src/3rdparty/proj/PJ_nocol.c deleted file mode 100644 index f129eb25..00000000 --- a/src/3rdparty/proj/PJ_nocol.c +++ /dev/null @@ -1,38 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv."; -#define EPS 1e-10 -FORWARD(s_forward); /* spheroid */ - if (fabs(lp.lam) < EPS) { - xy.x = 0; - xy.y = lp.phi; - } else if (fabs(lp.phi) < EPS) { - xy.x = lp.lam; - xy.y = 0.; - } else if (fabs(fabs(lp.lam) - HALFPI) < EPS) { - xy.x = lp.lam * cos(lp.phi); - xy.y = HALFPI * sin(lp.phi); - } else if (fabs(fabs(lp.phi) - HALFPI) < EPS) { - xy.x = 0; - xy.y = lp.phi; - } else { - double tb, c, d, m, n, r2, sp; - - tb = HALFPI / lp.lam - lp.lam / HALFPI; - c = lp.phi / HALFPI; - d = (1 - c * c)/((sp = sin(lp.phi)) - c); - r2 = tb / d; - r2 *= r2; - m = (tb * sp / d - 0.5 * tb)/(1. + r2); - n = (sp / r2 + 0.5 * d)/(1. + 1./r2); - xy.x = cos(lp.phi); - xy.x = sqrt(m * m + xy.x * xy.x / (1. + r2)); - xy.x = HALFPI * ( m + (lp.lam < 0. ? -xy.x : xy.x)); - xy.y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) / - (1. + 1./r2)); - xy.y = HALFPI * ( n + (lp.phi < 0. ? xy.y : -xy.y )); - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(nicol) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_nsper.c b/src/3rdparty/proj/PJ_nsper.c deleted file mode 100644 index a3ee264e..00000000 --- a/src/3rdparty/proj/PJ_nsper.c +++ /dev/null @@ -1,149 +0,0 @@ -#define PROJ_PARMS__ \ - double height; \ - double sinph0; \ - double cosph0; \ - double p; \ - double rp; \ - double pn1; \ - double pfact; \ - double h; \ - double cg; \ - double sg; \ - double sw; \ - double cw; \ - int mode; \ - int tilt; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(nsper, "Near-sided perspective") "\n\tAzi, Sph\n\th="; -PROJ_HEAD(tpers, "Tilted perspective") "\n\tAzi, Sph\n\ttilt= azi= h="; -# define EPS10 1.e-10 -# define N_POLE 0 -# define S_POLE 1 -# define EQUIT 2 -# define OBLIQ 3 -FORWARD(s_forward); /* spheroid */ - double coslam, cosphi, sinphi; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - switch (P->mode) { - case OBLIQ: - xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; - break; - case EQUIT: - xy.y = cosphi * coslam; - break; - case S_POLE: - xy.y = - sinphi; - break; - case N_POLE: - xy.y = sinphi; - break; - } - if (xy.y < P->rp) F_ERROR; - xy.y = P->pn1 / (P->p - xy.y); - xy.x = xy.y * cosphi * sin(lp.lam); - switch (P->mode) { - case OBLIQ: - xy.y *= (P->cosph0 * sinphi - - P->sinph0 * cosphi * coslam); - break; - case EQUIT: - xy.y *= sinphi; - break; - case N_POLE: - coslam = - coslam; - case S_POLE: - xy.y *= cosphi * coslam; - break; - } - if (P->tilt) { - double yt, ba; - - yt = xy.y * P->cg + xy.x * P->sg; - ba = 1. / (yt * P->sw * P->h + P->cw); - xy.x = (xy.x * P->cg - xy.y * P->sg) * P->cw * ba; - xy.y = yt * ba; - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double rh, cosz, sinz; - - if (P->tilt) { - double bm, bq, yt; - - yt = 1./(P->pn1 - xy.y * P->sw); - bm = P->pn1 * xy.x * yt; - bq = P->pn1 * xy.y * P->cw * yt; - xy.x = bm * P->cg + bq * P->sg; - xy.y = bq * P->cg - bm * P->sg; - } - rh = hypot(xy.x, xy.y); - if ((sinz = 1. - rh * rh * P->pfact) < 0.) I_ERROR; - sinz = (P->p - sqrt(sinz)) / (P->pn1 / rh + rh / P->pn1); - cosz = sqrt(1. - sinz * sinz); - if (fabs(rh) <= EPS10) { - lp.lam = 0.; - lp.phi = P->phi0; - } else { - switch (P->mode) { - case OBLIQ: - lp.phi = asin(cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh); - xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh; - xy.x *= sinz * P->cosph0; - break; - case EQUIT: - lp.phi = asin(xy.y * sinz / rh); - xy.y = cosz * rh; - xy.x *= sinz; - break; - case N_POLE: - lp.phi = asin(cosz); - xy.y = -xy.y; - break; - case S_POLE: - lp.phi = - asin(cosz); - break; - } - lp.lam = atan2(xy.x, xy.y); - } - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - if ((P->height = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); - if (fabs(fabs(P->phi0) - HALFPI) < EPS10) - P->mode = P->phi0 < 0. ? S_POLE : N_POLE; - else if (fabs(P->phi0) < EPS10) - P->mode = EQUIT; - else { - P->mode = OBLIQ; - P->sinph0 = sin(P->phi0); - P->cosph0 = cos(P->phi0); - } - P->pn1 = P->height / P->a; /* normalize by radius */ - P->p = 1. + P->pn1; - P->rp = 1. / P->p; - P->h = 1. / P->pn1; - P->pfact = (P->p + 1.) * P->h; - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; - return P; -} -ENTRY0(nsper) - P->tilt = 0; -ENDENTRY(setup(P)) -ENTRY0(tpers) - double omega, gamma; - - omega = pj_param(P->params, "dtilt").f * DEG_TO_RAD; - gamma = pj_param(P->params, "dazi").f * DEG_TO_RAD; - P->tilt = 1; - P->cg = cos(gamma); P->sg = sin(gamma); - P->cw = cos(omega); P->sw = sin(omega); -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_nzmg.c b/src/3rdparty/proj/PJ_nzmg.c deleted file mode 100644 index 5a285411..00000000 --- a/src/3rdparty/proj/PJ_nzmg.c +++ /dev/null @@ -1,107 +0,0 @@ -/****************************************************************************** - * $Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Implementation of the nzmg (New Zealand Map Grid) projection. - * Very loosely based upon DMA code by Bradford W. Drew - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ -#include <projects.h> - -PJ_CVSID("$Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -PROJ_HEAD(nzmg, "New Zealand Map Grid") "\n\tfixed Earth"; - -#define EPSLN 1e-10 -#define SEC5_TO_RAD 0.4848136811095359935899141023 -#define RAD_TO_SEC5 2.062648062470963551564733573 - static COMPLEX -bf[] = { - {.7557853228, 0.0}, - {.249204646, .003371507}, - {-.001541739, .041058560}, - {-.10162907, .01727609}, - {-.26623489, -.36249218}, - {-.6870983, -1.1651967} }; - static double -tphi[] = { 1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594, - .007317, .01220, .00394, -.0013 }, -tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879, - -.0055161, .0026906, -.001333, .00067, -.00034 }; -#define Nbf 5 -#define Ntpsi 9 -#define Ntphi 8 -FORWARD(e_forward); /* ellipsoid */ - COMPLEX p; - double *C; - int i; - - lp.phi = (lp.phi - P->phi0) * RAD_TO_SEC5; - for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i) - p.r = *--C + lp.phi * p.r; - p.r *= lp.phi; - p.i = lp.lam; - p = pj_zpoly1(p, bf, Nbf); - xy.x = p.i; - xy.y = p.r; - return xy; -} -INVERSE(e_inverse); /* ellipsoid */ - int nn, i; - COMPLEX p, f, fp, dp; - double den, *C; - - p.r = xy.y; - p.i = xy.x; - for (nn = 20; nn ;--nn) { - f = pj_zpolyd1(p, bf, Nbf, &fp); - f.r -= xy.y; - f.i -= xy.x; - den = fp.r * fp.r + fp.i * fp.i; - p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den; - p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den; - if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) - break; - } - if (nn) { - lp.lam = p.i; - for (lp.phi = *(C = tphi + (i = Ntphi)); i ; --i) - lp.phi = *--C + p.r * lp.phi; - lp.phi = P->phi0 + p.r * lp.phi * SEC5_TO_RAD; - } else - lp.lam = lp.phi = HUGE_VAL; - return lp; -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(nzmg) - /* force to International major axis */ - P->ra = 1. / (P->a = 6378388.0); - P->lam0 = DEG_TO_RAD * 173.; - P->phi0 = DEG_TO_RAD * -41.; - P->x0 = 2510000.; - P->y0 = 6023150.; - P->inv = e_inverse; P->fwd = e_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_ob_tran.c b/src/3rdparty/proj/PJ_ob_tran.c deleted file mode 100644 index 460a600f..00000000 --- a/src/3rdparty/proj/PJ_ob_tran.c +++ /dev/null @@ -1,144 +0,0 @@ -#define PROJ_PARMS__ \ - struct PJconsts *link; \ - double lamp; \ - double cphip, sphip; -#define PJ_LIB__ -#include <projects.h> -#include <string.h> -PROJ_HEAD(ob_tran, "General Oblique Transformation") "\n\tMisc Sph" -"\n\to_proj= plus parameters for projection" -"\n\to_lat_p= o_lon_p= (new pole) or" -"\n\to_alpha= o_lon_c= o_lat_c= or" -"\n\to_lon_1= o_lat_1= o_lon_2= o_lat_2="; -#define TOL 1e-10 -FORWARD(o_forward); /* spheroid */ - double coslam, sinphi, cosphi; - - (void) xy; - - coslam = cos(lp.lam); - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam + - P->cphip * sinphi) + P->lamp); - lp.phi = aasin(P->sphip * sinphi - P->cphip * cosphi * coslam); - return (P->link->fwd(lp, P->link)); -} -FORWARD(t_forward); /* spheroid */ - double cosphi, coslam; - - (void) xy; - - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), sin(lp.phi)) + P->lamp); - lp.phi = aasin(- cosphi * coslam); - return (P->link->fwd(lp, P->link)); -} -INVERSE(o_inverse); /* spheroid */ - double coslam, sinphi, cosphi; - - lp = P->link->inv(xy, P->link); - if (lp.lam != HUGE_VAL) { - coslam = cos(lp.lam -= P->lamp); - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - lp.phi = aasin(P->sphip * sinphi + P->cphip * cosphi * coslam); - lp.lam = aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam - - P->cphip * sinphi); - } - return (lp); -} -INVERSE(t_inverse); /* spheroid */ - double cosphi, t; - - lp = P->link->inv(xy, P->link); - if (lp.lam != HUGE_VAL) { - cosphi = cos(lp.phi); - t = lp.lam - P->lamp; - lp.lam = aatan2(cosphi * sin(t), - sin(lp.phi)); - lp.phi = aasin(cosphi * cos(t)); - } - return (lp); -} -FREEUP; - if (P) { - if (P->link) - (*(P->link->pfree))(P->link); - pj_dalloc(P); - } -} -ENTRY1(ob_tran, link) - int i; - double phip; - char *name, *s; - - /* get name of projection to be translated */ - if (!(name = pj_param(P->params, "so_proj").s)) E_ERROR(-26); - for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; - if (!s || !(P->link = (*pj_list[i].proj)(0))) E_ERROR(-37); - /* copy existing header into new */ - P->es = 0.; /* force to spherical */ - P->link->params = P->params; - P->link->over = P->over; - P->link->geoc = P->geoc; - P->link->a = P->a; - P->link->es = P->es; - P->link->ra = P->ra; - P->link->lam0 = P->lam0; - P->link->phi0 = P->phi0; - P->link->x0 = P->x0; - P->link->y0 = P->y0; - P->link->k0 = P->k0; - /* force spherical earth */ - P->link->one_es = P->link->rone_es = 1.; - P->link->es = P->link->e = 0.; - if (!(P->link = pj_list[i].proj(P->link))) { - freeup(P); - return 0; - } - if (pj_param(P->params, "to_alpha").i) { - double lamc, phic, alpha; - - lamc = pj_param(P->params, "ro_lon_c").f; - phic = pj_param(P->params, "ro_lat_c").f; - alpha = pj_param(P->params, "ro_alpha").f; -/* - if (fabs(phic) <= TOL || - fabs(fabs(phic) - HALFPI) <= TOL || - fabs(fabs(alpha) - HALFPI) <= TOL) -*/ - if (fabs(fabs(phic) - HALFPI) <= TOL) - E_ERROR(-32); - P->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic)); - phip = aasin(cos(phic) * sin(alpha)); - } else if (pj_param(P->params, "to_lat_p").i) { /* specified new pole */ - P->lamp = pj_param(P->params, "ro_lon_p").f; - phip = pj_param(P->params, "ro_lat_p").f; - } else { /* specified new "equator" points */ - double lam1, lam2, phi1, phi2, con; - - lam1 = pj_param(P->params, "ro_lon_1").f; - phi1 = pj_param(P->params, "ro_lat_1").f; - lam2 = pj_param(P->params, "ro_lon_2").f; - phi2 = pj_param(P->params, "ro_lat_2").f; - if (fabs(phi1 - phi2) <= TOL || - (con = fabs(phi1)) <= TOL || - fabs(con - HALFPI) <= TOL || - fabs(fabs(phi2) - HALFPI) <= TOL) E_ERROR(-33); - P->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) - - sin(phi1) * cos(phi2) * cos(lam2), - sin(phi1) * cos(phi2) * sin(lam2) - - cos(phi1) * sin(phi2) * sin(lam1)); - phip = atan(-cos(P->lamp - lam1) / tan(phi1)); - } - if (fabs(phip) > TOL) { /* oblique */ - P->cphip = cos(phip); - P->sphip = sin(phip); - P->fwd = o_forward; - P->inv = P->link->inv ? o_inverse : 0; - } else { /* transverse */ - P->fwd = t_forward; - P->inv = P->link->inv ? t_inverse : 0; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_ocea.c b/src/3rdparty/proj/PJ_ocea.c deleted file mode 100644 index cdffd6e4..00000000 --- a/src/3rdparty/proj/PJ_ocea.c +++ /dev/null @@ -1,68 +0,0 @@ -#define PROJ_PARMS__ \ - double rok; \ - double rtk; \ - double sinphi; \ - double cosphi; \ - double singam; \ - double cosgam; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph" - "lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2="; -FORWARD(s_forward); /* spheroid */ - double t; - - xy.y = sin(lp.lam); -/* - xy.x = atan2((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) , cos(lp.lam)); -*/ - t = cos(lp.lam); - xy.x = atan((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) / t); - if (t < 0.) - xy.x += PI; - xy.x *= P->rtk; - xy.y = P->rok * (P->sinphi * sin(lp.phi) - P->cosphi * cos(lp.phi) * xy.y); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double t, s; - - xy.y /= P->rok; - xy.x /= P->rtk; - t = sqrt(1. - xy.y * xy.y); - lp.phi = asin(xy.y * P->sinphi + t * P->cosphi * (s = sin(xy.x))); - lp.lam = atan2(t * P->sinphi * s - xy.y * P->cosphi, - t * cos(xy.x)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(ocea) - double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha; - - P->rok = P->a / P->k0; - P->rtk = P->a * P->k0; - if ( pj_param(P->params, "talpha").i) { - alpha = pj_param(P->params, "ralpha").f; - lonz = pj_param(P->params, "rlonc").f; - P->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; - P->sinphi = asin(cos(phi_0) * sin(alpha)); - } else { - phi_1 = pj_param(P->params, "rlat_1").f; - phi_2 = pj_param(P->params, "rlat_2").f; - lam_1 = pj_param(P->params, "rlon_1").f; - lam_2 = pj_param(P->params, "rlon_2").f; - P->singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) - - sin(phi_1) * cos(phi_2) * cos(lam_2), - sin(phi_1) * cos(phi_2) * sin(lam_2) - - cos(phi_1) * sin(phi_2) * sin(lam_1) ); - P->sinphi = atan(-cos(P->singam - lam_1) / tan(phi_1)); - } - P->lam0 = P->singam + HALFPI; - P->cosphi = cos(P->sinphi); - P->sinphi = sin(P->sinphi); - P->cosgam = cos(P->singam); - P->singam = sin(P->singam); - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_oea.c b/src/3rdparty/proj/PJ_oea.c deleted file mode 100644 index b5e42a1f..00000000 --- a/src/3rdparty/proj/PJ_oea.c +++ /dev/null @@ -1,58 +0,0 @@ -#define PROJ_PARMS__ \ - double theta; \ - double m, n; \ - double two_r_m, two_r_n, rm, rn, hm, hn; \ - double cp0, sp0; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(oea, "Oblated Equal Area") "\n\tMisc Sph\n\tn= m= theta="; -FORWARD(s_forward); /* sphere */ - double Az, M, N, cp, sp, cl, shz; - - cp = cos(lp.phi); - sp = sin(lp.phi); - cl = cos(lp.lam); - Az = aatan2(cp * sin(lp.lam), P->cp0 * sp - P->sp0 * cp * cl) + P->theta; - shz = sin(0.5 * aacos(P->sp0 * sp + P->cp0 * cp * cl)); - M = aasin(shz * sin(Az)); - N = aasin(shz * cos(Az) * cos(M) / cos(M * P->two_r_m)); - xy.y = P->n * sin(N * P->two_r_n); - xy.x = P->m * sin(M * P->two_r_m) * cos(N) / cos(N * P->two_r_n); - return (xy); -} -INVERSE(s_inverse); /* sphere */ - double N, M, xp, yp, z, Az, cz, sz, cAz; - - N = P->hn * aasin(xy.y * P->rn); - M = P->hm * aasin(xy.x * P->rm * cos(N * P->two_r_n) / cos(N)); - xp = 2. * sin(M); - yp = 2. * sin(N) * cos(M * P->two_r_m) / cos(M); - cAz = cos(Az = aatan2(xp, yp) - P->theta); - z = 2. * aasin(0.5 * hypot(xp, yp)); - sz = sin(z); - cz = cos(z); - lp.phi = aasin(P->sp0 * cz + P->cp0 * sz * cAz); - lp.lam = aatan2(sz * sin(Az), - P->cp0 * cz - P->sp0 * sz * cAz); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(oea) - if (((P->n = pj_param(P->params, "dn").f) <= 0.) || - ((P->m = pj_param(P->params, "dm").f) <= 0.)) - E_ERROR(-39) - else { - P->theta = pj_param(P->params, "rtheta").f; - P->sp0 = sin(P->phi0); - P->cp0 = cos(P->phi0); - P->rn = 1./ P->n; - P->rm = 1./ P->m; - P->two_r_n = 2. * P->rn; - P->two_r_m = 2. * P->rm; - P->hm = 0.5 * P->m; - P->hn = 0.5 * P->n; - P->fwd = s_forward; - P->inv = s_inverse; - P->es = 0.; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_omerc.c b/src/3rdparty/proj/PJ_omerc.c deleted file mode 100644 index 1b862dbb..00000000 --- a/src/3rdparty/proj/PJ_omerc.c +++ /dev/null @@ -1,166 +0,0 @@ -#define PROJ_PARMS__ \ - double alpha, lamc, lam1, phi1, lam2, phi2, Gamma, al, bl, el, \ - singam, cosgam, sinrot, cosrot, u_0; \ - int ellips, rot; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(omerc, "Oblique Mercator") - "\n\tCyl, Sph&Ell\n\t no_rot rot_conv no_uoff and\n\t" -"alpha= lonc= or\n\t lon_1= lat_1= lon_2= lat_2="; -#define TOL 1.e-7 -#define EPS 1.e-10 -#define TSFN0(x) tan(.5 * (HALFPI - (x))) -FORWARD(e_forward); /* ellipsoid & spheroid */ - double con, q, s, ul, us, vl, vs; - - vl = sin(P->bl * lp.lam); - if (fabs(fabs(lp.phi) - HALFPI) <= EPS) { - ul = lp.phi < 0. ? -P->singam : P->singam; - us = P->al * lp.phi / P->bl; - } else { - q = P->el / (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->bl) - : TSFN0(lp.phi)); - s = .5 * (q - 1. / q); - ul = 2. * (s * P->singam - vl * P->cosgam) / (q + 1. / q); - con = cos(P->bl * lp.lam); - if (fabs(con) >= TOL) { - us = P->al * atan((s * P->cosgam + vl * P->singam) / con) / P->bl; - if (con < 0.) - us += PI * P->al / P->bl; - } else - us = P->al * P->bl * lp.lam; - } - if (fabs(fabs(ul) - 1.) <= EPS) F_ERROR; - vs = .5 * P->al * log((1. - ul) / (1. + ul)) / P->bl; - us -= P->u_0; - if (! P->rot) { - xy.x = us; - xy.y = vs; - } else { - xy.x = vs * P->cosrot + us * P->sinrot; - xy.y = us * P->cosrot - vs * P->sinrot; - } - return (xy); -} -INVERSE(e_inverse); /* ellipsoid & spheroid */ - double q, s, ul, us, vl, vs; - - if (! P->rot) { - us = xy.x; - vs = xy.y; - } else { - vs = xy.x * P->cosrot - xy.y * P->sinrot; - us = xy.y * P->cosrot + xy.x * P->sinrot; - } - us += P->u_0; - q = exp(- P->bl * vs / P->al); - s = .5 * (q - 1. / q); - vl = sin(P->bl * us / P->al); - ul = 2. * (vl * P->cosgam + s * P->singam) / (q + 1. / q); - if (fabs(fabs(ul) - 1.) < EPS) { - lp.lam = 0.; - lp.phi = ul < 0. ? -HALFPI : HALFPI; - } else { - lp.phi = P->el / sqrt((1. + ul) / (1. - ul)); - if (P->ellips) { - if ((lp.phi = pj_phi2(pow(lp.phi, 1. / P->bl), P->e)) == HUGE_VAL) - I_ERROR; - } else - lp.phi = HALFPI - 2. * atan(lp.phi); - lp.lam = - atan2((s * P->cosgam - - vl * P->singam), cos(P->bl * us / P->al)) / P->bl; - } - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(omerc) - double con, com, cosph0, d, f, h, l, sinph0, p, j; - int azi; - - P->rot = pj_param(P->params, "bno_rot").i == 0; - if( (azi = pj_param(P->params, "talpha").i) != 0.0) { - P->lamc = pj_param(P->params, "rlonc").f; - P->alpha = pj_param(P->params, "ralpha").f; - if ( fabs(P->alpha) <= TOL || - fabs(fabs(P->phi0) - HALFPI) <= TOL || - fabs(fabs(P->alpha) - HALFPI) <= TOL) - E_ERROR(-32); - } else { - P->lam1 = pj_param(P->params, "rlon_1").f; - P->phi1 = pj_param(P->params, "rlat_1").f; - P->lam2 = pj_param(P->params, "rlon_2").f; - P->phi2 = pj_param(P->params, "rlat_2").f; - if (fabs(P->phi1 - P->phi2) <= TOL || - (con = fabs(P->phi1)) <= TOL || - fabs(con - HALFPI) <= TOL || - fabs(fabs(P->phi0) - HALFPI) <= TOL || - fabs(fabs(P->phi2) - HALFPI) <= TOL) E_ERROR(-33); - } - com = (P->ellips = P->es > 0.) ? sqrt(P->one_es) : 1.; - if (fabs(P->phi0) > EPS) { - sinph0 = sin(P->phi0); - cosph0 = cos(P->phi0); - if (P->ellips) { - con = 1. - P->es * sinph0 * sinph0; - P->bl = cosph0 * cosph0; - P->bl = sqrt(1. + P->es * P->bl * P->bl / P->one_es); - P->al = P->bl * P->k0 * com / con; - d = P->bl * com / (cosph0 * sqrt(con)); - } else { - P->bl = 1.; - P->al = P->k0; - d = 1. / cosph0; - } - if ((f = d * d - 1.) <= 0.) - f = 0.; - else { - f = sqrt(f); - if (P->phi0 < 0.) - f = -f; - } - P->el = f += d; - if (P->ellips) P->el *= pow(pj_tsfn(P->phi0, sinph0, P->e), P->bl); - else P->el *= TSFN0(P->phi0); - } else { - P->bl = 1. / com; - P->al = P->k0; - P->el = d = f = 1.; - } - if (azi) { - P->Gamma = asin(sin(P->alpha) / d); - P->lam0 = P->lamc - asin((.5 * (f - 1. / f)) * - tan(P->Gamma)) / P->bl; - } else { - if (P->ellips) { - h = pow(pj_tsfn(P->phi1, sin(P->phi1), P->e), P->bl); - l = pow(pj_tsfn(P->phi2, sin(P->phi2), P->e), P->bl); - } else { - h = TSFN0(P->phi1); - l = TSFN0(P->phi2); - } - f = P->el / h; - p = (l - h) / (l + h); - j = P->el * P->el; - j = (j - l * h) / (j + l * h); - if ((con = P->lam1 - P->lam2) < -PI) - P->lam2 -= TWOPI; - else if (con > PI) - P->lam2 += TWOPI; - P->lam0 = adjlon(.5 * (P->lam1 + P->lam2) - atan( - j * tan(.5 * P->bl * (P->lam1 - P->lam2)) / p) / P->bl); - P->Gamma = atan(2. * sin(P->bl * adjlon(P->lam1 - P->lam0)) / - (f - 1. / f)); - P->alpha = asin(d * sin(P->Gamma)); - } - P->singam = sin(P->Gamma); - P->cosgam = cos(P->Gamma); - f = pj_param(P->params, "brot_conv").i ? P->Gamma : P->alpha; - P->sinrot = sin(f); - P->cosrot = cos(f); - P->u_0 = pj_param(P->params, "bno_uoff").i ? 0. : - fabs(P->al * atan(sqrt(d * d - 1.) / P->cosrot) / P->bl); - if (P->phi0 < 0.) - P->u_0 = - P->u_0; - P->inv = e_inverse; - P->fwd = e_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_ortho.c b/src/3rdparty/proj/PJ_ortho.c deleted file mode 100644 index 202b0176..00000000 --- a/src/3rdparty/proj/PJ_ortho.c +++ /dev/null @@ -1,95 +0,0 @@ -#define PROJ_PARMS__ \ - double sinph0; \ - double cosph0; \ - int mode; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph."; -#define EPS10 1.e-10 -#define N_POLE 0 -#define S_POLE 1 -#define EQUIT 2 -#define OBLIQ 3 -FORWARD(s_forward); /* spheroid */ - double coslam, cosphi, sinphi; - - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - switch (P->mode) { - case EQUIT: - if (cosphi * coslam < - EPS10) F_ERROR; - xy.y = sin(lp.phi); - break; - case OBLIQ: - if (P->sinph0 * (sinphi = sin(lp.phi)) + - P->cosph0 * cosphi * coslam < - EPS10) F_ERROR; - xy.y = P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; - break; - case N_POLE: - coslam = - coslam; - case S_POLE: - if (fabs(lp.phi - P->phi0) - EPS10 > HALFPI) F_ERROR; - xy.y = cosphi * coslam; - break; - } - xy.x = cosphi * sin(lp.lam); - return (xy); -} - -INVERSE(s_inverse); /* spheroid */ - double rh, cosc, sinc; - - if ((sinc = (rh = hypot(xy.x, xy.y))) > 1.) { - if ((sinc - 1.) > EPS10) I_ERROR; - sinc = 1.; - } - cosc = sqrt(1. - sinc * sinc); /* in this range OK */ - if (fabs(rh) <= EPS10) { - lp.phi = P->phi0; - lp.lam = 0.0; - } else { - switch (P->mode) { - case N_POLE: - xy.y = -xy.y; - lp.phi = acos(sinc); - break; - case S_POLE: - lp.phi = - acos(sinc); - break; - case EQUIT: - lp.phi = xy.y * sinc / rh; - xy.x *= sinc; - xy.y = cosc * rh; - goto sinchk; - case OBLIQ: - lp.phi = cosc * P->sinph0 + xy.y * sinc * P->cosph0 /rh; - xy.y = (cosc - P->sinph0 * lp.phi) * rh; - xy.x *= sinc * P->cosph0; - sinchk: - if (fabs(lp.phi) >= 1.) - lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - else - lp.phi = asin(lp.phi); - break; - } - lp.lam = (xy.y == 0. && (P->mode == OBLIQ || P->mode == EQUIT)) - ? (xy.x == 0. ? 0. : xy.x < 0. ? -HALFPI : HALFPI) - : atan2(xy.x, xy.y); - } - return (lp); -} - -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(ortho) - if (fabs(fabs(P->phi0) - HALFPI) <= EPS10) - P->mode = P->phi0 < 0. ? S_POLE : N_POLE; - else if (fabs(P->phi0) > EPS10) { - P->mode = OBLIQ; - P->sinph0 = sin(P->phi0); - P->cosph0 = cos(P->phi0); - } else - P->mode = EQUIT; - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_poly.c b/src/3rdparty/proj/PJ_poly.c deleted file mode 100644 index ef5b8905..00000000 --- a/src/3rdparty/proj/PJ_poly.c +++ /dev/null @@ -1,99 +0,0 @@ -#define PROJ_PARMS__ \ - double ml0; \ - double *en; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(poly, "Polyconic (American)") - "\n\tConic, Sph&Ell"; -#define TOL 1e-10 -#define CONV 1e-10 -#define N_ITER 10 -#define I_ITER 20 -#define ITOL 1.e-12 -FORWARD(e_forward); /* ellipsoid */ - double ms, sp, cp; - - if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = -P->ml0; } - else { - sp = sin(lp.phi); - ms = fabs(cp = cos(lp.phi)) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.; - xy.x = ms * sin(lp.lam *= sp); - xy.y = (pj_mlfn(lp.phi, sp, cp, P->en) - P->ml0) + ms * (1. - cos(lp.lam)); - } - return (xy); -} -FORWARD(s_forward); /* spheroid */ - double cot, E; - - if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = P->ml0; } - else { - cot = 1. / tan(lp.phi); - xy.x = sin(E = lp.lam * sin(lp.phi)) * cot; - xy.y = lp.phi - P->phi0 + cot * (1. - cos(E)); - } - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - xy.y += P->ml0; - if (fabs(xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } - else { - double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi; - int i; - - r = xy.y * xy.y + xy.x * xy.x; - for (lp.phi = xy.y, i = I_ITER; i ; --i) { - sp = sin(lp.phi); - s2ph = sp * ( cp = cos(lp.phi)); - if (fabs(cp) < ITOL) - I_ERROR; - c = sp * (mlp = sqrt(1. - P->es * sp * sp)) / cp; - ml = pj_mlfn(lp.phi, sp, cp, P->en); - mlb = ml * ml + r; - mlp = P->one_es / (mlp * mlp * mlp); - lp.phi += ( dPhi = - ( ml + ml + c * mlb - 2. * xy.y * (c * ml + 1.) ) / ( - P->es * s2ph * (mlb - 2. * xy.y * ml) / c + - 2.* (xy.y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp )); - if (fabs(dPhi) <= ITOL) - break; - } - if (!i) - I_ERROR; - c = sin(lp.phi); - lp.lam = asin(xy.x * tan(lp.phi) * sqrt(1. - P->es * c * c)) / sin(lp.phi); - } - return (lp); -} -INVERSE(s_inverse); /* spheroid */ - double B, dphi, tp; - int i; - - if (fabs(xy.y = P->phi0 + xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } - else { - lp.phi = xy.y; - B = xy.x * xy.x + xy.y * xy.y; - i = N_ITER; - do { - tp = tan(lp.phi); - lp.phi -= (dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi - - .5 * ( lp.phi * lp.phi + B) * tp) / - ((lp.phi - xy.y) / tp - 1.)); - } while (fabs(dphi) > CONV && --i); - if (! i) I_ERROR; - lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi); - } - return (lp); -} -FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } -ENTRY1(poly, en) - if (P->es) { - if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); - P->inv = e_inverse; - P->fwd = e_forward; - } else { - P->ml0 = -P->phi0; - P->inv = s_inverse; - P->fwd = s_forward; - } -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_putp2.c b/src/3rdparty/proj/PJ_putp2.c deleted file mode 100644 index e846f13b..00000000 --- a/src/3rdparty/proj/PJ_putp2.c +++ /dev/null @@ -1,40 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph."; -#define C_x 1.89490 -#define C_y 1.71848 -#define C_p 0.6141848493043784 -#define EPS 1e-10 -#define NITER 10 -#define PI_DIV_3 1.0471975511965977 -FORWARD(s_forward); /* spheroid */ - double p, c, s, V; - int i; - - p = C_p * sin(lp.phi); - s = lp.phi * lp.phi; - lp.phi *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 ); - for (i = NITER; i ; --i) { - c = cos(lp.phi); - s = sin(lp.phi); - lp.phi -= V = (lp.phi + s * (c - 1.) - p) / - (1. + c * (c - 1.) - s * s); - if (fabs(V) < EPS) - break; - } - if (!i) - lp.phi = lp.phi < 0 ? - PI_DIV_3 : PI_DIV_3; - xy.x = C_x * lp.lam * (cos(lp.phi) - 0.5); - xy.y = C_y * sin(lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double c; - - lp.phi = aasin(xy.y / C_y); - lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5)); - lp.phi = aasin((lp.phi + sin(lp.phi) * (c - 1.)) / C_p); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(putp2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_putp3.c b/src/3rdparty/proj/PJ_putp3.c deleted file mode 100644 index 46e25004..00000000 --- a/src/3rdparty/proj/PJ_putp3.c +++ /dev/null @@ -1,26 +0,0 @@ -#define PROJ_PARMS__ \ - double A; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl., Sph."; -PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl., no inv., Sph."; -#define C 0.79788456 -#define RPISQ 0.1013211836 -FORWARD(s_forward); /* spheroid */ - xy.x = C * lp.lam * (1. - P->A * lp.phi * lp.phi); - xy.y = C * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / C; - lp.lam = xy.x / (C * (1. - P->A * lp.phi * lp.phi)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; - return P; -} -ENTRY0(putp3) P->A = 4. * RPISQ; ENDENTRY(setup(P)) -ENTRY0(putp3p) P->A = 2. * RPISQ; ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_putp4p.c b/src/3rdparty/proj/PJ_putp4p.c deleted file mode 100644 index 35066c2a..00000000 --- a/src/3rdparty/proj/PJ_putp4p.c +++ /dev/null @@ -1,29 +0,0 @@ -#define PROJ_PARMS__ \ - double C_x, C_y; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph."; -PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph."; -FORWARD(s_forward); /* spheroid */ - lp.phi = aasin(0.883883476 * sin(lp.phi)); - xy.x = P->C_x * lp.lam * cos(lp.phi); - xy.x /= cos(lp.phi *= 0.333333333333333); - xy.y = P->C_y * sin(lp.phi); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = aasin(xy.y / P->C_y); - lp.lam = xy.x * cos(lp.phi) / P->C_x; - lp.phi *= 3.; - lp.lam /= cos(lp.phi); - lp.phi = aasin(1.13137085 * sin(lp.phi)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; - return P; -} -ENTRY0(putp4p) P->C_x = 0.874038744; P->C_y = 3.883251825; ENDENTRY(setup(P)) -ENTRY0(weren) P->C_x = 1.; P->C_y = 4.442882938; ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_putp5.c b/src/3rdparty/proj/PJ_putp5.c deleted file mode 100644 index 8d3c59a0..00000000 --- a/src/3rdparty/proj/PJ_putp5.c +++ /dev/null @@ -1,26 +0,0 @@ -#define PROJ_PARMS__ \ - double A, B; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl., Sph."; -PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl., Sph."; -#define C 1.01346 -#define D 1.2158542 -FORWARD(s_forward); /* spheroid */ - xy.x = C * lp.lam * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi)); - xy.y = C * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / C; - lp.lam = xy.x / (C * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi))); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; - return P; -} -ENTRY0(putp5) P->A = 2.; P->B = 1.; ENDENTRY(setup(P)) -ENTRY0(putp5p) P->A = 1.5; P->B = 0.5; ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_putp6.c b/src/3rdparty/proj/PJ_putp6.c deleted file mode 100644 index 28e82cfd..00000000 --- a/src/3rdparty/proj/PJ_putp6.c +++ /dev/null @@ -1,59 +0,0 @@ -#define PROJ_PARMS__ \ - double C_x, C_y, A, B, D; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl., Sph."; -PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl., Sph."; -#define EPS 1e-10 -#define NITER 10 -#define CON_POLE 1.732050807568877 -FORWARD(s_forward); /* spheroid */ - double p, r, V; - int i; - - p = P->B * sin(lp.phi); - lp.phi *= 1.10265779; - for (i = NITER; i ; --i) { - r = sqrt(1. + lp.phi * lp.phi); - lp.phi -= V = ( (P->A - r) * lp.phi - log(lp.phi + r) - p ) / - (P->A - 2. * r); - if (fabs(V) < EPS) - break; - } - if (!i) - lp.phi = p < 0. ? -CON_POLE : CON_POLE; - xy.x = P->C_x * lp.lam * (P->D - sqrt(1. + lp.phi * lp.phi)); - xy.y = P->C_y * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double r; - - lp.phi = xy.y / P->C_y; - r = sqrt(1. + lp.phi * lp.phi); - lp.lam = xy.x / (P->C_x * (P->D - r)); - lp.phi = aasin( ( (P->A - r) * lp.phi - log(lp.phi + r) ) / P->B); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->es = 0.; - P->inv = s_inverse; - P->fwd = s_forward; - return P; -} -ENTRY0(putp6) - P->C_x = 1.01346; - P->C_y = 0.91910; - P->A = 4.; - P->B = 2.1471437182129378784; - P->D = 2.; -ENDENTRY(setup(P)) -ENTRY0(putp6p) - P->C_x = 0.44329; - P->C_y = 0.80404; - P->A = 6.; - P->B = 5.61125; - P->D = 3.; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_robin.c b/src/3rdparty/proj/PJ_robin.c deleted file mode 100644 index 92f93e4b..00000000 --- a/src/3rdparty/proj/PJ_robin.c +++ /dev/null @@ -1,105 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph."; -#define V(C,z) (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))) -#define DV(C,z) (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)) -/* note: following terms based upon 5 deg. intervals in degrees. */ -static struct COEFS { - float c0, c1, c2, c3; -} X[] = { -1, -5.67239e-12, -7.15511e-05, 3.11028e-06, -0.9986, -0.000482241, -2.4897e-05, -1.33094e-06, -0.9954, -0.000831031, -4.4861e-05, -9.86588e-07, -0.99, -0.00135363, -5.96598e-05, 3.67749e-06, -0.9822, -0.00167442, -4.4975e-06, -5.72394e-06, -0.973, -0.00214869, -9.03565e-05, 1.88767e-08, -0.96, -0.00305084, -9.00732e-05, 1.64869e-06, -0.9427, -0.00382792, -6.53428e-05, -2.61493e-06, -0.9216, -0.00467747, -0.000104566, 4.8122e-06, -0.8962, -0.00536222, -3.23834e-05, -5.43445e-06, -0.8679, -0.00609364, -0.0001139, 3.32521e-06, -0.835, -0.00698325, -6.40219e-05, 9.34582e-07, -0.7986, -0.00755337, -5.00038e-05, 9.35532e-07, -0.7597, -0.00798325, -3.59716e-05, -2.27604e-06, -0.7186, -0.00851366, -7.0112e-05, -8.63072e-06, -0.6732, -0.00986209, -0.000199572, 1.91978e-05, -0.6213, -0.010418, 8.83948e-05, 6.24031e-06, -0.5722, -0.00906601, 0.000181999, 6.24033e-06, -0.5322, 0.,0.,0. }, -Y[] = { -0, 0.0124, 3.72529e-10, 1.15484e-09, -0.062, 0.0124001, 1.76951e-08, -5.92321e-09, -0.124, 0.0123998, -7.09668e-08, 2.25753e-08, -0.186, 0.0124008, 2.66917e-07, -8.44523e-08, -0.248, 0.0123971, -9.99682e-07, 3.15569e-07, -0.31, 0.0124108, 3.73349e-06, -1.1779e-06, -0.372, 0.0123598, -1.3935e-05, 4.39588e-06, -0.434, 0.0125501, 5.20034e-05, -1.00051e-05, -0.4968, 0.0123198, -9.80735e-05, 9.22397e-06, -0.5571, 0.0120308, 4.02857e-05, -5.2901e-06, -0.6176, 0.0120369, -3.90662e-05, 7.36117e-07, -0.6769, 0.0117015, -2.80246e-05, -8.54283e-07, -0.7346, 0.0113572, -4.08389e-05, -5.18524e-07, -0.7903, 0.0109099, -4.86169e-05, -1.0718e-06, -0.8435, 0.0103433, -6.46934e-05, 5.36384e-09, -0.8936, 0.00969679, -6.46129e-05, -8.54894e-06, -0.9394, 0.00840949, -0.000192847, -4.21023e-06, -0.9761, 0.00616525, -0.000256001, -4.21021e-06, -1., 0.,0.,0 }; -#define FXC 0.8487 -#define FYC 1.3523 -#define C1 11.45915590261646417544 -#define RC1 0.08726646259971647884 -#define NODES 18 -#define ONEEPS 1.000001 -#define EPS 1e-8 -FORWARD(s_forward); /* spheroid */ - int i; - double dphi; - - i = floor((dphi = fabs(lp.phi)) * C1); - if (i >= NODES) i = NODES - 1; - dphi = RAD_TO_DEG * (dphi - RC1 * i); - xy.x = V(X[i], dphi) * FXC * lp.lam; - xy.y = V(Y[i], dphi) * FYC; - if (lp.phi < 0.) xy.y = -xy.y; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - int i; - double t, t1; - struct COEFS T; - - lp.lam = xy.x / FXC; - lp.phi = fabs(xy.y / FYC); - if (lp.phi >= 1.) { /* simple pathologic cases */ - if (lp.phi > ONEEPS) I_ERROR - else { - lp.phi = xy.y < 0. ? -HALFPI : HALFPI; - lp.lam /= X[NODES].c0; - } - } else { /* general problem */ - /* in Y space, reduce to table interval */ - for (i = floor(lp.phi * NODES);;) { - if (Y[i].c0 > lp.phi) --i; - else if (Y[i+1].c0 <= lp.phi) ++i; - else break; - } - T = Y[i]; - /* first guess, linear interp */ - t = 5. * (lp.phi - T.c0)/(Y[i+1].c0 - T.c0); - /* make into root */ - T.c0 -= lp.phi; - for (;;) { /* Newton-Raphson reduction */ - t -= t1 = V(T,t) / DV(T,t); - if (fabs(t1) < EPS) - break; - } - lp.phi = (5 * i + t) * DEG_TO_RAD; - if (xy.y < 0.) lp.phi = -lp.phi; - lp.lam /= V(X[i], t); - } - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(robin) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_rpoly.c b/src/3rdparty/proj/PJ_rpoly.c deleted file mode 100644 index 1440327d..00000000 --- a/src/3rdparty/proj/PJ_rpoly.c +++ /dev/null @@ -1,35 +0,0 @@ -#define PROJ_PARMS__ \ - double phi1; \ - double fxa; \ - double fxb; \ - int mode; -#define EPS 1e-9 -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(rpoly, "Rectangular Polyconic") - "\n\tConic, Sph., no inv.\n\tlat_ts="; -FORWARD(s_forward); /* spheroid */ - double fa; - - if (P->mode) - fa = tan(lp.lam * P->fxb) * P->fxa; - else - fa = 0.5 * lp.lam; - if (fabs(lp.phi) < EPS) { - xy.x = fa + fa; - xy.y = - P->phi0; - } else { - xy.y = 1. / tan(lp.phi); - xy.x = sin(fa = 2. * atan(fa * sin(lp.phi))) * xy.y; - xy.y = lp.phi - P->phi0 + (1. - cos(fa)) * xy.y; - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(rpoly) - if ((P->mode = (P->phi1 = fabs(pj_param(P->params, "rlat_ts").f)) > EPS)) { - P->fxb = 0.5 * sin(P->phi1); - P->fxa = 0.5 / P->fxb; - } - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_sconics.c b/src/3rdparty/proj/PJ_sconics.c deleted file mode 100644 index c65635d8..00000000 --- a/src/3rdparty/proj/PJ_sconics.c +++ /dev/null @@ -1,154 +0,0 @@ -#define PROJ_PARMS__ \ - double n; \ - double rho_c; \ - double rho_0; \ - double sig; \ - double c1, c2; \ - int type; -#define PJ_LIB__ -#include <projects.h> -#define EULER 0 -#define MURD1 1 -#define MURD2 2 -#define MURD3 3 -#define PCONIC 4 -#define TISSOT 5 -#define VITK1 6 -#define EPS10 1.e-10 -#define EPS 1e-10 -#define LINE2 "\n\tConic, Sph\n\tlat_1= and lat_2=" -PROJ_HEAD(tissot, "Tissot") - LINE2; -PROJ_HEAD(murd1, "Murdoch I") - LINE2; -PROJ_HEAD(murd2, "Murdoch II") - LINE2; -PROJ_HEAD(murd3, "Murdoch III") - LINE2; -PROJ_HEAD(euler, "Euler") - LINE2; -PROJ_HEAD(pconic, "Perspective Conic") - LINE2; -PROJ_HEAD(vitk1, "Vitkovsky I") - LINE2; -/* get common factors for simple conics */ - static int -phi12(PJ *P, double *del) { - double p1, p2; - int err = 0; - - if (!pj_param(P->params, "tlat_1").i || - !pj_param(P->params, "tlat_2").i) { - err = -41; - } else { - p1 = pj_param(P->params, "rlat_1").f; - p2 = pj_param(P->params, "rlat_2").f; - *del = 0.5 * (p2 - p1); - P->sig = 0.5 * (p2 + p1); - err = (fabs(*del) < EPS || fabs(P->sig) < EPS) ? -42 : 0; - *del = *del; - } - return err; -} -FORWARD(s_forward); /* spheroid */ - double rho; - - switch (P->type) { - case MURD2: - rho = P->rho_c + tan(P->sig - lp.phi); - break; - case PCONIC: - rho = P->c2 * (P->c1 - tan(lp.phi)); - break; - default: - rho = P->rho_c - lp.phi; - break; - } - xy.x = rho * sin( lp.lam *= P->n ); - xy.y = P->rho_0 - rho * cos(lp.lam); - return (xy); -} -INVERSE(s_inverse); /* ellipsoid & spheroid */ - double rho; - - rho = hypot(xy.x, xy.y = P->rho_0 - xy.y); - if (P->n < 0.) { - rho = - rho; - xy.x = - xy.x; - xy.y = - xy.y; - } - lp.lam = atan2(xy.x, xy.y) / P->n; - switch (P->type) { - case PCONIC: - lp.phi = atan(P->c1 - rho / P->c2) + P->sig; - break; - case MURD2: - lp.phi = P->sig - atan(rho - P->rho_c); - break; - default: - lp.phi = P->rho_c - rho; - } - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - double del, cs; - int i; - - if( (i = phi12(P, &del)) ) - E_ERROR(i); - switch (P->type) { - case TISSOT: - P->n = sin(P->sig); - cs = cos(del); - P->rho_c = P->n / cs + cs / P->n; - P->rho_0 = sqrt((P->rho_c - 2 * sin(P->phi0))/P->n); - break; - case MURD1: - P->rho_c = sin(del)/(del * tan(P->sig)) + P->sig; - P->rho_0 = P->rho_c - P->phi0; - P->n = sin(P->sig); - break; - case MURD2: - P->rho_c = (cs = sqrt(cos(del))) / tan(P->sig); - P->rho_0 = P->rho_c + tan(P->sig - P->phi0); - P->n = sin(P->sig) * cs; - break; - case MURD3: - P->rho_c = del / (tan(P->sig) * tan(del)) + P->sig; - P->rho_0 = P->rho_c - P->phi0; - P->n = sin(P->sig) * sin(del) * tan(del) / (del * del); - break; - case EULER: - P->n = sin(P->sig) * sin(del) / del; - del *= 0.5; - P->rho_c = del / (tan(del) * tan(P->sig)) + P->sig; - P->rho_0 = P->rho_c - P->phi0; - break; - case PCONIC: - P->n = sin(P->sig); - P->c2 = cos(del); - P->c1 = 1./tan(P->sig); - if (fabs(del = P->phi0 - P->sig) - EPS10 >= HALFPI) - E_ERROR(-43); - P->rho_0 = P->c2 * (P->c1 - tan(del)); - break; - case VITK1: - P->n = (cs = tan(del)) * sin(P->sig) / del; - P->rho_c = del / (cs * tan(P->sig)) + P->sig; - P->rho_0 = P->rho_c - P->phi0; - break; - } - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0; - return (P); -} -ENTRY0(euler) P->type = EULER; ENDENTRY(setup(P)) -ENTRY0(tissot) P->type = TISSOT; ENDENTRY(setup(P)) -ENTRY0(murd1) P->type = MURD1; ENDENTRY(setup(P)) -ENTRY0(murd2) P->type = MURD2; ENDENTRY(setup(P)) -ENTRY0(murd3) P->type = MURD3; ENDENTRY(setup(P)) -ENTRY0(pconic) P->type = PCONIC; ENDENTRY(setup(P)) -ENTRY0(vitk1) P->type = VITK1; ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_somerc.c b/src/3rdparty/proj/PJ_somerc.c deleted file mode 100644 index d419e653..00000000 --- a/src/3rdparty/proj/PJ_somerc.c +++ /dev/null @@ -1,66 +0,0 @@ -#define PROJ_PARMS__ \ - double K, c, hlf_e, kR, cosp0, sinp0; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(somerc, "Swiss. Obl. Mercator") "\n\tCyl, Ell\n\tFor CH1903"; -#define EPS 1.e-10 -#define NITER 6 -FORWARD(e_forward); - double phip, lamp, phipp, lampp, sp, cp; - - sp = P->e * sin(lp.phi); - phip = 2.* atan( exp( P->c * ( - log(tan(FORTPI + 0.5 * lp.phi)) - P->hlf_e * log((1. + sp)/(1. - sp))) - + P->K)) - HALFPI; - lamp = P->c * lp.lam; - cp = cos(phip); - phipp = aasin(P->cosp0 * sin(phip) - P->sinp0 * cp * cos(lamp)); - lampp = aasin(cp * sin(lamp) / cos(phipp)); - xy.x = P->kR * lampp; - xy.y = P->kR * log(tan(FORTPI + 0.5 * phipp)); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid & spheroid */ - double phip, lamp, phipp, lampp, cp, esp, con, delp; - int i; - - phipp = 2. * (atan(exp(xy.y / P->kR)) - FORTPI); - lampp = xy.x / P->kR; - cp = cos(phipp); - phip = aasin(P->cosp0 * sin(phipp) + P->sinp0 * cp * cos(lampp)); - lamp = aasin(cp * sin(lampp) / cos(phip)); - con = (P->K - log(tan(FORTPI + 0.5 * phip)))/P->c; - for (i = NITER; i ; --i) { - esp = P->e * sin(phip); - delp = (con + log(tan(FORTPI + 0.5 * phip)) - P->hlf_e * - log((1. + esp)/(1. - esp)) ) * - (1. - esp * esp) * cos(phip) * P->rone_es; - phip -= delp; - if (fabs(delp) < EPS) - break; - } - if (i) { - lp.phi = phip; - lp.lam = lamp / P->c; - } else - I_ERROR - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(somerc) - double cp, phip0, sp; - - P->hlf_e = 0.5 * P->e; - cp = cos(P->phi0); - cp *= cp; - P->c = sqrt(1 + P->es * cp * cp * P->rone_es); - sp = sin(P->phi0); - P->cosp0 = cos( phip0 = aasin(P->sinp0 = sp / P->c) ); - sp *= P->e; - P->K = log(tan(FORTPI + 0.5 * phip0)) - P->c * ( - log(tan(FORTPI + 0.5 * P->phi0)) - P->hlf_e * - log((1. + sp) / (1. - sp))); - P->kR = P->k0 * sqrt(P->one_es) / (1. - sp * sp); - P->inv = e_inverse; - P->fwd = e_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_stere.c b/src/3rdparty/proj/PJ_stere.c deleted file mode 100644 index a31bf97b..00000000 --- a/src/3rdparty/proj/PJ_stere.c +++ /dev/null @@ -1,241 +0,0 @@ -#define PROJ_PARMS__ \ - double phits; \ - double sinX1; \ - double cosX1; \ - double akm1; \ - int mode; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(stere, "Stereographic") "\n\tAzi, Sph&Ell\n\tlat_ts="; -PROJ_HEAD(ups, "Universal Polar Stereographic") "\n\tAzi, Sph&Ell\n\tsouth"; -#define sinph0 P->sinX1 -#define cosph0 P->cosX1 -#define EPS10 1.e-10 -#define TOL 1.e-8 -#define NITER 8 -#define CONV 1.e-10 -#define S_POLE 0 -#define N_POLE 1 -#define OBLIQ 2 -#define EQUIT 3 - static double -ssfn_(double phit, double sinphi, double eccen) { - sinphi *= eccen; - return (tan (.5 * (HALFPI + phit)) * - pow((1. - sinphi) / (1. + sinphi), .5 * eccen)); -} -FORWARD(e_forward); /* ellipsoid */ - double coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi; - - coslam = cos(lp.lam); - sinlam = sin(lp.lam); - sinphi = sin(lp.phi); - if (P->mode == OBLIQ || P->mode == EQUIT) { - sinX = sin(X = 2. * atan(ssfn_(lp.phi, sinphi, P->e)) - HALFPI); - cosX = cos(X); - } - switch (P->mode) { - case OBLIQ: - A = P->akm1 / (P->cosX1 * (1. + P->sinX1 * sinX + - P->cosX1 * cosX * coslam)); - xy.y = A * (P->cosX1 * sinX - P->sinX1 * cosX * coslam); - goto xmul; - case EQUIT: - A = 2. * P->akm1 / (1. + cosX * coslam); - xy.y = A * sinX; -xmul: - xy.x = A * cosX; - break; - case S_POLE: - lp.phi = -lp.phi; - coslam = - coslam; - sinphi = -sinphi; - case N_POLE: - xy.x = P->akm1 * pj_tsfn(lp.phi, sinphi, P->e); - xy.y = - xy.x * coslam; - break; - } - xy.x = xy.x * sinlam; - return (xy); -} -FORWARD(s_forward); /* spheroid */ - double sinphi, cosphi, coslam, sinlam; - - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - sinlam = sin(lp.lam); - switch (P->mode) { - case EQUIT: - xy.y = 1. + cosphi * coslam; - goto oblcon; - case OBLIQ: - xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; -oblcon: - if (xy.y <= EPS10) F_ERROR; - xy.x = (xy.y = P->akm1 / xy.y) * cosphi * sinlam; - xy.y *= (P->mode == EQUIT) ? sinphi : - cosph0 * sinphi - sinph0 * cosphi * coslam; - break; - case N_POLE: - coslam = - coslam; - lp.phi = - lp.phi; - case S_POLE: - if (fabs(lp.phi - HALFPI) < TOL) F_ERROR; - xy.x = sinlam * ( xy.y = P->akm1 * tan(FORTPI + .5 * lp.phi) ); - xy.y *= coslam; - break; - } - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0; - int i; - - rho = hypot(xy.x, xy.y); - switch (P->mode) { - case OBLIQ: - case EQUIT: - cosphi = cos( tp = 2. * atan2(rho * P->cosX1 , P->akm1) ); - sinphi = sin(tp); - if( rho == 0.0 ) - phi_l = asin(cosphi * P->sinX1); - else - phi_l = asin(cosphi * P->sinX1 + (xy.y * sinphi * P->cosX1 / rho)); - - tp = tan(.5 * (HALFPI + phi_l)); - xy.x *= sinphi; - xy.y = rho * P->cosX1 * cosphi - xy.y * P->sinX1* sinphi; - halfpi = HALFPI; - halfe = .5 * P->e; - break; - case N_POLE: - xy.y = -xy.y; - case S_POLE: - phi_l = HALFPI - 2. * atan(tp = - rho / P->akm1); - halfpi = -HALFPI; - halfe = -.5 * P->e; - break; - } - for (i = NITER; i--; phi_l = lp.phi) { - sinphi = P->e * sin(phi_l); - lp.phi = 2. * atan(tp * pow((1.+sinphi)/(1.-sinphi), - halfe)) - halfpi; - if (fabs(phi_l - lp.phi) < CONV) { - if (P->mode == S_POLE) - lp.phi = -lp.phi; - lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y); - return (lp); - } - } - I_ERROR; -} -INVERSE(s_inverse); /* spheroid */ - double c, rh, sinc, cosc; - - sinc = sin(c = 2. * atan((rh = hypot(xy.x, xy.y)) / P->akm1)); - cosc = cos(c); - lp.lam = 0.; - switch (P->mode) { - case EQUIT: - if (fabs(rh) <= EPS10) - lp.phi = 0.; - else - lp.phi = asin(xy.y * sinc / rh); - if (cosc != 0. || xy.x != 0.) - lp.lam = atan2(xy.x * sinc, cosc * rh); - break; - case OBLIQ: - if (fabs(rh) <= EPS10) - lp.phi = P->phi0; - else - lp.phi = asin(cosc * sinph0 + xy.y * sinc * cosph0 / rh); - if ((c = cosc - sinph0 * sin(lp.phi)) != 0. || xy.x != 0.) - lp.lam = atan2(xy.x * sinc * cosph0, c * rh); - break; - case N_POLE: - xy.y = -xy.y; - case S_POLE: - if (fabs(rh) <= EPS10) - lp.phi = P->phi0; - else - lp.phi = asin(P->mode == S_POLE ? - cosc : cosc); - lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y); - break; - } - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { /* general initialization */ - double t; - - if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10) - P->mode = P->phi0 < 0. ? S_POLE : N_POLE; - else - P->mode = t > EPS10 ? OBLIQ : EQUIT; - P->phits = fabs(P->phits); - if (P->es) { - double X; - - switch (P->mode) { - case N_POLE: - case S_POLE: - if (fabs(P->phits - HALFPI) < EPS10) - P->akm1 = 2. * P->k0 / - sqrt(pow(1+P->e,1+P->e)*pow(1-P->e,1-P->e)); - else { - P->akm1 = cos(P->phits) / - pj_tsfn(P->phits, t = sin(P->phits), P->e); - t *= P->e; - P->akm1 /= sqrt(1. - t * t); - } - break; - case EQUIT: - P->akm1 = 2. * P->k0; - break; - case OBLIQ: - t = sin(P->phi0); - X = 2. * atan(ssfn_(P->phi0, t, P->e)) - HALFPI; - t *= P->e; - P->akm1 = 2. * P->k0 * cos(P->phi0) / sqrt(1. - t * t); - P->sinX1 = sin(X); - P->cosX1 = cos(X); - break; - } - P->inv = e_inverse; - P->fwd = e_forward; - } else { - switch (P->mode) { - case OBLIQ: - sinph0 = sin(P->phi0); - cosph0 = cos(P->phi0); - case EQUIT: - P->akm1 = 2. * P->k0; - break; - case S_POLE: - case N_POLE: - P->akm1 = fabs(P->phits - HALFPI) >= EPS10 ? - cos(P->phits) / tan(FORTPI - .5 * P->phits) : - 2. * P->k0 ; - break; - } - P->inv = s_inverse; - P->fwd = s_forward; - } - return P; -} -ENTRY0(stere) - P->phits = pj_param(P->params, "tlat_ts").i ? - P->phits = pj_param(P->params, "rlat_ts").f : HALFPI; -ENDENTRY(setup(P)) -ENTRY0(ups) - /* International Ellipsoid */ - P->phi0 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; - if (!P->es) E_ERROR(-34); - P->k0 = .994; - P->x0 = 2000000.; - P->y0 = 2000000.; - P->phits = HALFPI; - P->lam0 = 0.; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_sterea.c b/src/3rdparty/proj/PJ_sterea.c deleted file mode 100644 index 162acf02..00000000 --- a/src/3rdparty/proj/PJ_sterea.c +++ /dev/null @@ -1,82 +0,0 @@ -/* -** libproj -- library of cartographic projections -** -** Copyright (c) 2003 Gerald I. Evenden -*/ -static const char -LIBPROJ_ID[] = "$Id: PJ_sterea.c 1504 2009-01-06 02:11:57Z warmerdam $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#define PROJ_PARMS__ \ - double phic0; \ - double cosc0, sinc0; \ - double R2; \ - void *en; - -#define PJ_LIB__ -#include <projects.h> - -PROJ_HEAD(sterea, "Oblique Stereographic Alternative") "\n\tAzimuthal, Sph&Ell"; - -# define DEL_TOL 1.e-14 -# define MAX_ITER 10 - -FORWARD(e_forward); /* ellipsoid */ - double cosphi, sinphi, coslam, k; - - lp = pj_gauss(lp, P->en); - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - coslam = cos(lp.lam); - k = P->k0 * P->R2 / (1. + P->sinc0 * sinphi + P->cosc0 * cosphi * coslam); - xy.x = k * cosphi * sin(lp.lam); - xy.y = k * (P->cosc0 * sinphi - P->sinc0 * cosphi * coslam); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double rho, c, sincc, coscc; - - xy.x /= P->k0; - xy.y /= P->k0; - if((rho = hypot(xy.x, xy.y))) { - c = 2. * atan2(rho, P->R2); - sincc = sin(c); - coscc = cos(c); - lp.phi = asin(coscc * P->sinc0 + xy.y * sincc * P->cosc0 / rho); - lp.lam = atan2(xy.x * sincc, rho * P->cosc0 * coscc - - xy.y * P->sinc0 * sincc); - } else { - lp.phi = P->phic0; - lp.lam = 0.; - } - return(pj_inv_gauss(lp, P->en)); -} -FREEUP; if (P) { if (P->en) free(P->en); free(P); } } -ENTRY0(sterea) - double R; - - if (!(P->en = pj_gauss_ini(P->e, P->phi0, &(P->phic0), &R))) E_ERROR_0; - P->sinc0 = sin(P->phic0); - P->cosc0 = cos(P->phic0); - P->R2 = 2. * R; - P->inv = e_inverse; - P->fwd = e_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_sts.c b/src/3rdparty/proj/PJ_sts.c deleted file mode 100644 index f1557feb..00000000 --- a/src/3rdparty/proj/PJ_sts.c +++ /dev/null @@ -1,54 +0,0 @@ -#define PROJ_PARMS__ \ - double C_x, C_y, C_p; \ - int tan_mode; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph."; -PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph."; -PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph."; -PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph."; -FORWARD(s_forward); /* spheroid */ - double c; - - xy.x = P->C_x * lp.lam * cos(lp.phi); - xy.y = P->C_y; - lp.phi *= P->C_p; - c = cos(lp.phi); - if (P->tan_mode) { - xy.x *= c * c; - xy.y *= tan(lp.phi); - } else { - xy.x /= c; - xy.y *= sin(lp.phi); - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double c; - - xy.y /= P->C_y; - c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(xy.y)); - lp.phi /= P->C_p; - lp.lam = xy.x / (P->C_x * cos(lp.phi)); - if (P->tan_mode) - lp.lam /= c * c; - else - lp.lam *= c; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P, double p, double q, int mode) { - P->es = 0.; - P->inv = s_inverse; - P->fwd = s_forward; - P->C_x = q / p; - P->C_y = p; - P->C_p = 1/ q; - P->tan_mode = mode; - return P; -} -ENTRY0(kav5) ENDENTRY(setup(P, 1.50488, 1.35439, 0)) -ENTRY0(qua_aut) ENDENTRY(setup(P, 2., 2., 0)) -ENTRY0(mbt_s) ENDENTRY(setup(P, 1.48875, 1.36509, 0)) -ENTRY0(fouc) ENDENTRY(setup(P, 2., 2., 1)) diff --git a/src/3rdparty/proj/PJ_tcc.c b/src/3rdparty/proj/PJ_tcc.c deleted file mode 100644 index 00cdb556..00000000 --- a/src/3rdparty/proj/PJ_tcc.c +++ /dev/null @@ -1,17 +0,0 @@ -#define PROJ_PARMS__ \ - double ap; -#define EPS10 1.e-10 -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv."; -FORWARD(s_forward); /* spheroid */ - double b, bt; - - b = cos(lp.phi) * sin(lp.lam); - if ((bt = 1. - b * b) < EPS10) F_ERROR; - xy.x = b / sqrt(bt); - xy.y = atan2(tan(lp.phi) , cos(lp.lam)); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(tcc) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_tcea.c b/src/3rdparty/proj/PJ_tcea.c deleted file mode 100644 index 3626fa17..00000000 --- a/src/3rdparty/proj/PJ_tcea.c +++ /dev/null @@ -1,27 +0,0 @@ -#define PROJ_PARMS__ \ - double rk0; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") "\n\tCyl, Sph"; -FORWARD(s_forward); /* spheroid */ - xy.x = P->rk0 * cos(lp.phi) * sin(lp.lam); - xy.y = P->k0 * (atan2(tan(lp.phi), cos(lp.lam)) - P->phi0); - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double t; - - xy.y = xy.y * P->rk0 + P->phi0; - xy.x *= P->k0; - t = sqrt(1. - xy.x * xy.x); - lp.phi = asin(t * sin(xy.y)); - lp.lam = atan2(xy.x, t * cos(xy.y)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(tcea) - P->rk0 = 1 / P->k0; - P->inv = s_inverse; - P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_tmerc.c b/src/3rdparty/proj/PJ_tmerc.c deleted file mode 100644 index 14cf2e8e..00000000 --- a/src/3rdparty/proj/PJ_tmerc.c +++ /dev/null @@ -1,175 +0,0 @@ -#define PROJ_PARMS__ \ - double esp; \ - double ml0; \ - double *en; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(tmerc, "Transverse Mercator") "\n\tCyl, Sph&Ell"; -PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") - "\n\tCyl, Sph\n\tzone= south"; -#define EPS10 1.e-10 -#define aks0 P->esp -#define aks5 P->ml0 -#define FC1 1. -#define FC2 .5 -#define FC3 .16666666666666666666 -#define FC4 .08333333333333333333 -#define FC5 .05 -#define FC6 .03333333333333333333 -#define FC7 .02380952380952380952 -#define FC8 .01785714285714285714 -FORWARD(e_forward); /* ellipse */ - double al, als, n, cosphi, sinphi, t; - - /* - * Fail if our longitude is more than 90 degrees from the - * central meridian since the results are essentially garbage. - * Is error -20 really an appropriate return value? - * - * http://trac.osgeo.org/proj/ticket/5 - */ - if( lp.lam < -HALFPI || lp.lam > HALFPI ) - { - xy.x = HUGE_VAL; - xy.y = HUGE_VAL; - pj_errno = -14; - return xy; - } - - sinphi = sin(lp.phi); cosphi = cos(lp.phi); - t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.; - t *= t; - al = cosphi * lp.lam; - als = al * al; - al /= sqrt(1. - P->es * sinphi * sinphi); - n = P->esp * cosphi * cosphi; - xy.x = P->k0 * al * (FC1 + - FC3 * als * (1. - t + n + - FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t) - + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) ) - ))); - xy.y = P->k0 * (pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->ml0 + - sinphi * al * lp.lam * FC2 * ( 1. + - FC4 * als * (5. - t + n * (9. + 4. * n) + - FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t) - + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) ) - )))); - return (xy); -} -FORWARD(s_forward); /* sphere */ - double b, cosphi; - - /* - * Fail if our longitude is more than 90 degrees from the - * central meridian since the results are essentially garbage. - * Is error -20 really an appropriate return value? - * - * http://trac.osgeo.org/proj/ticket/5 - */ - if( lp.lam < -HALFPI || lp.lam > HALFPI ) - { - xy.x = HUGE_VAL; - xy.y = HUGE_VAL; - pj_errno = -14; - return xy; - } - - b = (cosphi = cos(lp.phi)) * sin(lp.lam); - if (fabs(fabs(b) - 1.) <= EPS10) F_ERROR; - xy.x = aks5 * log((1. + b) / (1. - b)); - if ((b = fabs( xy.y = cosphi * cos(lp.lam) / sqrt(1. - b * b) )) >= 1.) { - if ((b - 1.) > EPS10) F_ERROR - else xy.y = 0.; - } else - xy.y = acos(xy.y); - if (lp.phi < 0.) xy.y = -xy.y; - xy.y = aks0 * (xy.y - P->phi0); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double n, con, cosphi, d, ds, sinphi, t; - - lp.phi = pj_inv_mlfn(P->ml0 + xy.y / P->k0, P->es, P->en); - if (fabs(lp.phi) >= HALFPI) { - lp.phi = xy.y < 0. ? -HALFPI : HALFPI; - lp.lam = 0.; - } else { - sinphi = sin(lp.phi); - cosphi = cos(lp.phi); - t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.; - n = P->esp * cosphi * cosphi; - d = xy.x * sqrt(con = 1. - P->es * sinphi * sinphi) / P->k0; - con *= t; - t *= t; - ds = d * d; - lp.phi -= (con * ds / (1.-P->es)) * FC2 * (1. - - ds * FC4 * (5. + t * (3. - 9. * n) + n * (1. - 4 * n) - - ds * FC6 * (61. + t * (90. - 252. * n + - 45. * t) + 46. * n - - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) ) - ))); - lp.lam = d*(FC1 - - ds*FC3*( 1. + 2.*t + n - - ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n - - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) ) - ))) / cosphi; - } - return (lp); -} -INVERSE(s_inverse); /* sphere */ - double h, g; - - h = exp(xy.x / aks0); - g = .5 * (h - 1. / h); - h = cos(P->phi0 + xy.y / aks0); - lp.phi = asin(sqrt((1. - h * h) / (1. + g * g))); - if (xy.y < 0.) lp.phi = -lp.phi; - lp.lam = (g || h) ? atan2(g, h) : 0.; - return (lp); -} -FREEUP; - if (P) { - if (P->en) - pj_dalloc(P->en); - pj_dalloc(P); - } -} - static PJ * -setup(PJ *P) { /* general initialization */ - if (P->es) { - if (!(P->en = pj_enfn(P->es))) - E_ERROR_0; - P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); - P->esp = P->es / (1. - P->es); - P->inv = e_inverse; - P->fwd = e_forward; - } else { - aks0 = P->k0; - aks5 = .5 * aks0; - P->inv = s_inverse; - P->fwd = s_forward; - } - return P; -} -ENTRY1(tmerc, en) -ENDENTRY(setup(P)) -ENTRY1(utm, en) - int zone; - - if (!P->es) E_ERROR(-34); - P->y0 = pj_param(P->params, "bsouth").i ? 10000000. : 0.; - P->x0 = 500000.; - if (pj_param(P->params, "tzone").i) /* zone input ? */ - if ((zone = pj_param(P->params, "izone").i) > 0 && zone <= 60) - --zone; - else - E_ERROR(-35) - else /* nearest central meridian input */ - if ((zone = floor((adjlon(P->lam0) + PI) * 30. / PI)) < 0) - zone = 0; - else if (zone >= 60) - zone = 59; - P->lam0 = (zone + .5) * PI / 30. - PI; - P->k0 = 0.9996; - P->phi0 = 0.; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_tpeqd.c b/src/3rdparty/proj/PJ_tpeqd.c deleted file mode 100644 index b4e76aa0..00000000 --- a/src/3rdparty/proj/PJ_tpeqd.c +++ /dev/null @@ -1,76 +0,0 @@ -#define PROJ_PARMS__ \ - double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2; \ - double hz0, thz0, rhshz0, ca, sa, lp, lamc; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(tpeqd, "Two Point Equidistant") - "\n\tMisc Sph\n\tlat_1= lon_1= lat_2= lon_2="; -FORWARD(s_forward); /* sphere */ - double t, z1, z2, dl1, dl2, sp, cp; - - sp = sin(lp.phi); - cp = cos(lp.phi); - z1 = aacos(P->sp1 * sp + P->cp1 * cp * cos(dl1 = lp.lam + P->dlam2)); - z2 = aacos(P->sp2 * sp + P->cp2 * cp * cos(dl2 = lp.lam - P->dlam2)); - z1 *= z1; - z2 *= z2; - xy.x = P->r2z0 * (t = z1 - z2); - t = P->z02 - t; - xy.y = P->r2z0 * asqrt(4. * P->z02 * z2 - t * t); - if ((P->ccs * sp - cp * (P->cs * sin(dl1) - P->sc * sin(dl2))) < 0.) - xy.y = -xy.y; - return xy; -} -INVERSE(s_inverse); /* sphere */ - double cz1, cz2, s, d, cp, sp; - - cz1 = cos(hypot(xy.y, xy.x + P->hz0)); - cz2 = cos(hypot(xy.y, xy.x - P->hz0)); - s = cz1 + cz2; - d = cz1 - cz2; - lp.lam = - atan2(d, (s * P->thz0)); - lp.phi = aacos(hypot(P->thz0 * s, d) * P->rhshz0); - if ( xy.y < 0. ) - lp.phi = - lp.phi; - /* lam--phi now in system relative to P1--P2 base equator */ - sp = sin(lp.phi); - cp = cos(lp.phi); - lp.phi = aasin(P->sa * sp + P->ca * cp * (s = cos(lp.lam -= P->lp))); - lp.lam = atan2(cp * sin(lp.lam), P->sa * cp * s - P->ca * sp) + P->lamc; - return lp; -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(tpeqd) - double lam_1, lam_2, phi_1, phi_2, A12, pp; - - /* get control point locations */ - phi_1 = pj_param(P->params, "rlat_1").f; - lam_1 = pj_param(P->params, "rlon_1").f; - phi_2 = pj_param(P->params, "rlat_2").f; - lam_2 = pj_param(P->params, "rlon_2").f; - if (phi_1 == phi_2 && lam_1 == lam_2) E_ERROR(-25); - P->lam0 = adjlon(0.5 * (lam_1 + lam_2)); - P->dlam2 = adjlon(lam_2 - lam_1); - P->cp1 = cos(phi_1); - P->cp2 = cos(phi_2); - P->sp1 = sin(phi_1); - P->sp2 = sin(phi_2); - P->cs = P->cp1 * P->sp2; - P->sc = P->sp1 * P->cp2; - P->ccs = P->cp1 * P->cp2 * sin(P->dlam2); - P->z02 = aacos(P->sp1 * P->sp2 + P->cp1 * P->cp2 * cos(P->dlam2)); - P->hz0 = .5 * P->z02; - A12 = atan2(P->cp2 * sin(P->dlam2), - P->cp1 * P->sp2 - P->sp1 * P->cp2 * cos(P->dlam2)); - P->ca = cos(pp = aasin(P->cp1 * sin(A12))); - P->sa = sin(pp); - P->lp = adjlon(atan2(P->cp1 * cos(A12), P->sp1) - P->hz0); - P->dlam2 *= .5; - P->lamc = HALFPI - atan2(sin(A12) * P->sp1, cos(A12)) - P->dlam2; - P->thz0 = tan(P->hz0); - P->rhshz0 = .5 / sin(P->hz0); - P->r2z0 = 0.5 / P->z02; - P->z02 *= P->z02; - P->inv = s_inverse; P->fwd = s_forward; - P->es = 0.; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_urm5.c b/src/3rdparty/proj/PJ_urm5.c deleted file mode 100644 index 70a5a1d6..00000000 --- a/src/3rdparty/proj/PJ_urm5.c +++ /dev/null @@ -1,28 +0,0 @@ -#define PROJ_PARMS__ \ - double m, rmn, q3, n; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph.\n\tn= q= alphi="; -FORWARD(s_forward); /* spheroid */ - double t; - - t = lp.phi = aasin(P->n * sin(lp.phi)); - xy.x = P->m * lp.lam * cos(lp.phi); - t *= t; - xy.y = lp.phi * (1. + t * P->q3) * P->rmn; - return xy; -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(urm5) - double alpha, t; - - P->n = pj_param(P->params, "dn").f; - P->q3 = pj_param(P->params, "dq").f / 3.; - alpha = pj_param(P->params, "ralpha").f; - t = P->n * sin(alpha); - P->m = cos(alpha) / sqrt(1. - t * t); - P->rmn = 1. / (P->m * P->n); - P->es = 0.; - P->inv = 0; - P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_urmfps.c b/src/3rdparty/proj/PJ_urmfps.c deleted file mode 100644 index 4a4f31a9..00000000 --- a/src/3rdparty/proj/PJ_urmfps.c +++ /dev/null @@ -1,40 +0,0 @@ -#define PROJ_PARMS__ \ - double n, C_y; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph.\n\tn="; -PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph."; -#define C_x 0.8773826753 -#define Cy 1.139753528477 -FORWARD(s_forward); /* sphere */ - lp.phi = aasin(P->n * sin(lp.phi)); - xy.x = C_x * lp.lam * cos(lp.phi); - xy.y = P->C_y * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* sphere */ - xy.y /= P->C_y; - lp.phi = aasin(sin(xy.y) / P->n); - lp.lam = xy.x / (C_x * cos(xy.y)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } - static PJ * -setup(PJ *P) { - P->C_y = Cy / P->n; - P->es = 0.; - P->inv = s_inverse; - P->fwd = s_forward; - return P; -} -ENTRY0(urmfps) - if (pj_param(P->params, "tn").i) { - P->n = pj_param(P->params, "dn").f; - if (P->n <= 0. || P->n > 1.) - E_ERROR(-40) - } else - E_ERROR(-40) -ENDENTRY(setup(P)) -ENTRY0(wag1) - P->n = 0.8660254037844386467637231707; -ENDENTRY(setup(P)) diff --git a/src/3rdparty/proj/PJ_vandg.c b/src/3rdparty/proj/PJ_vandg.c deleted file mode 100644 index 784674b7..00000000 --- a/src/3rdparty/proj/PJ_vandg.c +++ /dev/null @@ -1,78 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(vandg, "van der Grinten (I)") "\n\tMisc Sph"; -# define TOL 1.e-10 -# define THIRD .33333333333333333333 -# define TWO_THRD .66666666666666666666 -# define C2_27 .07407407407407407407 -# define PI4_3 4.18879020478639098458 -# define PISQ 9.86960440108935861869 -# define TPISQ 19.73920880217871723738 -# define HPISQ 4.93480220054467930934 -FORWARD(s_forward); /* spheroid */ - double al, al2, g, g2, p2; - - p2 = fabs(lp.phi / HALFPI); - if ((p2 - TOL) > 1.) F_ERROR; - if (p2 > 1.) - p2 = 1.; - if (fabs(lp.phi) <= TOL) { - xy.x = lp.lam; - xy.y = 0.; - } else if (fabs(lp.lam) <= TOL || fabs(p2 - 1.) < TOL) { - xy.x = 0.; - xy.y = PI * tan(.5 * asin(p2)); - if (lp.phi < 0.) xy.y = -xy.y; - } else { - al = .5 * fabs(PI / lp.lam - lp.lam / PI); - al2 = al * al; - g = sqrt(1. - p2 * p2); - g = g / (p2 + g - 1.); - g2 = g * g; - p2 = g * (2. / p2 - 1.); - p2 = p2 * p2; - xy.x = g - p2; g = p2 + al2; - xy.x = PI * (al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g; - if (lp.lam < 0.) xy.x = -xy.x; - xy.y = fabs(xy.x / PI); - xy.y = 1. - xy.y * (xy.y + 2. * al); - if (xy.y < -TOL) F_ERROR; - if (xy.y < 0.) xy.y = 0.; - else xy.y = sqrt(xy.y) * (lp.phi < 0. ? -PI : PI); - } - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2; - - x2 = xy.x * xy.x; - if ((ay = fabs(xy.y)) < TOL) { - lp.phi = 0.; - t = x2 * x2 + TPISQ * (x2 + HPISQ); - lp.lam = fabs(xy.x) <= TOL ? 0. : - .5 * (x2 - PISQ + sqrt(t)) / xy.x; - return (lp); - } - y2 = xy.y * xy.y; - r = x2 + y2; r2 = r * r; - c1 = - PI * ay * (r + PISQ); - c3 = r2 + TWOPI * (ay * r + PI * (y2 + PI * (ay + HALFPI))); - c2 = c1 + PISQ * (r - 3. * y2); - c0 = PI * ay; - c2 /= c3; - al = c1 / c3 - THIRD * c2 * c2; - m = 2. * sqrt(-THIRD * al); - d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; - if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) { - d = t > 1. ? (d > 0. ? 0. : PI) : acos(d); - lp.phi = PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2); - if (xy.y < 0.) lp.phi = -lp.phi; - t = r2 + TPISQ * (x2 - y2 + HPISQ); - lp.lam = fabs(xy.x) <= TOL ? 0. : - .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x; - } else - I_ERROR; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(vandg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_vandg2.c b/src/3rdparty/proj/PJ_vandg2.c deleted file mode 100644 index 7bfa8f4e..00000000 --- a/src/3rdparty/proj/PJ_vandg2.c +++ /dev/null @@ -1,45 +0,0 @@ -# define TOL 1e-10 -# define TWORPI 0.63661977236758134308 -#define PROJ_PARMS__ \ - int vdg3; -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv."; -PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv."; -FORWARD(s_forward); /* spheroid */ - double x1, at, bt, ct; - - bt = fabs(TWORPI * lp.phi); - if ((ct = 1. - bt * bt) < 0.) - ct = 0.; - else - ct = sqrt(ct); - if (fabs(lp.lam) < TOL) { - xy.x = 0.; - xy.y = PI * (lp.phi < 0. ? -bt : bt) / (1. + ct); - } else { - at = 0.5 * fabs(PI / lp.lam - lp.lam / PI); - if (P->vdg3) { - x1 = bt / (1. + ct); - xy.x = PI * (sqrt(at * at + 1. - x1 * x1) - at); - xy.y = PI * x1; - } else { - x1 = (ct * sqrt(1. + at * at) - at * ct * ct) / - (1. + at * at * bt * bt); - xy.x = PI * x1; - xy.y = PI * sqrt(1. - x1 * (x1 + 2. * at) + TOL); - } - if ( lp.lam < 0.) xy.x = -xy.x; - if ( lp.phi < 0.) xy.y = -xy.y; - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(vandg2) - P->vdg3 = 0; - P->inv = 0; P->fwd = s_forward; -ENDENTRY(P) -ENTRY0(vandg3) - P->vdg3 = 1; - P->es = 0.; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_vandg4.c b/src/3rdparty/proj/PJ_vandg4.c deleted file mode 100644 index d6705031..00000000 --- a/src/3rdparty/proj/PJ_vandg4.c +++ /dev/null @@ -1,41 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv."; -#define TOL 1e-10 -#define TWORPI 0.63661977236758134308 -FORWARD(s_forward); /* spheroid */ - double x1, t, bt, ct, ft, bt2, ct2, dt, dt2; - - if (fabs(lp.phi) < TOL) { - xy.x = lp.lam; - xy.y = 0.; - } else if (fabs(lp.lam) < TOL || fabs(fabs(lp.phi) - HALFPI) < TOL) { - xy.x = 0.; - xy.y = lp.phi; - } else { - bt = fabs(TWORPI * lp.phi); - bt2 = bt * bt; - ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.) - / (bt2 * (bt - 1.)); - ct2 = ct * ct; - dt = TWORPI * lp.lam; - dt = dt + 1. / dt; - dt = sqrt(dt * dt - 4.); - if ((fabs(lp.lam) - HALFPI) < 0.) dt = -dt; - dt2 = dt * dt; - x1 = bt + ct; x1 *= x1; - t = bt + 3.*ct; - ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * ( - bt2 * (t * t + 4. * ct2) + - ct2 * (12. * bt * ct + 4. * ct2) ); - x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) / - (4.* x1 + dt2); - xy.x = HALFPI * x1; - xy.y = HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1); - if (lp.lam < 0.) xy.x = -xy.x; - if (lp.phi < 0.) xy.y = -xy.y; - } - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(vandg4) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_wag2.c b/src/3rdparty/proj/PJ_wag2.c deleted file mode 100644 index 96fd5fcb..00000000 --- a/src/3rdparty/proj/PJ_wag2.c +++ /dev/null @@ -1,21 +0,0 @@ -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph."; -#define C_x 0.92483 -#define C_y 1.38725 -#define C_p1 0.88022 -#define C_p2 0.88550 -FORWARD(s_forward); /* spheroid */ - lp.phi = aasin(C_p1 * sin(C_p2 * lp.phi)); - xy.x = C_x * lp.lam * cos(lp.phi); - xy.y = C_y * lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y / C_y; - lp.lam = xy.x / (C_x * cos(lp.phi)); - lp.phi = aasin(sin(lp.phi) / C_p1) / C_p2; - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(wag2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_wag3.c b/src/3rdparty/proj/PJ_wag3.c deleted file mode 100644 index fbab4c49..00000000 --- a/src/3rdparty/proj/PJ_wag3.c +++ /dev/null @@ -1,24 +0,0 @@ -#define PROJ_PARMS__ \ - double C_x; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl., Sph.\n\tlat_ts="; -#define TWOTHIRD 0.6666666666666666666667 -FORWARD(s_forward); /* spheroid */ - xy.x = P->C_x * lp.lam * cos(TWOTHIRD * lp.phi); - xy.y = lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y; - lp.lam = xy.x / (P->C_x * cos(TWOTHIRD * lp.phi)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(wag3) - double ts; - - ts = pj_param(P->params, "rlat_ts").f; - P->C_x = cos(ts) / cos(2.*ts/3.); - P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_wag7.c b/src/3rdparty/proj/PJ_wag7.c deleted file mode 100644 index 5f6f1bb1..00000000 --- a/src/3rdparty/proj/PJ_wag7.c +++ /dev/null @@ -1,14 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv."; -FORWARD(s_forward); /* sphere */ - double theta, ct, D; - - theta = asin(xy.y = 0.90630778703664996 * sin(lp.phi)); - xy.x = 2.66723 * (ct = cos(theta)) * sin(lp.lam /= 3.); - xy.y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp.lam))))); - xy.x *= D; - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(wag7) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_wink1.c b/src/3rdparty/proj/PJ_wink1.c deleted file mode 100644 index 214e6f4f..00000000 --- a/src/3rdparty/proj/PJ_wink1.c +++ /dev/null @@ -1,20 +0,0 @@ -#define PROJ_PARMS__ \ - double cosphi1; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl., Sph.\n\tlat_ts="; -FORWARD(s_forward); /* spheroid */ - xy.x = .5 * lp.lam * (P->cosphi1 + cos(lp.phi)); - xy.y = lp.phi; - return (xy); -} -INVERSE(s_inverse); /* spheroid */ - lp.phi = xy.y; - lp.lam = 2. * xy.x / (P->cosphi1 + cos(lp.phi)); - return (lp); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(wink1) - P->cosphi1 = cos(pj_param(P->params, "rlat_ts").f); - P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/PJ_wink2.c b/src/3rdparty/proj/PJ_wink2.c deleted file mode 100644 index 8eace009..00000000 --- a/src/3rdparty/proj/PJ_wink2.c +++ /dev/null @@ -1,34 +0,0 @@ -#define PROJ_PARMS__ \ - double cosphi1; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1="; -#define MAX_ITER 10 -#define LOOP_TOL 1e-7 -#define TWO_D_PI 0.636619772367581343 -FORWARD(s_forward); /* spheroid */ - double k, V; - int i; - - xy.y = lp.phi * TWO_D_PI; - k = PI * sin(lp.phi); - lp.phi *= 1.8; - for (i = MAX_ITER; i ; --i) { - lp.phi -= V = (lp.phi + sin(lp.phi) - k) / - (1. + cos(lp.phi)); - if (fabs(V) < LOOP_TOL) - break; - } - if (!i) - lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; - else - lp.phi *= 0.5; - xy.x = 0.5 * lp.lam * (cos(lp.phi) + P->cosphi1); - xy.y = FORTPI * (sin(lp.phi) + xy.y); - return (xy); -} -FREEUP; if (P) pj_dalloc(P); } -ENTRY0(wink2) - P->cosphi1 = cos(pj_param(P->params, "rlat_1").f); - P->es = 0.; P->inv = 0; P->fwd = s_forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/aasincos.c b/src/3rdparty/proj/aasincos.c deleted file mode 100644 index 460590e4..00000000 --- a/src/3rdparty/proj/aasincos.c +++ /dev/null @@ -1,33 +0,0 @@ -/* arc sin, cosine, tan2 and sqrt that will NOT fail */ -#include <projects.h> -#define ONE_TOL 1.00000000000001 -#define TOL 0.000000001 -#define ATOL 1e-50 - double -aasin(double v) { - double av; - - if ((av = fabs(v)) >= 1.) { - if (av > ONE_TOL) - pj_errno = -19; - return (v < 0. ? -HALFPI : HALFPI); - } - return asin(v); -} - double -aacos(double v) { - double av; - - if ((av = fabs(v)) >= 1.) { - if (av > ONE_TOL) - pj_errno = -19; - return (v < 0. ? PI : 0.); - } - return acos(v); -} - double -asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } - double -aatan2(double n, double d) { - return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n,d)); -} diff --git a/src/3rdparty/proj/adjlon.c b/src/3rdparty/proj/adjlon.c deleted file mode 100644 index 09b3b14b..00000000 --- a/src/3rdparty/proj/adjlon.c +++ /dev/null @@ -1,15 +0,0 @@ -/* reduce argument to range +/- PI */ -#include <math.h> -#include <projects.h> - -#define SPI 3.14159265359 -#define TWOPI 6.2831853071795864769 -#define ONEPI 3.14159265358979323846 - -double adjlon (double lon) { - if (fabs(lon) <= SPI) return( lon ); - lon += ONEPI; /* adjust to 0..2pi rad */ - lon -= TWOPI * floor(lon / TWOPI); /* remove integral # of 'revolutions'*/ - lon -= ONEPI; /* adjust back to -pi..pi rad */ - return( lon ); -} diff --git a/src/3rdparty/proj/bch2bps.c b/src/3rdparty/proj/bch2bps.c deleted file mode 100644 index 68a4737d..00000000 --- a/src/3rdparty/proj/bch2bps.c +++ /dev/null @@ -1,140 +0,0 @@ -/* convert bivariate w Chebyshev series to w Power series */ -#include <projects.h> -/* basic support procedures */ - static void /* clear vector to zero */ -clear(projUV *p, int n) { static const projUV c = {0., 0.}; while (n--) *p++ = c; } - static void /* clear matrix rows to zero */ -bclear(projUV **p, int n, int m) { while (n--) clear(*p++, m); } - static void /* move vector */ -bmove(projUV *a, projUV *b, int n) { while (n--) *a++ = *b++; } - static void /* a <- m * b - c */ -submop(projUV *a, double m, projUV *b, projUV *c, int n) { - while (n--) { - a->u = m * b->u - c->u; - a++->v = m * b++->v - c++->v; - } -} - static void /* a <- b - c */ -subop(projUV *a, projUV *b, projUV *c, int n) { - while (n--) { - a->u = b->u - c->u; - a++->v = b++->v - c++->v; - } -} - static void /* multiply vector a by scalar m */ -dmult(projUV *a, double m, int n) { while(n--) { a->u *= m; a->v *= m; ++a; } } - static void /* row adjust a[] <- a[] - m * b[] */ -dadd(projUV *a, projUV *b, double m, int n) { - while(n--) { - a->u -= m * b->u; - a++->v -= m * b++->v; - } -} - static void /* convert row to pover series */ -rows(projUV *c, projUV *d, int n) { - projUV sv, *dd; - int j, k; - - dd = (projUV *)vector1(n-1, sizeof(projUV)); - sv.u = sv.v = 0.; - for (j = 0; j < n; ++j) d[j] = dd[j] = sv; - d[0] = c[n-1]; - for (j = n-2; j >= 1; --j) { - for (k = n-j; k >= 1; --k) { - sv = d[k]; - d[k].u = 2. * d[k-1].u - dd[k].u; - d[k].v = 2. * d[k-1].v - dd[k].v; - dd[k] = sv; - } - sv = d[0]; - d[0].u = -dd[0].u + c[j].u; - d[0].v = -dd[0].v + c[j].v; - dd[0] = sv; - } - for (j = n-1; j >= 1; --j) { - d[j].u = d[j-1].u - dd[j].u; - d[j].v = d[j-1].v - dd[j].v; - } - d[0].u = -dd[0].u + .5 * c[0].u; - d[0].v = -dd[0].v + .5 * c[0].v; - pj_dalloc(dd); -} - static void /* convert columns to power series */ -cols(projUV **c, projUV **d, int nu, int nv) { - projUV *sv, **dd; - int j, k; - - dd = (projUV **)vector2(nu, nv, sizeof(projUV)); - sv = (projUV *)vector1(nv, sizeof(projUV)); - bclear(d, nu, nv); - bclear(dd, nu, nv); - bmove(d[0], c[nu-1], nv); - for (j = nu-2; j >= 1; --j) { - for (k = nu-j; k >= 1; --k) { - bmove(sv, d[k], nv); - submop(d[k], 2., d[k-1], dd[k], nv); - bmove(dd[k], sv, nv); - } - bmove(sv, d[0], nv); - subop(d[0], c[j], dd[0], nv); - bmove(dd[0], sv, nv); - } - for (j = nu-1; j >= 1; --j) - subop(d[j], d[j-1], dd[j], nv); - submop(d[0], .5, c[0], dd[0], nv); - freev2((void **) dd, nu); - pj_dalloc(sv); -} - static void /* row adjust for range -1 to 1 to a to b */ -rowshft(double a, double b, projUV *d, int n) { - int k, j; - double fac, cnst; - - cnst = 2. / (b - a); - fac = cnst; - for (j = 1; j < n; ++j) { - d[j].u *= fac; - d[j].v *= fac; - fac *= cnst; - } - cnst = .5 * (a + b); - for (j = 0; j <= n-2; ++j) - for (k = n - 2; k >= j; --k) { - d[k].u -= cnst * d[k+1].u; - d[k].v -= cnst * d[k+1].v; - } -} - static void /* column adjust for range -1 to 1 to a to b */ -colshft(double a, double b, projUV **d, int n, int m) { - int k, j; - double fac, cnst; - - cnst = 2. / (b - a); - fac = cnst; - for (j = 1; j < n; ++j) { - dmult(d[j], fac, m); - fac *= cnst; - } - cnst = .5 * (a + b); - for (j = 0; j <= n-2; ++j) - for (k = n - 2; k >= j; --k) - dadd(d[k], d[k+1], cnst, m); -} - int /* entry point */ -bch2bps(projUV a, projUV b, projUV **c, int nu, int nv) { - projUV **d; - int i; - - if (nu < 1 || nv < 1 || !(d = (projUV **)vector2(nu, nv, sizeof(projUV)))) - return 0; - /* do rows to power series */ - for (i = 0; i < nu; ++i) { - rows(c[i], d[i], nv); - rowshft(a.v, b.v, d[i], nv); - } - /* do columns to power series */ - cols(d, c, nu, nv); - colshft(a.u, b.u, c, nu, nv); - freev2((void **) d, nu); - return 1; -} diff --git a/src/3rdparty/proj/bchgen.c b/src/3rdparty/proj/bchgen.c deleted file mode 100644 index fe2ffe6c..00000000 --- a/src/3rdparty/proj/bchgen.c +++ /dev/null @@ -1,58 +0,0 @@ -/* generate double bivariate Chebychev polynomial */ -#include <projects.h> - int -bchgen(projUV a, projUV b, int nu, int nv, projUV **f, projUV(*func)(projUV)) { - int i, j, k; - projUV arg, *t, bma, bpa, *c; - double d, fac; - - bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v); - bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v); - for ( i = 0; i < nu; ++i) { - arg.u = cos(PI * (i + 0.5) / nu) * bma.u + bpa.u; - for ( j = 0; j < nv; ++j) { - arg.v = cos(PI * (j + 0.5) / nv) * bma.v + bpa.v; - f[i][j] = (*func)(arg); - if ((f[i][j]).u == HUGE_VAL) - return(1); - } - } - if (!(c = (projUV *) vector1(nu, sizeof(projUV)))) return 1; - fac = 2. / nu; - for ( j = 0; j < nv ; ++j) { - for ( i = 0; i < nu; ++i) { - arg.u = arg.v = 0.; - for (k = 0; k < nu; ++k) { - d = cos(PI * i * (k + .5) / nu); - arg.u += f[k][j].u * d; - arg.v += f[k][j].v * d; - } - arg.u *= fac; - arg.v *= fac; - c[i] = arg; - } - for (i = 0; i < nu; ++i) - f[i][j] = c[i]; - } - pj_dalloc(c); - if (!(c = (projUV*) vector1(nv, sizeof(projUV)))) return 1; - fac = 2. / nv; - for ( i = 0; i < nu; ++i) { - t = f[i]; - for (j = 0; j < nv; ++j) { - arg.u = arg.v = 0.; - for (k = 0; k < nv; ++k) { - d = cos(PI * j * (k + .5) / nv); - arg.u += t[k].u * d; - arg.v += t[k].v * d; - } - arg.u *= fac; - arg.v *= fac; - c[j] = arg; - } - f[i] = c; - c = t; - } - pj_dalloc(c); - return(0); -} diff --git a/src/3rdparty/proj/biveval.c b/src/3rdparty/proj/biveval.c deleted file mode 100644 index 40f2af41..00000000 --- a/src/3rdparty/proj/biveval.c +++ /dev/null @@ -1,85 +0,0 @@ -/* procedures for evaluating Tseries */ -# include <projects.h> -# define NEAR_ONE 1.00001 -static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) { - double d=0, dd=0, vd, vdd, tmp, *c; - int j; - - for (C += n ; n-- ; --C ) { - if (j = C->m) { - vd = vdd = 0.; - for (c = C->c + --j; j ; --j ) { - vd = w2.v * (tmp = vd) - vdd + *c--; - vdd = tmp; - } - d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c; - } else - d = w2.u * (tmp = d) - dd; - dd = tmp; - } - if (j = C->m) { - vd = vdd = 0.; - for (c = C->c + --j; j ; --j ) { - vd = w2.v * (tmp = vd) - vdd + *c--; - vdd = tmp; - } - return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c )); - } else - return (w.u * d - dd); -} - projUV /* bivariate Chebyshev polynomial entry point */ -bcheval(projUV in, Tseries *T) { - projUV w2, w; - projUV out; - /* scale to +-1 */ - w.u = ( in.u + in.u - T->a.u ) * T->b.u; - w.v = ( in.v + in.v - T->a.v ) * T->b.v; - if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) { - out.u = out.v = HUGE_VAL; - pj_errno = -36; - } else { /* double evaluation */ - w2.u = w.u + w.u; - w2.v = w.v + w.v; - out.u = ceval(T->cu, T->mu, w, w2); - out.v = ceval(T->cv, T->mv, w, w2); - } - return out; -} - projUV /* bivariate power polynomial entry point */ -bpseval(projUV in, Tseries *T) { - projUV out; - double *c, row; - int i, m; - - out.u = out.v = 0.; - for (i = T->mu; i >= 0; --i) { - row = 0.; - if (m = T->cu[i].m) { - c = T->cu[i].c + m; - while (m--) - row = *--c + in.v * row; - } - out.u = row + in.u * out.u; - } - for (i = T->mv; i >= 0; --i) { - row = 0.; - if (m = T->cv[i].m) { - c = T->cv[i].c + m; - while (m--) - row = *--c + in.v * row; - } - out.v = row + in.u * out.v; - } - return out; -} - -projUV /* general entry point selecting evaluation mode */ -biveval(projUV in, Tseries *T) { - - if (T->power) { - return bpseval(in, T); - } else { - return bcheval(in, T); - } -} - diff --git a/src/3rdparty/proj/cs2cs.c b/src/3rdparty/proj/cs2cs.c deleted file mode 100644 index f545675a..00000000 --- a/src/3rdparty/proj/cs2cs.c +++ /dev/null @@ -1,417 +0,0 @@ -/****************************************************************************** - * $Id: cs2cs.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Mainline program sort of like ``proj'' for converting between - * two coordinate systems. - * Author: Frank Warmerdam, warmerda@home.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#include "projects.h" -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> -#include <string.h> -#include <math.h> -#include "emess.h" - -#define MAX_LINE 1000 -#define MAX_PARGS 100 - -static projPJ fromProj, toProj; - -static int -reversein = 0, /* != 0 reverse input arguments */ -reverseout = 0, /* != 0 reverse output arguments */ -echoin = 0, /* echo input data to output line */ -tag = '#'; /* beginning of line tag character */ - static char -*oform = (char *)0, /* output format for x-y or decimal degrees */ -*oterr = "*\t*", /* output line for unprojectable input */ -*usage = -"%s\nusage: %s [ -eEfIlrstvwW [args] ] [ +opts[=arg] ]\n" -" [+to [+opts[=arg] [ files ]\n"; - -static struct FACTORS facs; -static double (*informat)(const char *, - char **); /* input data deformatter function */ - - -/************************************************************************/ -/* process() */ -/* */ -/* File processing function. */ -/************************************************************************/ -static void process(FILE *fid) - -{ - char line[MAX_LINE+3], *s, pline[40]; - projUV data; - - for (;;) { - double z; - - ++emess_dat.File_line; - if (!(s = fgets(line, MAX_LINE, fid))) - break; - if (!strchr(s, '\n')) { /* overlong line */ - int c; - (void)strcat(s, "\n"); - /* gobble up to newline */ - while ((c = fgetc(fid)) != EOF && c != '\n') ; - } - if (*s == tag) { - fputs(line, stdout); - continue; - } - - if (reversein) { - data.v = (*informat)(s, &s); - data.u = (*informat)(s, &s); - } else { - data.u = (*informat)(s, &s); - data.v = (*informat)(s, &s); - } - - z = strtod( s, &s ); - - if (data.v == HUGE_VAL) - data.u = HUGE_VAL; - - if (!*s && (s > line)) --s; /* assumed we gobbled \n */ - - if ( echoin) { - int t; - t = *s; - *s = '\0'; - (void)fputs(line, stdout); - *s = t; - putchar('\t'); - } - - if (data.u != HUGE_VAL) { - if( pj_transform( fromProj, toProj, 1, 0, - &(data.u), &(data.v), &z ) != 0 ) - { - data.u = HUGE_VAL; - data.v = HUGE_VAL; - } - } - - if (data.u == HUGE_VAL) /* error output */ - fputs(oterr, stdout); - - else if (pj_is_latlong(toProj) && !oform) { /*ascii DMS output */ - if (reverseout) { - fputs(rtodms(pline, data.v, 'N', 'S'), stdout); - putchar('\t'); - fputs(rtodms(pline, data.u, 'E', 'W'), stdout); - } else { - fputs(rtodms(pline, data.u, 'E', 'W'), stdout); - putchar('\t'); - fputs(rtodms(pline, data.v, 'N', 'S'), stdout); - } - - } else { /* x-y or decimal degree ascii output */ - if ( pj_is_latlong(toProj) ) { - data.v *= RAD_TO_DEG; - data.u *= RAD_TO_DEG; - } - if (reverseout) { - printf(oform,data.v); putchar('\t'); - printf(oform,data.u); - } else { - printf(oform,data.u); putchar('\t'); - printf(oform,data.v); - } - } - - putchar(' '); - if( oform != NULL ) - printf( oform, z ); - else - printf( "%.3f", z ); - if( s ) - printf( "%s", s ); - else - printf( "\n" ); - } -} - -/************************************************************************/ -/* main() */ -/************************************************************************/ - -int main(int argc, char **argv) -{ - char *arg, **eargv = argv, *from_argv[MAX_PARGS], *to_argv[MAX_PARGS], - **iargv = argv; - FILE *fid; - int from_argc=0, to_argc=0, iargc = argc, eargc = 0, c, mon = 0; - int have_to_flag = 0, inverse = 0, i; - - if (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR)) - ++emess_dat.Prog_name; - else emess_dat.Prog_name = *argv; - inverse = ! strncmp(emess_dat.Prog_name, "inv", 3); - if (argc <= 1 ) { - (void)fprintf(stderr, usage, pj_get_release(), emess_dat.Prog_name); - exit (0); - } - /* process run line arguments */ - while (--argc > 0) { /* collect run line arguments */ - if(**++argv == '-') for(arg = *argv;;) { - switch(*++arg) { - case '\0': /* position of "stdin" */ - if (arg[-1] == '-') eargv[eargc++] = "-"; - break; - case 'v': /* monitor dump of initialization */ - mon = 1; - continue; - case 'I': /* alt. method to spec inverse */ - inverse = 1; - continue; - case 'E': /* echo ascii input to ascii output */ - echoin = 1; - continue; - case 't': /* set col. one char */ - if (arg[1]) tag = *++arg; - else emess(1,"missing -t col. 1 tag"); - continue; - case 'l': /* list projections, ellipses or units */ - if (!arg[1] || arg[1] == 'p' || arg[1] == 'P') { - /* list projections */ - struct PJ_LIST *lp; - int do_long = arg[1] == 'P', c; - char *str; - - for (lp = pj_get_list_ref() ; lp->id ; ++lp) { - (void)printf("%s : ", lp->id); - if (do_long) /* possibly multiline description */ - (void)puts(*lp->descr); - else { /* first line, only */ - str = *lp->descr; - while ((c = *str++) && c != '\n') - putchar(c); - putchar('\n'); - } - } - } else if (arg[1] == '=') { /* list projection 'descr' */ - struct PJ_LIST *lp; - - arg += 2; - for (lp = pj_get_list_ref() ; lp->id ; ++lp) - if (!strcmp(lp->id, arg)) { - (void)printf("%9s : %s\n", lp->id, *lp->descr); - break; - } - } else if (arg[1] == 'e') { /* list ellipses */ - struct PJ_ELLPS *le; - - for (le = pj_get_ellps_ref(); le->id ; ++le) - (void)printf("%9s %-16s %-16s %s\n", - le->id, le->major, le->ell, le->name); - } else if (arg[1] == 'u') { /* list units */ - struct PJ_UNITS *lu; - - for (lu = pj_get_units_ref(); lu->id ; ++lu) - (void)printf("%12s %-20s %s\n", - lu->id, lu->to_meter, lu->name); - } else if (arg[1] == 'd') { /* list datums */ - struct PJ_DATUMS *ld; - - printf("__datum_id__ __ellipse___ __definition/comments______________________________\n" ); - for (ld = pj_get_datums_ref(); ld->id ; ++ld) - { - printf("%12s %-12s %-30s\n", - ld->id, ld->ellipse_id, ld->defn); - if( ld->comments != NULL && strlen(ld->comments) > 0 ) - printf( "%25s %s\n", " ", ld->comments ); - } - } else if( arg[1] == 'm') { /* list prime meridians */ - struct PJ_PRIME_MERIDIANS *lpm; - - for (lpm = pj_get_prime_meridians_ref(); lpm->id ; ++lpm) - (void)printf("%12s %-30s\n", - lpm->id, lpm->defn); - } else - emess(1,"invalid list option: l%c",arg[1]); - exit(0); - continue; /* artificial */ - case 'e': /* error line alternative */ - if (--argc <= 0) - noargument: - emess(1,"missing argument for -%c",*arg); - oterr = *++argv; - continue; - case 'W': /* specify seconds precision */ - case 'w': /* -W for constant field width */ - if ((c = arg[1]) != 0 && isdigit(c)) { - set_rtodms(c - '0', *arg == 'W'); - ++arg; - } else - emess(1,"-W argument missing or non-digit"); - continue; - case 'f': /* alternate output format degrees or xy */ - if (--argc <= 0) goto noargument; - oform = *++argv; - continue; - case 'r': /* reverse input */ - reversein = 1; - continue; - case 's': /* reverse output */ - reverseout = 1; - continue; - default: - emess(1, "invalid option: -%c",*arg); - break; - } - break; - - } else if (strcmp(*argv,"+to") == 0 ) { - have_to_flag = 1; - - } else if (**argv == '+') { /* + argument */ - if( have_to_flag ) - { - if( to_argc < MAX_PARGS ) - to_argv[to_argc++] = *argv + 1; - else - emess(1,"overflowed + argument table"); - } - else - { - if (from_argc < MAX_PARGS) - from_argv[from_argc++] = *argv + 1; - else - emess(1,"overflowed + argument table"); - } - } else /* assumed to be input file name(s) */ - eargv[eargc++] = *argv; - } - if (eargc == 0 ) /* if no specific files force sysin */ - eargv[eargc++] = "-"; - - /* - * If the user has requested inverse, then just reverse the - * coordinate systems. - */ - if( inverse ) - { - int argcount; - - for( i = 0; i < MAX_PARGS; i++ ) - { - char *arg; - - arg = from_argv[i]; - from_argv[i] = to_argv[i]; - to_argv[i] = arg; - } - - argcount = from_argc; - from_argc = to_argc; - to_argc = argcount; - } - - if (!(fromProj = pj_init(from_argc, from_argv))) - { - printf( "Using from definition: " ); - for( i = 0; i < from_argc; i++ ) - printf( "%s ", from_argv[i] ); - printf( "\n" ); - - emess(3,"projection initialization failure\ncause: %s", - pj_strerrno(pj_errno)); - } - - if( to_argc == 0 ) - { - if (!(toProj = pj_latlong_from_proj( fromProj ))) - { - printf( "Using to definition: " ); - for( i = 0; i < to_argc; i++ ) - printf( "%s ", to_argv[i] ); - printf( "\n" ); - - emess(3,"projection initialization failure\ncause: %s", - pj_strerrno(pj_errno)); - } - } - else if (!(toProj = pj_init(to_argc, to_argv))) - { - printf( "Using to definition: " ); - for( i = 0; i < to_argc; i++ ) - printf( "%s ", to_argv[i] ); - printf( "\n" ); - - emess(3,"projection initialization failure\ncause: %s", - pj_strerrno(pj_errno)); - } - - if (mon) { - printf( "%c ---- From Coordinate System ----\n", tag ); - pj_pr_list(fromProj); - printf( "%c ---- To Coordinate System ----\n", tag ); - pj_pr_list(toProj); - } - - /* set input formating control */ - if( !fromProj->is_latlong ) - informat = strtod; - else { - informat = dmstor; - } - - if( !toProj->is_latlong && !oform ) - oform = "%.2f"; - - /* process input file list */ - for ( ; eargc-- ; ++eargv) { - if (**eargv == '-') { - fid = stdin; - emess_dat.File_name = "<stdin>"; - - } else { - if ((fid = fopen(*eargv, "rt")) == NULL) { - emess(-2, *eargv, "input file"); - continue; - } - emess_dat.File_name = *eargv; - } - emess_dat.File_line = 0; - process(fid); - fclose(fid); - emess_dat.File_name = 0; - } - - if( fromProj != NULL ) - pj_free( fromProj ); - if( toProj != NULL ) - pj_free( toProj ); - - pj_deallocate_grids(); - - exit(0); /* normal completion */ -} diff --git a/src/3rdparty/proj/data.qrc b/src/3rdparty/proj/data.qrc deleted file mode 100644 index 34763478..00000000 --- a/src/3rdparty/proj/data.qrc +++ /dev/null @@ -1,15 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource> - <file>proj_data/epsg</file> - <file>proj_data/esri</file> - <file>proj_data/esri.extra</file> - <file>proj_data/GL27</file> - <file>proj_data/IGNF</file> - <file>proj_data/nad27</file> - <file>proj_data/nad83</file> - <file>proj_data/nad.lst</file> - <file>proj_data/other.extra</file> - <file>proj_data/proj_def.dat</file> - <file>proj_data/world</file> -</qresource> -</RCC> diff --git a/src/3rdparty/proj/dmstor.c b/src/3rdparty/proj/dmstor.c deleted file mode 100644 index 1cc99f62..00000000 --- a/src/3rdparty/proj/dmstor.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Convert DMS string to radians */ -#include <projects.h> -#include <string.h> -#include <ctype.h> - -static double proj_strtod(char *nptr, char **endptr); - -/* following should be sufficient for all but the rediculous */ -#define MAX_WORK 64 - static const char -*sym = "NnEeSsWw"; - static const double -vm[] = { - .0174532925199433, - .0002908882086657216, - .0000048481368110953599 -}; - double -dmstor(const char *is, char **rs) { - int sign, n, nl; - char *p, *s, work[MAX_WORK]; - double v, tv; - - if (rs) - *rs = (char *)is; - /* copy sting into work space */ - while (isspace(sign = *is)) ++is; - for (n = MAX_WORK, s = work, p = (char *)is; isgraph(*p) && --n ; ) - *s++ = *p++; - *s = '\0'; - /* it is possible that a really odd input (like lots of leading - zeros) could be truncated in copying into work. But ... */ - sign = *(s = work); - if (sign == '+' || sign == '-') s++; - else sign = '+'; - for (v = 0., nl = 0 ; nl < 3 ; nl = n + 1 ) { - if (!(isdigit(*s) || *s == '.')) break; - if ((tv = proj_strtod(s, &s)) == HUGE_VAL) - return tv; - switch (*s) { - case 'D': case 'd': - n = 0; break; - case '\'': - n = 1; break; - case '"': - n = 2; break; - case 'r': case 'R': - if (nl) { - pj_errno = -16; - return HUGE_VAL; - } - ++s; - v = tv; - goto skip; - default: - v += tv * vm[nl]; - skip: n = 4; - continue; - } - if (n < nl) { - pj_errno = -16; - return HUGE_VAL; - } - v += tv * vm[n]; - ++s; - } - /* postfix sign */ - if (*s && (p = strchr(sym, *s))) { - sign = (p - sym) >= 4 ? '-' : '+'; - ++s; - } - if (sign == '-') - v = -v; - if (rs) /* return point of next char after valid string */ - *rs = (char *)is + (s - work); - return v; -} - -static double -proj_strtod(char *nptr, char **endptr) - -{ - char c, *cp = nptr; - double result; - - /* - * Scan for characters which cause problems with VC++ strtod() - */ - while ((c = *cp) != '\0') { - if (c == 'd' || c == 'D') { - - /* - * Found one, so NUL it out, call strtod(), - * then restore it and return - */ - *cp = '\0'; - result = strtod(nptr, endptr); - *cp = c; - return result; - } - ++cp; - } - - /* no offending characters, just handle normally */ - - return strtod(nptr, endptr); -} - diff --git a/src/3rdparty/proj/emess.c b/src/3rdparty/proj/emess.c deleted file mode 100644 index 0c7f6c9e..00000000 --- a/src/3rdparty/proj/emess.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Error message processing */ - -#ifdef _MSC_VER -# ifndef _CRT_SECURE_NO_DEPRECATE -# define _CRT_SECURE_NO_DEPRECATE -# endif -# ifndef _CRT_NONSTDC_NO_DEPRECATE -# define _CRT_NONSTDC_NO_DEPRECATE -# endif -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <stdarg.h> -#include <errno.h> -#include <string.h> -#include <proj_api.h> -#define EMESS_ROUTINE -#include "emess.h" - void -emess(int code, char *fmt, ...) { - va_list args; - - va_start(args, fmt); - /* prefix program name, if given */ - if (fmt != NULL) - (void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(), - emess_dat.Prog_name); - /* print file name and line, if given */ - if (emess_dat.File_name != NULL && *emess_dat.File_name) { - (void)fprintf(stderr,"while processing file: %s", emess_dat.File_name); - if (emess_dat.File_line > 0) - (void)fprintf(stderr,", line %d\n", emess_dat.File_line); - else - (void)fputc('\n', stderr); - } else - putc('\n', stderr); - /* if |code|==2, print errno code data */ - if (code == 2 || code == -2) - (void)fprintf(stderr, "Sys errno: %d: %s\n", - errno, -#ifdef HAVE_STRERROR - strerror(errno)); -#else - "<system mess. texts unavail.>"); -#endif - /* post remainder of call data */ - (void)vfprintf(stderr,fmt,args); - va_end(args); - /* die if code positive */ - if (code > 0) { - (void)fputs("\nprogram abnormally terminated\n", stderr); - exit(code); - } - else - putc('\n', stderr); -} diff --git a/src/3rdparty/proj/emess.h b/src/3rdparty/proj/emess.h deleted file mode 100644 index 6724a065..00000000 --- a/src/3rdparty/proj/emess.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Error message processing header file */ -#ifndef EMESS_H -#define EMESS_H - -#ifndef lint -static char EMESS_H_ID[] = "@(#)emess.h 4.1 93/03/08 GIE REL"; -#endif - -struct EMESS { - char *File_name, /* input file name */ - *Prog_name; /* name of program */ - int File_line; /* approximate line read - where error occured */ -}; - -#ifdef EMESS_ROUTINE /* use type */ -/* for emess procedure */ -struct EMESS emess_dat = { (char *)0, (char *)0, 0 }; - -#ifdef sun /* Archaic SunOs 4.1.1, etc. */ -extern char *sys_errlist[]; -#define strerror(n) (sys_errlist[n]) -#endif - -#else /* for for calling procedures */ - -extern struct EMESS emess_dat; -void emess(int, char *, ...); - -#endif /* use type */ - -#endif /* end EMESS_H */ diff --git a/src/3rdparty/proj/gen_cheb.c b/src/3rdparty/proj/gen_cheb.c deleted file mode 100644 index 82cd926a..00000000 --- a/src/3rdparty/proj/gen_cheb.c +++ /dev/null @@ -1,71 +0,0 @@ -/* generates 'T' option output */ -#define PJ_LIB__ -#include "projects.h" -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include "emess.h" -#ifndef COEF_LINE_MAX -#define COEF_LINE_MAX 60 -#endif - void -gen_cheb(int inverse, projUV (*proj)(projUV), char *s, PJ *P, int iargc, char **iargv) { - int NU = 15, NV = 15, i, res = -1, errin = 0, pwr; - char *arg, fmt[15]; - projUV low, upp, resid; - Tseries *F; - extern void p_series(Tseries *, FILE *, char *); - double (*input)(const char *, char **); - - input = inverse ? strtod : dmstor; - if (*s) low.u = input(s, &s); else ++errin; - if (*s == ',') upp.u = input(s+1, &s); else ++errin; - if (*s == ',') low.v = input(s+1, &s); else ++errin; - if (*s == ',') upp.v = input(s+1, &s); else ++errin; - if (errin) - emess(16,"null or absent -T parameters"); - if (*s == ',') if (*++s != ',') res = strtol(s, &s, 10); - if (*s == ',') if (*++s != ',') NU = strtol(s, &s, 10); - if (*s == ',') if (*++s != ',') NV = strtol(s, &s, 10); - pwr = s && *s && !strcmp(s, ",P"); - (void)printf("#proj_%s\n# run-line:\n", - pwr ? "Power" : "Chebyshev"); - if (iargc > 0) { /* proj execution audit trail */ - int n = 0, L; - - for( i = 0 ; iargc ; --iargc) { - arg = *iargv++; - if (*arg != '+') { - if (!n) { putchar('#'); ++n; } - (void)printf(" %s%n",arg, &L); - if ((n += L) > 50) { putchar('\n'); n = 0; } - } - } - if (n) putchar('\n'); - } - (void)printf("# projection parameters\n"); - pj_pr_list(P); - if (low.u == upp.u || low.v >= upp.v) - emess(16,"approx. argument range error"); - if (low.u > upp.u) - low.u -= TWOPI; - if (NU < 2 || NV < 2) - emess(16,"approx. work dimensions (%d %d) too small",NU,NV); - if (!(F = mk_cheby(low, upp, pow(10., (double)res)*.5, &resid, proj, - NU, NV, pwr))) - emess(16,"generation of approx failed\nreason: %s\n", - pj_strerrno(errno)); - (void)printf("%c,%.12g,%.12g,%.12g,%.12g,%.12g\n",inverse?'I':'F', - P->lam0*RAD_TO_DEG, - low.u*(inverse?1.:RAD_TO_DEG),upp.u*(inverse?1.:RAD_TO_DEG), - low.v*(inverse?1.:RAD_TO_DEG),upp.v*(inverse?1.:RAD_TO_DEG)); - if (pwr) - strcpy(fmt, "%.15g"); - else if (res <= 0) - (void)sprintf(fmt,"%%.%df",-res+1); - else - (void)strcpy(fmt,"%.0f"); - p_series(F, stdout, fmt); - (void)printf("# |u,v| sums %g %g\n#end_proj_%s\n", - resid.u, resid.v, pwr ? "Power" : "Chebyshev"); -} diff --git a/src/3rdparty/proj/geocent.c b/src/3rdparty/proj/geocent.c deleted file mode 100644 index d95a778b..00000000 --- a/src/3rdparty/proj/geocent.c +++ /dev/null @@ -1,435 +0,0 @@ -/***************************************************************************/ -/* RSC IDENTIFIER: GEOCENTRIC - * - * ABSTRACT - * - * This component provides conversions between Geodetic coordinates (latitude, - * longitude in radians and height in meters) and Geocentric coordinates - * (X, Y, Z) in meters. - * - * ERROR HANDLING - * - * This component checks parameters for valid values. If an invalid value - * is found, the error code is combined with the current error code using - * the bitwise or. This combining allows multiple error codes to be - * returned. The possible error codes are: - * - * GEOCENT_NO_ERROR : No errors occurred in function - * GEOCENT_LAT_ERROR : Latitude out of valid range - * (-90 to 90 degrees) - * GEOCENT_LON_ERROR : Longitude out of valid range - * (-180 to 360 degrees) - * GEOCENT_A_ERROR : Semi-major axis lessthan or equal to zero - * GEOCENT_B_ERROR : Semi-minor axis lessthan or equal to zero - * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis - * - * - * REUSE NOTES - * - * GEOCENTRIC is intended for reuse by any application that performs - * coordinate conversions between geodetic coordinates and geocentric - * coordinates. - * - * - * REFERENCES - * - * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, - * Ralph Toms, February 1996 UCRL-JC-123138. - * - * Further information on GEOCENTRIC can be found in the Reuse Manual. - * - * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center - * Geospatial Information Division - * 7701 Telegraph Road - * Alexandria, VA 22310-3864 - * - * LICENSES - * - * None apply to this component. - * - * RESTRICTIONS - * - * GEOCENTRIC has no restrictions. - * - * ENVIRONMENT - * - * GEOCENTRIC was tested and certified in the following environments: - * - * 1. Solaris 2.5 with GCC version 2.8.1 - * 2. Windows 95 with MS Visual C++ version 6 - * - * MODIFICATIONS - * - * Date Description - * ---- ----------- - * 25-02-97 Original Code - * - */ - - -/***************************************************************************/ -/* - * INCLUDES - */ -#include <math.h> -#include "geocent.h" -/* - * math.h - is needed for calls to sin, cos, tan and sqrt. - * geocent.h - is needed for Error codes and prototype error checking. - */ - - -/***************************************************************************/ -/* - * DEFINES - */ -#define PI 3.14159265358979323e0 -#define PI_OVER_2 (PI / 2.0e0) -#define FALSE 0 -#define TRUE 1 -#define COS_67P5 0.38268343236508977 /* cosine of 67.5 degrees */ -#define AD_C 1.0026000 /* Toms region 1 constant */ - - -/***************************************************************************/ -/* - * FUNCTIONS - */ - - -long pj_Set_Geocentric_Parameters (GeocentricInfo *gi, double a, double b) - -{ /* BEGIN Set_Geocentric_Parameters */ -/* - * The function Set_Geocentric_Parameters receives the ellipsoid parameters - * as inputs and sets the corresponding state variables. - * - * a : Semi-major axis, in meters. (input) - * b : Semi-minor axis, in meters. (input) - */ - long Error_Code = GEOCENT_NO_ERROR; - - if (a <= 0.0) - Error_Code |= GEOCENT_A_ERROR; - if (b <= 0.0) - Error_Code |= GEOCENT_B_ERROR; - if (a < b) - Error_Code |= GEOCENT_A_LESS_B_ERROR; - if (!Error_Code) - { - gi->Geocent_a = a; - gi->Geocent_b = b; - gi->Geocent_a2 = a * a; - gi->Geocent_b2 = b * b; - gi->Geocent_e2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_a2; - gi->Geocent_ep2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_b2; - } - return (Error_Code); -} /* END OF Set_Geocentric_Parameters */ - - -void pj_Get_Geocentric_Parameters (GeocentricInfo *gi, - double *a, - double *b) -{ /* BEGIN Get_Geocentric_Parameters */ -/* - * The function Get_Geocentric_Parameters returns the ellipsoid parameters - * to be used in geocentric coordinate conversions. - * - * a : Semi-major axis, in meters. (output) - * b : Semi-minor axis, in meters. (output) - */ - - *a = gi->Geocent_a; - *b = gi->Geocent_b; -} /* END OF Get_Geocentric_Parameters */ - - -long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo *gi, - double Latitude, - double Longitude, - double Height, - double *X, - double *Y, - double *Z) -{ /* BEGIN Convert_Geodetic_To_Geocentric */ -/* - * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates - * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), - * according to the current ellipsoid parameters. - * - * Latitude : Geodetic latitude in radians (input) - * Longitude : Geodetic longitude in radians (input) - * Height : Geodetic height, in meters (input) - * X : Calculated Geocentric X coordinate, in meters (output) - * Y : Calculated Geocentric Y coordinate, in meters (output) - * Z : Calculated Geocentric Z coordinate, in meters (output) - * - */ - long Error_Code = GEOCENT_NO_ERROR; - double Rn; /* Earth radius at location */ - double Sin_Lat; /* sin(Latitude) */ - double Sin2_Lat; /* Square of sin(Latitude) */ - double Cos_Lat; /* cos(Latitude) */ - - /* - ** Don't blow up if Latitude is just a little out of the value - ** range as it may just be a rounding issue. Also removed longitude - ** test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001. - */ - if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 ) - Latitude = -PI_OVER_2; - else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 ) - Latitude = PI_OVER_2; - else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2)) - { /* Latitude out of range */ - Error_Code |= GEOCENT_LAT_ERROR; - } - - if (!Error_Code) - { /* no errors */ - if (Longitude > PI) - Longitude -= (2*PI); - Sin_Lat = sin(Latitude); - Cos_Lat = cos(Latitude); - Sin2_Lat = Sin_Lat * Sin_Lat; - Rn = gi->Geocent_a / (sqrt(1.0e0 - gi->Geocent_e2 * Sin2_Lat)); - *X = (Rn + Height) * Cos_Lat * cos(Longitude); - *Y = (Rn + Height) * Cos_Lat * sin(Longitude); - *Z = ((Rn * (1 - gi->Geocent_e2)) + Height) * Sin_Lat; - - } - return (Error_Code); -} /* END OF Convert_Geodetic_To_Geocentric */ - -/* - * The function Convert_Geocentric_To_Geodetic converts geocentric - * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, - * and height), according to the current ellipsoid parameters. - * - * X : Geocentric X coordinate, in meters. (input) - * Y : Geocentric Y coordinate, in meters. (input) - * Z : Geocentric Z coordinate, in meters. (input) - * Latitude : Calculated latitude value in radians. (output) - * Longitude : Calculated longitude value in radians. (output) - * Height : Calculated height value, in meters. (output) - */ - -#define USE_ITERATIVE_METHOD - -void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, - double X, - double Y, - double Z, - double *Latitude, - double *Longitude, - double *Height) -{ /* BEGIN Convert_Geocentric_To_Geodetic */ -#if !defined(USE_ITERATIVE_METHOD) -/* - * The method used here is derived from 'An Improved Algorithm for - * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996 - */ - -/* Note: Variable names follow the notation used in Toms, Feb 1996 */ - - double W; /* distance from Z axis */ - double W2; /* square of distance from Z axis */ - double T0; /* initial estimate of vertical component */ - double T1; /* corrected estimate of vertical component */ - double S0; /* initial estimate of horizontal component */ - double S1; /* corrected estimate of horizontal component */ - double Sin_B0; /* sin(B0), B0 is estimate of Bowring aux variable */ - double Sin3_B0; /* cube of sin(B0) */ - double Cos_B0; /* cos(B0) */ - double Sin_p1; /* sin(phi1), phi1 is estimated latitude */ - double Cos_p1; /* cos(phi1) */ - double Rn; /* Earth radius at location */ - double Sum; /* numerator of cos(phi1) */ - int At_Pole; /* indicates location is in polar region */ - - At_Pole = FALSE; - if (X != 0.0) - { - *Longitude = atan2(Y,X); - } - else - { - if (Y > 0) - { - *Longitude = PI_OVER_2; - } - else if (Y < 0) - { - *Longitude = -PI_OVER_2; - } - else - { - At_Pole = TRUE; - *Longitude = 0.0; - if (Z > 0.0) - { /* north pole */ - *Latitude = PI_OVER_2; - } - else if (Z < 0.0) - { /* south pole */ - *Latitude = -PI_OVER_2; - } - else - { /* center of earth */ - *Latitude = PI_OVER_2; - *Height = -Geocent_b; - return; - } - } - } - W2 = X*X + Y*Y; - W = sqrt(W2); - T0 = Z * AD_C; - S0 = sqrt(T0 * T0 + W2); - Sin_B0 = T0 / S0; - Cos_B0 = W / S0; - Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0; - T1 = Z + gi->Geocent_b * gi->Geocent_ep2 * Sin3_B0; - Sum = W - gi->Geocent_a * gi->Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0; - S1 = sqrt(T1*T1 + Sum * Sum); - Sin_p1 = T1 / S1; - Cos_p1 = Sum / S1; - Rn = gi->Geocent_a / sqrt(1.0 - gi->Geocent_e2 * Sin_p1 * Sin_p1); - if (Cos_p1 >= COS_67P5) - { - *Height = W / Cos_p1 - Rn; - } - else if (Cos_p1 <= -COS_67P5) - { - *Height = W / -Cos_p1 - Rn; - } - else - { - *Height = Z / Sin_p1 + Rn * (gi->Geocent_e2 - 1.0); - } - if (At_Pole == FALSE) - { - *Latitude = atan(Sin_p1 / Cos_p1); - } -#else /* defined(USE_ITERATIVE_METHOD) */ -/* -* Reference... -* ============ -* Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für -* das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover -* Nr. 137, p. 130-131. - -* Programmed by GGA- Leibniz-Institue of Applied Geophysics -* Stilleweg 2 -* D-30655 Hannover -* Federal Republic of Germany -* Internet: www.gga-hannover.de -* -* Hannover, March 1999, April 2004. -* see also: comments in statements -* remarks: -* Mathematically exact and because of symmetry of rotation-ellipsoid, -* each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and -* (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even -* four solutions, every two symmetrical to the semi-minor axis. -* Here Height1 and Height2 have at least a difference in order of -* radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b); -* (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or -* (0.,225.,-(2a+100.))). -* The algorithm always computes (Latitude,Longitude) with smallest |Height|. -* For normal computations, that means |Height|<10000.m, algorithm normally -* converges after to 2-3 steps!!! -* But if |Height| has the amount of length of ellipsoid's axis -* (e.g. -6300000.m), algorithm needs about 15 steps. -*/ - -/* local defintions and variables */ -/* end-criterium of loop, accuracy of sin(Latitude) */ -#define genau 1.E-12 -#define genau2 (genau*genau) -#define maxiter 30 - - double P; /* distance between semi-minor axis and location */ - double RR; /* distance between center and location */ - double CT; /* sin of geocentric latitude */ - double ST; /* cos of geocentric latitude */ - double RX; - double RK; - double RN; /* Earth radius at location */ - double CPHI0; /* cos of start or old geodetic latitude in iterations */ - double SPHI0; /* sin of start or old geodetic latitude in iterations */ - double CPHI; /* cos of searched geodetic latitude */ - double SPHI; /* sin of searched geodetic latitude */ - double SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ - int At_Pole; /* indicates location is in polar region */ - int iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ - - At_Pole = FALSE; - P = sqrt(X*X+Y*Y); - RR = sqrt(X*X+Y*Y+Z*Z); - -/* special cases for latitude and longitude */ - if (P/gi->Geocent_a < genau) { - -/* special case, if P=0. (X=0., Y=0.) */ - At_Pole = TRUE; - *Longitude = 0.; - -/* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis - * of ellipsoid (=center of mass), Latitude becomes PI/2 */ - if (RR/gi->Geocent_a < genau) { - *Latitude = PI_OVER_2; - *Height = -gi->Geocent_b; - return ; - - } - } - else { -/* ellipsoidal (geodetic) longitude - * interval: -PI < Longitude <= +PI */ - *Longitude=atan2(Y,X); - } - -/* -------------------------------------------------------------- - * Following iterative algorithm was developped by - * "Institut für Erdmessung", University of Hannover, July 1988. - * Internet: www.ife.uni-hannover.de - * Iterative computation of CPHI,SPHI and Height. - * Iteration of CPHI and SPHI to 10**-12 radian resp. - * 2*10**-7 arcsec. - * -------------------------------------------------------------- - */ - CT = Z/RR; - ST = P/RR; - RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST); - CPHI0 = ST*(1.0-gi->Geocent_e2)*RX; - SPHI0 = CT*RX; - iter = 0; - -/* loop to find sin(Latitude) resp. Latitude - * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ - do - { - iter++; - RN = gi->Geocent_a/sqrt(1.0-gi->Geocent_e2*SPHI0*SPHI0); - -/* ellipsoidal (geodetic) height */ - *Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi->Geocent_e2*SPHI0*SPHI0); - - RK = gi->Geocent_e2*RN/(RN+*Height); - RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST); - CPHI = ST*(1.0-RK)*RX; - SPHI = CT*RX; - SDPHI = SPHI*CPHI0-CPHI*SPHI0; - CPHI0 = CPHI; - SPHI0 = SPHI; - } - while (SDPHI*SDPHI > genau2 && iter < maxiter); - -/* ellipsoidal (geodetic) latitude */ - *Latitude=atan(SPHI/fabs(CPHI)); - - return; -#endif /* defined(USE_ITERATIVE_METHOD) */ -} /* END OF Convert_Geocentric_To_Geodetic */ diff --git a/src/3rdparty/proj/geocent.h b/src/3rdparty/proj/geocent.h deleted file mode 100644 index d6e90d23..00000000 --- a/src/3rdparty/proj/geocent.h +++ /dev/null @@ -1,179 +0,0 @@ -#ifndef GEOCENT_H -#define GEOCENT_H - -/***************************************************************************/ -/* RSC IDENTIFIER: GEOCENTRIC - * - * ABSTRACT - * - * This component provides conversions between Geodetic coordinates (latitude, - * longitude in radians and height in meters) and Geocentric coordinates - * (X, Y, Z) in meters. - * - * ERROR HANDLING - * - * This component checks parameters for valid values. If an invalid value - * is found, the error code is combined with the current error code using - * the bitwise or. This combining allows multiple error codes to be - * returned. The possible error codes are: - * - * GEOCENT_NO_ERROR : No errors occurred in function - * GEOCENT_LAT_ERROR : Latitude out of valid range - * (-90 to 90 degrees) - * GEOCENT_LON_ERROR : Longitude out of valid range - * (-180 to 360 degrees) - * GEOCENT_A_ERROR : Semi-major axis less than or equal to zero - * GEOCENT_B_ERROR : Semi-minor axis less than or equal to zero - * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis - * - * - * REUSE NOTES - * - * GEOCENTRIC is intended for reuse by any application that performs - * coordinate conversions between geodetic coordinates and geocentric - * coordinates. - * - * - * REFERENCES - * - * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, - * Ralph Toms, February 1996 UCRL-JC-123138. - * - * Further information on GEOCENTRIC can be found in the Reuse Manual. - * - * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center - * Geospatial Information Division - * 7701 Telegraph Road - * Alexandria, VA 22310-3864 - * - * LICENSES - * - * None apply to this component. - * - * RESTRICTIONS - * - * GEOCENTRIC has no restrictions. - * - * ENVIRONMENT - * - * GEOCENTRIC was tested and certified in the following environments: - * - * 1. Solaris 2.5 with GCC version 2.8.1 - * 2. Windows 95 with MS Visual C++ version 6 - * - * MODIFICATIONS - * - * Date Description - * ---- ----------- - * - * - */ - - -/***************************************************************************/ -/* - * DEFINES - */ -#define GEOCENT_NO_ERROR 0x0000 -#define GEOCENT_LAT_ERROR 0x0001 -#define GEOCENT_LON_ERROR 0x0002 -#define GEOCENT_A_ERROR 0x0004 -#define GEOCENT_B_ERROR 0x0008 -#define GEOCENT_A_LESS_B_ERROR 0x0010 - - -/***************************************************************************/ -/* - * FUNCTION PROTOTYPES - */ - -/* ensure proper linkage to c++ programs */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - double Geocent_a; /* Semi-major axis of ellipsoid in meters */ - double Geocent_b; /* Semi-minor axis of ellipsoid */ - double Geocent_a2; /* Square of semi-major axis */ - double Geocent_b2; /* Square of semi-minor axis */ - double Geocent_e2; /* Eccentricity squared */ - double Geocent_ep2; /* 2nd eccentricity squared */ -} GeocentricInfo; - -void pj_Init_Geocentric( GeocentricInfo *gi ); -long pj_Set_Geocentric_Parameters( GeocentricInfo *gi, - double a, - double b); - -/* - * The function Set_Geocentric_Parameters receives the ellipsoid parameters - * as inputs and sets the corresponding state variables. - * - * a : Semi-major axis, in meters. (input) - * b : Semi-minor axis, in meters. (input) - */ - - -void pj_Get_Geocentric_Parameters ( GeocentricInfo *gi, - double *a, - double *b); - -/* - * The function Get_Geocentric_Parameters returns the ellipsoid parameters - * to be used in geocentric coordinate conversions. - * - * a : Semi-major axis, in meters. (output) - * b : Semi-minor axis, in meters. (output) - */ - - -long pj_Convert_Geodetic_To_Geocentric ( GeocentricInfo *gi, - double Latitude, - double Longitude, - double Height, - double *X, - double *Y, - double *Z); -/* - * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates - * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), - * according to the current ellipsoid parameters. - * - * Latitude : Geodetic latitude in radians (input) - * Longitude : Geodetic longitude in radians (input) - * Height : Geodetic height, in meters (input) - * X : Calculated Geocentric X coordinate, in meters. (output) - * Y : Calculated Geocentric Y coordinate, in meters. (output) - * Z : Calculated Geocentric Z coordinate, in meters. (output) - * - */ - - -void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, - double X, - double Y, - double Z, - double *Latitude, - double *Longitude, - double *Height); -/* - * The function Convert_Geocentric_To_Geodetic converts geocentric - * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, - * and height), according to the current ellipsoid parameters. - * - * X : Geocentric X coordinate, in meters. (input) - * Y : Geocentric Y coordinate, in meters. (input) - * Z : Geocentric Z coordinate, in meters. (input) - * Latitude : Calculated latitude value in radians. (output) - * Longitude : Calculated longitude value in radians. (output) - * Height : Calculated height value, in meters. (output) - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* GEOCENT_H */ diff --git a/src/3rdparty/proj/geod.c b/src/3rdparty/proj/geod.c deleted file mode 100644 index cbe5a459..00000000 --- a/src/3rdparty/proj/geod.c +++ /dev/null @@ -1,237 +0,0 @@ -/* <<<< Geodesic filter program >>>> */ -# include "projects.h" -# include "geodesic.h" -# include "emess.h" -# include <ctype.h> -# include <stdio.h> -# include <string.h> - -# define MAXLINE 200 -# define MAX_PARGS 50 -# define TAB putchar('\t') - static int -fullout = 0, /* output full set of geodesic values */ -tag = '#', /* beginning of line tag character */ -pos_azi = 0, /* output azimuths as positive values */ -inverse = 0; /* != 0 then inverse geodesic */ - static char -*oform = (char *)0, /* output format for decimal degrees */ -*osform = "%.3f", /* output format for S */ -pline[50], /* work string */ -*usage = -"%s\nusage: %s [ -afFIptTwW [args] ] [ +opts[=arg] ] [ files ]\n"; - static void -printLL(double p, double l) { - if (oform) { - (void)printf(oform, p * RAD_TO_DEG); TAB; - (void)printf(oform, l * RAD_TO_DEG); - } else { - (void)fputs(rtodms(pline, p, 'N', 'S'),stdout); TAB; - (void)fputs(rtodms(pline, l, 'E', 'W'),stdout); - } -} - static void -do_arc(void) { - double az; - - printLL(phi2, lam2); putchar('\n'); - for (az = al12; n_alpha--; ) { - al12 = az = adjlon(az + del_alpha); - geod_pre(); - geod_for(); - printLL(phi2, lam2); putchar('\n'); - } -} - static void /* generate intermediate geodesic coordinates */ -do_geod(void) { - double phil, laml, del_S; - - phil = phi2; - laml = lam2; - printLL(phi1, lam1); putchar('\n'); - for ( geod_S = del_S = geod_S / n_S; --n_S; geod_S += del_S) { - geod_for(); - printLL(phi2, lam2); putchar('\n'); - } - printLL(phil, laml); putchar('\n'); -} - void static /* file processing function */ -process(FILE *fid) { - char line[MAXLINE+3], *s; - - for (;;) { - ++emess_dat.File_line; - if (!(s = fgets(line, MAXLINE, fid))) - break; - if (!strchr(s, '\n')) { /* overlong line */ - int c; - strcat(s, "\n"); - /* gobble up to newline */ - while ((c = fgetc(fid)) != EOF && c != '\n') ; - } - if (*s == tag) { - fputs(line, stdout); - continue; - } - phi1 = dmstor(s, &s); - lam1 = dmstor(s, &s); - if (inverse) { - phi2 = dmstor(s, &s); - lam2 = dmstor(s, &s); - geod_inv(); - } else { - al12 = dmstor(s, &s); - geod_S = strtod(s, &s) * to_meter; - geod_pre(); - geod_for(); - } - if (!*s && (s > line)) --s; /* assumed we gobbled \n */ - if (pos_azi) { - if (al12 < 0.) al12 += TWOPI; - if (al21 < 0.) al21 += TWOPI; - } - if (fullout) { - printLL(phi1, lam1); TAB; - printLL(phi2, lam2); TAB; - if (oform) { - (void)printf(oform, al12 * RAD_TO_DEG); TAB; - (void)printf(oform, al21 * RAD_TO_DEG); TAB; - (void)printf(osform, geod_S * fr_meter); - } else { - (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB; - (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB; - (void)printf(osform, geod_S * fr_meter); - } - } else if (inverse) - if (oform) { - (void)printf(oform, al12 * RAD_TO_DEG); TAB; - (void)printf(oform, al21 * RAD_TO_DEG); TAB; - (void)printf(osform, geod_S * fr_meter); - } else { - (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB; - (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB; - (void)printf(osform, geod_S * fr_meter); - } - else { - printLL(phi2, lam2); TAB; - if (oform) - (void)printf(oform, al21 * RAD_TO_DEG); - else - (void)fputs(rtodms(pline, al21, 0, 0), stdout); - } - (void)fputs(s, stdout); - } -} - -static char *pargv[MAX_PARGS]; -static int pargc = 0; - -int main(int argc, char **argv) { - char *arg, **eargv = argv, *strnchr(); - FILE *fid; - static int eargc = 0, c; - - if (emess_dat.Prog_name = strrchr(*argv,'/')) ++emess_dat.Prog_name; - else emess_dat.Prog_name = *argv; - inverse = ! strncmp(emess_dat.Prog_name, "inv", 3); - if (argc <= 1 ) { - (void)fprintf(stderr, usage, pj_get_release(), - emess_dat.Prog_name); - exit (0); - } - /* process run line arguments */ - while (--argc > 0) { /* collect run line arguments */ - if(**++argv == '-') for(arg = *argv;;) { - switch(*++arg) { - case '\0': /* position of "stdin" */ - if (arg[-1] == '-') eargv[eargc++] = "-"; - break; - case 'a': /* output full set of values */ - fullout = 1; - continue; - case 'I': /* alt. inverse spec. */ - inverse = 1; - continue; - case 't': /* set col. one char */ - if (arg[1]) tag = *++arg; - else emess(1,"missing -t col. 1 tag"); - continue; - case 'W': /* specify seconds precision */ - case 'w': /* -W for constant field width */ - if ((c = arg[1]) && isdigit(c)) { - set_rtodms(c - '0', *arg == 'W'); - ++arg; - } else - emess(1,"-W argument missing or non-digit"); - continue; - case 'f': /* alternate output format degrees or xy */ - if (--argc <= 0) -noargument: emess(1,"missing argument for -%c",*arg); - oform = *++argv; - continue; - case 'F': /* alternate output format degrees or xy */ - if (--argc <= 0) goto noargument; - osform = *++argv; - continue; - case 'l': - if (!arg[1] || arg[1] == 'e') { /* list of ellipsoids */ - struct PJ_ELLPS *le; - - for (le=pj_get_ellps_ref(); le->id ; ++le) - (void)printf("%9s %-16s %-16s %s\n", - le->id, le->major, le->ell, le->name); - } else if (arg[1] == 'u') { /* list of units */ - struct PJ_UNITS *lu; - - for (lu = pj_get_units_ref();lu->id ; ++lu) - (void)printf("%12s %-20s %s\n", - lu->id, lu->to_meter, lu->name); - } else - emess(1,"invalid list option: l%c",arg[1]); - exit( 0 ); - case 'p': /* output azimuths as positive */ - pos_azi = 1; - continue; - default: - emess(1, "invalid option: -%c",*arg); - break; - } - break; - } else if (**argv == '+') /* + argument */ - if (pargc < MAX_PARGS) - pargv[pargc++] = *argv + 1; - else - emess(1,"overflowed + argument table"); - else /* assumed to be input file name(s) */ - eargv[eargc++] = *argv; - } - /* done with parameter and control input */ - geod_set(pargc, pargv); /* setup projection */ - if ((n_alpha || n_S) && eargc) - emess(1,"files specified for arc/geodesic mode"); - if (n_alpha) - do_arc(); - else if (n_S) - do_geod(); - else { /* process input file list */ - if (eargc == 0) /* if no specific files force sysin */ - eargv[eargc++] = "-"; - for ( ; eargc-- ; ++eargv) { - if (**eargv == '-') { - fid = stdin; - emess_dat.File_name = "<stdin>"; - } else { - if ((fid = fopen(*eargv, "r")) == NULL) { - emess(-2, *eargv, "input file"); - continue; - } - emess_dat.File_name = *eargv; - } - emess_dat.File_line = 0; - process(fid); - (void)fclose(fid); - emess_dat.File_name = (char *)0; - } - } - exit(0); /* normal completion */ -} diff --git a/src/3rdparty/proj/geod_for.c b/src/3rdparty/proj/geod_for.c deleted file mode 100644 index fe7c90dd..00000000 --- a/src/3rdparty/proj/geod_for.c +++ /dev/null @@ -1,103 +0,0 @@ -# include "projects.h" -# include "geodesic.h" -# define MERI_TOL 1e-9 - static double -th1,costh1,sinth1,sina12,cosa12,M,N,c1,c2,D,P,s1; - static int -merid, signS; - void -geod_pre(void) { - al12 = adjlon(al12); /* reduce to +- 0-PI */ - signS = fabs(al12) > HALFPI ? 1 : 0; - th1 = ellipse ? atan(onef * tan(phi1)) : phi1; - costh1 = cos(th1); - sinth1 = sin(th1); - if ((merid = fabs(sina12 = sin(al12)) < MERI_TOL)) { - sina12 = 0.; - cosa12 = fabs(al12) < HALFPI ? 1. : -1.; - M = 0.; - } else { - cosa12 = cos(al12); - M = costh1 * sina12; - } - N = costh1 * cosa12; - if (ellipse) { - if (merid) { - c1 = 0.; - c2 = f4; - D = 1. - c2; - D *= D; - P = c2 / D; - } else { - c1 = geod_f * M; - c2 = f4 * (1. - M * M); - D = (1. - c2)*(1. - c2 - c1 * M); - P = (1. + .5 * c1 * M) * c2 / D; - } - } - if (merid) s1 = HALFPI - th1; - else { - s1 = (fabs(M) >= 1.) ? 0. : acos(M); - s1 = sinth1 / sin(s1); - s1 = (fabs(s1) >= 1.) ? 0. : acos(s1); - } -} - void -geod_for(void) { - double d,sind,u,V,X,ds,cosds,sinds,ss,de; - - if (ellipse) { - d = geod_S / (D * geod_a); - if (signS) d = -d; - u = 2. * (s1 - d); - V = cos(u + d); - X = c2 * c2 * (sind = sin(d)) * cos(d) * (2. * V * V - 1.); - ds = d + X - 2. * P * V * (1. - 2. * P * cos(u)) * sind; - ss = s1 + s1 - ds; - } else { - ds = geod_S / geod_a; - if (signS) ds = - ds; - } - cosds = cos(ds); - sinds = sin(ds); - if (signS) sinds = - sinds; - al21 = N * cosds - sinth1 * sinds; - if (merid) { - phi2 = atan( tan(HALFPI + s1 - ds) / onef); - if (al21 > 0.) { - al21 = PI; - if (signS) - de = PI; - else { - phi2 = - phi2; - de = 0.; - } - } else { - al21 = 0.; - if (signS) { - phi2 = - phi2; - de = 0; - } else - de = PI; - } - } else { - al21 = atan(M / al21); - if (al21 > 0) - al21 += PI; - if (al12 < 0.) - al21 -= PI; - al21 = adjlon(al21); - phi2 = atan(-(sinth1 * cosds + N * sinds) * sin(al21) / - (ellipse ? onef * M : M)); - de = atan2(sinds * sina12 , - (costh1 * cosds - sinth1 * sinds * cosa12)); - if (ellipse) - if (signS) - de += c1 * ((1. - c2) * ds + - c2 * sinds * cos(ss)); - else - de -= c1 * ((1. - c2) * ds - - c2 * sinds * cos(ss)); - } - lam2 = adjlon( lam1 + de ); -} diff --git a/src/3rdparty/proj/geod_inv.c b/src/3rdparty/proj/geod_inv.c deleted file mode 100644 index c0c8dbb0..00000000 --- a/src/3rdparty/proj/geod_inv.c +++ /dev/null @@ -1,56 +0,0 @@ -# include "projects.h" -# include "geodesic.h" -# define DTOL 1e-12 - void -geod_inv(void) { - double th1,th2,thm,dthm,dlamm,dlam,sindlamm,costhm,sinthm,cosdthm, - sindthm,L,E,cosd,d,X,Y,T,sind,tandlammp,u,v,D,A,B; - - if (ellipse) { - th1 = atan(onef * tan(phi1)); - th2 = atan(onef * tan(phi2)); - } else { - th1 = phi1; - th2 = phi2; - } - thm = .5 * (th1 + th2); - dthm = .5 * (th2 - th1); - dlamm = .5 * ( dlam = adjlon(lam2 - lam1) ); - if (fabs(dlam) < DTOL && fabs(dthm) < DTOL) { - al12 = al21 = geod_S = 0.; - return; - } - sindlamm = sin(dlamm); - costhm = cos(thm); sinthm = sin(thm); - cosdthm = cos(dthm); sindthm = sin(dthm); - L = sindthm * sindthm + (cosdthm * cosdthm - sinthm * sinthm) - * sindlamm * sindlamm; - d = acos(cosd = 1 - L - L); - if (ellipse) { - E = cosd + cosd; - sind = sin( d ); - Y = sinthm * cosdthm; - Y *= (Y + Y) / (1. - L); - T = sindthm * costhm; - T *= (T + T) / L; - X = Y + T; - Y -= T; - T = d / sind; - D = 4. * T * T; - A = D * E; - B = D + D; - geod_S = geod_a * sind * (T - f4 * (T * X - Y) + - f64 * (X * (A + (T - .5 * (A - E)) * X) - - Y * (B + E * Y) + D * X * Y)); - tandlammp = tan(.5 * (dlam - .25 * (Y + Y - E * (4. - X)) * - (f2 * T + f64 * (32. * T - (20. * T - A) - * X - (B + 4.) * Y)) * tan(dlam))); - } else { - geod_S = geod_a * d; - tandlammp = tan(dlamm); - } - u = atan2(sindthm , (tandlammp * costhm)); - v = atan2(cosdthm , (tandlammp * sinthm)); - al12 = adjlon(TWOPI + v - u); - al21 = adjlon(TWOPI - v - u); -} diff --git a/src/3rdparty/proj/geod_set.c b/src/3rdparty/proj/geod_set.c deleted file mode 100644 index 88217277..00000000 --- a/src/3rdparty/proj/geod_set.c +++ /dev/null @@ -1,74 +0,0 @@ - -#define _IN_GEOD_SET - -#include <string.h> -#include "projects.h" -#include "geodesic.h" -#include "emess.h" - void -geod_set(int argc, char **argv) { - paralist *start = 0, *curr; - double es; - char *name; - int i; - - /* put arguments into internal linked list */ - if (argc <= 0) - emess(1, "no arguments in initialization list"); - for (i = 0; i < argc; ++i) - if (i) - curr = curr->next = pj_mkparam(argv[i]); - else - start = curr = pj_mkparam(argv[i]); - /* set elliptical parameters */ - if (pj_ell_set(start, &geod_a, &es)) emess(1,"ellipse setup failure"); - /* set units */ - if (name = pj_param(start, "sunits").s) { - char *s; - struct PJ_UNITS *unit_list = pj_get_units_ref(); - for (i = 0; (s = unit_list[i].id) && strcmp(name, s) ; ++i) ; - if (!s) - emess(1,"%s unknown unit conversion id", name); - fr_meter = 1. / (to_meter = atof(unit_list[i].to_meter)); - } else - to_meter = fr_meter = 1.; - if (ellipse = es != 0.) { - onef = sqrt(1. - es); - geod_f = 1 - onef; - f2 = geod_f/2; - f4 = geod_f/4; - f64 = geod_f*geod_f/64; - } else { - onef = 1.; - geod_f = f2 = f4 = f64 = 0.; - } - /* check if line or arc mode */ - if (pj_param(start, "tlat_1").i) { - double del_S; -#undef f - phi1 = pj_param(start, "rlat_1").f; - lam1 = pj_param(start, "rlon_1").f; - if (pj_param(start, "tlat_2").i) { - phi2 = pj_param(start, "rlat_2").f; - lam2 = pj_param(start, "rlon_2").f; - geod_inv(); - geod_pre(); - } else if (geod_S = pj_param(start, "dS").f) { - al12 = pj_param(start, "rA").f; - geod_pre(); - geod_for(); - } else emess(1,"incomplete geodesic/arc info"); - if ((n_alpha = pj_param(start, "in_A").i) > 0) { - if (!(del_alpha = pj_param(start, "rdel_A").f)) - emess(1,"del azimuth == 0"); - } else if (del_S = fabs(pj_param(start, "ddel_S").f)) { - n_S = geod_S / del_S + .5; - } else if ((n_S = pj_param(start, "in_S").i) <= 0) - emess(1,"no interval divisor selected"); - } - /* free up linked list */ - for ( ; start; start = curr) { - curr = start->next; - pj_dalloc(start); - } -} diff --git a/src/3rdparty/proj/geodesic.h b/src/3rdparty/proj/geodesic.h deleted file mode 100644 index 268cff59..00000000 --- a/src/3rdparty/proj/geodesic.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef lint -static char GEODESIC_H_ID[] = "@(#)geodesic.h 4.3 95/08/19 GIE REL"; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _IN_GEOD_SET -# define GEOD_EXTERN extern -#else -# define GEOD_EXTERN -#endif - -GEOD_EXTERN struct geodesic { - double A; - double LAM1, PHI1, ALPHA12; - double LAM2, PHI2, ALPHA21; - double DIST; - double ONEF, FLAT, FLAT2, FLAT4, FLAT64; - int ELLIPSE; -} GEODESIC; - -# define geod_a GEODESIC.A -# define lam1 GEODESIC.LAM1 -# define phi1 GEODESIC.PHI1 -# define al12 GEODESIC.ALPHA12 -# define lam2 GEODESIC.LAM2 -# define phi2 GEODESIC.PHI2 -# define al21 GEODESIC.ALPHA21 -# define geod_S GEODESIC.DIST -# define geod_f GEODESIC.FLAT -# define onef GEODESIC.ONEF -# define f2 GEODESIC.FLAT2 -# define f4 GEODESIC.FLAT4 -# define ff2 GEODESIC.FLAT4 -# define f64 GEODESIC.FLAT64 -# define ellipse GEODESIC.ELLIPSE - - -GEOD_EXTERN int n_alpha, n_S; -GEOD_EXTERN double to_meter, fr_meter, del_alpha; - -void geod_set(int, char **); -void geod_for(void); -void geod_pre(void); -void geod_inv(void); - -#ifdef __cplusplus -} -#endif diff --git a/src/3rdparty/proj/include/pj_list.h b/src/3rdparty/proj/include/pj_list.h deleted file mode 100644 index b965cc71..00000000 --- a/src/3rdparty/proj/include/pj_list.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifdef DO_PJ_LIST_ID -static const char PJ_LIST_H_ID[] = "@(#)pj_list.h 4.5 95/08/09 GIE REL"; -#endif -/* Full list of current projections for Tue Jan 11 12:27:04 EST 1994 -** -** Copy this file and retain only appropriate lines for subset list -*/ -PROJ_HEAD(aea, "Albers Equal Area") -PROJ_HEAD(aeqd, "Azimuthal Equidistant") -PROJ_HEAD(airy, "Airy") -PROJ_HEAD(aitoff, "Aitoff") -PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") -PROJ_HEAD(apian, "Apian Globular I") -PROJ_HEAD(august, "August Epicycloidal") -PROJ_HEAD(bacon, "Bacon Globular") -PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") -PROJ_HEAD(boggs, "Boggs Eumorphic") -PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") -PROJ_HEAD(cass, "Cassini") -PROJ_HEAD(cc, "Central Cylindrical") -PROJ_HEAD(cea, "Equal Area Cylindrical") -PROJ_HEAD(chamb, "Chamberlin Trimetric") -PROJ_HEAD(collg, "Collignon") -PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") -PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") -PROJ_HEAD(eck1, "Eckert I") -PROJ_HEAD(eck2, "Eckert II") -PROJ_HEAD(eck3, "Eckert III") -PROJ_HEAD(eck4, "Eckert IV") -PROJ_HEAD(eck5, "Eckert V") -PROJ_HEAD(eck6, "Eckert VI") -PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") -PROJ_HEAD(eqdc, "Equidistant Conic") -PROJ_HEAD(euler, "Euler") -PROJ_HEAD(fahey, "Fahey") -PROJ_HEAD(fouc, "Foucaut") -PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") -PROJ_HEAD(gall, "Gall (Gall Stereographic)") -PROJ_HEAD(geocent, "Geocentric") -PROJ_HEAD(geos, "Geostationary Satellite View") -PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") -PROJ_HEAD(gn_sinu, "General Sinusoidal Series") -PROJ_HEAD(gnom, "Gnomonic") -PROJ_HEAD(goode, "Goode Homolosine") -PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") -PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") -PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") -PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") -PROJ_HEAD(imw_p, "Internation Map of the World Polyconic") -PROJ_HEAD(kav5, "Kavraisky V") -PROJ_HEAD(kav7, "Kavraisky VII") -PROJ_HEAD(krovak, "Krovak") -PROJ_HEAD(labrd, "Laborde") -PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") -PROJ_HEAD(lagrng, "Lagrange") -PROJ_HEAD(larr, "Larrivee") -PROJ_HEAD(lask, "Laskowski") -PROJ_HEAD(lonlat, "Lat/long (Geodetic)") -PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") -PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") -PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") -PROJ_HEAD(lcc, "Lambert Conformal Conic") -PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") -PROJ_HEAD(leac, "Lambert Equal Area Conic") -PROJ_HEAD(lee_os, "Lee Oblated Stereographic") -PROJ_HEAD(loxim, "Loximuthal") -PROJ_HEAD(lsat, "Space oblique for LANDSAT") -PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine") -PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") -PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") -PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") -PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") -PROJ_HEAD(merc, "Mercator") -PROJ_HEAD(mil_os, "Miller Oblated Stereographic") -PROJ_HEAD(mill, "Miller Cylindrical") -PROJ_HEAD(moll, "Mollweide") -PROJ_HEAD(murd1, "Murdoch I") -PROJ_HEAD(murd2, "Murdoch II") -PROJ_HEAD(murd3, "Murdoch III") -PROJ_HEAD(nell, "Nell") -PROJ_HEAD(nell_h, "Nell-Hammer") -PROJ_HEAD(nicol, "Nicolosi Globular") -PROJ_HEAD(nsper, "Near-sided perspective") -PROJ_HEAD(nzmg, "New Zealand Map Grid") -PROJ_HEAD(ob_tran, "General Oblique Transformation") -PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") -PROJ_HEAD(oea, "Oblated Equal Area") -PROJ_HEAD(omerc, "Oblique Mercator") -PROJ_HEAD(ortel, "Ortelius Oval") -PROJ_HEAD(ortho, "Orthographic") -PROJ_HEAD(pconic, "Perspective Conic") -PROJ_HEAD(poly, "Polyconic (American)") -PROJ_HEAD(putp1, "Putnins P1") -PROJ_HEAD(putp2, "Putnins P2") -PROJ_HEAD(putp3, "Putnins P3") -PROJ_HEAD(putp3p, "Putnins P3'") -PROJ_HEAD(putp4p, "Putnins P4'") -PROJ_HEAD(putp5, "Putnins P5") -PROJ_HEAD(putp5p, "Putnins P5'") -PROJ_HEAD(putp6, "Putnins P6") -PROJ_HEAD(putp6p, "Putnins P6'") -PROJ_HEAD(qua_aut, "Quartic Authalic") -PROJ_HEAD(robin, "Robinson") -PROJ_HEAD(rouss, "Roussilhe Stereographic") -PROJ_HEAD(rpoly, "Rectangular Polyconic") -PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") -PROJ_HEAD(somerc, "Swiss. Obl. Mercator") -PROJ_HEAD(stere, "Stereographic") -PROJ_HEAD(sterea, "Oblique Stereographic Alternative") -PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") -PROJ_HEAD(tcc, "Transverse Central Cylindrical") -PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") -PROJ_HEAD(tissot, "Tissot Conic") -PROJ_HEAD(tmerc, "Transverse Mercator") -PROJ_HEAD(tpeqd, "Two Point Equidistant") -PROJ_HEAD(tpers, "Tilted perspective") -PROJ_HEAD(ups, "Universal Polar Stereographic") -PROJ_HEAD(urm5, "Urmaev V") -PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") -PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") -PROJ_HEAD(vandg, "van der Grinten (I)") -PROJ_HEAD(vandg2, "van der Grinten II") -PROJ_HEAD(vandg3, "van der Grinten III") -PROJ_HEAD(vandg4, "van der Grinten IV") -PROJ_HEAD(vitk1, "Vitkovsky I") -PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") -PROJ_HEAD(wag2, "Wagner II") -PROJ_HEAD(wag3, "Wagner III") -PROJ_HEAD(wag4, "Wagner IV") -PROJ_HEAD(wag5, "Wagner V") -PROJ_HEAD(wag6, "Wagner VI") -PROJ_HEAD(wag7, "Wagner VII") -PROJ_HEAD(weren, "Werenskiold I") -PROJ_HEAD(wink1, "Winkel I") -PROJ_HEAD(wink2, "Winkel II") -PROJ_HEAD(wintri, "Winkel Tripel") diff --git a/src/3rdparty/proj/include/proj_api.h b/src/3rdparty/proj/include/proj_api.h deleted file mode 100644 index f4ee46bd..00000000 --- a/src/3rdparty/proj/include/proj_api.h +++ /dev/null @@ -1,108 +0,0 @@ -/****************************************************************************** - * $Id: proj_api.h 1631 2009-09-24 02:26:05Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Public (application) include file for PROJ.4 API, and constants. - * Author: Frank Warmerdam, <warmerdam@pobox.com> - * - ****************************************************************************** - * Copyright (c) 2001, Frank Warmerdam <warmerdam@pobox.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -/* General projections header file */ -#ifndef PROJ_API_H -#define PROJ_API_H - -/* standard inclusions */ -#include <math.h> -#include <stdlib.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* Try to update this every version! */ -#define PJ_VERSION 470 - -extern char const pj_release[]; /* global release id string */ - -#define RAD_TO_DEG 57.29577951308232 -#define DEG_TO_RAD .0174532925199432958 - - -extern int pj_errno; /* global error return code */ - -#if !defined(PROJECTS_H) - typedef struct { double u, v; } projUV; - typedef void *projPJ; - #define projXY projUV - #define projLP projUV -#else - typedef PJ *projPJ; -# define projXY XY -# define projLP LP -#endif - -/* procedure prototypes */ - -projXY pj_fwd(projLP, projPJ); -projLP pj_inv(projXY, projPJ); - -int pj_transform( projPJ src, projPJ dst, long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_geocentric_to_geodetic( double a, double es, - long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_geodetic_to_geocentric( double a, double es, - long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_compare_datums( projPJ srcdefn, projPJ dstdefn ); -int pj_apply_gridshift( const char *, int, - long point_count, int point_offset, - double *x, double *y, double *z ); -void pj_deallocate_grids(void); -int pj_is_latlong(projPJ); -int pj_is_geocent(projPJ); -void pj_pr_list(projPJ); -void pj_free(projPJ); -void pj_set_finder( const char *(*)(const char *) ); -void pj_set_searchpath ( int count, const char **path ); -projPJ pj_init(int, char **); -projPJ pj_init_plus(const char *); -char *pj_get_def(projPJ, int); -projPJ pj_latlong_from_proj( projPJ ); -void *pj_malloc(size_t); -void pj_dalloc(void *); -char *pj_strerrno(int); -int *pj_get_errno_ref(void); -const char *pj_get_release(void); -void pj_acquire_lock(void); -void pj_release_lock(void); -void pj_cleanup_lock(void); - -#ifdef __cplusplus -} -#endif - -#endif /* ndef PROJ_API_H */ - diff --git a/src/3rdparty/proj/include/projects.h b/src/3rdparty/proj/include/projects.h deleted file mode 100644 index 098a3605..00000000 --- a/src/3rdparty/proj/include/projects.h +++ /dev/null @@ -1,434 +0,0 @@ -/****************************************************************************** - * $Id: projects.h 1625 2009-09-23 18:58:15Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Primary (private) include file for PROJ.4 library. - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -/* General projections header file */ -#ifndef PROJECTS_H -#define PROJECTS_H - -#ifdef _MSC_VER -# ifndef _CRT_SECURE_NO_DEPRECATE -# define _CRT_SECURE_NO_DEPRECATE -# endif -# ifndef _CRT_NONSTDC_NO_DEPRECATE -# define _CRT_NONSTDC_NO_DEPRECATE -# endif -#endif - -#ifdef __cplusplus -#define C_NAMESPACE extern "C" -#define C_NAMESPACE_VAR extern "C" -extern "C" { -#else -#define C_NAMESPACE extern -#define C_NAMESPACE_VAR -#endif - -/* standard inclusions */ -#include <stdio.h> -#include <stdlib.h> -#include <math.h> - -#ifndef NULL -# define NULL 0 -#endif - -#ifndef FALSE -# define FALSE 0 -#endif - -#ifndef TRUE -# define TRUE 1 -#endif - -#ifndef MAX -# define MIN(a,b) ((a<b) ? a : b) -# define MAX(a,b) ((a>b) ? a : b) -#endif - -#ifndef ABS -# define ABS(x) ((x<0) ? (-1*(x)) : x) -#endif - - /* maximum path/filename */ -#ifndef MAX_PATH_FILENAME -#define MAX_PATH_FILENAME 1024 -#endif - /* prototype hypot for systems where absent */ -// Causes trouble on Symbian, can't find a platform where this is needed. -//#ifndef _WIN32 -//extern double hypot(double, double); -//#endif - -#ifdef _WIN32_WCE -# include <wce_stdlib.h> -# include <wce_stdio.h> -# define rewind wceex_rewind -# define getenv wceex_getenv -# define strdup _strdup -# define hypot _hypot -#endif - - /* some useful constants */ -#define HALFPI 1.5707963267948966 -#define FORTPI 0.78539816339744833 -#define PI 3.14159265358979323846 -#define TWOPI 6.2831853071795864769 - -/* environment parameter name */ -#ifndef PROJ_LIB -#define PROJ_LIB "PROJ_LIB" -#endif -/* maximum tag id length for +init and default files */ -#ifndef ID_TAG_MAX -#define ID_TAG_MAX 50 -#endif - -/* Use WIN32 as a standard windows 32 bit declaration */ -#if defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) -# define WIN32 -#endif - -#if defined(_WINDOWS) && !defined(WIN32) && !defined(_WIN32_WCE) -# define WIN32 -#endif - -/* directory delimiter for DOS support */ -#ifdef WIN32 -#define DIR_CHAR '\\' -#else -#define DIR_CHAR '/' -#endif - -/* datum_type values */ -#define PJD_UNKNOWN 0 -#define PJD_3PARAM 1 -#define PJD_7PARAM 2 -#define PJD_GRIDSHIFT 3 -#define PJD_WGS84 4 /* WGS84 (or anything considered equivelent) */ - -/* datum system errors */ -#define PJD_ERR_GEOCENTRIC -45 - -#define USE_PROJUV - -typedef struct { double u, v; } projUV; -typedef struct { double r, i; } COMPLEX; - -#ifndef PJ_LIB__ -#define XY projUV -#define LP projUV -#else -typedef struct { double x, y; } XY; -typedef struct { double lam, phi; } LP; -#endif - -typedef union { double f; int i; char *s; } PVALUE; -struct PJconsts; - -struct PJ_LIST { - char *id; /* projection keyword */ - struct PJconsts *(*proj)(struct PJconsts*);/* projection entry point */ - char * const *descr; /* description text */ -}; -struct PJ_ELLPS { - char *id; /* ellipse keyword name */ - char *major; /* a= value */ - char *ell; /* elliptical parameter */ - char *name; /* comments */ -}; -struct PJ_UNITS { - char *id; /* units keyword */ - char *to_meter; /* multiply by value to get meters */ - char *name; /* comments */ -}; - -struct PJ_DATUMS { - char *id; /* datum keyword */ - char *defn; /* ie. "to_wgs84=..." */ - char *ellipse_id; /* ie from ellipse table */ - char *comments; /* EPSG code, etc */ -}; - -struct PJ_PRIME_MERIDIANS { - char *id; /* prime meridian keyword */ - char *defn; /* offset from greenwich in DMS format. */ -}; - -struct DERIVS { - double x_l, x_p; /* derivatives of x for lambda-phi */ - double y_l, y_p; /* derivatives of y for lambda-phi */ -}; - -struct FACTORS { - struct DERIVS der; - double h, k; /* meridinal, parallel scales */ - double omega, thetap; /* angular distortion, theta prime */ - double conv; /* convergence */ - double s; /* areal scale factor */ - double a, b; /* max-min scale error */ - int code; /* info as to analytics, see following */ -}; -#define IS_ANAL_XL_YL 01 /* derivatives of lon analytic */ -#define IS_ANAL_XP_YP 02 /* derivatives of lat analytic */ -#define IS_ANAL_HK 04 /* h and k analytic */ -#define IS_ANAL_CONV 010 /* convergence analytic */ - /* parameter list struct */ -typedef struct ARG_list { - struct ARG_list *next; - char used; - char param[1]; } paralist; - /* base projection data structure */ - - -typedef struct PJconsts { - XY (*fwd)(LP, struct PJconsts *); - LP (*inv)(XY, struct PJconsts *); - void (*spc)(LP, struct PJconsts *, struct FACTORS *); - void (*pfree)(struct PJconsts *); - const char *descr; - paralist *params; /* parameter list */ - int over; /* over-range flag */ - int geoc; /* geocentric latitude flag */ - int is_latlong; /* proj=latlong ... not really a projection at all */ - int is_geocent; /* proj=geocent ... not really a projection at all */ - double - a, /* major axis or radius if es==0 */ - a_orig, /* major axis before any +proj related adjustment */ - es, /* e ^ 2 */ - es_orig, /* es before any +proj related adjustment */ - e, /* eccentricity */ - ra, /* 1/A */ - one_es, /* 1 - e^2 */ - rone_es, /* 1/one_es */ - lam0, phi0, /* central longitude, latitude */ - x0, y0, /* easting and northing */ - k0, /* general scaling factor */ - to_meter, fr_meter; /* cartesian scaling */ - - int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ - double datum_params[7]; - double from_greenwich; /* prime meridian offset (in radians) */ - double long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/ - -#ifdef PROJ_PARMS__ -PROJ_PARMS__ -#endif /* end of optional extensions */ -} PJ; - -/* public API */ -#include "proj_api.h" - -/* Generate pj_list external or make list from include file */ -#ifndef PJ_LIST_H -extern struct PJ_LIST pj_list[]; -#else -#define PROJ_HEAD(id, name) \ - struct PJconsts *pj_##id(struct PJconsts*); extern char * const pj_s_##id; - -#ifndef lint -#define DO_PJ_LIST_ID -#endif -#include PJ_LIST_H -#ifndef lint -#undef DO_PJ_LIST_ID -#endif -#undef PROJ_HEAD -#define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id}, - struct PJ_LIST -pj_list[] = { -#include PJ_LIST_H - {0, 0, 0}, - }; -#undef PROJ_HEAD -#endif - -#ifndef PJ_ELLPS__ -extern struct PJ_ELLPS pj_ellps[]; -#endif - -#ifndef PJ_UNITS__ -extern struct PJ_UNITS pj_units[]; -#endif - -#ifndef PJ_DATUMS__ -extern struct PJ_DATUMS pj_datums[]; -extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; -#endif - -#ifdef PJ_LIB__ - /* repeatative projection code */ -#define PROJ_HEAD(id, name) static const char des_##id [] = name -#define ENTRYA(name) \ - C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \ - C_NAMESPACE PJ *pj_##name(PJ *P) { if (!P) { \ - if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \ - P->pfree = freeup; P->fwd = 0; P->inv = 0; \ - P->spc = 0; P->descr = des_##name; -#define ENTRYX } return P; } else { -#define ENTRY0(name) ENTRYA(name) ENTRYX -#define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX -#define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX -#define ENDENTRY(p) } return (p); } -#define E_ERROR(err) { pj_errno = err; freeup(P); return(0); } -#define E_ERROR_0 { freeup(P); return(0); } -#define F_ERROR { pj_errno = -20; return(xy); } -#define I_ERROR { pj_errno = -20; return(lp); } -#define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0} -#define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0} -#define FREEUP static void freeup(PJ *P) { -#define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac) -#endif -#define MAX_TAB_ID 80 -typedef struct { float lam, phi; } FLP; -typedef struct { int lam, phi; } ILP; - -struct CTABLE { - char id[MAX_TAB_ID]; /* ascii info */ - LP ll; /* lower left corner coordinates */ - LP del; /* size of cells */ - ILP lim; /* limits of conversion matrix */ - FLP *cvs; /* conversion matrix */ -}; - -typedef struct _pj_gi { - char *gridname; /* identifying name of grid, eg "conus" or ntv2_0.gsb */ - char *filename; /* full path to filename */ - - const char *format; /* format of this grid, ie "ctable", "ntv1", - "ntv2" or "missing". */ - - int grid_offset; /* offset in file, for delayed loading */ - - struct CTABLE *ct; - - struct _pj_gi *next; - struct _pj_gi *child; -} PJ_GRIDINFO; - -/* procedure prototypes */ -double dmstor(const char *, char **); -void set_rtodms(int, int); -char *rtodms(char *, double, int, int); -double adjlon(double); -double aacos(double), aasin(double), asqrt(double), aatan2(double, double); -PVALUE pj_param(paralist *, char *); -paralist *pj_mkparam(char *); -int pj_ell_set(paralist *, double *, double *); -int pj_datum_set(paralist *, PJ *); -int pj_prime_meridian_set(paralist *, PJ *); -int pj_angular_units_set(paralist *, PJ *); - -paralist *pj_clone_paralist( const paralist* ); -void pj_clear_initcache(void); -paralist*pj_search_initcache( const char *filekey ); -void pj_insert_initcache( const char *filekey, const paralist *list); - -double *pj_enfn(double); -double pj_mlfn(double, double, double, double *); -double pj_inv_mlfn(double, double, double *); -double pj_qsfn(double, double, double); -double pj_tsfn(double, double, double); -double pj_msfn(double, double, double); -double pj_phi2(double, double); -double pj_qsfn_(double, PJ *); -double *pj_authset(double); -double pj_authlat(double, double *); -COMPLEX pj_zpoly1(COMPLEX, COMPLEX *, int); -COMPLEX pj_zpolyd1(COMPLEX, COMPLEX *, int, COMPLEX *); -FILE *pj_open_lib(char *, char *); - -int pj_deriv(LP, double, PJ *, struct DERIVS *); -int pj_factors(LP, PJ *, double, struct FACTORS *); - -struct PW_COEF {/* row coefficient structure */ - int m; /* number of c coefficients (=0 for none) */ - double *c; /* power coefficients */ -}; - -/* Approximation structures and procedures */ -typedef struct { /* Chebyshev or Power series structure */ - projUV a, b; /* power series range for evaluation */ - /* or Chebyshev argument shift/scaling */ - struct PW_COEF *cu, *cv; - int mu, mv; /* maximum cu and cv index (+1 for count) */ - int power; /* != 0 if power series, else Chebyshev */ -} Tseries; -Tseries *mk_cheby(projUV, projUV, double, projUV *, projUV (*)(projUV), int, int, int); -projUV bpseval(projUV, Tseries *); -projUV bcheval(projUV, Tseries *); -projUV biveval(projUV, Tseries *); -void *vector1(int, int); -void **vector2(int, int, int); -void freev2(void **v, int nrows); -int bchgen(projUV, projUV, int, int, projUV **, projUV(*)(projUV)); -int bch2bps(projUV, projUV, projUV **, int, int); -/* nadcon related protos */ -LP nad_intr(LP, struct CTABLE *); -LP nad_cvt(LP, int, struct CTABLE *); -struct CTABLE *nad_init(char *); -struct CTABLE *nad_ctable_init( FILE * fid ); -int nad_ctable_load( struct CTABLE *, FILE * fid ); -void nad_free(struct CTABLE *); - -/* higher level handling of datum grid shift files */ - -PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *, int * ); -void pj_deallocate_grids(); - -PJ_GRIDINFO *pj_gridinfo_init( const char * ); -int pj_gridinfo_load( PJ_GRIDINFO * ); -void pj_gridinfo_free( PJ_GRIDINFO * ); - -void *proj_mdist_ini(double); -double proj_mdist(double, double, double, const void *); -double proj_inv_mdist(double, const void *); -void *pj_gauss_ini(double, double, double *,double *); -LP pj_gauss(LP, const void *); -LP pj_inv_gauss(LP, const void *); - -extern char const pj_release[]; - -struct PJ_ELLPS *pj_get_ellps_ref( void ); -struct PJ_DATUMS *pj_get_datums_ref( void ); -struct PJ_UNITS *pj_get_units_ref( void ); -struct PJ_LIST *pj_get_list_ref( void ); -struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref( void ); - -#ifndef DISABLE_CVSID -# define PJ_CVSID(string) static char pj_cvsid[] = string; \ -static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : pj_cvsid ); } -#else -# define PJ_CVSID(string) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* end of basic projections header */ diff --git a/src/3rdparty/proj/mk_cheby.c b/src/3rdparty/proj/mk_cheby.c deleted file mode 100644 index b3019004..00000000 --- a/src/3rdparty/proj/mk_cheby.c +++ /dev/null @@ -1,161 +0,0 @@ -#include <projects.h> - static void /* sum coefficients less than res */ -eval(projUV **w, int nu, int nv, double res, projUV *resid) { - int i, j; - double ab; - projUV *s; - - resid->u = resid->v = 0.; - for (i = 0; i < nu; ++i) - for (s = w[i], j = 0; j < nv; ++j, ++s) { - if ((ab = fabs(s->u)) < res) - resid->u += ab; - if ((ab = fabs(s->v)) < res) - resid->v += ab; - } -} - static Tseries * /* create power series structure */ -makeT(int nru, int nrv) { - Tseries *T; - int i; - - if ((T = (Tseries *)pj_malloc(sizeof(Tseries))) && - (T->cu = (struct PW_COEF *)pj_malloc( - sizeof(struct PW_COEF) * nru)) && - (T->cv = (struct PW_COEF *)pj_malloc( - sizeof(struct PW_COEF) * nrv))) { - for (i = 0; i < nru; ++i) - T->cu[i].c = 0; - for (i = 0; i < nrv; ++i) - T->cv[i].c = 0; - return T; - } else - return 0; -} - Tseries * -mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), - int nu, int nv, int power) { - int j, i, nru, nrv, *ncu, *ncv; - Tseries *T; - projUV **w; - double cutres; - - if (!(w = (projUV **)vector2(nu, nv, sizeof(projUV))) || - !(ncu = (int *)vector1(nu + nv, sizeof(int)))) - return 0; - ncv = ncu + nu; - if (!bchgen(a, b, nu, nv, w, func)) { - projUV *s; - double ab, *p; - - /* analyse coefficients and adjust until residual OK */ - cutres = res; - for (i = 4; i ; --i) { - eval(w, nu, nv, cutres, resid); - if (resid->u < res && resid->v < res) - break; - cutres *= 0.5; - } - if (i <= 0) /* warn of too many tries */ - resid->u = - resid->u; - /* apply cut resolution and set pointers */ - nru = nrv = 0; - for (j = 0; j < nu; ++j) { - ncu[j] = ncv[j] = 0; /* clear column maxes */ - for (s = w[j], i = 0; i < nv; ++i, ++s) { - if ((ab = fabs(s->u)) < cutres) /* < resolution ? */ - s->u = 0.; /* clear coefficient */ - else - ncu[j] = i + 1; /* update column max */ - if ((ab = fabs(s->v)) < cutres) /* same for v coef's */ - s->v = 0.; - else - ncv[j] = i + 1; - } - if (ncu[j]) nru = j + 1; /* update row max */ - if (ncv[j]) nrv = j + 1; - } - if (power) { /* convert to bivariate power series */ - if (!bch2bps(a, b, w, nu, nv)) - goto error; - /* possible change in some row counts, so readjust */ - nru = nrv = 0; - for (j = 0; j < nu; ++j) { - ncu[j] = ncv[j] = 0; /* clear column maxes */ - for (s = w[j], i = 0; i < nv; ++i, ++s) { - if (s->u) - ncu[j] = i + 1; /* update column max */ - if (s->v) - ncv[j] = i + 1; - } - if (ncu[j]) nru = j + 1; /* update row max */ - if (ncv[j]) nrv = j + 1; - } - if (T = makeT(nru, nrv)) { - T->a = a; - T->b = b; - T->mu = nru - 1; - T->mv = nrv - 1; - T->power = 1; - for (i = 0; i < nru; ++i) /* store coefficient rows for u */ - if (T->cu[i].m = ncu[i]) - if ((p = T->cu[i].c = - (double *)pj_malloc(sizeof(double) * ncu[i]))) - for (j = 0; j < ncu[i]; ++j) - *p++ = (w[i] + j)->u; - else - goto error; - for (i = 0; i < nrv; ++i) /* same for v */ - if (T->cv[i].m = ncv[i]) - if ((p = T->cv[i].c = - (double *)pj_malloc(sizeof(double) * ncv[i]))) - for (j = 0; j < ncv[i]; ++j) - *p++ = (w[i] + j)->v; - else - goto error; - } - } else if (T = makeT(nru, nrv)) { - /* else make returned Chebyshev coefficient structure */ - T->mu = nru - 1; /* save row degree */ - T->mv = nrv - 1; - T->a.u = a.u + b.u; /* set argument scaling */ - T->a.v = a.v + b.v; - T->b.u = 1. / (b.u - a.u); - T->b.v = 1. / (b.v - a.v); - T->power = 0; - for (i = 0; i < nru; ++i) /* store coefficient rows for u */ - if (T->cu[i].m = ncu[i]) - if ((p = T->cu[i].c = - (double *)pj_malloc(sizeof(double) * ncu[i]))) - for (j = 0; j < ncu[i]; ++j) - *p++ = (w[i] + j)->u; - else - goto error; - for (i = 0; i < nrv; ++i) /* same for v */ - if (T->cv[i].m = ncv[i]) - if ((p = T->cv[i].c = - (double *)pj_malloc(sizeof(double) * ncv[i]))) - for (j = 0; j < ncv[i]; ++j) - *p++ = (w[i] + j)->v; - else - goto error; - } else - goto error; - } - goto gohome; -error: - if (T) { /* pj_dalloc up possible allocations */ - for (i = 0; i <= T->mu; ++i) - if (T->cu[i].c) - pj_dalloc(T->cu[i].c); - for (i = 0; i <= T->mv; ++i) - if (T->cv[i].c) - pj_dalloc(T->cv[i].c); - pj_dalloc(T); - } - T = 0; -gohome: - freev2((void **) w, nu); - pj_dalloc(ncu); - return T; -} diff --git a/src/3rdparty/proj/nad2bin.c b/src/3rdparty/proj/nad2bin.c deleted file mode 100644 index db4bb076..00000000 --- a/src/3rdparty/proj/nad2bin.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Convert bivariate ASCII NAD27 to NAD83 tables to binary structure */ -#include <stdio.h> -#include <stdlib.h> -#define PJ_LIB__ -#include <projects.h> -#define U_SEC_TO_RAD 4.848136811095359935899141023e-12 - static char -*usage = "<ASCII_dist_table local_bin_table"; - -int main(int argc, char **argv) { - struct CTABLE ct; - FLP *p, t; - size_t tsize; - int i, j, ichk; - long lam, laml, phi, phil; - FILE *bin; - - if (argc != 2) { - fprintf(stderr,"usage: %s %s\n", argv[0], usage); - exit(1); - } - fgets(ct.id, MAX_TAB_ID, stdin); - scanf("%d %d %*d %lf %lf %lf %lf", &ct.lim.lam, &ct.lim.phi, - &ct.ll.lam, &ct.del.lam, &ct.ll.phi, &ct.del.phi); - if (!(ct.cvs = (FLP *)malloc(tsize = ct.lim.lam * ct.lim.phi * - sizeof(FLP)))) { - perror("mem. alloc"); - exit(1); - } - ct.ll.lam *= DEG_TO_RAD; - ct.ll.phi *= DEG_TO_RAD; - ct.del.lam *= DEG_TO_RAD; - ct.del.phi *= DEG_TO_RAD; - /* load table */ - for (p = ct.cvs, i = 0; i < ct.lim.phi; ++i) { - scanf("%d:%ld %ld", &ichk, &laml, &phil); - if (ichk != i) { - fprintf(stderr,"format check on row\n"); - exit(1); - } - t.lam = laml * U_SEC_TO_RAD; - t.phi = phil * U_SEC_TO_RAD; - *p++ = t; - for (j = 1; j < ct.lim.lam; ++j) { - scanf("%ld %ld", &lam, &phi); - t.lam = (laml += lam) * U_SEC_TO_RAD; - t.phi = (phil += phi) * U_SEC_TO_RAD; - *p++ = t; - } - } - if (feof(stdin)) { - fprintf(stderr, "premature EOF\n"); - exit(1); - } - if (!(bin = freopen(argv[1], "wb", stdout))) { - perror(argv[1]); - exit(2); - } - if (fwrite(&ct, sizeof(ct), 1, stdout) != 1 || - fwrite(ct.cvs, tsize, 1, stdout) != 1) { - fprintf(stderr, "output failure\n"); - exit(2); - } - exit(0); /* normal completion */ -} diff --git a/src/3rdparty/proj/nad2nad.c b/src/3rdparty/proj/nad2nad.c deleted file mode 100644 index e59877da..00000000 --- a/src/3rdparty/proj/nad2nad.c +++ /dev/null @@ -1,310 +0,0 @@ -/* <<<< North American Datum Transfer Program >>>> */ -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> -#include <string.h> -#define PJ_LIST_H <nad_list.h> -#include <projects.h> -#include "emess.h" - -#define MAX_LINE 1000 -#define MAX_PARGS 100 -#define PJ_INVERS(P) (P->inv ? 1 : 0) - static int -echoin = 0, /* echo input data to output line */ -tag = '#'; /* beginning of line tag character */ - static char -*oform = (char *)0, /* output format for x-y or decimal degrees */ -*oterr = "*\t*", /* output line for unprojectable input */ -*inargs = 0, -*outargs = 0, -*czone = 0, -*usage = -"%s\nusage: %s [ -eEfihortwW [args] ] [ files ]\n"; - struct CTABLE -*ctab = 0, -*htab = 0; -static struct TAG_LIST { - char *tag; - short sw; -} ops_list[] = { - "utm=", 0, - "spcs=", 1, - "feet", 2, - "27", 3, - "83", 4, - "hp", 5, - "bin", 6, - "rev", 7, - 0, 0, -}; -static struct IO_CON { - short rev; /* reverse lon/lat or x/y */ - short bin; /* io binary */ - short ll; /* io lat-lon */ - short t83; /* data in 83 datum */ - short zone; /* <100 utm zone, ==0 geog, else state plane zone */ - short nprojc; /* number of entries in projc */ - char *hp; /* high precision name */ - char *projc[10]; /* params for pj_init */ - PJ *cnv; -} input = { - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}, output = { - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - static void -set_zone(int in, struct IO_CON *io) { - char tmp[20]; - - if (io->hp) { - io->t83 = 1; - if (!(htab = nad_init(io->hp))) - emess(1,"hp datum file: %s, failed: %s", io->hp, - pj_strerrno(pj_errno)); - } - if (io->zone > 0) { - if (io->zone <= 60) { /* UTM zone */ - io->nprojc = 2; /* no other options allowed */ - io->projc[0] = "proj=utm"; - sprintf(tmp, "zone=%d", io->zone); - io->projc[1] = io->t83 ? "ellps=GRS80" : "ellps=clrk66"; - } else /* SPCS zone */ - sprintf(tmp, "init=nad%s:%d", io->t83 ? "83" : "27", io->zone); - io->projc[io->nprojc++] = tmp; - io->projc[io->nprojc++] = "no_defs"; - if (!(io->cnv = pj_init(io->nprojc, io->projc))) - emess(1,pj_strerrno(pj_errno)); - io->ll = 0; - } -} - static void -setup() { - /* check and set zone operations */ - if (input.hp && output.hp) - emess(1,"both input and output cannot be high precision"); - set_zone(1, &input); - set_zone(0, &output); - if (input.cnv && !output.cnv) - output.ll = 1; - if (output.cnv && !input.cnv) - input.ll = 1; - if (!input.cnv && !output.cnv) - output.ll = input.ll = 1; - if (czone) { - if (!input.hp && !output.hp && input.t83 == output.t83) - emess(1,"identical datums"); - if (!(ctab = nad_init(czone))) - emess(1,"datum file: %s, failed: %s", czone, pj_strerrno(pj_errno)); - } else if (input.t83 != output.t83) - emess(1,"conversion region (-r) not specified"); -} - static void -set_ops(char *s, struct IO_CON *io) { - char *intag; - struct TAG_LIST *p; - - for ( ; intag = strtok(s, " ,\t"); s = 0) { - for (p = ops_list; p->tag; ++p) { - if (!strncmp(intag, p->tag, strlen(p->tag))) - break; - } - if (!p->tag) - emess(1,"invalid selection"); - switch (p->sw) { - case 0: - case 1: - s = strchr(intag, '=') + 1; - io->zone = atoi(s); - break; - case 2: - if (io->zone <= 60) - emess(1,"spcs zone must be selected"); - io->projc[io->nprojc++] = "units=us-ft"; - break; - case 3: io->t83 = 0; break; - case 4: io->t83 = 1; break; - case 5: - if (!(intag = strchr(intag, '=')) || *++intag == '\0') - emess(1,"hp missing name"); - strcpy(io->hp = (char*)malloc(strlen(intag)+1), intag); - break; - case 6: io->bin = 1; break; - case 7: io->rev = 1; break; - } - } -} - static void -process(FILE *fid) { - char line[MAX_LINE], *s, t, pline[100]; - projUV val; - double tmp; - - for (;;) { - if (input.bin) - fread(&val, sizeof(projUV), 1, fid); - else if (s = fgets(line, MAX_LINE, fid)) { - if (*s == tag) { - fputs(line, stdout); - continue; - } else if (input.ll) { - val.u = dmstor(s, &s); - val.v = dmstor(s, &s); - } else { - val.u = strtod(s, &s); - val.v = strtod(s, &s); - } - } - if (feof(fid)) - break; - if (input.rev) { - tmp = val.u; - val.u = val.v; - val.v = tmp; - } - /* data in, manupulate */ - if (input.cnv) - val = pj_inv(val, input.cnv); - if (input.hp) - val = nad_cvt(val, 1, htab); - /* nad conversion */ - if (ctab) - val = nad_cvt(val, input.t83 ? 1 : 0, ctab); - if (output.hp) - val = nad_cvt(val, 0, htab); - if (output.cnv) - val = pj_fwd(val, output.cnv); - /* output data */ - if (output.rev) { - tmp = val.u; - val.u = val.v; - val.v = tmp; - } - if (output.bin) - (void)fwrite(&val, sizeof(projUV), 1, stdout); - else { - if (echoin) { - t = *s; - *s = '\0'; - (void)fputs(line, stdout); - (void)putchar('\t'); - *s = t; - } - if (val.u == HUGE_VAL) - (void)fputs(oterr, stdout); - else if (output.ll) - if (oform) { - (void)printf(oform, val.u * RAD_TO_DEG); - (void)putchar('\t'); - (void)printf(oform, val.v * RAD_TO_DEG); - } else if (output.rev) { - (void)fputs(rtodms(pline, val.u, 'N', 'S'), stdout); - (void)putchar('\t'); - (void)fputs(rtodms(pline, val.v, 'E', 'W'), stdout); - } else { - (void)fputs(rtodms(pline, val.u, 'E', 'W'), stdout); - (void)putchar('\t'); - (void)fputs(rtodms(pline, val.v, 'N', 'S'), stdout); - } - else { - (void)printf(oform ? oform : "%.2f", val.u); - (void)putchar('\t'); - (void)printf(oform ? oform : "%.2f", val.v); - } - if (input.bin) - putchar('\n'); - else - (void)fputs(s, stdout); - } - } -} - -int main(int argc, char **argv) { - char *arg, **eargv = argv, work[MAX_PARGS]; - FILE *fid; - int eargc = 0, c; - - if (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR)) - ++emess_dat.Prog_name; - else emess_dat.Prog_name = *argv; - if (argc <= 1 ) { - (void)fprintf(stderr, usage, pj_release, emess_dat.Prog_name); - exit (0); - } - /* process run line arguments */ - while (--argc > 0) { /* collect run line arguments */ - if(**++argv == '-') for(arg = *argv;;) { - switch(*++arg) { - case '\0': /* position of "stdin" */ - if (arg[-1] == '-') eargv[eargc++] = "-"; - break; - case 'i': /* input control */ - case 'o': /* output control */ - if (--argc <= 0) goto noargument; - strncpy(work, *++argv, MAX_PARGS); - set_ops(work, *arg == 'i' ? &input : &output); - continue; - case 'r': /* nad27/83 conversion zone */ - if (--argc <= 0) goto noargument; - czone = *++argv; - continue; - case 'E': /* echo ascii input to ascii output */ - echoin = 1; - continue; - case 't': /* set col. one char */ - if (arg[1]) tag = *++arg; - else emess(1,"missing -t col. 1 tag"); - continue; - case 'W': /* specify seconds precision */ - case 'w': /* -W for constant field width */ - if ((c = arg[1]) != 0 && isdigit(c)) { - set_rtodms(c - '0', *arg == 'W'); - ++arg; - } else - emess(1,"-W argument missing or non-digit"); - continue; - case 'f': /* alternate output format degrees or xy */ - if (--argc <= 0) goto noargument; - oform = *++argv; - continue; - case 'e': /* error line alternative */ - if (--argc <= 0) -noargument: emess(1,"missing argument for -%c",*arg); - oterr = *++argv; - continue; - default: - emess(1, "invalid option: -%c",*arg); - break; - } - break; - } else /* assumed to be input file name(s) */ - eargv[eargc++] = *argv; - } - if (eargc == 0) /* if no specific files force sysin */ - eargv[eargc++] = "-"; - /* done with parameter and control input */ - setup(); - /* process input file list */ - for ( ; eargc-- ; ++eargv) { - if (**eargv == '-') { - fid = stdin; - emess_dat.File_name = "<stdin>"; - } else { - if ((fid = fopen(*eargv, "r")) == NULL) { - emess(-2, *eargv, "input file"); - continue; - } - emess_dat.File_name = *eargv; - } - emess_dat.File_line = 0; - /* process file */ - process(fid); - (void)fclose(fid); - emess_dat.File_name = 0; - } - exit(0); /* normal completion */ -} diff --git a/src/3rdparty/proj/nad_cvt.c b/src/3rdparty/proj/nad_cvt.c deleted file mode 100644 index 36fe6cb7..00000000 --- a/src/3rdparty/proj/nad_cvt.c +++ /dev/null @@ -1,68 +0,0 @@ -#define PJ_LIB__ -#include <projects.h> -#define MAX_TRY 9 -#define TOL 1e-12 - LP -nad_cvt(LP in, int inverse, struct CTABLE *ct) { - LP t, tb; - - if (in.lam == HUGE_VAL) - return in; - /* normalize input to ll origin */ - tb = in; - tb.lam -= ct->ll.lam; - tb.phi -= ct->ll.phi; - tb.lam = adjlon(tb.lam - PI) + PI; - t = nad_intr(tb, ct); - if (inverse) { - LP del, dif; - int i = MAX_TRY; - - if (t.lam == HUGE_VAL) return t; - t.lam = tb.lam + t.lam; - t.phi = tb.phi - t.phi; - - do { - del = nad_intr(t, ct); - - /* This case used to return failure, but I have - changed it to return the first order approximation - of the inverse shift. This avoids cases where the - grid shift *into* this grid came from another grid. - While we aren't returning optimally correct results - I feel a close result in this case is better than - no result. NFW - To demonstrate use -112.5839956 49.4914451 against - the NTv2 grid shift file from Canada. */ - if (del.lam == HUGE_VAL) - { - if( getenv( "PROJ_DEBUG" ) != NULL ) - fprintf( stderr, - "Inverse grid shift iteration failed, presumably at grid edge.\n" - "Using first approximation.\n" ); - /* return del */; - break; - } - - t.lam -= dif.lam = t.lam - del.lam - tb.lam; - t.phi -= dif.phi = t.phi + del.phi - tb.phi; - } while (i-- && fabs(dif.lam) > TOL && fabs(dif.phi) > TOL); - if (i < 0) { - if( getenv( "PROJ_DEBUG" ) != NULL ) - fprintf( stderr, - "Inverse grid shift iterator failed to converge.\n" ); - t.lam = t.phi = HUGE_VAL; - return t; - } - in.lam = adjlon(t.lam + ct->ll.lam); - in.phi = t.phi + ct->ll.phi; - } else { - if (t.lam == HUGE_VAL) - in = t; - else { - in.lam -= t.lam; - in.phi += t.phi; - } - } - return in; -} diff --git a/src/3rdparty/proj/nad_init.c b/src/3rdparty/proj/nad_init.c deleted file mode 100644 index ec74a9c9..00000000 --- a/src/3rdparty/proj/nad_init.c +++ /dev/null @@ -1,176 +0,0 @@ -/****************************************************************************** - * $Id: nad_init.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Load datum shift files into memory. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ - -#include <projects.h> -#include <stdio.h> -#include <errno.h> -#include <string.h> - -#ifdef _WIN32_WCE -/* assert.h includes all Windows API headers and causes 'LP' name clash. - * Here assert we disable assert() for Windows CE. - * TODO - mloskot: re-implement porting friendly assert - */ -# define assert(exp) ((void)0) -#else -# include <assert.h> -#endif /* _WIN32_WCE */ - -/************************************************************************/ -/* nad_ctable_load() */ -/* */ -/* Load the data portion of a ctable formatted grid. */ -/************************************************************************/ - -int nad_ctable_load( struct CTABLE *ct, FILE *fid ) - -{ - int a_size; - - fseek( fid, sizeof(struct CTABLE), SEEK_SET ); - - /* read all the actual shift values */ - a_size = ct->lim.lam * ct->lim.phi; - ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size); - if( ct->cvs == NULL - || fread(ct->cvs, sizeof(FLP), a_size, fid) != a_size ) - { - pj_dalloc( ct->cvs ); - ct->cvs = NULL; - - if( getenv("PROJ_DEBUG") != NULL ) - { - fprintf( stderr, - "ctable loading failed on fread() - binary incompatible?\n" ); - } - - pj_errno = -38; - return 0; - } - - return 1; -} - -/************************************************************************/ -/* nad_ctable_init() */ -/* */ -/* Read the header portion of a "ctable" format grid. */ -/************************************************************************/ - -struct CTABLE *nad_ctable_init( FILE * fid ) -{ - struct CTABLE *ct; - int id_end; - - /* read the table header */ - ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); - if( ct == NULL - || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 ) - { - pj_errno = -38; - return NULL; - } - - /* do some minimal validation to ensure the structure isn't corrupt */ - if( ct->lim.lam < 1 || ct->lim.lam > 100000 - || ct->lim.phi < 1 || ct->lim.phi > 100000 ) - { - pj_errno = -38; - return NULL; - } - - /* trim white space and newlines off id */ - for( id_end = strlen(ct->id)-1; id_end > 0; id_end-- ) - { - if( ct->id[id_end] == '\n' || ct->id[id_end] == ' ' ) - ct->id[id_end] = '\0'; - else - break; - } - - ct->cvs = NULL; - - return ct; -} - -/************************************************************************/ -/* nad_init() */ -/* */ -/* Read a datum shift file in any of the supported binary formats. */ -/************************************************************************/ - -struct CTABLE *nad_init(char *name) -{ - char fname[MAX_PATH_FILENAME+1]; - struct CTABLE *ct; - FILE *fid; - char header[512]; - - errno = pj_errno = 0; - -/* -------------------------------------------------------------------- */ -/* Open the file using the usual search rules. */ -/* -------------------------------------------------------------------- */ - strcpy(fname, name); - if (!(fid = pj_open_lib(fname, "rb"))) { - pj_errno = errno; - return 0; - } - - ct = nad_ctable_init( fid ); - if( ct != NULL ) - { - if( !nad_ctable_load( ct, fid ) ) - { - nad_free( ct ); - ct = NULL; - } - } - - fclose(fid); - return ct; -} - -/************************************************************************/ -/* nad_free() */ -/* */ -/* Free a CTABLE grid shift structure produced by nad_init(). */ -/************************************************************************/ - -void nad_free(struct CTABLE *ct) -{ - if (ct) { - if( ct->cvs != NULL ) - pj_dalloc(ct->cvs); - - pj_dalloc(ct); - } -} diff --git a/src/3rdparty/proj/nad_intr.c b/src/3rdparty/proj/nad_intr.c deleted file mode 100644 index 299f1806..00000000 --- a/src/3rdparty/proj/nad_intr.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Determine nad table correction value */ -#define PJ_LIB__ -#include <projects.h> - LP -nad_intr(LP t, struct CTABLE *ct) { - LP val, frct; - ILP indx; - double m00, m10, m01, m11; - FLP *f00, *f10, *f01, *f11; - long index; - int in; - - indx.lam = floor(t.lam /= ct->del.lam); - indx.phi = floor(t.phi /= ct->del.phi); - frct.lam = t.lam - indx.lam; - frct.phi = t.phi - indx.phi; - val.lam = val.phi = HUGE_VAL; - if (indx.lam < 0) { - if (indx.lam == -1 && frct.lam > 0.99999999999) { - ++indx.lam; - frct.lam = 0.; - } else - return val; - } else if ((in = indx.lam + 1) >= ct->lim.lam) { - if (in == ct->lim.lam && frct.lam < 1e-11) { - --indx.lam; - frct.lam = 1.; - } else - return val; - } - if (indx.phi < 0) { - if (indx.phi == -1 && frct.phi > 0.99999999999) { - ++indx.phi; - frct.phi = 0.; - } else - return val; - } else if ((in = indx.phi + 1) >= ct->lim.phi) { - if (in == ct->lim.phi && frct.phi < 1e-11) { - --indx.phi; - frct.phi = 1.; - } else - return val; - } - index = indx.phi * ct->lim.lam + indx.lam; - f00 = ct->cvs + index++; - f10 = ct->cvs + index; - index += ct->lim.lam; - f11 = ct->cvs + index--; - f01 = ct->cvs + index; - m11 = m10 = frct.lam; - m00 = m01 = 1. - frct.lam; - m11 *= frct.phi; - m01 *= frct.phi; - frct.phi = 1. - frct.phi; - m00 *= frct.phi; - m10 *= frct.phi; - val.lam = m00 * f00->lam + m10 * f10->lam + - m01 * f01->lam + m11 * f11->lam; - val.phi = m00 * f00->phi + m10 * f10->phi + - m01 * f01->phi + m11 * f11->phi; - return val; -} diff --git a/src/3rdparty/proj/nad_list.h b/src/3rdparty/proj/nad_list.h deleted file mode 100644 index f82a2ab7..00000000 --- a/src/3rdparty/proj/nad_list.h +++ /dev/null @@ -1,6 +0,0 @@ -/* projection list for program nad2nad */ -PROJ_HEAD(lcc, "Lambert Conformal Conic") -PROJ_HEAD(omerc, "Oblique Mercator") -PROJ_HEAD(poly, "Polyconic (American)") -PROJ_HEAD(tmerc, "Transverse Mercator") -PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") diff --git a/src/3rdparty/proj/org_proj4_Projections.h b/src/3rdparty/proj/org_proj4_Projections.h deleted file mode 100644 index 3841e057..00000000 --- a/src/3rdparty/proj/org_proj4_Projections.h +++ /dev/null @@ -1,37 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include <jni.h> -/* Header for class org_proj4_Projections */ - -#ifndef _Included_org_proj4_Projections -#define _Included_org_proj4_Projections -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_proj4_Projections - * Method: getProjInfo - * Signature: (Ljava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getProjInfo - (JNIEnv *, jobject, jstring); - -/* - * Class: org_proj4_Projections - * Method: getEllipsInfo - * Signature: (Ljava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getEllipsInfo - (JNIEnv *, jobject, jstring); - -/* - * Class: org_proj4_Projections - * Method: transform - * Signature: ([D[D[DLjava/lang/String;Ljava/lang/String;JI)V - */ -JNIEXPORT void JNICALL Java_org_proj4_Projections_transform - (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jstring, jstring, jlong, jint); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/3rdparty/proj/p_series.c b/src/3rdparty/proj/p_series.c deleted file mode 100644 index 7499ab49..00000000 --- a/src/3rdparty/proj/p_series.c +++ /dev/null @@ -1,39 +0,0 @@ -/* print row coefficients of Tseries structure */ -#include "projects.h" -#include <stdio.h> -#include <string.h> -#define NF 20 /* length of final format string */ -#define CUT 60 /* check length of line */ - void -p_series(Tseries *T, FILE *file, char *fmt) { - int i, j, n, L; - char format[NF+1]; - - *format = ' '; - strncpy(format + 1, fmt, NF - 3); - strcat(format, "%n"); - fprintf(file, "u: %d\n", T->mu+1); - for (i = 0; i <= T->mu; ++i) - if (T->cu[i].m) { - fprintf(file, "%d %d%n", i, T->cu[i].m, &L); - n = 0; - for (j = 0; j < T->cu[i].m; ++j) { - if ((L += n) > CUT) - fprintf(file, "\n %n", &L); - fprintf(file, format, T->cu[i].c[j], &n); - } - fputc('\n', file); - } - fprintf(file, "v: %d\n", T->mv+1); - for (i = 0; i <= T->mv; ++i) - if (T->cv[i].m) { - fprintf(file, "%d %d%n", i, T->cv[i].m, &L); - n = 0; - for (j = 0; j < T->cv[i].m; ++j) { - if ((L += n) > 60) - fprintf(file, "\n %n", &L); - fprintf(file, format, T->cv[i].c[j], &n); - } - fputc('\n', file); - } -} diff --git a/src/3rdparty/proj/pj_apply_gridshift.c b/src/3rdparty/proj/pj_apply_gridshift.c deleted file mode 100644 index 9ccfee39..00000000 --- a/src/3rdparty/proj/pj_apply_gridshift.c +++ /dev/null @@ -1,151 +0,0 @@ -/****************************************************************************** - * $Id: pj_apply_gridshift.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Apply datum shifts based on grid shift files (normally NAD27 to - * NAD83 or the reverse). This module is responsible for keeping - * a list of loaded grids, and calling with each one that is - * allowed for a given datum (expressed as the nadgrids= parameter). - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam <warmerdam@pobox.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ - -#include <projects.h> -#include <string.h> -#include <math.h> - -/************************************************************************/ -/* pj_apply_gridshift() */ -/************************************************************************/ - -int pj_apply_gridshift( const char *nadgrids, int inverse, - long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - int grid_count = 0; - PJ_GRIDINFO **tables; - int i; - int debug_flag = getenv( "PROJ_DEBUG" ) != NULL; - static int debug_count = 0; - - pj_errno = 0; - - tables = pj_gridlist_from_nadgrids( nadgrids, &grid_count); - if( tables == NULL || grid_count == 0 ) - return pj_errno; - - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - LP input, output; - int itable; - - input.phi = y[io]; - input.lam = x[io]; - output.phi = HUGE_VAL; - output.lam = HUGE_VAL; - - /* keep trying till we find a table that works */ - for( itable = 0; itable < grid_count; itable++ ) - { - PJ_GRIDINFO *gi = tables[itable]; - struct CTABLE *ct = gi->ct; - - /* skip tables that don't match our point at all. */ - if( ct->ll.phi > input.phi || ct->ll.lam > input.lam - || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi - || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam ) - continue; - - /* If we have child nodes, check to see if any of them apply. */ - if( gi->child != NULL ) - { - PJ_GRIDINFO *child; - - for( child = gi->child; child != NULL; child = child->next ) - { - struct CTABLE *ct1 = child->ct; - - if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam - || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi - || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam) - continue; - - break; - } - - /* we found a more refined child node to use */ - if( child != NULL ) - { - gi = child; - ct = child->ct; - } - } - - /* load the grid shift info if we don't have it. */ - if( ct->cvs == NULL && !pj_gridinfo_load( gi ) ) - { - pj_errno = -38; - return pj_errno; - } - - output = nad_cvt( input, inverse, ct ); - if( output.lam != HUGE_VAL ) - { - if( debug_flag && debug_count++ < 20 ) - fprintf( stderr, - "pj_apply_gridshift(): used %s\n", - ct->id ); - break; - } - } - - if( output.lam == HUGE_VAL ) - { - if( debug_flag ) - { - fprintf( stderr, - "pj_apply_gridshift(): failed to find a grid shift table for\n" - " location (%.7fdW,%.7fdN)\n", - x[io] * RAD_TO_DEG, - y[io] * RAD_TO_DEG ); - fprintf( stderr, - " tried: %s\n", nadgrids ); - } - - pj_errno = -38; - return pj_errno; - } - else - { - y[io] = output.phi; - x[io] = output.lam; - } - } - - return 0; -} - diff --git a/src/3rdparty/proj/pj_auth.c b/src/3rdparty/proj/pj_auth.c deleted file mode 100644 index 599b8f77..00000000 --- a/src/3rdparty/proj/pj_auth.c +++ /dev/null @@ -1,30 +0,0 @@ -/* determine latitude from authalic latitude */ -#include <projects.h> -# define P00 .33333333333333333333 -# define P01 .17222222222222222222 -# define P02 .10257936507936507936 -# define P10 .06388888888888888888 -# define P11 .06640211640211640211 -# define P20 .01641501294219154443 -#define APA_SIZE 3 - double * -pj_authset(double es) { - double t, *APA; - - if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double))) { - APA[0] = es * P00; - t = es * es; - APA[0] += t * P01; - APA[1] = t * P10; - t *= es; - APA[0] += t * P02; - APA[1] += t * P11; - APA[2] = t * P20; - } - return APA; -} - double -pj_authlat(double beta, double *APA) { - double t = beta+beta; - return(beta + APA[0] * sin(t) + APA[1] * sin(t+t) + APA[2] * sin(t+t+t)); -} diff --git a/src/3rdparty/proj/pj_datum_set.c b/src/3rdparty/proj/pj_datum_set.c deleted file mode 100644 index c2b8e1bb..00000000 --- a/src/3rdparty/proj/pj_datum_set.c +++ /dev/null @@ -1,139 +0,0 @@ -/****************************************************************************** - * $Id: pj_datum_set.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Apply datum definition to PJ structure from initialization string. - * Author: Frank Warmerdam, warmerda@home.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#include <projects.h> -#include <string.h> - -/* SEC_TO_RAD = Pi/180/3600 */ -#define SEC_TO_RAD 4.84813681109535993589914102357e-6 - -/************************************************************************/ -/* pj_datum_set() */ -/************************************************************************/ - -int pj_datum_set(paralist *pl, PJ *projdef) - -{ - const char *name, *towgs84, *nadgrids; - - projdef->datum_type = PJD_UNKNOWN; - -/* -------------------------------------------------------------------- */ -/* Is there a datum definition in the parameters list? If so, */ -/* add the defining values to the parameter list. Note that */ -/* this will append the ellipse definition as well as the */ -/* towgs84= and related parameters. It should also be pointed */ -/* out that the addition is permanent rather than temporary */ -/* like most other keyword expansion so that the ellipse */ -/* definition will last into the pj_ell_set() function called */ -/* after this one. */ -/* -------------------------------------------------------------------- */ - if( (name = pj_param(pl,"sdatum").s) != NULL ) - { - paralist *curr; - const char *s; - int i; - - /* find the end of the list, so we can add to it */ - for (curr = pl; curr && curr->next ; curr = curr->next) {} - - /* find the datum definition */ - for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {} - - if (!s) { pj_errno = -9; return 1; } - - if( pj_datums[i].ellipse_id && strlen(pj_datums[i].ellipse_id) > 0 ) - { - char entry[100]; - - strcpy( entry, "ellps=" ); - strncat( entry, pj_datums[i].ellipse_id, 80 ); - curr = curr->next = pj_mkparam(entry); - } - - if( pj_datums[i].defn && strlen(pj_datums[i].defn) > 0 ) - curr = curr->next = pj_mkparam(pj_datums[i].defn); - } - -/* -------------------------------------------------------------------- */ -/* Check for nadgrids parameter. */ -/* -------------------------------------------------------------------- */ - if( (nadgrids = pj_param(pl,"snadgrids").s) != NULL ) - { - /* We don't actually save the value separately. It will continue - to exist int he param list for use in pj_apply_gridshift.c */ - - projdef->datum_type = PJD_GRIDSHIFT; - } - -/* -------------------------------------------------------------------- */ -/* Check for towgs84 parameter. */ -/* -------------------------------------------------------------------- */ - else if( (towgs84 = pj_param(pl,"stowgs84").s) != NULL ) - { - int parm_count = 0; - const char *s; - - memset( projdef->datum_params, 0, sizeof(double) * 7); - - /* parse out the parameters */ - s = towgs84; - for( s = towgs84; *s != '\0' && parm_count < 7; ) - { - projdef->datum_params[parm_count++] = atof(s); - while( *s != '\0' && *s != ',' ) - s++; - if( *s == ',' ) - s++; - } - - if( projdef->datum_params[3] != 0.0 - || projdef->datum_params[4] != 0.0 - || projdef->datum_params[5] != 0.0 - || projdef->datum_params[6] != 0.0 ) - { - projdef->datum_type = PJD_7PARAM; - - /* transform from arc seconds to radians */ - projdef->datum_params[3] *= SEC_TO_RAD; - projdef->datum_params[4] *= SEC_TO_RAD; - projdef->datum_params[5] *= SEC_TO_RAD; - /* transform from parts per million to scaling factor */ - projdef->datum_params[6] = - (projdef->datum_params[6]/1000000.0) + 1; - } - else - projdef->datum_type = PJD_3PARAM; - - /* Note that pj_init() will later switch datum_type to - PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */ - } - - return 0; -} diff --git a/src/3rdparty/proj/pj_datums.c b/src/3rdparty/proj/pj_datums.c deleted file mode 100644 index be0bb8b0..00000000 --- a/src/3rdparty/proj/pj_datums.c +++ /dev/null @@ -1,90 +0,0 @@ -/****************************************************************************** - * $Id: pj_datums.c 1558 2009-04-02 18:25:58Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Built in datum list. - * Author: Frank Warmerdam, warmerda@home.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_DATUMS__ - -#include <projects.h> - -/* - * The ellipse code must match one from pj_ellps.c. The datum id should - * be kept to 12 characters or less if possible. Use the official OGC - * datum name for the comments if available. - */ - -C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[] = { -/* id definition ellipse comments */ -/* -- ---------- ------- -------- */ -"WGS84", "towgs84=0,0,0", "WGS84", "", -"GGRS87", "towgs84=-199.87,74.79,246.62", "GRS80", - "Greek_Geodetic_Reference_System_1987", -"NAD83", "towgs84=0,0,0", "GRS80", - "North_American_Datum_1983", -"NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", - "clrk66", - "North_American_Datum_1927", -"potsdam", "towgs84=606.0,23.0,413.0", "bessel", "Potsdam Rauenberg 1950 DHDN", -"carthage", "towgs84=-263.0,6.0,431.0", "clark80", "Carthage 1934 Tunisia", -"hermannskogel", "towgs84=653.0,-212.0,449.0", "bessel", "Hermannskogel", -"ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", "mod_airy", "Ireland 1965", -"nzgd49", "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", "intl", "New Zealand Geodetic Datum 1949", -"OSGB36", "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", "airy", "Airy 1830", -NULL, NULL, NULL, NULL -}; - -struct PJ_DATUMS *pj_get_datums_ref() - -{ - return pj_datums; -} - -C_NAMESPACE_VAR struct PJ_PRIME_MERIDIANS pj_prime_meridians[] = { - /* id definition */ - /* -- ---------- */ - "greenwich", "0dE", - "lisbon", "9d07'54.862\"W", - "paris", "2d20'14.025\"E", - "bogota", "74d04'51.3\"W", - "madrid", "3d41'16.58\"W", - "rome", "12d27'8.4\"E", - "bern", "7d26'22.5\"E", - "jakarta", "106d48'27.79\"E", - "ferro", "17d40'W", - "brussels", "4d22'4.71\"E", - "stockholm", "18d3'29.8\"E", - "athens", "23d42'58.815\"E", - "oslo", "10d43'22.5\"E", - NULL, NULL -}; - -struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref() - -{ - return pj_prime_meridians; -} - diff --git a/src/3rdparty/proj/pj_deriv.c b/src/3rdparty/proj/pj_deriv.c deleted file mode 100644 index 7b4ef627..00000000 --- a/src/3rdparty/proj/pj_deriv.c +++ /dev/null @@ -1,33 +0,0 @@ -/* dervative of (*P->fwd) projection */ -#define PJ_LIB__ -#include "projects.h" - int -pj_deriv(LP lp, double h, PJ *P, struct DERIVS *der) { - XY t; - - lp.lam += h; - lp.phi += h; - if (fabs(lp.phi) > HALFPI) return 1; - h += h; - t = (*P->fwd)(lp, P); - if (t.x == HUGE_VAL) return 1; - der->x_l = t.x; der->y_p = t.y; der->x_p = -t.x; der->y_l = -t.y; - lp.phi -= h; - if (fabs(lp.phi) > HALFPI) return 1; - t = (*P->fwd)(lp, P); - if (t.x == HUGE_VAL) return 1; - der->x_l += t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l -= t.y; - lp.lam -= h; - t = (*P->fwd)(lp, P); - if (t.x == HUGE_VAL) return 1; - der->x_l -= t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l += t.y; - lp.phi += h; - t = (*P->fwd)(lp, P); - if (t.x == HUGE_VAL) return 1; - der->x_l -= t.x; der->y_p += t.y; der->x_p -= t.x; der->y_l += t.y; - der->x_l /= (h += h); - der->y_p /= h; - der->x_p /= h; - der->y_l /= h; - return 0; -} diff --git a/src/3rdparty/proj/pj_ell_set.c b/src/3rdparty/proj/pj_ell_set.c deleted file mode 100644 index 989701ec..00000000 --- a/src/3rdparty/proj/pj_ell_set.c +++ /dev/null @@ -1,102 +0,0 @@ -/* set ellipsoid parameters a and es */ -#include <projects.h> -#include <string.h> -#define SIXTH .1666666666666666667 /* 1/6 */ -#define RA4 .04722222222222222222 /* 17/360 */ -#define RA6 .02215608465608465608 /* 67/3024 */ -#define RV4 .06944444444444444444 /* 5/72 */ -#define RV6 .04243827160493827160 /* 55/1296 */ - int /* initialize geographic shape parameters */ -pj_ell_set(paralist *pl, double *a, double *es) { - int i; - double b=0.0, e; - char *name; - paralist *start = 0, *curr; - - /* check for varying forms of ellipsoid input */ - *a = *es = 0.; - /* R takes precedence */ - if (pj_param(pl, "tR").i) - *a = pj_param(pl, "dR").f; - else { /* probable elliptical figure */ - - /* check if ellps present and temporarily append its values to pl */ - if (name = pj_param(pl, "sellps").s) { - char *s; - - for (start = pl; start && start->next ; start = start->next) ; - curr = start; - for (i = 0; (s = pj_ellps[i].id) && strcmp(name, s) ; ++i) ; - if (!s) { pj_errno = -9; return 1; } - curr = curr->next = pj_mkparam(pj_ellps[i].major); - curr = curr->next = pj_mkparam(pj_ellps[i].ell); - } - *a = pj_param(pl, "da").f; - if (pj_param(pl, "tes").i) /* eccentricity squared */ - *es = pj_param(pl, "des").f; - else if (pj_param(pl, "te").i) { /* eccentricity */ - e = pj_param(pl, "de").f; - *es = e * e; - } else if (pj_param(pl, "trf").i) { /* recip flattening */ - *es = pj_param(pl, "drf").f; - if (!*es) { - pj_errno = -10; - goto bomb; - } - *es = 1./ *es; - *es = *es * (2. - *es); - } else if (pj_param(pl, "tf").i) { /* flattening */ - *es = pj_param(pl, "df").f; - *es = *es * (2. - *es); - } else if (pj_param(pl, "tb").i) { /* minor axis */ - b = pj_param(pl, "db").f; - *es = 1. - (b * b) / (*a * *a); - } /* else *es == 0. and sphere of radius *a */ - if (!b) - b = *a * sqrt(1. - *es); - /* following options turn ellipsoid into equivalent sphere */ - if (pj_param(pl, "bR_A").i) { /* sphere--area of ellipsoid */ - *a *= 1. - *es * (SIXTH + *es * (RA4 + *es * RA6)); - *es = 0.; - } else if (pj_param(pl, "bR_V").i) { /* sphere--vol. of ellipsoid */ - *a *= 1. - *es * (SIXTH + *es * (RV4 + *es * RV6)); - *es = 0.; - } else if (pj_param(pl, "bR_a").i) { /* sphere--arithmetic mean */ - *a = .5 * (*a + b); - *es = 0.; - } else if (pj_param(pl, "bR_g").i) { /* sphere--geometric mean */ - *a = sqrt(*a * b); - *es = 0.; - } else if (pj_param(pl, "bR_h").i) { /* sphere--harmonic mean */ - *a = 2. * *a * b / (*a + b); - *es = 0.; - } else if ((i = pj_param(pl, "tR_lat_a").i) || /* sphere--arith. */ - pj_param(pl, "tR_lat_g").i) { /* or geom. mean at latitude */ - double tmp; - - tmp = sin(pj_param(pl, i ? "rR_lat_a" : "rR_lat_g").f); - if (fabs(tmp) > HALFPI) { - pj_errno = -11; - goto bomb; - } - tmp = 1. - *es * tmp * tmp; - *a *= i ? .5 * (1. - *es + tmp) / ( tmp * sqrt(tmp)) : - sqrt(1. - *es) / tmp; - *es = 0.; - } -bomb: - if (start) { /* clean up temporary extension of list */ - pj_dalloc(start->next->next); - pj_dalloc(start->next); - start->next = 0; - } - if (pj_errno) - return 1; - } - /* some remaining checks */ - if (*es < 0.) - { pj_errno = -12; return 1; } - if (*a <= 0.) - { pj_errno = -13; return 1; } - return 0; -} diff --git a/src/3rdparty/proj/pj_ellps.c b/src/3rdparty/proj/pj_ellps.c deleted file mode 100644 index 68521926..00000000 --- a/src/3rdparty/proj/pj_ellps.c +++ /dev/null @@ -1,56 +0,0 @@ -/* definition of standard geoids */ -#define PJ_ELLPS__ -#include "projects.h" - -C_NAMESPACE_VAR struct PJ_ELLPS -pj_ellps[] = { -"MERIT", "a=6378137.0", "rf=298.257", "MERIT 1983", -"SGS85", "a=6378136.0", "rf=298.257", "Soviet Geodetic System 85", -"GRS80", "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)", -"IAU76", "a=6378140.0", "rf=298.257", "IAU 1976", -"airy", "a=6377563.396", "b=6356256.910", "Airy 1830", -"APL4.9", "a=6378137.0.", "rf=298.25", "Appl. Physics. 1965", -"NWL9D", "a=6378145.0.", "rf=298.25", "Naval Weapons Lab., 1965", -"mod_airy", "a=6377340.189", "b=6356034.446", "Modified Airy", -"andrae", "a=6377104.43", "rf=300.0", "Andrae 1876 (Den., Iclnd.)", -"aust_SA", "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969", -"GRS67", "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)", -"bessel", "a=6377397.155", "rf=299.1528128", "Bessel 1841", -"bess_nam", "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)", -"clrk66", "a=6378206.4", "b=6356583.8", "Clarke 1866", -"clrk80", "a=6378249.145", "rf=293.4663", "Clarke 1880 mod.", -"CPM", "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799", -"delmbr", "a=6376428.", "rf=311.5", "Delambre 1810 (Belgium)", -"engelis", "a=6378136.05", "rf=298.2566", "Engelis 1985", -"evrst30", "a=6377276.345", "rf=300.8017", "Everest 1830", -"evrst48", "a=6377304.063", "rf=300.8017", "Everest 1948", -"evrst56", "a=6377301.243", "rf=300.8017", "Everest 1956", -"evrst69", "a=6377295.664", "rf=300.8017", "Everest 1969", -"evrstSS", "a=6377298.556", "rf=300.8017", "Everest (Sabah & Sarawak)", -"fschr60", "a=6378166.", "rf=298.3", "Fischer (Mercury Datum) 1960", -"fschr60m", "a=6378155.", "rf=298.3", "Modified Fischer 1960", -"fschr68", "a=6378150.", "rf=298.3", "Fischer 1968", -"helmert", "a=6378200.", "rf=298.3", "Helmert 1906", -"hough", "a=6378270.0", "rf=297.", "Hough", -"intl", "a=6378388.0", "rf=297.", "International 1909 (Hayford)", -"krass", "a=6378245.0", "rf=298.3", "Krassovsky, 1942", -"kaula", "a=6378163.", "rf=298.24", "Kaula 1961", -"lerch", "a=6378139.", "rf=298.257", "Lerch 1979", -"mprts", "a=6397300.", "rf=191.", "Maupertius 1738", -"new_intl", "a=6378157.5", "b=6356772.2", "New International 1967", -"plessis", "a=6376523.", "b=6355863.", "Plessis 1817 (France)", -"SEasia", "a=6378155.0", "b=6356773.3205", "Southeast Asia", -"walbeck", "a=6376896.0", "b=6355834.8467", "Walbeck", -"WGS60", "a=6378165.0", "rf=298.3", "WGS 60", -"WGS66", "a=6378145.0", "rf=298.25", "WGS 66", -"WGS72", "a=6378135.0", "rf=298.26", "WGS 72", -"WGS84", "a=6378137.0", "rf=298.257223563", "WGS 84", -"sphere", "a=6370997.0", "b=6370997.0", "Normal Sphere (r=6370997)", -0,0,0,0 -}; - -struct PJ_ELLPS *pj_get_ellps_ref() - -{ - return pj_ellps; -} diff --git a/src/3rdparty/proj/pj_errno.c b/src/3rdparty/proj/pj_errno.c deleted file mode 100644 index 8b91ab29..00000000 --- a/src/3rdparty/proj/pj_errno.c +++ /dev/null @@ -1,17 +0,0 @@ -/* For full ANSI compliance of global variable */ - -#include <projects.h> - -C_NAMESPACE_VAR int pj_errno = 0; - -/************************************************************************/ -/* pj_get_errno_ref() */ -/************************************************************************/ - -int *pj_get_errno_ref() - -{ - return &pj_errno; -} - -/* end */ diff --git a/src/3rdparty/proj/pj_factors.c b/src/3rdparty/proj/pj_factors.c deleted file mode 100644 index ee48cfb7..00000000 --- a/src/3rdparty/proj/pj_factors.c +++ /dev/null @@ -1,84 +0,0 @@ -/* projection scale factors */ -#define PJ_LIB__ -#include <projects.h> -#include <errno.h> -#ifndef DEFAULT_H -#define DEFAULT_H 1e-5 /* radian default for numeric h */ -#endif -#define EPS 1.0e-12 - int -pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { - struct DERIVS der; - double cosphi, t, n, r; - - /* check for forward and latitude or longitude overange */ - if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { - pj_errno = -14; - return 1; - } else { /* proceed */ - errno = pj_errno = 0; - if (h < EPS) - h = DEFAULT_H; - if (fabs(lp.phi) > (HALFPI - h)) - /* adjust to value around pi/2 where derived still exists*/ - lp.phi = lp.phi < 0. ? (-HALFPI+h) : (HALFPI-h); - else if (P->geoc) - lp.phi = atan(P->rone_es * tan(lp.phi)); - lp.lam -= P->lam0; /* compute del lp.lam */ - if (!P->over) - lp.lam = adjlon(lp.lam); /* adjust del longitude */ - if (P->spc) /* get what projection analytic values */ - P->spc(lp, P, fac); - if (((fac->code & (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) != - (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) && - pj_deriv(lp, h, P, &der)) - return 1; - if (!(fac->code & IS_ANAL_XL_YL)) { - fac->der.x_l = der.x_l; - fac->der.y_l = der.y_l; - } - if (!(fac->code & IS_ANAL_XP_YP)) { - fac->der.x_p = der.x_p; - fac->der.y_p = der.y_p; - } - cosphi = cos(lp.phi); - if (!(fac->code & IS_ANAL_HK)) { - fac->h = hypot(fac->der.x_p, fac->der.y_p); - fac->k = hypot(fac->der.x_l, fac->der.y_l) / cosphi; - if (P->es) { - t = sin(lp.phi); - t = 1. - P->es * t * t; - n = sqrt(t); - fac->h *= t * n / P->one_es; - fac->k *= n; - r = t * t / P->one_es; - } else - r = 1.; - } else if (P->es) { - r = sin(lp.phi); - r = 1. - P->es * r * r; - r = r * r / P->one_es; - } else - r = 1.; - /* convergence */ - if (!(fac->code & IS_ANAL_CONV)) { - fac->conv = - atan2(fac->der.y_l, fac->der.x_l); - if (fac->code & IS_ANAL_XL_YL) - fac->code |= IS_ANAL_CONV; - } - /* areal scale factor */ - fac->s = (fac->der.y_p * fac->der.x_l - fac->der.x_p * fac->der.y_l) * - r / cosphi; - /* meridian-parallel angle theta prime */ - fac->thetap = aasin(fac->s / (fac->h * fac->k)); - /* Tissot ellips axis */ - t = fac->k * fac->k + fac->h * fac->h; - fac->a = sqrt(t + 2. * fac->s); - t = (t = t - 2. * fac->s) <= 0. ? 0. : sqrt(t); - fac->b = 0.5 * (fac->a - t); - fac->a = 0.5 * (fac->a + t); - /* omega */ - fac->omega = 2. * aasin((fac->a - fac->b)/(fac->a + fac->b)); - } - return 0; -} diff --git a/src/3rdparty/proj/pj_fwd.c b/src/3rdparty/proj/pj_fwd.c deleted file mode 100644 index 880a9319..00000000 --- a/src/3rdparty/proj/pj_fwd.c +++ /dev/null @@ -1,34 +0,0 @@ -/* general forward projection */ -#define PJ_LIB__ -#include <projects.h> -#include <errno.h> -# define EPS 1.0e-12 - XY /* forward projection entry */ -pj_fwd(LP lp, PJ *P) { - XY xy; - double t; - - /* check for forward and latitude or longitude overange */ - if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { - xy.x = xy.y = HUGE_VAL; - pj_errno = -14; - } else { /* proceed with projection */ - errno = pj_errno = 0; - if (fabs(t) <= EPS) - lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; - else if (P->geoc) - lp.phi = atan(P->rone_es * tan(lp.phi)); - lp.lam -= P->lam0; /* compute del lp.lam */ - if (!P->over) - lp.lam = adjlon(lp.lam); /* adjust del longitude */ - xy = (*P->fwd)(lp, P); /* project */ - if (pj_errno || (pj_errno = errno)) - xy.x = xy.y = HUGE_VAL; - /* adjust for major axis and easting/northings */ - else { - xy.x = P->fr_meter * (P->a * xy.x + P->x0); - xy.y = P->fr_meter * (P->a * xy.y + P->y0); - } - } - return xy; -} diff --git a/src/3rdparty/proj/pj_gauss.c b/src/3rdparty/proj/pj_gauss.c deleted file mode 100644 index ac794f20..00000000 --- a/src/3rdparty/proj/pj_gauss.c +++ /dev/null @@ -1,94 +0,0 @@ -/* -** libproj -- library of cartographic projections -** -** Copyright (c) 2003 Gerald I. Evenden -*/ -static const char -LIBPROJ_ID[] = "$Id: pj_gauss.c 1504 2009-01-06 02:11:57Z warmerdam $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#define PJ_LIB__ -#include <projects.h> - -#define MAX_ITER 20 - -struct GAUSS { - double C; - double K; - double e; - double ratexp; -}; -#define EN ((struct GAUSS *)en) -#define DEL_TOL 1e-14 - static double -srat(double esinp, double exp) { - return(pow((1.-esinp)/(1.+esinp), exp)); -} - - void * -pj_gauss_ini(double e, double phi0, double *chi, double *rc) { - double sphi, cphi, es; - struct GAUSS *en; - - if ((en = (struct GAUSS *)malloc(sizeof(struct GAUSS))) == NULL) - return (NULL); - es = e * e; - EN->e = e; - sphi = sin(phi0); - cphi = cos(phi0); cphi *= cphi; - *rc = sqrt(1. - es) / (1. - es * sphi * sphi); - EN->C = sqrt(1. + es * cphi * cphi / (1. - es)); - *chi = asin(sphi / EN->C); - EN->ratexp = 0.5 * EN->C * e; - EN->K = tan(.5 * *chi + FORTPI) / ( - pow(tan(.5 * phi0 + FORTPI), EN->C) * - srat(EN->e * sphi, EN->ratexp) ); - return ((void *)en); -} - LP -pj_gauss(LP elp, const void *en) { - LP slp; - - slp.phi = 2. * atan( EN->K * - pow(tan(.5 * elp.phi + FORTPI), EN->C) * - srat(EN->e * sin(elp.phi), EN->ratexp) ) - HALFPI; - slp.lam = EN->C * (elp.lam); - return(slp); -} - LP -pj_inv_gauss(LP slp, const void *en) { - LP elp; - double num; - int i; - - elp.lam = slp.lam / EN->C; - num = pow(tan(.5 * slp.phi + FORTPI)/EN->K, 1./EN->C); - for (i = MAX_ITER; i; --i) { - elp.phi = 2. * atan(num * srat(EN->e * sin(slp.phi), -.5 * EN->e)) - - HALFPI; - if (fabs(elp.phi - slp.phi) < DEL_TOL) break; - slp.phi = elp.phi; - } - /* convergence failed */ - if (!i) - pj_errno = -17; - return (elp); -} diff --git a/src/3rdparty/proj/pj_geocent.c b/src/3rdparty/proj/pj_geocent.c deleted file mode 100644 index e94730f2..00000000 --- a/src/3rdparty/proj/pj_geocent.c +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************** - * $Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Stub projection for geocentric. The transformation isn't - * really done here since this code is 2D. The real transformation - * is handled by pj_transform.c. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2002, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ -#include <projects.h> - -PJ_CVSID("$Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -PROJ_HEAD(geocent, "Geocentric") "\n\t"; - -FORWARD(forward); - xy.x = lp.lam; - xy.y = lp.phi; - return xy; -} -INVERSE(inverse); - lp.phi = xy.y; - lp.lam = xy.x; - return lp; -} -FREEUP; if (P) pj_dalloc(P); } - -ENTRY0(geocent) - P->is_geocent = 1; - P->x0 = 0.0; - P->y0 = 0.0; - P->inv = inverse; P->fwd = forward; -ENDENTRY(P) - diff --git a/src/3rdparty/proj/pj_gridinfo.c b/src/3rdparty/proj/pj_gridinfo.c deleted file mode 100644 index 7a4612f1..00000000 --- a/src/3rdparty/proj/pj_gridinfo.c +++ /dev/null @@ -1,686 +0,0 @@ -/****************************************************************************** - * $Id: pj_gridinfo.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Functions for handling individual PJ_GRIDINFO's. Includes - * loaders for all formats but CTABLE (in nad_init.c). - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam <warmerdam@pobox.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ - -#include <projects.h> -#include <string.h> -#include <math.h> -#include <errno.h> - -#ifdef _WIN32_WCE -/* assert.h includes all Windows API headers and causes 'LP' name clash. - * Here assert we disable assert() for Windows CE. - * TODO - mloskot: re-implement porting friendly assert - */ -# define assert(exp) ((void)0) -#else -# include <assert.h> -#endif /* _WIN32_WCE */ - -/************************************************************************/ -/* swap_words() */ -/* */ -/* Convert the byte order of the given word(s) in place. */ -/************************************************************************/ - -static int byte_order_test = 1; -#define IS_LSB (((unsigned char *) (&byte_order_test))[0] == 1) - -static void swap_words( unsigned char *data, int word_size, int word_count ) - -{ - int word; - - for( word = 0; word < word_count; word++ ) - { - int i; - - for( i = 0; i < word_size/2; i++ ) - { - int t; - - t = data[i]; - data[i] = data[word_size-i-1]; - data[word_size-i-1] = t; - } - - data += word_size; - } -} - -/************************************************************************/ -/* pj_gridinfo_free() */ -/************************************************************************/ - -void pj_gridinfo_free( PJ_GRIDINFO *gi ) - -{ - if( gi == NULL ) - return; - - if( gi->child != NULL ) - { - PJ_GRIDINFO *child, *next; - - for( child = gi->child; child != NULL; child=next) - { - next=child->next; - pj_gridinfo_free( child ); - } - } - - if( gi->ct != NULL ) - nad_free( gi->ct ); - - free( gi->gridname ); - if( gi->filename != NULL ) - free( gi->filename ); - - pj_dalloc( gi ); -} - -/************************************************************************/ -/* pj_gridinfo_load() */ -/* */ -/* This function is intended to implement delayed loading of */ -/* the data contents of a grid file. The header and related */ -/* stuff are loaded by pj_gridinfo_init(). */ -/************************************************************************/ - -int pj_gridinfo_load( PJ_GRIDINFO *gi ) - -{ - if( gi == NULL || gi->ct == NULL ) - return 0; - -/* -------------------------------------------------------------------- */ -/* ctable is currently loaded on initialization though there is */ -/* no real reason not to support delayed loading for it as well. */ -/* -------------------------------------------------------------------- */ - if( strcmp(gi->format,"ctable") == 0 ) - { - FILE *fid; - int result; - - fid = pj_open_lib( gi->filename, "rb" ); - - if( fid == NULL ) - { - pj_errno = -38; - return 0; - } - - result = nad_ctable_load( gi->ct, fid ); - - fclose( fid ); - - return result; - } - -/* -------------------------------------------------------------------- */ -/* NTv1 format. */ -/* We process one line at a time. Note that the array storage */ -/* direction (e-w) is different in the NTv1 file and what */ -/* the CTABLE is supposed to have. The phi/lam are also */ -/* reversed, and we have to be aware of byte swapping. */ -/* -------------------------------------------------------------------- */ - else if( strcmp(gi->format,"ntv1") == 0 ) - { - double *row_buf; - int row; - FILE *fid; - - fid = pj_open_lib( gi->filename, "rb" ); - - if( fid == NULL ) - { - pj_errno = -38; - return 0; - } - - fseek( fid, gi->grid_offset, SEEK_SET ); - - row_buf = (double *) pj_malloc(gi->ct->lim.lam * sizeof(double) * 2); - gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); - if( row_buf == NULL || gi->ct->cvs == NULL ) - { - pj_errno = -38; - return 0; - } - - for( row = 0; row < gi->ct->lim.phi; row++ ) - { - int i; - FLP *cvs; - double *diff_seconds; - - if( fread( row_buf, sizeof(double), gi->ct->lim.lam * 2, fid ) - != 2 * gi->ct->lim.lam ) - { - pj_dalloc( row_buf ); - pj_dalloc( gi->ct->cvs ); - pj_errno = -38; - return 0; - } - - if( IS_LSB ) - swap_words( (unsigned char *) row_buf, 8, gi->ct->lim.lam*2 ); - - /* convert seconds to radians */ - diff_seconds = row_buf; - - for( i = 0; i < gi->ct->lim.lam; i++ ) - { - cvs = gi->ct->cvs + (row) * gi->ct->lim.lam - + (gi->ct->lim.lam - i - 1); - - cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0); - cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0); - } - } - - pj_dalloc( row_buf ); - - fclose( fid ); - - return 1; - } - -/* -------------------------------------------------------------------- */ -/* NTv2 format. */ -/* We process one line at a time. Note that the array storage */ -/* direction (e-w) is different in the NTv2 file and what */ -/* the CTABLE is supposed to have. The phi/lam are also */ -/* reversed, and we have to be aware of byte swapping. */ -/* -------------------------------------------------------------------- */ - else if( strcmp(gi->format,"ntv2") == 0 ) - { - float *row_buf; - int row; - FILE *fid; - - if( getenv("PROJ_DEBUG") != NULL ) - { - fprintf( stderr, "NTv2 - loading grid %s\n", gi->ct->id ); - } - - fid = pj_open_lib( gi->filename, "rb" ); - - if( fid == NULL ) - { - pj_errno = -38; - return 0; - } - - fseek( fid, gi->grid_offset, SEEK_SET ); - - row_buf = (float *) pj_malloc(gi->ct->lim.lam * sizeof(float) * 4); - gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); - if( row_buf == NULL || gi->ct->cvs == NULL ) - { - pj_errno = -38; - return 0; - } - - for( row = 0; row < gi->ct->lim.phi; row++ ) - { - int i; - FLP *cvs; - float *diff_seconds; - - if( fread( row_buf, sizeof(float), gi->ct->lim.lam*4, fid ) - != 4 * gi->ct->lim.lam ) - { - pj_dalloc( row_buf ); - pj_dalloc( gi->ct->cvs ); - gi->ct->cvs = NULL; - pj_errno = -38; - return 0; - } - - if( !IS_LSB ) - swap_words( (unsigned char *) row_buf, 4, - gi->ct->lim.lam*4 ); - - /* convert seconds to radians */ - diff_seconds = row_buf; - - for( i = 0; i < gi->ct->lim.lam; i++ ) - { - cvs = gi->ct->cvs + (row) * gi->ct->lim.lam - + (gi->ct->lim.lam - i - 1); - - cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0); - cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0); - diff_seconds += 2; /* skip accuracy values */ - } - } - - pj_dalloc( row_buf ); - - fclose( fid ); - - return 1; - } - - else - { - return 0; - } -} - -/************************************************************************/ -/* pj_gridinfo_init_ntv2() */ -/* */ -/* Load a ntv2 (.gsb) file. */ -/************************************************************************/ - -static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) - -{ - unsigned char header[11*16]; - int num_subfiles, subfile; - - assert( sizeof(int) == 4 ); - assert( sizeof(double) == 8 ); - if( sizeof(int) != 4 || sizeof(double) != 8 ) - { - fprintf( stderr, - "basic types of inappropraiate size in pj_gridinfo_init_ntv2()\n" ); - pj_errno = -38; - return 0; - } - -/* -------------------------------------------------------------------- */ -/* Read the overview header. */ -/* -------------------------------------------------------------------- */ - if( fread( header, sizeof(header), 1, fid ) != 1 ) - { - pj_errno = -38; - return 0; - } - -/* -------------------------------------------------------------------- */ -/* Byte swap interesting fields if needed. */ -/* -------------------------------------------------------------------- */ - if( !IS_LSB ) - { - swap_words( header+8, 4, 1 ); - swap_words( header+8+16, 4, 1 ); - swap_words( header+8+32, 4, 1 ); - swap_words( header+8+7*16, 8, 1 ); - swap_words( header+8+8*16, 8, 1 ); - swap_words( header+8+9*16, 8, 1 ); - swap_words( header+8+10*16, 8, 1 ); - } - -/* -------------------------------------------------------------------- */ -/* Get the subfile count out ... all we really use for now. */ -/* -------------------------------------------------------------------- */ - memcpy( &num_subfiles, header+8+32, 4 ); - -/* ==================================================================== */ -/* Step through the subfiles, creating a PJ_GRIDINFO for each. */ -/* ==================================================================== */ - for( subfile = 0; subfile < num_subfiles; subfile++ ) - { - struct CTABLE *ct; - LP ur; - int gs_count; - PJ_GRIDINFO *gi; - -/* -------------------------------------------------------------------- */ -/* Read header. */ -/* -------------------------------------------------------------------- */ - if( fread( header, sizeof(header), 1, fid ) != 1 ) - { - pj_errno = -38; - return 0; - } - - if( strncmp((const char *) header,"SUB_NAME",8) != 0 ) - { - pj_errno = -38; - return 0; - } - -/* -------------------------------------------------------------------- */ -/* Byte swap interesting fields if needed. */ -/* -------------------------------------------------------------------- */ - if( !IS_LSB ) - { - swap_words( header+8+16*4, 8, 1 ); - swap_words( header+8+16*5, 8, 1 ); - swap_words( header+8+16*6, 8, 1 ); - swap_words( header+8+16*7, 8, 1 ); - swap_words( header+8+16*8, 8, 1 ); - swap_words( header+8+16*9, 8, 1 ); - swap_words( header+8+16*10, 4, 1 ); - } - -/* -------------------------------------------------------------------- */ -/* Initialize a corresponding "ct" structure. */ -/* -------------------------------------------------------------------- */ - ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); - strncpy( ct->id, (const char *) header + 8, 8 ); - ct->id[8] = '\0'; - - ct->ll.lam = - *((double *) (header+7*16+8)); /* W_LONG */ - ct->ll.phi = *((double *) (header+4*16+8)); /* S_LAT */ - - ur.lam = - *((double *) (header+6*16+8)); /* E_LONG */ - ur.phi = *((double *) (header+5*16+8)); /* N_LAT */ - - ct->del.lam = *((double *) (header+9*16+8)); - ct->del.phi = *((double *) (header+8*16+8)); - - ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; - ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; - - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, - "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", - ct->id, - ct->lim.lam, ct->lim.phi, - ct->ll.lam/3600.0, ct->ll.phi/3600.0, - ur.lam/3600.0, ur.phi/3600.0 ); - - ct->ll.lam *= DEG_TO_RAD/3600.0; - ct->ll.phi *= DEG_TO_RAD/3600.0; - ct->del.lam *= DEG_TO_RAD/3600.0; - ct->del.phi *= DEG_TO_RAD/3600.0; - - memcpy( &gs_count, header + 8 + 16*10, 4 ); - if( gs_count != ct->lim.lam * ct->lim.phi ) - { - fprintf( stderr, - "GS_COUNT(%d) does not match expected cells (%dx%d=%d)\n", - gs_count, ct->lim.lam, ct->lim.phi, - ct->lim.lam * ct->lim.phi ); - pj_errno = -38; - return 0; - } - - ct->cvs = NULL; - -/* -------------------------------------------------------------------- */ -/* Create a new gridinfo for this if we aren't processing the */ -/* 1st subfile, and initialize our grid info. */ -/* -------------------------------------------------------------------- */ - if( subfile == 0 ) - gi = gilist; - else - { - gi = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); - memset( gi, 0, sizeof(PJ_GRIDINFO) ); - - gi->gridname = strdup( gilist->gridname ); - gi->filename = strdup( gilist->filename ); - gi->next = NULL; - } - - gi->ct = ct; - gi->format = "ntv2"; - gi->grid_offset = ftell( fid ); - -/* -------------------------------------------------------------------- */ -/* Attach to the correct list or sublist. */ -/* -------------------------------------------------------------------- */ - if( strncmp((const char *)header+24,"NONE",4) == 0 ) - { - if( gi != gilist ) - { - PJ_GRIDINFO *lnk; - - for( lnk = gilist; lnk->next != NULL; lnk = lnk->next ) {} - lnk->next = gi; - } - } - - else - { - PJ_GRIDINFO *lnk; - PJ_GRIDINFO *gp = gilist; - - while( gp != NULL - && strncmp(gp->ct->id,(const char*)header+24,8) != 0 ) - gp = gp->next; - - if( gp == NULL ) - { - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, "pj_gridinfo_init_ntv2(): " - "failed to find parent %8.8s for %s.\n", - (const char *) header+24, gi->ct->id ); - - for( lnk = gp; lnk->next != NULL; lnk = lnk->next ) {} - lnk->next = gi; - } - else if( gp->child == NULL ) - { - gp->child = gi; - } - else - { - for( lnk = gp->child; lnk->next != NULL; lnk = lnk->next ) {} - lnk->next = gi; - } - } - -/* -------------------------------------------------------------------- */ -/* Seek past the data. */ -/* -------------------------------------------------------------------- */ - fseek( fid, gs_count * 16, SEEK_CUR ); - } - - return 1; -} - -/************************************************************************/ -/* pj_gridinfo_init_ntv1() */ -/* */ -/* Load an NTv1 style Canadian grid shift file. */ -/************************************************************************/ - -static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) - -{ - unsigned char header[176]; - struct CTABLE *ct; - LP ur; - - assert( sizeof(int) == 4 ); - assert( sizeof(double) == 8 ); - if( sizeof(int) != 4 || sizeof(double) != 8 ) - { - fprintf( stderr, - "basic types of inappropraiate size in nad_load_ntv1()\n" ); - pj_errno = -38; - return 0; - } - -/* -------------------------------------------------------------------- */ -/* Read the header. */ -/* -------------------------------------------------------------------- */ - if( fread( header, sizeof(header), 1, fid ) != 1 ) - { - pj_errno = -38; - return 0; - } - -/* -------------------------------------------------------------------- */ -/* Regularize fields of interest. */ -/* -------------------------------------------------------------------- */ - if( IS_LSB ) - { - swap_words( header+8, 4, 1 ); - swap_words( header+24, 8, 1 ); - swap_words( header+40, 8, 1 ); - swap_words( header+56, 8, 1 ); - swap_words( header+72, 8, 1 ); - swap_words( header+88, 8, 1 ); - swap_words( header+104, 8, 1 ); - } - - if( *((int *) (header+8)) != 12 ) - { - pj_errno = -38; - printf("NTv1 grid shift file has wrong record count, corrupt?\n"); - return 0; - } - -/* -------------------------------------------------------------------- */ -/* Fill in CTABLE structure. */ -/* -------------------------------------------------------------------- */ - ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); - strcpy( ct->id, "NTv1 Grid Shift File" ); - - ct->ll.lam = - *((double *) (header+72)); - ct->ll.phi = *((double *) (header+24)); - ur.lam = - *((double *) (header+56)); - ur.phi = *((double *) (header+40)); - ct->del.lam = *((double *) (header+104)); - ct->del.phi = *((double *) (header+88)); - ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; - ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; - - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, - "NTv1 %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", - ct->lim.lam, ct->lim.phi, - ct->ll.lam, ct->ll.phi, ur.lam, ur.phi ); - - ct->ll.lam *= DEG_TO_RAD; - ct->ll.phi *= DEG_TO_RAD; - ct->del.lam *= DEG_TO_RAD; - ct->del.phi *= DEG_TO_RAD; - ct->cvs = NULL; - - gi->ct = ct; - gi->grid_offset = ftell( fid ); - gi->format = "ntv1"; - - return 1; -} - -/************************************************************************/ -/* pj_gridinfo_init() */ -/* */ -/* Open and parse header details from a datum gridshift file */ -/* returning a list of PJ_GRIDINFOs for the grids in that */ -/* file. This superceeds use of nad_init() for modern */ -/* applications. */ -/************************************************************************/ - -PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) - -{ - char fname[MAX_PATH_FILENAME+1]; - PJ_GRIDINFO *gilist; - FILE *fp; - char header[160]; - - errno = pj_errno = 0; - -/* -------------------------------------------------------------------- */ -/* Initialize a GRIDINFO with stub info we would use if it */ -/* cannot be loaded. */ -/* -------------------------------------------------------------------- */ - gilist = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); - memset( gilist, 0, sizeof(PJ_GRIDINFO) ); - - gilist->gridname = strdup( gridname ); - gilist->filename = NULL; - gilist->format = "missing"; - gilist->grid_offset = 0; - gilist->ct = NULL; - gilist->next = NULL; - -/* -------------------------------------------------------------------- */ -/* Open the file using the usual search rules. */ -/* -------------------------------------------------------------------- */ - strcpy(fname, gridname); - if (!(fp = pj_open_lib(fname, "rb"))) { - pj_errno = errno; - return gilist; - } - - gilist->filename = strdup(fname); - -/* -------------------------------------------------------------------- */ -/* Load a header, to determine the file type. */ -/* -------------------------------------------------------------------- */ - if( fread( header, sizeof(header), 1, fp ) != 1 ) - { - fclose( fp ); - pj_errno = -38; - return gilist; - } - - fseek( fp, SEEK_SET, 0 ); - -/* -------------------------------------------------------------------- */ -/* Determine file type. */ -/* -------------------------------------------------------------------- */ - if( strncmp(header + 0, "HEADER", 6) == 0 - && strncmp(header + 96, "W GRID", 6) == 0 - && strncmp(header + 144, "TO NAD83 ", 16) == 0 ) - { - pj_gridinfo_init_ntv1( fp, gilist ); - } - - else if( strncmp(header + 0, "NUM_OREC", 8) == 0 - && strncmp(header + 48, "GS_TYPE", 7) == 0 ) - { - pj_gridinfo_init_ntv2( fp, gilist ); - } - - else - { - struct CTABLE *ct = nad_ctable_init( fp ); - - gilist->format = "ctable"; - gilist->ct = ct; - - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, - "Ctable %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", - ct->id, - ct->lim.lam, ct->lim.phi, - ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG, - (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG, - (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG ); - } - - fclose(fp); - - return gilist; -} diff --git a/src/3rdparty/proj/pj_gridlist.c b/src/3rdparty/proj/pj_gridlist.c deleted file mode 100644 index 1d141641..00000000 --- a/src/3rdparty/proj/pj_gridlist.c +++ /dev/null @@ -1,266 +0,0 @@ -/****************************************************************************** - * $Id: pj_gridlist.c 1634 2009-09-24 02:40:46Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Code to manage the list of currently loaded (cached) PJ_GRIDINFOs - * See pj_gridinfo.c for details of loading individual grids. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam <warmerdam@pobox.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ - -#include <projects.h> -#include <string.h> -#include <math.h> - -#ifdef _WIN32_WCE -/* assert.h includes all Windows API headers and causes 'LP' name clash. - * Here assert we disable assert() for Windows CE. - * TODO - mloskot: re-implement porting friendly assert - */ -# define assert(exp) ((void)0) -#else -# include <assert.h> -#endif /* _WIN32_WCE */ - -static PJ_GRIDINFO *grid_list = NULL; - -/* used only by pj_load_nadgrids() and pj_deallocate_grids() */ - -static int last_nadgrids_max = 0; -static int last_nadgrids_count = 0; -static PJ_GRIDINFO **last_nadgrids_list = NULL; -static char *last_nadgrids = NULL; - -/************************************************************************/ -/* pj_deallocate_grids() */ -/* */ -/* Deallocate all loaded grids. */ -/************************************************************************/ - -void pj_deallocate_grids() - -{ - while( grid_list != NULL ) - { - PJ_GRIDINFO *item = grid_list; - grid_list = grid_list->next; - item->next = NULL; - - pj_gridinfo_free( item ); - } - - if( last_nadgrids != NULL ) - { - pj_dalloc( last_nadgrids ); - last_nadgrids = NULL; - - pj_dalloc( last_nadgrids_list ); - last_nadgrids_list = NULL; - - last_nadgrids_count = 0; - last_nadgrids_max = 0; - } -} - -/************************************************************************/ -/* pj_gridlist_merge_grid() */ -/* */ -/* Find/load the named gridfile and merge it into the */ -/* last_nadgrids_list. */ -/************************************************************************/ - -static int pj_gridlist_merge_gridfile( const char *gridname ) - -{ - int i, got_match=0; - PJ_GRIDINFO *this_grid, *tail = NULL; - -/* -------------------------------------------------------------------- */ -/* Try to find in the existing list of loaded grids. Add all */ -/* matching grids as with NTv2 we can get many grids from one */ -/* file (one shared gridname). */ -/* -------------------------------------------------------------------- */ - for( this_grid = grid_list; this_grid != NULL; this_grid = this_grid->next) - { - if( strcmp(this_grid->gridname,gridname) == 0 ) - { - got_match = 1; - - /* dont add to the list if it is invalid. */ - if( this_grid->ct == NULL ) - return 0; - - /* do we need to grow the list? */ - if( last_nadgrids_count >= last_nadgrids_max - 2 ) - { - PJ_GRIDINFO **new_list; - int new_max = last_nadgrids_max + 20; - - new_list = (PJ_GRIDINFO **) pj_malloc(sizeof(void*) * new_max); - if( last_nadgrids_list != NULL ) - { - memcpy( new_list, last_nadgrids_list, - sizeof(void*) * last_nadgrids_max ); - pj_dalloc( last_nadgrids_list ); - } - - last_nadgrids_list = new_list; - last_nadgrids_max = new_max; - } - - /* add to the list */ - last_nadgrids_list[last_nadgrids_count++] = this_grid; - last_nadgrids_list[last_nadgrids_count] = NULL; - } - - tail = this_grid; - } - - if( got_match ) - return 1; - -/* -------------------------------------------------------------------- */ -/* Try to load the named grid. */ -/* -------------------------------------------------------------------- */ - this_grid = pj_gridinfo_init( gridname ); - - if( this_grid == NULL ) - { - /* we should get at least a stub grid with a missing "ct" member */ - assert( FALSE ); - return 0; - } - - if( tail != NULL ) - tail->next = this_grid; - else - grid_list = this_grid; - -/* -------------------------------------------------------------------- */ -/* Recurse to add the grid now that it is loaded. */ -/* -------------------------------------------------------------------- */ - return pj_gridlist_merge_gridfile( gridname ); -} - -/************************************************************************/ -/* pj_gridlist_from_nadgrids() */ -/* */ -/* This functions loads the list of grids corresponding to a */ -/* particular nadgrids string into a list, and returns it. The */ -/* list is kept around till a request is made with a different */ -/* string in order to cut down on the string parsing cost, and */ -/* the cost of building the list of tables each time. */ -/************************************************************************/ - -PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) - -{ - const char *s; - - pj_errno = 0; - *grid_count = 0; - - pj_acquire_lock(); - if( last_nadgrids != NULL - && strcmp(nadgrids,last_nadgrids) == 0 ) - { - PJ_GRIDINFO **ret = last_nadgrids_list; - *grid_count = last_nadgrids_count; - if( *grid_count == 0 ) - pj_errno = -38; - - pj_release_lock(); - return ret; - } - -/* -------------------------------------------------------------------- */ -/* Free old one, if any, and make space for new list. */ -/* -------------------------------------------------------------------- */ - if( last_nadgrids != NULL ) - { - pj_dalloc(last_nadgrids); - } - - last_nadgrids = (char *) pj_malloc(strlen(nadgrids)+1); - strcpy( last_nadgrids, nadgrids ); - - last_nadgrids_count = 0; - -/* -------------------------------------------------------------------- */ -/* Loop processing names out of nadgrids one at a time. */ -/* -------------------------------------------------------------------- */ - for( s = nadgrids; *s != '\0'; ) - { - int end_char; - int required = 1; - char name[128]; - - if( *s == '@' ) - { - required = 0; - s++; - } - - for( end_char = 0; - s[end_char] != '\0' && s[end_char] != ','; - end_char++ ) {} - - if( end_char > sizeof(name) ) - { - pj_errno = -38; - pj_release_lock(); - return NULL; - } - - strncpy( name, s, end_char ); - name[end_char] = '\0'; - - s += end_char; - if( *s == ',' ) - s++; - - if( !pj_gridlist_merge_gridfile( name ) && required ) - { - pj_errno = -38; - pj_release_lock(); - return NULL; - } - else - pj_errno = 0; - } - - if( last_nadgrids_count > 0 ) - { - PJ_GRIDINFO **ret = last_nadgrids_list; - *grid_count = last_nadgrids_count; - pj_release_lock(); - return ret; - } - else - { - pj_release_lock(); - return NULL; - } -} diff --git a/src/3rdparty/proj/pj_init.c b/src/3rdparty/proj/pj_init.c deleted file mode 100644 index 867fc41c..00000000 --- a/src/3rdparty/proj/pj_init.c +++ /dev/null @@ -1,416 +0,0 @@ -/****************************************************************************** - * $Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Initialize projection object from string definition. Includes - * pj_init(), pj_init_plus() and pj_free() function. - * Author: Gerald Evenden, Frank Warmerdam <warmerdam@pobox.com> - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ -#include <projects.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <locale.h> - -PJ_CVSID("$Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $"); - -extern FILE *pj_open_lib(char *, char *); - -/************************************************************************/ -/* get_opt() */ -/************************************************************************/ -static paralist * -get_opt(paralist **start, FILE *fid, char *name, paralist *next) { - char sword[302], *word = sword+1; - int first = 1, len, c; - - len = strlen(name); - *sword = 't'; - while (fscanf(fid, "%300s", word) == 1) { - if (*word == '#') /* skip comments */ - while((c = fgetc(fid)) != EOF && c != '\n') ; - else if (*word == '<') { /* control name */ - if (first && !strncmp(name, word + 1, len) - && word[len + 1] == '>') - first = 0; - else if (!first && *word == '<') { - while((c = fgetc(fid)) != EOF && c != '\n') ; - break; - } - } else if (!first && !pj_param(*start, sword).i) { - /* don't default ellipse if datum, ellps or any earth model - information is set. */ - if( strncmp(word,"ellps=",6) != 0 - || (!pj_param(*start, "tdatum").i - && !pj_param(*start, "tellps").i - && !pj_param(*start, "ta").i - && !pj_param(*start, "tb").i - && !pj_param(*start, "trf").i - && !pj_param(*start, "tf").i) ) - { - next = next->next = pj_mkparam(word); - } - } - } - - if (errno == 25) - errno = 0; - return next; -} - -/************************************************************************/ -/* get_defaults() */ -/************************************************************************/ -static paralist * -get_defaults(paralist **start, paralist *next, char *name) { - FILE *fid; - - if (fid = pj_open_lib("proj_def.dat", "rt")) { - next = get_opt(start, fid, "general", next); - rewind(fid); - next = get_opt(start, fid, name, next); - (void)fclose(fid); - } - if (errno) - errno = 0; /* don't care if can't open file */ - return next; -} - -/************************************************************************/ -/* get_init() */ -/************************************************************************/ -static paralist * -get_init(paralist **start, paralist *next, char *name) { - char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; - FILE *fid; - paralist *init_items = NULL; - const paralist *orig_next = next; - - (void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1); - - /* - ** Search for file/key pair in cache - */ - - init_items = pj_search_initcache( name ); - if( init_items != NULL ) - { - next->next = init_items; - while( next->next != NULL ) - next = next->next; - return next; - } - - /* - ** Otherwise we try to open the file and search for it. - */ - if (opt = strrchr(fname, ':')) - *opt++ = '\0'; - else { pj_errno = -3; return(0); } - if (fid = pj_open_lib(fname, "rt")) - next = get_opt(start, fid, opt, next); - else - return(0); - (void)fclose(fid); - if (errno == 25) - errno = 0; /* unknown problem with some sys errno<-25 */ - - /* - ** If we seem to have gotten a result, insert it into the - ** init file cache. - */ - if( next != NULL && next != orig_next ) - pj_insert_initcache( name, orig_next->next ); - - return next; -} - -/************************************************************************/ -/* pj_init_plus() */ -/* */ -/* Same as pj_init() except it takes one argument string with */ -/* individual arguments preceeded by '+', such as "+proj=utm */ -/* +zone=11 +ellps=WGS84". */ -/************************************************************************/ - -PJ * -pj_init_plus( const char *definition ) - -{ -#define MAX_ARG 200 - char *argv[MAX_ARG]; - char *defn_copy; - int argc = 0, i; - PJ *result; - - /* make a copy that we can manipulate */ - defn_copy = (char *) pj_malloc( strlen(definition)+1 ); - strcpy( defn_copy, definition ); - - /* split into arguments based on '+' and trim white space */ - - for( i = 0; defn_copy[i] != '\0'; i++ ) - { - switch( defn_copy[i] ) - { - case '+': - if( i == 0 || defn_copy[i-1] == '\0' ) - { - if( argc+1 == MAX_ARG ) - { - pj_errno = -44; - return NULL; - } - - argv[argc++] = defn_copy + i + 1; - } - break; - - case ' ': - case '\t': - case '\n': - defn_copy[i] = '\0'; - break; - - default: - /* do nothing */; - } - } - - /* perform actual initialization */ - result = pj_init( argc, argv ); - - pj_dalloc( defn_copy ); - - return result; -} - -/************************************************************************/ -/* pj_init() */ -/* */ -/* Main entry point for initialing a PJ projections */ -/* definition. Note that the projection specific function is */ -/* called to do the initial allocation so it can be created */ -/* large enough to hold projection specific parameters. */ -/************************************************************************/ - -PJ * -pj_init(int argc, char **argv) { - char *s, *name; - paralist *start = NULL; - PJ *(*proj)(PJ *); - paralist *curr; - int i; - PJ *PIN = 0; - const char *old_locale; - - errno = pj_errno = 0; - start = NULL; - - old_locale = setlocale(LC_NUMERIC, NULL); - setlocale(LC_NUMERIC,"C"); - - /* put arguments into internal linked list */ - if (argc <= 0) { pj_errno = -1; goto bum_call; } - for (i = 0; i < argc; ++i) - if (i) - curr = curr->next = pj_mkparam(argv[i]); - else - start = curr = pj_mkparam(argv[i]); - if (pj_errno) goto bum_call; - - /* check if +init present */ - if (pj_param(start, "tinit").i) { - paralist *last = curr; - - if (!(curr = get_init(&start, curr, pj_param(start, "sinit").s))) - goto bum_call; - if (curr == last) { pj_errno = -2; goto bum_call; } - } - - /* find projection selection */ - if (!(name = pj_param(start, "sproj").s)) - { pj_errno = -4; goto bum_call; } - for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; - if (!s) { pj_errno = -5; goto bum_call; } - - /* set defaults, unless inhibited */ - if (!pj_param(start, "bno_defs").i) - curr = get_defaults(&start, curr, name); - proj = (PJ *(*)(PJ *)) pj_list[i].proj; - - /* allocate projection structure */ - if (!(PIN = (*proj)(0))) goto bum_call; - PIN->params = start; - PIN->is_latlong = 0; - PIN->is_geocent = 0; - PIN->long_wrap_center = 0.0; - - /* set datum parameters */ - if (pj_datum_set(start, PIN)) goto bum_call; - - /* set ellipsoid/sphere parameters */ - if (pj_ell_set(start, &PIN->a, &PIN->es)) goto bum_call; - - PIN->a_orig = PIN->a; - PIN->es_orig = PIN->es; - - PIN->e = sqrt(PIN->es); - PIN->ra = 1. / PIN->a; - PIN->one_es = 1. - PIN->es; - if (PIN->one_es == 0.) { pj_errno = -6; goto bum_call; } - PIN->rone_es = 1./PIN->one_es; - - /* Now that we have ellipse information check for WGS84 datum */ - if( PIN->datum_type == PJD_3PARAM - && PIN->datum_params[0] == 0.0 - && PIN->datum_params[1] == 0.0 - && PIN->datum_params[2] == 0.0 - && PIN->a == 6378137.0 - && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/ - { - PIN->datum_type = PJD_WGS84; - } - - /* set PIN->geoc coordinate system */ - PIN->geoc = (PIN->es && pj_param(start, "bgeoc").i); - - /* over-ranging flag */ - PIN->over = pj_param(start, "bover").i; - - /* longitude center for wrapping */ - PIN->long_wrap_center = pj_param(start, "rlon_wrap").f; - - /* central meridian */ - PIN->lam0=pj_param(start, "rlon_0").f; - - /* central latitude */ - PIN->phi0 = pj_param(start, "rlat_0").f; - - /* false easting and northing */ - PIN->x0 = pj_param(start, "dx_0").f; - PIN->y0 = pj_param(start, "dy_0").f; - - /* general scaling factor */ - if (pj_param(start, "tk_0").i) - PIN->k0 = pj_param(start, "dk_0").f; - else if (pj_param(start, "tk").i) - PIN->k0 = pj_param(start, "dk").f; - else - PIN->k0 = 1.; - if (PIN->k0 <= 0.) { - pj_errno = -31; - goto bum_call; - } - - /* set units */ - s = 0; - if (name = pj_param(start, "sunits").s) { - for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ; - if (!s) { pj_errno = -7; goto bum_call; } - s = pj_units[i].to_meter; - } - if (s || (s = pj_param(start, "sto_meter").s)) { - PIN->to_meter = strtod(s, &s); - if (*s == '/') /* ratio number */ - PIN->to_meter /= strtod(++s, 0); - PIN->fr_meter = 1. / PIN->to_meter; - } else - PIN->to_meter = PIN->fr_meter = 1.; - - /* prime meridian */ - s = 0; - if (name = pj_param(start, "spm").s) { - const char *value = NULL; - char *next_str = NULL; - - for (i = 0; pj_prime_meridians[i].id != NULL; ++i ) - { - if( strcmp(name,pj_prime_meridians[i].id) == 0 ) - { - value = pj_prime_meridians[i].defn; - break; - } - } - - if( value == NULL - && (dmstor(name,&next_str) != 0.0 || *name == '0') - && *next_str == '\0' ) - value = name; - - if (!value) { pj_errno = -46; goto bum_call; } - PIN->from_greenwich = dmstor(value,NULL); - } - else - PIN->from_greenwich = 0.0; - - /* projection specific initialization */ - if (!(PIN = (*proj)(PIN)) || errno || pj_errno) { -bum_call: /* cleanup error return */ - if (!pj_errno) - pj_errno = errno; - if (PIN) - pj_free(PIN); - else - for ( ; start; start = curr) { - curr = start->next; - pj_dalloc(start); - } - PIN = 0; - } - setlocale(LC_NUMERIC,old_locale); - - return PIN; -} - -/************************************************************************/ -/* pj_free() */ -/* */ -/* This is the application callable entry point for destroying */ -/* a projection definition. It does work generic to all */ -/* projection types, and then calls the projection specific */ -/* free function (P->pfree()) to do local work. This maps to */ -/* the FREEUP code in the individual projection source files. */ -/************************************************************************/ - -void -pj_free(PJ *P) { - if (P) { - paralist *t = P->params, *n; - - /* free parameter list elements */ - for (t = P->params; t; t = n) { - n = t->next; - pj_dalloc(t); - } - - /* free projection parameters */ - P->pfree(P); - } -} - - diff --git a/src/3rdparty/proj/pj_initcache.c b/src/3rdparty/proj/pj_initcache.c deleted file mode 100644 index 5dd46fad..00000000 --- a/src/3rdparty/proj/pj_initcache.c +++ /dev/null @@ -1,181 +0,0 @@ -/****************************************************************************** - * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: init file definition cache. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2009, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#include <projects.h> -#include <string.h> - -PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -static int cache_count = 0; -static int cache_alloc = 0; -static char **cache_key = NULL; -static paralist **cache_paralist = NULL; - -/************************************************************************/ -/* pj_clone_paralist() */ -/* */ -/* Allocate a copy of a parameter list. */ -/************************************************************************/ - -paralist *pj_clone_paralist( const paralist *list) -{ - paralist *list_copy = NULL, *next_copy = NULL; - - for( ; list != NULL; list = list->next ) - { - paralist *newitem = (paralist *) - pj_malloc(sizeof(paralist) + strlen(list->param)); - - newitem->used = 0; - newitem->next = 0; - strcpy( newitem->param, list->param ); - - if( list_copy == NULL ) - list_copy = newitem; - else - next_copy->next = newitem; - - next_copy = newitem; - } - - return list_copy; -} - -/************************************************************************/ -/* pj_clear_initcache() */ -/* */ -/* Clear out all memory held in the init file cache. */ -/************************************************************************/ - -void pj_clear_initcache() -{ - if( cache_alloc > 0 ) - { - int i; - - pj_acquire_lock(); - - for( i = 0; i < cache_count; i++ ) - { - paralist *n, *t = cache_paralist[i]; - - pj_dalloc( cache_key[i] ); - - /* free parameter list elements */ - for (; t != NULL; t = n) { - n = t->next; - pj_dalloc(t); - } - } - - pj_dalloc( cache_key ); - pj_dalloc( cache_paralist ); - cache_count = 0; - cache_alloc= 0; - cache_key = NULL; - cache_paralist = NULL; - - pj_release_lock(); - } -} - -/************************************************************************/ -/* pj_search_initcache() */ -/* */ -/* Search for a matching definition in the init cache. */ -/************************************************************************/ - -paralist *pj_search_initcache( const char *filekey ) - -{ - int i; - paralist *result = NULL; - - pj_acquire_lock(); - - for( i = 0; result == NULL && i < cache_count; i++) - { - if( strcmp(filekey,cache_key[i]) == 0 ) - { - result = pj_clone_paralist( cache_paralist[i] ); - } - } - - pj_release_lock(); - - return result; -} - -/************************************************************************/ -/* pj_insert_initcache() */ -/* */ -/* Insert a paralist definition in the init file cache. */ -/************************************************************************/ - -void pj_insert_initcache( const char *filekey, const paralist *list ) - -{ - pj_acquire_lock(); - - /* - ** Grow list if required. - */ - if( cache_count == cache_alloc ) - { - char **cache_key_new; - paralist **cache_paralist_new; - - cache_alloc = cache_alloc * 2 + 15; - - cache_key_new = (char **) pj_malloc(sizeof(char*) * cache_alloc); - memcpy( cache_key, cache_key_new, sizeof(char*) * cache_count); - pj_dalloc( cache_key ); - cache_key = cache_key_new; - - cache_paralist_new = (paralist **) - pj_malloc(sizeof(paralist*) * cache_alloc); - memcpy( cache_paralist_new, cache_paralist, - sizeof(paralist*) * cache_count ); - pj_dalloc( cache_paralist ); - cache_paralist = cache_paralist_new; - } - - /* - ** Duplicate the filekey and paralist, and insert in cache. - */ - cache_key[cache_count] = (char *) pj_malloc(strlen(filekey)+1); - strcpy( cache_key[cache_count], filekey ); - - cache_paralist[cache_count] = pj_clone_paralist( list ); - - cache_count++; - - pj_release_lock(); -} - diff --git a/src/3rdparty/proj/pj_inv.c b/src/3rdparty/proj/pj_inv.c deleted file mode 100644 index ee2b44f8..00000000 --- a/src/3rdparty/proj/pj_inv.c +++ /dev/null @@ -1,29 +0,0 @@ -/* general inverse projection */ -#define PJ_LIB__ -#include <projects.h> -#include <errno.h> -# define EPS 1.0e-12 - LP /* inverse projection entry */ -pj_inv(XY xy, PJ *P) { - LP lp; - - /* can't do as much preliminary checking as with forward */ - if (xy.x == HUGE_VAL || xy.y == HUGE_VAL) { - lp.lam = lp.phi = HUGE_VAL; - pj_errno = -15; - } - errno = pj_errno = 0; - xy.x = (xy.x * P->to_meter - P->x0) * P->ra; /* descale and de-offset */ - xy.y = (xy.y * P->to_meter - P->y0) * P->ra; - lp = (*P->inv)(xy, P); /* inverse project */ - if (pj_errno || (pj_errno = errno)) - lp.lam = lp.phi = HUGE_VAL; - else { - lp.lam += P->lam0; /* reduce from del lp.lam */ - if (!P->over) - lp.lam = adjlon(lp.lam); /* adjust longitude to CM */ - if (P->geoc && fabs(fabs(lp.phi)-HALFPI) > EPS) - lp.phi = atan(P->one_es * tan(lp.phi)); - } - return lp; -} diff --git a/src/3rdparty/proj/pj_latlong.c b/src/3rdparty/proj/pj_latlong.c deleted file mode 100644 index 1ade364c..00000000 --- a/src/3rdparty/proj/pj_latlong.c +++ /dev/null @@ -1,80 +0,0 @@ -/****************************************************************************** - * $Id: pj_latlong.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Stub projection implementation for lat/long coordinates. We - * don't actually change the coordinates, but we want proj=latlong - * to act sort of like a projection. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -/* very loosely based upon DMA code by Bradford W. Drew */ -#define PJ_LIB__ -#include <projects.h> -PROJ_HEAD(lonlat, "Lat/long (Geodetic)") "\n\t"; -PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") "\n\t"; -PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") "\n\t"; -PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") "\n\t"; - -FORWARD(forward); - - xy.x = lp.lam / P->a; - xy.y = lp.phi / P->a; - return xy; -} -INVERSE(inverse); - - lp.phi = xy.y * P->a; - lp.lam = xy.x * P->a; - return lp; -} -FREEUP; if (P) pj_dalloc(P); } - -ENTRY0(latlong) - P->is_latlong = 1; - P->x0 = 0.0; - P->y0 = 0.0; - P->inv = inverse; P->fwd = forward; -ENDENTRY(P) - -ENTRY0(longlat) - P->is_latlong = 1; - P->x0 = 0.0; - P->y0 = 0.0; - P->inv = inverse; P->fwd = forward; -ENDENTRY(P) - -ENTRY0(latlon) - P->is_latlong = 1; - P->x0 = 0.0; - P->y0 = 0.0; - P->inv = inverse; P->fwd = forward; -ENDENTRY(P) - -ENTRY0(lonlat) - P->is_latlong = 1; - P->x0 = 0.0; - P->y0 = 0.0; - P->inv = inverse; P->fwd = forward; -ENDENTRY(P) diff --git a/src/3rdparty/proj/pj_list.c b/src/3rdparty/proj/pj_list.c deleted file mode 100644 index 7d35811b..00000000 --- a/src/3rdparty/proj/pj_list.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Projection System: default list of projections -** Use local definition of PJ_LIST_H for subset. -*/ -#define PJ_LIST_H "pj_list.h" -#include "projects.h" - -struct PJ_LIST *pj_get_list_ref() - -{ - return pj_list; -} diff --git a/src/3rdparty/proj/pj_malloc.c b/src/3rdparty/proj/pj_malloc.c deleted file mode 100644 index b6400eba..00000000 --- a/src/3rdparty/proj/pj_malloc.c +++ /dev/null @@ -1,25 +0,0 @@ -/* allocate and deallocate memory */ -/* These routines are used so that applications can readily replace -** projection system memory allocation/deallocation call with custom -** application procedures. */ -#include <projects.h> -#include <errno.h> - - void * -pj_malloc(size_t size) { -// Currently, pj_malloc is a hack to solve an errno problem. -// The problem is described in more details at -// https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=86420. -// It seems, that pj_init and similar functions incorrectly -// (under debian/glibs-2.3.2) assume that pj_malloc resets -// errno after success. pj_malloc tries to mimic this. - int old_errno = errno; - void *res = malloc(size); - if ( res && !old_errno ) - errno = 0; - return res; -} - void -pj_dalloc(void *ptr) { - free(ptr); -} diff --git a/src/3rdparty/proj/pj_mlfn.c b/src/3rdparty/proj/pj_mlfn.c deleted file mode 100644 index afd18b19..00000000 --- a/src/3rdparty/proj/pj_mlfn.c +++ /dev/null @@ -1,57 +0,0 @@ -#include <projects.h> -/* meridinal distance for ellipsoid and inverse -** 8th degree - accurate to < 1e-5 meters when used in conjuction -** with typical major axis values. -** Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds. -*/ -#define C00 1. -#define C02 .25 -#define C04 .046875 -#define C06 .01953125 -#define C08 .01068115234375 -#define C22 .75 -#define C44 .46875 -#define C46 .01302083333333333333 -#define C48 .00712076822916666666 -#define C66 .36458333333333333333 -#define C68 .00569661458333333333 -#define C88 .3076171875 -#define EPS 1e-11 -#define MAX_ITER 10 -#define EN_SIZE 5 - double * -pj_enfn(double es) { - double t, *en; - - if (en = (double *)pj_malloc(EN_SIZE * sizeof(double))) { - en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); - en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); - en[2] = (t = es * es) * (C44 - es * (C46 + es * C48)); - en[3] = (t *= es) * (C66 - es * C68); - en[4] = t * es * C88; - } /* else return NULL if unable to allocate memory */ - return en; -} - double -pj_mlfn(double phi, double sphi, double cphi, double *en) { - cphi *= sphi; - sphi *= sphi; - return(en[0] * phi - cphi * (en[1] + sphi*(en[2] - + sphi*(en[3] + sphi*en[4])))); -} - double -pj_inv_mlfn(double arg, double es, double *en) { - double s, t, phi, k = 1./(1.-es); - int i; - - phi = arg; - for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */ - s = sin(phi); - t = 1. - es * s * s; - phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k; - if (fabs(t) < EPS) - return phi; - } - pj_errno = -17; - return phi; -} diff --git a/src/3rdparty/proj/pj_msfn.c b/src/3rdparty/proj/pj_msfn.c deleted file mode 100644 index 5b49f416..00000000 --- a/src/3rdparty/proj/pj_msfn.c +++ /dev/null @@ -1,7 +0,0 @@ -/* determine constant small m */ -#include <math.h> -#include <projects.h> - double -pj_msfn(double sinphi, double cosphi, double es) { - return (cosphi / sqrt (1. - es * sinphi * sinphi)); -} diff --git a/src/3rdparty/proj/pj_mutex.c b/src/3rdparty/proj/pj_mutex.c deleted file mode 100644 index 22b181e4..00000000 --- a/src/3rdparty/proj/pj_mutex.c +++ /dev/null @@ -1,208 +0,0 @@ -/****************************************************************************** - * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Mutex (thread lock) functions. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2009, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - - -/* projects.h and windows.h conflict - avoid this! */ - -#ifndef _WIN32 -#include <projects.h> -PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); -#else -#include <proj_api.h> -#endif - -#if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32) -# define MUTEX_stub -#endif - -static void pj_init_lock(); - -/************************************************************************/ -/* ==================================================================== */ -/* stub mutex implementation */ -/* ==================================================================== */ -/************************************************************************/ - -#ifdef MUTEX_stub - -/************************************************************************/ -/* pj_acquire_lock() */ -/* */ -/* Acquire the PROJ.4 lock. */ -/************************************************************************/ - -void pj_acquire_lock() -{ -} - -/************************************************************************/ -/* pj_release_lock() */ -/* */ -/* Release the PROJ.4 lock. */ -/************************************************************************/ - -void pj_release_lock() -{ -} - -/************************************************************************/ -/* pj_cleanup_lock() */ -/************************************************************************/ -void pj_cleanup_lock() -{ -} - -/************************************************************************/ -/* pj_init_lock() */ -/************************************************************************/ - -static void pj_init_lock() - -{ -} - -#endif // def MUTEX_stub - -/************************************************************************/ -/* ==================================================================== */ -/* pthread mutex implementation */ -/* ==================================================================== */ -/************************************************************************/ - -#ifdef MUTEX_pthread - -#include "pthread.h" - -static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER; - -/************************************************************************/ -/* pj_acquire_lock() */ -/* */ -/* Acquire the PROJ.4 lock. */ -/************************************************************************/ - -void pj_acquire_lock() -{ - pthread_mutex_lock( &core_lock); -} - -/************************************************************************/ -/* pj_release_lock() */ -/* */ -/* Release the PROJ.4 lock. */ -/************************************************************************/ - -void pj_release_lock() -{ - pthread_mutex_unlock( &core_lock ); -} - -/************************************************************************/ -/* pj_cleanup_lock() */ -/************************************************************************/ -void pj_cleanup_lock() -{ -} - -/************************************************************************/ -/* pj_init_lock() */ -/************************************************************************/ - -static void pj_init_lock() - -{ -} - -#endif // def MUTEX_pthread - -/************************************************************************/ -/* ==================================================================== */ -/* win32 mutex implementation */ -/* ==================================================================== */ -/************************************************************************/ - -#ifdef MUTEX_win32 - -#include <windows.h> - -static HANDLE mutex_lock = NULL; - -/************************************************************************/ -/* pj_acquire_lock() */ -/* */ -/* Acquire the PROJ.4 lock. */ -/************************************************************************/ - -void pj_acquire_lock() -{ - if( mutex_lock == NULL ) - pj_init_lock(); - - WaitForSingleObject( mutex_lock, INFINITE ); -} - -/************************************************************************/ -/* pj_release_lock() */ -/* */ -/* Release the PROJ.4 lock. */ -/************************************************************************/ - -void pj_release_lock() -{ - if( mutex_lock == NULL ) - pj_init_lock(); - - ReleaseMutex( mutex_lock ); -} - -/************************************************************************/ -/* pj_cleanup_lock() */ -/************************************************************************/ -void pj_cleanup_lock() -{ - if( mutex_lock != NULL ) - { - CloseHandle( mutex_lock ); - mutex_lock = NULL; - } -} - -/************************************************************************/ -/* pj_init_lock() */ -/************************************************************************/ - -static void pj_init_lock() - -{ - if( mutex_lock == NULL ) - mutex_lock = CreateMutex( NULL, TRUE, NULL ); -} - -#endif // def MUTEX_win32 - diff --git a/src/3rdparty/proj/pj_open_lib_qt.cpp b/src/3rdparty/proj/pj_open_lib_qt.cpp deleted file mode 100644 index ac6baf9b..00000000 --- a/src/3rdparty/proj/pj_open_lib_qt.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/****************************************************************************** - * Project: PROJ.4 - * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These - * provide a standard interface for opening projections support - * data files. - * Author: Gerald Evenden, Frank Warmerdam <warmerdam@pobox.com>, - * Nokia Corporation (qt-info@nokia.com) - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> - * Copyright (c) 2010, Nokia Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ -extern "C" { -#include <projects.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -} - -#include <QString> -#include <QFile> -#include <QList> - -class PJLibTracker -{ -public: - ~PJLibTracker(); - - QList<QFile*> files; -}; - -PJLibTracker::~PJLibTracker() -{ - foreach (QFile *f, files) - delete f; -} - -static PJLibTracker tracker; - - -void pj_set_finder( const char *(*new_finder)(const char *) ) -{ -} - -void pj_set_searchpath ( int count, const char **path ) -{ -} - -FILE *pj_open_lib(char *name, char *mode) -{ - if (QFile::exists(QString(":/proj_data/%1").arg(name))) { - QFile *f = new QFile(QString(":/proj_data/%1").arg(name)); - f->open(QIODevice::ReadOnly); - - if (f->handle() == -1) { - delete f; - return NULL; - } - - tracker.files.append(f); - return fdopen(f->handle(), "r"); - } else { - return NULL; - } -} diff --git a/src/3rdparty/proj/pj_param.c b/src/3rdparty/proj/pj_param.c deleted file mode 100644 index 4dce136a..00000000 --- a/src/3rdparty/proj/pj_param.c +++ /dev/null @@ -1,104 +0,0 @@ -/* put parameters in linked list and retrieve */ -#include <projects.h> -#include <stdio.h> -#include <string.h> - paralist * /* create parameter list entry */ -pj_mkparam(char *str) { - paralist *newitem; - - if (newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) { - newitem->used = 0; - newitem->next = 0; - if (*str == '+') - ++str; - (void)strcpy(newitem->param, str); - } - return newitem; -} - -/************************************************************************/ -/* pj_param() */ -/* */ -/* Test for presence or get parameter value. The first */ -/* character in `opt' is a parameter type which can take the */ -/* values: */ -/* */ -/* `t' - test for presence, return TRUE/FALSE in PVALUE.i */ -/* `i' - integer value returned in PVALUE.i */ -/* `d' - simple valued real input returned in PVALUE.f */ -/* `r' - degrees (DMS translation applied), returned as */ -/* radians in PVALUE.f */ -/* `s' - string returned in PVALUE.s */ -/* `b' - test for t/T/f/F, return in PVALUE.i */ -/* */ -/************************************************************************/ - - PVALUE /* test for presence or get parameter value */ -pj_param(paralist *pl, char *opt) { - int type; - unsigned l; - PVALUE value; - - type = *opt++; - /* simple linear lookup */ - l = strlen(opt); - while (pl && !(!strncmp(pl->param, opt, l) && - (!pl->param[l] || pl->param[l] == '='))) - pl = pl->next; - if (type == 't') - value.i = pl != 0; - else if (pl) { - pl->used |= 1; - opt = pl->param + l; - if (*opt == '=') - ++opt; - switch (type) { - case 'i': /* integer input */ - value.i = atoi(opt); - break; - case 'd': /* simple real input */ - value.f = atof(opt); - break; - case 'r': /* degrees input */ - value.f = dmstor(opt, 0); - break; - case 's': /* char string */ - value.s = opt; - break; - case 'b': /* boolean */ - switch (*opt) { - case 'F': case 'f': - value.i = 0; - break; - case '\0': case 'T': case 't': - value.i = 1; - break; - default: - pj_errno = -8; - value.i = 0; - break; - } - break; - default: -bum_type: /* note: this is an error in parameter, not a user error */ - fprintf(stderr, "invalid request to pj_param, fatal\n"); - exit(1); - } - } else /* not given */ - switch (type) { - case 'b': - case 'i': - value.i = 0; - break; - case 'd': - case 'r': - value.f = 0.; - break; - case 's': - value.s = 0; - break; - default: - goto bum_type; - } - return value; -} diff --git a/src/3rdparty/proj/pj_phi2.c b/src/3rdparty/proj/pj_phi2.c deleted file mode 100644 index 0900350e..00000000 --- a/src/3rdparty/proj/pj_phi2.c +++ /dev/null @@ -1,25 +0,0 @@ -/* determine latitude angle phi-2 */ -#include <projects.h> - -#define HALFPI 1.5707963267948966 -#define TOL 1.0e-10 -#define N_ITER 15 - - double -pj_phi2(double ts, double e) { - double eccnth, Phi, con, dphi; - int i; - - eccnth = .5 * e; - Phi = HALFPI - 2. * atan (ts); - i = N_ITER; - do { - con = e * sin (Phi); - dphi = HALFPI - 2. * atan (ts * pow((1. - con) / - (1. + con), eccnth)) - Phi; - Phi += dphi; - } while ( fabs(dphi) > TOL && --i); - if (i <= 0) - pj_errno = -18; - return Phi; -} diff --git a/src/3rdparty/proj/pj_pr_list.c b/src/3rdparty/proj/pj_pr_list.c deleted file mode 100644 index d4a908cd..00000000 --- a/src/3rdparty/proj/pj_pr_list.c +++ /dev/null @@ -1,91 +0,0 @@ -/* print projection's list of parameters */ -#include <projects.h> -#include <stdio.h> -#include <string.h> -#define LINE_LEN 72 - static int -pr_list(PJ *P, int not_used) { - paralist *t; - int l, n = 1, flag = 0; - - (void)putchar('#'); - for (t = P->params; t; t = t->next) - if ((!not_used && t->used) || (not_used && !t->used)) { - l = strlen(t->param) + 1; - if (n + l > LINE_LEN) { - (void)fputs("\n#", stdout); - n = 2; - } - (void)putchar(' '); - if (*(t->param) != '+') - (void)putchar('+'); - (void)fputs(t->param, stdout); - n += l; - } else - flag = 1; - if (n > 1) - (void)putchar('\n'); - return flag; -} - void /* print link list of projection parameters */ -pj_pr_list(PJ *P) { - char const *s; - - (void)putchar('#'); - for (s = P->descr; *s ; ++s) { - (void)putchar(*s); - if (*s == '\n') - (void)putchar('#'); - } - (void)putchar('\n'); - if (pr_list(P, 0)) { - (void)fputs("#--- following specified but NOT used\n", stdout); - (void)pr_list(P, 1); - } -} - -/************************************************************************/ -/* pj_get_def() */ -/* */ -/* Returns the PROJ.4 command string that would produce this */ -/* definition expanded as much as possible. For instance, */ -/* +init= calls and +datum= defintions would be expanded. */ -/************************************************************************/ - -char *pj_get_def( PJ *P, int options ) - -{ - paralist *t; - int l; - char *definition; - int def_max = 10; - - definition = (char *) pj_malloc(def_max); - definition[0] = '\0'; - - for (t = P->params; t; t = t->next) - { - /* skip unused parameters ... mostly appended defaults and stuff */ - if (!t->used) - continue; - - /* grow the resulting string if needed */ - l = strlen(t->param) + 1; - if( strlen(definition) + l + 5 > def_max ) - { - char *def2; - - def_max = def_max * 2 + l + 5; - def2 = (char *) pj_malloc(def_max); - strcpy( def2, definition ); - pj_dalloc( definition ); - definition = def2; - } - - /* append this parameter */ - strcat( definition, " +" ); - strcat( definition, t->param ); - } - - return definition; -} diff --git a/src/3rdparty/proj/pj_qsfn.c b/src/3rdparty/proj/pj_qsfn.c deleted file mode 100644 index ccb12308..00000000 --- a/src/3rdparty/proj/pj_qsfn.c +++ /dev/null @@ -1,16 +0,0 @@ -/* determine small q */ -#include <math.h> -#include <projects.h> - -# define EPSILON 1.0e-7 - double -pj_qsfn(double sinphi, double e, double one_es) { - double con; - - if (e >= EPSILON) { - con = e * sinphi; - return (one_es * (sinphi / (1. - con * con) - - (.5 / e) * log ((1. - con) / (1. + con)))); - } else - return (sinphi + sinphi); -} diff --git a/src/3rdparty/proj/pj_release.c b/src/3rdparty/proj/pj_release.c deleted file mode 100644 index d1e22095..00000000 --- a/src/3rdparty/proj/pj_release.c +++ /dev/null @@ -1,11 +0,0 @@ -/* <<< Release Notice for library >>> */ - -#include <projects.h> - -char const pj_release[]="Rel. 4.7.1, 23 September 2009"; - -const char *pj_get_release() - -{ - return pj_release; -} diff --git a/src/3rdparty/proj/pj_strerrno.c b/src/3rdparty/proj/pj_strerrno.c deleted file mode 100644 index 4db1fb9a..00000000 --- a/src/3rdparty/proj/pj_strerrno.c +++ /dev/null @@ -1,82 +0,0 @@ -/* list of projection system pj_errno values */ -#include "projects.h" -#include <stdio.h> -#include <errno.h> -#include <string.h> - - static char * -pj_err_list[] = { - "no arguments in initialization list", /* -1 */ - "no options found in 'init' file", /* -2 */ - "no colon in init= string", /* -3 */ - "projection not named", /* -4 */ - "unknown projection id", /* -5 */ - "effective eccentricity = 1.", /* -6 */ - "unknown unit conversion id", /* -7 */ - "invalid boolean param argument", /* -8 */ - "unknown elliptical parameter name", /* -9 */ - "reciprocal flattening (1/f) = 0", /* -10 */ - "|radius reference latitude| > 90", /* -11 */ - "squared eccentricity < 0", /* -12 */ - "major axis or radius = 0 or not given", /* -13 */ - "latitude or longitude exceeded limits", /* -14 */ - "invalid x or y", /* -15 */ - "improperly formed DMS value", /* -16 */ - "non-convergent inverse meridinal dist", /* -17 */ - "non-convergent inverse phi2", /* -18 */ - "acos/asin: |arg| >1.+1e-14", /* -19 */ - "tolerance condition error", /* -20 */ - "conic lat_1 = -lat_2", /* -21 */ - "lat_1 >= 90", /* -22 */ - "lat_1 = 0", /* -23 */ - "lat_ts >= 90", /* -24 */ - "no distance between control points", /* -25 */ - "projection not selected to be rotated", /* -26 */ - "W <= 0 or M <= 0", /* -27 */ - "lsat not in 1-5 range", /* -28 */ - "path not in range", /* -29 */ - "h <= 0", /* -30 */ - "k <= 0", /* -31 */ - "lat_0 = 0 or 90 or alpha = 90", /* -32 */ - "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -33 */ - "elliptical usage required", /* -34 */ - "invalid UTM zone number", /* -35 */ - "arg(s) out of range for Tcheby eval", /* -36 */ - "failed to find projection to be rotated", /* -37 */ - "failed to load NAD27-83 correction file", /* -38 */ - "both n & m must be spec'd and > 0", /* -39 */ - "n <= 0, n > 1 or not specified", /* -40 */ - "lat_1 or lat_2 not specified", /* -41 */ - "|lat_1| == |lat_2|", /* -42 */ - "lat_0 is pi/2 from mean lat", /* -43 */ - "unparseable coordinate system definition", /* -44 */ - "geocentric transformation missing z or ellps", /* -45 */ - "unknown prime meridian conversion id", /* -46 */ -}; - char * -pj_strerrno(int err) -{ - static char note[50]; - - if (err > 0) -#ifdef HAVE_STRERROR - return strerror(err); -#else - { - sprintf(note,"no system list, errno: %d\n", err); - return note; - } -#endif - else if (err < 0) { - int adjusted_err = - err - 1; - if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *))) - return(pj_err_list[adjusted_err]); - else - { - sprintf( note, "invalid projection system error (%d)", - err ); - return note; - } - } else - return NULL; -} diff --git a/src/3rdparty/proj/pj_transform.c b/src/3rdparty/proj/pj_transform.c deleted file mode 100644 index 7aacbd4a..00000000 --- a/src/3rdparty/proj/pj_transform.c +++ /dev/null @@ -1,646 +0,0 @@ -/****************************************************************************** - * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Perform overall coordinate system to coordinate system - * transformations (pj_transform() function) including reprojection - * and datum shifting. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#include <projects.h> -#include <string.h> -#include <math.h> -#include "geocent.h" - -PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); - -#ifndef SRS_WGS84_SEMIMAJOR -#define SRS_WGS84_SEMIMAJOR 6378137.0 -#endif - -#ifndef SRS_WGS84_ESQUARED -#define SRS_WGS84_ESQUARED 0.0066943799901413165 -#endif - -#define Dx_BF (defn->datum_params[0]) -#define Dy_BF (defn->datum_params[1]) -#define Dz_BF (defn->datum_params[2]) -#define Rx_BF (defn->datum_params[3]) -#define Ry_BF (defn->datum_params[4]) -#define Rz_BF (defn->datum_params[5]) -#define M_BF (defn->datum_params[6]) - -/* -** This table is intended to indicate for any given error code in -** the range 0 to -44, whether that error will occur for all locations (ie. -** it is a problem with the coordinate system as a whole) in which case the -** value would be 0, or if the problem is with the point being transformed -** in which case the value is 1. -** -** At some point we might want to move this array in with the error message -** list or something, but while experimenting with it this should be fine. -*/ - -static const int transient_error[45] = { - /* 0 1 2 3 4 5 6 7 8 9 */ - /* 0 to 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, - /* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, - /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - /* 40 to 44 */ 0, 0, 0, 0, 0 }; - -/************************************************************************/ -/* pj_transform() */ -/* */ -/* Currently this function doesn't recognise if two projections */ -/* are identical (to short circuit reprojection) because it is */ -/* difficult to compare PJ structures (since there are some */ -/* projection specific components). */ -/************************************************************************/ - -int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - long i; - int need_datum_shift; - - pj_errno = 0; - - if( point_offset == 0 ) - point_offset = 1; - -/* -------------------------------------------------------------------- */ -/* Transform geocentric source coordinates to lat/long. */ -/* -------------------------------------------------------------------- */ - if( srcdefn->is_geocent ) - { - if( z == NULL ) - { - pj_errno = PJD_ERR_GEOCENTRIC; - return PJD_ERR_GEOCENTRIC; - } - - if( srcdefn->to_meter != 1.0 ) - { - for( i = 0; i < point_count; i++ ) - { - if( x[point_offset*i] != HUGE_VAL ) - { - x[point_offset*i] *= srcdefn->to_meter; - y[point_offset*i] *= srcdefn->to_meter; - } - } - } - - if( pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig, - point_count, point_offset, - x, y, z ) != 0) - return pj_errno; - } - -/* -------------------------------------------------------------------- */ -/* Transform source points to lat/long, if they aren't */ -/* already. */ -/* -------------------------------------------------------------------- */ - else if( !srcdefn->is_latlong ) - { - if( srcdefn->inv == NULL ) - { - pj_errno = -17; /* this isn't correct, we need a no inverse err */ - if( getenv( "PROJ_DEBUG" ) != NULL ) - { - fprintf( stderr, - "pj_transform(): source projection not invertable\n" ); - } - return pj_errno; - } - - for( i = 0; i < point_count; i++ ) - { - XY projected_loc; - LP geodetic_loc; - - projected_loc.u = x[point_offset*i]; - projected_loc.v = y[point_offset*i]; - - if( projected_loc.u == HUGE_VAL ) - continue; - - geodetic_loc = pj_inv( projected_loc, srcdefn ); - if( pj_errno != 0 ) - { - if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) - && (pj_errno > 0 || pj_errno < -44 || point_count == 1 - || transient_error[-pj_errno] == 0 ) ) - return pj_errno; - else - { - geodetic_loc.u = HUGE_VAL; - geodetic_loc.v = HUGE_VAL; - } - } - - x[point_offset*i] = geodetic_loc.u; - y[point_offset*i] = geodetic_loc.v; - } - } -/* -------------------------------------------------------------------- */ -/* But if they are already lat long, adjust for the prime */ -/* meridian if there is one in effect. */ -/* -------------------------------------------------------------------- */ - if( srcdefn->from_greenwich != 0.0 ) - { - for( i = 0; i < point_count; i++ ) - { - if( x[point_offset*i] != HUGE_VAL ) - x[point_offset*i] += srcdefn->from_greenwich; - } - } - -/* -------------------------------------------------------------------- */ -/* Convert datums if needed, and possible. */ -/* -------------------------------------------------------------------- */ - if( pj_datum_transform( srcdefn, dstdefn, point_count, point_offset, - x, y, z ) != 0 ) - return pj_errno; - -/* -------------------------------------------------------------------- */ -/* But if they are staying lat long, adjust for the prime */ -/* meridian if there is one in effect. */ -/* -------------------------------------------------------------------- */ - if( dstdefn->from_greenwich != 0.0 ) - { - for( i = 0; i < point_count; i++ ) - { - if( x[point_offset*i] != HUGE_VAL ) - x[point_offset*i] -= dstdefn->from_greenwich; - } - } - - -/* -------------------------------------------------------------------- */ -/* Transform destination latlong to geocentric if required. */ -/* -------------------------------------------------------------------- */ - if( dstdefn->is_geocent ) - { - if( z == NULL ) - { - pj_errno = PJD_ERR_GEOCENTRIC; - return PJD_ERR_GEOCENTRIC; - } - - pj_geodetic_to_geocentric( dstdefn->a_orig, dstdefn->es_orig, - point_count, point_offset, x, y, z ); - - if( dstdefn->fr_meter != 1.0 ) - { - for( i = 0; i < point_count; i++ ) - { - if( x[point_offset*i] != HUGE_VAL ) - { - x[point_offset*i] *= dstdefn->fr_meter; - y[point_offset*i] *= dstdefn->fr_meter; - } - } - } - } - -/* -------------------------------------------------------------------- */ -/* Transform destination points to projection coordinates, if */ -/* desired. */ -/* -------------------------------------------------------------------- */ - else if( !dstdefn->is_latlong ) - { - for( i = 0; i < point_count; i++ ) - { - XY projected_loc; - LP geodetic_loc; - - geodetic_loc.u = x[point_offset*i]; - geodetic_loc.v = y[point_offset*i]; - - if( geodetic_loc.u == HUGE_VAL ) - continue; - - projected_loc = pj_fwd( geodetic_loc, dstdefn ); - if( pj_errno != 0 ) - { - if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) - && (pj_errno > 0 || pj_errno < -44 || point_count == 1 - || transient_error[-pj_errno] == 0 ) ) - return pj_errno; - else - { - projected_loc.u = HUGE_VAL; - projected_loc.v = HUGE_VAL; - } - } - - x[point_offset*i] = projected_loc.u; - y[point_offset*i] = projected_loc.v; - } - } - -/* -------------------------------------------------------------------- */ -/* If a wrapping center other than 0 is provided, rewrap around */ -/* the suggested center (for latlong coordinate systems only). */ -/* -------------------------------------------------------------------- */ - else if( dstdefn->is_latlong && dstdefn->long_wrap_center != 0 ) - { - for( i = 0; i < point_count; i++ ) - { - if( x[point_offset*i] == HUGE_VAL ) - continue; - - while( x[point_offset*i] < dstdefn->long_wrap_center - HALFPI ) - x[point_offset*i] += PI; - while( x[point_offset*i] > dstdefn->long_wrap_center + HALFPI ) - x[point_offset*i] -= PI; - } - } - - return 0; -} - -/************************************************************************/ -/* pj_geodetic_to_geocentric() */ -/************************************************************************/ - -int pj_geodetic_to_geocentric( double a, double es, - long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - double b; - int i; - GeocentricInfo gi; - - pj_errno = 0; - - if( es == 0.0 ) - b = a; - else - b = a * sqrt(1-es); - - if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) - { - pj_errno = PJD_ERR_GEOCENTRIC; - return pj_errno; - } - - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - - if( x[io] == HUGE_VAL ) - continue; - - if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io], - x+io, y+io, z+io ) != 0 ) - { - pj_errno = -14; - x[io] = y[io] = HUGE_VAL; - /* but keep processing points! */ - } - } - - return pj_errno; -} - -/************************************************************************/ -/* pj_geodetic_to_geocentric() */ -/************************************************************************/ - -int pj_geocentric_to_geodetic( double a, double es, - long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - double b; - int i; - GeocentricInfo gi; - - if( es == 0.0 ) - b = a; - else - b = a * sqrt(1-es); - - if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) - { - pj_errno = PJD_ERR_GEOCENTRIC; - return pj_errno; - } - - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - - if( x[io] == HUGE_VAL ) - continue; - - pj_Convert_Geocentric_To_Geodetic( &gi, x[io], y[io], z[io], - y+io, x+io, z+io ); - } - - return 0; -} - -/************************************************************************/ -/* pj_compare_datums() */ -/* */ -/* Returns TRUE if the two datums are identical, otherwise */ -/* FALSE. */ -/************************************************************************/ - -int pj_compare_datums( PJ *srcdefn, PJ *dstdefn ) - -{ - if( srcdefn->datum_type != dstdefn->datum_type ) - { - return 0; - } - else if( srcdefn->a_orig != dstdefn->a_orig - || ABS(srcdefn->es_orig - dstdefn->es_orig) > 0.000000000050 ) - { - /* the tolerence for es is to ensure that GRS80 and WGS84 are - considered identical */ - return 0; - } - else if( srcdefn->datum_type == PJD_3PARAM ) - { - return (srcdefn->datum_params[0] == dstdefn->datum_params[0] - && srcdefn->datum_params[1] == dstdefn->datum_params[1] - && srcdefn->datum_params[2] == dstdefn->datum_params[2]); - } - else if( srcdefn->datum_type == PJD_7PARAM ) - { - return (srcdefn->datum_params[0] == dstdefn->datum_params[0] - && srcdefn->datum_params[1] == dstdefn->datum_params[1] - && srcdefn->datum_params[2] == dstdefn->datum_params[2] - && srcdefn->datum_params[3] == dstdefn->datum_params[3] - && srcdefn->datum_params[4] == dstdefn->datum_params[4] - && srcdefn->datum_params[5] == dstdefn->datum_params[5] - && srcdefn->datum_params[6] == dstdefn->datum_params[6]); - } - else if( srcdefn->datum_type == PJD_GRIDSHIFT ) - { - return strcmp( pj_param(srcdefn->params,"snadgrids").s, - pj_param(dstdefn->params,"snadgrids").s ) == 0; - } - else - return 1; -} - -/************************************************************************/ -/* pj_geocentic_to_wgs84() */ -/************************************************************************/ - -int pj_geocentric_to_wgs84( PJ *defn, - long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - int i; - - pj_errno = 0; - - if( defn->datum_type == PJD_3PARAM ) - { - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - - if( x[io] == HUGE_VAL ) - continue; - - x[io] = x[io] + Dx_BF; - y[io] = y[io] + Dy_BF; - z[io] = z[io] + Dz_BF; - } - } - else if( defn->datum_type == PJD_7PARAM ) - { - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - double x_out, y_out, z_out; - - if( x[io] == HUGE_VAL ) - continue; - - x_out = M_BF*( x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF; - y_out = M_BF*( Rz_BF*x[io] + y[io] - Rx_BF*z[io]) + Dy_BF; - z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] + z[io]) + Dz_BF; - - x[io] = x_out; - y[io] = y_out; - z[io] = z_out; - } - } - - return 0; -} - -/************************************************************************/ -/* pj_geocentic_from_wgs84() */ -/************************************************************************/ - -int pj_geocentric_from_wgs84( PJ *defn, - long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - int i; - - pj_errno = 0; - - if( defn->datum_type == PJD_3PARAM ) - { - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - - if( x[io] == HUGE_VAL ) - continue; - - x[io] = x[io] - Dx_BF; - y[io] = y[io] - Dy_BF; - z[io] = z[io] - Dz_BF; - } - } - else if( defn->datum_type == PJD_7PARAM ) - { - for( i = 0; i < point_count; i++ ) - { - long io = i * point_offset; - double x_tmp, y_tmp, z_tmp; - - if( x[io] == HUGE_VAL ) - continue; - - x_tmp = (x[io] - Dx_BF) / M_BF; - y_tmp = (y[io] - Dy_BF) / M_BF; - z_tmp = (z[io] - Dz_BF) / M_BF; - - x[io] = x_tmp + Rz_BF*y_tmp - Ry_BF*z_tmp; - y[io] = -Rz_BF*x_tmp + y_tmp + Rx_BF*z_tmp; - z[io] = Ry_BF*x_tmp - Rx_BF*y_tmp + z_tmp; - } - } - - return 0; -} - -/************************************************************************/ -/* pj_datum_transform() */ -/* */ -/* The input should be long/lat/z coordinates in radians in the */ -/* source datum, and the output should be long/lat/z */ -/* coordinates in radians in the destination datum. */ -/************************************************************************/ - -int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, - long point_count, int point_offset, - double *x, double *y, double *z ) - -{ - double src_a, src_es, dst_a, dst_es; - int z_is_temp = FALSE; - - pj_errno = 0; - -/* -------------------------------------------------------------------- */ -/* We cannot do any meaningful datum transformation if either */ -/* the source or destination are of an unknown datum type */ -/* (ie. only a +ellps declaration, no +datum). This is new */ -/* behavior for PROJ 4.6.0. */ -/* -------------------------------------------------------------------- */ - if( srcdefn->datum_type == PJD_UNKNOWN - || dstdefn->datum_type == PJD_UNKNOWN ) - return 0; - -/* -------------------------------------------------------------------- */ -/* Short cut if the datums are identical. */ -/* -------------------------------------------------------------------- */ - if( pj_compare_datums( srcdefn, dstdefn ) ) - return 0; - - src_a = srcdefn->a_orig; - src_es = srcdefn->es_orig; - - dst_a = dstdefn->a_orig; - dst_es = dstdefn->es_orig; - -/* -------------------------------------------------------------------- */ -/* Create a temporary Z array if one is not provided. */ -/* -------------------------------------------------------------------- */ - if( z == NULL ) - { - int bytes = sizeof(double) * point_count * point_offset; - z = (double *) pj_malloc(bytes); - memset( z, 0, bytes ); - z_is_temp = TRUE; - } - -#define CHECK_RETURN {if( pj_errno != 0 && (pj_errno > 0 || transient_error[-pj_errno] == 0) ) { if( z_is_temp ) pj_dalloc(z); return pj_errno; }} - -/* -------------------------------------------------------------------- */ -/* If this datum requires grid shifts, then apply it to geodetic */ -/* coordinates. */ -/* -------------------------------------------------------------------- */ - if( srcdefn->datum_type == PJD_GRIDSHIFT ) - { - pj_apply_gridshift( pj_param(srcdefn->params,"snadgrids").s, 0, - point_count, point_offset, x, y, z ); - CHECK_RETURN; - - src_a = SRS_WGS84_SEMIMAJOR; - src_es = SRS_WGS84_ESQUARED; - } - - if( dstdefn->datum_type == PJD_GRIDSHIFT ) - { - dst_a = SRS_WGS84_SEMIMAJOR; - dst_es = SRS_WGS84_ESQUARED; - } - -/* ==================================================================== */ -/* Do we need to go through geocentric coordinates? */ -/* ==================================================================== */ - if( src_es != dst_es || src_a != dst_a - || srcdefn->datum_type == PJD_3PARAM - || srcdefn->datum_type == PJD_7PARAM - || dstdefn->datum_type == PJD_3PARAM - || dstdefn->datum_type == PJD_7PARAM) - { -/* -------------------------------------------------------------------- */ -/* Convert to geocentric coordinates. */ -/* -------------------------------------------------------------------- */ - pj_geodetic_to_geocentric( src_a, src_es, - point_count, point_offset, x, y, z ); - CHECK_RETURN; - -/* -------------------------------------------------------------------- */ -/* Convert between datums. */ -/* -------------------------------------------------------------------- */ - if( srcdefn->datum_type == PJD_3PARAM - || srcdefn->datum_type == PJD_7PARAM ) - { - pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z); - CHECK_RETURN; - } - - if( dstdefn->datum_type == PJD_3PARAM - || dstdefn->datum_type == PJD_7PARAM ) - { - pj_geocentric_from_wgs84( dstdefn, point_count,point_offset,x,y,z); - CHECK_RETURN; - } - -/* -------------------------------------------------------------------- */ -/* Convert back to geodetic coordinates. */ -/* -------------------------------------------------------------------- */ - pj_geocentric_to_geodetic( dst_a, dst_es, - point_count, point_offset, x, y, z ); - CHECK_RETURN; - } - -/* -------------------------------------------------------------------- */ -/* Apply grid shift to destination if required. */ -/* -------------------------------------------------------------------- */ - if( dstdefn->datum_type == PJD_GRIDSHIFT ) - { - pj_apply_gridshift( pj_param(dstdefn->params,"snadgrids").s, 1, - point_count, point_offset, x, y, z ); - CHECK_RETURN; - } - - if( z_is_temp ) - pj_dalloc( z ); - - return 0; -} - diff --git a/src/3rdparty/proj/pj_tsfn.c b/src/3rdparty/proj/pj_tsfn.c deleted file mode 100644 index d9dc0bc4..00000000 --- a/src/3rdparty/proj/pj_tsfn.c +++ /dev/null @@ -1,10 +0,0 @@ -/* determine small t */ -#include <math.h> -#include <projects.h> -#define HALFPI 1.5707963267948966 - double -pj_tsfn(double phi, double sinphi, double e) { - sinphi *= e; - return (tan (.5 * (HALFPI - phi)) / - pow((1. - sinphi) / (1. + sinphi), .5 * e)); -} diff --git a/src/3rdparty/proj/pj_units.c b/src/3rdparty/proj/pj_units.c deleted file mode 100644 index bb39f91b..00000000 --- a/src/3rdparty/proj/pj_units.c +++ /dev/null @@ -1,37 +0,0 @@ -/* definition of standard cartesian units */ -#define PJ_UNITS__ -#include <projects.h> -/* Field 2 that contains the multiplier to convert named units to meters -** may be expressed by either a simple floating point constant or a -** numerator/denomenator values (e.g. 1/1000) */ -C_NAMESPACE_VAR struct PJ_UNITS -pj_units[] = { - "km", "1000.", "Kilometer", - "m", "1.", "Meter", - "dm", "1/10", "Decimeter", - "cm", "1/100", "Centimeter", - "mm", "1/1000", "Millimeter", - "kmi", "1852.0", "International Nautical Mile", - "in", "0.0254", "International Inch", - "ft", "0.3048", "International Foot", - "yd", "0.9144", "International Yard", - "mi", "1609.344", "International Statute Mile", - "fath", "1.8288", "International Fathom", - "ch", "20.1168", "International Chain", - "link", "0.201168", "International Link", - "us-in", "1./39.37", "U.S. Surveyor's Inch", - "us-ft", "0.304800609601219", "U.S. Surveyor's Foot", - "us-yd", "0.914401828803658", "U.S. Surveyor's Yard", - "us-ch", "20.11684023368047", "U.S. Surveyor's Chain", - "us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile", - "ind-yd", "0.91439523", "Indian Yard", - "ind-ft", "0.30479841", "Indian Foot", - "ind-ch", "20.11669506", "Indian Chain", -(char *)0, (char *)0, (char *)0 -}; - -struct PJ_UNITS *pj_get_units_ref() - -{ - return pj_units; -} diff --git a/src/3rdparty/proj/pj_utils.c b/src/3rdparty/proj/pj_utils.c deleted file mode 100644 index f9f66847..00000000 --- a/src/3rdparty/proj/pj_utils.c +++ /dev/null @@ -1,156 +0,0 @@ -/****************************************************************************** - * $Id: pj_utils.c 1504 2009-01-06 02:11:57Z warmerdam $ - * - * Project: PROJ.4 - * Purpose: Some utility functions we don't want to bother putting in - * their own source files. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 2001, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -#define PJ_LIB__ - -#include <projects.h> -#include <string.h> -#include <math.h> - -/************************************************************************/ -/* pj_is_latlong() */ -/* */ -/* Returns TRUE if this coordinate system object is */ -/* geographic. */ -/************************************************************************/ - -int pj_is_latlong( PJ *pj ) - -{ - return pj == NULL || pj->is_latlong; -} - -/************************************************************************/ -/* pj_is_geocent() */ -/* */ -/* Returns TRUE if this coordinate system object is geocentric. */ -/************************************************************************/ - -int pj_is_geocent( PJ *pj ) - -{ - return pj != NULL && pj->is_geocent; -} - -/************************************************************************/ -/* pj_latlong_from_proj() */ -/* */ -/* Return a PJ* definition defining the lat/long coordinate */ -/* system on which a projection is based. If the coordinate */ -/* system passed in is latlong, a clone of the same will be */ -/* returned. */ -/************************************************************************/ - -PJ *pj_latlong_from_proj( PJ *pj_in ) - -{ - char defn[512]; - int got_datum = FALSE; - - pj_errno = 0; - strcpy( defn, "+proj=latlong" ); - - if( pj_param(pj_in->params, "tdatum").i ) - { - got_datum = TRUE; - sprintf( defn+strlen(defn), " +datum=%s", - pj_param(pj_in->params,"sdatum").s ); - } - else if( pj_param(pj_in->params, "tellps").i ) - { - sprintf( defn+strlen(defn), " +ellps=%s", - pj_param(pj_in->params,"sellps").s ); - } - else if( pj_param(pj_in->params, "ta").i ) - { - sprintf( defn+strlen(defn), " +a=%s", - pj_param(pj_in->params,"sa").s ); - - if( pj_param(pj_in->params, "tb").i ) - sprintf( defn+strlen(defn), " +b=%s", - pj_param(pj_in->params,"sb").s ); - else if( pj_param(pj_in->params, "tes").i ) - sprintf( defn+strlen(defn), " +es=%s", - pj_param(pj_in->params,"ses").s ); - else if( pj_param(pj_in->params, "tf").i ) - sprintf( defn+strlen(defn), " +f=%s", - pj_param(pj_in->params,"sf").s ); - else - sprintf( defn+strlen(defn), " +es=%.16g", - pj_in->es ); - } - else - { - pj_errno = -13; - - return NULL; - } - - if( !got_datum ) - { - if( pj_param(pj_in->params, "ttowgs84").i ) - sprintf( defn+strlen(defn), " +towgs84=%s", - pj_param(pj_in->params,"stowgs84").s ); - - if( pj_param(pj_in->params, "tnadgrids").i ) - sprintf( defn+strlen(defn), " +nadgrids=%s", - pj_param(pj_in->params,"snadgrids").s ); - } - - /* copy over some other information related to ellipsoid */ - if( pj_param(pj_in->params, "tR").i ) - sprintf( defn+strlen(defn), " +R=%s", - pj_param(pj_in->params,"sR").s ); - - if( pj_param(pj_in->params, "tR_A").i ) - sprintf( defn+strlen(defn), " +R_A" ); - - if( pj_param(pj_in->params, "tR_V").i ) - sprintf( defn+strlen(defn), " +R_V" ); - - if( pj_param(pj_in->params, "tR_a").i ) - sprintf( defn+strlen(defn), " +R_a" ); - - if( pj_param(pj_in->params, "tR_lat_a").i ) - sprintf( defn+strlen(defn), " +R_lat_a=%s", - pj_param(pj_in->params,"sR_lat_a").s ); - - if( pj_param(pj_in->params, "tR_lat_g").i ) - sprintf( defn+strlen(defn), " +R_lat_g=%s", - pj_param(pj_in->params,"sR_lat_g").s ); - - /* copy over prime meridian */ - if( pj_param(pj_in->params, "tpm").i ) - sprintf( defn+strlen(defn), " +pm=%s", - pj_param(pj_in->params,"spm").s ); - - return pj_init_plus( defn ); -} - diff --git a/src/3rdparty/proj/pj_zpoly1.c b/src/3rdparty/proj/pj_zpoly1.c deleted file mode 100644 index fa163deb..00000000 --- a/src/3rdparty/proj/pj_zpoly1.c +++ /dev/null @@ -1,46 +0,0 @@ -/* evaluate complex polynomial */ -#include <projects.h> -/* note: coefficients are always from C_1 to C_n -** i.e. C_0 == (0., 0) -** n should always be >= 1 though no checks are made -*/ - COMPLEX -pj_zpoly1(COMPLEX z, COMPLEX *C, int n) { - COMPLEX a; - double t; - - a = *(C += n); - while (n-- > 0) { - a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; - a.i = C->i + z.r * a.i + z.i * t; - } - a.r = z.r * (t = a.r) - z.i * a.i; - a.i = z.r * a.i + z.i * t; - return a; -} -/* evaluate complex polynomial and derivative */ - COMPLEX -pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) { - COMPLEX a, b; - double t; - int first = 1; - - a = *(C += n); - while (n-- > 0) { - if (first) { - first = 0; - b = a; - } else { - b.r = a.r + z.r * (t = b.r) - z.i * b.i; - b.i = a.i + z.r * b.i + z.i * t; - } - a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; - a.i = C->i + z.r * a.i + z.i * t; - } - b.r = a.r + z.r * (t = b.r) - z.i * b.i; - b.i = a.i + z.r * b.i + z.i * t; - a.r = z.r * (t = a.r) - z.i * a.i; - a.i = z.r * a.i + z.i * t; - *der = b; - return a; -} diff --git a/src/3rdparty/proj/proj.c b/src/3rdparty/proj/proj.c deleted file mode 100644 index 81616f9e..00000000 --- a/src/3rdparty/proj/proj.c +++ /dev/null @@ -1,499 +0,0 @@ -/* <<<< Cartographic projection filter program >>>> */ -#include "projects.h" -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> -#include <string.h> -#include <math.h> -#include "emess.h" - -/* TK 1999-02-13 */ -#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__WIN32__) -# include <fcntl.h> -# include <io.h> -# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) -#else -# define SET_BINARY_MODE(file) -#endif -/* ! TK 1999-02-13 */ - -#define MAX_LINE 1000 -#define MAX_PARGS 100 -#define PJ_INVERS(P) (P->inv ? 1 : 0) - static PJ -*Proj; - static projUV -(*proj)(projUV, PJ *); - static int -reversein = 0, /* != 0 reverse input arguments */ -reverseout = 0, /* != 0 reverse output arguments */ -bin_in = 0, /* != 0 then binary input */ -bin_out = 0, /* != 0 then binary output */ -echoin = 0, /* echo input data to output line */ -tag = '#', /* beginning of line tag character */ -inverse = 0, /* != 0 then inverse projection */ -prescale = 0, /* != 0 apply cartesian scale factor */ -dofactors = 0, /* determine scale factors */ -facs_bad = 0, /* return condition from pj_factors */ -very_verby = 0, /* very verbose mode */ -postscale = 0; - static char -*cheby_str, /* string controlling Chebychev evaluation */ -*oform = (char *)0, /* output format for x-y or decimal degrees */ -*oterr = "*\t*", /* output line for unprojectable input */ -*usage = -"%s\nusage: %s [ -beEfiIlormsStTvVwW [args] ] [ +opts[=arg] ] [ files ]\n"; - static struct FACTORS -facs; - static double -(*informat)(const char *, char **), /* input data deformatter function */ -fscale = 0.; /* cartesian scale factor */ - static projUV -int_proj(projUV data) { - if (prescale) { data.u *= fscale; data.v *= fscale; } - data = (*proj)(data, Proj); - if (postscale && data.u != HUGE_VAL) - { data.u *= fscale; data.v *= fscale; } - return(data); -} - static void /* file processing function */ -process(FILE *fid) { - char line[MAX_LINE+3], *s, pline[40]; - projUV data; - - for (;;) { - ++emess_dat.File_line; - if (bin_in) { /* binary input */ - if (fread(&data, sizeof(projUV), 1, fid) != 1) - break; - } else { /* ascii input */ - if (!(s = fgets(line, MAX_LINE, fid))) - break; - if (!strchr(s, '\n')) { /* overlong line */ - int c; - (void)strcat(s, "\n"); - /* gobble up to newline */ - while ((c = fgetc(fid)) != EOF && c != '\n') ; - } - if (*s == tag) { - if (!bin_out) - (void)fputs(line, stdout); - continue; - } - if (reversein) { - data.v = (*informat)(s, &s); - data.u = (*informat)(s, &s); - } else { - data.u = (*informat)(s, &s); - data.v = (*informat)(s, &s); - } - if (data.v == HUGE_VAL) - data.u = HUGE_VAL; - if (!*s && (s > line)) --s; /* assumed we gobbled \n */ - if (!bin_out && echoin) { - int t; - t = *s; - *s = '\0'; - (void)fputs(line, stdout); - *s = t; - putchar('\t'); - } - } - if (data.u != HUGE_VAL) { - if (prescale) { data.u *= fscale; data.v *= fscale; } - if (dofactors && !inverse) - facs_bad = pj_factors(data, Proj, 0., &facs); - data = (*proj)(data, Proj); - if (dofactors && inverse) - facs_bad = pj_factors(data, Proj, 0., &facs); - if (postscale && data.u != HUGE_VAL) - { data.u *= fscale; data.v *= fscale; } - } - if (bin_out) { /* binary output */ - (void)fwrite(&data, sizeof(projUV), 1, stdout); - continue; - } else if (data.u == HUGE_VAL) /* error output */ - (void)fputs(oterr, stdout); - else if (inverse && !oform) { /*ascii DMS output */ - if (reverseout) { - (void)fputs(rtodms(pline, data.v, 'N', 'S'), stdout); - putchar('\t'); - (void)fputs(rtodms(pline, data.u, 'E', 'W'), stdout); - } else { - (void)fputs(rtodms(pline, data.u, 'E', 'W'), stdout); - putchar('\t'); - (void)fputs(rtodms(pline, data.v, 'N', 'S'), stdout); - } - } else { /* x-y or decimal degree ascii output */ - if (inverse) { - data.v *= RAD_TO_DEG; - data.u *= RAD_TO_DEG; - } - if (reverseout) { - (void)printf(oform,data.v); putchar('\t'); - (void)printf(oform,data.u); - } else { - (void)printf(oform,data.u); putchar('\t'); - (void)printf(oform,data.v); - } - } - if (dofactors) /* print scale factor data */ - if (!facs_bad) - (void)printf("\t<%g %g %g %g %g %g>", - facs.h, facs.k, facs.s, - facs.omega * RAD_TO_DEG, facs.a, facs.b); - else - (void)fputs("\t<* * * * * *>", stdout); - (void)fputs(bin_in ? "\n" : s, stdout); - } -} - static void /* file processing function --- verbosely */ -vprocess(FILE *fid) { - char line[MAX_LINE+3], *s, pline[40]; - projUV dat_ll, dat_xy; - int linvers; - - if (!oform) - oform = "%.3f"; - if (bin_in || bin_out) - emess(1,"binary I/O not available in -V option"); - for (;;) { - ++emess_dat.File_line; - if (!(s = fgets(line, MAX_LINE, fid))) - break; - if (!strchr(s, '\n')) { /* overlong line */ - int c; - (void)strcat(s, "\n"); - /* gobble up to newline */ - while ((c = fgetc(fid)) != EOF && c != '\n') ; - } - if (*s == tag) { /* pass on data */ - (void)fputs(s, stdout); - continue; - } - /* check to override default input mode */ - if (*s == 'I' || *s == 'i') { - linvers = 1; - ++s; - } else if (*s == 'I' || *s == 'i') { - linvers = 0; - ++s; - } else - linvers = inverse; - if (linvers) { - if (!PJ_INVERS(Proj)) { - emess(-1,"inverse for this projection not avail.\n"); - continue; - } - dat_xy.u = strtod(s, &s); - dat_xy.v = strtod(s, &s); - if (dat_xy.u == HUGE_VAL || dat_xy.v == HUGE_VAL) { - emess(-1,"lon-lat input conversion failure\n"); - continue; - } - if (prescale) { dat_xy.u *= fscale; dat_xy.v *= fscale; } - dat_ll = pj_inv(dat_xy, Proj); - } else { - dat_ll.u = dmstor(s, &s); - dat_ll.v = dmstor(s, &s); - if (dat_ll.u == HUGE_VAL || dat_ll.v == HUGE_VAL) { - emess(-1,"lon-lat input conversion failure\n"); - continue; - } - dat_xy = pj_fwd(dat_ll, Proj); - if (postscale) { dat_xy.u *= fscale; dat_xy.v *= fscale; } - } - if (pj_errno) { - emess(-1, pj_strerrno(pj_errno)); - continue; - } - if (!*s && (s > line)) --s; /* assumed we gobbled \n */ - if (pj_factors(dat_ll, Proj, 0., &facs)) { - emess(-1,"failed to conpute factors\n\n"); - continue; - } - if (*s != '\n') - (void)fputs(s, stdout); - (void)fputs("Longitude: ", stdout); - (void)fputs(rtodms(pline, dat_ll.u, 'E', 'W'), stdout); - (void)printf(" [ %.11g ]\n", dat_ll.u * RAD_TO_DEG); - (void)fputs("Latitude: ", stdout); - (void)fputs(rtodms(pline, dat_ll.v, 'N', 'S'), stdout); - (void)printf(" [ %.11g ]\n", dat_ll.v * RAD_TO_DEG); - (void)fputs("Easting (x): ", stdout); - (void)printf(oform, dat_xy.u); putchar('\n'); - (void)fputs("Northing (y): ", stdout); - (void)printf(oform, dat_xy.v); putchar('\n'); - (void)printf("Meridian scale (h)%c: %.8f ( %.4g %% error )\n", - facs.code & IS_ANAL_HK ? '*' : ' ', facs.h, (facs.h-1.)*100.); - (void)printf("Parallel scale (k)%c: %.8f ( %.4g %% error )\n", - facs.code & IS_ANAL_HK ? '*' : ' ', facs.k, (facs.k-1.)*100.); - (void)printf("Areal scale (s): %.8f ( %.4g %% error )\n", - facs.s, (facs.s-1.)*100.); - (void)printf("Angular distortion (w): %.3f\n", facs.omega * - RAD_TO_DEG); - (void)printf("Meridian/Parallel angle: %.5f\n", - facs.thetap * RAD_TO_DEG); - (void)printf("Convergence%c: ",facs.code & IS_ANAL_CONV ? '*' : ' '); - (void)fputs(rtodms(pline, facs.conv, 0, 0), stdout); - (void)printf(" [ %.8f ]\n", facs.conv * RAD_TO_DEG); - (void)printf("Max-min (Tissot axis a-b) scale error: %.5f %.5f\n\n", - facs.a, facs.b); - } -} - -int main(int argc, char **argv) { - char *arg, **eargv = argv, *pargv[MAX_PARGS], **iargv = argv; - FILE *fid; - int pargc = 0, iargc = argc, eargc = 0, c, mon = 0; - - if (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR)) - ++emess_dat.Prog_name; - else emess_dat.Prog_name = *argv; - inverse = ! strncmp(emess_dat.Prog_name, "inv", 3); - if (argc <= 1 ) { - (void)fprintf(stderr, usage, pj_get_release(), emess_dat.Prog_name); - exit (0); - } - /* process run line arguments */ - while (--argc > 0) { /* collect run line arguments */ - if(**++argv == '-') for(arg = *argv;;) { - switch(*++arg) { - case '\0': /* position of "stdin" */ - if (arg[-1] == '-') eargv[eargc++] = "-"; - break; - case 'b': /* binary I/O */ - bin_in = bin_out = 1; - continue; - case 'v': /* monitor dump of initialization */ - mon = 1; - continue; - case 'i': /* input binary */ - bin_in = 1; - continue; - case 'o': /* output binary */ - bin_out = 1; - continue; - case 'I': /* alt. method to spec inverse */ - inverse = 1; - continue; - case 'E': /* echo ascii input to ascii output */ - echoin = 1; - continue; - case 'V': /* very verbose processing mode */ - very_verby = 1; - mon = 1; - case 'S': /* compute scale factors */ - dofactors = 1; - continue; - case 't': /* set col. one char */ - if (arg[1]) tag = *++arg; - else emess(1,"missing -t col. 1 tag"); - continue; - case 'l': /* list projections, ellipses or units */ - if (!arg[1] || arg[1] == 'p' || arg[1] == 'P') { - /* list projections */ - struct PJ_LIST *lp; - int do_long = arg[1] == 'P', c; - char *str; - - for (lp = pj_get_list_ref() ; lp->id ; ++lp) { - if( strcmp(lp->id,"latlong") == 0 - || strcmp(lp->id,"longlat") == 0 - || strcmp(lp->id,"geocent") == 0 ) - continue; - - (void)printf("%s : ", lp->id); - if (do_long) /* possibly multiline description */ - (void)puts(*lp->descr); - else { /* first line, only */ - str = *lp->descr; - while ((c = *str++) && c != '\n') - putchar(c); - putchar('\n'); - } - } - } else if (arg[1] == '=') { /* list projection 'descr' */ - struct PJ_LIST *lp; - - arg += 2; - for (lp = pj_get_list_ref(); lp->id ; ++lp) - if (!strcmp(lp->id, arg)) { - (void)printf("%9s : %s\n", lp->id, *lp->descr); - break; - } - } else if (arg[1] == 'e') { /* list ellipses */ - struct PJ_ELLPS *le; - - for (le = pj_get_ellps_ref(); le->id ; ++le) - (void)printf("%9s %-16s %-16s %s\n", - le->id, le->major, le->ell, le->name); - } else if (arg[1] == 'u') { /* list units */ - struct PJ_UNITS *lu; - - for (lu = pj_get_units_ref(); lu->id ; ++lu) - (void)printf("%12s %-20s %s\n", - lu->id, lu->to_meter, lu->name); - } else if (arg[1] == 'd') { /* list datums */ - struct PJ_DATUMS *ld; - - printf("__datum_id__ __ellipse___ __definition/comments______________________________\n" ); - for (ld = pj_get_datums_ref(); ld->id ; ++ld) - { - printf("%12s %-12s %-30s\n", - ld->id, ld->ellipse_id, ld->defn); - if( ld->comments != NULL && strlen(ld->comments) > 0 ) - printf( "%25s %s\n", " ", ld->comments ); - } - } else - emess(1,"invalid list option: l%c",arg[1]); - exit(0); - continue; /* artificial */ - case 'e': /* error line alternative */ - if (--argc <= 0) - noargument: - emess(1,"missing argument for -%c",*arg); - oterr = *++argv; - continue; - case 'T': /* generate Chebyshev coefficients */ - if (--argc <= 0) goto noargument; - cheby_str = *++argv; - continue; - case 'm': /* cartesian multiplier */ - if (--argc <= 0) goto noargument; - postscale = 1; - if (!strncmp("1/",*++argv,2) || - !strncmp("1:",*argv,2)) { - if((fscale = atof((*argv)+2)) == 0.) - goto badscale; - fscale = 1. / fscale; - } else - if ((fscale = atof(*argv)) == 0.) { - badscale: - emess(1,"invalid scale argument"); - } - continue; - case 'W': /* specify seconds precision */ - case 'w': /* -W for constant field width */ - if ((c = arg[1]) != 0 && isdigit(c)) { - set_rtodms(c - '0', *arg == 'W'); - ++arg; - } else - emess(1,"-W argument missing or non-digit"); - continue; - case 'f': /* alternate output format degrees or xy */ - if (--argc <= 0) goto noargument; - oform = *++argv; - continue; - case 'r': /* reverse input */ - reversein = 1; - continue; - case 's': /* reverse output */ - reverseout = 1; - continue; - default: - emess(1, "invalid option: -%c",*arg); - break; - } - break; - } else if (**argv == '+') { /* + argument */ - if (pargc < MAX_PARGS) - pargv[pargc++] = *argv + 1; - else - emess(1,"overflowed + argument table"); - } else /* assumed to be input file name(s) */ - eargv[eargc++] = *argv; - } - if (eargc == 0 && !cheby_str) /* if no specific files force sysin */ - eargv[eargc++] = "-"; - else if (eargc > 0 && cheby_str) /* warning */ - emess(4, "data files when generating Chebychev prohibited"); - /* done with parameter and control input */ - if (inverse && postscale) { - prescale = 1; - postscale = 0; - fscale = 1./fscale; - } - if (!(Proj = pj_init(pargc, pargv))) - emess(3,"projection initialization failure\ncause: %s", - pj_strerrno(pj_errno)); - - if( pj_is_latlong( Proj ) ) - { - emess( 3, "+proj=latlong unsuitable for use with proj program." ); - exit( 0 ); - } - - if (inverse) { - if (!Proj->inv) - emess(3,"inverse projection not available"); - proj = pj_inv; - } else - proj = pj_fwd; - if (cheby_str) { - extern void gen_cheb(int, projUV(*)(projUV), char *, PJ *, int, char **); - - gen_cheb(inverse, int_proj, cheby_str, Proj, iargc, iargv); - exit(0); - } - /* set input formating control */ - if (mon) { - pj_pr_list(Proj); - if (very_verby) { - (void)printf("#Final Earth figure: "); - if (Proj->es) { - (void)printf("ellipsoid\n# Major axis (a): "); - (void)printf(oform ? oform : "%.3f", Proj->a); - (void)printf("\n# 1/flattening: %.6f\n", - 1./(1. - sqrt(1. - Proj->es))); - (void)printf("# squared eccentricity: %.12f\n", Proj->es); - } else { - (void)printf("sphere\n# Radius: "); - (void)printf(oform ? oform : "%.3f", Proj->a); - (void)putchar('\n'); - } - } - } - if (inverse) - informat = strtod; - else { - informat = dmstor; - if (!oform) - oform = "%.2f"; - } - - if (bin_out) - { - SET_BINARY_MODE(stdout); - } - - /* process input file list */ - for ( ; eargc-- ; ++eargv) { - if (**eargv == '-') { - fid = stdin; - emess_dat.File_name = "<stdin>"; - - if (bin_in) - { - SET_BINARY_MODE(stdin); - } - - } else { - if ((fid = fopen(*eargv, "rb")) == NULL) { - emess(-2, *eargv, "input file"); - continue; - } - emess_dat.File_name = *eargv; - } - emess_dat.File_line = 0; - if (very_verby) - vprocess(fid); - else - process(fid); - (void)fclose(fid); - emess_dat.File_name = 0; - } - if( Proj ) - pj_free(Proj); - exit(0); /* normal completion */ -} diff --git a/src/3rdparty/proj/proj.def b/src/3rdparty/proj/proj.def deleted file mode 100644 index 5170f927..00000000 --- a/src/3rdparty/proj/proj.def +++ /dev/null @@ -1,41 +0,0 @@ -VERSION 1.2 -EXPORTS - pj_init @1 - pj_fwd @2 - pj_inv @3 - pj_free @4 - pj_transform @5 - pj_geocentric_to_geodetic @6 - pj_geodetic_to_geocentric @7 - pj_deallocate_grids @8 - pj_init_plus @9 - pj_latlong_from_proj @10 - pj_is_latlong @11 - pj_get_errno_ref @12 - pj_set_finder @13 - pj_strerrno @14 - pj_errno @15 - pj_get_def @16 - pj_dalloc @17 - pj_is_geocent @18 - pj_get_release @19 - pj_malloc @20 - pj_pr_list @21 - pj_compare_datums @22 - pj_apply_gridshift @23 - pj_datum_transform @24 - pj_set_searchpath @25 - dmstor @26 - pj_get_ellps_ref @27 - pj_get_datums_ref @28 - pj_get_units_ref @29 - pj_get_list_ref @30 - pj_get_prime_meridians_ref @31 - rtodms @32 - set_rtodms @33 - pj_factors @34 - mk_cheby @35 - adjlon @36 - pj_param @37 - pj_ell_set @38 - pj_mkparam @39 diff --git a/src/3rdparty/proj/proj_data/GL27 b/src/3rdparty/proj/proj_data/GL27 deleted file mode 100644 index dd927bd2..00000000 --- a/src/3rdparty/proj/proj_data/GL27 +++ /dev/null @@ -1,22 +0,0 @@ -# SCCSID @(#)GL27 1.1 93/08/25 GIE REL -# Great Lakes Grids -<erie-etal> # Lake Erie, Ontario and St. Lawrence River. - proj=omerc ellps=clrk66 k_0=0.9999 - lonc=78d00'W lat_0=44d00'N alpha=55d40' - x_0=-3950000 y_0=-3430000 - no_defs <> -<huron> # Lake Huron - proj=omerc ellps=clrk66 k_0=0.9999 - lonc=82d00'W lat_0=43d00'N alpha=350d37' - x_0=1200000 y_0=-3500000 - no_defs <> -<michigan> # Lake Michigan - proj=omerc ellps=clrk66 k_0=0.9999 - lonc=87d00'W lat_0=44d00'N alpha=15d00' - x_0=-1000000 y_0=-4300000 - no_defs <> -<superior> # Lake Superior, Lake of the Woods - proj=omerc ellps=clrk66 k_0=0.9999 - lonc=88d50'0.256"W lat_0=47d12'21.554"N alpha=285d41'42.593" - x_0=9000000 y_0=-1600000 - no_defs <> diff --git a/src/3rdparty/proj/proj_data/IGNF b/src/3rdparty/proj/proj_data/IGNF deleted file mode 100644 index 47aa87b1..00000000 --- a/src/3rdparty/proj/proj_data/IGNF +++ /dev/null @@ -1,469 +0,0 @@ -# W [AMANU49] -# W [AMANU63] -# W [AMST63] -# W [ANAA47] -<ANAA92> +title=MOP92 (Anaa) Tuamotu +proj=geocent +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <> -# W [APAT48] -# W [APAT49] -<APAT86> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=geocent +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<ATI> +title=Ancienne Triangulation des Ingenieurs +proj=geocent +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <> -# W [BASSAS] -# W [BIEN55] -<CAD97> +title=Cadastre 1997 +proj=geocent +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [CADA80] -# W [CASS1733] -<CIOBIH> +title=CIO-BIH +proj=geocent +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -# W [CLIP67] -<CROZ63> +title=Crozet 1963 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<CSG67> +title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<ED50> +title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<EFATE57> +title=EFATE-IGN 1957 +proj=geocent +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [EUROPA54] -# W [FAKA50] -# W [FANGA50] -# W [FANGA64] -# W [FANGA651] -# W [FANGA652] -# W [FANGA66] -<FANGA84> +title=MOP84 (Fangataufa 1984) +proj=geocent +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [GLOR77CAR] -<GUAD48> +title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<GUADFM49> +title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [HAO49] -# W [HAO58] -# W [HAO67] -# W [HARA49] -# W [HIKU50] -# W [HIVA60] -# W [HIVA67] -<IGN63> +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<IGN72> +title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [JULES55] -<KAUE70> +title=MHPF70 (Kauehi) Tuamotu +proj=geocent +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<KERG62CAR> +title=Kerguelen - K0 +proj=geocent +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<LIFOU56> +title=Lifou - Iles Loyaute (IGN56) +proj=geocent +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<LUREF> +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=geocent +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MAKE50] -# W [MANGA51] -<MARE53> +title=Mare - Iles Loyaute (IGN53) +proj=geocent +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MARQUI72> +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=geocent +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MART38> +title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MAUPITI] -<MAYO50> +title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MHEFO55F> +title=MHEFO 1955 (Fatu Huku) +proj=geocent +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MHEFO55M] -<MHPF67> +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=geocent +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MOOREA87> +title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MOP90> +title=MOP90 (Tetiaroa) Iles de la Societe +proj=geocent +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MURU51] -# W [MURU59] -# W [MURU62] -# W [MURU78] -# W [NC51] -# W [NOVA53] -<NTF> +title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <> -<NUKU72> +title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<NUKU94> +title=SAT94 (Nukutavake) Tuamotu +proj=geocent +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<OUVEA72CAR> +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=geocent +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<PETRELS72> +title=Petrels - IGN 1972 +proj=geocent +towgs84=365.0000,194.0000,166.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [PMAR55] -<RAIA53> +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=geocent +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [RAIV54] -# W [RAIV66] -# W [RANGI47] -# W [RANGI59] -# W [RANGI68] -# W [RAPA55] -# W [RAPA80] -<REUN47> +title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [REUN49] -# W [REUN92] -<RGF93> +title=Reseau geodesique francais 1993 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGFG95> +title=Reseau geodesique francais de Guyane 1995 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGM04> +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGNC> +title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGPF> +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGR92> +title=Reseau geodesique Reunion 1992 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGSPM06> +title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RRAF91> +title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<SAT84> +title=SAT84 (Rurutu) Iles Australes +proj=geocent +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<SHOM84> +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=geocent +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [STPL69] -<STPM50> +title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <> -# W [SYSLNCAR] -<TAHAA> +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<TAHI51> +title=Tahiti-Terme Nord 1951 +proj=geocent +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<TAHI79> +title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [TAKA69] -<TANNA> +title=Tanna Bloc Sud +proj=geocent +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<TERA50> +title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [TIKE50] -# W [TIKE60] -# W [TROM56] -<TUBU69> +title=MHPF 1969 (Tubuai) Iles Australes +proj=geocent +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [TURI69] -# W [WALL76] -<WALL78> +title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<WGS72> +title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <> -<WGS84> +title=World Geodetic System 1984 +proj=geocent +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -# W [AMANU49GEO] -# W [AMANU63GEO] -# W [AMST63GEO] -# W [ANAA47GEO] -<ANAA92GEO> +title=MOP92 (Anaa) Tuamotu +proj=longlat +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <> -# W [APAT48GEO] -# W [APAT49GEO] -<APAT86GEO> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=longlat +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<ATIGEO> +title=Ancienne Triangulation des Ingenieurs +proj=longlat +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <> -# W [BASSASGEO] -# W [BIEN55GEO] -<CAD97GEO> +title=Cadastre 1997 +proj=longlat +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [CADA80GEO] -# W [CASS1733GEO] -# W [CLIP67GEO] -<CROZ63GEO> +title=Crozet 1963 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<CSG67GEO> +title=Guyane CSG67 UTM fuseau 21 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<ED50G> +title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<EFATE57GEO> +title=EFATE-IGN 1957 +proj=longlat +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [EUROPA54GEO] -# W [FAKA50GEO] -# W [FANGA50GEO] -# W [FANGA64GEO] -# W [FANGA651GEO] -# W [FANGA652GEO] -# W [FANGA66GEO] -<FANGA84GEO> +title=MOP84 (Fangataufa 1984) +proj=longlat +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [GLOR77GEO] -<GUAD48GEO> +title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<GUADFM49GEO> +title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [HAO49GEO] -# W [HAO58GEO] -# W [HAO67GEO] -# W [HARA49GEO] -# W [HIKU50GEO] -# W [HIVA60GEO] -# W [HIVA67GEO] -<IGN63GEO> +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<IGN72GEO> +title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [JULES55GEO] -<KAUE70GEO> +title=MHPF70 (Kauehi) Tuamotu +proj=longlat +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<KERG62GEO> +title=Kerguelen - K0 +proj=longlat +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<LIFOU56GEO> +title=Lifou - Iles Loyaute (IGN56) +proj=longlat +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<LUXGEO> +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=longlat +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MAKE50GEO] -# W [MANGA51GEO] -<MARE53GEO> +title=Mare - Iles Loyaute (IGN53) +proj=longlat +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MARQUI72GEO> +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=longlat +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MART38GEO> +title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MAUPITIGEO] -<MAYO50GEO> +title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MHEFO55FGEO> +title=MHEFO 1955 (Fatu Huku) +proj=longlat +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MHEFO55MGEO] -<MHPF67GEO> +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=longlat +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MOOREA87GEO> +title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<MOP90GEO> +title=MOP90 (Tetiaroa) Iles de la Societe +proj=longlat +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [MURU51GEO] -# W [MURU59GEO] -# W [MURU62GEO] -# W [MURU78GEO] -# W [NC51GEO] -# W [NOVA53GEO] -<NTFG> +title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <> -<NTFP> +title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs <> -<NUKU72GEO> +title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<NUKU94GEO> +title=SAT94 (Nukutavake) Tuamotu +proj=longlat +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<OUVEA72GEO> +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=longlat +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [PMAR55GEO] -<RAIA53GEO> +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=longlat +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [RAIV54GEO] -# W [RAIV66GEO] -# W [RANGI47GEO] -# W [RANGI59GEO] -# W [RANGI68GEO] -# W [RAPA55GEO] -# W [RAPA80GEO] -<REUN47GEO> +title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [REUN49GEO] -# W [REUN92GEO] -<RGF93G> +title=Reseau geodesique francais 1993 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGFG95GEO> +title=Reseau geodesique francais de Guyane 1995 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGM04GEO> +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGNCGEO> +title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGPFGEO> +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGR92GEO> +title=Reseau geodesique de la Reunion 1992 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<RGSPM06GEO> +title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<SAT84GEO> +title=SAT84 (Rurutu) Iles Australes +proj=longlat +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<SHOM84GEO> +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=longlat +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [STPL69GEO] -<STPM50GEO> +title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <> -# W [SYSLNGEO] -<TAHAAGEO> +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<TAHI51GEO> +title=Tahiti-Terme Nord 1951 +proj=longlat +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<TAHI79GEO> +title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [TAKA69GEO] -<TANNAGEO> +title=Tanna Bloc Sud +proj=longlat +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<TERA50GEO> +title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [TIKE50GEO] -# W [TIKE60GEO] -# W [TROM56GEO] -<TUBU69GEO> +title=MHPF 1969 (Tubuai) Iles Australes +proj=longlat +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -# W [TURI69GEO] -# W [VAITAPEGEO] -# W [WALL76GEO] -<WALL78GEO> +title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> -<WGS72G> +title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <> -<WGS84G> +title=World Geodetic System 1984 +proj=longlat +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<WGS84RRAFGEO> +title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -<XGEO> +title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> -# W [AMANU63UTM7S] -# W [AMST63UTM43S] -# W [ANAA47UTM6S] -<ANAA92UTM6S> +title=MOP92 (Anaa) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<APAT86UTM6S> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<APAT86UTM7S> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 7 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [BASSASUTM37S] -<CAD97UTM38S> +title=Cadastre 1997 - UTM fuseau 38 Sud +proj=tmerc +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [CADA80UTM7S] -# W [CLIP57UTM12] -<CROZ63UTM39S> +title=Crozet 1963 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<CSG67UTM21> +title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<CSG67UTM22> +title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<EFATE57UT59S> +title=EFATE-IGN 1957 - UTM fuseau 59 Sud +proj=tmerc +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [FAKA50UTM6S] -# W [FANGA64UTM7S] -# W [FANGA651U7S] -# W [FANGA652U7S] -# W [FANGA66UTM7S] -<FANGA84UTM7S> +title=Fangataufa 1984 - UTM fuseau 7 Sud +proj=tmerc +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<GEOPORTALANF> +title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALCRZ> +title=Geoportail - Crozet +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALFXX> +title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALGUF> +title=Geoportail - Guyane +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALKER> +title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALMYT> +title=Geoportail - Mayotte +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALNCL> +title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALPYF> +title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALREU> +title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALSPM> +title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<GEOPORTALWLF> +title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -# W [GLOR77UTM38S] -<GUAD48UTM20> +title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<GUADFM49U20> +title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -# W [HAO58UTM7S] -# W [HAO67UTM7S] -# W [HARA49UTM7S] -# W [HIKU50UTM7S] -# W [HIVA60UTM7S] -# W [HIVA67UTM7S] -<IGN63UTM7S> +title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<IGN72LAM> +title=IGN 1972 - Lambert Nouvelle Caledonie +proj=lcc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.300000000 +lon_0=166.000000000 +lat_1=-20.400000000 +lat_2=-22.200000000 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <> -<IGN72UTM58S> +title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<KAUE70UTM6S> +title=MHPF70 (Kauehi) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<KERG62UTM42S> +title=Kerguelen 1962 +proj=tmerc +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<LAMB1> +title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> -<LAMB1C> +title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs <> -<LAMB2> +title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> -<LAMB2C> +title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <> -<LAMB3> +title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> -<LAMB3C> +title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs <> -<LAMB4> +title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs <> -<LAMB4C> +title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs <> -<LAMB93> +title=Lambert 93 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs <> -<LAMBE> +title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <> -<LAMBGC> +title=Lambert grand champ +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=47.000000000 +lon_0=0.000000000 +lat_1=45.000000000 +lat_2=49.000000000 +x_0=600000.000 +y_0=600000.000 +units=m +no_defs <> -<LUXGAUSSK> +title=Luxembourg 1929 +proj=tmerc +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=49.833333333 +lon_0=6.166666667 +k_0=1.00000000 +x_0=80000.000 +y_0=100000.000 +units=m +no_defs <> -# W [MAKE50UTM7S] -# W [MANGA51U8S] -<MARE53UTM58S> +title=Mare - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<MART38UTM20> +title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -# W [MAUPITIUTM5S] -<MAYO50UTM38S> +title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<MHPF67UTM8S> +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) - UTM 8 S +proj=tmerc +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<MILLER> +title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> -<MOOREA87U6S> +title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<MOP90UTM6S> +title=MOP90 (Tetiaroa) Iles de la Societe - UTM fuseau 6 Sud +proj=tmerc +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [MURU59UTM7S] -# W [MURU62UTM7S] -# W [MURU78UTM7S] -# W [NC51UTM58S] -# W [NOVA53UTM38S] -<NUKU72U7S> +title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<NUKU94UTM7S> +title=IGN 1994 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<OUVEA72U58S> +title=Ouvea - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RAIA53UTM5S> +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine - UTM fuseau 5 +proj=tmerc +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [RAIV54UTM6S] -# W [RAIV66UTM6S] -# W [RANGI47U6S] -# W [RANGI59U6S] -# W [RANGI68U6S] -<REUN47GAUSSL> +title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs <> -<RGF93CC42> +title=Projection conique conforme Zone 1 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.250000000 +lat_2=42.750000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs <> -<RGF93CC43> +title=Projection conique conforme Zone 2 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.250000000 +lat_2=43.750000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs <> -<RGF93CC44> +title=Projection conique conforme Zone 3 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.250000000 +lat_2=44.750000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs <> -<RGF93CC45> +title=Projection conique conforme Zone 4 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.250000000 +lat_2=45.750000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs <> -<RGF93CC46> +title=Projection conique conforme Zone 5 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.250000000 +lat_2=46.750000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs <> -<RGF93CC47> +title=Projection conique conforme Zone 6 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.250000000 +lat_2=47.750000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs <> -<RGF93CC48> +title=Projection conique conforme Zone 7 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.250000000 +lat_2=48.750000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs <> -<RGF93CC49> +title=Projection conique conforme Zone 8 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.250000000 +lat_2=49.750000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs <> -<RGF93CC50> +title=Projection conique conforme Zone 9 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.250000000 +lat_2=50.750000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs <> -<RGM04UTM38S> +title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGNCLAM> +title=Reseau Geodesique de Nouvelle-Caledonie - Lambert Nouvelle Caledonie +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-21.300000000 +lon_0=166.000000000 +lat_1=-20.400000000 +lat_2=-22.200000000 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <> -<RGNCUTM57S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGNCUTM58S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGNCUTM59S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGPFUTM5S> +title=RGPF - UTM fuseau 5 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGPFUTM6S> +title=RGPF - UTM fuseau 6 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGPFUTM7S> +title=RGPF - UTM fuseau 7 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGR92UTM40S> +title=RGR92 UTM fuseau 40 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<RGSPM06U21> +title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<SAT84UTM5S> +title=SAT84 (Rurutu) Iles Australes - UTM fuseau 5 Sud +proj=tmerc +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<STEREOSX> +title=Stereographique polaire Sud +proj=sterea +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-90.000000000 +lon_0=140.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <> -# W [STPL69UTM43S] -<STPM50UTM21> +title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<TAHAAUTM05S> +title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<TAHI51UTM06S> +title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<TAHI79UTM6S> +title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [TAKA69UTM6S] -<TANNAUTM59S> +title=Tanna Bloc Sud - UTM fuseau 59 Sud +proj=tmerc +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<TERA50SPTA> +title=Terre Adelie Stereo polaire Terre Adelie +proj=sterea +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-67.000000000 +lon_0=140.000000000 +k=1.00000000 +x_0=300000.000 +y_0=200000.000 +units=m +no_defs <> -<TERA50STEREO> +title=Terre Adelie 1950 +proj=sterea +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <> -# W [TIKE50UTM6S] -# W [TIKE60UTM6S] -<TUBU69UTM6S> +title=Tubuai - Iles Australes - UTM fuseau 6 Sud +proj=tmerc +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -# W [TURI69UTM7S] -<UTM01SW72> +title=World Geodetic System 1972 UTM fuseau 01 Sud +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM01SW84> +title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM01W84> +title=World Geodetic System 1984 UTM fuseau 01 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM02SW84> +title=World Geodetic System 1984 UTM fuseau 02 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM02W84> +title=World Geodetic System 1984 UTM fuseau 02 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM03SW84> +title=World Geodetic System 1984 UTM fuseau 03 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM03W84> +title=World Geodetic System 1984 UTM fuseau 03 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM04SW84> +title=World Geodetic System 1984 UTM fuseau 04 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM04W84> +title=World Geodetic System 1984 UTM fuseau 04 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM05SW84> +title=World Geodetic System 1984 UTM fuseau 05 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM05W84> +title=World Geodetic System 1984 UTM fuseau 05 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM06SW84> +title=World Geodetic System 1984 UTM fuseau 06 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM06W84> +title=World Geodetic System 1984 UTM fuseau 06 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM07SW84> +title=World Geodetic System 1984 UTM fuseau 07 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM07W84> +title=World Geodetic System 1984 UTM fuseau 07 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM08SW84> +title=World Geodetic System 1984 UTM fuseau 08 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM08W84> +title=World Geodetic System 1984 UTM fuseau 08 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM09SW84> +title=World Geodetic System 1984 UTM fuseau 09 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM09W84> +title=World Geodetic System 1984 UTM fuseau 09 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM10SW84> +title=World Geodetic System 1984 UTM fuseau 10 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM10W84> +title=World Geodetic System 1984 UTM fuseau 10 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM11SW84> +title=World Geodetic System 1984 UTM fuseau 11 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM11W84> +title=World Geodetic System 1984 UTM fuseau 11 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM12SW84> +title=World Geodetic System 1984 UTM fuseau 12 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM12W84> +title=World Geodetic System 1984 UTM fuseau 12 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM13SW84> +title=World Geodetic System 1984 UTM fuseau 13 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM13W84> +title=World Geodetic System 1984 UTM fuseau 13 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM14SW84> +title=World Geodetic System 1984 UTM fuseau 14 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM14W84> +title=World Geodetic System 1984 UTM fuseau 14 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM15SW84> +title=World Geodetic System 1984 UTM fuseau 15 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM15W84> +title=World Geodetic System 1984 UTM fuseau 15 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM16SW84> +title=World Geodetic System 1984 UTM fuseau 16 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM16W84> +title=World Geodetic System 1984 UTM fuseau 16 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM17SW84> +title=World Geodetic System 1984 UTM fuseau 17 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM17W84> +title=World Geodetic System 1984 UTM fuseau 17 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM18SW84> +title=World Geodetic System 1984 UTM fuseau 18 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM18W84> +title=World Geodetic System 1984 UTM fuseau 18 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM19SW84> +title=World Geodetic System 1984 UTM fuseau 19 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM19W84> +title=World Geodetic System 1984 UTM fuseau 19 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM20SW84> +title=World Geodetic System 1984 UTM fuseau 20 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM20W84> +title=World Geodetic System 1984 UTM fuseau 20 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM20W84GUAD> +title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM20W84MART> +title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM21SW84> +title=World Geodetic System 1984 UTM fuseau 21 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM21W84> +title=World Geodetic System 1984 UTM fuseau 21 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM22RGFG95> +title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM22SW84> +title=World Geodetic System 1984 UTM fuseau 22 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM22W84> +title=World Geodetic System 1984 UTM fuseau 22 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM23SW84> +title=World Geodetic System 1984 UTM fuseau 23 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM23W84> +title=World Geodetic System 1984 UTM fuseau 23 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM24SW84> +title=World Geodetic System 1984 UTM fuseau 24 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM24W84> +title=World Geodetic System 1984 UTM fuseau 24 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM25SW84> +title=World Geodetic System 1984 UTM fuseau 25 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM25W84> +title=World Geodetic System 1984 UTM fuseau 25 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM26SW84> +title=World Geodetic System 1984 UTM fuseau 26 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM26W84> +title=World Geodetic System 1984 UTM fuseau 26 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM27SW84> +title=World Geodetic System 1984 UTM fuseau 27 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM27W84> +title=World Geodetic System 1984 UTM fuseau 27 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM28SW84> +title=World Geodetic System 1984 UTM fuseau 28 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM28W84> +title=World Geodetic System 1984 UTM fuseau 28 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM29SW84> +title=World Geodetic System 1984 UTM fuseau 29 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM29W84> +title=World Geodetic System 1984 UTM fuseau 29 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM30> +title=European Datum 1950 UTM fuseau 30 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM30RGF93> +title=RGF93 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM30SW84> +title=World Geodetic System 1984 UTM fuseau 30 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM30W72> +title=World Geodetic System 1972 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM30W84> +title=World Geodetic System 1984 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM31> +title=European Datum 1950 UTM fuseau 31 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM31RGF93> +title=RGF93 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM31SW84> +title=World Geodetic System 1984 UTM fuseau 31 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM31W72> +title=World Geodetic System 1972 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM31W84> +title=World Geodetic System 1984 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM32> +title=European Datum 1950 UTM fuseau 32 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM32RGF93> +title=RGF93 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM32SW84> +title=World Geodetic System 1984 UTM fuseau 32 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM32W72> +title=World Geodetic System 1972 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM32W84> +title=World Geodetic System 1984 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM33SW84> +title=World Geodetic System 1984 UTM fuseau 33 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM33W84> +title=World Geodetic System 1984 UTM fuseau 33 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM34SW84> +title=World Geodetic System 1984 UTM fuseau 34 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM34W84> +title=World Geodetic System 1984 UTM fuseau 34 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM35SW84> +title=World Geodetic System 1984 UTM fuseau 35 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM35W84> +title=World Geodetic System 1984 UTM fuseau 35 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM36SW84> +title=World Geodetic System 1984 UTM fuseau 36 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM36W84> +title=World Geodetic System 1984 UTM fuseau 36 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM37SW84> +title=World Geodetic System 1984 UTM fuseau 37 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM37W84> +title=World Geodetic System 1984 UTM fuseau 37 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM38SW84> +title=World Geodetic System 1984 UTM fuseau 38 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM38W84> +title=World Geodetic System 1984 UTM fuseau 38 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM39SW84> +title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM39W84> +title=World Geodetic System 1984 UTM fuseau 39 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM40SW84> +title=World Geodetic System 1984 UTM fuseau 40 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM40W84> +title=World Geodetic System 1984 UTM fuseau 40 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM41SW84> +title=World Geodetic System 1984 UTM fuseau 41 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM41W84> +title=World Geodetic System 1984 UTM fuseau 41 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM42SW84> +title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM42W84> +title=World Geodetic System 1984 UTM fuseau 42 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM43SW84> +title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM43W84> +title=World Geodetic System 1984 UTM fuseau 43 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM44SW84> +title=World Geodetic System 1984 UTM fuseau 44 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM44W84> +title=World Geodetic System 1984 UTM fuseau 44 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM45SW84> +title=World Geodetic System 1984 UTM fuseau 45 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM45W84> +title=World Geodetic System 1984 UTM fuseau 45 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM46SW84> +title=World Geodetic System 1984 UTM fuseau 46 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM46W84> +title=World Geodetic System 1984 UTM fuseau 46 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM47SW84> +title=World Geodetic System 1984 UTM fuseau 47 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM47W84> +title=World Geodetic System 1984 UTM fuseau 47 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM48SW84> +title=World Geodetic System 1984 UTM fuseau 48 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM48W84> +title=World Geodetic System 1984 UTM fuseau 48 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM49SW84> +title=World Geodetic System 1984 UTM fuseau 49 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM49W84> +title=World Geodetic System 1984 UTM fuseau 49 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM50SW84> +title=World Geodetic System 1984 UTM fuseau 50 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM50W84> +title=World Geodetic System 1984 UTM fuseau 50 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM51SW84> +title=World Geodetic System 1984 UTM fuseau 51 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM51W84> +title=World Geodetic System 1984 UTM fuseau 51 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM52SW84> +title=World Geodetic System 1984 UTM fuseau 52 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM52W84> +title=World Geodetic System 1984 UTM fuseau 52 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM53SW84> +title=World Geodetic System 1984 UTM fuseau 53 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM53W84> +title=World Geodetic System 1984 UTM fuseau 53 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM54SW84> +title=World Geodetic System 1984 UTM fuseau 54 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM54W84> +title=World Geodetic System 1984 UTM fuseau 54 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM55SW84> +title=World Geodetic System 1984 UTM fuseau 55 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM55W84> +title=World Geodetic System 1984 UTM fuseau 55 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM56SW84> +title=World Geodetic System 1984 UTM fuseau 56 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM56W84> +title=World Geodetic System 1984 UTM fuseau 56 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM57SW84> +title=World Geodetic System 1984 UTM fuseau 57 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM57W84> +title=World Geodetic System 1984 UTM fuseau 57 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM58SW84> +title=World Geodetic System 1984 UTM fuseau 58 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM58W84> +title=World Geodetic System 1984 UTM fuseau 58 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM59SW84> +title=World Geodetic System 1984 UTM fuseau 59 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM59W84> +title=World Geodetic System 1984 UTM fuseau 59 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -<UTM60SW84> +title=World Geodetic System 1984 UTM fuseau 60 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> -<UTM60W84> +title=World Geodetic System 1984 UTM fuseau 60 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> -# W [VAITAPEUTM5S] -# W [WALL76UTM1S] -<WALL78UTM1S> +title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> diff --git a/src/3rdparty/proj/proj_data/epsg b/src/3rdparty/proj/proj_data/epsg deleted file mode 100644 index fbb2c9a8..00000000 --- a/src/3rdparty/proj/proj_data/epsg +++ /dev/null @@ -1,7631 +0,0 @@ -# HD1909 -<3819> +proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs <> -# TWD67 -<3821> +proj=longlat +ellps=aust_SA +no_defs <> -# TWD97 -<3824> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# IGRS -<3889> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# MGI 1901 -<3906> +proj=longlat +ellps=bessel +no_defs <> -# Unknown datum based upon the Airy 1830 ellipsoid -<4001> +proj=longlat +ellps=airy +no_defs <> -# Unknown datum based upon the Airy Modified 1849 ellipsoid -<4002> +proj=longlat +ellps=mod_airy +no_defs <> -# Unknown datum based upon the Australian National Spheroid -<4003> +proj=longlat +ellps=aust_SA +no_defs <> -# Unknown datum based upon the Bessel 1841 ellipsoid -<4004> +proj=longlat +ellps=bessel +no_defs <> -# Unknown datum based upon the Bessel Modified ellipsoid -<4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs <> -# Unknown datum based upon the Bessel Namibia ellipsoid -<4006> +proj=longlat +ellps=bess_nam +no_defs <> -# Unknown datum based upon the Clarke 1858 ellipsoid -<4007> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> -# Unknown datum based upon the Clarke 1866 ellipsoid -<4008> +proj=longlat +ellps=clrk66 +no_defs <> -# Unknown datum based upon the Clarke 1866 Michigan ellipsoid -<4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> -# Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid -<4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs <> -# Unknown datum based upon the Clarke 1880 (IGN) ellipsoid -<4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Unknown datum based upon the Clarke 1880 (RGS) ellipsoid -<4012> +proj=longlat +ellps=clrk80 +no_defs <> -# Unknown datum based upon the Clarke 1880 (Arc) ellipsoid -<4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> -# Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid -<4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs <> -# Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid -<4015> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> -# Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid -<4016> +proj=longlat +ellps=evrstSS +no_defs <> -# Unknown datum based upon the Everest 1830 Modified ellipsoid -<4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs <> -# Unknown datum based upon the GRS 1980 ellipsoid -<4019> +proj=longlat +ellps=GRS80 +no_defs <> -# Unknown datum based upon the Helmert 1906 ellipsoid -<4020> +proj=longlat +ellps=helmert +no_defs <> -# Unknown datum based upon the Indonesian National Spheroid -<4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> -# Unknown datum based upon the International 1924 ellipsoid -<4022> +proj=longlat +ellps=intl +no_defs <> -# MOLDREF99 -<4023> +proj=longlat +ellps=GRS80 +no_defs <> -# Unknown datum based upon the Krassowsky 1940 ellipsoid -<4024> +proj=longlat +ellps=krass +no_defs <> -# Unknown datum based upon the NWL 9D ellipsoid -<4025> +proj=longlat +ellps=WGS66 +no_defs <> -# Unknown datum based upon the Plessis 1817 ellipsoid -<4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs <> -# Unknown datum based upon the Struve 1860 ellipsoid -<4028> +proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs <> -# Unknown datum based upon the War Office ellipsoid -<4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> -# Unknown datum based upon the WGS 84 ellipsoid -<4030> +proj=longlat +ellps=WGS84 +no_defs <> -# Unknown datum based upon the GEM 10C ellipsoid -<4031> +proj=longlat +ellps=WGS84 +no_defs <> -# Unknown datum based upon the OSU86F ellipsoid -<4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs <> -# Unknown datum based upon the OSU91A ellipsoid -<4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs <> -# Unknown datum based upon the Clarke 1880 ellipsoid -<4034> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> -# Unknown datum based upon the Authalic Sphere -<4035> +proj=longlat +a=6371000 +b=6371000 +no_defs <> -# Unknown datum based upon the GRS 1967 ellipsoid -<4036> +proj=longlat +ellps=GRS67 +no_defs <> -# Unknown datum based upon the Average Terrestrial System 1977 ellipsoid -<4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> -# Unknown datum based upon the Everest (1830 Definition) ellipsoid -<4042> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> -# Unknown datum based upon the WGS 72 ellipsoid -<4043> +proj=longlat +ellps=WGS72 +no_defs <> -# Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid -<4044> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> -# Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid -<4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs <> -# RGRDC 2005 -<4046> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Unspecified datum based upon the GRS 1980 Authalic Sphere -<4047> +proj=longlat +a=6371007 +b=6371007 +no_defs <> -# Unspecified datum based upon the Clarke 1866 Authalic Sphere -<4052> +proj=longlat +a=6370997 +b=6370997 +no_defs <> -# Unspecified datum based upon the International 1924 Authalic Sphere -<4053> +proj=longlat +a=6371228 +b=6371228 +no_defs <> -# Unspecified datum based upon the Hughes 1980 ellipsoid -<4054> +proj=longlat +a=6378273 +b=6356889.449 +no_defs <> -# Popular Visualisation CRS -<4055> +proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# SREF98 -<4075> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# REGCAN95 -<4081> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Greek -<4120> +proj=longlat +ellps=bessel +no_defs <> -# GGRS87 -<4121> +proj=longlat +ellps=GRS80 +datum=GGRS87 +no_defs <> -# ATS77 -<4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> -# KKJ -<4123> +proj=longlat +ellps=intl +no_defs <> -# RT90 -<4124> +proj=longlat +ellps=bessel +no_defs <> -# Samboja -<4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs <> -# LKS94 (ETRS89) -<4126> +proj=longlat +ellps=GRS80 +no_defs <> -# Tete -<4127> +proj=longlat +ellps=clrk66 +no_defs <> -# Madzansua -<4128> +proj=longlat +ellps=clrk66 +no_defs <> -# Observatario -<4129> +proj=longlat +ellps=clrk66 +no_defs <> -# Moznet -<4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs <> -# Indian 1960 -<4131> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> -# FD58 -<4132> +proj=longlat +ellps=clrk80 +no_defs <> -# EST92 -<4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs <> -# PSD93 -<4134> +proj=longlat +ellps=clrk80 +no_defs <> -# Old Hawaiian -<4135> +proj=longlat +ellps=clrk66 +no_defs <> -# St. Lawrence Island -<4136> +proj=longlat +ellps=clrk66 +no_defs <> -# St. Paul Island -<4137> +proj=longlat +ellps=clrk66 +no_defs <> -# St. George Island -<4138> +proj=longlat +ellps=clrk66 +no_defs <> -# Puerto Rico -<4139> +proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs <> -# NAD83(CSRS98) -<4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Israel -<4141> +proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs <> -# Locodjo 1965 -<4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs <> -# Abidjan 1987 -<4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs <> -# Kalianpur 1937 -<4144> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> -# Kalianpur 1962 -<4145> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> -# Kalianpur 1975 -<4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs <> -# Hanoi 1972 -<4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs <> -# Hartebeesthoek94 -<4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# CH1903 -<4149> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> -# CH1903+ -<4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> -# CHTRF95 -<4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# NAD83(HARN) -<4152> +proj=longlat +ellps=GRS80 +no_defs <> -# Rassadiran -<4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs <> -# ED50(ED77) -<4154> +proj=longlat +ellps=intl +no_defs <> -# Dabola 1981 -<4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs <> -# S-JTSK -<4156> +proj=longlat +ellps=bessel +no_defs <> -# Mount Dillon -<4157> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> -# Naparima 1955 -<4158> +proj=longlat +ellps=intl +no_defs <> -# ELD79 -<4159> +proj=longlat +ellps=intl +no_defs <> -# Chos Malal 1914 -<4160> +proj=longlat +ellps=intl +no_defs <> -# Pampa del Castillo -<4161> +proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs <> -# Korean 1985 -<4162> +proj=longlat +ellps=bessel +no_defs <> -# Yemen NGN96 -<4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# South Yemen -<4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs <> -# Bissau -<4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs <> -# Korean 1995 -<4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# NZGD2000 -<4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Accra -<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> -# American Samoa 1962 -<4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs <> -# SIRGAS 1995 -<4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# RGF93 -<4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# POSGAR -<4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# IRENET95 -<4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Sierra Leone 1924 -<4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> -# Sierra Leone 1968 -<4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs <> -# Australian Antarctic -<4176> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Pulkovo 1942(83) -<4178> +proj=longlat +ellps=krass +no_defs <> -# Pulkovo 1942(58) -<4179> +proj=longlat +ellps=krass +no_defs <> -# EST97 -<4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Luxembourg 1930 -<4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs <> -# Azores Occidental 1939 -<4182> +proj=longlat +ellps=intl +no_defs <> -# Azores Central 1948 -<4183> +proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs <> -# Azores Oriental 1940 -<4184> +proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs <> -# Madeira 1936 -<4185> +proj=longlat +ellps=intl +no_defs <> -# OSNI 1952 -<4188> +proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <> -# REGVEN -<4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# POSGAR 98 -<4190> +proj=longlat +ellps=GRS80 +no_defs <> -# Albanian 1987 -<4191> +proj=longlat +ellps=krass +no_defs <> -# Douala 1948 -<4192> +proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs <> -# Manoca 1962 -<4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> -# Qornoq 1927 -<4194> +proj=longlat +ellps=intl +no_defs <> -# Scoresbysund 1952 -<4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs <> -# Ammassalik 1958 -<4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs <> -# Garoua -<4197> +proj=longlat +ellps=clrk80 +no_defs <> -# Kousseri -<4198> +proj=longlat +ellps=clrk80 +no_defs <> -# Egypt 1930 -<4199> +proj=longlat +ellps=intl +no_defs <> -# Pulkovo 1995 -<4200> +proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs <> -# Adindan -<4201> +proj=longlat +ellps=clrk80 +no_defs <> -# AGD66 -<4202> +proj=longlat +ellps=aust_SA +no_defs <> -# AGD84 -<4203> +proj=longlat +ellps=aust_SA +no_defs <> -# Ain el Abd -<4204> +proj=longlat +ellps=intl +no_defs <> -# Afgooye -<4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs <> -# Agadez -<4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Lisbon -<4207> +proj=longlat +ellps=intl +no_defs <> -# Aratu -<4208> +proj=longlat +ellps=intl +no_defs <> -# Arc 1950 -<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> -# Arc 1960 -<4210> +proj=longlat +ellps=clrk80 +no_defs <> -# Batavia -<4211> +proj=longlat +ellps=bessel +no_defs <> -# Barbados 1938 -<4212> +proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs <> -# Beduaram -<4213> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs <> -# Beijing 1954 -<4214> +proj=longlat +ellps=krass +no_defs <> -# Belge 1950 -<4215> +proj=longlat +ellps=intl +no_defs <> -# Bermuda 1957 -<4216> +proj=longlat +ellps=clrk66 +no_defs <> -# Bogota 1975 -<4218> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs <> -# Bukit Rimpah -<4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs <> -# Camacupa -<4220> +proj=longlat +ellps=clrk80 +no_defs <> -# Campo Inchauspe -<4221> +proj=longlat +ellps=intl +no_defs <> -# Cape -<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> -# Carthage -<4223> +proj=longlat +a=6378249.2 +b=6356515 +datum=carthage +no_defs <> -# Chua -<4224> +proj=longlat +ellps=intl +no_defs <> -# Corrego Alegre -<4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs <> -# Cote d'Ivoire -<4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Deir ez Zor -<4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Douala -<4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Egypt 1907 -<4229> +proj=longlat +ellps=helmert +no_defs <> -# ED50 -<4230> +proj=longlat +ellps=intl +no_defs <> -# ED87 -<4231> +proj=longlat +ellps=intl +no_defs <> -# Fahud -<4232> +proj=longlat +ellps=clrk80 +no_defs <> -# Gandajika 1970 -<4233> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> -# Garoua -<4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Guyane Francaise -<4235> +proj=longlat +ellps=intl +no_defs <> -# Hu Tzu Shan 1950 -<4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs <> -# HD72 -<4237> +proj=longlat +ellps=GRS67 +no_defs <> -# ID74 -<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> -# Indian 1954 -<4239> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs <> -# Indian 1975 -<4240> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> -# Jamaica 1875 -<4241> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> -# JAD69 -<4242> +proj=longlat +ellps=clrk66 +no_defs <> -# Kalianpur 1880 -<4243> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> -# Kandawala -<4244> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs <> -# Kertau 1968 -<4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs <> -# KOC -<4246> +proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs <> -# La Canoa -<4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs <> -# PSAD56 -<4248> +proj=longlat +ellps=intl +no_defs <> -# Lake -<4249> +proj=longlat +ellps=intl +no_defs <> -# Leigon -<4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs <> -# Liberia 1964 -<4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs <> -# Lome -<4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Luzon 1911 -<4253> +proj=longlat +ellps=clrk66 +no_defs <> -# Hito XVIII 1963 -<4254> +proj=longlat +ellps=intl +no_defs <> -# Herat North -<4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs <> -# Mahe 1971 -<4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs <> -# Makassar -<4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs <> -# ETRS89 -<4258> +proj=longlat +ellps=GRS80 +no_defs <> -# Malongo 1987 -<4259> +proj=longlat +ellps=intl +no_defs <> -# Manoca -<4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> -# Merchich -<4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs <> -# Massawa -<4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs <> -# Minna -<4263> +proj=longlat +ellps=clrk80 +no_defs <> -# Mhast -<4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs <> -# Monte Mario -<4265> +proj=longlat +ellps=intl +no_defs <> -# M'poraloko -<4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# NAD27 -<4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs <> -# NAD27 Michigan -<4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> -# NAD83 -<4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs <> -# Nahrwan 1967 -<4270> +proj=longlat +ellps=clrk80 +no_defs <> -# Naparima 1972 -<4271> +proj=longlat +ellps=intl +no_defs <> -# NZGD49 -<4272> +proj=longlat +ellps=intl +datum=nzgd49 +no_defs <> -# NGO 1948 -<4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs <> -# Datum 73 -<4274> +proj=longlat +ellps=intl +no_defs <> -# NTF -<4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs <> -# NSWC 9Z-2 -<4276> +proj=longlat +ellps=WGS66 +no_defs <> -# OSGB 1936 -<4277> +proj=longlat +ellps=airy +datum=OSGB36 +no_defs <> -# OSGB70 -<4278> +proj=longlat +ellps=airy +no_defs <> -# OS(SN)80 -<4279> +proj=longlat +ellps=airy +no_defs <> -# Padang -<4280> +proj=longlat +ellps=bessel +no_defs <> -# Palestine 1923 -<4281> +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs <> -# Pointe Noire -<4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# GDA94 -<4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Pulkovo 1942 -<4284> +proj=longlat +ellps=krass +no_defs <> -# Qatar 1974 -<4285> +proj=longlat +ellps=intl +no_defs <> -# Qatar 1948 -<4286> +proj=longlat +ellps=helmert +no_defs <> -# Qornoq -<4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs <> -# Loma Quintana -<4288> +proj=longlat +ellps=intl +no_defs <> -# Amersfoort -<4289> +proj=longlat +ellps=bessel +no_defs <> -# SAD69 -<4291> +proj=longlat +ellps=GRS67 +no_defs <> -# Sapper Hill 1943 -<4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs <> -# Schwarzeck -<4293> +proj=longlat +ellps=bess_nam +no_defs <> -# Segora -<4294> +proj=longlat +ellps=bessel +no_defs <> -# Serindung -<4295> +proj=longlat +ellps=bessel +no_defs <> -# Sudan -<4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Tananarive -<4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs <> -# Timbalai 1948 -<4298> +proj=longlat +ellps=evrstSS +no_defs <> -# TM65 -<4299> +proj=longlat +ellps=mod_airy +datum=ire65 +no_defs <> -# TM75 -<4300> +proj=longlat +ellps=mod_airy +no_defs <> -# Tokyo -<4301> +proj=longlat +ellps=bessel +no_defs <> -# Trinidad 1903 -<4302> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> -# TC(1948) -<4303> +proj=longlat +ellps=helmert +no_defs <> -# Voirol 1875 -<4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs <> -# Bern 1938 -<4306> +proj=longlat +ellps=bessel +no_defs <> -# Nord Sahara 1959 -<4307> +proj=longlat +ellps=clrk80 +no_defs <> -# RT38 -<4308> +proj=longlat +ellps=bessel +no_defs <> -# Yacare -<4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs <> -# Yoff -<4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Zanderij -<4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs <> -# MGI -<4312> +proj=longlat +ellps=bessel +datum=hermannskogel +no_defs <> -# Belge 1972 -<4313> +proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs <> -# DHDN -<4314> +proj=longlat +ellps=bessel +datum=potsdam +no_defs <> -# Conakry 1905 -<4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs <> -# Dealul Piscului 1930 -<4316> +proj=longlat +ellps=intl +no_defs <> -# Dealul Piscului 1970 -<4317> +proj=longlat +ellps=krass +no_defs <> -# NGN -<4318> +proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs <> -# KUDAMS -<4319> +proj=longlat +ellps=GRS80 +no_defs <> -# WGS 72 -<4322> +proj=longlat +ellps=WGS72 +no_defs <> -# WGS 72BE -<4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs <> -# WGS 84 -<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs <> -# Anguilla 1957 -<4600> +proj=longlat +ellps=clrk80 +no_defs <> -# Antigua 1943 -<4601> +proj=longlat +ellps=clrk80 +no_defs <> -# Dominica 1945 -<4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs <> -# Grenada 1953 -<4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs <> -# Montserrat 1958 -<4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs <> -# St. Kitts 1955 -<4605> +proj=longlat +ellps=clrk80 +no_defs <> -# St. Lucia 1955 -<4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs <> -# St. Vincent 1945 -<4607> +proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs <> -# NAD27(76) -<4608> +proj=longlat +ellps=clrk66 +no_defs <> -# NAD27(CGQ77) -<4609> +proj=longlat +ellps=clrk66 +no_defs <> -# Xian 1980 -<4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs <> -# Hong Kong 1980 -<4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs <> -# JGD2000 -<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Segara -<4613> +proj=longlat +ellps=bessel +no_defs <> -# QND95 -<4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs <> -# Porto Santo -<4615> +proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs <> -# Selvagem Grande -<4616> +proj=longlat +ellps=intl +no_defs <> -# NAD83(CSRS) -<4617> +proj=longlat +ellps=GRS80 +no_defs <> -# SAD69 -<4618> +proj=longlat +ellps=aust_SA +no_defs <> -# SWEREF99 -<4619> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Point 58 -<4620> +proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs <> -# Fort Marigot -<4621> +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs <> -# Guadeloupe 1948 -<4622> +proj=longlat +ellps=intl +no_defs <> -# CSG67 -<4623> +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs <> -# RGFG95 -<4624> +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs <> -# Martinique 1938 -<4625> +proj=longlat +ellps=intl +no_defs <> -# Reunion 1947 -<4626> +proj=longlat +ellps=intl +no_defs <> -# RGR92 -<4627> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Tahiti 52 -<4628> +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs <> -# Tahaa 54 -<4629> +proj=longlat +ellps=intl +no_defs <> -# IGN72 Nuku Hiva -<4630> +proj=longlat +ellps=intl +no_defs <> -# K0 1949 -<4631> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> -# Combani 1950 -<4632> +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs <> -# IGN56 Lifou -<4633> +proj=longlat +ellps=intl +no_defs <> -# IGN72 Grand Terre -<4634> +proj=longlat +ellps=intl +no_defs <> -# ST87 Ouvea -<4635> +proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs <> -# Petrels 1972 -<4636> +proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs <> -# Perroud 1950 -<4637> +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs <> -# Saint Pierre et Miquelon 1950 -<4638> +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs <> -# MOP78 -<4639> +proj=longlat +ellps=intl +no_defs <> -# RRAF 1991 -<4640> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# IGN53 Mare -<4641> +proj=longlat +ellps=intl +no_defs <> -# ST84 Ile des Pins -<4642> +proj=longlat +ellps=intl +no_defs <> -# ST71 Belep -<4643> +proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs <> -# NEA74 Noumea -<4644> +proj=longlat +ellps=intl +no_defs <> -# RGNC 1991 -<4645> +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Grand Comoros -<4646> +proj=longlat +ellps=intl +no_defs <> -# Reykjavik 1900 -<4657> +proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs <> -# Hjorsey 1955 -<4658> +proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs <> -# ISN93 -<4659> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Helle 1954 -<4660> +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs <> -# LKS92 -<4661> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# IGN72 Grande Terre -<4662> +proj=longlat +ellps=intl +no_defs <> -# Porto Santo 1995 -<4663> +proj=longlat +ellps=intl +no_defs <> -# Azores Oriental 1995 -<4664> +proj=longlat +ellps=intl +no_defs <> -# Azores Central 1995 -<4665> +proj=longlat +ellps=intl +no_defs <> -# Lisbon 1890 -<4666> +proj=longlat +ellps=bessel +no_defs <> -# IKBD-92 -<4667> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# ED79 -<4668> +proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs <> -# LKS94 -<4669> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# IGM95 -<4670> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Voirol 1879 -<4671> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> -# Chatham Islands 1971 -<4672> +proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs <> -# Chatham Islands 1979 -<4673> +proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs <> -# SIRGAS 2000 -<4674> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Guam 1963 -<4675> +proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs <> -# Vientiane 1982 -<4676> +proj=longlat +ellps=krass +no_defs <> -# Lao 1993 -<4677> +proj=longlat +ellps=krass +no_defs <> -# Lao 1997 -<4678> +proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs <> -# Jouik 1961 -<4679> +proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs <> -# Nouakchott 1965 -<4680> +proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs <> -# Mauritania 1999 -<4681> +proj=longlat +ellps=clrk80 +no_defs <> -# Gulshan 303 -<4682> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> -# PRS92 -<4683> +proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs <> -# Gan 1970 -<4684> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> -# Gandajika -<4685> +proj=longlat +ellps=intl +no_defs <> -# MAGNA-SIRGAS -<4686> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# RGPF -<4687> +proj=longlat +ellps=GRS80 +no_defs <> -# Fatu Iva 72 -<4688> +proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs <> -# IGN63 Hiva Oa -<4689> +proj=longlat +ellps=intl +no_defs <> -# Tahiti 79 -<4690> +proj=longlat +ellps=intl +no_defs <> -# Moorea 87 -<4691> +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs <> -# Maupiti 83 -<4692> +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs <> -# Nakhl-e Ghanem -<4693> +proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs <> -# POSGAR 94 -<4694> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Katanga 1955 -<4695> +proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs <> -# Kasai 1953 -<4696> +proj=longlat +ellps=clrk80 +no_defs <> -# IGC 1962 6th Parallel South -<4697> +proj=longlat +ellps=clrk80 +no_defs <> -# IGN 1962 Kerguelen -<4698> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> -# Le Pouce 1934 -<4699> +proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs <> -# IGN Astro 1960 -<4700> +proj=longlat +ellps=clrk80 +no_defs <> -# IGCB 1955 -<4701> +proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs <> -# Mauritania 1999 -<4702> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Mhast 1951 -<4703> +proj=longlat +ellps=clrk80 +no_defs <> -# Mhast (onshore) -<4704> +proj=longlat +ellps=intl +no_defs <> -# Mhast (offshore) -<4705> +proj=longlat +ellps=intl +no_defs <> -# Egypt Gulf of Suez S-650 TL -<4706> +proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs <> -# Tern Island 1961 -<4707> +proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs <> -# Cocos Islands 1965 -<4708> +proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs <> -# Iwo Jima 1945 -<4709> +proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs <> -# St. Helena 1971 -<4710> +proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs <> -# Marcus Island 1952 -<4711> +proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs <> -# Ascension Island 1958 -<4712> +proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs <> -# Ayabelle Lighthouse -<4713> +proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs <> -# Bellevue -<4714> +proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs <> -# Camp Area Astro -<4715> +proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs <> -# Phoenix Islands 1966 -<4716> +proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs <> -# Cape Canaveral -<4717> +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs <> -# Solomon 1968 -<4718> +proj=longlat +ellps=intl +no_defs <> -# Easter Island 1967 -<4719> +proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs <> -# Fiji 1986 -<4720> +proj=longlat +ellps=WGS72 +no_defs <> -# Fiji 1956 -<4721> +proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs <> -# South Georgia 1968 -<4722> +proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs <> -# Grand Cayman 1959 -<4723> +proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs <> -# Diego Garcia 1969 -<4724> +proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs <> -# Johnston Island 1961 -<4725> +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs <> -# Little Cayman 1961 -<4726> +proj=longlat +ellps=clrk66 +no_defs <> -# Midway 1961 -<4727> +proj=longlat +ellps=intl +no_defs <> -# Pico de las Nieves 1984 -<4728> +proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs <> -# Pitcairn 1967 -<4729> +proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs <> -# Santo 1965 -<4730> +proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs <> -# Viti Levu 1916 -<4731> +proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs <> -# Marshall Islands 1960 -<4732> +proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs <> -# Wake Island 1952 -<4733> +proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs <> -# Tristan 1968 -<4734> +proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs <> -# Kusaie 1951 -<4735> +proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs <> -# Deception Island -<4736> +proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs <> -# Korea 2000 -<4737> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Hong Kong 1963 -<4738> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> -# Hong Kong 1963(67) -<4739> +proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs <> -# PZ-90 -<4740> +proj=longlat +a=6378136 +b=6356751.361745712 +no_defs <> -# FD54 -<4741> +proj=longlat +ellps=intl +no_defs <> -# GDM2000 -<4742> +proj=longlat +ellps=GRS80 +no_defs <> -# Karbala 1979 -<4743> +proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs <> -# Nahrwan 1934 -<4744> +proj=longlat +ellps=clrk80 +no_defs <> -# RD/83 -<4745> +proj=longlat +ellps=bessel +no_defs <> -# PD/83 -<4746> +proj=longlat +ellps=bessel +no_defs <> -# GR96 -<4747> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Vanua Levu 1915 -<4748> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> -# RGNC91-93 -<4749> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# ST87 Ouvea -<4750> +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs <> -# Kertau (RSO) -<4751> +proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs <> -# Viti Levu 1912 -<4752> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> -# fk89 -<4753> +proj=longlat +ellps=intl +no_defs <> -# LGD2006 -<4754> +proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs <> -# DGN95 -<4755> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# VN-2000 -<4756> +proj=longlat +ellps=WGS84 +no_defs <> -# SVY21 -<4757> +proj=longlat +ellps=WGS84 +no_defs <> -# JAD2001 -<4758> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# NAD83(NSRS2007) -<4759> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# WGS 66 -<4760> +proj=longlat +ellps=WGS66 +no_defs <> -# HTRS96 -<4761> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# BDA2000 -<4762> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Pitcairn 2006 -<4763> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# RSRGD2000 -<4764> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Slovenia 1996 -<4765> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> -# Bern 1898 (Bern) -<4801> +proj=longlat +ellps=bessel +pm=bern +no_defs <> -# Bogota 1975 (Bogota) -<4802> +proj=longlat +ellps=intl +pm=bogota +no_defs <> -# Lisbon (Lisbon) -<4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs <> -# Makassar (Jakarta) -<4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs <> -# MGI (Ferro) -<4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> -# Monte Mario (Rome) -<4806> +proj=longlat +ellps=intl +pm=rome +no_defs <> -# NTF (Paris) -<4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs <> -# Padang (Jakarta) -<4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> -# Belge 1950 (Brussels) -<4809> +proj=longlat +ellps=intl +pm=brussels +no_defs <> -# Tananarive (Paris) -<4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs <> -# Voirol 1875 (Paris) -<4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs <> -# Batavia (Jakarta) -<4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> -# RT38 (Stockholm) -<4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs <> -# Greek (Athens) -<4815> +proj=longlat +ellps=bessel +pm=athens +no_defs <> -# Carthage (Paris) -<4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> -# NGO 1948 (Oslo) -<4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs <> -# S-JTSK (Ferro) -<4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> -# Nord Sahara 1959 (Paris) -<4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs <> -# Segara (Jakarta) -<4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> -# Voirol 1879 (Paris) -<4821> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> -# unnamed ellipse -<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs <> -# NDG (Paris) -<4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs <> -# Madrid 1870 (Madrid) -<4903> +proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs <> -# Lisbon 1890 (Lisbon) -<4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs <> -# Anguilla 1957 / British West Indies Grid -<2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> -# Antigua 1943 / British West Indies Grid -<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> -# Dominica 1945 / British West Indies Grid -<2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs <> -# Grenada 1953 / British West Indies Grid -<2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs <> -# Montserrat 1958 / British West Indies Grid -<2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs <> -# St. Kitts 1955 / British West Indies Grid -<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> -# St. Lucia 1955 / British West Indies Grid -<2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs <> -# St. Vincent 45 / British West Indies Grid -<2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 2 -<2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 3 -<2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 4 -<2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 5 -<2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 6 -<2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 7 -<2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 8 -<2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 9 -<2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 10 -<2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 8 -<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 9 -<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 10 -<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 11 -<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 12 -<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 13 -<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 14 -<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 15 -<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 16 -<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / MTM zone 17 -<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / UTM zone 15N -<2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / UTM zone 16N -<2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / UTM zone 17N -<2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> -# NAD27(76) / UTM zone 18N -<2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / UTM zone 17N -<2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / UTM zone 18N -<2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / UTM zone 19N -<2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / UTM zone 20N -<2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> -# NAD27(CGQ77) / UTM zone 21N -<2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs <> -# NAD83(CSRS98) / New Brunswick Stereo (deprecated) -<2036> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 19N (deprecated) -<2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 20N (deprecated) -<2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Israel / Israeli TM Grid -<2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs <> -# Locodjo 1965 / UTM zone 30N -<2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> -# Abidjan 1987 / UTM zone 30N -<2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> -# Locodjo 1965 / UTM zone 29N -<2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> -# Abidjan 1987 / UTM zone 29N -<2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> -# Hanoi 1972 / Gauss-Kruger zone 18 -<2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> -# Hanoi 1972 / Gauss-Kruger zone 19 -<2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> -# Hartebeesthoek94 / Lo15 -# Unable to translate coordinate system EPSG:2046 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo17 -# Unable to translate coordinate system EPSG:2047 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo19 -# Unable to translate coordinate system EPSG:2048 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo21 -# Unable to translate coordinate system EPSG:2049 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo23 -# Unable to translate coordinate system EPSG:2050 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo25 -# Unable to translate coordinate system EPSG:2051 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo27 -# Unable to translate coordinate system EPSG:2052 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo29 -# Unable to translate coordinate system EPSG:2053 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo31 -# Unable to translate coordinate system EPSG:2054 into PROJ.4 format. -# -# Hartebeesthoek94 / Lo33 -# Unable to translate coordinate system EPSG:2055 into PROJ.4 format. -# -# CH1903+ / LV95 -<2056> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> -# Rassadiran / Nakhl e Taqi -<2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs <> -# ED50(ED77) / UTM zone 38N -<2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> -# ED50(ED77) / UTM zone 39N -<2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> -# ED50(ED77) / UTM zone 40N -<2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> -# ED50(ED77) / UTM zone 41N -<2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs <> -# Madrid 1870 (Madrid) / Spain -<2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs <> -# Dabola 1981 / UTM zone 28N (deprecated) -<2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> -# Dabola 1981 / UTM zone 29N (deprecated) -<2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> -# S-JTSK (Ferro) / Krovak -<2065> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# Mount Dillon / Tobago Grid -<2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> -# Naparima 1955 / UTM zone 20N -<2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 5 -<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 6 -<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 7 -<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 8 -<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 9 -<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 10 -<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 11 -<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 12 -<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / Libya zone 13 -<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ELD79 / UTM zone 32N -<2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> -# ELD79 / UTM zone 33N -<2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> -# ELD79 / UTM zone 34N -<2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> -# ELD79 / UTM zone 35N -<2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> -# Chos Malal 1914 / Argentina zone 2 -<2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Pampa del Castillo / Argentina zone 2 -<2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs <> -# Hito XVIII 1963 / Argentina zone 2 -<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Hito XVIII 1963 / UTM zone 19S -<2084> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> -# NAD27 / Cuba Norte (deprecated) -<2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Cuba Sur (deprecated) -<2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# ELD79 / TM 12 NE -<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Carthage / TM 11 NE -<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> -# Yemen NGN96 / UTM zone 38N -<2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Yemen NGN96 / UTM zone 39N -<2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# South Yemen / Gauss Kruger zone 8 (deprecated) -<2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> -# South Yemen / Gauss Kruger zone 9 (deprecated) -<2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> -# Hanoi 1972 / GK 106 NE -<2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> -# WGS 72BE / TM 106 NE -<2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# Bissau / UTM zone 28N -<2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs <> -# Korean 1985 / Korea East Belt -<2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> -# Korean 1985 / Korea Central Belt -<2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> -# Korean 1985 / Korea West Belt -<2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> -# Qatar 1948 / Qatar Grid -<2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs <> -# GGRS87 / Greek Grid -<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=GGRS87 +units=m +no_defs <> -# Lake / Maracaibo Grid M1 -<2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs <> -# Lake / Maracaibo Grid -<2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs <> -# Lake / Maracaibo Grid M3 -<2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs <> -# Lake / Maracaibo La Rosa Grid -<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs <> -# NZGD2000 / Mount Eden 2000 -<2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Bay of Plenty 2000 -<2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Poverty Bay 2000 -<2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Hawkes Bay 2000 -<2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Taranaki 2000 -<2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Tuhirangi 2000 -<2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Wanganui 2000 -<2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Wairarapa 2000 -<2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Wellington 2000 -<2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Collingwood 2000 -<2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Nelson 2000 -<2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Karamea 2000 -<2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Buller 2000 -<2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Grey 2000 -<2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Amuri 2000 -<2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Marlborough 2000 -<2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Hokitika 2000 -<2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Okarito 2000 -<2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Jacksons Bay 2000 -<2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Mount Pleasant 2000 -<2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Gawler 2000 -<2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Timaru 2000 -<2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Lindis Peak 2000 -<2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Mount Nicholas 2000 -<2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Mount York 2000 -<2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Observation Point 2000 -<2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / North Taieri 2000 -<2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Bluff 2000 -<2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / UTM zone 58S -<2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / UTM zone 59S -<2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / UTM zone 60S -<2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Accra / Ghana National Grid -<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> -# Accra / TM 1 NW -<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +units=m +no_defs <> -# NAD27(CGQ77) / Quebec Lambert -<2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# NAD83(CSRS98) / SCoPQ zone 2 (deprecated) -<2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 3 (deprecated) -<2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 4 (deprecated) -<2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 5 (deprecated) -<2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 6 (deprecated) -<2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 7 (deprecated) -<2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 8 (deprecated) -<2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 9 (deprecated) -<2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / MTM zone 10 (deprecated) -<2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 21N (deprecated) -<2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 18N (deprecated) -<2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 17N (deprecated) -<2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 13N (deprecated) -<2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 12N (deprecated) -<2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS98) / UTM zone 11N (deprecated) -<2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / Lambert-93 -<2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# American Samoa 1962 / American Samoa Lambert (deprecated) -<2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(HARN) / UTM zone 59S (deprecated) -<2156> +proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs <> -# IRENET95 / Irish Transverse Mercator -<2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IRENET95 / UTM zone 29N -<2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Sierra Leone 1924 / New Colony Grid -<2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> -# Sierra Leone 1924 / New War Office Grid -<2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> -# Sierra Leone 1968 / UTM zone 28N -<2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> -# Sierra Leone 1968 / UTM zone 29N -<2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> -# unnamed -<2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs <> -# Locodjo 1965 / TM 5 NW -<2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> -# Abidjan 1987 / TM 5 NW -<2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> -# Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated) -<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated) -<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated) -<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Luxembourg 1930 / Gauss -<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs <> -# MGI / Slovenia Grid (deprecated) -<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# Pulkovo 1942(58) / Poland zone I (deprecated) -<2171> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Poland zone II -<2172> +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Poland zone III -<2173> +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Poland zone IV -<2174> +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Poland zone V -<2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +units=m +no_defs <> -# ETRS89 / Poland CS2000 zone 5 -<2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Poland CS2000 zone 6 -<2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Poland CS2000 zone 7 -<2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Poland CS2000 zone 8 -<2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Poland CS92 -<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs <> -# Azores Occidental 1939 / UTM zone 25N -<2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs <> -# Azores Central 1948 / UTM zone 26N -<2189> +proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs <> -# Azores Oriental 1940 / UTM zone 26N -<2190> +proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs <> -# Madeira 1936 / UTM zone 28N (deprecated) -<2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> -# ED50 / France EuroLambert -<2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs <> -# NZGD2000 / New Zealand Transverse Mercator 2000 -<2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# American Samoa 1962 / American Samoa Lambert (deprecated) -<2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(HARN) / UTM zone 2S -<2195> +proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Kp2000 Jutland -<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Kp2000 Zealand -<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Kp2000 Bornholm -<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Albanian 1987 / Gauss Kruger zone 4 (deprecated) -<2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# ATS77 / New Brunswick Stereographic (ATS77) -<2200> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# REGVEN / UTM zone 18N -<2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# REGVEN / UTM zone 19N -<2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# REGVEN / UTM zone 20N -<2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD27 / Tennessee -<2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD83 / Kentucky North -<2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 9 -<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 10 -<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 11 -<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 12 -<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 13 -<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 14 -<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 15 -<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ETRS89 / TM 30 NE -<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Douala 1948 / AOF west (deprecated) -<2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> -# Manoca 1962 / UTM zone 32N -<2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs <> -# Qornoq 1927 / UTM zone 22N -<2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs <> -# Qornoq 1927 / UTM zone 23N -<2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs <> -# Scoresbysund 1952 / Greenland zone 5 east -# Unable to translate coordinate system EPSG:2218 into PROJ.4 format. -# -# ATS77 / UTM zone 19N -<2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# ATS77 / UTM zone 20N -<2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# Scoresbysund 1952 / Greenland zone 6 east -# Unable to translate coordinate system EPSG:2221 into PROJ.4 format. -# -# NAD83 / Arizona East (ft) -<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Arizona Central (ft) -<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Arizona West (ft) -<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / California zone 1 (ftUS) -<2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / California zone 2 (ftUS) -<2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / California zone 3 (ftUS) -<2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / California zone 4 (ftUS) -<2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / California zone 5 (ftUS) -<2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / California zone 6 (ftUS) -<2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Colorado North (ftUS) -<2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Colorado Central (ftUS) -<2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Colorado South (ftUS) -<2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Connecticut (ftUS) -<2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Delaware (ftUS) -<2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Florida East (ftUS) -<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Florida West (ftUS) -<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Florida North (ftUS) -<2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Georgia East (ftUS) -<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Georgia West (ftUS) -<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Idaho East (ftUS) -<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Idaho Central (ftUS) -<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Idaho West (ftUS) -<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Indiana East (ftUS) (deprecated) -<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Indiana West (ftUS) (deprecated) -<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Kentucky North (ftUS) -<2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Kentucky South (ftUS) -<2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Maryland (ftUS) -<2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Massachusetts Mainland (ftUS) -<2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Massachusetts Island (ftUS) -<2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Michigan North (ft) -<2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Michigan Central (ft) -<2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Michigan South (ft) -<2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Mississippi East (ftUS) -<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Mississippi West (ftUS) -<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Montana (ft) -<2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / New Mexico East (ftUS) -<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New Mexico Central (ftUS) -<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New Mexico West (ftUS) -<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New York East (ftUS) -<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New York Central (ftUS) -<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New York West (ftUS) -<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New York Long Island (ftUS) -<2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / North Carolina (ftUS) -<2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / North Dakota North (ft) -<2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / North Dakota South (ft) -<2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Oklahoma North (ftUS) -<2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Oklahoma South (ftUS) -<2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Oregon North (ft) -<2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Oregon South (ft) -<2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Pennsylvania North (ftUS) -<2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Pennsylvania South (ftUS) -<2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / South Carolina (ft) -<2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Tennessee (ftUS) -<2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Texas North (ftUS) -<2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Texas North Central (ftUS) -<2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Texas Central (ftUS) -<2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Texas South Central (ftUS) -<2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Texas South (ftUS) -<2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Utah North (ft) -<2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Utah Central (ft) -<2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Utah South (ft) -<2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83 / Virginia North (ftUS) -<2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Virginia South (ftUS) -<2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Washington North (ftUS) -<2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Washington South (ftUS) -<2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wisconsin North (ftUS) -<2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wisconsin Central (ftUS) -<2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wisconsin South (ftUS) -<2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# ATS77 / Prince Edward Isl. Stereographic (ATS77) -<2290> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) -<2291> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) -<2292> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ATS77 / MTM Nova Scotia zone 4 -<2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# ATS77 / MTM Nova Scotia zone 5 -<2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> -# Ammassalik 1958 / Greenland zone 7 east -# Unable to translate coordinate system EPSG:2296 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 1 east (deprecated) -# Unable to translate coordinate system EPSG:2297 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 2 east (deprecated) -# Unable to translate coordinate system EPSG:2298 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 2 west -# Unable to translate coordinate system EPSG:2299 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 3 east (deprecated) -# Unable to translate coordinate system EPSG:2300 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 3 west -# Unable to translate coordinate system EPSG:2301 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 4 east (deprecated) -# Unable to translate coordinate system EPSG:2302 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 4 west -# Unable to translate coordinate system EPSG:2303 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 5 west -# Unable to translate coordinate system EPSG:2304 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 6 west -# Unable to translate coordinate system EPSG:2305 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 7 west -# Unable to translate coordinate system EPSG:2306 into PROJ.4 format. -# -# Qornoq 1927 / Greenland zone 8 east -# Unable to translate coordinate system EPSG:2307 into PROJ.4 format. -# -# Batavia / TM 109 SE -<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs <> -# WGS 84 / TM 116 SE -<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / TM 132 SE -<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / TM 6 NE -<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# Garoua / UTM zone 33N -<2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> -# Kousseri / UTM zone 33N -<2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> -# Trinidad 1903 / Trinidad Grid (ftCla) -<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> -# Campo Inchauspe / UTM zone 19S -<2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / UTM zone 20S -<2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / ICN Regional -<2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs <> -# Ain el Abd / Aramco Lambert -<2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM27 -<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM30 -<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM33 -<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM36 -<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM39 -<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM42 -<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM45 -<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Hong Kong 1980 Grid System -<2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 13 -<2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 14 -<2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 15 -<2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 16 -<2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 17 -<2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 18 -<2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 19 -<2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 20 -<2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 21 -<2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 22 -<2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger zone 23 -<2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 75E -<2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 81E -<2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 87E -<2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 93E -<2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 99E -<2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 105E -<2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 111E -<2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 117E -<2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 123E -<2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 129E -<2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / Gauss-Kruger CM 135E -<2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 25 -<2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 26 -<2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 27 -<2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 28 -<2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 29 -<2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 30 -<2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 31 -<2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 32 -<2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 33 -<2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 34 -<2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 35 -<2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 36 -<2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 37 -<2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 38 -<2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 39 -<2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 40 -<2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 41 -<2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 42 -<2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 43 -<2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 44 -<2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 45 -<2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 75E -<2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 78E -<2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 81E -<2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 84E -<2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 87E -<2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 90E -<2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 93E -<2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 96E -<2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 99E -<2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 102E -<2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 105E -<2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 108E -<2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 111E -<2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 114E -<2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 117E -<2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 120E -<2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 123E -<2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 126E -<2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 129E -<2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 132E -<2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 135E -<2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> -# KKJ / Finland zone 1 -<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# KKJ / Finland zone 2 -<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# KKJ / Finland Uniform Coordinate System -<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# KKJ / Finland zone 4 -<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# South Yemen / Gauss-Kruger zone 8 -<2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> -# South Yemen / Gauss-Kruger zone 9 -<2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3 -<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4 -<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5 -<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# RT90 2.5 gon W (deprecated) -<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 25 -<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 26 -<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 27 -<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 28 -<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 29 -<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 30 -<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 31 -<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 32 -<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 33 -<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 34 -<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 35 -<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 36 -<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 37 -<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 38 -<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 39 -<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 40 -<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 41 -<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 42 -<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 43 -<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 44 -<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 45 -<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 75E -<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 78E -<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 81E -<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 84E -<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 87E -<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 90E -<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 93E -<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 96E -<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 99E -<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 102E -<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 105E -<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 108E -<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 111E -<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 114E -<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 117E -<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 120E -<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 123E -<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 126E -<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 129E -<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 132E -<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 135E -<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS I -<2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS II -<2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS III -<2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS IV -<2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS V -<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS VI -<2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS VII -<2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS VIII -<2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS IX -<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS X -<2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XI -<2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XII -<2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XIII -<2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XIV -<2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XV -<2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XVI -<2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XVII -<2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XVIII -<2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / Japan Plane Rectangular CS XIX -<2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Albanian 1987 / Gauss-Kruger zone 4 -<2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 21E -<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 27E -<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 33E -<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 39E -<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 45E -<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 51E -<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 57E -<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 63E -<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 69E -<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 75E -<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 81E -<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 87E -<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 93E -<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 99E -<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 105E -<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 111E -<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 117E -<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 123E -<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 129E -<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 135E -<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 141E -<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 147E -<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 153E -<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 159E -<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 165E -<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 171E -<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 177E -<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 177W -<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 171W -<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated) -<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated) -<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 21E -<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 27E -<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 33E -<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 39E -<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 45E -<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 51E -<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 57E -<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 63E -<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 69E -<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 75E -<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 81E -<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 87E -<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 93E -<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 99E -<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 105E -<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 111E -<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 117E -<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 123E -<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 129E -<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 135E -<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 141E -<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 147E -<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 153E -<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 159E -<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 165E -<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 171E -<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 177E -<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 177W -<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 171W -<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 -<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 -<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 -<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 -<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 -<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 -<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 -<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 -<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 -<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 -<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 -<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 -<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 -<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 -<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 -<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 -<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 -<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 -<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 -<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 -<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 -<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 -<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 -<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 -<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 -<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 -<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 -<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Samboja / UTM zone 50S (deprecated) -<2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 -<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 -<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 -<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 -<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 -<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 -<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 -<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 -<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 -<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 -<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 -<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 -<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 -<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 -<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 -<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 -<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 -<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 -<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 -<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 -<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 -<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 -<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 -<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 -<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 -<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 -<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated) -<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 -<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 -<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 -<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 -<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E -<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E -<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E -<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E -<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E -<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E -<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E -<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E -<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E -<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E -<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E -<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E -<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E -<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E -<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E -<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E -<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E -<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E -<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Lietuvos Koordinoei Sistema 1994 (deprecated) -<2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E -<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E -<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E -<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E -<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E -<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E -<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E -<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E -<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E -<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E -<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E -<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E -<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E -<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E -<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E -<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E -<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E -<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E -<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E -<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E -<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E -<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E -<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E -<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E -<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E -<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E -<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E -<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E -<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E -<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E -<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E -<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E -<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E -<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E -<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E -<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E -<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W -<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W -<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W -<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W -<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 -<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 -<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 -<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 -<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 -<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 -<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 -<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 -<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 -<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 -<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 -<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 -<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 -<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 -<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 -<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 -<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 -<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 -<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 -<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 -<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 -<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 -<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 -<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 -<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 -<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 -<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 -<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 -<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 -<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 -<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 -<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 -<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 -<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 -<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 -<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 -<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 -<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 -<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 -<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 -<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 -<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 -<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 -<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 -<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 -<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 -<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 -<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 -<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 -<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 -<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 -<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 -<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 -<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated) -<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 -<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 -<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 -<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 -<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E -<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E -<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E -<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E -<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E -<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E -<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E -<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E -<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E -<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E -<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E -<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E -<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E -<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E -<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E -<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E -<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E -<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E -<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E -<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E -<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E -<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E -<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E -<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E -<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E -<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E -<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E -<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E -<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E -<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E -<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E -<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E -<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E -<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E -<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E -<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E -<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E -<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Tete / UTM zone 36S -<2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs <> -# Tete / UTM zone 37S -<2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E -<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E -<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E -<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E -<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E -<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E -<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E -<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E -<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E -<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E -<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E -<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E -<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E -<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E -<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E -<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E -<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E -<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W -<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W -<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W -<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W -<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# NAD83(HARN) / Alabama East -<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Alabama West -<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Arizona East -<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Arizona Central -<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Arizona West -<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Arkansas North -<2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Arkansas South -<2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / California zone 1 -<2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / California zone 2 -<2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / California zone 3 -<2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / California zone 4 -<2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / California zone 5 -<2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / California zone 6 -<2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Colorado North -<2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Colorado Central -<2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Colorado South -<2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Connecticut -<2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Delaware -<2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Florida East -<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Florida West -<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Florida North -<2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Georgia East -<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Georgia West -<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Hawaii zone 1 -<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Hawaii zone 2 -<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Hawaii zone 3 -<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Hawaii zone 4 -<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Hawaii zone 5 -<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Idaho East -<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Idaho Central -<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Idaho West -<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Illinois East -<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Illinois West -<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Indiana East -<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Indiana West -<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Iowa North -<2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Iowa South -<2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Kansas North -<2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Kansas South -<2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Kentucky North -<2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Kentucky South -<2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Louisiana North -<2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Louisiana South -<2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Maine East -<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Maine West -<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Maryland -<2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Massachusetts Mainland -<2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Massachusetts Island -<2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Michigan North -<2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Michigan Central -<2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Michigan South -<2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Minnesota North -<2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Minnesota Central -<2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Minnesota South -<2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Mississippi East -<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Mississippi West -<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Missouri East -<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Missouri Central -<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Missouri West -<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Montana -<2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Nebraska -<2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Nevada East -<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Nevada Central -<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Nevada West -<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New Hampshire -<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New Jersey -<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New Mexico East -<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New Mexico Central -<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New Mexico West -<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New York East -<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New York Central -<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New York West -<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / New York Long Island -<2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / North Dakota North -<2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / North Dakota South -<2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Ohio North -<2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Ohio South -<2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Oklahoma North -<2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Oklahoma South -<2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Oregon North -<2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Oregon South -<2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Rhode Island -<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / South Dakota North -<2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / South Dakota South -<2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Tennessee -<2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Texas North -<2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Texas North Central -<2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Texas Central -<2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Texas South Central -<2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Texas South -<2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Utah North -<2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Utah Central -<2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Utah South -<2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Vermont -<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Virginia North -<2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Virginia South -<2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Washington North -<2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Washington South -<2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / West Virginia North -<2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / West Virginia South -<2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wisconsin North -<2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wisconsin Central -<2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wisconsin South -<2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wyoming East -<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wyoming East Central -<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wyoming West Central -<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Wyoming West -<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Puerto Rico and Virgin Is. -<2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Arizona East (ft) -<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Arizona Central (ft) -<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Arizona West (ft) -<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / California zone 1 (ftUS) -<2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / California zone 2 (ftUS) -<2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / California zone 3 (ftUS) -<2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / California zone 4 (ftUS) -<2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / California zone 5 (ftUS) -<2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / California zone 6 (ftUS) -<2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Colorado North (ftUS) -<2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Colorado Central (ftUS) -<2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Colorado South (ftUS) -<2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Connecticut (ftUS) -<2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Delaware (ftUS) -<2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Florida East (ftUS) -<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Florida West (ftUS) -<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Florida North (ftUS) -<2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Georgia East (ftUS) -<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Georgia West (ftUS) -<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Idaho East (ftUS) -<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Idaho Central (ftUS) -<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Idaho West (ftUS) -<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Indiana East (ftUS) (deprecated) -<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Indiana West (ftUS) (deprecated) -<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Kentucky North (ftUS) -<2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Kentucky South (ftUS) -<2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Maryland (ftUS) -<2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Massachusetts Mainland (ftUS) -<2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Massachusetts Island (ftUS) -<2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Michigan North (ft) -<2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Michigan Central (ft) -<2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Michigan South (ft) -<2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Mississippi East (ftUS) -<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Mississippi West (ftUS) -<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Montana (ft) -<2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / New Mexico East (ftUS) -<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New Mexico Central (ftUS) -<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New Mexico West (ftUS) -<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New York East (ftUS) -<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New York Central (ftUS) -<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New York West (ftUS) -<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New York Long Island (ftUS) -<2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / North Dakota North (ft) -<2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / North Dakota South (ft) -<2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Oklahoma North (ftUS) -<2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Oklahoma South (ftUS) -<2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Oregon North (ft) -<2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Oregon South (ft) -<2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Tennessee (ftUS) -<2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Texas North (ftUS) -<2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Texas North Central (ftUS) -<2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Texas Central (ftUS) -<2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Texas South Central (ftUS) -<2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Texas South (ftUS) -<2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Utah North (ft) -<2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Utah Central (ft) -<2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Utah South (ft) -<2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Virginia North (ftUS) -<2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Virginia South (ftUS) -<2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Washington North (ftUS) -<2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Washington South (ftUS) -<2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wisconsin North (ftUS) -<2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wisconsin Central (ftUS) -<2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wisconsin South (ftUS) -<2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# Beduaram / TM 13 NE -<2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs <> -# QND95 / Qatar National Grid -<2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs <> -# Segara / UTM zone 50S -<2933> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> -# Segara (Jakarta) / NEIEZ (deprecated) -<2934> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone A1 -<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone A2 -<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone A3 -<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone A4 -<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone K2 -<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone K3 -<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone K4 -<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Porto Santo / UTM zone 28N -<2942> +proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs <> -# Selvagem Grande / UTM zone 28N -<2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> -# NAD83(CSRS) / SCoPQ zone 2 -<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 3 -<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 4 -<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 5 -<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 6 -<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 7 -<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 8 -<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 9 -<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 10 -<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / New Brunswick Stereographic -<2953> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) -<2954> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 11N -<2955> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 12N -<2956> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 13N -<2957> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 17N -<2958> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 18N -<2959> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 19N -<2960> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 20N -<2961> +proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 21N -<2962> +proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs <> -# Lisbon 1890 (Lisbon) / Portugal Bonne -# Unable to translate coordinate system EPSG:2963 into PROJ.4 format. -# -# NAD27 / Alaska Albers -<2964> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD83 / Indiana East (ftUS) -<2965> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Indiana West (ftUS) -<2966> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Indiana East (ftUS) -<2967> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Indiana West (ftUS) -<2968> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> -# Fort Marigot / UTM zone 20N -<2969> +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs <> -# Guadeloupe 1948 / UTM zone 20N -<2970> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> -# CSG67 / UTM zone 22N -<2971> +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> -# RGFG95 / UTM zone 22N -<2972> +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> -# Martinique 1938 / UTM zone 20N -<2973> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> -# RGR92 / UTM zone 40S -<2975> +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Tahiti 52 / UTM zone 6S -<2976> +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs <> -# Tahaa 54 / UTM zone 5S -<2977> +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs <> -# IGN72 Nuku Hiva / UTM zone 7S -<2978> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> -# K0 1949 / UTM zone 42S (deprecated) -<2979> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> -# Combani 1950 / UTM zone 38S -<2980> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <> -# IGN56 Lifou / UTM zone 58S -<2981> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> -# IGN72 Grand Terre / UTM zone 58S (deprecated) -<2982> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> -# ST87 Ouvea / UTM zone 58S (deprecated) -<2983> +proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs <> -# RGNC 1991 / Lambert New Caledonia (deprecated) -<2984> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Petrels 1972 / Terre Adelie Polar Stereographic -# Unable to translate coordinate system EPSG:2985 into PROJ.4 format. -# -# Perroud 1950 / Terre Adelie Polar Stereographic -# Unable to translate coordinate system EPSG:2986 into PROJ.4 format. -# -# Saint Pierre et Miquelon 1950 / UTM zone 21N -<2987> +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs <> -# MOP78 / UTM zone 1S -<2988> +proj=utm +zone=1 +south +ellps=intl +units=m +no_defs <> -# RRAF 1991 / UTM zone 20N -<2989> +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Reunion 1947 / TM Reunion (deprecated) -<2990> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs <> -# NAD83 / Oregon Lambert -<2991> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Oregon Lambert (ft) -<2992> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> -# NAD83(HARN) / Oregon Lambert -<2993> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Oregon Lambert (ft) -<2994> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# IGN53 Mare / UTM zone 58S -<2995> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> -# ST84 Ile des Pins / UTM zone 58S -<2996> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> -# ST71 Belep / UTM zone 58S -<2997> +proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs <> -# NEA74 Noumea / UTM zone 58S -<2998> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> -# Grand Comoros / UTM zone 38S -<2999> +proj=utm +zone=38 +south +ellps=intl +units=m +no_defs <> -# Segara / NEIEZ -<3000> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> -# Batavia / NEIEZ -<3001> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> -# Makassar / NEIEZ -<3002> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs <> -# Monte Mario / Italy zone 1 -<3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Monte Mario / Italy zone 2 -<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs <> -# NAD83 / BC Albers -<3005> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# SWEREF99 TM -<3006> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 12 00 -<3007> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 13 30 -<3008> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 15 00 -<3009> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 16 30 -<3010> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 18 00 -<3011> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 14 15 -<3012> +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 15 45 -<3013> +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 17 15 -<3014> +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 18 45 -<3015> +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 20 15 -<3016> +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 21 45 -<3017> +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 23 15 -<3018> +proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RT90 7.5 gon V -<3019> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT90 5 gon V -<3020> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT90 2.5 gon V -<3021> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT90 0 gon -<3022> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT90 2.5 gon O -<3023> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT90 5 gon O -<3024> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT38 7.5 gon V -<3025> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT38 5 gon V -<3026> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT38 2.5 gon V -<3027> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT38 0 gon -<3028> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT38 2.5 gon O -<3029> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RT38 5 gon O -<3030> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# WGS 84 / Antarctic Polar Stereographic -<3031> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / Australian Antarctic Polar Stereographic -<3032> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / Australian Antarctic Lambert -<3033> +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# ETRS89 / ETRS-LCC -<3034> +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-LAEA -<3035> +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs <> -# Moznet / UTM zone 36S -<3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> -# Moznet / UTM zone 37S -<3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> -# ETRS89 / ETRS-TM26 -<3038> +proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM27 -<3039> +proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM28 -<3040> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM29 -<3041> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM30 -<3042> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM31 -<3043> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM32 -<3044> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM33 -<3045> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM34 -<3046> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM35 -<3047> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM36 -<3048> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM37 -<3049> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM38 -<3050> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM39 -<3051> +proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs <> -# Reykjavik 1900 / Lambert 1900 -# Unable to translate coordinate system EPSG:3052 into PROJ.4 format. -# -# Hjorsey 1955 / Lambert 1955 -# Unable to translate coordinate system EPSG:3053 into PROJ.4 format. -# -# Hjorsey 1955 / UTM zone 26N -<3054> +proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> -# Hjorsey 1955 / UTM zone 27N -<3055> +proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> -# Hjorsey 1955 / UTM zone 28N -<3056> +proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> -# ISN93 / Lambert 1993 -<3057> +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Helle 1954 / Jan Mayen Grid -<3058> +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs <> -# LKS92 / Latvia TM -<3059> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IGN72 Grande Terre / UTM zone 58S -<3060> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> -# Porto Santo 1995 / UTM zone 28N -<3061> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> -# Azores Oriental 1995 / UTM zone 26N -<3062> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> -# Azores Central 1995 / UTM zone 26N -<3063> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> -# IGM95 / UTM zone 32N -<3064> +proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IGM95 / UTM zone 33N -<3065> +proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ED50 / Jordan TM -<3066> +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs <> -# ETRS89 / ETRS-TM35FIN -<3067> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> -# DHDN / Soldner Berlin -<3068> +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# NAD27 / Wisconsin Transverse Mercator -<3069> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD83 / Wisconsin Transverse Mercator -<3070> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Wisconsin Transverse Mercator -<3071> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Maine CS2000 East -<3072> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Maine CS2000 Central (deprecated) -<3073> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Maine CS2000 West -<3074> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Maine CS2000 East -<3075> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Maine CS2000 Central (deprecated) -<3076> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Maine CS2000 West -<3077> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Michigan Oblique Mercator -<3078> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Michigan Oblique Mercator -<3079> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs <> -# NAD27 / Shackleford -<3080> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +units=ft +no_defs <> -# NAD83 / Texas State Mapping System -<3081> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas Centric Lambert Conformal -<3082> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas Centric Albers Equal Area -<3083> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Texas Centric Lambert Conformal -<3084> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Texas Centric Albers Equal Area -<3085> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Florida GDL Albers -<3086> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Florida GDL Albers -<3087> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Kentucky Single Zone -<3088> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Kentucky Single Zone (ftUS) -<3089> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Kentucky Single Zone -<3090> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Kentucky Single Zone (ftUS) -<3091> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> -# Tokyo / UTM zone 51N -<3092> +proj=utm +zone=51 +ellps=bessel +units=m +no_defs <> -# Tokyo / UTM zone 52N -<3093> +proj=utm +zone=52 +ellps=bessel +units=m +no_defs <> -# Tokyo / UTM zone 53N -<3094> +proj=utm +zone=53 +ellps=bessel +units=m +no_defs <> -# Tokyo / UTM zone 54N -<3095> +proj=utm +zone=54 +ellps=bessel +units=m +no_defs <> -# Tokyo / UTM zone 55N -<3096> +proj=utm +zone=55 +ellps=bessel +units=m +no_defs <> -# JGD2000 / UTM zone 51N -<3097> +proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / UTM zone 52N -<3098> +proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / UTM zone 53N -<3099> +proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / UTM zone 54N -<3100> +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JGD2000 / UTM zone 55N -<3101> +proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# American Samoa 1962 / American Samoa Lambert -<3102> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> -# Mauritania 1999 / UTM zone 28N (deprecated) -<3103> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> -# Mauritania 1999 / UTM zone 29N (deprecated) -<3104> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> -# Mauritania 1999 / UTM zone 30N (deprecated) -<3105> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> -# Gulshan 303 / Bangladesh Transverse Mercator -<3106> +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# GDA94 / SA Lambert -<3107> +proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ETRS89 / Guernsey Grid -<3108> +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Jersey Transverse Mercator -<3109> +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs <> -# AGD66 / Vicgrid66 -<3110> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs <> -# GDA94 / Vicgrid94 -<3111> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / Geoscience Australia Lambert -<3112> +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / BCSG02 -<3113> +proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# MAGNA-SIRGAS / Colombia Far West zone -<3114> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# MAGNA-SIRGAS / Colombia West zone -<3115> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# MAGNA-SIRGAS / Colombia Bogota zone -<3116> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# MAGNA-SIRGAS / Colombia East Central zone -<3117> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# MAGNA-SIRGAS / Colombia East zone -<3118> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Douala 1948 / AEF west -<3119> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> -# Pulkovo 1942(58) / Poland zone I -<3120> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +units=m +no_defs <> -# PRS92 / Philippines zone 1 -<3121> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> -# PRS92 / Philippines zone 2 -<3122> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> -# PRS92 / Philippines zone 3 -<3123> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> -# PRS92 / Philippines zone 4 -<3124> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> -# PRS92 / Philippines zone 5 -<3125> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> -# ETRS89 / ETRS-GK19FIN -<3126> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK20FIN -<3127> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK21FIN -<3128> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK22FIN -<3129> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK23FIN -<3130> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK24FIN -<3131> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK25FIN -<3132> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK26FIN -<3133> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK27FIN -<3134> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK28FIN -<3135> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK29FIN -<3136> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK30FIN -<3137> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-GK31FIN -<3138> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Vanua Levu 1915 / Vanua Levu Grid -# Unable to translate coordinate system EPSG:3139 into PROJ.4 format. -# -# Viti Levu 1912 / Viti Levu Grid -<3140> +proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs <> -# Fiji 1956 / UTM zone 60S -<3141> +proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> -# Fiji 1956 / UTM zone 1S -<3142> +proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> -# Fiji 1986 / Fiji Map Grid (deprecated) -<3143> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> -# FD54 / Faroe Lambert -# Unable to translate coordinate system EPSG:3144 into PROJ.4 format. -# -# ETRS89 / Faroe Lambert -# Unable to translate coordinate system EPSG:3145 into PROJ.4 format. -# -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 6 -<3146> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E -<3147> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Indian 1960 / UTM zone 48N -<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Indian 1960 / UTM zone 49N -<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 6 -<3150> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E -<3151> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# ST74 -<3152> +proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(CSRS) / BC Albers -<3153> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 7N -<3154> +proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 8N -<3155> +proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 9N -<3156> +proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 10N -<3157> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 14N -<3158> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 15N -<3159> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / UTM zone 16N -<3160> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Ontario MNR Lambert -<3161> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Ontario MNR Lambert -<3162> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs <> -# RGNC91-93 / Lambert New Caledonia -<3163> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ST87 Ouvea / UTM zone 58S -<3164> +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs <> -# NEA74 Noumea / Noumea Lambert -<3165> +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs <> -# NEA74 Noumea / Noumea Lambert 2 -<3166> +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs <> -# Kertau (RSO) / RSO Malaya (ch) -<3167> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs <> -# Kertau (RSO) / RSO Malaya (m) -<3168> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs <> -# RGNC91-93 / UTM zone 57S -<3169> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGNC91-93 / UTM zone 58S -<3170> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGNC91-93 / UTM zone 59S -<3171> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IGN53 Mare / UTM zone 59S -<3172> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs <> -# fk89 / Faroe Lambert FK89 -# Unable to translate coordinate system EPSG:3173 into PROJ.4 format. -# -# NAD83 / Great Lakes Albers -<3174> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Great Lakes and St Lawrence Albers -<3175> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# Indian 1960 / TM 106 NE -<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# LGD2006 / Libya TM -<3177> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 18N -<3178> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 19N -<3179> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 20N -<3180> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 21N -<3181> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 22N -<3182> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 23N -<3183> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 24N -<3184> +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 25N -<3185> +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 26N -<3186> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 27N -<3187> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 28N -<3188> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GR96 / UTM zone 29N -<3189> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 5 -<3190> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 6 -<3191> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 7 -<3192> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 8 -<3193> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 9 -<3194> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 10 -<3195> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 11 -<3196> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 12 -<3197> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / Libya TM zone 13 -<3198> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / UTM zone 32N -<3199> +proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# FD58 / Iraq zone -<3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> -# LGD2006 / UTM zone 33N -<3201> +proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / UTM zone 34N -<3202> +proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# LGD2006 / UTM zone 35N -<3203> +proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> -# WGS 84 / SCAR IMW SP19-20 -<3204> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SP21-22 -<3205> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SP23-24 -<3206> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ01-02 -<3207> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ19-20 -<3208> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ21-22 -<3209> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ37-38 -<3210> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ39-40 -<3211> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ41-42 -<3212> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ43-44 -<3213> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ45-46 -<3214> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ47-48 -<3215> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ49-50 -<3216> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ51-52 -<3217> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ53-54 -<3218> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ55-56 -<3219> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SQ57-58 -<3220> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR13-14 -<3221> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR15-16 -<3222> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR17-18 -<3223> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR19-20 -<3224> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR27-28 -<3225> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR29-30 -<3226> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR31-32 -<3227> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR33-34 -<3228> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR35-36 -<3229> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR37-38 -<3230> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR39-40 -<3231> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR41-42 -<3232> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR43-44 -<3233> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR45-46 -<3234> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR47-48 -<3235> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR49-50 -<3236> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR51-52 -<3237> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR53-54 -<3238> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR55-56 -<3239> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR57-58 -<3240> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SR59-60 -<3241> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS04-06 -<3242> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS07-09 -<3243> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS10-12 -<3244> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS13-15 -<3245> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS16-18 -<3246> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS19-21 -<3247> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS25-27 -<3248> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS28-30 -<3249> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS31-33 -<3250> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS34-36 -<3251> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS37-39 -<3252> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS40-42 -<3253> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS43-45 -<3254> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS46-48 -<3255> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS49-51 -<3256> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS52-54 -<3257> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS55-57 -<3258> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SS58-60 -<3259> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST01-04 -<3260> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST05-08 -<3261> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST09-12 -<3262> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST13-16 -<3263> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST17-20 -<3264> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST21-24 -<3265> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST25-28 -<3266> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST29-32 -<3267> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST33-36 -<3268> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST37-40 -<3269> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST41-44 -<3270> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST45-48 -<3271> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST49-52 -<3272> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST53-56 -<3273> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW ST57-60 -<3274> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU01-05 -<3275> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU06-10 -<3276> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU11-15 -<3277> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU16-20 -<3278> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU21-25 -<3279> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU26-30 -<3280> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU31-35 -<3281> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU36-40 -<3282> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU41-45 -<3283> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU46-50 -<3284> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU51-55 -<3285> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SU56-60 -<3286> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SV01-10 -<3287> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SV11-20 -<3288> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SV21-30 -<3289> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SV31-40 -<3290> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SV41-50 -<3291> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SV51-60 -<3292> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / SCAR IMW SW01-60 -<3293> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / USGS Transantarctic Mountains -<3294> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# Guam 1963 / Yap Islands -# Unable to translate coordinate system EPSG:3295 into PROJ.4 format. -# -# RGPF / UTM zone 5S -<3296> +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs <> -# RGPF / UTM zone 6S -<3297> +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs <> -# RGPF / UTM zone 7S -<3298> +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs <> -# RGPF / UTM zone 8S -<3299> +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs <> -# Estonian Coordinate System of 1992 -<3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs <> -# Estonian Coordinate System of 1997 -<3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IGN63 Hiva Oa / UTM zone 7S -<3302> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> -# Fatu Iva 72 / UTM zone 7S -<3303> +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs <> -# Tahiti 79 / UTM zone 6S -<3304> +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs <> -# Moorea 87 / UTM zone 6S -<3305> +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs <> -# Maupiti 83 / UTM zone 5S -<3306> +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs <> -# Nakhl-e Ghanem / UTM zone 39N -<3307> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs <> -# GDA94 / NSW Lambert -<3308> +proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD27 / California Albers -<3309> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD83 / California Albers -<3310> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / California Albers -<3311> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs <> -# CSG67 / UTM zone 21N -<3312> +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> -# RGFG95 / UTM zone 21N -<3313> +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> -# Katanga 1955 / Katanga Lambert (deprecated) -<3314> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Katanga 1955 / Katanga TM (deprecated) -<3315> +proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Kasai 1953 / Congo TM zone 22 -<3316> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# Kasai 1953 / Congo TM zone 24 -<3317> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 12 -<3318> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 14 -<3319> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 16 -<3320> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 18 -<3321> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 20 -<3322> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 22 -<3323> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 24 -<3324> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 26 -<3325> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 28 -<3326> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# IGC 1962 / Congo TM zone 30 -<3327> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# Pulkovo 1942(58) / GUGiK-80 -<3328> +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5 -<3329> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6 -<3330> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7 -<3331> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8 -<3332> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Gauss-Kruger zone 3 -<3333> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Gauss-Kruger zone 4 -<3334> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Gauss-Kruger zone 5 -<3335> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# IGN 1962 Kerguelen / UTM zone 42S -<3336> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> -# Le Pouce 1934 / Mauritius Grid -<3337> +proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs <> -# NAD83 / Alaska Albers -<3338> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# IGCB 1955 / Congo TM zone 12 -<3339> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> -# IGCB 1955 / Congo TM zone 14 -<3340> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> -# IGCB 1955 / Congo TM zone 16 -<3341> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> -# IGCB 1955 / UTM zone 33S -<3342> +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> -# Mauritania 1999 / UTM zone 28N -<3343> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Mauritania 1999 / UTM zone 29N -<3344> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Mauritania 1999 / UTM zone 30N -<3345> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# LKS94 / Lithuania TM -<3346> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83 / Statistics Canada Lambert -<3347> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Statistics Canada Lambert -<3348> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> -# WGS 84 / PDC Mercator (deprecated) -<3349> +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone C0 -<3350> +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone C1 -<3351> +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / CS63 zone C2 -<3352> +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Mhast (onshore) / UTM zone 32S -<3353> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> -# Mhast (offshore) / UTM zone 32S -<3354> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> -# Egypt Gulf of Suez S-650 TL / Red Belt -<3355> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs <> -# Grand Cayman 1959 / UTM zone 17N -<3356> +proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs <> -# Little Cayman 1961 / UTM zone 17N -<3357> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> -# NAD83(HARN) / North Carolina -<3358> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / North Carolina (ftUS) (deprecated) -<3359> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / South Carolina -<3360> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / South Carolina (ft) -<3361> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> -# NAD83(HARN) / Pennsylvania North -<3362> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Pennsylvania North (ftUS) -<3363> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Pennsylvania South -<3364> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Pennsylvania South (ftUS) -<3365> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# Hong Kong 1963 Grid System (deprecated) -<3366> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs <> -# IGN Astro 1960 / UTM zone 28N -<3367> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> -# IGN Astro 1960 / UTM zone 29N -<3368> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> -# IGN Astro 1960 / UTM zone 30N -<3369> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> -# NAD27 / UTM zone 59N -<3370> +proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 60N -<3371> +proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD83 / UTM zone 59N -<3372> +proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 60N -<3373> +proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# FD54 / UTM zone 29N -<3374> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> -# GDM2000 / Peninsula RSO -<3375> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / East Malaysia BRSO -<3376> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Johor Grid -<3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Sembilan and Melaka Grid -<3378> +proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / PahangGrid -<3379> +proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Selangor Grid -<3380> +proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Terengganu Grid -<3381> +proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Pinang Grid -<3382> +proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Kedah and Perlis Grid -<3383> +proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Perak Grid -<3384> +proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs <> -# GDM2000 / Kelantan Grid -<3385> +proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs <> -# KKJ / Finland zone 0 -<3386> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# KKJ / Finland zone 5 -<3387> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Pulkovo 1942 / Caspian Sea Mercator -<3388> +proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 -<3389> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 -<3390> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Karbala 1979 / UTM zone 37N -<3391> +proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> -# Karbala 1979 / UTM zone 38N -<3392> +proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> -# Karbala 1979 / UTM zone 39N -<3393> +proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> -# Nahrwan 1934 / Iraq zone -<3394> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> -# WGS 84 / World Mercator -<3395> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# PD/83 / 3-degree Gauss-Kruger zone 3 -<3396> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# PD/83 / 3-degree Gauss-Kruger zone 4 -<3397> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RD/83 / 3-degree Gauss-Kruger zone 4 -<3398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# RD/83 / 3-degree Gauss-Kruger zone 5 -<3399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# NAD83 / Alberta 10-TM (Forest) -<3400> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alberta 10-TM (Resource) -<3401> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 10-TM (Forest) -<3402> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 10-TM (Resource) -<3403> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / North Carolina (ftUS) -<3404> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# VN-2000 / UTM zone 48N -<3405> +proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs <> -# VN-2000 / UTM zone 49N -<3406> +proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs <> -# Hong Kong 1963 Grid System -<3407> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> -# unnamed -<3408> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> -# unnamed -<3409> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> -# NSIDC EASE-Grid Global -<3410> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> -# NSIDC Sea Ice Polar Stereographic North -<3411> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> -# NSIDC Sea Ice Polar Stereographic South -<3412> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> -# WGS 84 / NSIDC Sea Ice Polar Stereographic North -<3413> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# SVY21 / Singapore TM -<3414> +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs <> -# WGS 72BE / South China Sea Lambert -<3415> +proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# ETRS89 / Austria Lambert -<3416> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Iowa North (ft US) -<3417> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Iowa South (ft US) -<3418> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Kansas North (ft US) -<3419> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Kansas South (ft US) -<3420> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Nevada East (ft US) -<3421> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Nevada Central (ft US) -<3422> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Nevada West (ft US) -<3423> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New Jersey (ft US) -<3424> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Iowa North (ft US) -<3425> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Iowa South (ft US) -<3426> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Kansas North (ft US) -<3427> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Kansas South (ft US) -<3428> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Nevada East (ft US) -<3429> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Nevada Central (ft US) -<3430> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Nevada West (ft US) -<3431> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New Jersey (ft US) -<3432> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83 / Arkansas North (ftUS) -<3433> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Arkansas South (ftUS) -<3434> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Illinois East (ftUS) -<3435> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Illinois West (ftUS) -<3436> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / New Hampshire (ftUS) -<3437> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Rhode Island (ftUS) -<3438> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# PSD93 / UTM zone 39N -<3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> -# PSD93 / UTM zone 40N -<3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> -# NAD83(HARN) / Arkansas North (ftUS) -<3441> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Arkansas South (ftUS) -<3442> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Illinois East (ftUS) -<3443> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Illinois West (ftUS) -<3444> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / New Hampshire (ftUS) -<3445> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Rhode Island (ftUS) -<3446> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# ETRS89 / Belgian Lambert 2005 -<3447> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs <> -# JAD2001 / Jamaica Metric Grid -<3448> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JAD2001 / UTM zone 17N -<3449> +proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# JAD2001 / UTM zone 18N -<3450> +proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83 / Louisiana North (ftUS) -<3451> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Louisiana South (ftUS) -<3452> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Louisiana Offshore (ftUS) -<3453> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / South Dakota North (ftUS) -<3454> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / South Dakota South (ftUS) -<3455> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Louisiana North (ftUS) -<3456> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Louisiana South (ftUS) -<3457> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / South Dakota North (ftUS) -<3458> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / South Dakota South (ftUS) -<3459> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# Fiji 1986 / Fiji Map Grid -<3460> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> -# Dabola 1981 / UTM zone 28N -<3461> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> -# Dabola 1981 / UTM zone 29N -<3462> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> -# NAD83 / Maine CS2000 Central -<3463> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Maine CS2000 Central -<3464> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(NSRS2007) / Alabama East -<3465> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alabama West -<3466> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska Albers -<3467> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 1 -<3468> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 2 -<3469> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 3 -<3470> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 4 -<3471> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 5 -<3472> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 6 -<3473> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 7 -<3474> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 8 -<3475> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 9 -<3476> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Alaska zone 10 -<3477> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Arizona Central -<3478> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Arizona Central (ft) -<3479> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Arizona East -<3480> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Arizona East (ft) -<3481> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Arizona West -<3482> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Arizona West (ft) -<3483> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Arkansas North -<3484> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Arkansas North (ftUS) -<3485> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Arkansas South -<3486> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Arkansas South (ftUS) -<3487> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / California Albers -<3488> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 1 -<3489> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 1 (ftUS) -<3490> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / California zone 2 -<3491> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 2 (ftUS) -<3492> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / California zone 3 -<3493> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 3 (ftUS) -<3494> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / California zone 4 -<3495> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 4 (ftUS) -<3496> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / California zone 5 -<3497> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 5 (ftUS) -<3498> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / California zone 6 -<3499> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / California zone 6 (ftUS) -<3500> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Colorado Central -<3501> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Colorado Central (ftUS) -<3502> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Colorado North -<3503> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Colorado North (ftUS) -<3504> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Colorado South -<3505> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Colorado South (ftUS) -<3506> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Connecticut -<3507> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Connecticut (ftUS) -<3508> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Delaware -<3509> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Delaware (ftUS) -<3510> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Florida East -<3511> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Florida East (ftUS) -<3512> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Florida GDL Albers -<3513> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Florida North -<3514> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Florida North (ftUS) -<3515> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Florida West -<3516> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Florida West (ftUS) -<3517> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Georgia East -<3518> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Georgia East (ftUS) -<3519> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Georgia West -<3520> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Georgia West (ftUS) -<3521> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Idaho Central -<3522> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Idaho Central (ftUS) -<3523> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Idaho East -<3524> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Idaho East (ftUS) -<3525> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Idaho West -<3526> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Idaho West (ftUS) -<3527> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Illinois East -<3528> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Illinois East (ftUS) -<3529> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Illinois West -<3530> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Illinois West (ftUS) -<3531> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Indiana East -<3532> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Indiana East (ftUS) -<3533> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Indiana West -<3534> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Indiana West (ftUS) -<3535> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Iowa North -<3536> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Iowa North (ft US) -<3537> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Iowa South -<3538> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Iowa South (ft US) -<3539> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Kansas North -<3540> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Kansas North (ft US) -<3541> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Kansas South -<3542> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Kansas South (ft US) -<3543> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Kentucky North -<3544> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Kentucky North (ftUS) -<3545> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Kentucky Single Zone -<3546> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Kentucky Single Zone (ftUS) -<3547> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Kentucky South -<3548> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Kentucky South (ftUS) -<3549> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Louisiana North -<3550> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Louisiana North (ftUS) -<3551> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Louisiana South -<3552> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Louisiana South (ftUS) -<3553> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Maine CS2000 Central -<3554> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Maine CS2000 East -<3555> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Maine CS2000 West -<3556> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Maine East -<3557> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Maine West -<3558> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Maryland -<3559> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83 / Utah North (ftUS) -<3560> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# Old Hawaiian / Hawaii zone 1 -<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> -# Old Hawaiian / Hawaii zone 2 -<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> -# Old Hawaiian / Hawaii zone 3 -<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> -# Old Hawaiian / Hawaii zone 4 -<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> -# Old Hawaiian / Hawaii zone 5 -<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> -# NAD83 / Utah Central (ftUS) -<3566> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Utah South (ftUS) -<3567> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Utah North (ftUS) -<3568> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Utah Central (ftUS) -<3569> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Utah South (ftUS) -<3570> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> -# WGS 84 / North Pole LAEA Bering Sea -<3571> +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / North Pole LAEA Alaska -<3572> +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / North Pole LAEA Canada -<3573> +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / North Pole LAEA Atlantic -<3574> +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / North Pole LAEA Europe -<3575> +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / North Pole LAEA Russia -<3576> +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# GDA94 / Australian Albers -<3577> +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83 / Yukon Albers -<3578> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Yukon Albers -<3579> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / NWT Lambert -<3580> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / NWT Lambert -<3581> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(NSRS2007) / Maryland (ftUS) -<3582> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Massachusetts Island -<3583> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Massachusetts Island (ftUS) -<3584> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Massachusetts Mainland -<3585> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Massachusetts Mainland (ftUS) -<3586> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Michigan Central -<3587> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Michigan Central (ft) -<3588> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Michigan North -<3589> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Michigan North (ft) -<3590> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Michigan Oblique Mercator -<3591> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Michigan South -<3592> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Michigan South (ft) -<3593> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Minnesota Central -<3594> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Minnesota North -<3595> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Minnesota South -<3596> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Mississippi East -<3597> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Mississippi East (ftUS) -<3598> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Mississippi West -<3599> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Mississippi West (ftUS) -<3600> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Missouri Central -<3601> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Missouri East -<3602> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Missouri West -<3603> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Montana -<3604> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Montana (ft) -<3605> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Nebraska -<3606> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Nevada Central -<3607> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Nevada Central (ft US) -<3608> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Nevada East -<3609> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Nevada East (ft US) -<3610> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Nevada West -<3611> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Nevada West (ft US) -<3612> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New Hampshire -<3613> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New Hampshire (ftUS) -<3614> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New Jersey -<3615> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New Jersey (ft US) -<3616> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New Mexico Central -<3617> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New Mexico Central (ftUS) -<3618> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New Mexico East -<3619> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New Mexico East (ftUS) -<3620> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New Mexico West -<3621> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New Mexico West (ftUS) -<3622> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New York Central -<3623> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New York Central (ftUS) -<3624> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New York East -<3625> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New York East (ftUS) -<3626> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New York Long Island -<3627> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New York Long Island (ftUS) -<3628> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / New York West -<3629> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / New York West (ftUS) -<3630> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / North Carolina -<3631> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / North Carolina (ftUS) -<3632> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / North Dakota North -<3633> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / North Dakota North (ft) -<3634> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / North Dakota South -<3635> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / North Dakota South (ft) -<3636> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Ohio North -<3637> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Ohio South -<3638> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Oklahoma North -<3639> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Oklahoma North (ftUS) -<3640> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Oklahoma South -<3641> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Oklahoma South (ftUS) -<3642> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Oregon Lambert -<3643> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Oregon Lambert (ft) -<3644> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Oregon North -<3645> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Oregon North (ft) -<3646> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Oregon South -<3647> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Oregon South (ft) -<3648> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Pennsylvania North -<3649> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Pennsylvania North (ftUS) -<3650> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Pennsylvania South -<3651> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Pennsylvania South (ftUS) -<3652> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Rhode Island -<3653> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Rhode Island (ftUS) -<3654> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / South Carolina -<3655> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / South Carolina (ft) -<3656> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / South Dakota North -<3657> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / South Dakota North (ftUS) -<3658> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / South Dakota South -<3659> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / South Dakota South (ftUS) -<3660> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Tennessee -<3661> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Tennessee (ftUS) -<3662> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Texas Central -<3663> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas Central (ftUS) -<3664> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Texas Centric Albers Equal Area -<3665> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas Centric Lambert Conformal -<3666> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas North -<3667> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas North (ftUS) -<3668> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Texas North Central -<3669> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas North Central (ftUS) -<3670> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Texas South -<3671> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas South (ftUS) -<3672> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Texas South Central -<3673> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Texas South Central (ftUS) -<3674> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Utah Central -<3675> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Utah Central (ft) -<3676> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Utah Central (ftUS) -<3677> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Utah North -<3678> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Utah North (ft) -<3679> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Utah North (ftUS) -<3680> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Utah South -<3681> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Utah South (ft) -<3682> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> -# NAD83(NSRS2007) / Utah South (ftUS) -<3683> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Vermont -<3684> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Virginia North -<3685> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Virginia North (ftUS) -<3686> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Virginia South -<3687> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Virginia South (ftUS) -<3688> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Washington North -<3689> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Washington North (ftUS) -<3690> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Washington South -<3691> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Washington South (ftUS) -<3692> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / West Virginia North -<3693> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / West Virginia South -<3694> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wisconsin Central -<3695> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wisconsin Central (ftUS) -<3696> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wisconsin North -<3697> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wisconsin North (ftUS) -<3698> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wisconsin South -<3699> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wisconsin South (ftUS) -<3700> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wisconsin Transverse Mercator -<3701> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wyoming East -<3702> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wyoming East Central -<3703> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wyoming West Central -<3704> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Wyoming West -<3705> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 59N -<3706> +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 60N -<3707> +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 1N -<3708> +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 2N -<3709> +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 3N -<3710> +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 4N -<3711> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 5N -<3712> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 6N -<3713> +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 7N -<3714> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 8N -<3715> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 9N -<3716> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 10N -<3717> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 11N -<3718> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 12N -<3719> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 13N -<3720> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 14N -<3721> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 15N -<3722> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 16N -<3723> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 17N -<3724> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 18N -<3725> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / UTM zone 19N -<3726> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Reunion 1947 / TM Reunion -<3727> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs <> -# NAD83(NSRS2007) / Ohio North (ftUS) -<3728> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Ohio South (ftUS) -<3729> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wyoming East (ftUS) -<3730> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wyoming East Central (ftUS) -<3731> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wyoming West Central (ftUS) -<3732> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Wyoming West (ftUS) -<3733> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83 / Ohio North (ftUS) -<3734> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Ohio South (ftUS) -<3735> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wyoming East (ftUS) -<3736> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wyoming East Central (ftUS) -<3737> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wyoming West Central (ftUS) -<3738> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Wyoming West (ftUS) -<3739> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / UTM zone 10N -<3740> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 11N -<3741> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 12N -<3742> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 13N -<3743> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 14N -<3744> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 15N -<3745> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 16N -<3746> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 17N -<3747> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 18N -<3748> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 19N -<3749> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 4N -<3750> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / UTM zone 5N -<3751> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <> -# WGS 84 / Mercator 41 (deprecated) -<3752> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# NAD83(HARN) / Ohio North (ftUS) -<3753> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Ohio South (ftUS) -<3754> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wyoming East (ftUS) -<3755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wyoming East Central (ftUS) -<3756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wyoming West Central (ftUS) -<3757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Wyoming West (ftUS) -<3758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83 / Hawaii zone 3 (ftUS) -<3759> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Hawaii zone 3 (ftUS) -<3760> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(CSRS) / UTM zone 22N -<3761> +proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs <> -# WGS 84 / South Georgia Lambert -<3762> +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# ETRS89 / Portugal TM06 -<3763> +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NZGD2000 / Chatham Island Circuit 2000 -<3764> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# HTRS96 / Croatia TM -<3765> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# HTRS96 / Croatia LCC -<3766> +proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# HTRS96 / UTM zone 33N -<3767> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# HTRS96 / UTM zone 34N -<3768> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Bermuda 1957 / UTM zone 20N -<3769> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> -# BDA2000 / Bermuda 2000 National Grid -<3770> +proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD27 / Alberta 3TM ref merid 111 W -<3771> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Alberta 3TM ref merid 114 W -<3772> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Alberta 3TM ref merid 117 W -<3773> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Alberta 3TM ref merid 120 W (deprecated) -<3774> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD83 / Alberta 3TM ref merid 111 W -<3775> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alberta 3TM ref merid 114 W -<3776> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alberta 3TM ref merid 117 W -<3777> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alberta 3TM ref merid 120 W (deprecated) -<3778> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 3TM ref merid 111 W -<3779> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 3TM ref merid 114 W -<3780> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 3TM ref merid 117 W -<3781> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated) -<3782> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Pitcairn 2006 / Pitcairn TM 2006 -<3783> +proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Pitcairn 1967 / UTM zone 9S -<3784> +proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs <> -# Popular Visualisation CRS / Mercator (deprecated) -<3785> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> -# World Equidistant Cylindrical (Sphere) (deprecated) -<3786> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs <> -# MGI / Slovene National Grid (deprecated) -<3787> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# NZGD2000 / Auckland Islands TM 2000 -<3788> +proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Campbell Island TM 2000 -<3789> +proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Antipodes Islands TM 2000 -<3790> +proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Raoul Island TM 2000 -<3791> +proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / Chatham Islands TM 2000 -<3793> +proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Slovenia 1996 / Slovene National Grid -<3794> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD27 / Cuba Norte -<3795> +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Cuba Sur -<3796> +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / MTQ Lambert -<3797> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD83 / MTQ Lambert -<3798> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / MTQ Lambert -<3799> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD27 / Alberta 3TM ref merid 120 W -<3800> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD83 / Alberta 3TM ref merid 120 W -<3801> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Alberta 3TM ref merid 120 W -<3802> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / Belgian Lambert 2008 -<3812> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / Mississippi TM -<3814> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Mississippi TM -<3815> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +units=m +no_defs <> -# NAD83(NSRS2007) / Mississippi TM -<3816> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# TWD97 / TM2 zone 119 -<3825> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# TWD97 / TM2 zone 121 -<3826> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# TWD67 / TM2 zone 119 -<3827> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> -# TWD67 / TM2 zone 121 -<3828> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> -# Hu Tzu Shan / UTM zone 51N -<3829> +proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs <> -# WGS 84 / PDC Mercator -<3832> +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# Pulkovo 1942(58) / Gauss-Kruger zone 2 -<3833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / Gauss-Kruger zone 2 -<3834> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / Gauss-Kruger zone 3 -<3835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / Gauss-Kruger zone 4 -<3836> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 -<3837> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4 -<3838> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9 -<3839> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10 -<3840> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6 -<3841> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 -<3842> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 -<3843> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(58) / Stereo70 -<3844> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> -# SWEREF99 / RT90 7.5 gon V emulation -<3845> +proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 / RT90 5 gon V emulation -<3846> +proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 / RT90 2.5 gon V emulation -<3847> +proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 / RT90 0 gon emulation -<3848> +proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 / RT90 2.5 gon O emulation -<3849> +proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SWEREF99 / RT90 5 gon O emulation -<3850> +proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NZGD2000 / NZCS2000 -<3851> +proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RSRGD2000 / DGLC2000 -<3852> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# County ST74 -<3854> +proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# WGS 84 / Pseudo-Mercator -<3857> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> -# IGRS / UTM zone 37N -<3890> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IGRS / UTM zone 38N -<3891> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# IGRS / UTM zone 39N -<3892> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ED50 / Iraq National Grid -<3893> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +units=m +no_defs <> -# MGI 1901 / Balkans zone 5 -<3907> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# MGI 1901 / Balkans zone 6 -<3908> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# MGI 1901 / Balkans zone 7 -<3909> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# MGI 1901 / Balkans zone 8 -<3910> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# MGI 1901 / Slovenia Grid -<3911> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# MGI 1901 / Slovene National Grid -<3912> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m +no_defs <> -# Puerto Rico / UTM zone 20N -<3920> +proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC42 -<3942> +proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC43 -<3943> +proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC44 -<3944> +proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC45 -<3945> +proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC46 -<3946> +proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC47 -<3947> +proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC48 -<3948> +proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC49 -<3949> +proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGF93 / CC50 -<3950> +proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83 / Virginia Lambert -<3968> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Virginia Lambert -<3969> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(NSRS2007) / Virginia Lambert -<3970> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# WGS 84 / NSIDC EASE-Grid North -# Unable to translate coordinate system EPSG:3973 into PROJ.4 format. -# -# WGS 84 / NSIDC EASE-Grid South -# Unable to translate coordinate system EPSG:3974 into PROJ.4 format. -# -# WGS 84 / NSIDC EASE-Grid Global -<3975> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / NSIDC Sea Ice Polar Stereographic South -<3976> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# NAD83 / Canada Atlas Lambert -<3978> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(CSRS) / Canada Atlas Lambert -<3979> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Katanga 1955 / Katanga Lambert -<3985> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Katanga 1955 / Katanga Gauss zone A -<3986> +proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Katanga 1955 / Katanga Gauss zone B -<3987> +proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Katanga 1955 / Katanga Gauss zone C -<3988> +proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Katanga 1955 / Katanga Gauss zone D -<3989> +proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> -# Puerto Rico State Plane CS of 1927 -<3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> -# Puerto Rico / St. Croix -<3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> -# Guam 1963 / Guam SPCS -# Unable to translate coordinate system EPSG:3993 into PROJ.4 format. -# -# WGS 84 / Mercator 41 -<3994> +proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / Arctic Polar Stereographic -<3995> +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / IBCAO Polar Stereographic -<3996> +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / Dubai Local TM -<3997> +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# MOLDREF99 / Moldova TM -<4026> +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs <> -# WGS 84 / TMzn35N -<4037> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / TMzn36N -<4038> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 12 -<4048> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 14 -<4049> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 16 -<4050> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 18 -<4051> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 20 -<4056> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 22 -<4057> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 24 -<4058> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 26 -<4059> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / Congo TM zone 28 -<4060> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / UTM zone 33S -<4061> +proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / UTM zone 34S -<4062> +proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# RGRDC 2005 / UTM zone 35S -<4063> +proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Chua / UTM zone 23S -<4071> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> -# REGCAN95 / UTM zone 27N -<4082> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# REGCAN95 / UTM zone 28N -<4083> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# WGS 84 / World Equidistant Cylindrical -# Unable to translate coordinate system EPSG:4087 into PROJ.4 format. -# -# World Equidistant Cylindrical (Sphere) -# Unable to translate coordinate system EPSG:4088 into PROJ.4 format. -# -# EPSG topocentric example A -# Unable to translate coordinate system EPSG:5819 into PROJ.4 format. -# -# EPSG topocentric example B -# Unable to translate coordinate system EPSG:5820 into PROJ.4 format. -# -# EPSG vertical perspective example -# Unable to translate coordinate system EPSG:5821 into PROJ.4 format. -# -# Pulkovo 1995 / Gauss-Kruger zone 4 -<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 5 -<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 6 -<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 7 -<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 8 -<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 9 -<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 10 -<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 11 -<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 12 -<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 13 -<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 14 -<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 15 -<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 16 -<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 17 -<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 18 -<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 19 -<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 20 -<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 21 -<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 22 -<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 23 -<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 24 -<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 25 -<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 26 -<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 27 -<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 28 -<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 29 -<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 30 -<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 31 -<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 32 -<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 4N (deprecated) -<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 5N (deprecated) -<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 6N (deprecated) -<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 7N (deprecated) -<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 8N (deprecated) -<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 9N (deprecated) -<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 10N (deprecated) -<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 11N (deprecated) -<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 12N (deprecated) -<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 13N (deprecated) -<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 14N (deprecated) -<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 15N (deprecated) -<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 16N (deprecated) -<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 17N (deprecated) -<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 18N (deprecated) -<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 19N (deprecated) -<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 20N (deprecated) -<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 21N (deprecated) -<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 22N (deprecated) -<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 23N (deprecated) -<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 24N (deprecated) -<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 25N (deprecated) -<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 26N (deprecated) -<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 27N (deprecated) -<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 28N (deprecated) -<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 29N (deprecated) -<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 30N (deprecated) -<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 31N (deprecated) -<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Pulkovo 1995 / Gauss-Kruger 32N (deprecated) -<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> -# Adindan / UTM zone 35N -<20135> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> -# Adindan / UTM zone 36N -<20136> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> -# Adindan / UTM zone 37N -<20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> -# Adindan / UTM zone 38N -<20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> -# AGD66 / AMG zone 48 -<20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 49 -<20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 50 -<20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 51 -<20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 52 -<20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 53 -<20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 54 -<20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 55 -<20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 56 -<20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 57 -<20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> -# AGD66 / AMG zone 58 -<20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 48 -<20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 49 -<20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 50 -<20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 51 -<20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 52 -<20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 53 -<20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 54 -<20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 55 -<20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 56 -<20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 57 -<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> -# AGD84 / AMG zone 58 -<20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> -# Ain el Abd / UTM zone 36N -<20436> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> -# Ain el Abd / UTM zone 37N -<20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> -# Ain el Abd / UTM zone 38N -<20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> -# Ain el Abd / UTM zone 39N -<20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> -# Ain el Abd / UTM zone 40N -<20440> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> -# Ain el Abd / Bahrain Grid -<20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> -# Afgooye / UTM zone 38N -<20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> -# Afgooye / UTM zone 39N -<20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> -# Lisbon (Lisbon) / Portuguese National Grid -<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs <> -# Lisbon (Lisbon) / Portuguese Grid -<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs <> -# Aratu / UTM zone 22S -<20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> -# Aratu / UTM zone 23S -<20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> -# Aratu / UTM zone 24S -<20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs <> -# Arc 1950 / UTM zone 34S -<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Arc 1950 / UTM zone 35S -<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Arc 1950 / UTM zone 36S -<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Arc 1960 / UTM zone 35S -<21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs <> -# Arc 1960 / UTM zone 36S -<21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs <> -# Arc 1960 / UTM zone 37S -<21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs <> -# Arc 1960 / UTM zone 35N -<21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> -# Arc 1960 / UTM zone 36N -<21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> -# Arc 1960 / UTM zone 37N -<21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> -# Batavia (Jakarta) / NEIEZ (deprecated) -<21100> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> -# Batavia / UTM zone 48S -<21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs <> -# Batavia / UTM zone 49S -<21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs <> -# Batavia / UTM zone 50S -<21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> -# Barbados 1938 / British West Indies Grid -<21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> -# Barbados 1938 / Barbados National Grid -<21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 13 -<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 14 -<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 15 -<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 16 -<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 17 -<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 18 -<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 19 -<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 20 -<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 21 -<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 22 -<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger zone 23 -<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 75E -<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 81E -<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 87E -<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 93E -<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 99E -<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 105E -<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 111E -<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 117E -<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 123E -<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 129E -<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger CM 135E -<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 13N (deprecated) -<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 14N (deprecated) -<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 15N (deprecated) -<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 16N (deprecated) -<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 17N (deprecated) -<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 18N (deprecated) -<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 19N (deprecated) -<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 20N (deprecated) -<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 21N (deprecated) -<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 22N (deprecated) -<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Beijing 1954 / Gauss-Kruger 23N (deprecated) -<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Belge 1950 (Brussels) / Belge Lambert 50 -<21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs <> -# Bern 1898 (Bern) / LV03C -<21780> +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs <> -# CH1903 / LV03 -<21781> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> -# CH1903 / LV03C-G -<21782> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / UTM zone 17N (deprecated) -<21817> +proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / UTM zone 18N -<21818> +proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia West zone (deprecated) -<21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia Bogota zone (deprecated) -<21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia East Central zone (deprecated) -<21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia East (deprecated) -<21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia West zone -<21896> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia Bogota zone -<21897> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia East Central zone -<21898> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Bogota 1975 / Colombia East -<21899> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> -# Camacupa / UTM zone 32S -<22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs <> -# Camacupa / UTM zone 33S -<22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs <> -# Camacupa / TM 11.30 SE -<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# Camacupa / TM 12 SE -<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> -# POSGAR 98 / Argentina 1 -<22171> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 98 / Argentina 2 -<22172> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 98 / Argentina 3 -<22173> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 98 / Argentina 4 -<22174> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 98 / Argentina 5 -<22175> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 98 / Argentina 6 -<22176> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 98 / Argentina 7 -<22177> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# POSGAR 94 / Argentina 1 -<22181> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# POSGAR 94 / Argentina 2 -<22182> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# POSGAR 94 / Argentina 3 -<22183> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# POSGAR 94 / Argentina 4 -<22184> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# POSGAR 94 / Argentina 5 -<22185> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# POSGAR 94 / Argentina 6 -<22186> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# POSGAR 94 / Argentina 7 -<22187> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Campo Inchauspe / Argentina 1 -<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / Argentina 2 -<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / Argentina 3 -<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / Argentina 4 -<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / Argentina 5 -<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / Argentina 6 -<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Campo Inchauspe / Argentina 7 -<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Cape / UTM zone 34S -<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Cape / UTM zone 35S -<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Cape / UTM zone 36S -<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Cape / Lo15 -# Unable to translate coordinate system EPSG:22275 into PROJ.4 format. -# -# Cape / Lo17 -# Unable to translate coordinate system EPSG:22277 into PROJ.4 format. -# -# Cape / Lo19 -# Unable to translate coordinate system EPSG:22279 into PROJ.4 format. -# -# Cape / Lo21 -# Unable to translate coordinate system EPSG:22281 into PROJ.4 format. -# -# Cape / Lo23 -# Unable to translate coordinate system EPSG:22283 into PROJ.4 format. -# -# Cape / Lo25 -# Unable to translate coordinate system EPSG:22285 into PROJ.4 format. -# -# Cape / Lo27 -# Unable to translate coordinate system EPSG:22287 into PROJ.4 format. -# -# Cape / Lo29 -# Unable to translate coordinate system EPSG:22289 into PROJ.4 format. -# -# Cape / Lo31 -# Unable to translate coordinate system EPSG:22291 into PROJ.4 format. -# -# Cape / Lo33 -# Unable to translate coordinate system EPSG:22293 into PROJ.4 format. -# -# Carthage (Paris) / Tunisia Mining Grid -# Unable to translate coordinate system EPSG:22300 into PROJ.4 format. -# -# Carthage / UTM zone 32N -<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> -# Carthage / Nord Tunisie -<22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> -# Carthage / Sud Tunisie -<22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> -# Corrego Alegre / UTM zone 21S -<22521> +proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 22S -<22522> +proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 23S -<22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 24S -<22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 25S -<22525> +proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Deir ez Zor / Levant Zone -<22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Deir ez Zor / Syria Lambert -<22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Deir ez Zor / Levant Stereographic -<22780> +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Douala / UTM zone 32N (deprecated) -<22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Egypt 1907 / Blue Belt -<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs <> -# Egypt 1907 / Red Belt -<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs <> -# Egypt 1907 / Purple Belt -<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs <> -# Egypt 1907 / Extended Purple Belt -<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs <> -# ED50 / UTM zone 28N -<23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 29N -<23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 30N -<23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 31N -<23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 32N -<23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 33N -<23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 34N -<23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 35N -<23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 36N -<23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 37N -<23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> -# ED50 / UTM zone 38N -<23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> -# ED50 / TM 0 N -<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# ED50 / TM 5 NE -<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Fahud / UTM zone 39N -<23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> -# Fahud / UTM zone 40N -<23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> -# Garoua / UTM zone 33N (deprecated) -<23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# HD72 / EOV -<23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 46.2 -<23830> +proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 47.1 -<23831> +proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 47.2 -<23832> +proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 48.1 -<23833> +proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 48.2 -<23834> +proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 49.1 -<23835> +proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 49.2 -<23836> +proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 50.1 -<23837> +proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 50.2 -<23838> +proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 51.1 -<23839> +proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 51.2 -<23840> +proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 52.1 -<23841> +proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 52.2 -<23842> +proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 53.1 -<23843> +proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 53.2 -<23844> +proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / Indonesia TM-3 zone 54.1 -<23845> +proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ID74 / UTM zone 46N -<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 47N -<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 48N -<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 49N -<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 50N -<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 51N -<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 52N -<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 53N (deprecated) -<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# DGN95 / UTM zone 46N -<23866> +proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 47N -<23867> +proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 48N -<23868> +proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 49N -<23869> +proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 50N -<23870> +proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 51N -<23871> +proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 52N -<23872> +proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 47S -<23877> +proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 48S -<23878> +proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 49S -<23879> +proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 50S -<23880> +proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 51S -<23881> +proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 52S -<23882> +proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 53S -<23883> +proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# DGN95 / UTM zone 54S -<23884> +proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# ID74 / UTM zone 46S (deprecated) -<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 47S -<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 48S -<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 49S -<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 50S -<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 51S -<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 52S -<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 53S -<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# ID74 / UTM zone 54S -<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> -# Indian 1954 / UTM zone 46N -<23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> -# Indian 1954 / UTM zone 47N -<23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> -# Indian 1954 / UTM zone 48N -<23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> -# Indian 1975 / UTM zone 47N -<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Indian 1975 / UTM zone 48N -<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Jamaica 1875 / Jamaica (Old Grid) -<24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs <> -# JAD69 / Jamaica National Grid -<24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs <> -# Kalianpur 1937 / UTM zone 45N -<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Kalianpur 1937 / UTM zone 46N -<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Kalianpur 1962 / UTM zone 41N -<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> -# Kalianpur 1962 / UTM zone 42N -<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> -# Kalianpur 1962 / UTM zone 43N -<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> -# Kalianpur 1975 / UTM zone 42N -<24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / UTM zone 43N -<24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / UTM zone 44N -<24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / UTM zone 45N -<24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / UTM zone 46N -<24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / UTM zone 47N -<24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1880 / India zone 0 -<24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> -# Kalianpur 1880 / India zone I -<24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> -# Kalianpur 1880 / India zone IIa -<24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> -# Kalianpur 1880 / India zone III -<24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> -# Kalianpur 1880 / India zone IV -<24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> -# Kalianpur 1937 / India zone IIb -<24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> -# Kalianpur 1962 / India zone I -<24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> -# Kalianpur 1962 / India zone IIa -<24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> -# Kalianpur 1975 / India zone I -<24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / India zone IIa -<24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / India zone IIb -<24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1975 / India zone III -<24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kalianpur 1880 / India zone IIb -<24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> -# Kalianpur 1975 / India zone IV -<24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> -# Kertau 1968 / Singapore Grid -<24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> -# Kertau 1968 / UTM zone 47N -<24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> -# Kertau 1968 / UTM zone 48N -<24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> -# Kertau / R.S.O. Malaya (ch) (deprecated) -<24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs <> -# KOC Lambert -<24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs <> -# La Canoa / UTM zone 18N -<24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> -# La Canoa / UTM zone 19N -<24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> -# La Canoa / UTM zone 20N -<24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> -# PSAD56 / UTM zone 17N -<24817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 18N -<24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 19N -<24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 20N -<24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 21N -<24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 17S -<24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 18S -<24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 19S -<24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 20S -<24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 21S -<24881> +proj=utm +zone=21 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / UTM zone 22S -<24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> -# PSAD56 / Peru west zone -<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs <> -# PSAD56 / Peru central zone -<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs <> -# PSAD56 / Peru east zone -<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs <> -# Leigon / Ghana Metre Grid -<25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs <> -# Lome / UTM zone 31N -<25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Luzon 1911 / Philippines zone I -<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# Luzon 1911 / Philippines zone II -<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# Luzon 1911 / Philippines zone III -<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# Luzon 1911 / Philippines zone IV -<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# Luzon 1911 / Philippines zone V -<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> -# Makassar (Jakarta) / NEIEZ (deprecated) -<25700> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs <> -# ETRS89 / UTM zone 28N -<25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 29N -<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 30N -<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 31N -<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 32N -<25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 33N -<25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 34N -<25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 35N -<25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 36N -<25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 37N -<25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / UTM zone 38N -<25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / TM Baltic93 -<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Malongo 1987 / UTM zone 32S -<25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> -# Merchich / Nord Maroc -<26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> -# Merchich / Sud Maroc -<26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> -# Merchich / Sahara (deprecated) -<26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> -# Merchich / Sahara Nord -<26194> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> -# Merchich / Sahara Sud -<26195> +proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> -# Massawa / UTM zone 37N -<26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs <> -# Minna / UTM zone 31N -<26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> -# Minna / UTM zone 32N -<26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> -# Minna / Nigeria West Belt -<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs <> -# Minna / Nigeria Mid Belt -<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs <> -# Minna / Nigeria East Belt -<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs <> -# Mhast / UTM zone 32S (deprecated) -<26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs <> -# Monte Mario (Rome) / Italy zone 1 (deprecated) -<26591> +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> -# Monte Mario (Rome) / Italy zone 2 (deprecated) -<26592> +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> -# M'poraloko / UTM zone 32N -<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# M'poraloko / UTM zone 32S -<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> -# NAD27 / UTM zone 1N -<26701> +proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 2N -<26702> +proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 3N -<26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 4N -<26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 5N -<26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 6N -<26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 7N -<26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 8N -<26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 9N -<26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 10N -<26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 11N -<26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 12N -<26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 13N -<26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 14N -<26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 15N -<26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 16N -<26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 17N -<26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 18N -<26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 19N -<26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 20N -<26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 21N -<26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / UTM zone 22N -<26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Alabama East -<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alabama West -<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 1 -<26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 2 -<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 3 -<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 4 -<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 5 -<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 6 -<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 7 -<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 8 -<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 9 -<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Alaska zone 10 -<26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone I -<26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone II -<26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone III -<26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone IV -<26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone V -<26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone VI -<26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone VII (deprecated) -<26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Arizona East -<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Arizona Central -<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Arizona West -<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Arkansas North -<26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Arkansas South -<26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Colorado North -<26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Colorado Central -<26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Colorado South -<26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Connecticut -<26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Delaware -<26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Florida East -<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Florida West -<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Florida North -<26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Georgia East -<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Georgia West -<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Idaho East -<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Idaho Central -<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Idaho West -<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Illinois East -<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Illinois West -<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Indiana East -<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Indiana West -<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Iowa North -<26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Iowa South -<26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Kansas North -<26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Kansas South -<26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Kentucky North -<26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Kentucky South -<26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Louisiana North -<26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Louisiana South -<26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Maine East -<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Maine West -<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Maryland -<26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Massachusetts Mainland -<26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Massachusetts Island -<26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Minnesota North -<26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Minnesota Central -<26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Minnesota South -<26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Mississippi East -<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Mississippi West -<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Missouri East -<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Missouri Central -<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Missouri West -<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / California zone VII -<26799> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD Michigan / Michigan East -<26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> -# NAD Michigan / Michigan Old Central -<26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> -# NAD Michigan / Michigan West -<26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> -# NAD Michigan / Michigan North -<26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> -# NAD Michigan / Michigan Central -<26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> -# NAD Michigan / Michigan South -<26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> -# NAD83 / Maine East (ftUS) (deprecated) -<26814> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Maine West (ftUS) (deprecated) -<26815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Minnesota North (ftUS) (deprecated) -<26819> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Minnesota Central (ftUS) (deprecated) -<26820> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Minnesota South (ftUS) (deprecated) -<26821> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Nebraska (ftUS) (deprecated) -<26822> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / West Virginia North (ftUS) (deprecated) -<26823> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / West Virginia South (ftUS) (deprecated) -<26824> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83(HARN) / Maine East (ftUS) (deprecated) -<26825> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Maine West (ftUS) (deprecated) -<26826> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Minnesota North (ftUS) (deprecated) -<26830> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Minnesota Central (ftUS) (deprecated) -<26831> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Minnesota South (ftUS) (deprecated) -<26832> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / Nebraska (ftUS) (deprecated) -<26833> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / West Virginia North (ftUS) (deprecated) -<26834> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(HARN) / West Virginia South (ftUS) (deprecated) -<26835> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(NSRS2007) / Maine East (ftUS) (deprecated) -<26836> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Maine West (ftUS) (deprecated) -<26837> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated) -<26841> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated) -<26842> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated) -<26843> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / Nebraska (ftUS) (deprecated) -<26844> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated) -<26845> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated) -<26846> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD83 / Maine East (ftUS) -<26847> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Maine West (ftUS) -<26848> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Minnesota North (ftUS) -<26849> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Minnesota Central (ftUS) -<26850> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Minnesota South (ftUS) -<26851> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / Nebraska (ftUS) -<26852> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / West Virginia North (ftUS) -<26853> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / West Virginia South (ftUS) -<26854> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83(HARN) / Maine East (ftUS) -<26855> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Maine West (ftUS) -<26856> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Minnesota North (ftUS) -<26857> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Minnesota Central (ftUS) -<26858> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Minnesota South (ftUS) -<26859> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / Nebraska (ftUS) -<26860> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / West Virginia North (ftUS) -<26861> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(HARN) / West Virginia South (ftUS) -<26862> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Maine East (ftUS) -<26863> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Maine West (ftUS) -<26864> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Minnesota North (ftUS) -<26865> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Minnesota Central (ftUS) -<26866> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Minnesota South (ftUS) -<26867> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / Nebraska (ftUS) -<26868> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / West Virginia North (ftUS) -<26869> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(NSRS2007) / West Virginia South (ftUS) -<26870> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> -# NAD83(CSRS) / MTM zone 11 -<26891> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 12 -<26892> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 13 -<26893> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 14 -<26894> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 15 -<26895> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 16 -<26896> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 17 -<26897> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 1 -<26898> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83(CSRS) / MTM zone 2 -<26899> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# NAD83 / UTM zone 1N -<26901> +proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 2N -<26902> +proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 3N -<26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 4N -<26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 5N -<26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 6N -<26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 7N -<26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 8N -<26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 9N -<26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 10N -<26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 11N -<26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 12N -<26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 13N -<26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 14N -<26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 15N -<26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 16N -<26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 17N -<26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 18N -<26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 19N -<26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 20N -<26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 21N -<26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 22N -<26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / UTM zone 23N -<26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alabama East -<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alabama West -<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 1 -<26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 2 -<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 3 -<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 4 -<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 5 -<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 6 -<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 7 -<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 8 -<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 9 -<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Alaska zone 10 -<26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / California zone 1 -<26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / California zone 2 -<26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / California zone 3 -<26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / California zone 4 -<26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / California zone 5 -<26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / California zone 6 -<26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Arizona East -<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Arizona Central -<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Arizona West -<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Arkansas North -<26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Arkansas South -<26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Colorado North -<26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Colorado Central -<26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Colorado South -<26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Connecticut -<26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Delaware -<26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Florida East -<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Florida West -<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Florida North -<26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Hawaii zone 1 -<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Hawaii zone 2 -<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Hawaii zone 3 -<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Hawaii zone 4 -<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Hawaii zone 5 -<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Georgia East -<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Georgia West -<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Idaho East -<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Idaho Central -<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Idaho West -<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Illinois East -<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Illinois West -<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Indiana East -<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Indiana West -<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Iowa North -<26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Iowa South -<26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Kansas North -<26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Kansas South -<26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Kentucky North (deprecated) -<26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Kentucky South -<26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Louisiana North -<26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Louisiana South -<26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Maine East -<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Maine West -<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Maryland -<26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Massachusetts Mainland -<26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Massachusetts Island -<26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Michigan North -<26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Michigan Central -<26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Michigan South -<26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Minnesota North -<26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Minnesota Central -<26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Minnesota South -<26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Mississippi East -<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Mississippi West -<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Missouri East -<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Missouri Central -<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Missouri West -<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# Nahrwan 1967 / UTM zone 37N -<27037> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> -# Nahrwan 1967 / UTM zone 38N -<27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> -# Nahrwan 1967 / UTM zone 39N -<27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> -# Nahrwan 1967 / UTM zone 40N -<27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> -# Naparima 1972 / UTM zone 20N -<27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> -# NZGD49 / New Zealand Map Grid -<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Mount Eden Circuit -<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Bay of Plenty Circuit -<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Poverty Bay Circuit -<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Hawkes Bay Circuit -<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Taranaki Circuit -<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Tuhirangi Circuit -<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Wanganui Circuit -<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Wairarapa Circuit -<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Wellington Circuit -<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Collingwood Circuit -<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Nelson Circuit -<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Karamea Circuit -<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Buller Circuit -<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Grey Circuit -<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Amuri Circuit -<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Marlborough Circuit -<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Hokitika Circuit -<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Okarito Circuit -<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Jacksons Bay Circuit -<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Mount Pleasant Circuit -<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Gawler Circuit -<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Timaru Circuit -<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Lindis Peak Circuit -<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Mount Nicholas Circuit -<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Mount York Circuit -<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Observation Point Circuit -<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / North Taieri Circuit -<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / Bluff Circuit -<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / UTM zone 58S -<27258> +proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / UTM zone 59S -<27259> +proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / UTM zone 60S -<27260> +proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> -# NZGD49 / North Island Grid -<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> -# NZGD49 / South Island Grid -<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> -# NGO 1948 (Oslo) / NGO zone I -<27391> +proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone II -<27392> +proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone III -<27393> +proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone IV -<27394> +proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone V -<27395> +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone VI -<27396> +proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone VII -<27397> +proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# NGO 1948 (Oslo) / NGO zone VIII -<27398> +proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> -# Datum 73 / UTM zone 29N -<27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> -# Datum 73 / Modified Portuguese Grid (deprecated) -<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> -# Datum 73 / Modified Portuguese Grid -<27493> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> -# unnamed -<27500> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs <> -# NTF (Paris) / Lambert Nord France -<27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert Centre France -<27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert Sud France -<27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert Corse -<27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert zone I -<27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert zone II -<27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert zone III -<27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Lambert zone IV -<27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / France I (deprecated) -<27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / France II (deprecated) -<27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / France III (deprecated) -<27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / France IV (deprecated) -<27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Nord France (deprecated) -<27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Centre France (deprecated) -<27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Sud France (deprecated) -<27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# NTF (Paris) / Corse (deprecated) -<27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> -# OSGB 1936 / British National Grid -<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs <> -# Palestine 1923 / Palestine Grid -<28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> -# Palestine 1923 / Palestine Belt -<28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> -# Palestine 1923 / Israeli CS Grid -<28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> -# Pointe Noire / UTM zone 32S -<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> -# GDA94 / MGA zone 48 -<28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 49 -<28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 50 -<28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 51 -<28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 52 -<28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 53 -<28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 54 -<28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 55 -<28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 56 -<28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 57 -<28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# GDA94 / MGA zone 58 -<28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated) -<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated) -<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 4 -<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 5 -<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 6 -<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 7 -<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 8 -<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 9 -<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 10 -<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 11 -<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 12 -<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 13 -<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 14 -<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 15 -<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 16 -<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 17 -<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 18 -<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 19 -<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 20 -<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 21 -<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 22 -<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 23 -<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 24 -<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 25 -<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 26 -<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 27 -<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 28 -<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 29 -<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 30 -<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 31 -<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 32 -<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 2N (deprecated) -<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 3N (deprecated) -<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 4N (deprecated) -<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 5N (deprecated) -<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 6N (deprecated) -<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 7N (deprecated) -<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 8N (deprecated) -<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 9N (deprecated) -<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 10N (deprecated) -<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 11N (deprecated) -<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 12N (deprecated) -<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 13N (deprecated) -<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 14N (deprecated) -<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 15N (deprecated) -<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 16N (deprecated) -<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 17N (deprecated) -<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 18N (deprecated) -<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 19N (deprecated) -<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 20N (deprecated) -<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 21N (deprecated) -<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 22N (deprecated) -<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 23N (deprecated) -<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 24N (deprecated) -<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 25N (deprecated) -<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 26N (deprecated) -<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 27N (deprecated) -<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 28N (deprecated) -<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 29N (deprecated) -<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 30N (deprecated) -<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 31N (deprecated) -<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942 / Gauss-Kruger 32N (deprecated) -<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Qatar 1974 / Qatar National Grid -<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs <> -# Amersfoort / RD Old -<28991> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Amersfoort / RD New -<28992> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs <> -# SAD69 / Brazil Polyconic (deprecated) -<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs <> -# SAD69 / Brazil Polyconic -<29101> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 18N (deprecated) -<29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 19N (deprecated) -<29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 20N (deprecated) -<29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 21N (deprecated) -<29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 22N (deprecated) -<29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 18N -<29168> +proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 19N -<29169> +proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 20N -<29170> +proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 21N -<29171> +proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 22N -<29172> +proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 17S (deprecated) -<29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 18S (deprecated) -<29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 19S (deprecated) -<29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 20S (deprecated) -<29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 21S (deprecated) -<29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 22S (deprecated) -<29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 23S (deprecated) -<29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 24S (deprecated) -<29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 25S (deprecated) -<29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs <> -# SAD69 / UTM zone 17S -<29187> +proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 18S -<29188> +proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 19S -<29189> +proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 20S -<29190> +proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 21S -<29191> +proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 22S -<29192> +proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 23S -<29193> +proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 24S -<29194> +proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs <> -# SAD69 / UTM zone 25S -<29195> +proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs <> -# Sapper Hill 1943 / UTM zone 20S -<29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> -# Sapper Hill 1943 / UTM zone 21S -<29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> -# Schwarzeck / UTM zone 33S -<29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs <> -# Schwarzeck / Lo22/11 -# Unable to translate coordinate system EPSG:29371 into PROJ.4 format. -# -# Schwarzeck / Lo22/13 -# Unable to translate coordinate system EPSG:29373 into PROJ.4 format. -# -# Schwarzeck / Lo22/15 -# Unable to translate coordinate system EPSG:29375 into PROJ.4 format. -# -# Schwarzeck / Lo22/17 -# Unable to translate coordinate system EPSG:29377 into PROJ.4 format. -# -# Schwarzeck / Lo22/19 -# Unable to translate coordinate system EPSG:29379 into PROJ.4 format. -# -# Schwarzeck / Lo22/21 -# Unable to translate coordinate system EPSG:29381 into PROJ.4 format. -# -# Schwarzeck / Lo22/23 -# Unable to translate coordinate system EPSG:29383 into PROJ.4 format. -# -# Schwarzeck / Lo22/25 -# Unable to translate coordinate system EPSG:29385 into PROJ.4 format. -# -# Sudan / UTM zone 35N (deprecated) -<29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Sudan / UTM zone 36N (deprecated) -<29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Tananarive (Paris) / Laborde Grid (deprecated) -<29700> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> -# Tananarive (Paris) / Laborde Grid -# Unable to translate coordinate system EPSG:29701 into PROJ.4 format. -# -# Tananarive (Paris) / Laborde Grid approximation -<29702> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> -# Tananarive / UTM zone 38S -<29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> -# Tananarive / UTM zone 39S -<29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> -# Timbalai 1948 / UTM zone 49N -<29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs <> -# Timbalai 1948 / UTM zone 50N -<29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs <> -# Timbalai 1948 / RSO Borneo (ch) -<29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs <> -# Timbalai 1948 / RSO Borneo (ft) -<29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs <> -# Timbalai 1948 / RSO Borneo (m) -<29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs <> -# TM65 / Irish National Grid (deprecated) -<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> -# OSNI 1952 / Irish National Grid -<29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> -# TM65 / Irish Grid -<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> -# TM75 / Irish Grid -<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS I -<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS II -<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS III -<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS IV -<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS V -<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS VI -<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS VII -<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS VIII -<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS IX -<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS X -<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XI -<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XII -<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XIII -<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XIV -<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XV -<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XVI -<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XVII -<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XVIII -<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Tokyo / Japan Plane Rectangular CS XIX -<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Trinidad 1903 / Trinidad Grid -<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> -# TC(1948) / UTM zone 39N -<30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs <> -# TC(1948) / UTM zone 40N -<30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs <> -# Voirol 1875 / Nord Algerie (ancienne) -<30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> -# Voirol 1875 / Sud Algerie (ancienne) -<30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> -# Voirol 1879 / Nord Algerie (ancienne) -<30493> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Voirol 1879 / Sud Algerie (ancienne) -<30494> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Nord Sahara 1959 / UTM zone 29N -<30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> -# Nord Sahara 1959 / UTM zone 30N -<30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> -# Nord Sahara 1959 / UTM zone 31N -<30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> -# Nord Sahara 1959 / UTM zone 32N -<30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> -# Nord Sahara 1959 / Voirol Unifie Nord -<30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> -# Nord Sahara 1959 / Voirol Unifie Sud -<30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> -# RT38 2.5 gon W (deprecated) -<30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> -# Yoff / UTM zone 28N -<31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs <> -# Zanderij / UTM zone 21N -<31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> -# Zanderij / TM 54 NW -<31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> -# Zanderij / Suriname Old TM -<31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> -# Zanderij / Suriname TM -<31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> -# MGI (Ferro) / Austria GK West Zone -<31251> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria GK Central Zone -<31252> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria GK East Zone -<31253> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI / Austria GK West -<31254> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria GK Central -<31255> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria GK East -<31256> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria GK M28 -<31257> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria GK M31 -<31258> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria GK M34 -<31259> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / 3-degree Gauss zone 5 (deprecated) -<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / 3-degree Gauss zone 6 (deprecated) -<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / 3-degree Gauss zone 7 (deprecated) -<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / 3-degree Gauss zone 8 (deprecated) -<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Balkans zone 5 (deprecated) -<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Balkans zone 6 (deprecated) -<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Balkans zone 7 (deprecated) -<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Balkans zone 8 (deprecated) -<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Balkans zone 8 (deprecated) -<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI (Ferro) / Austria West Zone -<31281> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria Central Zone -<31282> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria East Zone -<31283> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI / Austria M28 -<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria M31 -<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria M34 -<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria Lambert -<31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI (Ferro) / M28 -<31288> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / M31 -<31289> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / M34 -<31290> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria West Zone (deprecated) -<31291> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria Central Zone (deprecated) -<31292> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI (Ferro) / Austria East Zone (deprecated) -<31293> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> -# MGI / M28 (deprecated) -<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / M31 (deprecated) -<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / M34 (deprecated) -<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# MGI / Austria Lambert (deprecated) -<31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> -# Belge 1972 / Belge Lambert 72 -<31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> -# Belge 1972 / Belgian Lambert 72 -<31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> -# DHDN / 3-degree Gauss zone 1 (deprecated) -<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss zone 2 (deprecated) -<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss zone 3 (deprecated) -<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss zone 4 (deprecated) -<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss zone 5 (deprecated) -<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss-Kruger zone 2 -<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss-Kruger zone 3 -<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss-Kruger zone 4 -<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# DHDN / 3-degree Gauss-Kruger zone 5 -<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> -# Conakry 1905 / UTM zone 28N -<31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> -# Conakry 1905 / UTM zone 29N -<31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> -# Dealul Piscului 1930 / Stereo 33 -<31600> +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs <> -# Dealul Piscului 1970/ Stereo 70 (deprecated) -<31700> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> -# NGN / UTM zone 38N -<31838> +proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> -# NGN / UTM zone 39N -<31839> +proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> -# KUDAMS / KTM (deprecated) -<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# KUDAMS / KTM -<31901> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 11N -<31965> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 12N -<31966> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 13N -<31967> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 14N -<31968> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 15N -<31969> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 16N -<31970> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 17N -<31971> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 18N -<31972> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 19N -<31973> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 20N -<31974> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 21N -<31975> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 22N -<31976> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 17S -<31977> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 18S -<31978> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 19S -<31979> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 20S -<31980> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 21S -<31981> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 22S -<31982> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 23S -<31983> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 24S -<31984> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 2000 / UTM zone 25S -<31985> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 17N -<31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 18N -<31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 19N -<31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 20N -<31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 21N -<31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 22N -<31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 17S -<31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 18S -<31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 19S -<31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 20S -<31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 21S -<31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 22S -<31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 23S -<31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 24S -<31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# SIRGAS 1995 / UTM zone 25S -<32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> -# NAD27 / Montana North -<32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Montana Central -<32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Montana South -<32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Nebraska North -<32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Nebraska South -<32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Nevada East -<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Nevada Central -<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Nevada West -<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New Hampshire -<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New Jersey -<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New Mexico East -<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New Mexico Central -<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New Mexico West -<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New York East -<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New York Central -<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New York West -<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New York Long Island -<32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / North Carolina -<32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / North Dakota North -<32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / North Dakota South -<32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Ohio North -<32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Ohio South -<32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Oklahoma North -<32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Oklahoma South -<32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Oregon North -<32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Oregon South -<32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Pennsylvania North -<32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Pennsylvania South -<32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Rhode Island -<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / South Carolina North -<32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / South Carolina South -<32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / South Dakota North -<32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / South Dakota South -<32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Tennessee (deprecated) -<32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Texas North -<32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Texas North Central -<32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Texas Central -<32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Texas South Central -<32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Texas South -<32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Utah North -<32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Utah Central -<32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Utah South -<32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Vermont -<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Virginia North -<32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Virginia South -<32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Washington North -<32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Washington South -<32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / West Virginia North -<32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / West Virginia South -<32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wisconsin North -<32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wisconsin Central -<32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wisconsin South -<32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wyoming East -<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wyoming East Central -<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wyoming West Central -<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Wyoming West -<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Guatemala Norte -<32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Guatemala Sur -<32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / BLM 14N (ftUS) -<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 15N (ftUS) -<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 16N (ftUS) -<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 17N (ftUS) -<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 14N (feet) (deprecated) -<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 15N (feet) (deprecated) -<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 16N (feet) (deprecated) -<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / BLM 17N (feet) (deprecated) -<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / MTM zone 1 -<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / MTM zone 2 -<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / MTM zone 3 -<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / MTM zone 4 -<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / MTM zone 5 -<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / MTM zone 6 -<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Quebec Lambert -<32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Louisiana Offshore -<32099> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD83 / Montana -<32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Nebraska -<32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Nevada East -<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Nevada Central -<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Nevada West -<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New Hampshire -<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New Jersey -<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New Mexico East -<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New Mexico Central -<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New Mexico West -<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New York East -<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New York Central -<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New York West -<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / New York Long Island -<32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / North Carolina -<32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / North Dakota North -<32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / North Dakota South -<32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Ohio North -<32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Ohio South -<32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Oklahoma North -<32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Oklahoma South -<32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Oregon North -<32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Oregon South -<32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Pennsylvania North -<32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Pennsylvania South -<32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Rhode Island -<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / South Carolina -<32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / South Dakota North -<32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / South Dakota South -<32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Tennessee -<32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas North -<32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas North Central -<32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas Central -<32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas South Central -<32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Texas South -<32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Utah North -<32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Utah Central -<32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Utah South -<32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Vermont -<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Virginia North -<32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Virginia South -<32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Washington North -<32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Washington South -<32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / West Virginia North -<32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / West Virginia South -<32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wisconsin North -<32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wisconsin Central -<32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wisconsin South -<32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wyoming East -<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wyoming East Central -<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wyoming West Central -<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Wyoming West -<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Puerto Rico & Virgin Is. -<32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / BLM 14N (ftUS) -<32164> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / BLM 15N (ftUS) -<32165> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / BLM 16N (ftUS) -<32166> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / BLM 17N (ftUS) -<32167> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / SCoPQ zone 2 -<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 1 -<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 2 -<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 3 -<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 4 -<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 5 -<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 6 -<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 7 -<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 8 -<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 9 -<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 10 -<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 11 -<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 12 -<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 13 -<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 14 -<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 15 -<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 16 -<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / MTM zone 17 -<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Quebec Lambert -<32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# NAD83 / Louisiana Offshore -<32199> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> -# WGS 72 / UTM zone 1N -<32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 2N -<32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 3N -<32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 4N -<32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 5N -<32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 6N -<32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 7N -<32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 8N -<32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 9N -<32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 10N -<32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 11N -<32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 12N -<32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 13N -<32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 14N -<32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 15N -<32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 16N -<32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 17N -<32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 18N -<32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 19N -<32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 20N -<32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 21N -<32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 22N -<32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 23N -<32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 24N -<32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 25N -<32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 26N -<32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 27N -<32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 28N -<32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 29N -<32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 30N -<32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 31N -<32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 32N -<32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 33N -<32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 34N -<32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 35N -<32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 36N -<32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 37N -<32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 38N -<32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 39N -<32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 40N -<32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 41N -<32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 42N -<32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 43N -<32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 44N -<32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 45N -<32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 46N -<32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 47N -<32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 48N -<32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 49N -<32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 50N -<32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 51N -<32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 52N -<32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 53N -<32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 54N -<32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 55N -<32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 56N -<32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 57N -<32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 58N -<32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 59N -<32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 60N -<32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 1S -<32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 2S -<32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 3S -<32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 4S -<32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 5S -<32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 6S -<32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 7S -<32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 8S -<32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 9S -<32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 10S -<32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 11S -<32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 12S -<32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 13S -<32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 14S -<32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 15S -<32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 16S -<32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 17S -<32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 18S -<32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 19S -<32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 20S -<32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 21S -<32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 22S -<32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 23S -<32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 24S -<32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 25S -<32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 26S -<32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 27S -<32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 28S -<32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 29S -<32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 30S -<32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 31S -<32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 32S -<32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 33S -<32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 34S -<32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 35S -<32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 36S -<32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 37S -<32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 38S -<32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 39S -<32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 40S -<32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 41S -<32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 42S -<32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 43S -<32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 44S -<32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 45S -<32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 46S -<32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 47S -<32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 48S -<32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 49S -<32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 50S -<32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 51S -<32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 52S -<32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 53S -<32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 54S -<32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 55S -<32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 56S -<32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 57S -<32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 58S -<32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 59S -<32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72 / UTM zone 60S -<32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs <> -# WGS 72BE / UTM zone 1N -<32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 2N -<32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 3N -<32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 4N -<32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 5N -<32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 6N -<32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 7N -<32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 8N -<32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 9N -<32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 10N -<32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 11N -<32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 12N -<32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 13N -<32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 14N -<32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 15N -<32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 16N -<32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 17N -<32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 18N -<32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 19N -<32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 20N -<32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 21N -<32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 22N -<32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 23N -<32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 24N -<32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 25N -<32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 26N -<32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 27N -<32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 28N -<32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 29N -<32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 30N -<32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 31N -<32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 32N -<32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 33N -<32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 34N -<32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 35N -<32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 36N -<32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 37N -<32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 38N -<32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 39N -<32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 40N -<32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 41N -<32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 42N -<32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 43N -<32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 44N -<32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 45N -<32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 46N -<32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 47N -<32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 48N -<32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 49N -<32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 50N -<32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 51N -<32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 52N -<32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 53N -<32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 54N -<32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 55N -<32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 56N -<32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 57N -<32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 58N -<32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 59N -<32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 60N -<32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 1S -<32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 2S -<32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 3S -<32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 4S -<32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 5S -<32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 6S -<32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 7S -<32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 8S -<32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 9S -<32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 10S -<32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 11S -<32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 12S -<32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 13S -<32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 14S -<32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 15S -<32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 16S -<32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 17S -<32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 18S -<32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 19S -<32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 20S -<32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 21S -<32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 22S -<32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 23S -<32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 24S -<32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 25S -<32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 26S -<32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 27S -<32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 28S -<32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 29S -<32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 30S -<32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 31S -<32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 32S -<32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 33S -<32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 34S -<32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 35S -<32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 36S -<32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 37S -<32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 38S -<32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 39S -<32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 40S -<32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 41S -<32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 42S -<32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 43S -<32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 44S -<32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 45S -<32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 46S -<32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 47S -<32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 48S -<32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 49S -<32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 50S -<32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 51S -<32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 52S -<32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 53S -<32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 54S -<32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 55S -<32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 56S -<32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 57S -<32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 58S -<32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 59S -<32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 72BE / UTM zone 60S -<32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> -# WGS 84 / UTM grid system (northern hemisphere) -# Unable to translate coordinate system EPSG:32600 into PROJ.4 format. -# -# WGS 84 / UTM zone 1N -<32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 2N -<32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 3N -<32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 4N -<32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 5N -<32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 6N -<32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 7N -<32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 8N -<32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 9N -<32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 10N -<32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 11N -<32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 12N -<32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 13N -<32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 14N -<32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 15N -<32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 16N -<32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 17N -<32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 18N -<32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 19N -<32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 20N -<32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 21N -<32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 22N -<32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 23N -<32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 24N -<32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 25N -<32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 26N -<32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 27N -<32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 28N -<32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 29N -<32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 30N -<32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 31N -<32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 32N -<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 33N -<32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 34N -<32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 35N -<32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 36N -<32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 37N -<32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 38N -<32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 39N -<32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 40N -<32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 41N -<32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 42N -<32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 43N -<32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 44N -<32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 45N -<32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 46N -<32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 47N -<32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 48N -<32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 49N -<32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 50N -<32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 51N -<32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 52N -<32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 53N -<32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 54N -<32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 55N -<32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 56N -<32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 57N -<32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 58N -<32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 59N -<32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 60N -<32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UPS North -<32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / Plate Carree (deprecated) -<32662> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / World Equidistant Cylindrical (deprecated) -# Unable to translate coordinate system EPSG:32663 into PROJ.4 format. -# -# WGS 84 / BLM 14N (ftUS) -<32664> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> -# WGS 84 / BLM 15N (ftUS) -<32665> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> -# WGS 84 / BLM 16N (ftUS) -<32666> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> -# WGS 84 / BLM 17N (ftUS) -<32667> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> -# WGS 84 / UTM grid system (southern hemisphere) -# Unable to translate coordinate system EPSG:32700 into PROJ.4 format. -# -# WGS 84 / UTM zone 1S -<32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 2S -<32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 3S -<32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 4S -<32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 5S -<32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 6S -<32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 7S -<32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 8S -<32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 9S -<32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 10S -<32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 11S -<32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 12S -<32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 13S -<32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 14S -<32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 15S -<32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 16S -<32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 17S -<32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 18S -<32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 19S -<32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 20S -<32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 21S -<32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 22S -<32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 23S -<32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 24S -<32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 25S -<32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 26S -<32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 27S -<32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 28S -<32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 29S -<32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 30S -<32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 31S -<32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 32S -<32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 33S -<32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 34S -<32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 35S -<32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 36S -<32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 37S -<32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 38S -<32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 39S -<32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 40S -<32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 41S -<32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 42S -<32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 43S -<32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 44S -<32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 45S -<32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 46S -<32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 47S -<32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 48S -<32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 49S -<32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 50S -<32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 51S -<32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 52S -<32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 53S -<32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 54S -<32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 55S -<32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 56S -<32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 57S -<32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 58S -<32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 59S -<32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UTM zone 60S -<32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UPS South -<32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / TM 36 SE -<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> diff --git a/src/3rdparty/proj/proj_data/esri b/src/3rdparty/proj/proj_data/esri deleted file mode 100644 index ddee64b1..00000000 --- a/src/3rdparty/proj/proj_data/esri +++ /dev/null @@ -1,5937 +0,0 @@ -# Anguilla 1957 / British West Indies Grid -<2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> -# Antigua 1943 / British West Indies Grid -<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs no_defs <> -# Dominica 1945 / British West Indies Grid -<2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs no_defs <> -# Grenada 1953 / British West Indies Grid -<2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs no_defs <> -# Montserrat 58 / British West Indies Grid -<2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs no_defs <> -# St Kitts 1955 / British West Indies Grid -<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs no_defs <> -# St Lucia 1955 / British West Indies Grid -<2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs no_defs <> -# St Vincent 45 / British West Indies Grid -<2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 2 -<2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 3 -<2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 4 -<2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 5 -<2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 6 -<2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 7 -<2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 8 -<2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 9 -<2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / SCoPQ zone 10 -<2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 8 -<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 9 -<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 10 -<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 11 -<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 12 -<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 13 -<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 14 -<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 15 -<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 16 -<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / MTM zone 17 -<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / UTM zone 15N -<2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / UTM zone 16N -<2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / UTM zone 17N -<2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(76) / UTM zone 18N -<2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / UTM zone 17N -<2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / UTM zone 18N -<2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / UTM zone 19N -<2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / UTM zone 20N -<2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / UTM zone 21N -<2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / New Brunswick Stereo -<2036> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 19N -<2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 20N -<2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Israel / Israeli TM Grid -<2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.000007 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs no_defs <> -# Locodjo 1965 / UTM zone 30N -<2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> -# Abidjan 1987 / UTM zone 30N -<2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> -# Locodjo 1965 / UTM zone 29N -<2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> -# Abidjan 1987 / UTM zone 29N -<2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> -# Hanoi 1972 / Gauss-Kruger zone 18 -<2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> -# Hanoi 1972 / Gauss-Kruger zone 19 -<2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> -# Hartebeesthoek94 / Lo15 -# Hartebeesthoek94 / Lo17 -# Hartebeesthoek94 / Lo19 -# Hartebeesthoek94 / Lo21 -# Hartebeesthoek94 / Lo23 -# Hartebeesthoek94 / Lo25 -# Hartebeesthoek94 / Lo27 -# Hartebeesthoek94 / Lo29 -# Hartebeesthoek94 / Lo31 -# Hartebeesthoek94 / Lo33 -# CH1903+ / LV95 -<2056> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs no_defs <> -# Rassadiran / Nakhl e Taqi -<2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs no_defs <> -# ED50(ED77) / UTM zone 38N -<2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> -# ED50(ED77) / UTM zone 39N -<2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> -# ED50(ED77) / UTM zone 40N -<2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs no_defs <> -# ED50(ED77) / UTM zone 41N -<2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs no_defs <> -# Madrid 1870 (Madrid) / Spain -<2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=-3.687938888888889 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669562 +pm=madrid +units=m +no_defs no_defs <> -# Dabola 1981 / UTM zone 28N -<2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> -# Dabola 1981 / UTM zone 29N -<2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> -# S-JTSK (Ferro) / Krovak -<2065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# Mount Dillon / Tobago Grid -<2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66154375 +y_0=36209.915082 +a=6378293.63683822 +b=6356617.979337744 +to_meter=0.2011661949 +no_defs no_defs <> -# Naparima 1955 / UTM zone 20N -<2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 5 -<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 6 -<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 7 -<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 8 -<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 9 -<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 10 -<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 11 -<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 12 -<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / Libya zone 13 -<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / UTM zone 32N -<2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / UTM zone 33N -<2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / UTM zone 34N -<2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> -# ELD79 / UTM zone 35N -<2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> -# Chos Malal 1914 / Argentina zone 2 -<2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Pampa del Castillo / Argentina zone 2 -<2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Hito XVIII 1963 / Argentina zone 2 -<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> -# Hito XVIII 1963 / UTM zone 19S -<2084> +proj=utm +zone=19 +south +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> -# NAD27 / Cuba Norte -<2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / Cuba Sur -<2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# ELD79 / TM 12 NE -<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Carthage / TM 11 NE -<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999600 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Yemen NGN96 / UTM zone 38N -<2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Yemen NGN96 / UTM zone 39N -<2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# South Yemen / Gauss Kruger zone 8 -<2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> -# South Yemen / Gauss Kruger zone 9 -<2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> -# Hanoi 1972 / GK 106 NE -<2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> -# WGS 72BE / TM 106 NE -<2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# Bissau / UTM zone 28N -<2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs no_defs <> -# Korean 1985 / Korea East Belt -<2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> -# Korean 1985 / Korea Central Belt -<2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> -# Korean 1985 / Korea West Belt -<2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> -# Qatar 1948 / Qatar Grid -<2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs no_defs <> -# GGRS87 / Greek Grid -<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs no_defs <> -# Lake / Maracaibo Grid M1 -<2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs no_defs <> -# Lake / Maracaibo Grid -<2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs no_defs <> -# Lake / Maracaibo Grid M3 -<2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs no_defs <> -# Lake / Maracaibo La Rosa Grid -<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs no_defs <> -# NZGD2000 / Mount Eden Circuit 2000 -<2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.999900 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Bay of Plenty Circuit 2000 -<2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Poverty Bay Circuit 2000 -<2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Hawkes Bay Circuit 2000 -<2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Taranaki Circuit 2000 -<2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Tuhirangi Circuit 2000 -<2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Wanganui Circuit 2000 -<2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Wairarapa Circuit 2000 -<2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Wellington Circuit 2000 -<2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Collingwood Circuit 2000 -<2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Nelson Circuit 2000 -<2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Karamea Circuit 2000 -<2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Buller Circuit 2000 -<2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Grey Circuit 2000 -<2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Amuri Circuit 2000 -<2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Marlborough Circuit 2000 -<2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Hokitika Circuit 2000 -<2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Okarito Circuit 2000 -<2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Jacksons Bay Circuit 2000 -<2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Mount Pleasant Circuit 2000 -<2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Gawler Circuit 2000 -<2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Timaru Circuit 2000 -<2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Lindis Peak Circuit 2000 -<2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Mount Nicholas Circuit 2000 -<2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Mount York Circuit 2000 -<2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Observation Point Circuit 2000 -<2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / North Taieri Circuit 2000 -<2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.999960 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / Bluff Circuit 2000 -<2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / UTM zone 58S -<2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / UTM zone 59S -<2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NZGD2000 / UTM zone 60S -<2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Accra / Ghana National Grid -<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs no_defs <> -# Accra / TM 1 NW -<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.999600 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs no_defs <> -# NAD27(CGQ77) / Quebec Lambert -<2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / SCoPQ zone 2 -<2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 3 -<2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 4 -<2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 5 -<2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 6 -<2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 7 -<2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 8 -<2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 9 -<2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / MTM zone 10 -<2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 21N -<2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 18N -<2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 17N -<2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 13N -<2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 12N -<2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / UTM zone 11N -<2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# RGF93 / Lambert-93 -<2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# American Samoa 1962 / American Samoa Lambert -<2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / UTM zone 59S -<2156> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# IRENET95 / Irish Transverse Mercator -<2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.999820 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# IRENET95 / UTM zone 29N -<2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Sierra Leone 1924 / New Colony Grid -<2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> -# Sierra Leone 1924 / New War Office Grid -<2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> -# Sierra Leone 1968 / UTM zone 28N -<2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <> -# Sierra Leone 1968 / UTM zone 29N -<2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <> -# US National Atlas Equal Area -<2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs no_defs <> -# Locodjo 1965 / TM 5 NW -<2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> -# Abidjan 1987 / TM 5 NW -<2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> -# Pulkovo 1942(83) / Gauss Kruger zone 3 -<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> -# Pulkovo 1942(83) / Gauss Kruger zone 4 -<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> -# Pulkovo 1942(83) / Gauss Kruger zone 5 -<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> -# Luxembourg 1930 / Gauss -<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1.000000 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs no_defs <> -# MGI / Slovenia Grid -<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Pulkovo 1942(58) / Poland zone I -<2171> +proj=stere +lat_0=50.625 +lon_0=21.08333333333333 +k=0.999800 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> -# Pulkovo 1942(58) / Poland zone II -<2172> +proj=stere +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.999800 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> -# Pulkovo 1942(58) / Poland zone III -<2173> +proj=stere +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.999800 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> -# Pulkovo 1942(58) / Poland zone IV -<2174> +proj=stere +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.999800 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> -# Pulkovo 1942(58) / Poland zone V -<2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> -# ETRS89 / Poland CS2000 zone 5 -<2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / Poland CS2000 zone 6 -<2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / Poland CS2000 zone 7 -<2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / Poland CS2000 zone 8 -<2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / Poland CS92 -<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999300 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs no_defs <> -# Azores Occidental 1939 / UTM zone 25N -<2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs no_defs <> -# Azores Central 1948 / UTM zone 26N -<2189> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> -# Azores Oriental 1940 / UTM zone 26N -<2190> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> -# Madeira 1936 / UTM zone 28N -<2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / France EuroLambert -<2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD2000 / New Zealand Transverse Mercator -<2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.999600 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# American Samoa 1962 / American Samoa Lambert -<2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / UTM zone 2S -<2195> +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# ETRS89 / Kp2000 Jutland -<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.999950 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / Kp2000 Zealand -<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999950 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / Kp2000 Bornholm -<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# Albanian 1987 / Gauss Kruger zone 4 -<2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# ATS77 / New Brunswick Stereographic (ATS77) -<2200> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# REGVEN / UTM zone 18N -<2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# REGVEN / UTM zone 19N -<2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# REGVEN / UTM zone 20N -<2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD27 / Tennessee -<2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Kentucky North -<2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 9 -<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 10 -<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 11 -<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 12 -<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 13 -<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 14 -<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / 3-degree Gauss-Kruger zone 15 -<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ETRS89 / TM 30 NE -<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# Douala 1948 / AOF west -<2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> -# Manoca 1962 / UTM zone 32N -<2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs no_defs <> -# Qornoq 1927 / UTM zone 22N -<2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs no_defs <> -# Qornoq 1927 / UTM zone 23N -<2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs no_defs <> -# ATS77 / UTM zone 19N -<2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# ATS77 / UTM zone 20N -<2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# NAD83 / Arizona East (ft) -<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Arizona Central (ft) -<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Arizona West (ft) -<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / California zone 1 (ftUS) -<2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / California zone 2 (ftUS) -<2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / California zone 3 (ftUS) -<2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / California zone 4 (ftUS) -<2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / California zone 5 (ftUS) -<2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / California zone 6 (ftUS) -<2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Colorado North (ftUS) -<2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Colorado Central (ftUS) -<2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Colorado South (ftUS) -<2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Connecticut (ftUS) -<2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Delaware (ftUS) -<2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Florida East (ftUS) -<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Florida West (ftUS) -<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Florida North (ftUS) -<2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Georgia East (ftUS) -<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Georgia West (ftUS) -<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Idaho East (ftUS) -<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Idaho Central (ftUS) -<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Idaho West (ftUS) -<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Indiana East (ftUS) -<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Indiana West (ftUS) -<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Kentucky North (ftUS) -<2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Kentucky South (ftUS) -<2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Maryland (ftUS) -<2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Massachusetts Mainland (ftUS) -<2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Massachusetts Island (ftUS) -<2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Michigan North (ft) -<2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Michigan Central (ft) -<2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Michigan South (ft) -<2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Mississippi East (ftUS) -<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Mississippi West (ftUS) -<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Montana (ft) -<2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / New Mexico East (ftUS) -<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / New Mexico Central (ftUS) -<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / New Mexico West (ftUS) -<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / New York East (ftUS) -<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / New York Central (ftUS) -<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / New York West (ftUS) -<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / New York Long Island (ftUS) -<2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / North Carolina (ftUS) -<2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / North Dakota North (ft) -<2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / North Dakota South (ft) -<2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Oklahoma North (ftUS) -<2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Oklahoma South (ftUS) -<2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Oregon North (ft) -<2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Oregon South (ft) -<2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Pennsylvania North (ftUS) -<2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Pennsylvania South (ftUS) -<2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / South Carolina (ft) -<2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Tennessee (ftUS) -<2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Texas North (ftUS) -<2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Texas North Central (ftUS) -<2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Texas Central (ftUS) -<2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Texas South Central (ftUS) -<2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Texas South (ftUS) -<2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Utah North (ft) -<2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Utah Central (ft) -<2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Utah South (ft) -<2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> -# NAD83 / Virginia North (ftUS) -<2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Virginia South (ftUS) -<2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Washington North (ftUS) -<2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Washington South (ftUS) -<2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Wisconsin North (ftUS) -<2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Wisconsin Central (ftUS) -<2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / Wisconsin South (ftUS) -<2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# ATS77 / Prince Edward Isl. Stereographic (ATS77) -<2290> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) -<2291> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) -<2292> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# ATS77 / MTM Nova Scotia zone 4 -<2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# ATS77 / MTM Nova Scotia zone 5 -<2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> -# Batavia / TM 109 SE -<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs no_defs <> -# WGS 84 / TM 116 SE -<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / TM 132 SE -<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / TM 6 NE -<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# Garoua / UTM zone 33N -<2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> -# Kousseri / UTM zone 33N -<2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> -# Trinidad 1903 / Trinidad Grid (ftCla) -<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380699999 +y_0=65379.01334249999 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.304797265 +no_defs no_defs <> -# Campo Inchauspe / UTM zone 19S -<2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / UTM zone 20S -<2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / ICN Regional -<2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> -# Ain el Abd / Aramco Lambert -<2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM27 -<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM30 -<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM33 -<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM36 -<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM39 -<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM42 -<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM45 -<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Hong Kong 1980 Grid System -<2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 13 -<2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 14 -<2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 15 -<2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 16 -<2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 17 -<2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 18 -<2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 19 -<2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 20 -<2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 21 -<2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 22 -<2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger zone 23 -<2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 75E -<2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 81E -<2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 87E -<2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 93E -<2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 99E -<2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 105E -<2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 111E -<2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 117E -<2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 123E -<2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 129E -<2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / Gauss-Kruger CM 135E -<2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 25 -<2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 26 -<2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 27 -<2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 28 -<2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 29 -<2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 30 -<2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 31 -<2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 32 -<2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 33 -<2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 34 -<2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 35 -<2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 36 -<2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 37 -<2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 38 -<2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 39 -<2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 40 -<2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 41 -<2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 42 -<2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 43 -<2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 44 -<2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger zone 45 -<2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 75E -<2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 78E -<2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 81E -<2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 84E -<2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 87E -<2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 90E -<2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 93E -<2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 96E -<2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 99E -<2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 102E -<2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 105E -<2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 108E -<2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 111E -<2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 114E -<2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 117E -<2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 120E -<2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 123E -<2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 126E -<2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 129E -<2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 132E -<2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# Xian 1980 / 3-degree Gauss-Kruger CM 135E -<2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> -# KKJ / Finland zone 1 -<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> -# KKJ / Finland zone 2 -<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> -# KKJ / Finland Uniform Coordinate System -<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> -# KKJ / Finland zone 4 -<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> -# South Yemen / Gauss-Kruger zone 8 -<2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> -# South Yemen / Gauss-Kruger zone 9 -<2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> -# Pulkovo 1942(83) / Gauss-Kruger zone 3 -<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> -# Pulkovo 1942(83) / Gauss-Kruger zone 4 -<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> -# Pulkovo 1942(83) / Gauss-Kruger zone 5 -<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> -# RT90 2.5 gon W -<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 25 -<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 26 -<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 27 -<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 28 -<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 29 -<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 30 -<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 31 -<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 32 -<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 33 -<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 34 -<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 35 -<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 36 -<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 37 -<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 38 -<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 39 -<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 40 -<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 41 -<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 42 -<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 43 -<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 44 -<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger zone 45 -<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 75E -<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 78E -<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 81E -<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 84E -<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 87E -<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 90E -<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 93E -<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 96E -<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 99E -<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 102E -<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 105E -<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 108E -<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 111E -<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 114E -<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 117E -<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 120E -<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 123E -<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 126E -<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 129E -<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 132E -<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / 3-degree Gauss-Kruger CM 135E -<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS I -<2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS II -<2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS III -<2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS IV -<2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS V -<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS VI -<2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS VII -<2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS VIII -<2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS IX -<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS X -<2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XI -<2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XII -<2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XIII -<2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XIV -<2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XV -<2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XVI -<2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XVII -<2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XVIII -<2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# JGD2000 / Japan Plane Rectangular CS XIX -<2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Albanian 1987 / Gauss-Kruger zone 4 -<2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 21E -<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 27E -<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 33E -<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 39E -<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 45E -<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 51E -<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 57E -<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 63E -<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 69E -<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 75E -<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 81E -<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 87E -<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 93E -<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 99E -<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 105E -<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 111E -<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 117E -<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 123E -<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 129E -<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 135E -<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 141E -<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 147E -<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 153E -<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 159E -<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 165E -<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 171E -<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 177E -<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 177W -<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger CM 171W -<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 9E -<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 15E -<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 21E -<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 27E -<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 33E -<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 39E -<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 45E -<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 51E -<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 57E -<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 63E -<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 69E -<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 75E -<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 81E -<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 87E -<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 93E -<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 99E -<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 105E -<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 111E -<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 117E -<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 123E -<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 129E -<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 135E -<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 141E -<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 147E -<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 153E -<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 159E -<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 165E -<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 171E -<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 177E -<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 177W -<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger CM 171W -<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 -<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 -<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 -<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 -<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 -<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 -<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 -<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 -<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 -<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 -<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 -<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 -<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 -<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 -<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 -<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 -<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 -<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 -<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 -<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 -<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 -<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 -<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 -<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 -<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 -<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 -<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 -<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Samboja / UTM zone 50S -<2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 -<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 -<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 -<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 -<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 -<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 -<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 -<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 -<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 -<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 -<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 -<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 -<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 -<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 -<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 -<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 -<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 -<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 -<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 -<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 -<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 -<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 -<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 -<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 -<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 -<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 -<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 -<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 -<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 -<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 -<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 -<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E -<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E -<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E -<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E -<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E -<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E -<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E -<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E -<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E -<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E -<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E -<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E -<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E -<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E -<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E -<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E -<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E -<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E -<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Lietuvos Koordinoei Sistema 1994 -<2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999800 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E -<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E -<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E -<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E -<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E -<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E -<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E -<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E -<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E -<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E -<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E -<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E -<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E -<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E -<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E -<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E -<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E -<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E -<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E -<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E -<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E -<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E -<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E -<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E -<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E -<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E -<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E -<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E -<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E -<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E -<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E -<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E -<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E -<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E -<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E -<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E -<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W -<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W -<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W -<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W -<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 -<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 -<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 -<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 -<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 -<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 -<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 -<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 -<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 -<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 -<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 -<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 -<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 -<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 -<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 -<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 -<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 -<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 -<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 -<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 -<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 -<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 -<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 -<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 -<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 -<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 -<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 -<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 -<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 -<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 -<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 -<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 -<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 -<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 -<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 -<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 -<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 -<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 -<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 -<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 -<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 -<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 -<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 -<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 -<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 -<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 -<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 -<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 -<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 -<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 -<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 -<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 -<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 -<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 -<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 -<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 -<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 -<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 -<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E -<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E -<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E -<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E -<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E -<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E -<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E -<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E -<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E -<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E -<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E -<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E -<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E -<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E -<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E -<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E -<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E -<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E -<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E -<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E -<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E -<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E -<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E -<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E -<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E -<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E -<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E -<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E -<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E -<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E -<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E -<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E -<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E -<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E -<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E -<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E -<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E -<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Tete / UTM zone 36S -<2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs no_defs <> -# Tete / UTM zone 37S -<2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E -<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E -<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E -<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E -<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E -<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E -<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E -<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E -<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E -<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E -<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E -<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E -<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E -<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E -<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E -<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E -<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E -<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W -<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W -<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W -<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W -<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# NAD83(HARN) / Alabama East -<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Alabama West -<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Arizona East -<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Arizona Central -<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Arizona West -<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Arkansas North -<2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Arkansas South -<2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / California zone 1 -<2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / California zone 2 -<2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / California zone 3 -<2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / California zone 4 -<2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / California zone 5 -<2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / California zone 6 -<2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Colorado North -<2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Colorado Central -<2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Colorado South -<2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Connecticut -<2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Delaware -<2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Florida East -<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Florida West -<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Florida North -<2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Georgia East -<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Georgia West -<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Hawaii zone 1 -<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Hawaii zone 2 -<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Hawaii zone 3 -<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Hawaii zone 4 -<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Hawaii zone 5 -<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Idaho East -<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Idaho Central -<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Idaho West -<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Illinois East -<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Illinois West -<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Indiana East -<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Indiana West -<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Iowa North -<2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Iowa South -<2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Kansas North -<2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Kansas South -<2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Kentucky North -<2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Kentucky South -<2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Louisiana North -<2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Louisiana South -<2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Maine East -<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Maine West -<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Maryland -<2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Massachusetts Mainland -<2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Massachusetts Island -<2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Michigan North -<2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Michigan Central -<2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Michigan South -<2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Minnesota North -<2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Minnesota Central -<2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Minnesota South -<2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Mississippi East -<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Mississippi West -<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Missouri East -<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Missouri Central -<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Missouri West -<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Montana -<2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Nebraska -<2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Nevada East -<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Nevada Central -<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Nevada West -<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New Hampshire -<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New Jersey -<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New Mexico East -<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New Mexico Central -<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New Mexico West -<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New York East -<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New York Central -<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New York West -<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / New York Long Island -<2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / North Dakota North -<2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / North Dakota South -<2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Ohio North -<2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Ohio South -<2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Oklahoma North -<2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Oklahoma South -<2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Oregon North -<2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Oregon South -<2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Rhode Island -<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / South Dakota North -<2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / South Dakota South -<2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Tennessee -<2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Texas North -<2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Texas North Central -<2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Texas Central -<2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Texas South Central -<2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Texas South -<2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Utah North -<2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Utah Central -<2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Utah South -<2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Vermont -<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Virginia North -<2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Virginia South -<2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Washington North -<2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Washington South -<2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / West Virginia North -<2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / West Virginia South -<2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wisconsin North -<2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wisconsin Central -<2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wisconsin South -<2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wyoming East -<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wyoming East Central -<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wyoming West Central -<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Wyoming West -<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Puerto Rico & Virgin Is. -<2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(HARN) / Arizona East (ft) -<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Arizona Central (ft) -<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Arizona West (ft) -<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / California zone 1 (ftUS) -<2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / California zone 2 (ftUS) -<2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / California zone 3 (ftUS) -<2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / California zone 4 (ftUS) -<2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / California zone 5 (ftUS) -<2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / California zone 6 (ftUS) -<2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Colorado North (ftUS) -<2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Colorado Central (ftUS) -<2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Colorado South (ftUS) -<2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Connecticut (ftUS) -<2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Delaware (ftUS) -<2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Florida East (ftUS) -<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Florida West (ftUS) -<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Florida North (ftUS) -<2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Georgia East (ftUS) -<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Georgia West (ftUS) -<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Idaho East (ftUS) -<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Idaho Central (ftUS) -<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Idaho West (ftUS) -<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Indiana East (ftUS) -<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Indiana West (ftUS) -<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Kentucky North (ftUS) -<2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Kentucky South (ftUS) -<2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Maryland (ftUS) -<2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Massachusetts Mainland (ftUS) -<2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Massachusetts Island (ftUS) -<2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Michigan North (ft) -<2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Michigan Central (ft) -<2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Michigan South (ft) -<2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Mississippi East (ftUS) -<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Mississippi West (ftUS) -<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Montana (ft) -<2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / New Mexico East (ftUS) -<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / New Mexico Central (ftUS) -<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / New Mexico West (ftUS) -<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / New York East (ftUS) -<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / New York Central (ftUS) -<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / New York West (ftUS) -<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / New York Long Island (ftUS) -<2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / North Dakota North (ft) -<2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / North Dakota South (ft) -<2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Oklahoma North (ftUS) -<2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Oklahoma South (ftUS) -<2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Oregon North (ft) -<2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Oregon South (ft) -<2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Tennessee (ftUS) -<2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Texas North (ftUS) -<2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Texas North Central (ftUS) -<2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Texas Central (ftUS) -<2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Texas South Central (ftUS) -<2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Texas South (ftUS) -<2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Utah North (ft) -<2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Utah Central (ft) -<2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Utah South (ft) -<2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> -# NAD83(HARN) / Virginia North (ftUS) -<2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Virginia South (ftUS) -<2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Washington North (ftUS) -<2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Washington South (ftUS) -<2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Wisconsin North (ftUS) -<2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Wisconsin Central (ftUS) -<2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83(HARN) / Wisconsin South (ftUS) -<2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Beduaram / TM 13 NE -<2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999600 +x_0=500000.0000000001 +y_0=0 +a=6378249.2 +b=6356515 +to_meter=0.3048006096012192 +no_defs no_defs <> -# QND95 / Qatar National Grid -<2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs no_defs <> -# Segara / UTM zone 50S -<2933> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> -# Segara (Jakarta) / NEIEZ -<2934> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone A1 -<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1.000000 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone A2 -<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone A3 -<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone A4 -<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone K2 -<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone K3 -<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / CS63 zone K4 -<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Porto Santo / UTM zone 28N -<2942> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> -# Selvagem Grande / UTM zone 28N -<2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> -# NAD83(CSRS) / SCoPQ zone 2 -<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 3 -<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 4 -<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 5 -<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 6 -<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 7 -<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 8 -<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 9 -<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / MTM zone 10 -<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / New Brunswick Stereo -<2953> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) -<2954> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 11N -<2955> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 12N -<2956> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 13N -<2957> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 17N -<2958> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 18N -<2959> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 19N -<2960> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 20N -<2961> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD83(CSRS) / UTM zone 21N -<2962> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Moznet / UTM zone 36S -<3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <> -# Moznet / UTM zone 37S -<3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <> -# Indian 1960 / UTM zone 48N -<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Indian 1960 / UTM zone 49N -<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Indian 1960 / TM 106 NE -<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# FD58 / Iraq zone -<3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <> -# Estonian Coordinate System of 1992 -<3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs no_defs <> -# Estonian Coordinate System of 1997 -<3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# PSD93 / UTM zone 39N -<3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> -# PSD93 / UTM zone 40N -<3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> -# Old Hawaiian / Hawaii zone 1 -<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Old Hawaiian / Hawaii zone 2 -<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Old Hawaiian / Hawaii zone 3 -<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Old Hawaiian / Hawaii zone 4 -<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Old Hawaiian / Hawaii zone 5 -<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Puerto Rico / UTM zone 20N -<3920> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> -# Puerto Rico State Plane CS of 1927 -<3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Puerto Rico / St. Croix -<3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> -# Unknown datum based upon the Airy 1830 ellipsoid -<4001> +proj=longlat +ellps=airy +no_defs no_defs <> -# Unknown datum based upon the Airy Modified 1849 ellipsoid -<4002> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> -# Unknown datum based upon the Australian National Spheroid -<4003> +proj=longlat +ellps=aust_SA +no_defs no_defs <> -# Unknown datum based upon the Bessel 1841 ellipsoid -<4004> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Unknown datum based upon the Bessel Modified ellipsoid -<4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs no_defs <> -# Unknown datum based upon the Bessel Namibia ellipsoid -<4006> +proj=longlat +ellps=bess_nam +no_defs no_defs <> -# Unknown datum based upon the Clarke 1858 ellipsoid -<4007> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1866 ellipsoid -<4008> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1866 Michigan ellipsoid -<4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid -<4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1880 (IGN) ellipsoid -<4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1880 (RGS) ellipsoid -<4012> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1880 (Arc) ellipsoid -<4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid -<4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs no_defs <> -# Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid -<4015> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> -# Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid -<4016> +proj=longlat +ellps=evrstSS +no_defs no_defs <> -# Unknown datum based upon the Everest 1830 Modified ellipsoid -<4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs no_defs <> -# Unknown datum based upon the GRS 1980 ellipsoid -<4019> +proj=longlat +ellps=GRS80 +no_defs no_defs <> -# Unknown datum based upon the Helmert 1906 ellipsoid -<4020> +proj=longlat +ellps=helmert +no_defs no_defs <> -# Unknown datum based upon the Indonesian National Spheroid -<4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> -# Unknown datum based upon the International 1924 ellipsoid -<4022> +proj=longlat +ellps=intl +no_defs no_defs <> -# Unknown datum based upon the Krassowsky 1940 ellipsoid -<4024> +proj=longlat +ellps=krass +no_defs no_defs <> -# Unknown datum based upon the NWL 9D ellipsoid -<4025> +proj=longlat +ellps=WGS66 +no_defs no_defs <> -# Unknown datum based upon the Plessis 1817 ellipsoid -<4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs no_defs <> -# Unknown datum based upon the Struve 1860 ellipsoid -<4028> +proj=longlat +a=6378298.3 +b=6356657.142669562 +no_defs no_defs <> -# Unknown datum based upon the War Office ellipsoid -<4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> -# Unknown datum based upon the WGS 84 ellipsoid -<4030> +proj=longlat +ellps=WGS84 +no_defs no_defs <> -# Unknown datum based upon the GEM 10C ellipsoid -<4031> +proj=longlat +ellps=WGS84 +no_defs no_defs <> -# Unknown datum based upon the OSU86F ellipsoid -<4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs no_defs <> -# Unknown datum based upon the OSU91A ellipsoid -<4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs no_defs <> -# Unknown datum based upon the Clarke 1880 ellipsoid -<4034> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Unknown datum based upon the Authalic Sphere -<4035> +proj=longlat +a=6371000 +b=6371000 +no_defs no_defs <> -# Unknown datum based upon the GRS 1967 ellipsoid -<4036> +proj=longlat +ellps=GRS67 +no_defs no_defs <> -# Unknown datum based upon the Average Terrestrial System 1977 ellipsoid -<4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> -# Unknown datum based upon the Everest (1830 Definition) ellipsoid -<4042> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> -# Unknown datum based upon the WGS 72 ellipsoid -<4043> +proj=longlat +ellps=WGS72 +no_defs no_defs <> -# Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid -<4044> +proj=longlat +a=6377301.243 +b=6356100.230165385 +no_defs no_defs <> -# Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid -<4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs no_defs <> -# Unspecified based upon the GRS 1980 Authalic Sphere -<4047> +proj=longlat +a=6370997 +b=6370997 +no_defs no_defs <> -# Greek -<4120> +proj=longlat +ellps=bessel +no_defs no_defs <> -# GGRS87 -<4121> +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs no_defs <> -# ATS77 -<4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> -# KKJ -<4123> +proj=longlat +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +no_defs no_defs <> -# RT90 -<4124> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Samboja -<4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> -# LKS94 (ETRS89) -<4126> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Tete -<4127> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Madzansua -<4128> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Observatario -<4129> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Moznet -<4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs no_defs <> -# Indian 1960 -<4131> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> -# FD58 -<4132> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# EST92 -<4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs no_defs <> -# PDO Survey Datum 1993 -<4134> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Old Hawaiian -<4135> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# St. Lawrence Island -<4136> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# St. Paul Island -<4137> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# St. George Island -<4138> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Puerto Rico -<4139> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# NAD83(CSRS98) -<4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Israel -<4141> +proj=longlat +ellps=GRS80 +no_defs no_defs <> -# Locodjo 1965 -<4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs no_defs <> -# Abidjan 1987 -<4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs no_defs <> -# Kalianpur 1937 -<4144> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> -# Kalianpur 1962 -<4145> +proj=longlat +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +no_defs no_defs <> -# Kalianpur 1975 -<4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs no_defs <> -# Hanoi 1972 -<4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs no_defs <> -# Hartebeesthoek94 -<4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# CH1903 -<4149> +proj=longlat +ellps=bessel +no_defs no_defs <> -# CH1903+ -<4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs no_defs <> -# CHTRF95 -<4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# NAD83(HARN) -<4152> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Rassadiran -<4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs no_defs <> -# ED50(ED77) -<4154> +proj=longlat +ellps=intl +no_defs no_defs <> -# Dabola 1981 -<4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs no_defs <> -# S-JTSK -<4156> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Mount Dillon -<4157> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> -# Naparima 1955 -<4158> +proj=longlat +ellps=intl +no_defs no_defs <> -# ELD79 -<4159> +proj=longlat +ellps=intl +no_defs no_defs <> -# Chos Malal 1914 -<4160> +proj=longlat +ellps=intl +no_defs no_defs <> -# Pampa del Castillo -<4161> +proj=longlat +ellps=intl +no_defs no_defs <> -# Korean 1985 -<4162> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Yemen NGN96 -<4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# South Yemen -<4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs no_defs <> -# Bissau -<4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs no_defs <> -# Korean 1995 -<4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# NZGD2000 -<4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Accra -<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs no_defs <> -# American Samoa 1962 -<4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs no_defs <> -# SIRGAS -<4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# RGF93 -<4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# POSGAR -<4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# IRENET95 -<4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Sierra Leone 1924 -<4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> -# Sierra Leone 1968 -<4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs no_defs <> -# Australian Antarctic -<4176> +proj=longlat +ellps=GRS80 +no_defs no_defs <> -# Pulkovo 1942(83) -<4178> +proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs no_defs <> -# Pulkovo 1942(58) -<4179> +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs no_defs <> -# EST97 -<4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Luxembourg 1930 -<4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs no_defs <> -# Azores Occidental 1939 -<4182> +proj=longlat +ellps=intl +no_defs no_defs <> -# Azores Central 1948 -<4183> +proj=longlat +ellps=intl +no_defs no_defs <> -# Azores Oriental 1940 -<4184> +proj=longlat +ellps=intl +no_defs no_defs <> -# Madeira 1936 -<4185> +proj=longlat +ellps=intl +no_defs no_defs <> -# OSNI 1952 -<4188> +proj=longlat +ellps=airy +no_defs no_defs <> -# REGVEN -<4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# POSGAR 98 -<4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Albanian 1987 -<4191> +proj=longlat +ellps=krass +no_defs no_defs <> -# Douala 1948 -<4192> +proj=longlat +ellps=intl +no_defs no_defs <> -# Manoca 1962 -<4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> -# Qornoq 1927 -<4194> +proj=longlat +ellps=intl +no_defs no_defs <> -# Scoresbysund 1952 -<4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs no_defs <> -# Ammassalik 1958 -<4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs no_defs <> -# Garoua -<4197> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Kousseri -<4198> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Egypt 1930 -<4199> +proj=longlat +ellps=intl +no_defs no_defs <> -# Pulkovo 1995 -<4200> +proj=longlat +ellps=krass +no_defs no_defs <> -# Adindan -<4201> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# AGD66 -<4202> +proj=longlat +ellps=aust_SA +no_defs no_defs <> -# AGD84 -<4203> +proj=longlat +ellps=aust_SA +no_defs no_defs <> -# Ain el Abd -<4204> +proj=longlat +ellps=intl +no_defs no_defs <> -# Afgooye -<4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs no_defs <> -# Agadez -<4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Lisbon -<4207> +proj=longlat +ellps=intl +no_defs no_defs <> -# Aratu -<4208> +proj=longlat +ellps=intl +no_defs no_defs <> -# Arc 1950 -<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> -# Arc 1960 -<4210> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Batavia -<4211> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Barbados 1938 -<4212> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Beduaram -<4213> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Beijing 1954 -<4214> +proj=longlat +ellps=krass +no_defs no_defs <> -# Belge 1950 -<4215> +proj=longlat +ellps=intl +no_defs no_defs <> -# Bermuda 1957 -<4216> +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs no_defs <> -# Bogota 1975 -<4218> +proj=longlat +ellps=intl +no_defs no_defs <> -# Bukit Rimpah -<4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs no_defs <> -# Camacupa -<4220> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Campo Inchauspe -<4221> +proj=longlat +ellps=intl +no_defs no_defs <> -# Cape -<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> -# Carthage -<4223> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Chua -<4224> +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs no_defs <> -# Corrego Alegre -<4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs no_defs <> -# Cote d'Ivoire -<4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Deir ez Zor -<4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Douala -<4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Egypt 1907 -<4229> +proj=longlat +ellps=helmert +no_defs no_defs <> -# ED50 -<4230> +proj=longlat +ellps=intl +no_defs no_defs <> -# ED87 -<4231> +proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.5076,0.1503,0.3898,-0.3143 +no_defs no_defs <> -# Fahud -<4232> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Gandajika 1970 -<4233> +proj=longlat +ellps=intl +no_defs no_defs <> -# Garoua -<4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Guyane Francaise -<4235> +proj=longlat +ellps=intl +no_defs no_defs <> -# Hu Tzu Shan -<4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs no_defs <> -# HD72 -<4237> +proj=longlat +ellps=GRS67 +no_defs no_defs <> -# ID74 -<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> -# Indian 1954 -<4239> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +no_defs no_defs <> -# Indian 1975 -<4240> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> -# Jamaica 1875 -<4241> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# JAD69 -<4242> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Kalianpur 1880 -<4243> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> -# Kandawala -<4244> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=-97,787,86,0,0,0,0 +no_defs no_defs <> -# Kertau -<4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs no_defs <> -# KOC -<4246> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# La Canoa -<4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs no_defs <> -# PSAD56 -<4248> +proj=longlat +ellps=intl +no_defs no_defs <> -# Lake -<4249> +proj=longlat +ellps=intl +no_defs no_defs <> -# Leigon -<4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs no_defs <> -# Liberia 1964 -<4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs no_defs <> -# Lome -<4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Luzon 1911 -<4253> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Hito XVIII 1963 -<4254> +proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +no_defs no_defs <> -# Herat North -<4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs no_defs <> -# Mahe 1971 -<4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs no_defs <> -# Makassar -<4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs no_defs <> -# ETRS89 -<4258> +proj=longlat +ellps=GRS80 +no_defs no_defs <> -# Malongo 1987 -<4259> +proj=longlat +ellps=intl +no_defs no_defs <> -# Manoca -<4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> -# Merchich -<4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs no_defs <> -# Massawa -<4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs no_defs <> -# Minna -<4263> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Mhast -<4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs no_defs <> -# Monte Mario -<4265> +proj=longlat +ellps=intl +no_defs no_defs <> -# M'poraloko -<4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# NAD27 -<4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs no_defs <> -# NAD27 Michigan -<4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> -# NAD83 -<4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs no_defs <> -# Nahrwan 1967 -<4270> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Naparima 1972 -<4271> +proj=longlat +ellps=intl +no_defs no_defs <> -# NZGD49 -<4272> +proj=longlat +ellps=intl +no_defs no_defs <> -# NGO 1948 -<4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs no_defs <> -# Datum 73 -<4274> +proj=longlat +ellps=intl +no_defs no_defs <> -# NTF -<4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs no_defs <> -# NSWC 9Z-2 -<4276> +proj=longlat +ellps=WGS66 +no_defs no_defs <> -# OSGB 1936 -<4277> +proj=longlat +ellps=airy +no_defs no_defs <> -# OSGB70 -<4278> +proj=longlat +ellps=airy +no_defs no_defs <> -# OS(SN)80 -<4279> +proj=longlat +ellps=airy +no_defs no_defs <> -# Padang -<4280> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Palestine 1923 -<4281> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> -# Pointe Noire -<4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# GDA94 -<4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Pulkovo 1942 -<4284> +proj=longlat +ellps=krass +no_defs no_defs <> -# Qatar 1974 -<4285> +proj=longlat +ellps=intl +no_defs no_defs <> -# Qatar 1948 -<4286> +proj=longlat +ellps=helmert +no_defs no_defs <> -# Qornoq -<4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs no_defs <> -# Loma Quintana -<4288> +proj=longlat +ellps=intl +no_defs no_defs <> -# Amersfoort -<4289> +proj=longlat +ellps=bessel +no_defs no_defs <> -# SAD69 -<4291> +proj=longlat +ellps=GRS67 +no_defs no_defs <> -# Sapper Hill 1943 -<4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs no_defs <> -# Schwarzeck -<4293> +proj=longlat +ellps=bess_nam +no_defs no_defs <> -# Segora -<4294> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Serindung -<4295> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Sudan -<4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Tananarive -<4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs no_defs <> -# Timbalai 1948 -<4298> +proj=longlat +ellps=evrstSS +no_defs no_defs <> -# TM65 -<4299> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> -# TM75 -<4300> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> -# Tokyo -<4301> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Trinidad 1903 -<4302> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs no_defs <> -# TC(1948) -<4303> +proj=longlat +ellps=helmert +no_defs no_defs <> -# Voirol 1875 -<4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs no_defs <> -# Bern 1938 -<4306> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Nord Sahara 1959 -<4307> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# RT38 -<4308> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Yacare -<4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs no_defs <> -# Yoff -<4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> -# Zanderij -<4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs no_defs <> -# MGI -<4312> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Belge 1972 -<4313> +proj=longlat +ellps=intl +no_defs no_defs <> -# DHDN -<4314> +proj=longlat +ellps=bessel +no_defs no_defs <> -# Conakry 1905 -<4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs no_defs <> -# Dealul Piscului 1933 -<4316> +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs no_defs <> -# Dealul Piscului 1970 -<4317> +proj=longlat +ellps=krass +no_defs no_defs <> -# NGN -<4318> +proj=longlat +ellps=WGS84 +no_defs no_defs <> -# KUDAMS -<4319> +proj=longlat +ellps=GRS80 +no_defs no_defs <> -# WGS 72 -<4322> +proj=longlat +ellps=WGS72 +no_defs no_defs <> -# WGS 72BE -<4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs no_defs <> -# WGS 84 -<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <> -# Anguilla 1957 -<4600> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# Antigua 1943 -<4601> +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs no_defs <> -# Dominica 1945 -<4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs no_defs <> -# Grenada 1953 -<4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs no_defs <> -# Montserrat 1958 -<4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs no_defs <> -# St. Kitts 1955 -<4605> +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs no_defs <> -# St. Lucia 1955 -<4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs no_defs <> -# St. Vincent 1945 -<4607> +proj=longlat +ellps=clrk80 +no_defs no_defs <> -# NAD27(76) -<4608> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# NAD27(CGQ77) -<4609> +proj=longlat +ellps=clrk66 +no_defs no_defs <> -# Xian 1980 -<4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs no_defs <> -# Hong Kong 1980 -<4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs no_defs <> -# JGD2000 -<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Segara -<4613> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> -# QND95 -<4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs no_defs <> -# Porto Santo -<4615> +proj=longlat +ellps=intl +no_defs no_defs <> -# Selvagem Grande -<4616> +proj=longlat +ellps=intl +no_defs no_defs <> -# NAD83(CSRS) -<4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> -# Bern 1898 (Bern) -<4801> +proj=longlat +ellps=bessel +pm=bern +no_defs no_defs <> -# Bogota 1975 (Bogota) -<4802> +proj=longlat +ellps=intl +pm=bogota +no_defs no_defs <> -# Lisbon (Lisbon) -<4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs no_defs <> -# Makassar (Jakarta) -<4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs no_defs <> -# MGI (Ferro) -<4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> -# Monte Mario (Rome) -<4806> +proj=longlat +ellps=intl +pm=rome +no_defs no_defs <> -# NTF (Paris) -<4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs no_defs <> -# Padang (Jakarta) -<4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> -# Belge 1950 (Brussels) -<4809> +proj=longlat +ellps=intl +pm=brussels +no_defs no_defs <> -# Tananarive (Paris) -<4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs no_defs <> -# Voirol 1875 (Paris) -<4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs no_defs <> -# Batavia (Jakarta) -<4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> -# RT38 (Stockholm) -<4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs no_defs <> -# Greek (Athens) -<4815> +proj=longlat +ellps=bessel +pm=athens +no_defs no_defs <> -# Carthage (Paris) -<4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs no_defs <> -# NGO 1948 (Oslo) -<4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs no_defs <> -# S-JTSK (Ferro) -<4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> -# Nord Sahara 1959 (Paris) -<4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs no_defs <> -# Segara (Jakarta) -<4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> -# ATF (Paris) -<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> -# NDG (Paris) -<4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> -# Madrid 1870 (Madrid) -<4903> +proj=longlat +a=6378298.3 +b=6356657.142669562 +pm=madrid +no_defs no_defs <> -# Lisbon 1890 (Lisbon) -<4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 4 -<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 5 -<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 6 -<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 7 -<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 8 -<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 9 -<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 10 -<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 11 -<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 12 -<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 13 -<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 14 -<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 15 -<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 16 -<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 17 -<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 18 -<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 19 -<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 20 -<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 21 -<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 22 -<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 23 -<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 24 -<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 25 -<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 26 -<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 27 -<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 28 -<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 29 -<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 30 -<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 31 -<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger zone 32 -<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 4N -<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 5N -<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 6N -<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 7N -<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 8N -<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 9N -<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 10N -<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 11N -<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 12N -<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 13N -<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 14N -<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 15N -<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 16N -<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 17N -<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 18N -<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 19N -<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 20N -<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 21N -<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 22N -<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 23N -<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 24N -<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 25N -<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 26N -<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 27N -<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 28N -<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 29N -<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 30N -<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 31N -<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1995 / Gauss-Kruger 32N -<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Adindan / UTM zone 37N -<20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> -# Adindan / UTM zone 38N -<20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> -# AGD66 / AMG zone 48 -<20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 49 -<20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 50 -<20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 51 -<20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 52 -<20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 53 -<20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 54 -<20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 55 -<20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 56 -<20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 57 -<20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD66 / AMG zone 58 -<20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 48 -<20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 49 -<20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 50 -<20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 51 -<20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 52 -<20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 53 -<20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 54 -<20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 55 -<20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 56 -<20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 57 -<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# AGD84 / AMG zone 58 -<20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> -# Ain el Abd / UTM zone 37N -<20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> -# Ain el Abd / UTM zone 38N -<20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> -# Ain el Abd / UTM zone 39N -<20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> -# Ain el Abd / Bahrain Grid -<20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> -# Afgooye / UTM zone 38N -<20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <> -# Afgooye / UTM zone 39N -<20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <> -# Lisbon (Lisbon)/Portuguese National Grid -<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> -# Lisbon (Lisbon)/Portuguese Grid -<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> -# Aratu / UTM zone 22S -<20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> -# Aratu / UTM zone 23S -<20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs no_defs <> -# Aratu / UTM zone 24S -<20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs no_defs <> -# Arc 1950 / UTM zone 34S -<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> -# Arc 1950 / UTM zone 35S -<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> -# Arc 1950 / UTM zone 36S -<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> -# Arc 1960 / UTM zone 35S -<21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs no_defs <> -# Arc 1960 / UTM zone 36S -<21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs no_defs <> -# Arc 1960 / UTM zone 37S -<21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs no_defs <> -# Arc 1960 / UTM zone 35N -<21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs no_defs <> -# Arc 1960 / UTM zone 36N -<21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs no_defs <> -# Arc 1960 / UTM zone 37N -<21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> -# Batavia (Jakarta) / NEIEZ -<21100> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> -# Batavia / UTM zone 48S -<21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs no_defs <> -# Batavia / UTM zone 49S -<21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs no_defs <> -# Batavia / UTM zone 50S -<21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs no_defs <> -# Barbados 1938 / British West Indies Grid -<21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> -# Barbados 1938 / Barbados National Grid -<21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.999999 +x_0=30000 +y_0=75000 +ellps=clrk80 +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 13 -<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 14 -<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 15 -<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 16 -<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 17 -<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 18 -<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 19 -<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 20 -<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 21 -<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 22 -<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger zone 23 -<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 75E -<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 81E -<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 87E -<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 93E -<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 99E -<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 105E -<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 111E -<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 117E -<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 123E -<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 129E -<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger CM 135E -<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 13N -<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 14N -<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 15N -<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 16N -<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 17N -<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 18N -<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 19N -<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 20N -<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 21N -<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 22N -<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Beijing 1954 / Gauss-Kruger 23N -<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Belge 1950 (Brussels) / Belge Lambert 50 -<21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.367975 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs no_defs <> -# Bern 1898 (Bern) / LV03C -<21780> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs no_defs <> -# CH1903 / LV03 -<21781> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +no_defs no_defs <> -# Bogota 1975 / UTM zone 17N -<21817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs no_defs <> -# Bogota 1975 / UTM zone 18N -<21818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> -# Bogota 1975 / Colombia West zone -<21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> -# Bogota 1975 / Colombia Bogota zone -<21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> -# Bogota 1975 / Colombia East Central zone -<21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> -# Bogota 1975 / Colombia East -<21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> -# Camacupa / UTM zone 32S -<22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs no_defs <> -# Camacupa / UTM zone 33S -<22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs no_defs <> -# Camacupa / TM 11.30 SE -<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> -# Camacupa / TM 12 SE -<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 1 -<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 2 -<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 3 -<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 4 -<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 5 -<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 6 -<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Campo Inchauspe / Argentina 7 -<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Cape / UTM zone 34S -<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> -# Cape / UTM zone 35S -<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> -# Cape / UTM zone 36S -<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> -# South African Coordinate System zone 15 -# South African Coordinate System zone 17 -# South African Coordinate System zone 19 -# South African Coordinate System zone 21 -# South African Coordinate System zone 23 -# South African Coordinate System zone 25 -# South African Coordinate System zone 27 -# South African Coordinate System zone 29 -# South African Coordinate System zone 31 -# South African Coordinate System zone 33 -# Carthage (Paris) / Tunisia Mining Grid -# Carthage / UTM zone 32N -<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Carthage / Nord Tunisie -<22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Carthage / Sud Tunisie -<22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Corrego Alegre / UTM zone 23S -<22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> -# Corrego Alegre / UTM zone 24S -<22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> -# Deir ez Zor / Levant Zone -<22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Deir ez Zor / Syria Lambert -<22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Deir ez Zor / Levant Stereographic -<22780> +proj=stere +lat_0=34.2 +lon_0=39.15 +k=0.999534 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Douala / UTM zone 32N -<22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Egypt 1907 / Blue Belt -<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1.000000 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs no_defs <> -# Egypt 1907 / Red Belt -<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1.000000 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs no_defs <> -# Egypt 1907 / Purple Belt -<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs no_defs <> -# Egypt 1907 / Extended Purple Belt -<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs no_defs <> -# ED50 / UTM zone 28N -<23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 29N -<23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 30N -<23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 31N -<23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 32N -<23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 33N -<23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 34N -<23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 35N -<23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 36N -<23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 37N -<23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / UTM zone 38N -<23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM 0 N -<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# ED50 / TM 5 NE -<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> -# Fahud / UTM zone 39N -<23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> -# Fahud / UTM zone 40N -<23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> -# Garoua / UTM zone 33N -<23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# HD72 / EOV -<23700> +proj=omerc +lat_0=47.14439372222222 +lonc=19.04857177777778 +alpha=90 +k=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs no_defs <> -# ID74 / UTM zone 46N -<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 47N -<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 48N -<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 49N -<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 50N -<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 51N -<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 52N -<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 53N -<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 46S -<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 47S -<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 48S -<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 49S -<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 50S -<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 51S -<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 52S -<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 53S -<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# ID74 / UTM zone 54S -<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> -# Indian 1954 / UTM zone 46N -<23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> -# Indian 1954 / UTM zone 47N -<23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> -# Indian 1954 / UTM zone 48N -<23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> -# Indian 1975 / UTM zone 47N -<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Indian 1975 / UTM zone 48N -<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Jamaica 1875 / Jamaica (Old Grid) -<24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49575 +y_0=121918.906 +ellps=clrk80 +to_meter=0.304797265 +no_defs no_defs <> -# JAD69 / Jamaica National Grid -<24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs no_defs <> -# Kalianpur 1937 / UTM zone 45N -<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Kalianpur 1937 / UTM zone 46N -<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Kalianpur 1962 / UTM zone 41N -<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1962 / UTM zone 42N -<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1962 / UTM zone 43N -<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / UTM zone 42N -<24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / UTM zone 43N -<24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / UTM zone 44N -<24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / UTM zone 45N -<24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / UTM zone 46N -<24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / UTM zone 47N -<24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1880 / India zone 0 -<24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> -# Kalianpur 1880 / India zone I -<24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> -# Kalianpur 1880 / India zone IIa -<24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> -# Kalianpur 1880 / India zone III -<24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> -# Kalianpur 1880 / India zone IV -<24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> -# Kalianpur 1937 / India zone IIb -<24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> -# Kalianpur 1962 / India zone I -<24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1962 / India zone IIa -<24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / India zone I -<24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / India zone IIa -<24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / India zone IIb -<24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1975 / India zone III -<24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kalianpur 1880 / India zone IIb -<24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> -# Kalianpur 1975 / India zone IV -<24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> -# Kertau / Singapore Grid -<24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> -# Kertau / UTM zone 47N -<24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> -# Kertau / UTM zone 48N -<24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> -# Kertau / R.S.O. Malaya (ch) -<24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs no_defs <> -# KOC Lambert -<24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <> -# La Canoa / UTM zone 18N -<24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> -# La Canoa / UTM zone 19N -<24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> -# La Canoa / UTM zone 20N -<24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 18N -<24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 19N -<24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 20N -<24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 21N -<24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 17S -<24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 18S -<24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 19S -<24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 20S -<24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / UTM zone 22S -<24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / Peru west zone -<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.999830 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / Peru central zone -<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.999330 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs no_defs <> -# PSAD56 / Peru east zone -<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.999530 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs no_defs <> -# Leigon / Ghana Metre Grid -<25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs no_defs <> -# Lome / UTM zone 31N -<25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Luzon 1911 / Philippines zone I -<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# Luzon 1911 / Philippines zone II -<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# Luzon 1911 / Philippines zone III -<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# Luzon 1911 / Philippines zone IV -<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# Luzon 1911 / Philippines zone V -<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> -# Makassar (Jakarta) / NEIEZ -<25700> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 28N -<25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 29N -<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 30N -<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 31N -<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 32N -<25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 33N -<25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 34N -<25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 35N -<25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 36N -<25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 37N -<25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / UTM zone 38N -<25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs no_defs <> -# ETRS89 / TM Baltic93 -<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# Malongo 1987 / UTM zone 32S -<25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs no_defs <> -# Merchich / Nord Maroc -<26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> -# Merchich / Sud Maroc -<26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> -# Merchich / Sahara -<26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> -# Massawa / UTM zone 37N -<26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs no_defs <> -# Minna / UTM zone 31N -<26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> -# Minna / UTM zone 32N -<26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> -# Minna / Nigeria West Belt -<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.999750 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> -# Minna / Nigeria Mid Belt -<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.999750 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> -# Minna / Nigeria East Belt -<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.999750 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> -# Mhast / UTM zone 32S -<26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs no_defs <> -# Monte Mario (Rome) / Italy zone 1 -<26591> +proj=tmerc +lat_0=0 +lon_0=21.45233333333333 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> -# Monte Mario (Rome) / Italy zone 2 -<26592> +proj=tmerc +lat_0=0 +lon_0=27.45233333333333 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> -# M'poraloko / UTM zone 32N -<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# M'poraloko / UTM zone 32S -<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 3N -<26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 4N -<26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 5N -<26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 6N -<26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 7N -<26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 8N -<26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 9N -<26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 10N -<26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 11N -<26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 12N -<26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 13N -<26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 14N -<26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 15N -<26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 16N -<26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 17N -<26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 18N -<26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 19N -<26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 20N -<26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 21N -<26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / UTM zone 22N -<26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / Alabama East -<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alabama West -<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 1 -<26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 2 -<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 3 -<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 4 -<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 5 -<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 6 -<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 7 -<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 8 -<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 9 -<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Alaska zone 10 -<26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone I -<26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone II -<26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone III -<26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone IV -<26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone V -<26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone VI -<26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California zone VII -<26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Arizona East -<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Arizona Central -<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Arizona West -<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Arkansas North -<26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Arkansas South -<26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Colorado North -<26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Colorado Central -<26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Colorado South -<26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Connecticut -<26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Delaware -<26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Florida East -<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Florida West -<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Florida North -<26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Georgia East -<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Georgia West -<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Idaho East -<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Idaho Central -<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Idaho West -<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Illinois East -<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Illinois West -<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Indiana East -<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Indiana West -<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Iowa North -<26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Iowa South -<26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Kansas North -<26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Kansas South -<26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Kentucky North -<26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Kentucky South -<26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Louisiana North -<26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Louisiana South -<26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Maine East -<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Maine West -<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Maryland -<26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Massachusetts Mainland -<26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Massachusetts Island -<26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Minnesota North -<26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Minnesota Central -<26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Minnesota South -<26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Mississippi East -<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Mississippi West -<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Missouri East -<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Missouri Central -<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Missouri West -<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD Michigan / Michigan East -<26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999943 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD Michigan / Michigan Old Central -<26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD Michigan / Michigan West -<26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD Michigan / Michigan North -<26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD Michigan / Michigan Central -<26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD Michigan / Michigan South -<26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD83 / UTM zone 3N -<26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 4N -<26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 5N -<26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 6N -<26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 7N -<26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 8N -<26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 9N -<26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 10N -<26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 11N -<26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 12N -<26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 13N -<26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 14N -<26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 15N -<26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 16N -<26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 17N -<26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 18N -<26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 19N -<26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 20N -<26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 21N -<26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 22N -<26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / UTM zone 23N -<26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alabama East -<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alabama West -<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 1 -<26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 2 -<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 3 -<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 4 -<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 5 -<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 6 -<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 7 -<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 8 -<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 9 -<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Alaska zone 10 -<26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / California zone 1 -<26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / California zone 2 -<26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / California zone 3 -<26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / California zone 4 -<26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / California zone 5 -<26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / California zone 6 -<26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Arizona East -<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Arizona Central -<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Arizona West -<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Arkansas North -<26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Arkansas South -<26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Colorado North -<26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Colorado Central -<26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Colorado South -<26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Connecticut -<26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Delaware -<26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Florida East -<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Florida West -<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Florida North -<26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Hawaii zone 1 -<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Hawaii zone 2 -<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Hawaii zone 3 -<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Hawaii zone 4 -<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Hawaii zone 5 -<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Georgia East -<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Georgia West -<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Idaho East -<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Idaho Central -<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Idaho West -<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Illinois East -<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Illinois West -<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Indiana East -<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Indiana West -<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Iowa North -<26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Iowa South -<26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Kansas North -<26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Kansas South -<26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Kentucky North -<26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Kentucky South -<26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Louisiana North -<26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Louisiana South -<26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Maine East -<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Maine West -<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Maryland -<26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Massachusetts Mainland -<26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Massachusetts Island -<26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Michigan North -<26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Michigan Central -<26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Michigan South -<26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Minnesota North -<26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Minnesota Central -<26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Minnesota South -<26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Mississippi East -<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Mississippi West -<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Missouri East -<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Missouri Central -<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Missouri West -<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# Nahrwan 1967 / UTM zone 38N -<27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nahrwan 1967 / UTM zone 39N -<27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nahrwan 1967 / UTM zone 40N -<27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> -# Naparima 1972 / UTM zone 20N -<27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / New Zealand Map Grid -<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Mount Eden Circuit -<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.999900 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Bay of Plenty Circuit -<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Poverty Bay Circuit -<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Hawkes Bay Circuit -<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Taranaki Circuit -<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Tuhirangi Circuit -<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Wanganui Circuit -<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Wairarapa Circuit -<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Wellington Circuit -<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Collingwood Circuit -<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Nelson Circuit -<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Karamea Circuit -<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Buller Circuit -<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Grey Circuit -<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Amuri Circuit -<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Marlborough Circuit -<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Hokitika Circuit -<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Okarito Circuit -<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Jacksons Bay Circuit -<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Mount Pleasant Circuit -<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Gawler Circuit -<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Timaru Circuit -<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Lindis Peak Circuit -<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Mount Nicholas Circuit -<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Mount York Circuit -<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Observation Point Circuit -<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / North Taieri Circuit -<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.999960 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / Bluff Circuit -<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1.000000 +x_0=300002.66 +y_0=699999.58 +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / UTM zone 58S -<27258> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / UTM zone 59S -<27259> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / UTM zone 60S -<27260> +proj=utm +zone=60 +south +ellps=intl +units=m +no_defs no_defs <> -# NZGD49 / North Island Grid -<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1.000000 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> -# NZGD49 / South Island Grid -<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1.000000 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone I -<27391> +proj=tmerc +lat_0=58 +lon_0=6.056250000000003 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone II -<27392> +proj=tmerc +lat_0=58 +lon_0=8.389583333333336 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone III -<27393> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone IV -<27394> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone V -<27395> +proj=tmerc +lat_0=58 +lon_0=16.88958333333334 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone VI -<27396> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone VII -<27397> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# NGO 1948 (Oslo) / NGO zone VIII -<27398> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> -# Datum 73 / UTM zone 29N -<27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> -# Datum 73 / Modified Portuguese Grid -<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs no_defs <> -# ATF (Paris) / Nord de Guerre -<27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=7.737229170000001 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert Nord France -<27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert Centre France -<27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert Sud France -<27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert Corse -<27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert zone I -<27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert zone II -<27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert zone III -<27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Lambert zone IV -<27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / France I -<27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / France II -<27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / France III -<27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / France IV -<27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Nord France -<27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Centre France -<27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Sud France -<27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# NTF (Paris) / Corse -<27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# OSGB 1936 / British National Grid -<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs no_defs <> -# Palestine 1923 / Palestine Grid -<28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> -# Palestine 1923 / Palestine Belt -<28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1.000000 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> -# Palestine 1923 / Israeli CS Grid -<28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> -# Pointe Noire / UTM zone 32S -<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 48 -<28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 49 -<28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 50 -<28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 51 -<28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 52 -<28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 53 -<28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 54 -<28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 55 -<28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 56 -<28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 57 -<28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# GDA94 / MGA zone 58 -<28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 2 -<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 3 -<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 4 -<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 5 -<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 6 -<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 7 -<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 8 -<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 9 -<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 10 -<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 11 -<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 12 -<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 13 -<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 14 -<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 15 -<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 16 -<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 17 -<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 18 -<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 19 -<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 20 -<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 21 -<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 22 -<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 23 -<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 24 -<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 25 -<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 26 -<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 27 -<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 28 -<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 29 -<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 30 -<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 31 -<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger zone 32 -<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 2N -<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 3N -<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 4N -<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 5N -<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 6N -<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 7N -<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 8N -<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 9N -<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 10N -<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 11N -<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 12N -<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 13N -<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 14N -<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 15N -<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 16N -<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 17N -<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 18N -<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 19N -<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 20N -<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 21N -<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 22N -<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 23N -<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 24N -<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 25N -<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 26N -<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 27N -<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 28N -<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 29N -<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 30N -<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 31N -<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Pulkovo 1942 / Gauss-Kruger 32N -<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> -# Qatar 1974 / Qatar National Grid -<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs no_defs <> -# Amersfoort / RD Old -<28991> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Amersfoort / RD New -<28992> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs no_defs <> -# SAD69 / Brazil Polyconic -<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 18N -<29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 19N -<29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 20N -<29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 21N -<29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 22N -<29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 17S -<29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 18S -<29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 19S -<29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 20S -<29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 21S -<29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 22S -<29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 23S -<29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 24S -<29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# SAD69 / UTM zone 25S -<29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs no_defs <> -# Sapper Hill 1943 / UTM zone 20S -<29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <> -# Sapper Hill 1943 / UTM zone 21S -<29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <> -# Schwarzeck / UTM zone 33S -<29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs no_defs <> -# South West African Coord. System zone 11 -# South West African Coord. System zone 13 -# South West African Coord. System zone 15 -# South West African Coord. System zone 17 -# South West African Coord. System zone 19 -# South West African Coord. System zone 21 -# South West African Coord. System zone 23 -# South West African Coord. System zone 25 -# Sudan / UTM zone 35N -<29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Sudan / UTM zone 36N -<29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Tananarive (Paris) / Laborde Grid -<29700> +proj=omerc +lat_0=-18.9 +lonc=46.43722917000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> -# Tananarive / UTM zone 38S -<29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <> -# Tananarive / UTM zone 39S -<29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <> -# Timbalai 1948 / UTM zone 49N -<29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs no_defs <> -# Timbalai 1948 / UTM zone 50N -<29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs no_defs <> -# Timbalai 1948 / R.S.O. Borneo (ch) -<29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs no_defs <> -# Timbalai 1948 / R.S.O. Borneo (ft) -<29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs no_defs <> -# Timbalai 1948 / R.S.O. Borneo (m) -<29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs no_defs <> -# TM65 / Irish National Grid -<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> -# OSNI 1952 / Irish National Grid -<29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000000 +x_0=200000 +y_0=250000 +ellps=airy +units=m +no_defs no_defs <> -# TM65 / Irish Grid -<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> -# TM75 / Irish Grid -<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS I -<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS II -<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS III -<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS IV -<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS V -<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS VI -<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS VII -<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS VIII -<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS IX -<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS X -<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XI -<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XII -<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XIII -<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XIV -<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XV -<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XVI -<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XVII -<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XVIII -<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Tokyo / Japan Plane Rectangular CS XIX -<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Trinidad 1903 / Trinidad Grid -<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380700001 +y_0=65379.0133425 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.2011661949 +no_defs no_defs <> -# TC(1948) / UTM zone 39N -<30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs no_defs <> -# TC(1948) / UTM zone 40N -<30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs no_defs <> -# Voirol 1875 / Nord Algerie (ancienne) -<30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> -# Voirol 1875 / Sud Algerie (ancienne) -<30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> -# Nord Sahara 1959 / UTM zone 29N -<30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nord Sahara 1959 / UTM zone 30N -<30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nord Sahara 1959 / UTM zone 31N -<30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nord Sahara 1959 / UTM zone 32N -<30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nord Sahara 1959 / Voirol Unifie Nord -<30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <> -# Nord Sahara 1959 / Voirol Unifie Sud -<30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <> -# RT38 2.5 gon W -<30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Yoff / UTM zone 28N -<31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> -# Zanderij / UTM zone 21N -<31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> -# Zanderij / TM 54 NW -<31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> -# Zanderij / Suriname Old TM -<31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> -# Zanderij / Suriname TM -<31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999900 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> -# MGI / 3-degree Gauss zone 5 -<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / 3-degree Gauss zone 6 -<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / 3-degree Gauss zone 7 -<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / 3-degree Gauss zone 8 -<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Balkans zone 5 -<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Balkans zone 6 -<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999900 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Balkans zone 7 -<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Balkans zone 8 -<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Balkans zone 8 -<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999900 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI (Ferro) / Austria West Zone -<31281> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# MGI (Ferro) / Austria Central Zone -<31282> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# MGI (Ferro) / Austria East Zone -<31283> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# MGI / M28 -<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / M31 -<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / M34 -<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Austria Lambert -<31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <> -# MGI (Ferro) / Austria West Zone -<31291> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# MGI (Ferro) / Austria Central Zone -<31292> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# MGI (Ferro) / Austria East Zone -<31293> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> -# MGI / M28 -<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / M31 -<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / M34 -<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# MGI / Austria Lambert -<31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <> -# Belge 1972 / Belge Lambert 72 -<31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m +no_defs no_defs <> -# Belge 1972 / Belgian Lambert 72 -<31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +units=m +no_defs no_defs <> -# DHDN / 3-degree Gauss zone 1 -<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / 3-degree Gauss zone 2 -<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / 3-degree Gauss zone 3 -<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / 3-degree Gauss zone 4 -<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / 3-degree Gauss zone 5 -<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / Gauss-Kruger zone 2 -<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / Gauss-Kruger zone 3 -<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / Gauss-Kruger zone 4 -<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# DHDN / Gauss-Kruger zone 5 -<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# Conakry 1905 / UTM zone 28N -<31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> -# Conakry 1905 / UTM zone 29N -<31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> -# Dealul Piscului 1933/ Stereo 33 -<31600> +proj=stere +lat_0=45.9 +lon_0=25.39246588888889 +k=0.999667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs no_defs <> -# Dealul Piscului 1970/ Stereo 70 -<31700> +proj=stere +lat_0=46 +lon_0=25 +k=0.999750 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs no_defs <> -# NGN / UTM zone 38N -<31838> +proj=utm +zone=38 +ellps=WGS84 +units=m +no_defs no_defs <> -# NGN / UTM zone 39N -<31839> +proj=utm +zone=39 +ellps=WGS84 +units=m +no_defs no_defs <> -# KUDAMS / KTM -<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 17N -<31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 18N -<31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 19N -<31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 20N -<31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 21N -<31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 22N -<31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 17S -<31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 18S -<31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 19S -<31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 20S -<31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 21S -<31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 22S -<31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 23S -<31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 24S -<31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# SIRGAS / UTM zone 25S -<32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> -# NAD27 / Montana North -<32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Montana Central -<32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Montana South -<32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Nebraska North -<32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Nebraska South -<32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Nevada East -<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Nevada Central -<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Nevada West -<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New Hampshire -<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New Jersey -<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.999975 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New Mexico East -<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New Mexico Central -<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New Mexico West -<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New York East -<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New York Central -<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New York West -<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / New York Long Island -<32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / North Carolina -<32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / North Dakota North -<32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / North Dakota South -<32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Ohio North -<32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Ohio South -<32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Oklahoma North -<32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Oklahoma South -<32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Oregon North -<32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Oregon South -<32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Pennsylvania North -<32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Pennsylvania South -<32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Rhode Island -<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / South Carolina North -<32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / South Carolina South -<32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / South Dakota North -<32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / South Dakota South -<32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Tennessee -<32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Texas North -<32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Texas North Central -<32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Texas Central -<32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Texas South Central -<32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Texas South -<32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Utah North -<32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Utah Central -<32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Utah South -<32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Vermont -<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Virginia North -<32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Virginia South -<32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Washington North -<32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Washington South -<32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / West Virginia North -<32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / West Virginia South -<32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wisconsin North -<32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wisconsin Central -<32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wisconsin South -<32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wyoming East -<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wyoming East Central -<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wyoming West Central -<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Wyoming West -<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / Guatemala Norte -<32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / Guatemala Sur -<32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / BLM 14N (ftUS) -<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 15N (ftUS) -<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 16N (ftUS) -<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 17N (ftUS) -<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 14N (feet) -<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 15N (feet) -<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 16N (feet) -<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / BLM 17N (feet) -<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / MTM zone 1 -<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / MTM zone 2 -<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / MTM zone 3 -<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / MTM zone 4 -<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / MTM zone 5 -<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / MTM zone 6 -<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD27 / Quebec Lambert -<32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD83 / Montana -<32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Nebraska -<32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Nevada East -<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Nevada Central -<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Nevada West -<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New Hampshire -<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New Jersey -<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New Mexico East -<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New Mexico Central -<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New Mexico West -<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New York East -<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New York Central -<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New York West -<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / New York Long Island -<32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / North Carolina -<32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / North Dakota North -<32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / North Dakota South -<32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Ohio North -<32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Ohio South -<32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Oklahoma North -<32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Oklahoma South -<32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Oregon North -<32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Oregon South -<32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Pennsylvania North -<32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Pennsylvania South -<32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Rhode Island -<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / South Carolina -<32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / South Dakota North -<32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / South Dakota South -<32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Tennessee -<32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Texas North -<32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Texas North Central -<32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Texas Central -<32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Texas South Central -<32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Texas South -<32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Utah North -<32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Utah Central -<32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Utah South -<32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Vermont -<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Virginia North -<32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Virginia South -<32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Washington North -<32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Washington South -<32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / West Virginia North -<32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / West Virginia South -<32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wisconsin North -<32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wisconsin Central -<32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wisconsin South -<32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wyoming East -<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wyoming East Central -<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wyoming West Central -<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Wyoming West -<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Puerto Rico & Virgin Is. -<32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / SCoPQ zone 2 -<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 1 -<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 2 -<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 3 -<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 4 -<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 5 -<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 6 -<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 7 -<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 8 -<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 9 -<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 10 -<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 11 -<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 12 -<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 13 -<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 14 -<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 15 -<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 16 -<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 17 -<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Quebec Lambert -<32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 1N -<32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 2N -<32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 3N -<32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 4N -<32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 5N -<32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 6N -<32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 7N -<32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 8N -<32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 9N -<32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 10N -<32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 11N -<32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 12N -<32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 13N -<32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 14N -<32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 15N -<32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 16N -<32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 17N -<32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 18N -<32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 19N -<32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 20N -<32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 21N -<32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 22N -<32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 23N -<32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 24N -<32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 25N -<32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 26N -<32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 27N -<32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 28N -<32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 29N -<32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 30N -<32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 31N -<32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 32N -<32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 33N -<32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 34N -<32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 35N -<32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 36N -<32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 37N -<32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 38N -<32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 39N -<32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 40N -<32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 41N -<32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 42N -<32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 43N -<32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 44N -<32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 45N -<32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 46N -<32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 47N -<32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 48N -<32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 49N -<32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 50N -<32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 51N -<32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 52N -<32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 53N -<32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 54N -<32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 55N -<32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 56N -<32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 57N -<32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 58N -<32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 59N -<32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 60N -<32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 1S -<32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 2S -<32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 3S -<32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 4S -<32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 5S -<32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 6S -<32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 7S -<32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 8S -<32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 9S -<32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 10S -<32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 11S -<32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 12S -<32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 13S -<32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 14S -<32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 15S -<32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 16S -<32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 17S -<32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 18S -<32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 19S -<32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 20S -<32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 21S -<32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 22S -<32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 23S -<32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 24S -<32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 25S -<32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 26S -<32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 27S -<32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 28S -<32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 29S -<32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 30S -<32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 31S -<32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 32S -<32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 33S -<32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 34S -<32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 35S -<32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 36S -<32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 37S -<32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 38S -<32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 39S -<32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 40S -<32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 41S -<32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 42S -<32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 43S -<32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 44S -<32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 45S -<32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 46S -<32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 47S -<32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 48S -<32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 49S -<32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 50S -<32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 51S -<32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 52S -<32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 53S -<32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 54S -<32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 55S -<32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 56S -<32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 57S -<32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 58S -<32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 59S -<32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72 / UTM zone 60S -<32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 1N -<32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 2N -<32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 3N -<32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 4N -<32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 5N -<32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 6N -<32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 7N -<32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 8N -<32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 9N -<32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 10N -<32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 11N -<32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 12N -<32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 13N -<32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 14N -<32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 15N -<32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 16N -<32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 17N -<32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 18N -<32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 19N -<32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 20N -<32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 21N -<32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 22N -<32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 23N -<32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 24N -<32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 25N -<32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 26N -<32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 27N -<32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 28N -<32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 29N -<32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 30N -<32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 31N -<32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 32N -<32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 33N -<32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 34N -<32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 35N -<32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 36N -<32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 37N -<32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 38N -<32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 39N -<32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 40N -<32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 41N -<32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 42N -<32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 43N -<32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 44N -<32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 45N -<32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 46N -<32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 47N -<32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 48N -<32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 49N -<32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 50N -<32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 51N -<32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 52N -<32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 53N -<32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 54N -<32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 55N -<32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 56N -<32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 57N -<32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 58N -<32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 59N -<32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 60N -<32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 1S -<32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 2S -<32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 3S -<32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 4S -<32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 5S -<32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 6S -<32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 7S -<32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 8S -<32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 9S -<32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 10S -<32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 11S -<32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 12S -<32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 13S -<32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 14S -<32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 15S -<32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 16S -<32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 17S -<32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 18S -<32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 19S -<32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 20S -<32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 21S -<32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 22S -<32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 23S -<32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 24S -<32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 25S -<32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 26S -<32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 27S -<32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 28S -<32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 29S -<32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 30S -<32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 31S -<32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 32S -<32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 33S -<32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 34S -<32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 35S -<32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 36S -<32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 37S -<32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 38S -<32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 39S -<32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 40S -<32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 41S -<32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 42S -<32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 43S -<32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 44S -<32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 45S -<32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 46S -<32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 47S -<32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 48S -<32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 49S -<32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 50S -<32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 51S -<32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 52S -<32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 53S -<32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 54S -<32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 55S -<32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 56S -<32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 57S -<32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 58S -<32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 59S -<32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 72BE / UTM zone 60S -<32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 1N -<32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 2N -<32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 3N -<32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 4N -<32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 5N -<32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 6N -<32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 7N -<32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 8N -<32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 9N -<32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 10N -<32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 11N -<32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 12N -<32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 13N -<32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 14N -<32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 15N -<32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 16N -<32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 17N -<32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 18N -<32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 19N -<32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 20N -<32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 21N -<32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 22N -<32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 23N -<32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 24N -<32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 25N -<32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 26N -<32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 27N -<32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 28N -<32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 29N -<32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 30N -<32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 31N -<32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 32N -<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 33N -<32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 34N -<32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 35N -<32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 36N -<32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 37N -<32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 38N -<32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 39N -<32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 40N -<32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 41N -<32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 42N -<32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 43N -<32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 44N -<32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 45N -<32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 46N -<32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 47N -<32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 48N -<32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 49N -<32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 50N -<32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 51N -<32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 52N -<32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 53N -<32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 54N -<32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 55N -<32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 56N -<32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 57N -<32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 58N -<32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 59N -<32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 60N -<32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UPS North -<32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 1S -<32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 2S -<32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 3S -<32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 4S -<32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 5S -<32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 6S -<32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 7S -<32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 8S -<32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 9S -<32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 10S -<32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 11S -<32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 12S -<32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 13S -<32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 14S -<32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 15S -<32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 16S -<32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 17S -<32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 18S -<32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 19S -<32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 20S -<32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 21S -<32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 22S -<32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 23S -<32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 24S -<32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 25S -<32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 26S -<32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 27S -<32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 28S -<32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 29S -<32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 30S -<32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 31S -<32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 32S -<32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 33S -<32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 34S -<32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 35S -<32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 36S -<32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 37S -<32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 38S -<32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 39S -<32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 40S -<32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 41S -<32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 42S -<32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 43S -<32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 44S -<32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 45S -<32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 46S -<32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 47S -<32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 48S -<32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 49S -<32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 50S -<32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 51S -<32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 52S -<32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 53S -<32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 54S -<32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 55S -<32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 56S -<32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 57S -<32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 58S -<32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 59S -<32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UTM zone 60S -<32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / UPS South -<32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS 84 / TM 36 SE -<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# Pulkovo 1995 GK Zone 2 -<20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <> -# Pulkovo 1995 GK Zone 3 -<20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <> -# Pulkovo 1995 GK Zone 2N -<20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> -# Pulkovo 1995 GK Zone 3N -<20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> -# La Canoa UTM Zone 21N -<24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <> -# NAD 1927 StatePlane Hawaii 1 FIPS 5101 -<26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 2 FIPS 5102 -<26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 3 FIPS 5103 -<26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 4 FIPS 5104 -<26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 5 FIPS 5105 -<26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Michigan North FIPS 2111 -<26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Michigan Central FIPS 2112 -<26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Michigan South FIPS 2113 -<26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# Nord Algerie -<30591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# Sud Algerie -<30592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# Germany Zone 1 -<31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 2 -<31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 3 -<31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 4 -<31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 5 -<31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# NAD 1927 StatePlane Puerto Rico FIPS 5201 -<32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202 -<32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# Sphere Plate Carree -<53001> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Equidistant Cylindrical -<53002> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Miller Cylindrical -<53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Mercator -<53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Sinusoidal -<53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Mollweide -<53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert VI -<53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert V -<53011> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert IV -<53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert III -<53013> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert II -<53014> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert I -<53015> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Gall Stereographic -<53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Behrmann -<53017> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Winkel I -<53018> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Winkel II -<53019> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Polyconic -<53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Quartic Authalic -<53022> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Loximuthal -<53023> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Bonne -<53024> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Hotine -<53025> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Stereographic -<53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Equidistant Conic -<53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Cassini -<53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Van der Grinten I -<53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Robinson -<53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Two Point Equidistant -<53031> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Azimuthal Equidistant -<53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# World Plate Carree -<54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Equidistant Cylindrical -<54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Miller Cylindrical -<54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Mercator -<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Sinusoidal -<54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Mollweide -<54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert VI -<54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert V -<54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert IV -<54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert III -<54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert II -<54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert I -<54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Gall Stereographic -<54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Behrmann -<54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Winkel I -<54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Winkel II -<54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Polyconic -<54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Quartic Authalic -<54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Loximuthal -<54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Bonne -<54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Hotine -<54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Stereographic -<54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Equidistant Conic -<54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Cassini -<54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Van der Grinten I -<54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Robinson -<54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Two Point Equidistant -<54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Azimuthal Equidistant -<54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# NAD 1927 StatePlane Guam FIPS 5400 -<65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Guam FIPS 5400 -<65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Canada Albers Equal Area Conic -<102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Canada Lambert Conformal Conic -<102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# USA Contiguous Albers Equal Area Conic -<102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# USA Contiguous Lambert Conformal Conic -<102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# USA Contiguous Equidistant Conic -<102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Alaska Albers Equal Area Conic -<102006> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Hawaii Albers Equal Area Conic -<102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# North America Albers Equal Area Conic -<102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# North America Lambert Conformal Conic -<102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# North America Equidistant Conic -<102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Africa Sinusoidal -<102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia Lambert Conformal Conic -<102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Europe Albers Equal Area Conic -<102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# Europe Lambert Conformal Conic -<102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# South America Lambert Conformal Conic -<102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> -# North Pole Azimuthal Equidistant -<102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# North Pole Lambert Azimuthal Equal Area -<102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# North Pole Stereographic -<102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# South Pole Azimuthal Equidistant -<102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# South Pole Lambert Azimuthal Equal Area -<102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# South Pole Stereographic -<102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Africa Albers Equal Area Conic -<102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Africa Equidistant Conic -<102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Africa Lambert Conformal Conic -<102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia North Albers Equal Area Conic -<102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia North Equidistant Conic -<102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia North Lambert Conformal Conic -<102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia South Albers Equal Area Conic -<102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia South Equidistant Conic -<102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia South Lambert Conformal Conic -<102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Europe Equidistant Conic -<102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# South America Equidistant Conic -<102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> -# South America Albers Equal Area Conic -<102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> -# S-JTSK Krovak -<102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> -# S-JTSK Ferro Krovak East North -<102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <> -# S-JTSK Krovak East North -<102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> -# Monte Mario Italy 1 -<102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <> -# Monte Mario Italy 2 -<102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <> -# NGO 1948 Norway Zone 1 -<102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 2 -<102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 3 -<102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 4 -<102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 5 -<102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 6 -<102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 7 -<102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 8 -<102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# RGF 1993 Lambert 93 -<102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <> -# Old Hawaiian UTM Zone 4N -<102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <> -# Old Hawaiian UTM Zone 5N -<102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <> -# NAD 1927 Michigan GeoRef Feet US -<102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 Michigan GeoRef Feet US -<102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 Michigan GeoRef Meters -<102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <> -# NAD 1983 Michigan GeoRef Meters -<102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# NGO 1948 UTM Zone 32N -<102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 UTM Zone 33N -<102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 UTM Zone 34N -<102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 UTM Zone 35N -<102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# Hong Kong 1980 Grid -<102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <> -# Hong Kong 1980 UTM Zone 49N -<102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <> -# Hong Kong 1980 UTM Zone 50N -<102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <> -# Tokyo UTM Zone 51N -<102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 52N -<102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 53N -<102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 54N -<102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 55N -<102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 56N -<102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <> -# Datum 73 Hayford Gauss IGeoE -<102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <> -# Datum 73 Hayford Gauss IPCC -<102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <> -# Graciosa Base SW 1948 UTM Zone 26N -<102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> -# Lisboa Bessel Bonne -<102163> +ellps=bessel +units=m no_defs <> -# Lisboa Hayford Gauss IGeoE -<102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <> -# Lisboa Hayford Gauss IPCC -<102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# Observ Meteorologico 1939 UTM Zone 25N -<102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <> -# Porto Santo 1936 UTM Zone 28N -<102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> -# Sao Braz UTM Zone 26N -<102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> -# Selvagem Grande 1938 UTM Zone 28N -<102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> -# Nord Maroc Degree -<102191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Sud Maroc Degree -<102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Sahara Degree -<102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NAD 1983 HARN StatePlane Alabama East FIPS 0101 -<102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Alabama West FIPS 0102 -<102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California I FIPS 0401 -<102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California II FIPS 0402 -<102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California III FIPS 0403 -<102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California IV FIPS 0404 -<102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California V FIPS 0405 -<102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California VI FIPS 0406 -<102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arizona East FIPS 0201 -<102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arizona Central FIPS 0202 -<102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arizona West FIPS 0203 -<102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arkansas North FIPS 0301 -<102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arkansas South FIPS 0302 -<102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Colorado North FIPS 0501 -<102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Colorado Central FIPS 0502 -<102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Colorado South FIPS 0503 -<102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Connecticut FIPS 0600 -<102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Delaware FIPS 0700 -<102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Florida East FIPS 0901 -<102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Florida West FIPS 0902 -<102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Florida North FIPS 0903 -<102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101 -<102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102 -<102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103 -<102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104 -<102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105 -<102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Georgia East FIPS 1001 -<102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Georgia West FIPS 1002 -<102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Idaho East FIPS 1101 -<102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Idaho Central FIPS 1102 -<102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Idaho West FIPS 1103 -<102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Illinois East FIPS 1201 -<102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Illinois West FIPS 1202 -<102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Indiana East FIPS 1301 -<102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Indiana West FIPS 1302 -<102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kansas North FIPS 1501 -<102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kansas South FIPS 1502 -<102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kentucky North FIPS 1601 -<102279> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kentucky South FIPS 1602 -<102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Louisiana North FIPS 1701 -<102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Louisiana South FIPS 1702 -<102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Maine East FIPS 1801 -<102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Maine West FIPS 1802 -<102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Maryland FIPS 1900 -<102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001 -<102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002 -<102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Michigan North FIPS 2111 -<102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Michigan Central FIPS 2112 -<102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Michigan South FIPS 2113 -<102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Minnesota North FIPS 2201 -<102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Minnesota Central FIPS 2202 -<102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Minnesota South FIPS 2203 -<102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Mississippi East FIPS 2301 -<102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Mississippi West FIPS 2302 -<102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Missouri East FIPS 2401 -<102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Missouri Central FIPS 2402 -<102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Missouri West FIPS 2403 -<102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Montana FIPS 2500 -<102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nebraska FIPS 2600 -<102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nevada East FIPS 2701 -<102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nevada Central FIPS 2702 -<102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nevada West FIPS 2703 -<102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Hampshire FIPS 2800 -<102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Jersey FIPS 2900 -<102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Mexico East FIPS 3001 -<102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Mexico Central FIPS 3002 -<102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Mexico West FIPS 3003 -<102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York East FIPS 3101 -<102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York Central FIPS 3102 -<102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York West FIPS 3103 -<102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York Long Island FIPS 3104 -<102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane North Dakota North FIPS 3301 -<102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane North Dakota South FIPS 3302 -<102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Ohio North FIPS 3401 -<102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Ohio South FIPS 3402 -<102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oklahoma North FIPS 3501 -<102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oklahoma South FIPS 3502 -<102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oregon North FIPS 3601 -<102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oregon South FIPS 3602 -<102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Rhode Island FIPS 3800 -<102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane South Dakota North FIPS 4001 -<102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane South Dakota South FIPS 4002 -<102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Tennessee FIPS 4100 -<102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas North FIPS 4201 -<102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas North Central FIPS 4202 -<102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas Central FIPS 4203 -<102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas South Central FIPS 4204 -<102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas South FIPS 4205 -<102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Utah North FIPS 4301 -<102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Utah Central FIPS 4302 -<102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Utah South FIPS 4303 -<102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Vermont FIPS 4400 -<102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Virginia North FIPS 4501 -<102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Virginia South FIPS 4502 -<102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Washington North FIPS 4601 -<102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Washington South FIPS 4602 -<102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane West Virginia North FIPS 4701 -<102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane West Virginia South FIPS 4702 -<102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wisconsin North FIPS 4801 -<102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802 -<102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wisconsin South FIPS 4803 -<102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming East FIPS 4901 -<102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902 -<102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903 -<102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming West FIPS 4904 -<102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200 -<102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <> -# Nord Algerie Ancienne Degree -<102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Sud Algerie Ancienne Degree -<102492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France I degrees -<102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France II degrees -<102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France III degrees -<102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France IV degrees -<102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Nord Algerie Degree -<102591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# Sud Algerie Degree -<102592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# NAD 1983 StatePlane Alabama East FIPS 0101 Feet -<102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alabama West FIPS 0102 Feet -<102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet -<102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet -<102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet -<102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet -<102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet -<102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet -<102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet -<102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet -<102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet -<102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet -<102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California I FIPS 0401 Feet -<102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California II FIPS 0402 Feet -<102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California III FIPS 0403 Feet -<102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California IV FIPS 0404 Feet -<102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California V FIPS 0405 Feet -<102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California VI FIPS 0406 Feet -<102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arizona East FIPS 0201 Feet -<102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arizona Central FIPS 0202 Feet -<102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arizona West FIPS 0203 Feet -<102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arkansas North FIPS 0301 Feet -<102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arkansas South FIPS 0302 Feet -<102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Colorado North FIPS 0501 Feet -<102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Colorado Central FIPS 0502 Feet -<102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Colorado South FIPS 0503 Feet -<102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Connecticut FIPS 0600 Feet -<102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Delaware FIPS 0700 Feet -<102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Florida East FIPS 0901 Feet -<102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Florida West FIPS 0902 Feet -<102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Florida North FIPS 0903 Feet -<102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet -<102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet -<102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet -<102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet -<102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet -<102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Georgia East FIPS 1001 Feet -<102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Georgia West FIPS 1002 Feet -<102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Idaho East FIPS 1101 Feet -<102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Idaho Central FIPS 1102 Feet -<102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Idaho West FIPS 1103 Feet -<102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Illinois East FIPS 1201 Feet -<102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Illinois West FIPS 1202 Feet -<102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Indiana East FIPS 1301 Feet -<102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Indiana West FIPS 1302 Feet -<102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Iowa North FIPS 1401 Feet -<102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Iowa South FIPS 1402 Feet -<102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kansas North FIPS 1501 Feet -<102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kansas South FIPS 1502 Feet -<102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kentucky North FIPS 1601 Feet -<102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kentucky South FIPS 1602 Feet -<102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Louisiana North FIPS 1701 Feet -<102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Louisiana South FIPS 1702 Feet -<102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Maine East FIPS 1801 Feet -<102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Maine West FIPS 1802 Feet -<102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Maryland FIPS 1900 Feet -<102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet -<102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet -<102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Michigan North FIPS 2111 Feet -<102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Michigan Central FIPS 2112 Feet -<102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Michigan South FIPS 2113 Feet -<102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Minnesota North FIPS 2201 Feet -<102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet -<102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Minnesota South FIPS 2203 Feet -<102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Mississippi East FIPS 2301 Feet -<102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Mississippi West FIPS 2302 Feet -<102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Missouri East FIPS 2401 Feet -<102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Missouri Central FIPS 2402 Feet -<102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Missouri West FIPS 2403 Feet -<102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Montana FIPS 2500 Feet -<102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nebraska FIPS 2600 Feet -<102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nevada East FIPS 2701 Feet -<102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nevada Central FIPS 2702 Feet -<102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nevada West FIPS 2703 Feet -<102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Hampshire FIPS 2800 Feet -<102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Jersey FIPS 2900 Feet -<102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Mexico East FIPS 3001 Feet -<102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet -<102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Mexico West FIPS 3003 Feet -<102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York East FIPS 3101 Feet -<102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York Central FIPS 3102 Feet -<102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York West FIPS 3103 Feet -<102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York Long Island FIPS 3104 Feet -<102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane North Carolina FIPS 3200 Feet -<102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane North Dakota North FIPS 3301 Feet -<102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane North Dakota South FIPS 3302 Feet -<102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Ohio North FIPS 3401 Feet -<102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Ohio South FIPS 3402 Feet -<102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet -<102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet -<102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oregon North FIPS 3601 Feet -<102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oregon South FIPS 3602 Feet -<102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet -<102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet -<102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Rhode Island FIPS 3800 Feet -<102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane South Carolina FIPS 3900 Feet -<102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane South Dakota North FIPS 4001 Feet -<102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane South Dakota South FIPS 4002 Feet -<102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Tennessee FIPS 4100 Feet -<102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas North FIPS 4201 Feet -<102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas North Central FIPS 4202 Feet -<102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas Central FIPS 4203 Feet -<102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas South Central FIPS 4204 Feet -<102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas South FIPS 4205 Feet -<102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Utah North FIPS 4301 Feet -<102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Utah Central FIPS 4302 Feet -<102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Utah South FIPS 4303 Feet -<102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Vermont FIPS 4400 Feet -<102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Virginia North FIPS 4501 Feet -<102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Virginia South FIPS 4502 Feet -<102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Washington North FIPS 4601 Feet -<102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Washington South FIPS 4602 Feet -<102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane West Virginia North FIPS 4701 Feet -<102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane West Virginia South FIPS 4702 Feet -<102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet -<102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet -<102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet -<102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming East FIPS 4901 Feet -<102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet -<102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet -<102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming West FIPS 4904 Feet -<102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet -<102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Guam FIPS 5400 Feet -<102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# Belge Lambert 1972 -<103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <> -# GCS International 1967 -<4023> +proj=longlat +ellps=aust_SA no_defs <> -# GCS Bern 1898 -<4217> +proj=longlat +ellps=bessel no_defs <> -# GCS Voirol Unifie 1960 -<4305> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Montserrat 1958 -<4404> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Voirol Unifie 1960 Paris -<4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <> -# GCS WGS 1966 -<37001> +proj=longlat +ellps=WGS66 no_defs <> -# GCS Fischer 1960 -<37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <> -# GCS Fischer 1968 -<37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <> -# GCS Fischer Modified -<37004> +proj=longlat +ellps=fschr60m no_defs <> -# GCS Hough 1960 -<37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> -# GCS Everest Modified 1969 -<37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <> -# GCS Walbeck -<37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <> -# GCS Sphere ARC INFO -<37008> +proj=longlat +a=6370997 +b=6370997 no_defs <> -# GCS European 1979 -<37201> +proj=longlat +ellps=intl no_defs <> -# GCS Everest Bangladesh -<37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <> -# GCS Everest India Nepal -<37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <> -# GCS Hjorsey 1955 -<37204> +proj=longlat +ellps=intl no_defs <> -# GCS Hong Kong 1963 -<37205> +proj=longlat +ellps=intl no_defs <> -# GCS Oman -<37206> +proj=longlat +ellps=clrk80 no_defs <> -# GCS South Asia Singapore -<37207> +proj=longlat +ellps=fschr60m no_defs <> -# GCS Ayabelle -<37208> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Point 58 -<37211> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Beacon E 1945 -<37212> +proj=longlat +ellps=intl no_defs <> -# GCS Tern Island 1961 -<37213> +proj=longlat +ellps=intl no_defs <> -# GCS Astro 1952 -<37214> +proj=longlat +ellps=intl no_defs <> -# GCS Bellevue IGN -<37215> +proj=longlat +ellps=intl no_defs <> -# GCS Canton 1966 -<37216> +proj=longlat +ellps=intl no_defs <> -# GCS Chatham Island 1971 -<37217> +proj=longlat +ellps=intl no_defs <> -# GCS DOS 1968 -<37218> +proj=longlat +ellps=intl no_defs <> -# GCS Easter Island 1967 -<37219> +proj=longlat +ellps=intl no_defs <> -# GCS Guam 1963 -<37220> +proj=longlat +ellps=clrk66 no_defs <> -# GCS GUX 1 -<37221> +proj=longlat +ellps=intl no_defs <> -# GCS Johnston Island 1961 -<37222> +proj=longlat +ellps=intl no_defs <> -# GCS Carthage Degree -<37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> -# GCS Midway 1961 -<37224> +proj=longlat +ellps=intl no_defs <> -# GCS Pitcairn 1967 -<37226> +proj=longlat +ellps=intl no_defs <> -# GCS Santo DOS 1965 -<37227> +proj=longlat +ellps=intl no_defs <> -# GCS Viti Levu 1916 -<37228> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Wake Eniwetok 1960 -<37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> -# GCS Wake Island 1952 -<37230> +proj=longlat +ellps=intl no_defs <> -# GCS Anna 1 1965 -<37231> +proj=longlat +ellps=aust_SA no_defs <> -# GCS Gan 1970 -<37232> +proj=longlat +ellps=intl no_defs <> -# GCS ISTS 073 1969 -<37233> +proj=longlat +ellps=intl no_defs <> -# GCS Kerguelen Island 1949 -<37234> +proj=longlat +ellps=intl no_defs <> -# GCS Reunion -<37235> +proj=longlat +ellps=intl no_defs <> -# GCS Ascension Island 1958 -<37237> +proj=longlat +ellps=intl no_defs <> -# GCS DOS 71 4 -<37238> +proj=longlat +ellps=intl no_defs <> -# GCS Cape Canaveral -<37239> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Fort Thomas 1955 -<37240> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Graciosa Base SW 1948 -<37241> +proj=longlat +ellps=intl no_defs <> -# GCS ISTS 061 1968 -<37242> +proj=longlat +ellps=intl no_defs <> -# GCS LC5 1961 -<37243> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Observ Meteorologico 1939 -<37245> +proj=longlat +ellps=intl no_defs <> -# GCS Pico de Las Nieves -<37246> +proj=longlat +ellps=intl no_defs <> -# GCS Porto Santo 1936 -<37247> +proj=longlat +ellps=intl no_defs <> -# GCS Sao Braz -<37249> +proj=longlat +ellps=intl no_defs <> -# GCS Selvagem Grande 1938 -<37250> +proj=longlat +ellps=intl no_defs <> -# GCS Tristan 1968 -<37251> +proj=longlat +ellps=intl no_defs <> -# GCS Samoa 1962 -<37252> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Camp Area -<37253> +proj=longlat +ellps=intl no_defs <> -# GCS Deception Island -<37254> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Gunung Segara -<37255> +proj=longlat +ellps=bessel no_defs <> -# GCS S42 Hungary -<37257> +proj=longlat +ellps=krass no_defs <> -# GCS Kusaie 1951 -<37259> +proj=longlat +ellps=intl no_defs <> -# GCS Alaskan Islands -<37260> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Assumed Geographic 1 -<104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <> -# GCS Estonia 1937 -<104101> +proj=longlat +ellps=bessel no_defs <> -# GCS Hermannskogel -<104102> +proj=longlat +ellps=bessel no_defs <> -# GCS Sierra Leone 1960 -<104103> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Hong Kong 1980 -<104104> +proj=longlat +ellps=intl no_defs <> -# GCS Datum Lisboa Bessel -<104105> +proj=longlat +ellps=bessel no_defs <> -# GCS Datum Lisboa Hayford -<104106> +proj=longlat +ellps=intl no_defs <> -# GCS RGF 1993 -<104107> +proj=longlat +ellps=GRS80 no_defs <> -# GCS NZGD 2000 -<104108> +proj=longlat +ellps=GRS80 no_defs <> -# GCS Merchich Degree -<104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> -# GCS Voirol 1875 Degree -<104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> -# GCS Voirol Unifie 1960 Degree -<104305> +proj=longlat +ellps=clrk80 no_defs <> diff --git a/src/3rdparty/proj/proj_data/esri.extra b/src/3rdparty/proj/proj_data/esri.extra deleted file mode 100644 index 2514b33c..00000000 --- a/src/3rdparty/proj/proj_data/esri.extra +++ /dev/null @@ -1,952 +0,0 @@ -# Pulkovo 1995 GK Zone 2 -<20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <> -# Pulkovo 1995 GK Zone 3 -<20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <> -# Pulkovo 1995 GK Zone 2N -<20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> -# Pulkovo 1995 GK Zone 3N -<20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> -# La Canoa UTM Zone 21N -<24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <> -# NAD 1927 StatePlane Hawaii 1 FIPS 5101 -<26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 2 FIPS 5102 -<26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 3 FIPS 5103 -<26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 4 FIPS 5104 -<26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Hawaii 5 FIPS 5105 -<26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Michigan North FIPS 2111 -<26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Michigan Central FIPS 2112 -<26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Michigan South FIPS 2113 -<26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# Nord Algerie -<30591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# Sud Algerie -<30592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# Germany Zone 1 -<31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 2 -<31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 3 -<31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 4 -<31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# Germany Zone 5 -<31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <> -# NAD 1927 StatePlane Puerto Rico FIPS 5201 -<32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202 -<32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# Sphere Plate Carree -<53001> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Equidistant Cylindrical -<53002> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Miller Cylindrical -<53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Mercator -<53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Sinusoidal -<53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Mollweide -<53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert VI -<53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert V -<53011> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert IV -<53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert III -<53013> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert II -<53014> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Eckert I -<53015> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Gall Stereographic -<53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Behrmann -<53017> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Winkel I -<53018> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Winkel II -<53019> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Polyconic -<53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Quartic Authalic -<53022> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Loximuthal -<53023> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Bonne -<53024> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Hotine -<53025> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Stereographic -<53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Equidistant Conic -<53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Cassini -<53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Van der Grinten I -<53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Robinson -<53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Two Point Equidistant -<53031> +a=6371000 +b=6371000 +units=m no_defs <> -# Sphere Azimuthal Equidistant -<53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> -# World Plate Carree -<54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Equidistant Cylindrical -<54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Miller Cylindrical -<54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Mercator -<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Sinusoidal -<54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Mollweide -<54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert VI -<54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert V -<54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert IV -<54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert III -<54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert II -<54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Eckert I -<54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Gall Stereographic -<54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Behrmann -<54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Winkel I -<54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Winkel II -<54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Polyconic -<54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Quartic Authalic -<54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Loximuthal -<54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Bonne -<54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Hotine -<54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Stereographic -<54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Equidistant Conic -<54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Cassini -<54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Van der Grinten I -<54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Robinson -<54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Two Point Equidistant -<54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# World Azimuthal Equidistant -<54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# NAD 1927 StatePlane Guam FIPS 5400 -<65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Guam FIPS 5400 -<65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Canada Albers Equal Area Conic -<102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Canada Lambert Conformal Conic -<102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# USA Contiguous Albers Equal Area Conic -<102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# USA Contiguous Lambert Conformal Conic -<102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# USA Contiguous Equidistant Conic -<102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Alaska Albers Equal Area Conic -<102006> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Hawaii Albers Equal Area Conic -<102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# North America Albers Equal Area Conic -<102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# North America Lambert Conformal Conic -<102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# North America Equidistant Conic -<102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# Africa Sinusoidal -<102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia Lambert Conformal Conic -<102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Europe Albers Equal Area Conic -<102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# Europe Lambert Conformal Conic -<102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# South America Lambert Conformal Conic -<102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> -# North Pole Azimuthal Equidistant -<102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# North Pole Lambert Azimuthal Equal Area -<102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# North Pole Stereographic -<102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# South Pole Azimuthal Equidistant -<102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# South Pole Lambert Azimuthal Equal Area -<102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# South Pole Stereographic -<102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Africa Albers Equal Area Conic -<102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Africa Equidistant Conic -<102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Africa Lambert Conformal Conic -<102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia North Albers Equal Area Conic -<102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia North Equidistant Conic -<102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia North Lambert Conformal Conic -<102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia South Albers Equal Area Conic -<102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia South Equidistant Conic -<102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Asia South Lambert Conformal Conic -<102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> -# Europe Equidistant Conic -<102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# South America Equidistant Conic -<102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> -# South America Albers Equal Area Conic -<102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> -# S-JTSK Krovak -<102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> -# S-JTSK Ferro Krovak East North -<102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <> -# S-JTSK Krovak East North -<102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> -# Monte Mario Italy 1 -<102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <> -# Monte Mario Italy 2 -<102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <> -# NGO 1948 Norway Zone 1 -<102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 2 -<102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 3 -<102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 4 -<102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 5 -<102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 6 -<102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 7 -<102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 Norway Zone 8 -<102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# RGF 1993 Lambert 93 -<102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <> -# Old Hawaiian UTM Zone 4N -<102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <> -# Old Hawaiian UTM Zone 5N -<102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <> -# NAD 1927 Michigan GeoRef Feet US -<102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 Michigan GeoRef Feet US -<102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1927 Michigan GeoRef Meters -<102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <> -# NAD 1983 Michigan GeoRef Meters -<102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> -# NGO 1948 UTM Zone 32N -<102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 UTM Zone 33N -<102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 UTM Zone 34N -<102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# NGO 1948 UTM Zone 35N -<102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> -# Hong Kong 1980 Grid -<102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <> -# Hong Kong 1980 UTM Zone 49N -<102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <> -# Hong Kong 1980 UTM Zone 50N -<102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <> -# Tokyo UTM Zone 51N -<102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 52N -<102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 53N -<102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 54N -<102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 55N -<102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <> -# Tokyo UTM Zone 56N -<102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <> -# Datum 73 Hayford Gauss IGeoE -<102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <> -# Datum 73 Hayford Gauss IPCC -<102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <> -# Graciosa Base SW 1948 UTM Zone 26N -<102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> -# Lisboa Bessel Bonne -<102163> +ellps=bessel +units=m no_defs <> -# Lisboa Hayford Gauss IGeoE -<102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <> -# Lisboa Hayford Gauss IPCC -<102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> -# Observ Meteorologico 1939 UTM Zone 25N -<102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <> -# Porto Santo 1936 UTM Zone 28N -<102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> -# Sao Braz UTM Zone 26N -<102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> -# Selvagem Grande 1938 UTM Zone 28N -<102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> -# Nord Maroc Degree -<102191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Sud Maroc Degree -<102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Sahara Degree -<102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NAD 1983 HARN StatePlane Alabama East FIPS 0101 -<102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Alabama West FIPS 0102 -<102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California I FIPS 0401 -<102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California II FIPS 0402 -<102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California III FIPS 0403 -<102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California IV FIPS 0404 -<102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California V FIPS 0405 -<102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane California VI FIPS 0406 -<102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arizona East FIPS 0201 -<102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arizona Central FIPS 0202 -<102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arizona West FIPS 0203 -<102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arkansas North FIPS 0301 -<102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Arkansas South FIPS 0302 -<102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Colorado North FIPS 0501 -<102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Colorado Central FIPS 0502 -<102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Colorado South FIPS 0503 -<102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Connecticut FIPS 0600 -<102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Delaware FIPS 0700 -<102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Florida East FIPS 0901 -<102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Florida West FIPS 0902 -<102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Florida North FIPS 0903 -<102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101 -<102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102 -<102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103 -<102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104 -<102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105 -<102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Georgia East FIPS 1001 -<102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Georgia West FIPS 1002 -<102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Idaho East FIPS 1101 -<102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Idaho Central FIPS 1102 -<102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Idaho West FIPS 1103 -<102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Illinois East FIPS 1201 -<102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Illinois West FIPS 1202 -<102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Indiana East FIPS 1301 -<102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Indiana West FIPS 1302 -<102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kansas North FIPS 1501 -<102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kansas South FIPS 1502 -<102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kentucky North FIPS 1601 -<102279> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Kentucky South FIPS 1602 -<102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Louisiana North FIPS 1701 -<102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Louisiana South FIPS 1702 -<102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Maine East FIPS 1801 -<102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Maine West FIPS 1802 -<102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Maryland FIPS 1900 -<102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001 -<102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002 -<102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Michigan North FIPS 2111 -<102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Michigan Central FIPS 2112 -<102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Michigan South FIPS 2113 -<102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Minnesota North FIPS 2201 -<102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Minnesota Central FIPS 2202 -<102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Minnesota South FIPS 2203 -<102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Mississippi East FIPS 2301 -<102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Mississippi West FIPS 2302 -<102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Missouri East FIPS 2401 -<102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Missouri Central FIPS 2402 -<102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Missouri West FIPS 2403 -<102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Montana FIPS 2500 -<102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nebraska FIPS 2600 -<102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nevada East FIPS 2701 -<102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nevada Central FIPS 2702 -<102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Nevada West FIPS 2703 -<102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Hampshire FIPS 2800 -<102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Jersey FIPS 2900 -<102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Mexico East FIPS 3001 -<102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Mexico Central FIPS 3002 -<102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New Mexico West FIPS 3003 -<102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York East FIPS 3101 -<102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York Central FIPS 3102 -<102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York West FIPS 3103 -<102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane New York Long Island FIPS 3104 -<102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane North Dakota North FIPS 3301 -<102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane North Dakota South FIPS 3302 -<102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Ohio North FIPS 3401 -<102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Ohio South FIPS 3402 -<102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oklahoma North FIPS 3501 -<102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oklahoma South FIPS 3502 -<102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oregon North FIPS 3601 -<102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Oregon South FIPS 3602 -<102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Rhode Island FIPS 3800 -<102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane South Dakota North FIPS 4001 -<102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane South Dakota South FIPS 4002 -<102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Tennessee FIPS 4100 -<102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas North FIPS 4201 -<102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas North Central FIPS 4202 -<102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas Central FIPS 4203 -<102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas South Central FIPS 4204 -<102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Texas South FIPS 4205 -<102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Utah North FIPS 4301 -<102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Utah Central FIPS 4302 -<102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Utah South FIPS 4303 -<102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Vermont FIPS 4400 -<102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Virginia North FIPS 4501 -<102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Virginia South FIPS 4502 -<102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Washington North FIPS 4601 -<102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Washington South FIPS 4602 -<102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane West Virginia North FIPS 4701 -<102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane West Virginia South FIPS 4702 -<102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wisconsin North FIPS 4801 -<102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802 -<102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wisconsin South FIPS 4803 -<102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming East FIPS 4901 -<102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902 -<102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903 -<102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Wyoming West FIPS 4904 -<102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> -# NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200 -<102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <> -# Nord Algerie Ancienne Degree -<102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Sud Algerie Ancienne Degree -<102492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France I degrees -<102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France II degrees -<102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France III degrees -<102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# NTF France IV degrees -<102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> -# Nord Algerie Degree -<102591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# Sud Algerie Degree -<102592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> -# NAD 1983 StatePlane Alabama East FIPS 0101 Feet -<102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alabama West FIPS 0102 Feet -<102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet -<102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet -<102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet -<102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet -<102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet -<102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet -<102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet -<102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet -<102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet -<102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet -<102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California I FIPS 0401 Feet -<102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California II FIPS 0402 Feet -<102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California III FIPS 0403 Feet -<102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California IV FIPS 0404 Feet -<102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California V FIPS 0405 Feet -<102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane California VI FIPS 0406 Feet -<102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arizona East FIPS 0201 Feet -<102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arizona Central FIPS 0202 Feet -<102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arizona West FIPS 0203 Feet -<102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arkansas North FIPS 0301 Feet -<102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Arkansas South FIPS 0302 Feet -<102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Colorado North FIPS 0501 Feet -<102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Colorado Central FIPS 0502 Feet -<102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Colorado South FIPS 0503 Feet -<102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Connecticut FIPS 0600 Feet -<102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Delaware FIPS 0700 Feet -<102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Florida East FIPS 0901 Feet -<102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Florida West FIPS 0902 Feet -<102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Florida North FIPS 0903 Feet -<102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet -<102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet -<102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet -<102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet -<102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet -<102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Georgia East FIPS 1001 Feet -<102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Georgia West FIPS 1002 Feet -<102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Idaho East FIPS 1101 Feet -<102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Idaho Central FIPS 1102 Feet -<102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Idaho West FIPS 1103 Feet -<102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Illinois East FIPS 1201 Feet -<102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Illinois West FIPS 1202 Feet -<102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Indiana East FIPS 1301 Feet -<102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Indiana West FIPS 1302 Feet -<102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Iowa North FIPS 1401 Feet -<102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Iowa South FIPS 1402 Feet -<102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kansas North FIPS 1501 Feet -<102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kansas South FIPS 1502 Feet -<102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kentucky North FIPS 1601 Feet -<102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Kentucky South FIPS 1602 Feet -<102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Louisiana North FIPS 1701 Feet -<102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Louisiana South FIPS 1702 Feet -<102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Maine East FIPS 1801 Feet -<102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Maine West FIPS 1802 Feet -<102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Maryland FIPS 1900 Feet -<102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet -<102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet -<102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Michigan North FIPS 2111 Feet -<102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Michigan Central FIPS 2112 Feet -<102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Michigan South FIPS 2113 Feet -<102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Minnesota North FIPS 2201 Feet -<102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet -<102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Minnesota South FIPS 2203 Feet -<102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Mississippi East FIPS 2301 Feet -<102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Mississippi West FIPS 2302 Feet -<102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Missouri East FIPS 2401 Feet -<102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Missouri Central FIPS 2402 Feet -<102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Missouri West FIPS 2403 Feet -<102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Montana FIPS 2500 Feet -<102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nebraska FIPS 2600 Feet -<102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nevada East FIPS 2701 Feet -<102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nevada Central FIPS 2702 Feet -<102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Nevada West FIPS 2703 Feet -<102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Hampshire FIPS 2800 Feet -<102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Jersey FIPS 2900 Feet -<102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Mexico East FIPS 3001 Feet -<102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet -<102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New Mexico West FIPS 3003 Feet -<102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York East FIPS 3101 Feet -<102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York Central FIPS 3102 Feet -<102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York West FIPS 3103 Feet -<102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane New York Long Island FIPS 3104 Feet -<102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane North Carolina FIPS 3200 Feet -<102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane North Dakota North FIPS 3301 Feet -<102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane North Dakota South FIPS 3302 Feet -<102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Ohio North FIPS 3401 Feet -<102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Ohio South FIPS 3402 Feet -<102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet -<102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet -<102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oregon North FIPS 3601 Feet -<102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Oregon South FIPS 3602 Feet -<102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet -<102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet -<102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Rhode Island FIPS 3800 Feet -<102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane South Carolina FIPS 3900 Feet -<102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane South Dakota North FIPS 4001 Feet -<102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane South Dakota South FIPS 4002 Feet -<102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Tennessee FIPS 4100 Feet -<102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas North FIPS 4201 Feet -<102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas North Central FIPS 4202 Feet -<102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas Central FIPS 4203 Feet -<102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas South Central FIPS 4204 Feet -<102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Texas South FIPS 4205 Feet -<102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Utah North FIPS 4301 Feet -<102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Utah Central FIPS 4302 Feet -<102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Utah South FIPS 4303 Feet -<102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Vermont FIPS 4400 Feet -<102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Virginia North FIPS 4501 Feet -<102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Virginia South FIPS 4502 Feet -<102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Washington North FIPS 4601 Feet -<102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Washington South FIPS 4602 Feet -<102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane West Virginia North FIPS 4701 Feet -<102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane West Virginia South FIPS 4702 Feet -<102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet -<102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet -<102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet -<102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming East FIPS 4901 Feet -<102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet -<102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet -<102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Wyoming West FIPS 4904 Feet -<102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet -<102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# NAD 1983 StatePlane Guam FIPS 5400 Feet -<102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> -# Belge Lambert 1972 -<103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <> -# GCS International 1967 -<4023> +proj=longlat +ellps=aust_SA no_defs <> -# GCS Bern 1898 -<4217> +proj=longlat +ellps=bessel no_defs <> -# GCS Voirol Unifie 1960 -<4305> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Montserrat 1958 -<4404> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Voirol Unifie 1960 Paris -<4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <> -# GCS WGS 1966 -<37001> +proj=longlat +ellps=WGS66 no_defs <> -# GCS Fischer 1960 -<37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <> -# GCS Fischer 1968 -<37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <> -# GCS Fischer Modified -<37004> +proj=longlat +ellps=fschr60m no_defs <> -# GCS Hough 1960 -<37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> -# GCS Everest Modified 1969 -<37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <> -# GCS Walbeck -<37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <> -# GCS Sphere ARC INFO -<37008> +proj=longlat +a=6370997 +b=6370997 no_defs <> -# GCS European 1979 -<37201> +proj=longlat +ellps=intl no_defs <> -# GCS Everest Bangladesh -<37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <> -# GCS Everest India Nepal -<37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <> -# GCS Hjorsey 1955 -<37204> +proj=longlat +ellps=intl no_defs <> -# GCS Hong Kong 1963 -<37205> +proj=longlat +ellps=intl no_defs <> -# GCS Oman -<37206> +proj=longlat +ellps=clrk80 no_defs <> -# GCS South Asia Singapore -<37207> +proj=longlat +ellps=fschr60m no_defs <> -# GCS Ayabelle -<37208> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Point 58 -<37211> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Beacon E 1945 -<37212> +proj=longlat +ellps=intl no_defs <> -# GCS Tern Island 1961 -<37213> +proj=longlat +ellps=intl no_defs <> -# GCS Astro 1952 -<37214> +proj=longlat +ellps=intl no_defs <> -# GCS Bellevue IGN -<37215> +proj=longlat +ellps=intl no_defs <> -# GCS Canton 1966 -<37216> +proj=longlat +ellps=intl no_defs <> -# GCS Chatham Island 1971 -<37217> +proj=longlat +ellps=intl no_defs <> -# GCS DOS 1968 -<37218> +proj=longlat +ellps=intl no_defs <> -# GCS Easter Island 1967 -<37219> +proj=longlat +ellps=intl no_defs <> -# GCS Guam 1963 -<37220> +proj=longlat +ellps=clrk66 no_defs <> -# GCS GUX 1 -<37221> +proj=longlat +ellps=intl no_defs <> -# GCS Johnston Island 1961 -<37222> +proj=longlat +ellps=intl no_defs <> -# GCS Carthage Degree -<37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> -# GCS Midway 1961 -<37224> +proj=longlat +ellps=intl no_defs <> -# GCS Pitcairn 1967 -<37226> +proj=longlat +ellps=intl no_defs <> -# GCS Santo DOS 1965 -<37227> +proj=longlat +ellps=intl no_defs <> -# GCS Viti Levu 1916 -<37228> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Wake Eniwetok 1960 -<37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> -# GCS Wake Island 1952 -<37230> +proj=longlat +ellps=intl no_defs <> -# GCS Anna 1 1965 -<37231> +proj=longlat +ellps=aust_SA no_defs <> -# GCS Gan 1970 -<37232> +proj=longlat +ellps=intl no_defs <> -# GCS ISTS 073 1969 -<37233> +proj=longlat +ellps=intl no_defs <> -# GCS Kerguelen Island 1949 -<37234> +proj=longlat +ellps=intl no_defs <> -# GCS Reunion -<37235> +proj=longlat +ellps=intl no_defs <> -# GCS Ascension Island 1958 -<37237> +proj=longlat +ellps=intl no_defs <> -# GCS DOS 71 4 -<37238> +proj=longlat +ellps=intl no_defs <> -# GCS Cape Canaveral -<37239> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Fort Thomas 1955 -<37240> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Graciosa Base SW 1948 -<37241> +proj=longlat +ellps=intl no_defs <> -# GCS ISTS 061 1968 -<37242> +proj=longlat +ellps=intl no_defs <> -# GCS LC5 1961 -<37243> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Observ Meteorologico 1939 -<37245> +proj=longlat +ellps=intl no_defs <> -# GCS Pico de Las Nieves -<37246> +proj=longlat +ellps=intl no_defs <> -# GCS Porto Santo 1936 -<37247> +proj=longlat +ellps=intl no_defs <> -# GCS Sao Braz -<37249> +proj=longlat +ellps=intl no_defs <> -# GCS Selvagem Grande 1938 -<37250> +proj=longlat +ellps=intl no_defs <> -# GCS Tristan 1968 -<37251> +proj=longlat +ellps=intl no_defs <> -# GCS Samoa 1962 -<37252> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Camp Area -<37253> +proj=longlat +ellps=intl no_defs <> -# GCS Deception Island -<37254> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Gunung Segara -<37255> +proj=longlat +ellps=bessel no_defs <> -# GCS S42 Hungary -<37257> +proj=longlat +ellps=krass no_defs <> -# GCS Kusaie 1951 -<37259> +proj=longlat +ellps=intl no_defs <> -# GCS Alaskan Islands -<37260> +proj=longlat +ellps=clrk66 no_defs <> -# GCS Assumed Geographic 1 -<104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <> -# GCS Estonia 1937 -<104101> +proj=longlat +ellps=bessel no_defs <> -# GCS Hermannskogel -<104102> +proj=longlat +ellps=bessel no_defs <> -# GCS Sierra Leone 1960 -<104103> +proj=longlat +ellps=clrk80 no_defs <> -# GCS Hong Kong 1980 -<104104> +proj=longlat +ellps=intl no_defs <> -# GCS Datum Lisboa Bessel -<104105> +proj=longlat +ellps=bessel no_defs <> -# GCS Datum Lisboa Hayford -<104106> +proj=longlat +ellps=intl no_defs <> -# GCS RGF 1993 -<104107> +proj=longlat +ellps=GRS80 no_defs <> -# GCS NZGD 2000 -<104108> +proj=longlat +ellps=GRS80 no_defs <> -# GCS Merchich Degree -<104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> -# GCS Voirol 1875 Degree -<104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> -# GCS Voirol Unifie 1960 Degree -<104305> +proj=longlat +ellps=clrk80 no_defs <> -# -# Chris' funny epsgish code for the google mercator -# -<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> diff --git a/src/3rdparty/proj/proj_data/nad.lst b/src/3rdparty/proj/proj_data/nad.lst deleted file mode 100644 index cc427722..00000000 --- a/src/3rdparty/proj/proj_data/nad.lst +++ /dev/null @@ -1,142 +0,0 @@ - Listing of State Plane North American Datum Zones - - NGS zone number - State and zone 1927 1983 - -Alabama east .................. 101 101 -Alabama west .................. 102 102 -Alaska zone no. 1 ............. 5001 5001 -Alaska zone no. 2 ............. 5002 5002 -Alaska zone no. 3 ............. 5003 5003 -Alaska zone no. 4 ............. 5004 5004 -Alaska zone no. 5 ............. 5005 5005 -Alaska zone no. 6 ............. 5006 5006 -Alaska zone no. 7 ............. 5007 5007 -Alaska zone no. 8 ............. 5008 5008 -Alaska zone no. 9 ............. 5009 5009 -Alaska zone no. 10 ............ 5010 5010 -American Samoa ................ 5300 -Arizona central ............... 202 202 -Arizona east .................. 201 201 -Arizona west .................. 203 203 -Arkansas north ................ 301 301 -Arkansas south ................ 302 302 -California I .................. 401 401 -California II ................. 402 402 -California III ................ 403 403 -California IV ................. 404 404 -California V .................. 405 405 -California VI ................. 406 406 -California VII ................ 407 -Colorado central .............. 502 502 -Colorado north ................ 501 501 -Colorado south ................ 503 503 -Connecticut ................... 600 600 -Delaware ...................... 700 700 -Florida east .................. 901 901 -Florida north ................. 903 903 -Florida west .................. 902 902 -Georgia east .................. 1001 1001 -Georgia west .................. 1002 1002 -Guam Island ................... 5400 -Hawaii 1 ...................... 5101 5101 -Hawaii 2 ...................... 5102 5102 -Hawaii 3 ...................... 5103 5103 -Hawaii 4 ...................... 5104 5104 -Hawaii 5 ...................... 5105 5105 -Idaho central ................. 1102 1102 -Idaho east .................... 1101 1101 -Idaho west .................... 1103 1103 -Illinois east ................. 1201 1201 -Illinois west ................. 1202 1202 -Indiana east .................. 1301 1301 -Indiana west .................. 1302 1302 -Iowa north .................... 1401 1401 -Iowa south .................... 1402 1402 -Kansas north .................. 1501 1501 -Kansas south .................. 1502 1502 -Kentucky north ................ 1601 1601 -Kentucky south ................ 1602 1602 -Louisiana north ............... 1701 1701 -Louisiana offshore ............ 1703 1703 -Louisiana south ............... 1702 1702 -Maine east .................... 1801 1801 -Maine west .................... 1802 1802 -Maryland ...................... 1900 1900 -Massachusetts island .......... 2002 2002 -Massachusetts mainland ........ 2001 2001 -Michigan central/l ............ 2112 2112 current -Michigan central/m ............ 2102 old -Michigan east ................. 2101 old -Michigan north ................ 2111 2111 current -Michigan south ................ 2113 2113 current -Michigan west ................. 2103 old -Minnesota central ............. 2202 2202 -Minnesota north ............... 2201 2201 -Minnesota south ............... 2203 2203 -Mississippi east .............. 2301 2301 -Mississippi west .............. 2302 2302 -Missouri central .............. 2402 2402 -Missouri east ................. 2401 2401 -Missouri west ................. 2403 2403 -Montana ....................... 2500 -Montana central ............... 2502 -Montana north ................. 2501 -Montana south ................. 2503 -Nebraska ...................... 2600 -Nebraska north ................ 2601 -Nebraska south ................ 2602 -Nevada central ................ 2702 2702 -Nevada east ................... 2701 2701 -Nevada west ................... 2703 2703 -New hampshire ................. 2800 2800 -New jersey .................... 2900 2900 -New mexico central ............ 3002 3002 -New mexico east ............... 3001 3001 -New mexico west ............... 3003 3003 -New york central .............. 3102 3102 -New york east ................. 3101 3101 -New york long island .......... 3104 3104 -New york west ................. 3103 3103 -North carolina ................ 3200 3200 -North dakota north ............ 3301 3301 -North dakota south ............ 3302 3302 -Ohio north .................... 3401 3401 -Ohio south .................... 3402 3402 -Oklahoma north ................ 3501 3501 -Oklahoma south ................ 3502 3502 -Oregon north .................. 3601 3601 -Oregon south .................. 3602 3602 -Pennsylvania north ............ 3701 3701 -Pennsylvania south ............ 3702 3702 -Puerto Rico, Virgin Islands ... 5201 5200 -Rhode Island .................. 3800 3800 -South Carolina ................ 3900 -South Carolina north .......... 3901 -South Carolina south .......... 3902 -South Dakota north ............ 4001 4001 -South Dakota south ............ 4002 4002 -Tennessee ..................... 4100 4100 -Texas central ................. 4203 4203 -Texas north ................... 4201 4201 -Texas north central ........... 4202 4202 -Texas south ................... 4205 4205 -Texas south central ........... 4204 4204 -Utah central .................. 4302 4302 -Utah north .................... 4301 4301 -Utah south .................... 4303 4303 -Vermont ....................... 4400 4400 -Virgin Islands, St. Croix ..... 5202 -Virginia north ................ 4501 4501 -Virginia south ................ 4502 4502 -Washington north .............. 4601 4601 -Washington south .............. 4602 4602 -West Virginia north ........... 4701 4701 -West Virginia south ........... 4702 4702 -Wisconsin central ............. 4802 4802 -Wisconsin north ............... 4801 4801 -Wisconsin south ............... 4803 4803 -Wyoming east .................. 4901 4901 -Wyoming east central .......... 4902 4902 -Wyoming west .................. 4904 4904 -Wyoming west central .......... 4903 4903 diff --git a/src/3rdparty/proj/proj_data/nad27 b/src/3rdparty/proj/proj_data/nad27 deleted file mode 100644 index 6e06900c..00000000 --- a/src/3rdparty/proj/proj_data/nad27 +++ /dev/null @@ -1,809 +0,0 @@ -# SCCSID @(#)nad27 4.1 92/12/20 GIE -# proj +init files for: -# -# State Plane Coordinate Systems, -# North American Datum 1927 - -# 101: alabama east: nad27 -<101> proj=tmerc datum=NAD27 -lon_0=-85d50 lat_0=30d30 k=.99996 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 102: alabama west: nad27 -<102> proj=tmerc datum=NAD27 -lon_0=-87d30 lat_0=30 k=.9999333333333333 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5010: alaska zone no. 10: nad27 -<5010> proj=lcc datum=NAD27 -lon_0=-176 lat_1=53d50 lat_2=51d50 lat_0=51 -x_0=914401.8288036576 y_0=0 -no_defs <> - -# 5300: american samoa: nad27 -<5300> proj=lcc datum=NAD27 -lon_0=-170 lat_1=-14d16 lat_2=-14d16 lat_0=-14d16 -x_0=152400.3048006096 y_0=95169.31165862332 -no_defs <> - -# 201: arizona east: nad27 -<201> proj=tmerc datum=NAD27 -lon_0=-110d10 lat_0=31 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 202: arizona central: nad27 -<202> proj=tmerc datum=NAD27 -lon_0=-111d55 lat_0=31 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 203: arizona west: nad27 -<203> proj=tmerc datum=NAD27 -lon_0=-113d45 lat_0=31 k=.9999333333333333 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 301: arkansas north: nad27 -<301> proj=lcc datum=NAD27 -lon_0=-92 lat_1=36d14 lat_2=34d56 lat_0=34d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 302: arkansas south: nad27 -<302> proj=lcc datum=NAD27 -lon_0=-92 lat_1=34d46 lat_2=33d18 lat_0=32d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 401: california i: nad27 -<401> proj=lcc datum=NAD27 -lon_0=-122 lat_1=41d40 lat_2=40 lat_0=39d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 402: california ii: nad27 -<402> proj=lcc datum=NAD27 -lon_0=-122 lat_1=39d50 lat_2=38d20 lat_0=37d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 403: california iii: nad27 -<403> proj=lcc datum=NAD27 -lon_0=-120d30 lat_1=38d26 lat_2=37d4 lat_0=36d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 404: california iv: nad27 -<404> proj=lcc datum=NAD27 -lon_0=-119 lat_1=37d15 lat_2=36 lat_0=35d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 405: california v: nad27 -<405> proj=lcc datum=NAD27 -lon_0=-118 lat_1=35d28 lat_2=34d2 lat_0=33d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 406: california vi: nad27 -<406> proj=lcc datum=NAD27 -lon_0=-116d15 lat_1=33d53 lat_2=32d47 lat_0=32d10 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 407: california vii: nad27 -<407> proj=lcc datum=NAD27 -lon_0=-118d20 lat_1=34d25 lat_2=33d52 lat_0=34d8 -x_0=1276106.450596901 y_0=1268253.006858014 -no_defs <> - -# 501: colorado north: nad27 -<501> proj=lcc datum=NAD27 -lon_0=-105d30 lat_1=40d47 lat_2=39d43 lat_0=39d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 502: colorado central: nad27 -<502> proj=lcc datum=NAD27 -lon_0=-105d30 lat_1=39d45 lat_2=38d27 lat_0=37d50 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 503: colorado south: nad27 -<503> proj=lcc datum=NAD27 -lon_0=-105d30 lat_1=38d26 lat_2=37d14 lat_0=36d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 600: connecticut ---: nad27 -<600> proj=lcc datum=NAD27 -lon_0=-72d45 lat_1=41d52 lat_2=41d12 lat_0=40d50 -x_0=182880.3657607315 y_0=0 -no_defs <> - -# 700: delaware ---: nad27 -<700> proj=tmerc datum=NAD27 -lon_0=-75d25 lat_0=38 k=.999995 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 901: florida east: nad27 -<901> proj=tmerc datum=NAD27 -lon_0=-81 lat_0=24d20 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 902: florida west: nad27 -<902> proj=tmerc datum=NAD27 -lon_0=-82 lat_0=24d20 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 903: florida north: nad27 -<903> proj=lcc datum=NAD27 -lon_0=-84d30 lat_1=30d45 lat_2=29d35 lat_0=29 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1001: georgia east: nad27 -<1001> proj=tmerc datum=NAD27 -lon_0=-82d10 lat_0=30 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1002: georgia west: nad27 -<1002> proj=tmerc datum=NAD27 -lon_0=-84d10 lat_0=30 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5101: hawaii 1: nad27 -<5101> proj=tmerc datum=NAD27 -lon_0=-155d30 lat_0=18d50 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5102: hawaii 2: nad27 -<5102> proj=tmerc datum=NAD27 -lon_0=-156d40 lat_0=20d20 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5103: hawaii 3: nad27 -<5103> proj=tmerc datum=NAD27 -lon_0=-158 lat_0=21d10 k=.99999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5104: hawaii 4: nad27 -<5104> proj=tmerc datum=NAD27 -lon_0=-159d30 lat_0=21d50 k=.99999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5105: hawaii 5: nad27 -<5105> proj=tmerc datum=NAD27 -lon_0=-160d10 lat_0=21d40 k=1 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1101: idaho east: nad27 -<1101> proj=tmerc datum=NAD27 -lon_0=-112d10 lat_0=41d40 k=.9999473684210526 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1102: idaho central: nad27 -<1102> proj=tmerc datum=NAD27 -lon_0=-114 lat_0=41d40 k=.9999473684210526 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1103: idaho west: nad27 -<1103> proj=tmerc datum=NAD27 -lon_0=-115d45 lat_0=41d40 k=.9999333333333333 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1201: illinois east: nad27 -<1201> proj=tmerc datum=NAD27 -lon_0=-88d20 lat_0=36d40 k=.999975 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1202: illinois west: nad27 -<1202> proj=tmerc datum=NAD27 -lon_0=-90d10 lat_0=36d40 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1301: indiana east: nad27 -<1301> proj=tmerc datum=NAD27 -lon_0=-85d40 lat_0=37d30 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1302: indiana west: nad27 -<1302> proj=tmerc datum=NAD27 -lon_0=-87d5 lat_0=37d30 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1401: iowa north: nad27 -<1401> proj=lcc datum=NAD27 -lon_0=-93d30 lat_1=43d16 lat_2=42d4 lat_0=41d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1402: iowa south: nad27 -<1402> proj=lcc datum=NAD27 -lon_0=-93d30 lat_1=41d47 lat_2=40d37 lat_0=40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1501: kansas north: nad27 -<1501> proj=lcc datum=NAD27 -lon_0=-98 lat_1=39d47 lat_2=38d43 lat_0=38d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1502: kansas south: nad27 -<1502> proj=lcc datum=NAD27 -lon_0=-98d30 lat_1=38d34 lat_2=37d16 lat_0=36d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1601: kentucky north: nad27 -<1601> proj=lcc datum=NAD27 -lon_0=-84d15 lat_1=38d58 lat_2=37d58 lat_0=37d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1602: kentucky south: nad27 -<1602> proj=lcc datum=NAD27 -lon_0=-85d45 lat_1=37d56 lat_2=36d44 lat_0=36d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1701: louisiana north: nad27 -<1701> proj=lcc datum=NAD27 -lon_0=-92d30 lat_1=32d40 lat_2=31d10 lat_0=30d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1702: louisiana south: nad27 -<1702> proj=lcc datum=NAD27 -lon_0=-91d20 lat_1=30d42 lat_2=29d18 lat_0=28d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1703: louisiana offshore: nad27 -<1703> proj=lcc datum=NAD27 -lon_0=-91d20 lat_1=27d50 lat_2=26d10 lat_0=25d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 1801: maine east: nad27 -<1801> proj=tmerc datum=NAD27 -lon_0=-68d30 lat_0=43d50 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1802: maine west: nad27 -<1802> proj=tmerc datum=NAD27 -lon_0=-70d10 lat_0=42d50 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 1900: maryland ---: nad27 -<1900> proj=lcc datum=NAD27 -lon_0=-77 lat_1=39d27 lat_2=38d18 lat_0=37d50 -x_0=243840.4876809754 y_0=0 -no_defs <> - -# 2001: massachusetts mainland: nad27 -<2001> proj=lcc datum=NAD27 -lon_0=-71d30 lat_1=42d41 lat_2=41d43 lat_0=41 -x_0=182880.3657607315 y_0=0 -no_defs <> - -# 2002: massachusetts island: nad27 -<2002> proj=lcc datum=NAD27 -lon_0=-70d30 lat_1=41d29 lat_2=41d17 lat_0=41 -x_0=60960.12192024384 y_0=0 -no_defs <> - -# 2101: michigan east: nad27 -<2101> proj=tmerc datum=NAD27 -lon_0=-83d40 lat_0=41d30 k=.9999428571428571 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2102: michigan central/m: nad27 -<2102> proj=tmerc datum=NAD27 -lon_0=-85d45 lat_0=41d30 k=.9999090909090909 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2103: michigan west: nad27 -<2103> proj=tmerc datum=NAD27 -lon_0=-88d45 lat_0=41d30 k=.9999090909090909 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2111: michigan north: nad27 -<2111> proj=lcc a=6378450.047 es=.006768657997291094 -lon_0=-87 lat_1=47d5 lat_2=45d29 lat_0=44d47 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2112: michigan central/l: nad27 -<2112> proj=lcc a=6378450.047 es=.006768657997291094 -lon_0=-84d20 lat_1=45d42 lat_2=44d11 lat_0=43d19 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2113: michigan south: nad27 -<2113> proj=lcc a=6378450.047 es=.006768657997291094 -lon_0=-84d20 lat_1=43d40 lat_2=42d6 lat_0=41d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2201: minnesota north: nad27 -<2201> proj=lcc datum=NAD27 -lon_0=-93d6 lat_1=48d38 lat_2=47d2 lat_0=46d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2202: minnesota central: nad27 -<2202> proj=lcc datum=NAD27 -lon_0=-94d15 lat_1=47d3 lat_2=45d37 lat_0=45 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2203: minnesota south: nad27 -<2203> proj=lcc datum=NAD27 -lon_0=-94 lat_1=45d13 lat_2=43d47 lat_0=43 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2301: mississippi east: nad27 -<2301> proj=tmerc datum=NAD27 -lon_0=-88d50 lat_0=29d40 k=.99996 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2302: mississippi west: nad27 -<2302> proj=tmerc datum=NAD27 -lon_0=-90d20 lat_0=30d30 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2401: missouri east: nad27 -<2401> proj=tmerc datum=NAD27 -lon_0=-90d30 lat_0=35d50 k=.9999333333333333 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2402: missouri central: nad27 -<2402> proj=tmerc datum=NAD27 -lon_0=-92d30 lat_0=35d50 k=.9999333333333333 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2403: missouri west: nad27 -<2403> proj=tmerc datum=NAD27 -lon_0=-94d30 lat_0=36d10 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2501: montana north: nad27 -<2501> proj=lcc datum=NAD27 -lon_0=-109d30 lat_1=48d43 lat_2=47d51 lat_0=47 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2502: montana central: nad27 -<2502> proj=lcc datum=NAD27 -lon_0=-109d30 lat_1=47d53 lat_2=46d27 lat_0=45d50 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2503: montana south: nad27 -<2503> proj=lcc datum=NAD27 -lon_0=-109d30 lat_1=46d24 lat_2=44d52 lat_0=44 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2601: nebraska north: nad27 -<2601> proj=lcc datum=NAD27 -lon_0=-100 lat_1=42d49 lat_2=41d51 lat_0=41d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2602: nebraska south: nad27 -<2602> proj=lcc datum=NAD27 -lon_0=-99d30 lat_1=41d43 lat_2=40d17 lat_0=39d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 2701: nevada east: nad27 -<2701> proj=tmerc datum=NAD27 -lon_0=-115d35 lat_0=34d45 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2702: nevada central: nad27 -<2702> proj=tmerc datum=NAD27 -lon_0=-116d40 lat_0=34d45 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2703: nevada west: nad27 -<2703> proj=tmerc datum=NAD27 -lon_0=-118d35 lat_0=34d45 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2800: new hampshire ---: nad27 -<2800> proj=tmerc datum=NAD27 -lon_0=-71d40 lat_0=42d30 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 2900: new jersey ---: nad27 -<2900> proj=tmerc datum=NAD27 -lon_0=-74d40 lat_0=38d50 k=.999975 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3001: new mexico east: nad27 -<3001> proj=tmerc datum=NAD27 -lon_0=-104d20 lat_0=31 k=.9999090909090909 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3002: new mexico central: nad27 -<3002> proj=tmerc datum=NAD27 -lon_0=-106d15 lat_0=31 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3003: new mexico west: nad27 -<3003> proj=tmerc datum=NAD27 -lon_0=-107d50 lat_0=31 k=.9999166666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3101: new york east: nad27 -<3101> proj=tmerc datum=NAD27 -lon_0=-74d20 lat_0=40 k=.9999666666666667 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3102: new york central: nad27 -<3102> proj=tmerc datum=NAD27 -lon_0=-76d35 lat_0=40 k=.9999375 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3103: new york west: nad27 -<3103> proj=tmerc datum=NAD27 -lon_0=-78d35 lat_0=40 k=.9999375 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3104: new york long island: nad27 -<3104> proj=lcc datum=NAD27 -lon_0=-74 lat_1=41d2 lat_2=40d40 lat_0=40d30 -x_0=609601.2192024384 y_0=30480.06096012192 -no_defs <> - -# 3200: north carolina ---: nad27 -<3200> proj=lcc datum=NAD27 -lon_0=-79 lat_1=36d10 lat_2=34d20 lat_0=33d45 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3301: north dakota north: nad27 -<3301> proj=lcc datum=NAD27 -lon_0=-100d30 lat_1=48d44 lat_2=47d26 lat_0=47 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3302: north dakota south: nad27 -<3302> proj=lcc datum=NAD27 -lon_0=-100d30 lat_1=47d29 lat_2=46d11 lat_0=45d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3401: ohio north: nad27 -<3401> proj=lcc datum=NAD27 -lon_0=-82d30 lat_1=41d42 lat_2=40d26 lat_0=39d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3402: ohio south: nad27 -<3402> proj=lcc datum=NAD27 -lon_0=-82d30 lat_1=40d2 lat_2=38d44 lat_0=38 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3501: oklahoma north: nad27 -<3501> proj=lcc datum=NAD27 -lon_0=-98 lat_1=36d46 lat_2=35d34 lat_0=35 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3502: oklahoma south: nad27 -<3502> proj=lcc datum=NAD27 -lon_0=-98 lat_1=35d14 lat_2=33d56 lat_0=33d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3601: oregon north: nad27 -<3601> proj=lcc datum=NAD27 -lon_0=-120d30 lat_1=46 lat_2=44d20 lat_0=43d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3602: oregon south: nad27 -<3602> proj=lcc datum=NAD27 -lon_0=-120d30 lat_1=44 lat_2=42d20 lat_0=41d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3701: pennsylvania north: nad27 -<3701> proj=lcc datum=NAD27 -lon_0=-77d45 lat_1=41d57 lat_2=40d53 lat_0=40d10 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3702: pennsylvania south: nad27 -<3702> proj=lcc datum=NAD27 -lon_0=-77d45 lat_1=40d58 lat_2=39d56 lat_0=39d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3800: rhode island ---: nad27 -<3800> proj=tmerc datum=NAD27 -lon_0=-71d30 lat_0=41d5 k=.99999375 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 3901: south carolina north: nad27 -<3901> proj=lcc datum=NAD27 -lon_0=-81 lat_1=34d58 lat_2=33d46 lat_0=33 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 3902: south carolina south: nad27 -<3902> proj=lcc datum=NAD27 -lon_0=-81 lat_1=33d40 lat_2=32d20 lat_0=31d50 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4001: south dakota north: nad27 -<4001> proj=lcc datum=NAD27 -lon_0=-100 lat_1=45d41 lat_2=44d25 lat_0=43d50 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4002: south dakota south: nad27 -<4002> proj=lcc datum=NAD27 -lon_0=-100d20 lat_1=44d24 lat_2=42d50 lat_0=42d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4100: tennessee ---: nad27 -<4100> proj=lcc datum=NAD27 -lon_0=-86 lat_1=36d25 lat_2=35d15 lat_0=34d40 -x_0=609601.2192024384 y_0=30480.06096012192 -no_defs <> - -# 4201: texas north: nad27 -<4201> proj=lcc datum=NAD27 -lon_0=-101d30 lat_1=36d11 lat_2=34d39 lat_0=34 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4202: texas north central: nad27 -<4202> proj=lcc datum=NAD27 -lon_0=-97d30 lat_1=33d58 lat_2=32d8 lat_0=31d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4203: texas central: nad27 -<4203> proj=lcc datum=NAD27 -lon_0=-100d20 lat_1=31d53 lat_2=30d7 lat_0=29d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4204: texas south central: nad27 -<4204> proj=lcc datum=NAD27 -lon_0=-99 lat_1=30d17 lat_2=28d23 lat_0=27d50 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4205: texas south: nad27 -<4205> proj=lcc datum=NAD27 -lon_0=-98d30 lat_1=27d50 lat_2=26d10 lat_0=25d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4301: utah north: nad27 -<4301> proj=lcc datum=NAD27 -lon_0=-111d30 lat_1=41d47 lat_2=40d43 lat_0=40d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4302: utah central: nad27 -<4302> proj=lcc datum=NAD27 -lon_0=-111d30 lat_1=40d39 lat_2=39d1 lat_0=38d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4303: utah south: nad27 -<4303> proj=lcc datum=NAD27 -lon_0=-111d30 lat_1=38d21 lat_2=37d13 lat_0=36d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4400: vermont ---: nad27 -<4400> proj=tmerc datum=NAD27 -lon_0=-72d30 lat_0=42d30 k=.9999642857142857 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 4501: virginia north: nad27 -<4501> proj=lcc datum=NAD27 -lon_0=-78d30 lat_1=39d12 lat_2=38d2 lat_0=37d40 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4502: virginia south: nad27 -<4502> proj=lcc datum=NAD27 -lon_0=-78d30 lat_1=37d58 lat_2=36d46 lat_0=36d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4601: washington north: nad27 -<4601> proj=lcc datum=NAD27 -lon_0=-120d50 lat_1=48d44 lat_2=47d30 lat_0=47 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4602: washington south: nad27 -<4602> proj=lcc datum=NAD27 -lon_0=-120d30 lat_1=47d20 lat_2=45d50 lat_0=45d20 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4701: west virginia north: nad27 -<4701> proj=lcc datum=NAD27 -lon_0=-79d30 lat_1=40d15 lat_2=39 lat_0=38d30 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4702: west virginia south: nad27 -<4702> proj=lcc datum=NAD27 -lon_0=-81 lat_1=38d53 lat_2=37d29 lat_0=37 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4801: wisconsin north: nad27 -<4801> proj=lcc datum=NAD27 -lon_0=-90 lat_1=46d46 lat_2=45d34 lat_0=45d10 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4802: wisconsin central: nad27 -<4802> proj=lcc datum=NAD27 -lon_0=-90 lat_1=45d30 lat_2=44d15 lat_0=43d50 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4803: wisconsin south: nad27 -<4803> proj=lcc datum=NAD27 -lon_0=-90 lat_1=44d4 lat_2=42d44 lat_0=42 -x_0=609601.2192024384 y_0=0 -no_defs <> - -# 4901: wyoming east: nad27 -<4901> proj=tmerc datum=NAD27 -lon_0=-105d10 lat_0=40d40 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 4902: wyoming east central: nad27 -<4902> proj=tmerc datum=NAD27 -lon_0=-107d20 lat_0=40d40 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 4903: wyoming west central: nad27 -<4903> proj=tmerc datum=NAD27 -lon_0=-108d45 lat_0=40d40 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 4904: wyoming west: nad27 -<4904> proj=tmerc datum=NAD27 -lon_0=-110d5 lat_0=40d40 k=.9999411764705882 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5001: alaska zone no. 1: nad27 -<5001> proj=omerc datum=NAD27 -k=.9999 lonc=-133d40 lat_0=57 alpha=-36d52'11.6315 -x_0=818585.5672270928 y_0=575219.2451072642 -no_defs <> - -# 5002: alaska zone no. 2: nad27 -<5002> proj=tmerc datum=NAD27 -lon_0=-142 lat_0=54 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5003: alaska zone no. 3: nad27 -<5003> proj=tmerc datum=NAD27 -lon_0=-146 lat_0=54 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5004: alaska zone no. 4: nad27 -<5004> proj=tmerc datum=NAD27 -lon_0=-150 lat_0=54 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5005: alaska zone no. 5: nad27 -<5005> proj=tmerc datum=NAD27 -lon_0=-154 lat_0=54 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5006: alaska zone no. 6: nad27 -<5006> proj=tmerc datum=NAD27 -lon_0=-158 lat_0=54 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5007: alaska zone no. 7: nad27 -<5007> proj=tmerc datum=NAD27 -lon_0=-162 lat_0=54 k=.9999 -x_0=213360.4267208534 y_0=0 -no_defs <> - -# 5008: alaska zone no. 8: nad27 -<5008> proj=tmerc datum=NAD27 -lon_0=-166 lat_0=54 k=.9999 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5009: alaska zone no. 9: nad27 -<5009> proj=tmerc datum=NAD27 -lon_0=-170 lat_0=54 k=.9999 -x_0=182880.3657607315 y_0=0 -no_defs <> - -# 5201: puerto rico and virgin islands: nad27 -<5201> proj=lcc datum=NAD27 -lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50 -x_0=152400.3048006096 y_0=0 -no_defs <> - -# 5202: virgin islands st. croix: nad27 -<5202> proj=lcc datum=NAD27 -lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50 -x_0=152400.3048006096 y_0=30480.06096012192 -no_defs <> - -# 5400: guam island: nad27 -<5400> proj=poly datum=NAD27 -x_0=50000 y_0=50000 lon_0=144d44'55.50254 lat_0=13d28'20.87887 -no_defs <> - diff --git a/src/3rdparty/proj/proj_data/nad83 b/src/3rdparty/proj/proj_data/nad83 deleted file mode 100644 index e740a4d5..00000000 --- a/src/3rdparty/proj/proj_data/nad83 +++ /dev/null @@ -1,744 +0,0 @@ -# SCCSID @(#)nad83 4.1 92/12/20 GIE -# proj +init files for: -# -# State Plane Coordinate Systems, -# North American Datum 1983 - -# 101: alabama east: nad83 -<101> proj=tmerc datum=NAD83 -lon_0=-85d50 lat_0=30d30 k=.99996 -x_0=200000 y_0=0 -no_defs <> - -# 102: alabama west: nad83 -<102> proj=tmerc datum=NAD83 -lon_0=-87d30 lat_0=30 k=.9999333333333333 -x_0=600000 y_0=0 -no_defs <> - -# 5010: alaska zone no. 10: nad83 -<5010> proj=lcc datum=NAD83 -lon_0=-176 lat_1=53d50 lat_2=51d50 lat_0=51 -x_0=1000000 y_0=0 -no_defs <> - -# 201: arizona east: nad83 -<201> proj=tmerc datum=NAD83 -lon_0=-110d10 lat_0=31 k=.9999 -x_0=213360 y_0=0 -no_defs <> - -# 202: arizona central: nad83 -<202> proj=tmerc datum=NAD83 -lon_0=-111d55 lat_0=31 k=.9999 -x_0=213360 y_0=0 -no_defs <> - -# 203: arizona west: nad83 -<203> proj=tmerc datum=NAD83 -lon_0=-113d45 lat_0=31 k=.9999333333333333 -x_0=213360 y_0=0 -no_defs <> - -# 301: arkansas north: nad83 -<301> proj=lcc datum=NAD83 -lon_0=-92 lat_1=36d14 lat_2=34d56 lat_0=34d20 -x_0=400000 y_0=0 -no_defs <> - -# 302: arkansas south: nad83 -<302> proj=lcc datum=NAD83 -lon_0=-92 lat_1=34d46 lat_2=33d18 lat_0=32d40 -x_0=400000 y_0=400000 -no_defs <> - -# 401: california i: nad83 -<401> proj=lcc datum=NAD83 -lon_0=-122 lat_1=41d40 lat_2=40 lat_0=39d20 -x_0=2000000 y_0=500000 -no_defs <> - -# 402: california ii: nad83 -<402> proj=lcc datum=NAD83 -lon_0=-122 lat_1=39d50 lat_2=38d20 lat_0=37d40 -x_0=2000000 y_0=500000 -no_defs <> - -# 403: california iii: nad83 -<403> proj=lcc datum=NAD83 -lon_0=-120d30 lat_1=38d26 lat_2=37d4 lat_0=36d30 -x_0=2000000 y_0=500000 -no_defs <> - -# 404: california iv: nad83 -<404> proj=lcc datum=NAD83 -lon_0=-119 lat_1=37d15 lat_2=36 lat_0=35d20 -x_0=2000000 y_0=500000 -no_defs <> - -# 405: california v: nad83 -<405> proj=lcc datum=NAD83 -lon_0=-118 lat_1=35d28 lat_2=34d2 lat_0=33d30 -x_0=2000000 y_0=500000 -no_defs <> - -# 406: california vi: nad83 -<406> proj=lcc datum=NAD83 -lon_0=-116d15 lat_1=33d53 lat_2=32d47 lat_0=32d10 -x_0=2000000 y_0=500000 -no_defs <> - -# 501: colorado north: nad83 -<501> proj=lcc datum=NAD83 -lon_0=-105d30 lat_1=40d47 lat_2=39d43 lat_0=39d20 -x_0=914401.8289 y_0=304800.6096 -no_defs <> - -# 502: colorado central: nad83 -<502> proj=lcc datum=NAD83 -lon_0=-105d30 lat_1=39d45 lat_2=38d27 lat_0=37d50 -x_0=914401.8289 y_0=304800.6096 -no_defs <> - -# 503: colorado south: nad83 -<503> proj=lcc datum=NAD83 -lon_0=-105d30 lat_1=38d26 lat_2=37d14 lat_0=36d40 -x_0=914401.8289 y_0=304800.6096 -no_defs <> - -# 600: connecticut ---: nad83 -<600> proj=lcc datum=NAD83 -lon_0=-72d45 lat_1=41d52 lat_2=41d12 lat_0=40d50 -x_0=304800.6096 y_0=152400.3048 -no_defs <> - -# 700: delaware ---: nad83 -<700> proj=tmerc datum=NAD83 -lon_0=-75d25 lat_0=38 k=.999995 -x_0=200000 y_0=0 -no_defs <> - -# 901: florida east: nad83 -<901> proj=tmerc datum=NAD83 -lon_0=-81 lat_0=24d20 k=.9999411764705882 -x_0=200000 y_0=0 -no_defs <> - -# 902: florida west: nad83 -<902> proj=tmerc datum=NAD83 -lon_0=-82 lat_0=24d20 k=.9999411764705882 -x_0=200000 y_0=0 -no_defs <> - -# 903: florida north: nad83 -<903> proj=lcc datum=NAD83 -lon_0=-84d30 lat_1=30d45 lat_2=29d35 lat_0=29 -x_0=600000 y_0=0 -no_defs <> - -# 1001: georgia east: nad83 -<1001> proj=tmerc datum=NAD83 -lon_0=-82d10 lat_0=30 k=.9999 -x_0=200000 y_0=0 -no_defs <> - -# 1002: georgia west: nad83 -<1002> proj=tmerc datum=NAD83 -lon_0=-84d10 lat_0=30 k=.9999 -x_0=700000 y_0=0 -no_defs <> - -# 5101: hawaii 1: nad83 -<5101> proj=tmerc datum=NAD83 -lon_0=-155d30 lat_0=18d50 k=.9999666666666667 -x_0=500000 y_0=0 -no_defs <> - -# 5102: hawaii 2: nad83 -<5102> proj=tmerc datum=NAD83 -lon_0=-156d40 lat_0=20d20 k=.9999666666666667 -x_0=500000 y_0=0 -no_defs <> - -# 5103: hawaii 3: nad83 -<5103> proj=tmerc datum=NAD83 -lon_0=-158 lat_0=21d10 k=.99999 -x_0=500000 y_0=0 -no_defs <> - -# 5104: hawaii 4: nad83 -<5104> proj=tmerc datum=NAD83 -lon_0=-159d30 lat_0=21d50 k=.99999 -x_0=500000 y_0=0 -no_defs <> - -# 5105: hawaii 5: nad83 -<5105> proj=tmerc datum=NAD83 -lon_0=-160d10 lat_0=21d40 k=1 -x_0=500000 y_0=0 -no_defs <> - -# 1101: idaho east: nad83 -<1101> proj=tmerc datum=NAD83 -lon_0=-112d10 lat_0=41d40 k=.9999473684210526 -x_0=200000 y_0=0 -no_defs <> - -# 1102: idaho central: nad83 -<1102> proj=tmerc datum=NAD83 -lon_0=-114 lat_0=41d40 k=.9999473684210526 -x_0=500000 y_0=0 -no_defs <> - -# 1103: idaho west: nad83 -<1103> proj=tmerc datum=NAD83 -lon_0=-115d45 lat_0=41d40 k=.9999333333333333 -x_0=800000 y_0=0 -no_defs <> - -# 1201: illinois east: nad83 -<1201> proj=tmerc datum=NAD83 -lon_0=-88d20 lat_0=36d40 k=.999975 -x_0=300000 y_0=0 -no_defs <> - -# 1202: illinois west: nad83 -<1202> proj=tmerc datum=NAD83 -lon_0=-90d10 lat_0=36d40 k=.9999411764705882 -x_0=700000 y_0=0 -no_defs <> - -# 1301: indiana east: nad83 -<1301> proj=tmerc datum=NAD83 -lon_0=-85d40 lat_0=37d30 k=.9999666666666667 -x_0=100000 y_0=250000 -no_defs <> - -# 1302: indiana west: nad83 -<1302> proj=tmerc datum=NAD83 -lon_0=-87d5 lat_0=37d30 k=.9999666666666667 -x_0=900000 y_0=250000 -no_defs <> - -# 1401: iowa north: nad83 -<1401> proj=lcc datum=NAD83 -lon_0=-93d30 lat_1=43d16 lat_2=42d4 lat_0=41d30 -x_0=1500000 y_0=1000000 -no_defs <> - -# 1402: iowa south: nad83 -<1402> proj=lcc datum=NAD83 -lon_0=-93d30 lat_1=41d47 lat_2=40d37 lat_0=40 -x_0=500000 y_0=0 -no_defs <> - -# 1501: kansas north: nad83 -<1501> proj=lcc datum=NAD83 -lon_0=-98 lat_1=39d47 lat_2=38d43 lat_0=38d20 -x_0=400000 y_0=0 -no_defs <> - -# 1502: kansas south: nad83 -<1502> proj=lcc datum=NAD83 -lon_0=-98d30 lat_1=38d34 lat_2=37d16 lat_0=36d40 -x_0=400000 y_0=400000 -no_defs <> - -# 1601: kentucky north: nad83 -<1601> proj=lcc datum=NAD83 -lon_0=-84d15 lat_1=38d58 lat_2=37d58 lat_0=37d30 -x_0=500000 y_0=0 -no_defs <> - -# 1602: kentucky south: nad83 -<1602> proj=lcc datum=NAD83 -lon_0=-85d45 lat_1=37d56 lat_2=36d44 lat_0=36d20 -x_0=500000 y_0=500000 -no_defs <> - -# 1701: louisiana north: nad83 -<1701> proj=lcc datum=NAD83 -lon_0=-92d30 lat_1=32d40 lat_2=31d10 lat_0=30d30 -x_0=1000000 y_0=0 -no_defs <> - -# 1702: louisiana south: nad83 -<1702> proj=lcc datum=NAD83 -lon_0=-91d20 lat_1=30d42 lat_2=29d18 lat_0=28d30 -x_0=1000000 y_0=0 -no_defs <> - -# 1703: louisiana offshore: nad83 -<1703> proj=lcc datum=NAD83 -lon_0=-91d20 lat_1=27d50 lat_2=26d10 lat_0=25d30 -x_0=1000000 y_0=0 -no_defs <> - -# 1801: maine east: nad83 -<1801> proj=tmerc datum=NAD83 -lon_0=-68d30 lat_0=43d40 k=.9999 -x_0=300000 y_0=0 -no_defs <> - -# 1802: maine west: nad83 -<1802> proj=tmerc datum=NAD83 -lon_0=-70d10 lat_0=42d50 k=.9999666666666667 -x_0=900000 y_0=0 -no_defs <> - -# 1900: maryland ---: nad83 -<1900> proj=lcc datum=NAD83 -lon_0=-77 lat_1=39d27 lat_2=38d18 lat_0=37d40 -x_0=400000 y_0=0 -no_defs <> - -# 2001: massachusetts mainland: nad83 -<2001> proj=lcc datum=NAD83 -lon_0=-71d30 lat_1=42d41 lat_2=41d43 lat_0=41 -x_0=200000 y_0=750000 -no_defs <> - -# 2002: massachusetts island: nad83 -<2002> proj=lcc datum=NAD83 -lon_0=-70d30 lat_1=41d29 lat_2=41d17 lat_0=41 -x_0=500000 y_0=0 -no_defs <> - -# 2111: michigan north: nad83 -<2111> proj=lcc datum=NAD83 -lon_0=-87 lat_1=47d5 lat_2=45d29 lat_0=44d47 -x_0=8000000 y_0=0 -no_defs <> - -# 2112: michigan central/l: nad83 -<2112> proj=lcc datum=NAD83 -lon_0=-84d22 lat_1=45d42 lat_2=44d11 lat_0=43d19 -x_0=6000000 y_0=0 -no_defs <> - -# 2113: michigan south: nad83 -<2113> proj=lcc datum=NAD83 -lon_0=-84d22 lat_1=43d40 lat_2=42d6 lat_0=41d30 -x_0=4000000 y_0=0 -no_defs <> - -# 2201: minnesota north: nad83 -<2201> proj=lcc datum=NAD83 -lon_0=-93d6 lat_1=48d38 lat_2=47d2 lat_0=46d30 -x_0=800000 y_0=100000 -no_defs <> - -# 2202: minnesota central: nad83 -<2202> proj=lcc datum=NAD83 -lon_0=-94d15 lat_1=47d3 lat_2=45d37 lat_0=45 -x_0=800000 y_0=100000 -no_defs <> - -# 2203: minnesota south: nad83 -<2203> proj=lcc datum=NAD83 -lon_0=-94 lat_1=45d13 lat_2=43d47 lat_0=43 -x_0=800000 y_0=100000 -no_defs <> - -# 2301: mississippi east: nad83 -<2301> proj=tmerc datum=NAD83 -lon_0=-88d50 lat_0=29d30 k=.99995 -x_0=300000 y_0=0 -no_defs <> - -# 2302: mississippi west: nad83 -<2302> proj=tmerc datum=NAD83 -lon_0=-90d20 lat_0=29d30 k=.99995 -x_0=700000 y_0=0 -no_defs <> - -# 2401: missouri east: nad83 -<2401> proj=tmerc datum=NAD83 -lon_0=-90d30 lat_0=35d50 k=.9999333333333333 -x_0=250000 y_0=0 -no_defs <> - -# 2402: missouri central: nad83 -<2402> proj=tmerc datum=NAD83 -lon_0=-92d30 lat_0=35d50 k=.9999333333333333 -x_0=500000 y_0=0 -no_defs <> - -# 2403: missouri west: nad83 -<2403> proj=tmerc datum=NAD83 -lon_0=-94d30 lat_0=36d10 k=.9999411764705882 -x_0=850000 y_0=0 -no_defs <> - -# 2500: montana: nad83 -<2500> proj=lcc datum=NAD83 -lon_0=-109d30 lat_1=49 lat_2=45 lat_0=44d15 -x_0=600000 y_0=0 -no_defs <> - -# 2600: nebraska: nad83 -<2600> proj=lcc datum=NAD83 -lon_0=-100 lat_1=43 lat_2=40 lat_0=39d50 -x_0=500000 y_0=0 -no_defs <> - -# 2701: nevada east: nad83 -<2701> proj=tmerc datum=NAD83 -lon_0=-115d35 lat_0=34d45 k=.9999 -x_0=200000 y_0=8000000 -no_defs <> - -# 2702: nevada central: nad83 -<2702> proj=tmerc datum=NAD83 -lon_0=-116d40 lat_0=34d45 k=.9999 -x_0=500000 y_0=6000000 -no_defs <> - -# 2703: nevada west: nad83 -<2703> proj=tmerc datum=NAD83 -lon_0=-118d35 lat_0=34d45 k=.9999 -x_0=800000 y_0=4000000 -no_defs <> - -# 2800: new hampshire ---: nad83 -<2800> proj=tmerc datum=NAD83 -lon_0=-71d40 lat_0=42d30 k=.9999666666666667 -x_0=300000 y_0=0 -no_defs <> - -# 2900: new jersey ---: nad83 -<2900> proj=tmerc datum=NAD83 -lon_0=-74d30 lat_0=38d50 k=.9999 -x_0=150000 y_0=0 -no_defs <> - -# 3001: new mexico east: nad83 -<3001> proj=tmerc datum=NAD83 -lon_0=-104d20 lat_0=31 k=.9999090909090909 -x_0=165000 y_0=0 -no_defs <> - -# 3002: new mexico central: nad83 -<3002> proj=tmerc datum=NAD83 -lon_0=-106d15 lat_0=31 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 3003: new mexico west: nad83 -<3003> proj=tmerc datum=NAD83 -lon_0=-107d50 lat_0=31 k=.9999166666666667 -x_0=830000 y_0=0 -no_defs <> - -# 3101: new york east: nad83 -<3101> proj=tmerc datum=NAD83 -lon_0=-74d30 lat_0=38d50 k=.9999 -x_0=150000 y_0=0 -no_defs <> - -# 3102: new york central: nad83 -<3102> proj=tmerc datum=NAD83 -lon_0=-76d35 lat_0=40 k=.9999375 -x_0=250000 y_0=0 -no_defs <> - -# 3103: new york west: nad83 -<3103> proj=tmerc datum=NAD83 -lon_0=-78d35 lat_0=40 k=.9999375 -x_0=350000 y_0=0 -no_defs <> - -# 3104: new york long island: nad83 -<3104> proj=lcc datum=NAD83 -lon_0=-74 lat_1=41d2 lat_2=40d40 lat_0=40d10 -x_0=300000 y_0=0 -no_defs <> - -# 3200: north carolina ---: nad83 -<3200> proj=lcc datum=NAD83 -lon_0=-79 lat_1=36d10 lat_2=34d20 lat_0=33d45 -x_0=609601.22 y_0=0 -no_defs <> - -# 3301: north dakota north: nad83 -<3301> proj=lcc datum=NAD83 -lon_0=-100d30 lat_1=48d44 lat_2=47d26 lat_0=47 -x_0=600000 y_0=0 -no_defs <> - -# 3302: north dakota south: nad83 -<3302> proj=lcc datum=NAD83 -lon_0=-100d30 lat_1=47d29 lat_2=46d11 lat_0=45d40 -x_0=600000 y_0=0 -no_defs <> - -# 3401: ohio north: nad83 -<3401> proj=lcc datum=NAD83 -lon_0=-82d30 lat_1=41d42 lat_2=40d26 lat_0=39d40 -x_0=600000 y_0=0 -no_defs <> - -# 3402: ohio south: nad83 -<3402> proj=lcc datum=NAD83 -lon_0=-82d30 lat_1=40d2 lat_2=38d44 lat_0=38 -x_0=600000 y_0=0 -no_defs <> - -# 3501: oklahoma north: nad83 -<3501> proj=lcc datum=NAD83 -lon_0=-98 lat_1=36d46 lat_2=35d34 lat_0=35 -x_0=600000 y_0=0 -no_defs <> - -# 3502: oklahoma south: nad83 -<3502> proj=lcc datum=NAD83 -lon_0=-98 lat_1=35d14 lat_2=33d56 lat_0=33d20 -x_0=600000 y_0=0 -no_defs <> - -# 3601: oregon north: nad83 -<3601> proj=lcc datum=NAD83 -lon_0=-120d30 lat_1=46 lat_2=44d20 lat_0=43d40 -x_0=2500000 y_0=0 -no_defs <> - -# 3602: oregon south: nad83 -<3602> proj=lcc datum=NAD83 -lon_0=-120d30 lat_1=44 lat_2=42d20 lat_0=41d40 -x_0=1500000 y_0=0 -no_defs <> - -# 3701: pennsylvania north: nad83 -<3701> proj=lcc datum=NAD83 -lon_0=-77d45 lat_1=41d57 lat_2=40d53 lat_0=40d10 -x_0=600000 y_0=0 -no_defs <> - -# 3702: pennsylvania south: nad83 -<3702> proj=lcc datum=NAD83 -lon_0=-77d45 lat_1=40d58 lat_2=39d56 lat_0=39d20 -x_0=600000 y_0=0 -no_defs <> - -# 3800: rhode island ---: nad83 -<3800> proj=tmerc datum=NAD83 -lon_0=-71d30 lat_0=41d5 k=.99999375 -x_0=100000 y_0=0 -no_defs <> - -# 3900: south carolina: nad83 -<3900> proj=lcc datum=NAD83 -lon_0=-81 lat_1=34d50 lat_2=32d30 lat_0=31d50 -x_0=609600 y_0=0 -no_defs <> - -# 4001: south dakota north: nad83 -<4001> proj=lcc datum=NAD83 -lon_0=-100 lat_1=45d41 lat_2=44d25 lat_0=43d50 -x_0=600000 y_0=0 -no_defs <> - -# 4002: south dakota south: nad83 -<4002> proj=lcc datum=NAD83 -lon_0=-100d20 lat_1=44d24 lat_2=42d50 lat_0=42d20 -x_0=600000 y_0=0 -no_defs <> - -# 4100: tennessee ---: nad83 -<4100> proj=lcc datum=NAD83 -lon_0=-86 lat_1=36d25 lat_2=35d15 lat_0=34d20 -x_0=600000 y_0=0 -no_defs <> - -# 4201: texas north: nad83 -<4201> proj=lcc datum=NAD83 -lon_0=-101d30 lat_1=36d11 lat_2=34d39 lat_0=34 -x_0=200000 y_0=1000000 -no_defs <> - -# 4202: texas north central: nad83 -<4202> proj=lcc datum=NAD83 -lon_0=-98d30 lat_1=33d58 lat_2=32d8 lat_0=31d40 -x_0=600000 y_0=2000000 -no_defs <> - -# 4203: texas central: nad83 -<4203> proj=lcc datum=NAD83 -lon_0=-100d20 lat_1=31d53 lat_2=30d7 lat_0=29d40 -x_0=700000 y_0=3000000 -no_defs <> - -# 4204: texas south central: nad83 -<4204> proj=lcc datum=NAD83 -lon_0=-99 lat_1=30d17 lat_2=28d23 lat_0=27d50 -x_0=600000 y_0=4000000 -no_defs <> - -# 4205: texas south: nad83 -<4205> proj=lcc datum=NAD83 -lon_0=-98d30 lat_1=27d50 lat_2=26d10 lat_0=25d40 -x_0=300000 y_0=5000000 -no_defs <> - -# 4301: utah north: nad83 -<4301> proj=lcc datum=NAD83 -lon_0=-111d30 lat_1=41d47 lat_2=40d43 lat_0=40d20 -x_0=500000 y_0=1000000 -no_defs <> - -# 4302: utah central: nad83 -<4302> proj=lcc datum=NAD83 -lon_0=-111d30 lat_1=40d39 lat_2=39d1 lat_0=38d20 -x_0=500000 y_0=2000000 -no_defs <> - -# 4303: utah south: nad83 -<4303> proj=lcc datum=NAD83 -lon_0=-111d30 lat_1=38d21 lat_2=37d13 lat_0=36d40 -x_0=500000 y_0=3000000 -no_defs <> - -# 4400: vermont ---: nad83 -<4400> proj=tmerc datum=NAD83 -lon_0=-72d30 lat_0=42d30 k=.9999642857142857 -x_0=500000 y_0=0 -no_defs <> - -# 4501: virginia north: nad83 -<4501> proj=lcc datum=NAD83 -lon_0=-78d30 lat_1=39d12 lat_2=38d2 lat_0=37d40 -x_0=3500000 y_0=2000000 -no_defs <> - -# 4502: virginia south: nad83 -<4502> proj=lcc datum=NAD83 -lon_0=-78d30 lat_1=37d58 lat_2=36d46 lat_0=36d20 -x_0=3500000 y_0=1000000 -no_defs <> - -# 4601: washington north: nad83 -<4601> proj=lcc datum=NAD83 -lon_0=-120d50 lat_1=48d44 lat_2=47d30 lat_0=47 -x_0=500000 y_0=0 -no_defs <> - -# 4602: washington south: nad83 -<4602> proj=lcc datum=NAD83 -lon_0=-120d30 lat_1=47d20 lat_2=45d50 lat_0=45d20 -x_0=500000 y_0=0 -no_defs <> - -# 4701: west virginia north: nad83 -<4701> proj=lcc datum=NAD83 -lon_0=-79d30 lat_1=40d15 lat_2=39 lat_0=38d30 -x_0=600000 y_0=0 -no_defs <> - -# 4702: west virginia south: nad83 -<4702> proj=lcc datum=NAD83 -lon_0=-81 lat_1=38d53 lat_2=37d29 lat_0=37 -x_0=600000 y_0=0 -no_defs <> - -# 4801: wisconsin north: nad83 -<4801> proj=lcc datum=NAD83 -lon_0=-90 lat_1=46d46 lat_2=45d34 lat_0=45d10 -x_0=600000 y_0=0 -no_defs <> - -# 4802: wisconsin central: nad83 -<4802> proj=lcc datum=NAD83 -lon_0=-90 lat_1=45d30 lat_2=44d15 lat_0=43d50 -x_0=600000 y_0=0 -no_defs <> - -# 4803: wisconsin south: nad83 -<4803> proj=lcc datum=NAD83 -lon_0=-90 lat_1=44d4 lat_2=42d44 lat_0=42 -x_0=600000 y_0=0 -no_defs <> - -# 4901: wyoming east: nad83 -<4901> proj=tmerc datum=NAD83 -lon_0=-105d10 lat_0=40d30 k=.9999375 -x_0=200000 y_0=0 -no_defs <> - -# 4902: wyoming east central: nad83 -<4902> proj=tmerc datum=NAD83 -lon_0=-107d20 lat_0=40d30 k=.9999375 -x_0=400000 y_0=100000 -no_defs <> - -# 4903: wyoming west central: nad83 -<4903> proj=tmerc datum=NAD83 -lon_0=-108d45 lat_0=40d30 k=.9999375 -x_0=600000 y_0=0 -no_defs <> - -# 4904: wyoming west: nad83 -<4904> proj=tmerc datum=NAD83 -lon_0=-110d5 lat_0=40d30 k=.9999375 -x_0=800000 y_0=100000 -no_defs <> - -# 5001: alaska zone no. 1: nad83 -<5001> proj=omerc datum=NAD83 -k=.9999 lonc=-133d40 lat_0=57 alpha=-36d52'11.6315 -x_0=818676.7344011233 y_0=575097.6888751927 -no_defs <> - -# 5002: alaska zone no. 2: nad83 -<5002> proj=tmerc datum=NAD83 -lon_0=-142 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5003: alaska zone no. 3: nad83 -<5003> proj=tmerc datum=NAD83 -lon_0=-146 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5004: alaska zone no. 4: nad83 -<5004> proj=tmerc datum=NAD83 -lon_0=-150 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5005: alaska zone no. 5: nad83 -<5005> proj=tmerc datum=NAD83 -lon_0=-154 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5006: alaska zone no. 6: nad83 -<5006> proj=tmerc datum=NAD83 -lon_0=-158 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5007: alaska zone no. 7: nad83 -<5007> proj=tmerc datum=NAD83 -lon_0=-162 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5008: alaska zone no. 8: nad83 -<5008> proj=tmerc datum=NAD83 -lon_0=-166 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5009: alaska zone no. 9: nad83 -<5009> proj=tmerc datum=NAD83 -lon_0=-170 lat_0=54 k=.9999 -x_0=500000 y_0=0 -no_defs <> - -# 5200: puerto rico and virgin islands: nad83 -<5200> proj=lcc datum=NAD83 -lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50 -x_0=200000 y_0=200000 -no_defs <> - diff --git a/src/3rdparty/proj/proj_data/other.extra b/src/3rdparty/proj/proj_data/other.extra deleted file mode 100644 index 168525d2..00000000 --- a/src/3rdparty/proj/proj_data/other.extra +++ /dev/null @@ -1,49 +0,0 @@ -## NAD83 / BC Albers (this has been superceeded but is kept for compatibility) -<42102> +proj=aea +ellps=GRS80 +lat_0=45 +lon_0=-126.0 +lat_1=50.0 +lat_2=58.5 +x_0=1000000.0 +y_0=0 +datum=NAD83 +units=m no_defs <> - - -# -# OGC-defined extended codes (41000--41999) -# see http://www.digitalearth.gov/wmt/auto.html -# -# WGS84 / Simple Mercator -<41001> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# -# CubeWerx-defined extended codes (42100--42199) -# -# WGS 84 / LCC Canada -<42101> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=-8000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -#EPSG:42102,"PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS_1980\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"Decimal_Degree\",0.0174532925199433]],PROJECTION[\"Albers_conic_equal_area\"],PARAMETER[\"central_meridian\",-126.0],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"standard_parallel_1\",50.0],PARAMETER[\"standard_parallel_2\",58.5],PARAMETER[\"false_easting\",1000000.0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]" -# WGS 84 / LCC USA -<42103> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=0 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS72 +datum=WGS84 +units=m +no_defs no_defs <> -# NAD83 / MTM zone 8 Québec -<42104> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> -# WGS84 / Merc NorthAm -<42105> +proj=merc +lat_ts=0 +lon_0=-96 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> -# WGS84 / Lambert Azim Mozambique -<42106> +proj=laea +lat_0=5 +lon_0=20 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +datum=WGS84 +units=m +no_defs no_defs <> -# -# CubeWerx-customer definitions (42300--42399) -# -# NAD27 / Polar Stereographic / CM=-98 -<42301> +proj=stere +lat_0=90 +lon_0=-98 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# JapanOrtho.09 09 -<42302> +proj=tmerc +lat_0=36 +lon_0=139.833333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> -# NAD83 / Albers NorthAm -<42303> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / NRCan LCC Canada -<42304> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# France_II -<42305> +proj=lcc +lat_1=45.898918964419 +lat_2=47.696014502038 +lat_0=46.8 +lon_0=2.337229166666667 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +pm=2.337229166666667 +units=m +no_defs no_defs <> -# NAD83/QC_LCC -<42306> +proj=lcc +lat_1=46 +lat_2=60 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# NAD83 / Texas Central - feet -<42307> +proj=lcc +lat_1=31.8833333333333 +lat_2=30.1166666666667 +lat_0=29.6666666666667 +lon_0=-100.333333333333 +x_0=700000.0000000001 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> -# NAD27 / California Albers -<42308> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> -# NAD 83 / LCC Canada AVHRR-2 -<42309> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> -# WGS84+GRS80 / Mercator -<42310> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=GRS80 +datum=WGS84 +units=m +no_defs no_defs <> -# NAD83 / LCC Statcan -<42311> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666700000001 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> diff --git a/src/3rdparty/proj/proj_data/proj_def.dat b/src/3rdparty/proj/proj_data/proj_def.dat deleted file mode 100644 index 00dff281..00000000 --- a/src/3rdparty/proj/proj_data/proj_def.dat +++ /dev/null @@ -1,17 +0,0 @@ -# Projection library defaults file -# SCCSID--- @(#)proj_def.dat 4.3 94/02/23 GIE REL" -# very preliminary version -<general> -ellps=WGS84 -<> -<aea> # Conterminous U.S. map -lat_1=29.5 -lat_2=45.5 -<> -<lcc> # Conterminous U.S. map -lat_1=33 -lat_2=45 -<> -<lagrng> -W=2 -<> diff --git a/src/3rdparty/proj/proj_data/world b/src/3rdparty/proj/proj_data/world deleted file mode 100644 index 2018b533..00000000 --- a/src/3rdparty/proj/proj_data/world +++ /dev/null @@ -1,212 +0,0 @@ -# SCCSID @(#)world 1.2 95/08/05 GIE REL -# proj +init files for various non-U.S. coordinate systems. -# -<CH1903> # Swiss Coordinate System - +proj=somerc +lat_0=46d57'8.660"N +lon_0=7d26'22.500"E - +ellps=bessel +x_0=600000 +y_0=200000 - +k_0=1. no_defs <> -<madagascar> # Laborde grid for Madagascar - proj=labrd ellps=intl lon_0=46d26'13.95E lat_0=18d54S - azi=18d54 k_0=.9995 x_0=400000 y_0=800000 - no_defs <> -<new_zealand> # New Zealand Map Grid (NZMG) - proj=nzmg # Projection unique to N.Z. so all factors fixed - no_defs <> -# Secondary grids DMA TM8358.1, p. 4.3 -<bwi> # British West Indies - proj=tmerc ellps=clrk80 lon_0=62W - x_0=400000 k_0=0.9995 - no_defs <> -<costa-n> # Costa Rica Norte - proj=lcc ellps=clrk66 lat_1=10d28N lon_0=84d20W - x_0=500000 y_0=217820.522 k_0=0.99995696 - no_defs <> -<costa-s> # Costa Rica Sud - proj=lcc ellps=clrk66 lat_1=9dN lon_0=83d40W - x_0=500000 y_0=327987.436 k_0=0.99995696 - no_defs <> -<cuba-n> # Cuba Norte - proj=lcc ellps=clrk66 lat_1=22d21N lon_0=81dW - x_0=500000 y_0=280296.016 k_0=0.99993602 - no_defs <> -<cuba-s> # Cuba Sud - proj=lcc ellps=clrk66 lat_1=20d43'N lon_0=76d50'W - x_0=500000 y_0=229126.939 k_0=0.99994848 - no_defs <> -<domin_rep> # Dominican Republic - proj=lcc ellps=clrk66 lat_1=18d49'N lon_0=71d30'W - x_0=500000 y_0=277063.657 k_0=0.99991102 - no_defs <> -<egypt-1> # Egypt - proj=tmerc ellps=intl lon_0=25d30'E x_0=300000 k_0=0.99985 - no_defs <> -<egypt-2> # Egypt - proj=tmerc ellps=intl lon_0=28d30'E x_0=300000 k_0=0.99985 - no_defs <> -<egypt-3> # Egypt - proj=tmerc ellps=intl lon_0=31d30'E x_0=300000 k_0=0.99985 - no_defs <> -<egypt-4> # Egypt - proj=tmerc ellps=intl lon_0=34d30'E x_0=300000 k_0=0.99985 - no_defs <> -<egypt-5> # Egypt - proj=tmerc ellps=intl lon_0=37d30'E x_0=300000 k_0=0.99985 - no_defs <> -<el_sal> # El Salvador - proj=lcc ellps=clrk66 lat_1=13d47'N lon_0=89dW - x_0=500000 y_0=295809.184 k_0=0.99996704 - no_defs <> -<guat-n> # Guatemala Norte - proj=lcc ellps=clrk66 lat_1=16d49'N lon_0=90d20'W - x_0=500000 y_0=292209.579 k_0=0.99992226 - no_defs <> -<guat-s> # Guatemala Sud - proj=lcc ellps=clrk66 lat_1=14d54'N lon_0=90d20'W - x_0=500000 y_0=325992.681 k_0=0.99989906 - no_defs <> -<haiti> # Haiti - proj=lcc ellps=clrk66 lat_1=18d49'N lon_0=71d30'W - x_0=500000 y_0=277063.657 k_0=0.99991102 - no_defs <> -<hond-n> # Honduras Norte - proj=lcc ellps=clrk66 lat_1=15d30'N lon_0=86d10'W - x_0=500000 y_0=296917.439 k_0=0.99993273 - no_defs <> -<hond-s> # Honduras Sud - proj=lcc ellps=clrk66 lat_1=13d47'N lon_0=87d10'W - x_0=500000 y_0=296215.903 k_0=0.99995140 - no_defs <> -<levant> # Levant - proj=lcc ellps=clrk66 lat_1=34d39'N lon_0=37d21'E - x_0=500000 y_0=300000 k_0=0.9996256 - no_defs <> -<nica-n> # Nicaragua Norte - proj=lcc ellps=clrk66 lat_1=13d52'N lon_0=85d30'W - x_0=500000 y_0=359891.816 k_0=0.99990314 - no_defs <> -<nica-s> # Nicaragua Sud - proj=lcc ellps=clrk66 lat_1=11d40'N lon_0=85d30'W - x_0=500000 y_0=288876.327 k_0=0.99992228 - no_defs <> -<nw-africa> # Northwest Africa - proj=lcc ellps=clrk80 lat_1=34dN lon_0=0dE - x_0=1000000 y_0=500000 k_0=0.99908 - no_defs <> -<palestine> # Palestine - proj=tmerc a=6378300.79 rf=293.488307656 - lat_0=31d44'2.749"N lon_0=35d12'43.490"E - x_0=170251.555 y_0=126867.909 k_0=1 - no_defs <> -<panama> # Panama - proj=lcc ellps=clrk66 lat_1=8d25'N lon_0=80dW - x_0=500000 y_0=294865.303 k_0=0.99989909 - no_defs <> -# other grids in DMA TM8358.1 -<bng> # British National Grid - proj=tmerc ellps=airy lat_0=49dN lon_0=2dW - k_0=0.9996012717 x_0=400000 y_0=-100000 - no_defs <> -<malay> # West Malaysian RSO Grid - proj=omerc a=6377295.66402 rf=300.8017 alpha=323d01'32.846" - no_uoff rot_conv lonc=102d15E lat_0=4dN k_0=0.99984 x_0=804670.240 y_0=0 - no_defs <> -<india-I> # India Zone I - proj=lcc ellps=everest lon_0=68E lat_1=32d30'N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<india-IIA> # India Zone IIA - proj=lcc ellps=everest lon_0=74E lat_1=26N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<india-IIB> # India Zone IIB - proj=lcc ellps=everest lon_0=90E lat_1=26N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<india-IIIA> # India Zone IIIA - proj=lcc ellps=everest lon_0=80E lat_1=19N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<india-IIIB> # India Zone IIIB - proj=lcc ellps=everest lon_0=100E lat_1=19N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<india-IVA> # India Zone IVA - proj=lcc ellps=everest lon_0=80E lat_1=12N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<india-IVB> # India Zone IVB - proj=lcc ellps=everest lon_0=104E lat_1=12N - x_0=2743185.69 y_0=914395.23 k_0=.998786408 - no_defs <> -<ceylon> # Ceylon Belt - proj=tmerc ellps=everest lon_0=80d46'18.160"E lat_0=7d0'1.729"N - x_0=160933.56048 y_0=160933.56048 k_0=1. - no_defs <> -<irish> # Irish Transverse Mercator Grid - proj=tmerc ellps=mod_airy lat_0=53d30'N lon_0=8W - x_0=200000 y_0=250000 k_0=1.000035 - no_defs <> -<neiez> # Netherlands East Indies Equitorial Zone - proj=merc ellps=bessel lon_0=110E - x_0=3900000 y_0=900000 k_0=0.997 - no_defs <> -<n-alger> # Nord Algerie Grid - proj=lcc ellps=clrk80 lon_0=2d42E lat_0=36N - x_0=500000 y_0=300000 k_0=0.999625544 - no_defs <> -<n-maroc> # Nord Maroc Grid - proj=lcc ellps=clrk80 lon_0=5d24'W lat_0=33d18'N - x_0=500000 y_0=300000 k_0=0.999625769 - no_defs <> -<n-tunis> # Nord Tunisie Grid - proj=lcc ellps=clrk80 lon_0=9d54E lat_0=36N - x_0=500000 y_0=300000 k_0=0.999625544 - no_defs <> -<s-alger> # Sud Algerie Grid - proj=lcc ellps=clrk80 lon_0=2d42E lat_0=33d18'N - x_0=500000 y_0=300000 k_0=0.999625769 - no_defs <> -<s-maroc> # Sud Maroc Grid - proj=lcc ellps=clrk80 lon_0=5d24W lat_0=29d42'N - x_0=500000 y_0=300000 k_0=0.999615596 - no_defs <> -<s-tunis> # Sud Tunisie Grid - proj=lcc ellps=clrk80 lon_0=9d54'E lat_0=33d18'N - x_0=500000 y_0=300000 k_0=0.999625769 - no_defs <> -# Gauss Krueger Grid for Germany -# -# The first figure of the easting is lon_0 devided by 3 -# ( 2 for 6d0E, 3 for 9d0E, 4 for 12d0E) -# For translations you have to remove this first figure -# and convert northings and eastings from km to meter . -# The other way round, devide by 1000 and add the figure. -# I made 3 entrys for the officially used grids in Germany -# -# -# Und nochmal in deutsch : -# Die erste Ziffer des Rechtswerts beschreibt den Hauptmeridian -# und ist dessen Gradzahl geteilt durch 3. -# Zum Umrechnen in Grad muss daher die erste Ziffer des Rechtswertes -# entfernt werden und evt. von km auf Metern umgerechnet werden. -# Zur Umrechnung in Gauss Krueger Koordinaten entsprechend die -# Ziffer fuer den Hauptmeridian vor dem Rechtswert ergaenzen. -# Ich hab fuer alle drei in Deutschland ueblichen Hauptmeridiane -# jeweils einen Eintrag ergaenzt. -# -# -# added by Michael Goepel <goepel@ffm.plusline.de> -# -<gk2-d> # Gauss Krueger Grid for Germany - proj=tmerc ellps=bessel lon_0=6d0E lat_0=0 - x_0=500000 - no_defs<> -<gk3-d> # Gauss Krueger Grid for Germany - proj=tmerc ellps=bessel lon_0=9d0E lat_0=0 - x_0=500000 - no_defs<> -<gk4-d> # Gauss Krueger Grid for Germany - proj=tmerc ellps=bessel lon_0=12d0E lat_0=0 - x_0=500000 - no_defs<> - diff --git a/src/3rdparty/proj/proj_mdist.c b/src/3rdparty/proj/proj_mdist.c deleted file mode 100644 index 9edde83f..00000000 --- a/src/3rdparty/proj/proj_mdist.c +++ /dev/null @@ -1,123 +0,0 @@ -/* -** libproj -- library of cartographic projections -** -** Copyright (c) 2003, 2006 Gerald I. Evenden -*/ -static const char -LIBPROJ_ID[] = "$Id: proj_mdist.c 1504 2009-01-06 02:11:57Z warmerdam $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/* Computes distance from equator along the meridian to latitude phi -** and inverse on unit ellipsoid. -** Precision commensurate with double precision. -*/ -#define PROJ_LIB__ -#include <projects.h> -#define MAX_ITER 20 -#define TOL 1e-14 - -struct MDIST { - int nb; - double es; - double E; - double b[1]; -}; -#define B ((struct MDIST *)b) - void * -proj_mdist_ini(double es) { - double numf, numfi, twon1, denf, denfi, ens, T, twon; - double den, El, Es; - double E[MAX_ITER]; - struct MDIST *b; - int i, j; - -/* generate E(e^2) and its terms E[] */ - ens = es; - numf = twon1 = denfi = 1.; - denf = 1.; - twon = 4.; - Es = El = E[0] = 1.; - for (i = 1; i < MAX_ITER ; ++i) { - numf *= (twon1 * twon1); - den = twon * denf * denf * twon1; - T = numf/den; - Es -= (E[i] = T * ens); - ens *= es; - twon *= 4.; - denf *= ++denfi; - twon1 += 2.; - if (Es == El) /* jump out if no change */ - break; - El = Es; - } - if ((b = (struct MDIST *)malloc(sizeof(struct MDIST)+ - (i*sizeof(double)))) == NULL) - return(NULL); - b->nb = i - 1; - b->es = es; - b->E = Es; - /* generate b_n coefficients--note: collapse with prefix ratios */ - b->b[0] = Es = 1. - Es; - numf = denf = 1.; - numfi = 2.; - denfi = 3.; - for (j = 1; j < i; ++j) { - Es -= E[j]; - numf *= numfi; - denf *= denfi; - b->b[j] = Es * numf / denf; - numfi += 2.; - denfi += 2.; - } - return (b); -} - double -proj_mdist(double phi, double sphi, double cphi, const void *b) { - double sc, sum, sphi2, D; - int i; - - sc = sphi * cphi; - sphi2 = sphi * sphi; - D = phi * B->E - B->es * sc / sqrt(1. - B->es * sphi2); - sum = B->b[i = B->nb]; - while (i) sum = B->b[--i] + sphi2 * sum; - return(D + sc * sum); -} - double -proj_inv_mdist(double dist, const void *b) { - double s, t, phi, k; - int i; - - k = 1./(1.- B->es); - i = MAX_ITER; - phi = dist; - while ( i-- ) { - s = sin(phi); - t = 1. - B->es * s * s; - phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) * - (t * sqrt(t)) * k; - if (fabs(t) < TOL) /* that is no change */ - return phi; - } - /* convergence failed */ - pj_errno = -17; - return phi; -} diff --git a/src/3rdparty/proj/proj_rouss.c b/src/3rdparty/proj/proj_rouss.c deleted file mode 100644 index 594c237d..00000000 --- a/src/3rdparty/proj/proj_rouss.c +++ /dev/null @@ -1,122 +0,0 @@ -/* -** libproj -- library of cartographic projections -** -** Copyright (c) 2003, 2006 Gerald I. Evenden -*/ -static const char -LIBPROJ_ID[] = "$Id: proj_rouss.c 1504 2009-01-06 02:11:57Z warmerdam $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#define PROJ_PARMS__ \ - double s0; \ - double A1, A2, A3, A4, A5, A6; \ - double B1, B2, B3, B4, B5, B6, B7, B8; \ - double C1, C2, C3, C4, C5, C6, C7, C8; \ - double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11; \ - void *en; -#define PJ_LIB__ -# include <projects.h> -PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi., Ellps."; -FORWARD(e_forward); /* ellipsoid */ - double s, al, cp, sp, al2, s2; - - cp = cos(lp.phi); - sp = sin(lp.phi); - s = proj_mdist(lp.phi, sp, cp, P->en) - P->s0; - s2 = s * s; - al = lp.lam * cp / sqrt(1. - P->es * sp * sp); - al2 = al * al; - xy.x = P->k0 * al*(1.+s2*(P->A1+s2*P->A4)-al2*(P->A2+s*P->A3+s2*P->A5 - +al2*P->A6)); - xy.y = P->k0 * (al2*(P->B1+al2*P->B4)+ - s*(1.+al2*(P->B3-al2*P->B6)+s2*(P->B2+s2*P->B8)+ - s*al2*(P->B5+s*P->B7))); - return (xy); -} -INVERSE(e_inverse); /* ellipsoid */ - double s, al, x = xy.x / P->k0, y = xy.y / P->k0, x2, y2;; - - x2 = x * x; - y2 = y * y; - al = x*(1.-P->C1*y2+x2*(P->C2+P->C3*y-P->C4*x2+P->C5*y2-P->C7*x2*y) - +y2*(P->C6*y2-P->C8*x2*y)); - s = P->s0 + y*(1.+y2*(-P->D2+P->D8*y2))+ - x2*(-P->D1+y*(-P->D3+y*(-P->D5+y*(-P->D7+y*P->D11)))+ - x2*(P->D4+y*(P->D6+y*P->D10)-x2*P->D9)); - lp.phi=proj_inv_mdist(s, P->en); - s = sin(lp.phi); - lp.lam=al * sqrt(1. - P->es * s * s)/cos(lp.phi); - return (lp); -} -FREEUP; - if (P) { - if (P->en) - free(P->en); - free(P); - } -} -ENTRY1(rouss, en) - double N0, es2, t, t2, R_R0_2, R_R0_4; - - if (!((P->en = proj_mdist_ini(P->es)))) - E_ERROR_0; - es2 = sin(P->phi0); - P->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), P->en); - t = 1. - (es2 = P->es * es2 * es2); - N0 = 1./sqrt(t); - R_R0_2 = t * t / P->one_es; - R_R0_4 = R_R0_2 * R_R0_2; - t = tan(P->phi0); - t2 = t * t; - P->C1 = P->A1 = R_R0_2 / 4.; - P->C2 = P->A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.; - P->A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0); - P->A4 = R_R0_4 / 24.; - P->A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.; - P->A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.; - P->B1 = t / (2. * N0); - P->B2 = R_R0_2 / 12.; - P->B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.; - P->B4 = R_R0_2 * t * (2. - t2)/(24. * N0); - P->B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0); - P->B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.; - P->B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.; - P->B8 = R_R0_4 / 120.; - P->C3 = R_R0_2 * t * (1. + t2)/(3. * N0); - P->C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.; - P->C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.; - P->C6 = R_R0_4 / 16.; - P->C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0); - P->C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0); - P->D1 = t / (2. * N0); - P->D2 = R_R0_2 / 12.; - P->D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.; - P->D4 = R_R0_2 * t * (1. + t2)/(8. * N0); - P->D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0); - P->D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.; - P->D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.; - P->D8 = R_R0_4 / 80.; - P->D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.; - P->D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0); - P->D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0); - P->fwd = e_forward; - P->inv = e_inverse; - ENDENTRY(P) diff --git a/src/3rdparty/proj/rtodms.c b/src/3rdparty/proj/rtodms.c deleted file mode 100644 index abf6bc1c..00000000 --- a/src/3rdparty/proj/rtodms.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Convert radian argument to DMS ascii format */ -#include <projects.h> -#include <stdio.h> -#include <string.h> -/* -** RES is fractional second figures -** RES60 = 60 * RES -** CONV = 180 * 3600 * RES / PI (radians to RES seconds) -*/ - static double -RES = 1000., -RES60 = 60000., -CONV = 206264806.24709635515796003417; - static char -format[50] = "%dd%d'%.3f\"%c"; - static int -dolong = 0; - void -set_rtodms(int fract, int con_w) { - int i; - - if (fract >= 0 && fract < 9 ) { - RES = 1.; - /* following not very elegant, but used infrequently */ - for (i = 0; i < fract; ++i) - RES *= 10.; - RES60 = RES * 60.; - CONV = 180. * 3600. * RES / PI; - if (! con_w) - (void)sprintf(format,"%%dd%%d'%%.%df\"%%c", fract); - else - (void)sprintf(format,"%%dd%%02d'%%0%d.%df\"%%c", - fract+2+(fract?1:0), fract); - dolong = con_w; - } -} - char * -rtodms(char *s, double r, int pos, int neg) { - int deg, min, sign; - char *ss = s; - double sec; - - if (r < 0) { - r = -r; - if (!pos) { *ss++ = '-'; sign = 0; } - else sign = neg; - } else - sign = pos; - r = floor(r * CONV + .5); - sec = fmod(r / RES, 60.); - r = floor(r / RES60); - min = fmod(r, 60.); - r = floor(r / 60.); - deg = r; - - if (dolong) - (void)sprintf(ss,format,deg,min,sec,sign); - else if (sec) { - char *p, *q; - - (void)sprintf(ss,format,deg,min,sec,sign); - for (q = p = ss + strlen(ss) - (sign ? 3 : 2); *p == '0'; --p) ; - if (*p != '.') - ++p; - if (++q != p) - (void)strcpy(p, q); - } else if (min) - (void)sprintf(ss,"%dd%d'%c",deg,min,sign); - else - (void)sprintf(ss,"%dd%c",deg, sign); - return s; -} diff --git a/src/3rdparty/proj/vector1.c b/src/3rdparty/proj/vector1.c deleted file mode 100644 index 30fca1ca..00000000 --- a/src/3rdparty/proj/vector1.c +++ /dev/null @@ -1,29 +0,0 @@ -/* make storage for one and two dimensional matricies */ -#include <stdlib.h> -#include <projects.h> - void * /* one dimension array */ -vector1(int nvals, int size) { return((void *)pj_malloc(size * nvals)); } - void /* free 2D array */ -freev2(void **v, int nrows) { - if (v) { - for (v += nrows; nrows > 0; --nrows) - pj_dalloc(*--v); - pj_dalloc(v); - } -} - void ** /* two dimension array */ -vector2(int nrows, int ncols, int size) { - void **s; - - if (s = (void **)pj_malloc(sizeof(void *) * nrows)) { - int rsize, i; - - rsize = size * ncols; - for (i = 0; i < nrows; ++i) - if (!(s[i] = pj_malloc(rsize))) { - freev2(s, i); - return (void **)0; - } - } - return s; -} diff --git a/src/imports/location/location.cpp b/src/imports/location/location.cpp index 65e4298b..8b3a926f 100644 --- a/src/imports/location/location.cpp +++ b/src/imports/location/location.cpp @@ -42,7 +42,6 @@ #include "qdeclarativepositionsource_p.h" #include "qdeclarativeposition_p.h" -#include "qgeomapobject.h" #include "qdeclarativegeoboundingarea_p.h" #include "qdeclarativegeoboundingbox_p.h" #include "qdeclarativegeoboundingcircle_p.h" @@ -51,23 +50,18 @@ #include "qdeclarativegeoserviceprovider_p.h" #include "qdeclarativegraphicsgeomap_p.h" -#include "qdeclarativegeomapgroupobject_p.h" -#include "qdeclarativegeomapobjectborder_p.h" -#include "qdeclarativegeomapcircleobject_p.h" -#include "qdeclarativegeomappixmapobject_p.h" -#include "qdeclarativegeomappolygonobject_p.h" -#include "qdeclarativegeomappolylineobject_p.h" -#include "qdeclarativegeomaprectangleobject_p.h" -#include "qdeclarativegeomaptextobject_p.h" +#include "qdeclarative3dgraphicsgeomap_p.h" #include "qdeclarativegeomapmousearea_p.h" #include "qdeclarativegeomapmouseevent_p.h" #include "qdeclarativegeoroute_p.h" -#include "qdeclarativegeomaprouteobject_p.h" #include "qdeclarativegeoroutemodel_p.h" #include "qdeclarativegeocodemodel_p.h" #include "qdeclarativegeomaneuver_p.h" +#include "qdeclarativegeomapflickable_p.h" +#include "qdeclarativegeomappincharea_p.h" +#include "qdeclarativegeomapitem_p.h" //Place includes #include "qdeclarativecategory_p.h" @@ -107,17 +101,8 @@ public: qmlRegisterType<QDeclarativeGeoServiceProvider>(uri, 1, 2, "Plugin"); qmlRegisterType<QDeclarativeGeoServiceProviderParameter>(uri, 1, 2, "PluginParameter"); qmlRegisterType<QDeclarativeGraphicsGeoMap>(uri, 1, 2, "Map"); - qmlRegisterType<QDeclarativeGeoMapObjectBorder>(); // used as grouped property - qmlRegisterType<QGeoMapObject>(uri, 1, 2, "QGeoMapObject"); qmlRegisterType<QDeclarativeGeoMapObject>(uri, 1, 2, "MapObject"); qmlRegisterType<QDeclarativeGeoMapObjectView>(uri, 1, 2, "MapObjectView"); - qmlRegisterType<QDeclarativeGeoMapGroupObject>(uri, 1, 2, "MapGroup"); - qmlRegisterType<QDeclarativeGeoMapCircleObject>(uri, 1, 2, "MapCircle"); - qmlRegisterType<QDeclarativeGeoMapPolygonObject>(uri, 1, 2, "MapPolygon"); - qmlRegisterType<QDeclarativeGeoMapPolylineObject>(uri, 1, 2, "MapPolyline"); - qmlRegisterType<QDeclarativeGeoMapRectangleObject>(uri, 1, 2, "MapRectangle"); - qmlRegisterType<QDeclarativeGeoMapTextObject>(uri, 1, 2, "MapText"); - qmlRegisterType<QDeclarativeGeoMapPixmapObject>(uri, 1, 2, "MapImage"); qmlRegisterType<QDeclarativeGeoMapMouseArea>(uri, 1, 2, "MapMouseArea"); qmlRegisterType<QDeclarativeGeoMapMouseEvent>(uri, 1, 2, "MapMouseEvent"); @@ -134,18 +119,10 @@ public: qmlRegisterType<QDeclarativeGeoServiceProvider>(uri, 5, 0, "Plugin"); qmlRegisterType<QDeclarativeGeoServiceProviderParameter>(uri, 5, 0, "PluginParameter"); - qmlRegisterType<QDeclarativeGraphicsGeoMap>(uri, 5, 0, "Map"); - qmlRegisterType<QDeclarativeGeoMapObjectBorder>(); // used as grouped property - qmlRegisterType<QGeoMapObject>(uri, 5, 0, "QGeoMapObject"); + qmlRegisterType<QDeclarative3DGraphicsGeoMap>(uri, 5, 0, "Map3D"); qmlRegisterType<QDeclarativeGeoMapObject>(uri, 5, 0, "MapObject"); + qmlRegisterType<QDeclarativeGeoMapItem>(uri, 5, 0, "MapItem"); qmlRegisterType<QDeclarativeGeoMapObjectView>(uri, 5, 0, "MapObjectView"); - qmlRegisterType<QDeclarativeGeoMapGroupObject>(uri, 5, 0, "MapGroup"); - qmlRegisterType<QDeclarativeGeoMapCircleObject>(uri, 5, 0, "MapCircle"); - qmlRegisterType<QDeclarativeGeoMapPolygonObject>(uri, 5, 0, "MapPolygon"); - qmlRegisterType<QDeclarativeGeoMapPolylineObject>(uri, 5, 0, "MapPolyline"); - qmlRegisterType<QDeclarativeGeoMapRectangleObject>(uri, 5, 0, "MapRectangle"); - qmlRegisterType<QDeclarativeGeoMapTextObject>(uri, 5, 0, "MapText"); - qmlRegisterType<QDeclarativeGeoMapPixmapObject>(uri, 5, 0, "MapImage"); qmlRegisterType<QDeclarativeGeoMapMouseArea>(uri, 5, 0, "MapMouseArea"); qmlRegisterType<QDeclarativeGeoMapMouseEvent>(uri, 5, 0, "MapMouseEvent"); @@ -153,9 +130,12 @@ public: qmlRegisterType<QDeclarativeGeoRouteModel>(uri, 5, 0, "RouteModel"); qmlRegisterType<QDeclarativeGeoRouteQuery>(uri, 5, 0, "RouteQuery"); qmlRegisterType<QDeclarativeGeoRoute>(uri, 5, 0, "Route"); // data type - qmlRegisterType<QDeclarativeGeoMapRouteObject>(uri, 5, 0, "MapRoute"); // graphical presentation qmlRegisterType<QDeclarativeGeoRouteSegment>(uri, 5, 0, "RouteSegment"); qmlRegisterType<QDeclarativeGeoManeuver>(uri, 5, 0, "RouteManeuver"); + qmlRegisterType<QDeclarativeGeoBoundingCircle>(uri, 5, 0, "BoundingCircle"); + qmlRegisterUncreatableType<QDeclarativeGeoMapFlickable>(uri, 5, 0, "MapFlickable", QDeclarativeGeoMapFlickable::tr("(Map)Flickable is not intended instantiable by developer.")); + qmlRegisterUncreatableType<QDeclarativeGeoMapPinchArea>(uri, 5, 0, "MapPinch", QDeclarativeGeoMapPinchArea::tr("(Map)PinchArea is not intended instantiable by developer.")); + qmlRegisterUncreatableType<QDeclarativeGeoMapPinchEvent>(uri, 5, 0, "", QDeclarativeGeoMapPinchEvent::tr("(Map)PinchEvent is not intended instantiable by developer.")); qmlRegisterType<QDeclarativeCategory>(uri, 5, 0, "Category"); qmlRegisterType<QDeclarativeDescription>(uri, 5, 0, "Description"); @@ -178,7 +158,8 @@ public: } }; -QT_END_NAMESPACE #include "location.moc" +QT_END_NAMESPACE + Q_EXPORT_PLUGIN2(declarative_location, QT_PREPEND_NAMESPACE(QLocationDeclarativeModule)); diff --git a/src/imports/location/location.pro b/src/imports/location/location.pro index a7bc5b25..992034a1 100644 --- a/src/imports/location/location.pro +++ b/src/imports/location/location.pro @@ -6,11 +6,15 @@ TARGETPATH = Qt/location include(qlocationimport.pri) -QT += declarative network location +QT += declarative-private network location qtquick1 declarative +CONFIG += qt3d DESTDIR = $$QT.location.imports/$$TARGETPATH target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH +#INCLUDEPATH += ../../../../qtdeclarative/include +INCLUDEPATH += ../../../../qtdeclarative/include/QtDeclarative/5.0.0/QtDeclarative +INCLUDEPATH += ../../../../qtdeclarative/include/QtDeclarative/5.0.0/QtDeclarative/private # On some platforms, build both versions because debug and release # versions are incompatible @@ -20,15 +24,7 @@ HEADERS += qdeclarativeposition_p.h \ qdeclarativepositionsource_p.h \ qdeclarativecoordinate_p.h \ qdeclarativegeolocation_p.h \ - qdeclarativegeomapobjectborder_p.h \ - qdeclarativegeomapcircleobject_p.h \ - qdeclarativegeomapgroupobject_p.h \ qdeclarativegeomapobject_p.h \ - qdeclarativegeomappixmapobject_p.h \ - qdeclarativegeomappolygonobject_p.h \ - qdeclarativegeomappolylineobject_p.h \ - qdeclarativegeomaprectangleobject_p.h \ - qdeclarativegeomaptextobject_p.h \ qdeclarativegeomapmouseevent_p.h \ qdeclarativegeomapmousearea_p.h \ qdeclarativegeoserviceprovider_p.h \ @@ -41,23 +37,18 @@ HEADERS += qdeclarativeposition_p.h \ qdeclarativegeoroute_p.h \ qdeclarativegeoroutesegment_p.h \ qdeclarativegeomaneuver_p.h \ - qdeclarativegeomaprouteobject_p.h \ - qdeclarativegeoboundingcircle_p.h + qdeclarativegeoboundingcircle_p.h \ + qdeclarative3dgraphicsgeomap_p.h \ + qdeclarativegeomapflickable_p.h \ + qdeclarativegeomappincharea_p.h \ + qdeclarativegeomapitem_p.h SOURCES += qdeclarativeposition.cpp \ location.cpp \ qdeclarativepositionsource.cpp \ qdeclarativecoordinate.cpp \ qdeclarativegeolocation.cpp \ - qdeclarativegeomapobjectborder.cpp \ - qdeclarativegeomapcircleobject.cpp \ - qdeclarativegeomapgroupobject.cpp \ qdeclarativegeomapobject.cpp \ - qdeclarativegeomappixmapobject.cpp \ - qdeclarativegeomappolygonobject.cpp \ - qdeclarativegeomappolylineobject.cpp \ - qdeclarativegeomaprectangleobject.cpp \ - qdeclarativegeomaptextobject.cpp \ qdeclarativegeomapmouseevent.cpp \ qdeclarativegeomapmousearea.cpp \ qdeclarativegeoserviceprovider.cpp \ @@ -69,8 +60,11 @@ SOURCES += qdeclarativeposition.cpp \ qdeclarativegeoroute.cpp \ qdeclarativegeoroutesegment.cpp \ qdeclarativegeomaneuver.cpp \ - qdeclarativegeomaprouteobject.cpp \ - qdeclarativegeoboundingcircle.cpp + qdeclarativegeoboundingcircle.cpp \ + qdeclarative3dgraphicsgeomap.cpp \ + qdeclarativegeomapflickable.cpp \ + qdeclarativegeomappincharea.cpp \ + qdeclarativegeomapitem.cpp include(declarativeplaces/declarativeplaces.pri) @@ -83,3 +77,20 @@ qmldir.files += $$PWD/qmldir qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH INSTALLS += target qmldir + +# This is interim hack until the QSGMouseArea and QSGPinchArea are enabled. +# Hack makes code compile, but for anything useful you want the +# QSGMOUSEAREA_AVAILABLE +if (exists($$PWD/qsgmousearea_p.h)) { + message('Will try to build QML Map 3D with QML2 user interaction elements and Map Items.') + DEFINES += QSGMOUSEAREA_AVAILABLE + DEFINES += QSGSHADEREFFECTSOURCE_AVAILABLE +} else { + message('QML2 3D Map user interaction elements and MapItems not available. Check location.pro - file for instructions.') +# 1) Modify qsgmousearea_p.h at qtdeclaratice/src/declarative/items +# Make the QSGMouseArea exported instead of autotest exported, i.e. the file should have: +# class Q_DECLARATIVE_EXPORT QSGMouseArea : public QSGItem +# 2) Also export the QSGShaderEffectSource in qsgshadereffectsource_p.h +# 3) Make the declarative module. +# 4) Rerun qmake and make +} diff --git a/src/imports/location/qdeclarative3dgraphicsgeomap.cpp b/src/imports/location/qdeclarative3dgraphicsgeomap.cpp new file mode 100644 index 00000000..adb6d1f1 --- /dev/null +++ b/src/imports/location/qdeclarative3dgraphicsgeomap.cpp @@ -0,0 +1,1204 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdeclarative3dgraphicsgeomap_p.h" +#include "qdeclarativegeomapmousearea_p.h" + +#include "qdeclarativecoordinate_p.h" +#include "qdeclarativegeoserviceprovider_p.h" +#include <Qt3D/qglview.h> +#include <Qt3D/qglsubsurface.h> +#include <QtCore/QCoreApplication> +#include <QThread> + +#include "tilecache.h" +#include "tile.h" +#include "cameradata.h" +#include <Qt3D/qglscenenode.h> +#include <Qt3D/qglbuilder.h> +#include <Qt3D/qgeometrydata.h> +#include "qdeclarativegeomapitem_p.h" +#include <cmath> + +#include <qgeoserviceprovider.h> +#include <qgeomappingmanager.h> +//#include <qgeomapdata.h> +//#include <qgeomapobject.h> + +#include <QGraphicsSceneMouseEvent> +#include <QDeclarativeContext> +#include <QtDeclarative/qdeclarativeinfo.h> +#include <QModelIndex> +#include <QApplication> +#include <QSGCanvas> +#include <QSGEngine> +#include <QDesktopWidget> + +#include <QDebug> + +QT_BEGIN_NAMESPACE + +/*! + \qmlclass Map3D + + \brief The Map element displays a map. + \inherits QDeclarativeItem + + \ingroup qml-location-maps + + The Map element can be used be used to display a map of the world. The + bulk of the functionality is provided by a mapping plugin described + by the Plugin element associated with the Map. + + Various map objects can be added to the map. These map objects are + specified in terms of coordinates and metres. + + MapObjects can be directly added to the Map element and it will display them + automatically. The various objects that can be added include: + + \list + \endlist + + Of the above list, MapObjectView is a special case and not a MapObject as such. + Here is a small example to illustrate this: + + \snippet doc/src/snippets/declarative/declarative-map.qml Basic MapObjects and View on Map + + Mouse handling is done by adding MapMouseArea items as children of either + MapObjects or the Map item itself. + + The Map element is part of the \bold{Qt.location 5.0} module. +*/ + +QDeclarative3DGraphicsGeoMap::QDeclarative3DGraphicsGeoMap(QSGItem *parent) + : QSGItem(parent), + plugin_(0), + serviceProvider_(0), + mappingManager_(0), +// mapData_(0), + center_(0), + initialCoordinate(0), +// mapType_(NoMap), +// connectivityMode_(NoConnectivity), + componentCompleted_(false), +#ifdef QSGMOUSEAREA_AVAILABLE + mouseArea_(0), +#endif + flickable_(0), + pinchArea_(0), + canvas_(0), + touchTimer_(-1), + tileCache_(0) + + // ses_(0), + // texture_(0) +{ + initialCoordinate = new QGeoCoordinate(-27.0, 153.0); + zoomLevel_ = 8; + size_ = QSizeF(100.0, 100.0); + setAcceptHoverEvents(true); + setAcceptedMouseButtons(Qt::LeftButton | Qt::MidButton | Qt::RightButton); + setFlags(QSGItem::ItemHasContents); + + tileCache_ = new TileCache(); + map_ = new Map(tileCache_, this); + connect(map_, + SIGNAL(updateRequired()), + this, + SLOT(update())); + //connect(map_->mapCamera(), SIGNAL(zoomChanged(double)), this, SLOT(cameraZoomLevelChanged(double))); + // Create internal flickable and pinch area. + flickable_ = new QDeclarativeGeoMapFlickable(map_, this); + pinchArea_ = new QDeclarativeGeoMapPinchArea(this, this); + qDebug() << __FUNCTION__ << "Created.============================================================"; +} + +QSGNode* QDeclarative3DGraphicsGeoMap::updatePaintNode(QSGNode* node, UpdatePaintNodeData* data) +{ + Q_UNUSED(node); + Q_UNUSED(data); + update(); + return 0; +} + +QDeclarative3DGraphicsGeoMap::~QDeclarative3DGraphicsGeoMap() +{ + // TODO we do not clear the map items atm +// if (mapData_) { +// qDeleteAll(mapViews_); +// // Remove map objects, we can't allow mapObject +// // to delete the objects because they are owned +// // by the declarative elements. +// QList<QDeclarativeGeoMapObject*> objects = mapObjects_; +// for (int i = 0; i < objects.size(); ++i) { +// mapData_->removeMapObject(objects.at(i)->mapObject()); +// } +// delete mapData_; +// } + if (serviceProvider_) + delete serviceProvider_; + if (initialCoordinate) { + delete initialCoordinate; + } +#ifdef QSGMOUSEAREA_AVAILABLE + delete mouseArea_; +#endif +} + +void QDeclarative3DGraphicsGeoMap::componentComplete() +{ + qDebug() << __FUNCTION__ << "Completed =====-===-=================================================="; + componentCompleted_ = true; + populateMap(); + map_->resize(width(), height()); + CameraData cameraData = map_->cameraData(); + map_->setCameraData(cameraData); + map_->update(); + QSGItem::componentComplete(); +} + +QDeclarativeGeoMapFlickable* QDeclarative3DGraphicsGeoMap::flick() +{ + return flickable_; +} + +void QDeclarative3DGraphicsGeoMap::itemChange(ItemChange change, const ItemChangeData & data) +{ + if (change == ItemSceneChange) { + if (canvas_ && canvas_->sceneGraphEngine()) { + canvas_->disconnect(this); + canvas_->sceneGraphEngine()->disconnect(this); + } + canvas_ = data.canvas; + if (canvas_->sceneGraphEngine()) { + qDebug() << __FUNCTION__ << "Engine exists. Connecting to beforeRendering() " << canvas_->sceneGraphEngine(); + QSGEngine* engine = canvas_->sceneGraphEngine(); + connect((QObject*)engine, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection); + engine->setClearBeforeRendering(false); + } else if (canvas_) + connect(canvas_, SIGNAL(sceneGraphInitialized()), this, SLOT(sceneGraphInitialized())); + } +} + +void QDeclarative3DGraphicsGeoMap::sceneGraphInitialized() +{ + QSGEngine* engine = canvas_->sceneGraphEngine(); + if (!engine) { + qmlInfo(this) << tr("Unable to get QSGEngine. Will not be able to render the map."); + return; + } + connect((QObject*)engine, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection); + engine->setClearBeforeRendering(false); +} + +void QDeclarative3DGraphicsGeoMap::populateMap() +{ +// if (!mapData_ || !componentCompleted_) + if (!componentCompleted_) + return; + QObjectList kids = children(); + for (int i = 0; i < kids.size(); ++i) { + //qDebug() << "Looping through..: " << kids.at(i)->metaObject()->className() << kids.at(i)->objectName(); + // dispatch items appropriately + QDeclarativeGeoMapObjectView* mapView = qobject_cast<QDeclarativeGeoMapObjectView*>(kids.at(i)); + if (mapView) { + mapViews_.append(mapView); + setupMapView(mapView); + continue; + } + QDeclarativeGeoMapObject *mapObject = qobject_cast<QDeclarativeGeoMapObject*>(kids.at(i)); + if (mapObject) { + mapObjects_.append(mapObject); +// objectMap_.insert(mapObject->mapObject(), mapObject); +// mapData_->addMapObject(mapObject->mapObject()); + // to solve when we have map object support + //mapObject->setMap(this); + continue; + } + + QDeclarativeGeoMapItem* mapItem = qobject_cast<QDeclarativeGeoMapItem*>(kids.at(i)); + if (mapItem) { + addMapItem(mapItem); + } +#ifdef QSGMOUSEAREA_AVAILABLE + QSGMouseArea *mouseArea = qobject_cast<QSGMouseArea*>(kids.at(i)); + if (mouseArea && !mouseArea_) { + //qDebug() << "Got mouse area."; + mouseArea_ = mouseArea; + // This is the trick to get mouse events reach Map element; + // if visible is true then the MouseArea will consume events + // before Map has chance to use it. + mouseArea_->setVisible(false); + connect(mouseArea_, SIGNAL(visibleChanged()), this, SLOT(mouseChanged())); + connect(mouseArea_, SIGNAL(enabledChanged()), this, SLOT(mouseChanged())); + connect(mouseArea_, SIGNAL(widthChanged()), this, SLOT(mouseChanged())); + connect(mouseArea_, SIGNAL(heightChanged()), this, SLOT(mouseChanged())); + } else if (mouseArea && mouseArea_) { + qmlInfo(this) << tr("Warning: only one MouseArea / Map supported. Extra MouseArea ignored."); + } +#endif + QDeclarativeGeoMapMouseArea *mapMouseArea = qobject_cast<QDeclarativeGeoMapMouseArea*>(kids.at(i)); + if (mapMouseArea) { + qmlInfo(this) << tr("Warning: MapMouseArea is no longer supported. Use normal MouseArea instead."); + } + } +} + +void QDeclarative3DGraphicsGeoMap::mapItemTextureChanged() +{ +#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE + for (int i = mapItemsPending_.count() - 1; i >= 0; --i) { + if (mapItemsPending_.at(i)->hasValidTexture()) { + disconnect(mapItemsPending_.at(i), SIGNAL(textureChanged()), this, SLOT(mapItemTextureChanged())); + mapItemsPending_.at(i)->setMap(this); + mapItems_.append(mapItemsPending_.at(i)); + map_->addMapItem(mapItemsPending_.at(i)->mapItem()); + mapItemsPending_.removeAt(i); + } + } +#endif +} + +void QDeclarative3DGraphicsGeoMap::mouseChanged() +{ +#ifdef QSGMOUSEAREA_AVAILABLE + if (mouseArea_ + && mouseArea_->isVisible() + && mouseArea_->isEnabled() + && mouseArea_->width() > 0 + && mouseArea_->height() > 0) { + qmlInfo(this) << tr("Warning: MouseArea in Map visible, enabled and has geometry. Map unable to intercept & dispatch mouse to map objects."); + } +#endif +} + +void QDeclarative3DGraphicsGeoMap::setupMapView(QDeclarativeGeoMapObjectView *view) +{ + Q_UNUSED(view) + view->setMapData(this); + view->repopulate(); +} + +class ViewportSubsurface : public QGLSubsurface +{ +public: + ViewportSubsurface(QGLAbstractSurface *surface, const QRect ®ion, + qreal adjust) + : QGLSubsurface(surface, region), m_adjust(adjust) {} + + qreal aspectRatio() const; + ~ViewportSubsurface() {} + +private: + qreal m_adjust; +}; + +qreal ViewportSubsurface::aspectRatio() const +{ + return QGLSubsurface::aspectRatio() * m_adjust; +} + +void QDeclarative3DGraphicsGeoMap::closeEvent(QCloseEvent *) +{ + qApp->quit(); +} + +void QDeclarative3DGraphicsGeoMap::showEvent(QShowEvent *) +{ + updateAspectRatio(); +} + +void QDeclarative3DGraphicsGeoMap::updateAspectRatio() +{ + map_->resize(width(), height()); + if (!map_->autoUpdate()) + map_->update(); +} + +void QDeclarative3DGraphicsGeoMap::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + updateAspectRatio(); +} + +/* +void QDeclarative3DGraphicsGeoMap::enterEvent(QEvent *) +{ + setFocus(true); + //grabKeyboard(); +} + +void QDeclarative3DGraphicsGeoMap::leaveEvent(QEvent *e) +{ + setFocus(false); + //releaseKeyboard(); +} +*/ + +void QDeclarative3DGraphicsGeoMap::keyPressEvent(QKeyEvent *e) +{ + CameraData cameraData = map_->cameraData(); + if (e->key() == Qt::Key_Left) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLongitude(coord.longitude() - 1); + cameraData.setCenter(coord); + } else { + cameraData.setBearing(cameraData.bearing() - 5.0); + } + } else if (e->key() == Qt::Key_Right) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLongitude(coord.longitude() + 1); + cameraData.setCenter(coord); + } else { + cameraData.setBearing(cameraData.bearing() + 5.0); + } + } else if (e->key() == Qt::Key_Up) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() + 1); + cameraData.setCenter(coord); + } else { + cameraData.setTilt(cameraData.tilt() - 5.0); + } + } else if (e->key() == Qt::Key_Down) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() - 1); + cameraData.setCenter(coord); + } else { + cameraData.setTilt(cameraData.tilt() + 5.0); + } + } else if (e->key() == Qt::Key_Plus) { + if (e->modifiers() & Qt::ShiftModifier) { + cameraData.setDistance(cameraData.distance() / 2.0); + cameraData.setZoomLevel(cameraData.zoomLevel() + 1); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() / 1.1); + } + } else if (e->key() == Qt::Key_Minus) { + if (e->modifiers() & Qt::ShiftModifier) { + if (cameraData.zoomLevel() != 1) + cameraData.setZoomLevel(cameraData.zoomLevel() - 1); + cameraData.setDistance(cameraData.distance() * 2.0); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() * 1.1); + } + } else if (e->key() == Qt::Key_U) { + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } + map_->setCameraData(cameraData); + update(); +} + +// Note: this slot will be executed in the QSG rendering thread +// (Qt::DirectConnection) - not in the GUI/main thread of the app. +// Hence thread-safen the critical sections of code to avoid crashes. +void QDeclarative3DGraphicsGeoMap::beforeRendering() +{ + if (!isVisible()) + return; + QGLPainter painter; + if (!painter.begin()) { + qmlInfo(this) << tr("GL graphics system is not active; cannot use 3D items"); + return; + } + +#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE + // Update any map objects that may have dirty textures + for (int i = 0; i < mapItems_.count(); ++i) { + mapItems_.at(i)->updateItem(); + } +#endif + // No stereo rendering, set the eye as neutral + painter.setEye(QGL::NoEye); + // TODO this needs to be figured out (or confirmed as invalid thing). + // Currently applied transforms for this Map3D element - how to get/apply current transforms? + // QTransform transform = painter->combinedTransform(); + // Then we get the rectangle that is gotten by applying the QTransform on the rect + // --> this is the viewport for Map3D + // QRect viewport = transform.mapRect(boundingRect()).toRect(); + + // boundingRect is in local coordinates. We need to map it to the scene coordinates + // in order to render to correct area. + QRect viewport = mapRectToScene(boundingRect()).toRect(); + qreal adjust = 1.0f; + ViewportSubsurface surface(painter.currentSurface(), viewport, adjust); + painter.pushSurface(&surface); + earlyDraw(&painter); + if (map_->glCamera()) { + painter.setCamera(map_->glCamera()); + } else { + QGLCamera defCamera; + painter.setCamera(&defCamera); + } + paintGL(&painter); + // Draw the children items + painter.popSurface(); + // QSG does not expect anyone to alter gl context state; restore defaults. + // Default heaps of things, because we cannot be sure what the Qt3D internally + // sets. + restoreDefaults(&painter); +} + +void QDeclarative3DGraphicsGeoMap::setCameraData(const CameraData &camera) +{ + map_->setCameraData(camera); + if (!map_->autoUpdate()) + map_->update(); +} + +CameraData QDeclarative3DGraphicsGeoMap::cameraData() const +{ + return map_->cameraData(); +} + +void QDeclarative3DGraphicsGeoMap::restoreDefaults(QGLPainter *painter) +{ + // Disable the effect to return control to the GL paint engine. + painter->disableEffect(); + + // Try to restore the default options + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + // Set the default depth buffer options. + glDepthFunc(GL_LESS); + glDepthMask(GL_TRUE); +#if defined(QT_OPENGL_ES) + glDepthRangef(0.0f, 1.0f); +#else + glDepthRange(0.0f, 1.0f); +#endif + // Set the default blend options. + glDisable(GL_BLEND); + if (painter->hasOpenGLFeature(QOpenGLFunctions::BlendColor)) + painter->glBlendColor(0, 0, 0, 0); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + if (painter->hasOpenGLFeature(QOpenGLFunctions::BlendEquation)) + painter->glBlendEquation(GL_FUNC_ADD); + else if (painter->hasOpenGLFeature(QOpenGLFunctions::BlendEquationSeparate)) + painter->glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); +} + +#ifndef GL_MULTISAMPLE +#define GL_MULTISAMPLE 0x809D +#endif + +void QDeclarative3DGraphicsGeoMap::earlyDraw(QGLPainter *painter) +{ + glClearColor(0.0,255,0.0,0.0); + // Depth buffer has been cleared already, but color buffer hasn't + glClear(GL_COLOR_BUFFER_BIT); + // Force the effect to be updated. + painter->disableEffect(); +#ifdef GL_RESCALE_NORMAL + // Scale normals by a scale factor derived from modelview matrix. + // Note: normals need to be unit length. + glEnable(GL_RESCALE_NORMAL); +#endif + +#if !defined(QT_OPENGL_ES_2) + glShadeModel(GL_SMOOTH); + glEnable(GL_MULTISAMPLE); +#endif + + // Set the default effect for the scene. + painter->setStandardEffect(QGL::LitMaterial); + painter->setFaceColor(QGL::AllFaces, Qt::white); +} + +void QDeclarative3DGraphicsGeoMap::paintGL(QGLPainter *painter) +{ + if (map_) { + // QGLSceneNode *node = map_->sceneNode(); + map_->paintGL(painter); +// QGLSceneNode *node = map_->sceneNodeForRendering(); +// if (node) { +// node->draw(painter); +// map_->sceneNodeRenderingDone(); +// } else { +// qDebug() << "=-=-=-=-=-=-=-=- WILL MISS A MAP FRAME =-=-=-=-=-=-=-=-=-=-=-=-="; +// } + } +} + +void QDeclarative3DGraphicsGeoMap::geometryChanged(const QRectF &newGeometry, + const QRectF & /*oldGeometry*/) +{ + setSize(newGeometry.size()); +} + +/*! + \qmlproperty Plugin Map::plugin + + This property holds the plugin which provides the mapping functionality. + + This is write-once property. Once the map has a plugin associated with + it any attempted modifications of the plugin will be ignored. +*/ + +void QDeclarative3DGraphicsGeoMap::setPlugin(QDeclarativeGeoServiceProvider *plugin) +{ + if (plugin_) { + qmlInfo(this) << tr("Plugin is a write-once property, and cannot be set again."); + return; + } + plugin_ = plugin; + emit pluginChanged(plugin_); + serviceProvider_ = new QGeoServiceProvider(plugin_->name(), + plugin_->parameterMap()); + if (serviceProvider_->error() != QGeoServiceProvider::NoError) { + qWarning() << serviceProvider_->errorString(); + delete serviceProvider_; + serviceProvider_ = 0; + return; + } + mappingManager_ = serviceProvider_->mappingManager(); + if (!mappingManager_ || serviceProvider_->error() != QGeoServiceProvider::NoError) { + qWarning() << serviceProvider_->errorString(); + delete serviceProvider_; + serviceProvider_ = 0; + delete mappingManager_; + mappingManager_ = 0; + return; + } + + map_->setMappingManager(mappingManager_); + +// mapData_ = mappingManager_->createMapData(); +// mapData_->init(); + //mapData_->setParentItem(this); + + // setters +// mapData_->setWindowSize(size_); +// mapData_->setZoomLevel(zoomLevel_); + +// if (center_) +// mapData_->setCenter(center_->coordinate()); +// else +// mapData_->setCenter(*initialCoordinate); + +// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType_)); +// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode_)); + + // Populate the map objects. + populateMap(); + // setup signals +// connect(mapData_, +// SIGNAL(updateMapDisplay(QRectF)), +// this, +// SLOT(updateMapDisplay(QRectF))); + +// connect(mapData_, +// SIGNAL(centerChanged(QGeoCoordinate)), +// this, +// SLOT(internalCenterChanged(QGeoCoordinate))); + +// connect(mapData_, +// SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)), +// this, +// SLOT(internalMapTypeChanged(QGraphicsGeoMap::MapType))); + +// connect(mapData_, +// SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)), +// this, +// SLOT(internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode))); + +// connect(mapData_, +// SIGNAL(windowSizeChanged(QSizeF)), +// this, +// SIGNAL(sizeChanged(QSizeF))); + +// connect(mapData_, +// SIGNAL(zoomLevelChanged(qreal)), +// this, +// SIGNAL(zoomLevelChanged(qreal))); +} + +void QDeclarative3DGraphicsGeoMap::updateMapDisplay(const QRectF &target) +{ + Q_UNUSED(target); + QSGItem::update(); +} + +QDeclarativeGeoServiceProvider* QDeclarative3DGraphicsGeoMap::plugin() const +{ + return plugin_; +} + +/*! + \qmlproperty qreal Map::minimumZoomLevel + + This property holds the minimum valid zoom level for the map. +*/ +qreal QDeclarative3DGraphicsGeoMap::minimumZoomLevel() const +{ + if (mappingManager_) + return mappingManager_->minimumZoomLevel(); + else + return -1.0; +} + +/*! + \qmlproperty qreal Map::maximumZoomLevel + + This property holds the maximum valid zoom level for the map. +*/ +qreal QDeclarative3DGraphicsGeoMap::maximumZoomLevel() const +{ + if (mappingManager_) + return mappingManager_->maximumZoomLevel(); + else + return -1.0; +} + +// TODO make these more QML like +//QList<MapType> QDeclarative3DGraphicsGeoMap::supportedMapTypes() const; +//QList<ConnectivityMode> QDeclarative3DGraphicsGeoMap::supportedConnectivityModes() const; + +/*! + \qmlproperty QSizeF Map::size + + This property holds the size of the map viewport. +*/ +void QDeclarative3DGraphicsGeoMap::setSize(const QSizeF &size) +{ +// if (mapData_) { +// setWidth(size.width()); +// setHeight(size.height()); +// mapData_->setWindowSize(size); +// } else { + if (size_ == size) + return; + + size_ = size; + + emit sizeChanged(size_); +// } + +} + +QSizeF QDeclarative3DGraphicsGeoMap::size() const +{ +// if (mapData_) +// return mapData_->windowSize(); +// else + return size_; +} + +/*! + \qmlproperty qreal Map::zoomLevel + + This property holds the zoom level for the map. + + Larger values for the zoom level provide more detail. + + The default value is 8.0. +*/ +void QDeclarative3DGraphicsGeoMap::setZoomLevel(qreal zoomLevel) +{ + if (zoomLevel_ == zoomLevel) + return; + if (mappingManager_ && + (zoomLevel < mappingManager_->minimumZoomLevel() || + zoomLevel > mappingManager_->maximumZoomLevel())) + return; + zoomLevel_ = zoomLevel; + if (map_) { + CameraData cameraData = map_->cameraData(); + cameraData.setZoomFactor(zoomLevel); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } + emit zoomLevelChanged(zoomLevel_); +} + +void QDeclarative3DGraphicsGeoMap::cameraZoomLevelChanged(double zoomLevel) +{ + emit zoomLevelChanged(static_cast<qreal>(zoomLevel)); +} + +qreal QDeclarative3DGraphicsGeoMap::zoomLevel() const +{ + if (map_) { + return map_->cameraData().zoomFactor(); + } else { + return zoomLevel_; + } +} + +/*! + \qmlproperty Coordinate Map::center + + This property holds the coordinate which occupies the center of the + mapping viewport. + + The default value is an arbitrary valid coordinate. +*/ +void QDeclarative3DGraphicsGeoMap::setCenter(QDeclarativeCoordinate *center) +{ + if (center_) { + center_->disconnect(this); + } + center_ = center; + if (center_) { + connect(center_, + SIGNAL(latitudeChanged(double)), + this, + SLOT(centerLatitudeChanged(double))); + connect(center_, + SIGNAL(longitudeChanged(double)), + this, + SLOT(centerLongitudeChanged(double))); + connect(center_, + SIGNAL(altitudeChanged(double)), + this, + SLOT(centerAltitudeChanged(double))); + +// if (mapData_) { +// mapData_->setCenter(center_->coordinate()); +// } + } + emit declarativeCenterChanged(center_); +} + +QDeclarativeCoordinate* QDeclarative3DGraphicsGeoMap::center() +{ +// if (mapData_ && center_) +// center_->setCoordinate(mapData_->center()); + return center_; +} + +void QDeclarative3DGraphicsGeoMap::centerLatitudeChanged(double /*latitude*/) +{ +// if (mapData_ && center_) +// mapData_->setCenter(center_->coordinate()); +} + +void QDeclarative3DGraphicsGeoMap::centerLongitudeChanged(double /*longitude*/) +{ +// if (mapData_ && center_) +// mapData_->setCenter(center_->coordinate()); +} + +void QDeclarative3DGraphicsGeoMap::centerAltitudeChanged(double /*altitude*/) +{ +// if (mapData_ && center_) +// mapData_->setCenter(center_->coordinate()); +} + +/*! + \qmlproperty enumeration Map::mapType + + This property holds the type of map to display. + + The type can be one of: + \list + \o Map.StreetMap + \o Map.SatelliteMapDay + \o Map.SatelliteMapNight + \o Map.TerrainMap + \endlist + + The default value is determined by the plugin. +*/ +//void QDeclarative3DGraphicsGeoMap::setMapType(QDeclarative3DGraphicsGeoMap::MapType mapType) +//{ +// if (mapData_) { +// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType)); +// } else { +// if (mapType_ == mapType) +// return; + +// mapType_ = mapType; + +// emit mapTypeChanged(mapType_); +// } +//} + +//QDeclarative3DGraphicsGeoMap::MapType QDeclarative3DGraphicsGeoMap::mapType() const +//{ +// if (mapData_) { +// return QDeclarative3DGraphicsGeoMap::MapType(mapData_->mapType()); +// } else { +// return mapType_; +// } +//} + +/*! + \qmlproperty enumeration Map::connectivityMode + + This property holds the connectivity mode used to fetch the map data. + + The mode can be one of: + \list + \o Map.OfflineMode + \o Map.OnlineMode + \o Map.HybridMode + \endlist + + The default value is determined by the plugin. +*/ +//void QDeclarative3DGraphicsGeoMap::setConnectivityMode(QDeclarative3DGraphicsGeoMap::ConnectivityMode connectivityMode) +//{ +// if (mapData_) { +// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode)); +// } else { +// if (connectivityMode_ == connectivityMode) +// return; + +// connectivityMode_ = connectivityMode; + +// emit connectivityModeChanged(connectivityMode_); +// } +//} + +//QDeclarative3DGraphicsGeoMap::ConnectivityMode QDeclarative3DGraphicsGeoMap::connectivityMode() const +//{ +// if (mapData_) +// return QDeclarative3DGraphicsGeoMap::ConnectivityMode(mapData_->connectivityMode()); +// else +// return connectivityMode_; +//} + +/*! + \qmlproperty list<QGeoMapObject> Map::objects + \default + + This property holds the list of objects associated with this map. + + The various objects that can be added include: + \list + \o MapRectangle + \o MapCircle + \o MapText + \o MapImage + \o MapPolygon + \o MapPolyline + \o MapGroup + \endlist +*/ + +/*! + \qmlmethod Map::toCoordinate(QPointF screenPosition) + + Returns the coordinate which corresponds to the screen position + \a screenPosition. + + Returns an invalid coordinate if \a screenPosition is not within + the current viewport. + + An example to constraint landmarks of a model to just those + currently on Map: + \snippet examples/declarative-location/landmarkmap/landmarkmap.qml Map toCoordinate + +*/ + +QDeclarativeCoordinate* QDeclarative3DGraphicsGeoMap::toCoordinate(QPointF screenPosition) const +{ + QGeoCoordinate coordinate; + +// if (mapData_) +// coordinate = mapData_->screenPositionToCoordinate(screenPosition); + + return new QDeclarativeCoordinate(coordinate, + const_cast<QDeclarative3DGraphicsGeoMap *>(this)); +} + +/*! + \qmlmethod Map::toScreenPosition(Coordinate coordinate) + + Returns the screen position which corresponds to the coordinate + \a coordinate. + + Returns an invalid QPointF if \a coordinate is not within the + current viewport. +*/ +QPointF QDeclarative3DGraphicsGeoMap::toScreenPosition(QDeclarativeCoordinate* coordinate) const +{ + QPointF point; + +// if (mapData_) +// point = mapData_->coordinateToScreenPosition(coordinate->coordinate()); + + return point; +} + +void QDeclarative3DGraphicsGeoMap::pan(int dx, int dy) +{ + Q_UNUSED(dx); // TODO panning support + Q_UNUSED(dy); + //qDebug() << "pan: " << dx << dy; + //if (mapData_) { + // mapData_->pan(dx, dy); + // update(); + if (map_) { + // TODO zzz map_-> + } else { + qmlInfo(this) << tr("Map plugin is not set, cannot pan."); + } +} + +void QDeclarative3DGraphicsGeoMap::touchEvent(QTouchEvent *event) +{ + //qDebug() << "touchEvent in Map3D, enter, sending touchEvent to pinch area."; + if (pinchArea_) + pinchArea_->touchEvent(event); +} + +void QDeclarative3DGraphicsGeoMap::wheelEvent(QWheelEvent *event) +{ + emit wheel(event->delta()); + //QSGItem::wheelEvent(event); +} + +void QDeclarative3DGraphicsGeoMap::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + //qDebug() << "mousePressEvent in Map3D, enter +------------------------------------------------------------------"; +// if (!mapData_) { +// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed."); +// return; +// } +#ifdef QSGMOUSEAREA_AVAILABLE + canvas()->sendEvent(mouseArea_, event); +#endif + if (flickable_) + flickable_->mousePressEvent(event); + if (pinchArea_) + pinchArea_->mousePressEvent(event); + + //QSGItem::mousePressEvent(event); +} + +void QDeclarative3DGraphicsGeoMap::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ +#ifdef QSGMOUSEAREA_AVAILABLE + canvas()->sendEvent(mouseArea_, event); +#endif + if (flickable_) + flickable_->mouseReleaseEvent(event); + if (pinchArea_) + pinchArea_->mouseReleaseEvent(event); + + //QSGItem::mouseReleaseEvent(event); +} + +void QDeclarative3DGraphicsGeoMap::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ +// if (!mapData_) { +// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed."); +// return; +// } +#ifdef QSGMOUSEAREA_AVAILABLE + canvas()->sendEvent(mouseArea_, event); +#endif + //QSGItem::mouseDoubleClickEvent(event); +} + +void QDeclarative3DGraphicsGeoMap::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ +#ifdef QSGMOUSEAREA_AVAILABLE + canvas()->sendEvent(mouseArea_, event); +#endif + if (flickable_) + flickable_->mouseMoveEvent(event); + if (pinchArea_) + pinchArea_->mouseMoveEvent(event); + //QSGItem::mouseMoveEvent(event); +} + +void QDeclarative3DGraphicsGeoMap::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ +// if (!mapData_) +// return; +#ifdef QSGMOUSEAREA_AVAILABLE + if (mouseArea_ && mouseArea_->hoverEnabled()) { + canvas()->sendEvent(mouseArea_, event); + } +#endif +} + +void QDeclarative3DGraphicsGeoMap::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ +#ifdef QSGMOUSEAREA_AVAILABLE + if (mouseArea_ && mouseArea_->hoverEnabled()) { + canvas()->sendEvent(mouseArea_, event); + } +#endif +} + +void QDeclarative3DGraphicsGeoMap::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ +// if (!mapData_) +// return; +#ifdef QSGMOUSEAREA_AVAILABLE + if (mouseArea_ && mouseArea_->hoverEnabled()) { + canvas()->sendEvent(mouseArea_, event); + } +#endif +} + +void QDeclarative3DGraphicsGeoMap::internalCenterChanged(const QGeoCoordinate &coordinate) +{ + emit declarativeCenterChanged(new QDeclarativeCoordinate(coordinate, this)); +} + +//void QDeclarative3DGraphicsGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType) +//{ +// emit mapTypeChanged(QDeclarative3DGraphicsGeoMap::MapType(mapType)); +//} + +//void QDeclarative3DGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode) +//{ +// emit connectivityModeChanged(QDeclarative3DGraphicsGeoMap::ConnectivityMode(connectivityMode)); +//} + +/*! + \qmlmethod Map::addMapObject(MapObject) + + Adds the given MapOject to the Map. If the object already + is on the Map, it will not be added again. + + As an example, consider you have a MapCircle presenting your current position: + + \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic map position marker definition + You can add it to Map (alterntively it can be defined as a child element of the Map): + + \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic add MapObject + Note: MapObjectViews can not be added with this method. +*/ + +/* +void QDeclarative3DGraphicsGeoMap::addMapObject(QDeclarativeGeoMapObject *object) +{ + if (!mapData_) + qmlInfo(this) << tr("Map plugin is not set, map object cannot be added."); + if (!mapData_ || !object || objectMap_.contains(object->mapObject())) + return; + mapObjects_.append(object); + objectMap_.insert(object->mapObject(), object); + mapData_->addMapObject(object->mapObject()); + // TODO + // object->setMap(this); +} +*/ + +void QDeclarative3DGraphicsGeoMap::addMapItem(QDeclarativeGeoMapItem *item) +{ +#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE + if (!item || mapItems_.contains(item)) + return; + item->setMap(this); + mapItems_.append(item); + map_->addMapItem(item->mapItem()); +#endif +} + +void QDeclarative3DGraphicsGeoMap::removeMapItem(QDeclarativeGeoMapItem *item) +{ +#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE + if (!item || (!mapItems_.contains(item) && !mapItemsPending_.contains(item))) + return; + item->setMap(0); + // these can be optmized for perf, as we already check the 'contains' above + mapItems_.removeOne(item); + mapItemsPending_.removeOne(item); + map_->removeMapItem(item->mapItem()); +#endif +} + +// TODO clears all items including ones from models/mapobjectview which is not intended +void QDeclarative3DGraphicsGeoMap::clearMapItems() +{ + if (mapItems_.isEmpty()) + return; + mapItems_.clear(); + mapItemsPending_.clear(); + map_->clearMapItems(); +} + +/*! + \qmlmethod Map::removeMapObject(MapObject) + + Removes the given MapObject from the Map. If the MapObject does not + exist, function does nothing. + + As an example, consider you have a MapCircle presenting your current position: + \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic map position marker definition + + You can remove it from the Map element: + \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic remove MapObject + + +*/ + +/* +void QDeclarative3DGraphicsGeoMap::removeMapObject(QDeclarativeGeoMapObject *object) +{ + if (!mapData_) + qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed."); + if (!mapData_ || !object || !objectMap_.contains(object->mapObject())) + return; + objectMap_.remove(object->mapObject()); + mapObjects_.removeOne(object); + mapData_->removeMapObject(object->mapObject()); +} +*/ + +// This function is strictly for testing purposes +int QDeclarative3DGraphicsGeoMap::testGetDeclarativeMapObjectCount() +{ + return objectMap_.values().count(); +} + +#include "moc_qdeclarative3dgraphicsgeomap_p.cpp" + +QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarative3dgraphicsgeomap_p.h b/src/imports/location/qdeclarative3dgraphicsgeomap_p.h new file mode 100644 index 00000000..44d4b02c --- /dev/null +++ b/src/imports/location/qdeclarative3dgraphicsgeomap_p.h @@ -0,0 +1,290 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVE3DGRAPHICSGEOMAP_H +#define QDECLARATIVE3DGRAPHICSGEOMAP_H + +//#include <qgraphicsgeomap.h> +#include <QPointer> +#include <QTouchEvent> +#include <QtDeclarative/qsgitem.h> +#include <QtQuick1/QDeclarativeItem> +//#include <QGeoMapData> +#include "qdeclarativegeomapobject_p.h" +#include <QtCore/QCoreApplication> + +// Check $$pwd/location.pro how to enable these +#ifdef QSGMOUSEAREA_AVAILABLE +#include "qsgmousearea_p.h" +#endif +#include "qsgtexture.h" +#include "qdeclarativegeomapflickable_p.h" +#include "qdeclarativegeomappincharea_p.h" + +#include "cameradata.h" +#include "map.h" + +QT_BEGIN_NAMESPACE + +class QGLPainter; +class QGLSceneNode; +class TileCache; +class Tile; +class TileSpec; +class MapSphere; + +class QGeoCoordinate; +class QGeoMapObject; +class QGeoMapData; +class QGeoServiceProvider; +class QDeclarativeCoordinate; +class QDeclarativeGeoServiceProvider; +class QDeclarative3DGraphicsGeoMap; +class QDeclarativeGeoMapItem; +#ifdef QSGMOUSEAREA_AVAILABLE +class QSGMouseEvent; +#endif + +class QDeclarative3DGraphicsGeoMap : public QSGItem +{ + Q_OBJECT + + Q_ENUMS(MapType) + Q_ENUMS(ConnectivityMode) + // Temporary tweak for testing + Q_PROPERTY(QDeclarativeGeoMapPinchArea* pinch READ pinch CONSTANT) + Q_PROPERTY(QDeclarativeGeoMapFlickable* flick READ flick CONSTANT); + Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) + Q_PROPERTY(QSizeF size READ size WRITE setSize NOTIFY sizeChanged) + Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel CONSTANT) + Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel CONSTANT) + Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) +// Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged) + Q_PROPERTY(QDeclarativeCoordinate* center READ center WRITE setCenter NOTIFY declarativeCenterChanged) +// Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged) + Q_INTERFACES(QDeclarativeParserStatus) + +public: +// enum MapType { +// NoMap = QGraphicsGeoMap::NoMap, +// StreetMap = QGraphicsGeoMap::StreetMap, +// SatelliteMapDay = QGraphicsGeoMap::SatelliteMapDay, +// SatelliteMapNight = QGraphicsGeoMap::SatelliteMapNight, +// TerrainMap = QGraphicsGeoMap::TerrainMap +// }; + +// enum ConnectivityMode { +// NoConnectivity = QGraphicsGeoMap::NoConnectivity, +// OfflineMode = QGraphicsGeoMap::OfflineMode, +// OnlineMode = QGraphicsGeoMap::OnlineMode, +// HybridMode = QGraphicsGeoMap::HybridMode +// }; + +public: + + QDeclarative3DGraphicsGeoMap(QSGItem *parent = 0); + ~QDeclarative3DGraphicsGeoMap(); + + // From QDeclarativeParserStatus + virtual void componentComplete(); + + // from QSGItem + virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); + void itemChange(ItemChange change, const ItemChangeData & data); + + void setPlugin(QDeclarativeGeoServiceProvider *plugin); + QDeclarativeGeoServiceProvider* plugin() const; + + qreal minimumZoomLevel() const; + qreal maximumZoomLevel() const; + + void setSize(const QSizeF &size); + QSizeF size() const; + + QDeclarativeGeoMapFlickable* flick(); + + void setMouseEnabled(bool enabled); + bool mouseEnabled() const; + void setMouseHoverEnabled(bool enabled); + bool mouseHoverEnabled() const; + bool containsMouse() const; + + void setZoomLevel(qreal zoomLevel); + qreal zoomLevel() const; + + void setCenter(QDeclarativeCoordinate *center); + QDeclarativeCoordinate* center(); + +// void setMapType(MapType mapType); +// MapType mapType() const; + +// void setConnectivityMode(ConnectivityMode connectivityMode); +// ConnectivityMode connectivityMode() const; + + QDeclarativeListProperty<QDeclarativeGeoMapObject> objects(); + + //Q_INVOKABLE void addMapObject(QDeclarativeGeoMapObject* object); + //Q_INVOKABLE void removeMapObject(QDeclarativeGeoMapObject* object); + + Q_INVOKABLE void removeMapItem(QDeclarativeGeoMapItem *item); + Q_INVOKABLE void addMapItem(QDeclarativeGeoMapItem *item); + Q_INVOKABLE void clearMapItems(); + + Q_INVOKABLE QDeclarativeCoordinate* toCoordinate(QPointF screenPosition) const; + Q_INVOKABLE QPointF toScreenPosition(QDeclarativeCoordinate* coordinate) const; + + // This function is strictly for testing purposes and may be removed at + // any time without any notice (hence also the obscure naming to avoid + // accidental usage): + Q_INVOKABLE int testGetDeclarativeMapObjectCount(); + //void setActiveMouseArea(QDeclarativeGeoMapMouseArea *area); + //QDeclarativeGeoMapMouseArea* activeMouseArea() const; + + QDeclarativeGeoMapPinchArea* pinch() {return pinchArea_;} + + // Internal + Map* map() {return map_;} + +public Q_SLOTS: + void pan(int dx, int dy); + +protected: + void touchEvent(QTouchEvent *event); + void wheelEvent(QWheelEvent *event); + void geometryChanged(const QRectF &newGeometry, + const QRectF &oldGeometry); + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + void hoverMoveEvent(QGraphicsSceneHoverEvent *event); + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + void keyPressEvent(QKeyEvent *e); + void closeEvent(QCloseEvent *e); + //void enterEvent(QEvent *e); + //void leaveEvent(QEvent *e); + void showEvent(QShowEvent *e); + void resizeEvent(QResizeEvent *e); + +Q_SIGNALS: + // wheel + void wheel(qreal delta); + + void pluginChanged(QDeclarativeGeoServiceProvider *plugin); + void sizeChanged(const QSizeF &size); + void zoomLevelChanged(qreal zoomLevel); + void declarativeCenterChanged(const QDeclarativeCoordinate *coordinate); +// void mapTypeChanged(QDeclarative3DGraphicsGeoMap::MapType mapType); +// void connectivityModeChanged(QDeclarative3DGraphicsGeoMap::ConnectivityMode connectivityMode); + +private Q_SLOTS: + void updateMapDisplay(const QRectF& target); + void internalCenterChanged(const QGeoCoordinate &coordinate); +// void internalMapTypeChanged(QGraphicsGeoMap::MapType mapType); +// void internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode); + void centerLatitudeChanged(double latitude); + void centerLongitudeChanged(double longitude); + void centerAltitudeChanged(double altitude); + void sceneGraphInitialized(); + void beforeRendering(); + void mouseChanged(); + void mapItemTextureChanged(); + void cameraZoomLevelChanged(double zoomLevel); + +private: + void setupMapView(QDeclarativeGeoMapObjectView *view); + void updateAspectRatio(); + void populateMap(); + + QDeclarativeGeoMapObject* createItem(int modelIndex); + + QDeclarativeGeoServiceProvider* plugin_; + QGeoServiceProvider* serviceProvider_; + QGeoMappingManager* mappingManager_; +// QGeoMapData* mapData_; + + qreal zoomLevel_; + QPointer<QDeclarativeCoordinate> center_; + + QGeoCoordinate* initialCoordinate; +// QDeclarative3DGraphicsGeoMap::MapType mapType_; +// QDeclarative3DGraphicsGeoMap::ConnectivityMode connectivityMode_; + QSizeF size_; + + QList<QDeclarativeGeoMapObject*> mapObjects_; + QHash<QGeoMapObject*, QDeclarativeGeoMapObject*> objectMap_; + + bool componentCompleted_; + QList<QDeclarativeGeoMapObjectView*> mapViews_; + +#ifdef QSGMOUSEAREA_AVAILABLE + QSGMouseArea* mouseArea_; +#endif + QDeclarativeGeoMapFlickable* flickable_; + QDeclarativeGeoMapPinchArea* pinchArea_; + + void paintGL(QGLPainter *painter); + void earlyDraw(QGLPainter *painter); + void restoreDefaults(QGLPainter *painter); + + QSGCanvas* canvas_; + int touchTimer_; + + TileCache *tileCache_; + void setCameraData(const CameraData &camera); + CameraData cameraData() const; + Map *map_; + QList<QDeclarativeGeoMapItem*> mapItems_; + QList<QDeclarativeGeoMapItem*> mapItemsPending_; + + friend class QDeclarativeGeoMapObjectView; + friend class QDeclarativeGeoMapPinchArea; + friend class QDeclarativeGeoMapFlickable; + Q_DISABLE_COPY(QDeclarative3DGraphicsGeoMap); +}; + + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarative3DGraphicsGeoMap)); + +#endif diff --git a/src/imports/location/qdeclarativegeomapcircleobject.cpp b/src/imports/location/qdeclarativegeomapcircleobject.cpp deleted file mode 100644 index f5e8e1a5..00000000 --- a/src/imports/location/qdeclarativegeomapcircleobject.cpp +++ /dev/null @@ -1,252 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomapcircleobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -#include <QColor> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapCircle - - \brief The MapCircle element displays a circle on a map. - \inherits QGeoMapCircleObject - - \ingroup qml-location-maps - - The circle is specified in terms of a central coordinate and - a radius in metres. - - If \l center and \l radius are not specified and valid the - circle will not be displayed. - - An example, a MapCircle positioned at your current position (assuming there - is a PositionSource): - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic map position marker definition - The element is used with a Map element. - - The MapCircle element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapCircleObject::QDeclarativeGeoMapCircleObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), circle_(0), center_(0) -{ - circle_ = new QGeoMapCircleObject(); - setMapObject(circle_); - - connect(circle_, - SIGNAL(radiusChanged(qreal)), - this, - SIGNAL(radiusChanged(qreal))); - connect(&border_, - SIGNAL(colorChanged(QColor)), - this, - SLOT(borderColorChanged(QColor))); - connect(&border_, - SIGNAL(widthChanged(int)), - this, - SLOT(borderWidthChanged(int))); -} - -QDeclarativeGeoMapCircleObject::~QDeclarativeGeoMapCircleObject() -{ - // Memory management is bit tricky because we do not know - // which will be deleted first, the Map or some/all of the - // MapObjects. Hence we need to make sure that the internal - // c++ map objects are removed from QGeoMapData in either place - // (but not both). - if (map_ ) - map_->removeMapObject(this); - delete circle_; -} - -/*! - \qmlproperty Coordinate MapCircle::center - - This property holds the coordinate at the center of the circle. - - The default value is an invalid coordinate. -*/ - -void QDeclarativeGeoMapCircleObject::setCenter(QDeclarativeCoordinate *center) -{ - if (!center || center == center_) - return; - center_ = center; - connect(center_, - SIGNAL(latitudeChanged(double)), - this, - SLOT(centerLatitudeChanged(double))); - connect(center_, - SIGNAL(longitudeChanged(double)), - this, - SLOT(centerLongitudeChanged(double))); - connect(center_, - SIGNAL(altitudeChanged(double)), - this, - SLOT(centerAltitudeChanged(double))); - - circle_->setCenter(center->coordinate()); - emit centerChanged(center_); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapCircleObject::center() -{ - return center_; -} - -void QDeclarativeGeoMapCircleObject::centerLatitudeChanged(double /*latitude*/) -{ - circle_->setCenter(center_->coordinate()); -} - -void QDeclarativeGeoMapCircleObject::centerLongitudeChanged(double /*longitude*/) -{ - circle_->setCenter(center_->coordinate()); -} - -void QDeclarativeGeoMapCircleObject::centerAltitudeChanged(double /*altitude*/) -{ - circle_->setCenter(center_->coordinate()); -} - -void QDeclarativeGeoMapCircleObject::setRadius(qreal radius) -{ - circle_->setRadius(radius); -} - -qreal QDeclarativeGeoMapCircleObject::radius() const -{ - return circle_->radius(); -} - -/*! - \qmlproperty qreal MapCircle::radius - - This property holds the radius of the circle in metres. - - A negative value is used to indicate that the radius is invalid and - the default value is a radius of -1.0. -*/ - -/*! - \qmlproperty color MapCircle::color - - This property holds the color used to fill the circle. - - The default value corresponds to a transparent color. -*/ - -void QDeclarativeGeoMapCircleObject::setColor(const QColor &color) -{ - if (color_ == color) - return; - - color_ = color; - QBrush m_brush(color); - circle_->setBrush(m_brush); - emit colorChanged(color_); -} - -QColor QDeclarativeGeoMapCircleObject::color() const -{ - return color_; -} - -/*! - \qmlproperty int MapCircle::border.width - \qmlproperty color MapCircle::border.color - - These properties hold the width and color used to draw the border of the circle. - - The width is in pixels and is independent of the zoom level of the map. - - The default values correspond to a black border with a width of 1 pixel. - - For no line, use a width of 0 or a transparent color. -*/ -QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapCircleObject::border() -{ - return &border_; -} - -void QDeclarativeGeoMapCircleObject::borderColorChanged(const QColor &color) -{ - QPen p = circle_->pen(); - p.setColor(color); - circle_->setPen(p); -} - -void QDeclarativeGeoMapCircleObject::borderWidthChanged(int width) -{ - QPen p = circle_->pen(); - p.setWidth(width); - if (width == 0) - p.setStyle(Qt::NoPen); - else - p.setStyle(Qt::SolidLine); - circle_->setPen(p); -} - -/*! - \qmlproperty int MapCircle::z - - This property holds the z-value of the circle. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. -*/ - -/*! - \qmlproperty bool MapCircle::visible - - This property holds a boolean corresponding to whether or not the - circle is visible. -*/ - -#include "moc_qdeclarativegeomapcircleobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomapcircleobject_p.h b/src/imports/location/qdeclarativegeomapcircleobject_p.h deleted file mode 100644 index 0ba96c67..00000000 --- a/src/imports/location/qdeclarativegeomapcircleobject_p.h +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPCIRCLEOBJECT_H -#define QDECLARATIVEGEOMAPCIRCLEOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qdeclarativegeomapobjectborder_p.h" -#include "qgeomapcircleobject.h" - -class QColor; -class QBrush; - -// !!! IMPORTANT !!! -// -// Inheriting from QSGItem here -// is just a workaround to have non-gui related (ie where visualization is not -// the main thing) autotests to pass in QML2 environment. -// Real QML2 Map support (and related map object is a work in progress elsewhere. -// This Map element instantiates but does not do anything meaningful from app dev -// perspective. -// -// !!! IMPORTANT !!! - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapCircleObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeCoordinate* center READ center WRITE setCenter NOTIFY centerChanged) - Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged) - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border) - -public: - QDeclarativeGeoMapCircleObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapCircleObject(); - - QDeclarativeCoordinate* center(); - void setCenter(QDeclarativeCoordinate *center); - - qreal radius() const; - void setRadius(qreal radius); - - QColor color() const; - void setColor(const QColor &color); - - QDeclarativeGeoMapObjectBorder* border(); - -Q_SIGNALS: - void centerChanged(const QDeclarativeCoordinate *center); - void radiusChanged(qreal radius); - void colorChanged(const QColor &color); - -private Q_SLOTS: - void borderColorChanged(const QColor &color); - void borderWidthChanged(int width); - void centerLatitudeChanged(double latitude); - void centerLongitudeChanged(double longitude); - void centerAltitudeChanged(double altitude); - -private: - QPointer<QGeoMapCircleObject> circle_; - QDeclarativeCoordinate *center_; - QColor color_; - QDeclarativeGeoMapObjectBorder border_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapCircleObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomapflickable.cpp b/src/imports/location/qdeclarativegeomapflickable.cpp new file mode 100644 index 00000000..c565801f --- /dev/null +++ b/src/imports/location/qdeclarativegeomapflickable.cpp @@ -0,0 +1,371 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QApplication> +#include <QGraphicsSceneMouseEvent> +#include <QPropertyAnimation> +#include <QEasingCurve> +#include "qdeclarativegeomapflickable_p.h" +#include <QTimer> +#include "map.h" +#include "math.h" + +// Constant values from QSGFlickable +// The default maximum velocity of a flick. +#ifndef QML_FLICK_DEFAULTMAXVELOCITY +#define QML_FLICK_DEFAULTMAXVELOCITY 2500 +#endif +// The default deceleration of a flick. +#ifndef QML_FLICK_DEFAULTDECELERATION +#define QML_FLICK_DEFAULTDECELERATION 1500 +#endif +// Minimum +#ifndef QML_FLICK_MINIMUMECELERATION +#define QML_FLICK_MINIMUMDECELERATION 10 +#endif + + +// The number of samples to discard when calculating the flick velocity. +// Touch panels often produce inaccurate results as the finger is lifted. +#ifndef QML_FLICK_DISCARDSAMPLES +#define QML_FLICK_DISCARDSAMPLES 1 +#endif + +// FlickThreshold determines how far the "mouse" must have moved +// before we perform a flick. +static const int FlickThreshold = 20; +// RetainGrabVelocity is the maxmimum instantaneous velocity that +// will ensure the Flickable retains the grab on consecutive flicks. +static const int RetainGrabVelocity = 15; +// Really slow flicks can be annoying. +const qreal MinimumFlickVelocity = 75.0; + +QT_BEGIN_NAMESPACE + +QDeclarativeGeoMapFlickable::QDeclarativeGeoMapFlickable(Map* map, QObject *parent) + : QObject(parent), + pressed_(false), + maxVelocity_(QML_FLICK_DEFAULTMAXVELOCITY), + deceleration_(QML_FLICK_DEFAULTDECELERATION), + flicking_(false), + map_(map), + enabled_(false), + moving_(false) +{ + Q_ASSERT(map_); + pressTime_.invalidate(); + lastPosTime_.invalidate(); + velocityTime_.invalidate(); + //animation_ = new QPropertyAnimation(map_->mapCamera(), "cameraData", this); + //animation_ = new QPropertyAnimation(map_->mapCamera(), "center", this); + animation_ = new QPropertyAnimation(map_, "camera", this); + animation_->setEasingCurve(QEasingCurve(QEasingCurve::OutQuad)); + connect(animation_, SIGNAL(finished()), this, SLOT(flickAnimationFinished())); + //connect(animation_, SIGNAL(valueChanged(const QVariant&)), this, SLOT(flickAnimationValueChanged(const QVariant&))); +} + +QDeclarativeGeoMapFlickable::~QDeclarativeGeoMapFlickable() +{ +} + +qreal QDeclarativeGeoMapFlickable::deceleration() const +{ + return deceleration_; +} + +void QDeclarativeGeoMapFlickable::setDeceleration(qreal deceleration) +{ + if (deceleration < QML_FLICK_MINIMUMDECELERATION) + deceleration = QML_FLICK_MINIMUMDECELERATION; + if (deceleration == deceleration_) + return; + + deceleration_ = deceleration; + emit decelerationChanged(); +} + +void QDeclarativeGeoMapFlickable::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + if (!enabled_) + return; + //Q_ASSERT(!pressed_); + + stop(); + pressed_ = true; + lastPos_ = QPointF(); + pressPos_ = event->pos(); + lastPosTime_.start(); + pressTime_.start(); + velocityTime_.start(); +} + +void QDeclarativeGeoMapFlickable::stop() +{ + velocityBufferX_.clear(); + velocityBufferY_.clear(); + velocityX_ = 0.0; + velocityY_ = 0.0; + if (moving_) { + moving_ = false; + emit movementEnded(); + } + if (flicking_) { + flicking_ = false; + if (animation_->state() == QPropertyAnimation::Running) + animation_->stop(); + emit flickEnded(); + } + lastPosTime_.invalidate(); + pressTime_.invalidate(); + velocityTime_.invalidate(); +} + +void QDeclarativeGeoMapFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + if (!enabled_) { + return; + } + if (!pressed_) { + return; + } + if (!lastPosTime_.isValid()) { + return; + } + + // Check if thresholds for normal panning are met. + // (normal panning vs flicking: flicking will start from mouse release event). + int dyFromPress = int(event->pos().y() - pressPos_.y()); + int dxFromPress = int(event->pos().x() - pressPos_.x()); + int dyFromLastPos; + int dxFromLastPos; + if (!lastPos_.isNull()) { + dyFromLastPos = event->pos().y() - lastPos_.y(); + dxFromLastPos = event->pos().x() - lastPos_.x(); + } + + // Simple pan (drag) while being pressed + if ((qAbs(dyFromPress) > QApplication::startDragDistance() + || qAbs(dxFromPress) > QApplication::startDragDistance() + || pressTime_.elapsed() > 200) && !lastPos_.isNull()) { + + if (!moving_) { + emit movementStarted(); + moving_ = true; + } + updateCamera(dxFromLastPos, dyFromLastPos, 0); + } + // Take velocity samples, used later to determine the flick + // duration and speed (when mouse is released). + if (!lastPos_.isNull()) { + qreal elapsed = qreal(lastPosTime_.elapsed()) / 1000.; + if (elapsed <= 0) + return; + lastPosTime_.restart(); + addVelocitySample(velocityBufferY_, double(dyFromLastPos)/elapsed); + addVelocitySample(velocityBufferX_, double(dxFromLastPos)/elapsed); + } + lastPos_ = event->pos(); +} + +// FIXME coordinate pan with a sleeve-constant (zoom level is not considered appropriately) +void QDeclarativeGeoMapFlickable::updateCamera(int dx, int dy, int timeMs) +{ + if (timeMs < 0) + return; + CameraData cameraStart = map_->cameraData(); + QGeoCoordinate coordinate = cameraStart.center(); + if (timeMs == 0) { + // No animation, just set new values. + coordinate.setLatitude(coordinate.latitude() + (dy / pow(2.0, cameraStart.zoomFactor()))); + coordinate.setLongitude(coordinate.longitude() - (dx / pow(2.0, cameraStart.zoomFactor()))); + cameraStart.setCenter(coordinate); + map_->setCameraData(cameraStart); + } else { + qDebug() << "Will do flick animation dx (pix), dy (pix), time (ms): " << dx << dy << timeMs; + if (animation_->state() == QPropertyAnimation::Running) + animation_->stop(); + CameraData cameraEnd = cameraStart; + animation_->setDuration(timeMs); + coordinate.setLongitude(coordinate.longitude() - (dx / pow(2.0, cameraStart.zoomFactor()))); + coordinate.setLatitude(coordinate.latitude() + (dy / pow(2.0, cameraStart.zoomFactor()))); + cameraEnd.setCenter(coordinate); + + animation_->setStartValue(QVariant::fromValue(cameraStart)); + animation_->setEndValue(QVariant::fromValue(cameraEnd)); + + //animation_->setStartValue(QVariant::fromValue(cameraStart.center())); + //animation_->setEndValue(QVariant::fromValue(cameraEnd.center())); + + qDebug() << "The latitude will go from:" << cameraStart.center().latitude() << "to:" << cameraEnd.center().latitude(); + qDebug() << "The longitude will go from:" << cameraStart.center().longitude() << "to:" << cameraEnd.center().longitude(); + QTimer::singleShot(0, animation_, SLOT(start())); + flicking_ = true; + emit flickStarted(); + } +} + +// Adds velocity sample to sample buffer. Data is later used to calculate +// flick speed. By default 3 latest samples are considered. +void QDeclarativeGeoMapFlickable::addVelocitySample(QVector<qreal>& buffer, qreal sample) +{ + if (sample > maxVelocity_) + sample = maxVelocity_; + else if (sample < -maxVelocity_) + sample = -maxVelocity_; + buffer.append(sample); + if (buffer.count() > QML_FLICK_SAMPLEBUFFER) + buffer.remove(0); +} + +void QDeclarativeGeoMapFlickable::updateVelocity(QVector<qreal>& buffer, qreal& velocity) +{ + if (buffer.count() > QML_FLICK_DISCARDSAMPLES) { + velocity = 0; + int count = buffer.count() - QML_FLICK_DISCARDSAMPLES; + for (int i = 0; i < count; ++i) { + qreal v = buffer.at(i); + velocity += v; + } + velocity /= count; + } +} + + +void QDeclarativeGeoMapFlickable::setEnabled(bool enabled) +{ + if (enabled_ == enabled) + return; + enabled_ = enabled; + if (!enabled_) + stop(); + emit enabledChanged(); +} + +bool QDeclarativeGeoMapFlickable::enabled() const +{ + return enabled_; +} + +void QDeclarativeGeoMapFlickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (!pressed_ || !enabled_) + return; + pressed_ = false; + + // if we drag then pause before release we should not cause a flick. + if (lastPosTime_.elapsed() < 100) { + updateVelocity(velocityBufferY_, velocityY_); + updateVelocity(velocityBufferX_, velocityX_); + } else { + velocityX_ = 0.0; + velocityY_ = 0.0; + } + int flickTimeY = 0; + int flickTimeX = 0; + int flickPixelsX = 0; + int flickPixelsY = 0; + if (qAbs(velocityY_) > MinimumFlickVelocity && qAbs(event->pos().y() - pressPos_.y()) > FlickThreshold) { + // calculate Y flick animation values + qreal acceleration = deceleration_; + if ((velocityY_ > 0.0f) == (deceleration_ > 0.0f)) + acceleration = acceleration * -1.0f; + flickTimeY = static_cast<int>(-1000 * velocityY_ / acceleration); + flickPixelsY = (flickTimeY * velocityY_) / (1000.0 * 2); + //qDebug() << "---=== would flick Y, velocity (pix/sec), flick duration (msec): ===---" << velocityY_ << flickTimeY; + } else { + // reset + //qDebug() << "---=== would NOT flick Y, velocity (pix/sec): ===---" << velocityY_; + } + if (qAbs(velocityX_) > MinimumFlickVelocity && qAbs(event->pos().x() - pressPos_.x()) > FlickThreshold) { + // calculate X flick animation values + qreal acceleration = deceleration_; + if ((velocityX_ > 0.0f) == (deceleration_ > 0.0f)) + acceleration = acceleration * -1.0f; + flickTimeX = static_cast<int>(-1000 * velocityX_ / acceleration); + flickPixelsX = (flickTimeX * velocityX_) / (1000.0 * 2); + //qDebug() << "---=== would flick X, velocity (pix/sec), flick duration (msec), pixels: ===---" << velocityX_ << flickTimeX << "pixels: " << flickPixelsX; + } else { + // reset + //qDebug() << "---=== would NOT flick X, velocity (pix/sec) ===---" << velocityX_; + } + int flickTime = qMax(flickTimeY, flickTimeX); + updateCamera(flickPixelsX, flickPixelsY, flickTime); + + if (flickTime == 0 && moving_) { + emit movementEnded(); + moving_ = false; + } + velocityBufferX_.clear(); + velocityBufferY_.clear(); + velocityX_ = 0.0; + velocityY_ = 0.0; + lastPosTime_.invalidate(); + pressTime_.invalidate(); + velocityTime_.invalidate(); +} + +void QDeclarativeGeoMapFlickable::flickAnimationFinished() +{ + //qDebug() << metaObject()->className() << __FUNCTION__; + //Q_ASSERT(flicking_); + //Q_ASSERT(moving_); + flicking_ = false; + moving_ = false; + emit flickEnded(); + emit movementEnded(); +} + +/* +void QDeclarativeGeoMapFlickable::flickAnimationValueChanged(const QVariant& value) +{ + qDebug() << metaObject()->className() << __FUNCTION__; +} +*/ + +void QDeclarativeGeoMapFlickable::timerEvent(QTimerEvent *event) +{ + Q_UNUSED(event); // TODO press delay handling + //qDebug() << metaObject()->className() << __FUNCTION__ ; +} + +#include "moc_qdeclarativegeomapflickable_p.cpp" + +QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarativegeomapflickable_p.h b/src/imports/location/qdeclarativegeomapflickable_p.h new file mode 100644 index 00000000..a6c73c7b --- /dev/null +++ b/src/imports/location/qdeclarativegeomapflickable_p.h @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEGEOMAPFLICKABLE_H +#define QDECLARATIVEGEOMAPFLICKABLE_H + +// Constant value from QSGFlickable +// The number of samples to use in calculating the velocity of a flick +#ifndef QML_FLICK_SAMPLEBUFFER +#define QML_FLICK_SAMPLEBUFFER 3 +#endif + +#include <QtDeclarative/qdeclarative.h> +#include <QElapsedTimer> +#include <QVector> +#include <QObject> +#include <QDebug> + +// Internal. Calculates relevant flick parameters based on mouse +// movements, which can then be used to fire a panning animation. +QT_BEGIN_NAMESPACE + +class QGraphicsSceneMouseEvent; +class QPropertyAnimation; +class CameraData; +class Map; + +class QDeclarativeGeoMapFlickable: public QObject +{ + Q_OBJECT + Q_PROPERTY(qreal deceleration READ deceleration WRITE setDeceleration NOTIFY decelerationChanged) + Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged()) + +public: + QDeclarativeGeoMapFlickable(Map* map, QObject *parent = 0); + ~QDeclarativeGeoMapFlickable(); + + qreal deceleration() const; + void setDeceleration(qreal deceleration); + + bool enabled() const; + void setEnabled(bool enabled); + + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void timerEvent(QTimerEvent *event); + +signals: + void decelerationChanged(); + void movementStarted(); + void enabledChanged(); + void movementEnded(); + void flickStarted(); + void flickEnded(); + +private: + void addVelocitySample(QVector<qreal>& buffer, qreal sample); + void updateVelocity(QVector<qreal>& buffer, qreal& velocity); + void updateCamera(int dx, int dy, int timeMs = 0); + void stop(); + +private slots: + void flickAnimationFinished(); + //void flickAnimationValueChanged(const QVariant&); + +private: + bool pressed_; + qreal maxVelocity_; + qreal deceleration_; + QElapsedTimer lastPosTime_; + QElapsedTimer pressTime_; + QElapsedTimer velocityTime_; + QVector<qreal> velocityBufferX_; + qreal velocityX_; + QVector<qreal> velocityBufferY_; + qreal velocityY_; + QPointF lastPos_; + QPointF pressPos_; + bool flicking_; + Map* map_; + QPropertyAnimation* animation_; + bool enabled_; + bool moving_; +}; + +QT_END_NAMESPACE +QML_DECLARE_TYPE(QDeclarativeGeoMapFlickable); + +#endif diff --git a/src/imports/location/qdeclarativegeomapgroupobject.cpp b/src/imports/location/qdeclarativegeomapgroupobject.cpp deleted file mode 100644 index 63ecf0c8..00000000 --- a/src/imports/location/qdeclarativegeomapgroupobject.cpp +++ /dev/null @@ -1,248 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomapgroupobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapGroup - - \brief The MapGroup element aggregates a set of map objects. - \inherits QGeoMapGroupObject - - \ingroup qml-location-maps - - Grouping is provided to make it easier to quickly add, remove, show - and hide groups of objects. - - It also allows users to specify an ordering of objects local to the - group via the z-values and insertion order of the objects in the group. - - The MapGroup element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapGroupObject::QDeclarativeGeoMapGroupObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent) -{ - group_ = new QGeoMapGroupObject(); - setMapObject(group_); -} - -QDeclarativeGeoMapGroupObject::~QDeclarativeGeoMapGroupObject() -{ - // Remove all objects from the group before deleting it. - // These objects are owned by their declarative counterparts - // and they'll delete them. - if (map_) - map_->removeMapObject(this); - QList<QGeoMapObject*> objects = group_->childObjects(); - for (int i = 0; i < objects.size(); ++i) { - group_->removeChildObject(objects.at(i)); - } - delete group_; -} - -void QDeclarativeGeoMapGroupObject::componentComplete() -{ - //QList<QGraphicsItem*> children = childItems(); - // TODO - QList<QSGItem*> children = childItems(); - for (int i = 0; i < children.size(); ++i) { - QDeclarativeGeoMapObject *mapObject - = qobject_cast<QDeclarativeGeoMapObject*>(children.at(i)); - if (mapObject) { - group_->addChildObject(mapObject->mapObject()); - objects_.append(mapObject); - mapObject->setMap(map()); - } - } - - QDeclarativeGeoMapObject::componentComplete(); -} - -void QDeclarativeGeoMapGroupObject::setMap(QDeclarativeGraphicsGeoMap *map) -{ - QDeclarativeGeoMapObject::setMap(map); - for (int i = 0; i < objects_.size(); ++i) - objects_[i]->setMap(map); -} - -/*! - \qmlproperty list<QGeoMapObject> MapGroup::objects - \default - - This property holds the list of objects which make up the group. -*/ - -QDeclarativeListProperty<QDeclarativeGeoMapObject> QDeclarativeGeoMapGroupObject::objects() -{ - return QDeclarativeListProperty<QDeclarativeGeoMapObject>(this, - 0, - child_append, - child_count, - child_at, - child_clear); -} - -void QDeclarativeGeoMapGroupObject::child_append(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, QDeclarativeGeoMapObject *mapObject) -{ - QDeclarativeGeoMapGroupObject* group = static_cast<QDeclarativeGeoMapGroupObject*>(prop->object); - group->group_->addChildObject(mapObject->mapObject()); - group->objects_.append(mapObject); -} - -int QDeclarativeGeoMapGroupObject::child_count(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop) -{ - return static_cast<QDeclarativeGeoMapGroupObject*>(prop->object)->objects_.size(); -} - -QDeclarativeGeoMapObject* QDeclarativeGeoMapGroupObject::child_at(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, int index) -{ - return static_cast<QDeclarativeGeoMapGroupObject*>(prop->object)->objects_.at(index); -} - -void QDeclarativeGeoMapGroupObject::child_clear(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop) -{ - QDeclarativeGeoMapGroupObject* group = static_cast<QDeclarativeGeoMapGroupObject*>(prop->object); - group->group_->clearChildObjects(); - group->objects_.clear(); -} - -void QDeclarativeGeoMapGroupObject::doubleClickEvent(QDeclarativeGeoMapMouseEvent *event) -{ - if (event->accepted()) - return; - - for (int i = objects_.size() - 1; i >= 0; --i) { - objects_.at(i)->doubleClickEvent(event); - if (event->accepted()) - return; - } - - QDeclarativeGeoMapObject::doubleClickEvent(event); -} - -void QDeclarativeGeoMapGroupObject::pressEvent(QDeclarativeGeoMapMouseEvent *event) -{ - if (event->accepted()) - return; - - for (int i = objects_.size() - 1; i >= 0; --i) { - objects_.at(i)->pressEvent(event); - if (event->accepted()) - return; - } - - QDeclarativeGeoMapObject::pressEvent(event); -} - -void QDeclarativeGeoMapGroupObject::releaseEvent(QDeclarativeGeoMapMouseEvent *event) -{ - if (event->accepted()) - return; - - for (int i = objects_.size() - 1; i >= 0; --i) { - objects_.at(i)->releaseEvent(event); - if (event->accepted()) - return; - } - - QDeclarativeGeoMapObject::releaseEvent(event); -} - -void QDeclarativeGeoMapGroupObject::enterEvent() -{ - for (int i = objects_.size() - 1; i >= 0; --i) - objects_.at(i)->enterEvent(); - - QDeclarativeGeoMapObject::enterEvent(); -} - -void QDeclarativeGeoMapGroupObject::exitEvent() -{ - for (int i = objects_.size() - 1; i >= 0; --i) - objects_.at(i)->exitEvent(); - - QDeclarativeGeoMapObject::exitEvent(); -} - -void QDeclarativeGeoMapGroupObject::moveEvent(QDeclarativeGeoMapMouseEvent *event) -{ - if (event->accepted()) - return; - - for (int i = objects_.size() - 1; i >= 0; --i) { - objects_.at(i)->moveEvent(event); - if (event->accepted()) - return; - } - - QDeclarativeGeoMapObject::moveEvent(event); -} - -/*! - \qmlproperty int MapGroup::zValue - - This property holds the z-value of the group. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. - - The objects inside the group are drawn according to the z-values - and insertion order of the other elements of the group. This - is indpendent of the z-value and insertion order of the group - element itself. -*/ - -/*! - \qmlproperty bool MapGroup::visible - - This property holds a boolean corresponding to whether or not the - group is visible. -*/ - -#include "moc_qdeclarativegeomapgroupobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomapgroupobject_p.h b/src/imports/location/qdeclarativegeomapgroupobject_p.h deleted file mode 100644 index 9a85fa4d..00000000 --- a/src/imports/location/qdeclarativegeomapgroupobject_p.h +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPGROUPOBJECT_H -#define QDECLARATIVEGEOMAPGROUPOBJECT_H - -#include "qgeomapgroupobject.h" - -#include "qdeclarativegeomapobject_p.h" -#include <QtDeclarative/qdeclarative.h> -#include <QDeclarativeListProperty> - -// !!! IMPORTANT !!! -// -// Inheriting from QSGItem here -// is just a workaround to have non-gui related (ie where visualization is not -// the main thing) autotests to pass in QML2 environment. -// Real QML2 Map support (and related map object is a work in progress elsewhere. -// This Map element instantiates but does not do anything meaningful from app dev -// perspective. -// -// !!! IMPORTANT !!! - -QT_BEGIN_NAMESPACE - -class QGeoCoordinate; - -class QDeclarativeGeoMapGroupObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeListProperty<QDeclarativeGeoMapObject> objects READ objects) - -public: - QDeclarativeGeoMapGroupObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapGroupObject(); - - virtual void componentComplete(); - - virtual void setMap(QDeclarativeGraphicsGeoMap *map); - - QDeclarativeListProperty<QDeclarativeGeoMapObject> objects(); - - virtual void doubleClickEvent(QDeclarativeGeoMapMouseEvent *event); - virtual void pressEvent(QDeclarativeGeoMapMouseEvent *event); - virtual void releaseEvent(QDeclarativeGeoMapMouseEvent *event); - virtual void enterEvent(); - virtual void exitEvent(); - virtual void moveEvent(QDeclarativeGeoMapMouseEvent *event); - -private: - static void child_append(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, QDeclarativeGeoMapObject *mapObject); - static int child_count(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop); - static QDeclarativeGeoMapObject* child_at(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, int index); - static void child_clear(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop); - - QPointer<QGeoMapGroupObject> group_; - QList<QDeclarativeGeoMapObject*> objects_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapGroupObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomapitem.cpp b/src/imports/location/qdeclarativegeomapitem.cpp new file mode 100644 index 00000000..1b6d304b --- /dev/null +++ b/src/imports/location/qdeclarativegeomapitem.cpp @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdeclarativegeomapitem_p.h" +#include "qdeclarativecoordinate_p.h" +#include <QtDeclarative/qdeclarativeinfo.h> + +#ifndef QSGSHADEREFFECTSOURCE_AVAILABLE + +#else + +#include <QDebug> + +QT_BEGIN_NAMESPACE + +/*! + \qmlclass MapItem + + The MapItem element is part of the \bold{Qt.location 5.0} module. +*/ + +QDeclarativeGeoMapItem::QDeclarativeGeoMapItem(QSGItem *parent) + : QSGShaderEffectSource(parent), + sourceItem_(0), + coordinate_(0), + map_(0), + componentCompleted_(false) +{ + connect(this, SIGNAL(sourceItemChanged()), this, SIGNAL(sourceChanged())); + connect(this->texture(), SIGNAL(textureChanged()), this, SLOT(textureChangedSlot())); +} + +QDeclarativeGeoMapItem::~QDeclarativeGeoMapItem() +{ + // Remove this item from map if it still exists (qpointer protection todo). + if (map_) + map_->removeMapItem(this); +} + +void QDeclarativeGeoMapItem::textureChangedSlot() +{ + if (!texture()) { + mapItem_.setTextureId(0); // invalidate + return; + } + mapItem_.setTextureId(texture()->textureId()); + mapItem_.setSize(texture()->textureSize()); +} + +MapItem* QDeclarativeGeoMapItem::mapItem() +{ + return &mapItem_; +} + +void QDeclarativeGeoMapItem::setZoomLevel(double zoom) +{ + if (zoom == mapItem_.zoom()) + return; + mapItem_.setZoom(zoom); + emit zoomLevelChanged(); +} + +double QDeclarativeGeoMapItem::zoomLevel() +{ + return mapItem_.zoom(); +} + +bool QDeclarativeGeoMapItem::hasValidTexture() +{ + if (mapItem_.textureId()) + return true; + return false; +} + +void QDeclarativeGeoMapItem::setCoordinate(QDeclarativeCoordinate *coordinate) +{ + if (coordinate_ == coordinate) + return; + if (coordinate_) { + coordinate_->disconnect(this); + } + coordinate_ = coordinate; + if (coordinate_) { + connect(coordinate_, + SIGNAL(latitudeChanged(double)), + this, + SLOT(coordinateCoordinateChanged(double))); + connect(coordinate_, + SIGNAL(longitudeChanged(double)), + this, + SLOT(coordinateCoordinateChanged(double))); + connect(coordinate_, + SIGNAL(altitudeChanged(double)), + this, + SLOT(coordinateCoordinateChanged(double))); + mapItem_.setCoordinate(coordinate->coordinate()); + } else { + mapItem_.setCoordinate(QGeoCoordinate()); + } + emit coordinateChanged(); +} + +void QDeclarativeGeoMapItem::setMap(QDeclarative3DGraphicsGeoMap* map) +{ + if (map == map_) { + return; + } + map_ = map; + if (!map_) { + // todo we may want to set parent item as zero too + setSourceItem(0); + mapItem_.setTextureId(0); // invalidate + } else { + // Essential to QSG -parent ourselves - it glues us to QSG tree and + // essentially enables rendering. This is particularly important to + // do manually when instantiating items from models. + + setParent(map_); + setParentItem(map_); + setSourceItem(sourceItem_); + } +} + +void QDeclarativeGeoMapItem::coordinateCoordinateChanged(double) +{ + mapItem_.setCoordinate(coordinate_->coordinate()); + emit coordinateChanged(); +} + +void QDeclarativeGeoMapItem::updateItem() +{ + // we seem to not always get texture changed -signals when + // adding static map items with add + if (!mapItem_.textureId() && texture()) { + mapItem_.setTextureId(texture()->textureId()); + } + mapItem_.update(); +} + +QDeclarativeCoordinate* QDeclarativeGeoMapItem::coordinate() +{ + return coordinate_; +} + +void QDeclarativeGeoMapItem::componentComplete() +{ + componentCompleted_ = true; + QSGShaderEffectSource::componentComplete(); +} + +// This will enable us to intercept the setting of the source item +// if we need to intercept our own Map graphical elements like route. +// Also this way we can handle addition and removal of this item to map. +void QDeclarativeGeoMapItem::setSource(QSGItem* source) +{ + if (source == sourceItem_) + return; + sourceItem_ = source; + if (map_) + setSourceItem(sourceItem_); + if (sourceItem_) { + mapItem_.setSize(QSize(sourceItem_->width(), sourceItem_->height())); + } + emit sourceChanged(); +} + +QSGItem* QDeclarativeGeoMapItem::source() +{ + if (!map_) + return sourceItem_; + return sourceItem(); +} +#endif + +#include "moc_qdeclarativegeomapitem_p.cpp" + +QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarativegeomapitem_p.h b/src/imports/location/qdeclarativegeomapitem_p.h new file mode 100644 index 00000000..c695ae7a --- /dev/null +++ b/src/imports/location/qdeclarativegeomapitem_p.h @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEGEOMAPITEM_H +#define QDECLARATIVEGEOMAPITEM_H + +#include <QtDeclarative/qsgitem.h> +#include <QtCore/QCoreApplication> +#include <QtCore/QPointer> + +#include "qsgtexture.h" +#include "mapitem.h" +#include "qdeclarativecoordinate_p.h" +#include "qdeclarative3dgraphicsgeomap_p.h" + +QT_BEGIN_NAMESPACE + +#ifndef QSGSHADEREFFECTSOURCE_AVAILABLE +// dummy implementation so we don't have to ifdef all over the place +class QDeclarativeGeoMapItem : public QSGItem +{ + Q_OBJECT +public: + QDeclarativeGeoMapItem(QSGItem *parent = 0) {}; + ~QDeclarativeGeoMapItem() {}; +}; + +#else + +#include <private/qsgshadereffectsource_p.h> + +class QDeclarativeGeoMapItem : public QSGShaderEffectSource +{ + Q_OBJECT + Q_PROPERTY(QDeclarativeCoordinate* coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) + Q_PROPERTY(QSGItem* source READ source WRITE setSource NOTIFY sourceChanged) + Q_PROPERTY(double zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) + +public: + QDeclarativeGeoMapItem(QSGItem *parent = 0); + ~QDeclarativeGeoMapItem(); + + // From QDeclarativeParserStatus + virtual void componentComplete(); + + void setCoordinate(QDeclarativeCoordinate *coordinate); + QDeclarativeCoordinate* coordinate(); + + void setSource(QSGItem* source); + QSGItem* source(); + + void setZoomLevel(double zoomLevel); + double zoomLevel(); + + void updateItem(); + void setMap(QDeclarative3DGraphicsGeoMap* map); + + MapItem* mapItem(); + bool hasValidTexture(); + +Q_SIGNALS: + void coordinateChanged(); + void sourceChanged(); + void zoomLevelChanged(); + +private Q_SLOTS: + void coordinateCoordinateChanged(double); + void textureChangedSlot(); + +private: + QSGItem* sourceItem_; + QDeclarativeCoordinate* coordinate_; + QDeclarative3DGraphicsGeoMap* map_; + // TODO enable didnt compile + //QPointer<QDeclarative3DGraphicsGeoMap*> map_; + bool componentCompleted_; + MapItem mapItem_; + Q_DISABLE_COPY(QDeclarativeGeoMapItem); +}; + +#endif // shader effect source available + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapItem)); + +#endif diff --git a/src/imports/location/qdeclarativegeomapmousearea_p.h b/src/imports/location/qdeclarativegeomapmousearea_p.h index 2d5ac970..cc1d8a39 100644 --- a/src/imports/location/qdeclarativegeomapmousearea_p.h +++ b/src/imports/location/qdeclarativegeomapmousearea_p.h @@ -46,7 +46,6 @@ #include "qdeclarativegraphicsgeomap_p.h" #include "qdeclarativegeomapmouseevent_p.h" - // !!! IMPORTANT !!! // // Inheriting from QSGItem here diff --git a/src/imports/location/qdeclarativegeomapobject.cpp b/src/imports/location/qdeclarativegeomapobject.cpp index 0c46376a..69a8c246 100644 --- a/src/imports/location/qdeclarativegeomapobject.cpp +++ b/src/imports/location/qdeclarativegeomapobject.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -41,8 +41,10 @@ #include "qdeclarativegeomapobject_p.h" #include "qdeclarativegeomapmousearea_p.h" -#include "qdeclarativegeomapgroupobject_p.h" -#include "qgeomapdata.h" +#include "qdeclarativegraphicsgeomap_p.h" +#include "qdeclarative3dgraphicsgeomap_p.h" +#include "qdeclarativegeomapitem_p.h" +//#include "qgeomapdata.h" #include <QDebug> #include <QDeclarativeParserStatus> @@ -54,7 +56,6 @@ QT_BEGIN_NAMESPACE QDeclarativeGeoMapObject::QDeclarativeGeoMapObject(QSGItem *parent) : QSGItem(parent), map_(0), - object_(0), visible_(true) { } @@ -144,13 +145,13 @@ void QDeclarativeGeoMapObject::moveEvent(QDeclarativeGeoMapMouseEvent *event) mouseAreas_.at(i)->moveEvent(event); } -void QDeclarativeGeoMapObject::setMapObject(QGeoMapObject *object) -{ - if (!object) - return; +//void QDeclarativeGeoMapObject::setMapObject(QGeoMapObject *object) +//{ +// if (!object) +// return; - object_ = object; - object_->setVisible(visible_); +// object_ = object; +// object_->setVisible(visible_); // TODO check QML2 impact /* @@ -162,12 +163,12 @@ void QDeclarativeGeoMapObject::setMapObject(QGeoMapObject *object) object_->setZValue(zValue()); */ -} +//} -QGeoMapObject* QDeclarativeGeoMapObject::mapObject() -{ - return object_; -} +//QGeoMapObject* QDeclarativeGeoMapObject::mapObject() +//{ +// return object_; +//} void QDeclarativeGeoMapObject::parentZChanged() { @@ -182,8 +183,8 @@ void QDeclarativeGeoMapObject::setVisible(bool visible) visible_ = visible; - if (object_) - object_->setVisible(visible); +// if (object_) +// object_->setVisible(visible); emit visibleChanged(visible_); } @@ -216,13 +217,18 @@ QDeclarativeGeoMapObjectView::QDeclarativeGeoMapObjectView(QSGItem *parent) QDeclarativeGeoMapObjectView::~QDeclarativeGeoMapObjectView() { + if (map_) + removeInstantiatedItems(); // Remove group from map, and items from the group. This is to // prevent their deletion. The objects are owned by the // declarative objects and are to be deleted by them. + // TODO the concept of group objects need to be analyzed - is it needed anymore? + /* if (map_ && map_->mapData_) { map_->mapData_->removeMapObject(&group_); removeInstantiatedItems(); } + */ } void QDeclarativeGeoMapObjectView::componentComplete() @@ -269,6 +275,21 @@ void QDeclarativeGeoMapObjectView::modelReset() void QDeclarativeGeoMapObjectView::modelRowsInserted(QModelIndex, int start, int end) { + if (!componentCompleted_ || !map_ || !delegate_ || !model_) { + QDeclarativeGeoMapItem* mapItem; + for (int i = start; i <= end; ++i) { + mapItem = createItem(i); + if (!mapItem) { + break; + } + mapItemList_.append(mapItem); + // TODO visibility factors need to be solved + //mapItem->setVisible(visible_); + map_->addMapItem(mapItem); + // TODO mouse areas are omitted atm + } + } + /* if (!componentCompleted_ || !map_ || !map_->mapData_ || !delegate_ || !model_) return; Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count()); @@ -286,10 +307,23 @@ void QDeclarativeGeoMapObjectView::modelRowsInserted(QModelIndex, int start, int map_->objectMap_.insert(mapObject->mapObject(), mapObject); } Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count()); + */ } void QDeclarativeGeoMapObjectView::modelRowsRemoved(QModelIndex, int start, int end) { + if (!componentCompleted_ || !map_ || !delegate_ || !model_) + return; + for (int i = end; i >= start; --i) { + QDeclarativeGeoMapItem *mapItem = mapItemList_.takeAt(i); + Q_ASSERT(mapItem); + if (!mapItem) // bad + break; + map_->removeMapItem(mapItem); + delete mapItem; + } + + /* if (!componentCompleted_ || !map_ || !map_->mapData_ || !delegate_ || !model_) return; Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count()); @@ -302,6 +336,7 @@ void QDeclarativeGeoMapObjectView::modelRowsRemoved(QModelIndex, int start, int delete object; } Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count()); + */ } QDeclarativeComponent* QDeclarativeGeoMapObjectView::delegate() const @@ -328,18 +363,31 @@ void QDeclarativeGeoMapObjectView::setDelegate(QDeclarativeComponent *delegate) emit delegateChanged(); } -void QDeclarativeGeoMapObjectView::setMapData(QDeclarativeGraphicsGeoMap* map) +//void QDeclarativeGeoMapObjectView::setMapData(QDeclarativeGraphicsGeoMap* map) +void QDeclarativeGeoMapObjectView::setMapData(QDeclarative3DGraphicsGeoMap* map) { + if (!map || map_) // changing map on the fly not supported + return; + map_ = map; + /* if (!map || !map->mapData_ || map_) // changing map on the fly not supported return; map_ = map; map_->mapData_->addMapObject(&group_); + */ } void QDeclarativeGeoMapObjectView::removeInstantiatedItems() { + if (!map_) + return; + for (int i = 0; i < mapItemList_.count(); ++ i) { + map_->removeMapItem(mapItemList_.at(i)); + } + mapItemList_.clear(); // Delete the declarative components we have instantiated. // They will also delete the actual qgeomapobjects + /* QList<QGeoMapObject*> mapObjects = group_.childObjects(); if (!mapObjects.isEmpty()) { for (int i = 0; i < mapObjects.size(); i++) { @@ -351,11 +399,34 @@ void QDeclarativeGeoMapObjectView::removeInstantiatedItems() } } declarativeObjectList_.clear(); + */ } // Removes and repopulates all items. void QDeclarativeGeoMapObjectView::repopulate() { + if (!componentCompleted_ || !map_ || !delegate_ || !model_) + return; + // Free any earlier instances + removeInstantiatedItems(); + + // Iterate model data and instantiate delegates. + // We could use more specialized landmark model calls here too, + // but hopefully the support will be leveraged to a general model + // level. + QDeclarativeGeoMapItem* mapItem; + for (int i = 0; i < model_->rowCount(); ++i) { + mapItem = createItem(i); + Q_ASSERT(mapItem); + if (!mapItem) // bad + break; + mapItemList_.append(mapItem); + // TODO what to do with visibility + //mapObject->setVisible(visible_); + map_->addMapItem(mapItem); + } + + /* if (!componentCompleted_ || !map_ || !map_->mapData_ || !delegate_ || !model_) return; // Free any earlier instances @@ -374,9 +445,14 @@ void QDeclarativeGeoMapObjectView::repopulate() // Needed in order for mouse areas to work. map_->recursiveAddToObjectMap(mapObject); } + */ } -QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow) +// Currently item creation is tightly bound to models providing +// QObject* as data. Some day this may be leveraged to any user defined +// model or e.g. XML model. +//QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow) +QDeclarativeGeoMapItem* QDeclarativeGeoMapObjectView::createItem(int modelRow) { if (!delegate_ || !model_) return NULL; @@ -413,7 +489,8 @@ QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow) delete itemContext; return 0; } - QDeclarativeGeoMapObject *declMapObj = qobject_cast<QDeclarativeGeoMapObject*>(obj); + QDeclarativeGeoMapItem *declMapObj = qobject_cast<QDeclarativeGeoMapItem*>(obj); + //QDeclarativeGeoMapObject *declMapObj = qobject_cast<QDeclarativeGeoMapObject*>(obj); if (!declMapObj) { qWarning() << "QDeclarativeGeoMapObject map object delegate is of unsupported type."; delete itemContext; @@ -433,6 +510,8 @@ QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow) void QDeclarativeGeoMapObjectView::setVisible(bool visible) { + // TODO visibility + /* if (visible_ == visible) return; visible_ = visible; @@ -444,6 +523,7 @@ void QDeclarativeGeoMapObjectView::setVisible(bool visible) } } emit visibleChanged(); + */ } bool QDeclarativeGeoMapObjectView::isVisible() const @@ -464,13 +544,16 @@ bool QDeclarativeGeoMapObjectView::isVisible() const void QDeclarativeGeoMapObjectView::setZValue(qreal zValue) { - group_.setZValue(zValue); - emit zChanged(); + // TODO z values + // group_.setZValue(zValue); + // emit zChanged(); } qreal QDeclarativeGeoMapObjectView::zValue() { - return group_.zValue(); + // TODO z values what to do + return 1.0; + //return group_.zValue(); } #include "moc_qdeclarativegeomapobject_p.cpp" diff --git a/src/imports/location/qdeclarativegeomapobject_p.h b/src/imports/location/qdeclarativegeomapobject_p.h index 415c29de..a0528e3d 100644 --- a/src/imports/location/qdeclarativegeomapobject_p.h +++ b/src/imports/location/qdeclarativegeomapobject_p.h @@ -42,19 +42,20 @@ #ifndef QDECLARATIVEGEOMAPOBJECT_H #define QDECLARATIVEGEOMAPOBJECT_H -#include "qgeomapobject.h" +//#include "qgeomapobject.h" #include "qdeclarativegeomapmouseevent_p.h" -#include "qgeomapgroupobject.h" +//#include "qgeomapgroupobject.h" #include "QModelIndex" #include <QtDeclarative/QSGItem> #include <QtCore/QPointer> -class QAbstractItemModel; - QT_BEGIN_NAMESPACE +class QAbstractItemModel; class QDeclarativeGraphicsGeoMap; +class QDeclarative3DGraphicsGeoMap; +class QDeclarativeGeoMapItem; class QDeclarativeGeoMapMouseArea; // !!! IMPORTANT !!! @@ -83,8 +84,8 @@ public: virtual void setMap(QDeclarativeGraphicsGeoMap *map); QDeclarativeGraphicsGeoMap* map() const; - void setMapObject(QGeoMapObject *object); - QGeoMapObject* mapObject(); +// void setMapObject(QGeoMapObject *object); +// QGeoMapObject* mapObject(); void setVisible(bool visible); bool isVisible() const; @@ -106,7 +107,7 @@ private Q_SLOTS: void parentZChanged(); private: - QPointer<QGeoMapObject> object_; + //QPointer<QGeoMapObject> object_; bool visible_; QList<QDeclarativeGeoMapMouseArea*> mouseAreas_; }; @@ -133,7 +134,8 @@ public: QDeclarativeComponent *delegate() const; void setDelegate(QDeclarativeComponent*); - void setMapData(QDeclarativeGraphicsGeoMap*); +// void setMapData(QDeclarativeGraphicsGeoMap*); + void setMapData(QDeclarative3DGraphicsGeoMap*); void repopulate(); void removeInstantiatedItems(); @@ -143,7 +145,7 @@ public: void setVisible(bool visible); bool isVisible() const; - QDeclarativeGeoMapObject* createItem(int modelRow); + QDeclarativeGeoMapItem* createItem(int modelRow); // From QDeclarativeParserStatus virtual void componentComplete(); void classBegin() {} @@ -165,9 +167,10 @@ private: QDeclarativeComponent *delegate_; QVariant modelVariant_; QAbstractItemModel* model_; - QDeclarativeGraphicsGeoMap *map_; - QGeoMapGroupObject group_; - QList<QDeclarativeGeoMapObject*> declarativeObjectList_; + QDeclarative3DGraphicsGeoMap *map_; + //QGeoMapGroupObject group_; + QList<QDeclarativeGeoMapItem*> mapItemList_; + //QList<QDeclarativeGeoMapObject*> declarativeObjectList_; }; QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarativegeomapobjectborder_p.h b/src/imports/location/qdeclarativegeomapobjectborder_p.h deleted file mode 100644 index d082082c..00000000 --- a/src/imports/location/qdeclarativegeomapobjectborder_p.h +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPOBJECTBORDER_H -#define QDECLARATIVEGEOMAPOBJECTBORDER_H - -#include "qmobilityglobal.h" -#include <QtDeclarative/qdeclarative.h> - -#include <QObject> -#include <QColor> - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapObjectBorder : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged) - -public: - QDeclarativeGeoMapObjectBorder(QObject *parent = 0); - ~QDeclarativeGeoMapObjectBorder(); - - QColor color() const; - void setColor(const QColor &color); - - int width() const; - void setWidth(int width); - -Q_SIGNALS: - void colorChanged(const QColor &color); - void widthChanged(int width); - -private: - QColor m_color; - int m_width; - Q_DISABLE_COPY(QDeclarativeGeoMapObjectBorder) -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapObjectBorder)); - -#endif diff --git a/src/imports/location/qdeclarativegeomappincharea.cpp b/src/imports/location/qdeclarativegeomappincharea.cpp new file mode 100644 index 00000000..f10356ee --- /dev/null +++ b/src/imports/location/qdeclarativegeomappincharea.cpp @@ -0,0 +1,506 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QApplication> +#include "qdeclarativegeomappincharea_p.h" +#include "qdeclarative3dgraphicsgeomap_p.h" +#include <QGraphicsSceneMouseEvent> +#include <QDebug> +#include "math.h" +#include "map.h" + +QT_BEGIN_NAMESPACE + +QDeclarativeGeoMapPinchArea::QDeclarativeGeoMapPinchArea(QDeclarative3DGraphicsGeoMap* map, QObject *parent) + : QObject(parent), + map_(map), + enabled_(true), + active_(false), + minimumZoomLevel_(1.0), + maximumZoomLevel_(1.0), + minimumRotation_(0.0), + maximumRotation_(0.0), + inPinch_(false), + pinchRejected_(false), + pinchActivated_(false), + pinchStartDist_(0), + pinchStartZoomLevel_(0.0), + pinchLastZoomLevel_(0.0), + pinchStartRotation_(0.0), + pinchStartAngle_(0.0), + pinchLastAngle_(0.0), + pinchRotation_(0.0), + id1_(-1), + maximumZoomLevelChange_(2.0), + activeGestures_(ZoomGesture | RotationGesture), + minimumTilt_(0.0), + maximumTilt_(90.0), + maximumTiltChange_(10.0), + pinchLastTilt_(0.0), + pinchStartTilt_(0.0) +{ + // this can be set as 'target' property should the need be to distinguish this element into MapPinchArea: + Q_ASSERT(map_); +} + +QDeclarativeGeoMapPinchArea::~QDeclarativeGeoMapPinchArea() +{ +} + +QDeclarativeGeoMapPinchArea::ActiveGestures QDeclarativeGeoMapPinchArea::activeGestures() const +{ + return activeGestures_; +} + +void QDeclarativeGeoMapPinchArea::setActiveGestures(ActiveGestures activeGestures) +{ + qDebug() << metaObject()->className() << __FUNCTION__ << activeGestures; + if (activeGestures == activeGestures_) + return; + activeGestures_ = activeGestures; + emit activeGesturesChanged(); +} + +bool QDeclarativeGeoMapPinchArea::active() const +{ + return active_; +} + +void QDeclarativeGeoMapPinchArea::setActive(bool active) +{ + if (active == active_) + return; + active = active_; + emit activeChanged(); +} + +bool QDeclarativeGeoMapPinchArea::enabled() const +{ + return enabled_; +} + +void QDeclarativeGeoMapPinchArea::setEnabled(bool enabled) +{ + if (enabled == enabled_) + return; + enabled = enabled_; + emit enabledChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::minimumZoomLevel() const +{ + return minimumZoomLevel_; +} + +void QDeclarativeGeoMapPinchArea::setMinimumZoomLevel(qreal zoomLevel) +{ + if (zoomLevel < map_->minimumZoomLevel()) + zoomLevel = map_->minimumZoomLevel(); + if (zoomLevel == minimumZoomLevel_) + return; + minimumZoomLevel_ = zoomLevel; + emit minimumZoomLevelChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::maximumZoomLevel() const +{ + return maximumZoomLevel_; +} + +void QDeclarativeGeoMapPinchArea::setMaximumZoomLevel(qreal zoomLevel) +{ + if (zoomLevel > map_->maximumZoomLevel()) + zoomLevel = map_->maximumZoomLevel(); + if (zoomLevel == maximumZoomLevel_) + return; + maximumZoomLevel_ = zoomLevel; + emit maximumZoomLevelChanged(); +} + + +qreal QDeclarativeGeoMapPinchArea::maximumZoomLevelChange() const +{ + return maximumZoomLevelChange_; +} + +void QDeclarativeGeoMapPinchArea::setMaximumZoomLevelChange(qreal maxChange) +{ + if (maxChange == maximumZoomLevelChange_ || maxChange < 0.1) + return; + maximumZoomLevelChange_ = maxChange; + emit maximumZoomLevelChangeChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::minimumRotation() const +{ + return minimumRotation_; +} + +void QDeclarativeGeoMapPinchArea::setMinimumRotation(qreal rotation) +{ + if (rotation == minimumRotation_ || rotation < 0.1) + return; + minimumRotation_ = rotation; + emit minimumRotationChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::maximumRotation() const +{ + return maximumRotation_; +} + +void QDeclarativeGeoMapPinchArea::setMaximumRotation(qreal rotation) +{ + if (rotation == maximumRotation_ || rotation > 360) + return; + maximumRotation_ = rotation; + emit maximumRotationChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::rotationSpeed() const +{ + return rotationSpeed_; +} + +void QDeclarativeGeoMapPinchArea::setRotationSpeed(qreal speed) +{ + if (rotationSpeed_ == speed || speed < 0.1) + return; + rotationSpeed_ = speed; + emit rotationSpeedChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::maximumTilt() const +{ + return maximumTilt_; +} + +void QDeclarativeGeoMapPinchArea::setMaximumTilt(qreal tilt) +{ + if (maximumTilt_ == tilt) + return; + maximumTilt_ = tilt; + emit maximumTiltChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::minimumTilt() const +{ + return minimumTilt_; +} + +void QDeclarativeGeoMapPinchArea::setMinimumTilt(qreal tilt) +{ + if (minimumTilt_ == tilt || tilt < 0.1) + return; + minimumTilt_ = tilt; + emit minimumTiltChanged(); +} + +qreal QDeclarativeGeoMapPinchArea::maximumTiltChange() const +{ + return maximumTiltChange_; +} + +void QDeclarativeGeoMapPinchArea::setMaximumTiltChange(qreal tilt) +{ + if (maximumTiltChange_ == tilt || tilt < 0.1) + return; + maximumTiltChange_ = tilt; + emit maximumTiltChangeChanged(); +} + +void QDeclarativeGeoMapPinchArea::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + Q_UNUSED(event); // TODO may not be needed at all + if (!enabled_) + return; +} + +void QDeclarativeGeoMapPinchArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + Q_UNUSED(event); // TODO may not be needed at all + if (!enabled_) + return; +} + +void QDeclarativeGeoMapPinchArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + Q_UNUSED(event); // TODO may not be needed at all + if (!enabled_) + return; +} + +void QDeclarativeGeoMapPinchArea::touchEvent(QTouchEvent *event) +{ + // Keep processing if gesture(s) are in progress. Otherwise we might + // end up in lock. + if ((!enabled_ || (activeGestures_ == NoGesture)) && !active()) + return; + switch (event->type()) { + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + touchPoints_.clear(); + for (int i = 0; i < event->touchPoints().count(); ++i) { + if (!(event->touchPoints().at(i).state() & Qt::TouchPointReleased)) { + touchPoints_ << event->touchPoints().at(i); + } + } + updatePinch(); + break; + case QEvent::TouchEnd: + touchPoints_.clear(); + updatePinch(); + break; + default: + // no-op + break; + } +} + +void QDeclarativeGeoMapPinchArea::updatePinch() +{ + if (touchPoints_.count() == 0) { + if (inPinch_) { + inPinch_ = false; + QPointF pinchCenter = map_->mapFromScene(sceneLastCenter_); + QDeclarativeGeoMapPinchEvent pe(pinchCenter, pinchLastZoomLevel_, pinchLastAngle_, pinchRotation_); + pe.setStartCenter(pinchStartCenter_); + pe.setPreviousCenter(pinchCenter); + pe.setPreviousAngle(pinchLastAngle_); + pe.setPreviousZoomLevel(pinchLastZoomLevel_); + pe.setStartPoint1(map_->mapFromScene(sceneStartPoint1_)); + pe.setStartPoint2(map_->mapFromScene(sceneStartPoint2_)); + pe.setPoint1(map_->mapFromScene(lastPoint1_)); + pe.setPoint2(map_->mapFromScene(lastPoint2_)); + emit pinchFinished(&pe); + pinchStartDist_ = 0; + pinchActivated_ = false; + setActive(false); + } + return; + } + QTouchEvent::TouchPoint touchPoint1 = touchPoints_.at(0); + QTouchEvent::TouchPoint touchPoint2 = touchPoints_.at(touchPoints_.count() >= 2 ? 1 : 0); + if (touchPoints_.count() == 2 + && (touchPoint1.state() & Qt::TouchPointPressed || touchPoint2.state() & Qt::TouchPointPressed)) { + id1_ = touchPoint1.id(); + sceneStartPoint1_ = touchPoint1.scenePos(); + sceneStartPoint2_ = touchPoint2.scenePos(); + inPinch_ = false; + pinchRejected_ = false; + pinchActivated_ = true; + } else if (pinchActivated_ && !pinchRejected_){ + const int dragThreshold = QApplication::startDragDistance(); + QPointF p1 = touchPoint1.scenePos(); + QPointF p2 = touchPoint2.scenePos(); + qreal dx = p1.x() - p2.x(); + qreal dy = p1.y() - p2.y(); + qreal dist = sqrt(dx*dx + dy*dy); + QPointF sceneCenter = (p1 + p2)/2; + qreal angle = QLineF(p1, p2).angle(); + qDebug() << "angle between point1, point2, s: " << p1 << p2 << angle; + if (touchPoints_.count() == 1) { + // If we only have one point then just move the center. TODO do we need this anymore. + if (id1_ == touchPoint1.id()) + sceneCenter = sceneLastCenter_ + touchPoint1.scenePos() - lastPoint1_; + else + sceneCenter = sceneLastCenter_ + touchPoint2.scenePos() - lastPoint2_; + angle = pinchLastAngle_; + } + id1_ = touchPoint1.id(); + if (angle > 180) + angle -= 360; + if (!inPinch_) { + if (touchPoints_.count() >= 2 + && (qAbs(p1.x()-sceneStartPoint1_.x()) > dragThreshold + || qAbs(p1.y()-sceneStartPoint1_.y()) > dragThreshold + || qAbs(p2.x()-sceneStartPoint2_.x()) > dragThreshold + || qAbs(p2.y()-sceneStartPoint2_.y()) > dragThreshold)) { + sceneStartCenter_ = sceneCenter; + sceneLastCenter_ = sceneCenter; + pinchStartCenter_ = map_->mapFromScene(sceneCenter); + pinchStartDist_ = dist; + pinchStartAngle_ = angle; + pinchLastZoomLevel_ = 1.0; + pinchLastTilt_ = 0.0; + pinchLastAngle_ = angle; + pinchRotation_ = 0.0; + lastPoint1_ = p1; + lastPoint2_ = p2; + + QDeclarativeGeoMapPinchEvent pe(pinchStartCenter_, 1.0, angle, 0.0); + pe.setStartCenter(pinchStartCenter_); + pe.setPreviousCenter(pinchStartCenter_); + pe.setPreviousAngle(pinchLastAngle_); + pe.setPreviousZoomLevel(pinchLastZoomLevel_); + pe.setStartPoint1(map_->mapFromScene(sceneStartPoint1_)); + pe.setStartPoint2(map_->mapFromScene(sceneStartPoint2_)); + pe.setPoint1(map_->mapFromScene(lastPoint1_)); + pe.setPoint2(map_->mapFromScene(lastPoint2_)); + pe.setPointCount(touchPoints_.count()); + emit pinchStarted(&pe); + if (pe.accepted()) { + inPinch_ = true; + // TODO is this pos needed. Analyze. + pinchStartPos_ = map_->pos(); + pinchStartZoomLevel_ = map_->cameraData().zoomFactor(); + pinchStartRotation_ = map_->cameraData().bearing(); + pinchStartTilt_ = map_->cameraData().tilt(); + qDebug() << "set starting tilt to : " << pinchStartTilt_; + setActive(true); + } else { + pinchRejected_ = true; + } + } + } else if (pinchStartDist_ > 0) { // TODO restructure this codeblock according to activeGestures_ + // Calculate the new zoom level if we have distance ( >= 2 touchpoints), otherwise stick with old. + qreal newZoomLevel = pinchLastZoomLevel_; + if (dist) { + newZoomLevel = + // How much further/closer the current touchpoints are (in pixels) compared to pinch start + ((dist - pinchStartDist_) * + // How much one pixel corresponds in units of zoomlevel (and multiply by above delta) + (maximumZoomLevelChange_ / ((map_->width() + map_->height()) / 2))) + + // Add to starting zoom level. Sign of (dist-pinchstartdist) takes care of zoom in / out + pinchStartZoomLevel_; + } + qreal da = pinchLastAngle_ - angle; + if (da > 180) + da -= 360; + else if (da < -180) + da += 360; + qDebug() << "pinch rotaiton will be update from, to, da is: " << pinchRotation_ << da - pinchRotation_ << da; + pinchRotation_ -= da; + // TODO check how this impacts is this needed + QPointF pinchCenter = map_->mapFromScene(sceneCenter); + QDeclarativeGeoMapPinchEvent pe(pinchCenter, newZoomLevel, angle, pinchRotation_); + // TODO these events need to accommodate tilt. + pe.setStartCenter(pinchStartCenter_); + pe.setPreviousCenter(map_->mapFromScene(sceneLastCenter_)); + pe.setPreviousAngle(pinchLastAngle_); + pe.setPreviousZoomLevel(pinchLastZoomLevel_); + pe.setStartPoint1(map_->mapFromScene(sceneStartPoint1_)); + pe.setStartPoint2(map_->mapFromScene(sceneStartPoint2_)); + pe.setPoint1(touchPoint1.pos()); + pe.setPoint2(touchPoint2.pos()); + pe.setPointCount(touchPoints_.count()); + + sceneLastCenter_ = sceneCenter; + pinchLastAngle_ = angle; + lastPoint1_ = touchPoint1.scenePos(); + lastPoint2_ = touchPoint2.scenePos(); + emit pinchUpdated(&pe); + + if (activeGestures_ & ZoomGesture) { + // Take maximum and minimumzoomlevel into account + qreal perPinchMinimumZoomLevel = qMax(pinchStartZoomLevel_ - maximumZoomLevelChange_, minimumZoomLevel_); + qreal perPinchMaximumZoomLevel = qMin(pinchStartZoomLevel_ + maximumZoomLevelChange_, maximumZoomLevel_); + newZoomLevel = qMin(qMax(perPinchMinimumZoomLevel, newZoomLevel), perPinchMaximumZoomLevel); + pinchLastZoomLevel_ = newZoomLevel; + CameraData cam = map_->map()->cameraData(); + cam.setZoomFactor(newZoomLevel); + map_->map()->setCameraData(cam); + } + if (activeGestures_ & TiltGesture) { + // TODO zzz + qreal newTilt = pinchLastTilt_; + if (dist) { + newTilt = + // How much further/closer the current touchpoints are (in pixels) compared to pinch start + ((dist - pinchStartDist_) * + // How much one pixel corresponds in units of tilt degrees (and multiply by above delta) + (maximumTiltChange_ / ((map_->width() + map_->height()) / 2))) + + // Add to starting tilt. + pinchStartTilt_; + } + qreal perPinchMinimumTilt = qMax(pinchStartTilt_ - maximumTiltChange_, minimumTilt_); + qreal perPinchMaximumTilt = qMin(pinchStartTilt_ + maximumTiltChange_, maximumTilt_); + newTilt = qMin(qMax(perPinchMinimumTilt, newTilt), perPinchMaximumTilt); + pinchLastTilt_ = newTilt; + + qDebug() << "tilting pinchStartTilt, pinchLastTilt, resulting newTilt: " << pinchStartTilt_ << pinchLastTilt_ << newTilt; + CameraData cam = map_->map()->cameraData(); + cam.setTilt(newTilt); + map_->map()->setCameraData(cam); + } + + //QPointF pos = sceneCenter - sceneStartCenter_ + pinchStartPos_; + // TODO we probably don't want drag - leave that to flickable + //if (pinch()->axis() & QSGPinch::XAxis) { + // qreal x = pos.x(); + // if (x < pinch()->xmin()) + // x = pinch()->xmin(); + // else if (x > pinch()->xmax()) + // x = pinch()->xmax(); + // pinch()->target()->setX(x); + //} + //if (pinch()->axis() & QSGPinch::YAxis) { + // qreal y = pos.y(); + // if (y < pinch()->ymin()) + // y = pinch()->ymin(); + // else if (y > pinch()->ymax()) + // y = pinch()->ymax(); + // pinch()->target()->setY(y); + //} + if (activeGestures_ & RotationGesture) { + bool unlimitedRotation = (minimumRotation_ == 0.0 && maximumRotation_ == 0.0); + if ((pinchStartRotation_ >= minimumRotation_ && pinchStartRotation_ <= maximumRotation_) || unlimitedRotation) { + qreal r = pinchRotation_ * rotationSpeed_ + pinchStartRotation_; + if (!unlimitedRotation) + r = qMin(qMax(minimumRotation_,r), maximumRotation_); + if (r > 360.0) + r -= 360; + if (r < -360.0) + r += 360.0; + CameraData cam = map_->map()->cameraData(); + cam.setBearing(r); + map_->map()->setCameraData(cam); + } + } + // } + } + } +} + + +#include "moc_qdeclarativegeomappincharea_p.cpp" + +QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarativegeomappincharea_p.h b/src/imports/location/qdeclarativegeomappincharea_p.h new file mode 100644 index 00000000..fcd3236d --- /dev/null +++ b/src/imports/location/qdeclarativegeomappincharea_p.h @@ -0,0 +1,267 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEGEOMAPPINCHAREA_H +#define QDECLARATIVEGEOMAPPINCHAREA_H + +#include <QtDeclarative/qdeclarative.h> +#include <QTouchEvent> +#include <QObject> +#include <QDebug> + +class QGraphicsSceneMouseEvent; +class QDeclarative3DGraphicsGeoMap; +class QTouchEvent; +class Map; + +QT_BEGIN_NAMESPACE + + +class QDeclarativeGeoMapPinchEvent : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QPointF center READ center) // TODO this probably needs to reset every time + Q_PROPERTY(QPointF startCenter READ startCenter) + Q_PROPERTY(QPointF previousCenter READ previousCenter) + Q_PROPERTY(qreal zoomLevel READ zoomLevel) + Q_PROPERTY(qreal previousZoomLevel READ previousZoomLevel) + Q_PROPERTY(qreal angle READ angle) + Q_PROPERTY(qreal previousAngle READ previousAngle) + Q_PROPERTY(qreal rotation READ rotation) + Q_PROPERTY(QPointF point1 READ point1) + Q_PROPERTY(QPointF startPoint1 READ startPoint1) + Q_PROPERTY(QPointF point2 READ point2) + Q_PROPERTY(QPointF startPoint2 READ startPoint2) + Q_PROPERTY(int pointCount READ pointCount) + Q_PROPERTY(bool accepted READ accepted WRITE setAccepted) + +public: + QDeclarativeGeoMapPinchEvent(QPointF c, qreal s, qreal a, qreal r) + : QObject(), center_(c), zoomLevel_(s), angle_(a), rotation_(r) + , pointCount_(0), accepted_(true) {} + QPointF center() const { return center_; } + QPointF startCenter() const { return startCenter_; } + void setStartCenter(QPointF c) { startCenter_ = c; } + QPointF previousCenter() const { return lastCenter_; } + void setPreviousCenter(QPointF c) { lastCenter_ = c; } + qreal zoomLevel() const { return zoomLevel_; } + qreal previousZoomLevel() const { return lastZoomLevel_; } + void setPreviousZoomLevel(qreal s) { lastZoomLevel_ = s; } + qreal angle() const { return angle_; } + qreal previousAngle() const { return lastAngle_; } + void setPreviousAngle(qreal a) { lastAngle_ = a; } + qreal rotation() const { return rotation_; } + QPointF point1() const { return point1_; } + void setPoint1(QPointF p) { point1_ = p; } + QPointF startPoint1() const { return startPoint1_; } + void setStartPoint1(QPointF p) { startPoint1_ = p; } + QPointF point2() const { return point2_; } + void setPoint2(QPointF p) { point2_ = p; } + QPointF startPoint2() const { return startPoint2_; } + void setStartPoint2(QPointF p) { startPoint2_ = p; } + int pointCount() const { return pointCount_; } + void setPointCount(int count) { pointCount_ = count; } + bool accepted() const { return accepted_; } + void setAccepted(bool a) { accepted_ = a; } + +private: + QPointF center_; + QPointF startCenter_; + QPointF lastCenter_; + qreal zoomLevel_; + qreal lastZoomLevel_; + qreal angle_; + qreal lastAngle_; + qreal rotation_; + QPointF point1_; + QPointF point2_; + QPointF startPoint1_; + QPointF startPoint2_; + int pointCount_; + bool accepted_; +}; + +class QDeclarativeGeoMapPinchArea: public QObject +{ + Q_OBJECT + Q_ENUMS(ActiveGesture) + Q_FLAGS(ActiveGestures) + + Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) + Q_PROPERTY(bool active READ active NOTIFY activeChanged) + Q_PROPERTY(ActiveGestures activeGestures READ activeGestures WRITE setActiveGestures NOTIFY activeGesturesChanged) + Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged) + Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel WRITE setMaximumZoomLevel NOTIFY maximumZoomLevelChanged) + Q_PROPERTY(qreal maximumZoomLevelChange READ maximumZoomLevelChange WRITE setMaximumZoomLevelChange NOTIFY maximumZoomLevelChangeChanged) + Q_PROPERTY(qreal minimumRotation READ minimumRotation WRITE setMinimumRotation NOTIFY minimumRotationChanged) + Q_PROPERTY(qreal maximumRotation READ maximumRotation WRITE setMaximumRotation NOTIFY maximumRotationChanged) + Q_PROPERTY(qreal rotationSpeed READ rotationSpeed WRITE setRotationSpeed NOTIFY rotationSpeedChanged) + Q_PROPERTY(qreal maximumTilt READ maximumTilt WRITE setMaximumTilt NOTIFY maximumTiltChanged) + Q_PROPERTY(qreal minimumTilt READ minimumTilt WRITE setMinimumTilt NOTIFY minimumTiltChanged) + Q_PROPERTY(qreal maximumTiltChange READ maximumTiltChange WRITE setMaximumTiltChange NOTIFY maximumTiltChangeChanged) + +public: + QDeclarativeGeoMapPinchArea(QDeclarative3DGraphicsGeoMap* map, QObject *parent = 0); + ~QDeclarativeGeoMapPinchArea(); + + enum ActiveGesture { + NoGesture = 0x0000, + ZoomGesture = 0x0001, + RotationGesture = 0x0002, + TiltGesture = 0x0004 + }; + Q_DECLARE_FLAGS(ActiveGestures, ActiveGesture); + + ActiveGestures activeGestures() const; + void setActiveGestures(ActiveGestures activeGestures); + + bool active() const; + void setActive(bool active); + + bool enabled() const; + void setEnabled(bool enabled); + + qreal minimumZoomLevel() const; + void setMinimumZoomLevel(qreal zoomLevel); + + qreal maximumZoomLevel() const; + void setMaximumZoomLevel(qreal zoomLevel); + + qreal maximumZoomLevelChange() const; + void setMaximumZoomLevelChange(qreal maxChange); + + qreal minimumRotation() const; + void setMinimumRotation(qreal zoomLevel); + + qreal maximumRotation() const; + void setMaximumRotation(qreal zoomLevel); + + qreal rotationSpeed() const; + void setRotationSpeed(qreal speed); + + qreal maximumTilt() const; + void setMaximumTilt(qreal tilt); + + qreal minimumTilt() const; + void setMinimumTilt(qreal tilt); + + qreal maximumTiltChange() const; + void setMaximumTiltChange(qreal tilt); + + // TODO likely we only need touchEvent, not mouseEvents. + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + void touchEvent(QTouchEvent *event); + +signals: + void activeChanged(); + void enabledChanged(); + void minimumZoomLevelChanged(); + void maximumZoomLevelChanged(); + void maximumZoomLevelChangeChanged(); + void minimumRotationChanged(); + void maximumRotationChanged(); + void rotationSpeedChanged(); + void activeGesturesChanged(); + void minimumTiltChanged(); + void maximumTiltChanged(); + void maximumTiltChangeChanged(); + + void pinchStarted(QDeclarativeGeoMapPinchEvent* pinch); + void pinchUpdated(QDeclarativeGeoMapPinchEvent* pinch); + void pinchFinished(QDeclarativeGeoMapPinchEvent* pinch); + +private: + void updatePinch(); + +private: + // pinch target (fixed for now) + QDeclarative3DGraphicsGeoMap* map_; + + // own + bool enabled_; + + // qsgpinch + bool active_; + qreal minimumZoomLevel_; + qreal maximumZoomLevel_; + qreal minimumRotation_; + qreal maximumRotation_; + + // qsgpincharea + QList<QTouchEvent::TouchPoint> touchPoints_; + bool inPinch_; + bool pinchRejected_; + bool pinchActivated_; + //QSGPinch *pinch_; + QPointF sceneStartPoint1_; + QPointF sceneStartPoint2_; + QPointF lastPoint1_; + QPointF lastPoint2_; + qreal pinchStartDist_; + qreal pinchStartZoomLevel_; + qreal pinchLastZoomLevel_; + qreal pinchStartRotation_; + qreal pinchStartAngle_; + qreal pinchLastAngle_; + qreal pinchRotation_; + QPointF sceneStartCenter_; + QPointF pinchStartCenter_; + QPointF sceneLastCenter_; + QPointF pinchStartPos_; + int id1_; + qreal maximumZoomLevelChange_; + qreal rotationSpeed_; + ActiveGestures activeGestures_; + qreal minimumTilt_; + qreal maximumTilt_; + qreal maximumTiltChange_; + + qreal pinchLastTilt_; + qreal pinchStartTilt_; +}; + +QT_END_NAMESPACE +QML_DECLARE_TYPE(QDeclarativeGeoMapPinchArea); + +#endif diff --git a/src/imports/location/qdeclarativegeomappixmapobject.cpp b/src/imports/location/qdeclarativegeomappixmapobject.cpp deleted file mode 100644 index f0e87465..00000000 --- a/src/imports/location/qdeclarativegeomappixmapobject.cpp +++ /dev/null @@ -1,359 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomappixmapobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -#include <QBrush> -#include <QUrl> -#include <QFile> -#include <QIODevice> -#include <QImage> -#include <QImageReader> - -#include <QtDeclarative/qdeclarativeengine.h> -#include <QtDeclarative/qdeclarativecontext.h> - -#include <QDebug> - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapImage - - \brief The MapImage element displays an image on a map. - \inherits QGeoMapPixmapObject - - \ingroup qml-location-maps - - The image loaded from \l source will be drawn \l offset.x and - \l offset.y pixels away from the on-screen position of \l coordinate. - - If \l source does not point to an image or \l coordinate is - invalid nothing will be displayed. - - The status of the image loading can be monitored via \l status. - - The MapImage element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapPixmapObject::QDeclarativeGeoMapPixmapObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), - pixmap_(0), - reply_(0), - status_(QDeclarativeGeoMapPixmapObject::Null) -{ - pixmap_ = new QGeoMapPixmapObject(); - setMapObject(pixmap_); - - connect(pixmap_, - SIGNAL(offsetChanged(QPoint)), - this, - SIGNAL(offsetChanged(QPoint))); -} - -QDeclarativeGeoMapPixmapObject::~QDeclarativeGeoMapPixmapObject() -{ - // Memory management is bit tricky because we do not know - // which will be deleted first, the Map or some/all of the - // MapObjects. Hence we need to make sure that the internal - // c++ map objects are removed from QGeoMapData in either place - // (but not both). - if (map_) - map_->removeMapObject(this); - delete pixmap_; -} - -/*! - \qmlproperty Coordinate MapImage::coordinate - - This property holds the coordinate at which to anchor the image. -*/ - -void QDeclarativeGeoMapPixmapObject::setCoordinate(QDeclarativeCoordinate *coordinate) -{ - if (!coordinate || coordinate == coordinate_) - return; - coordinate_ = coordinate; - - connect(coordinate_, - SIGNAL(latitudeChanged(double)), - this, - SLOT(coordinateLatitudeChanged(double))); - connect(coordinate_, - SIGNAL(longitudeChanged(double)), - this, - SLOT(coordinateLongitudeChanged(double))); - connect(coordinate_, - SIGNAL(altitudeChanged(double)), - this, - SLOT(coordinateAltitudeChanged(double))); - - pixmap_->setCoordinate(coordinate->coordinate()); - emit coordinateChanged(coordinate_); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapPixmapObject::coordinate() -{ - return coordinate_; -} - -void QDeclarativeGeoMapPixmapObject::coordinateLatitudeChanged(double /*latitude*/) -{ - pixmap_->setCoordinate(coordinate_->coordinate()); -} - -void QDeclarativeGeoMapPixmapObject::coordinateLongitudeChanged(double /*longitude*/) -{ - pixmap_->setCoordinate(coordinate_->coordinate()); -} - -void QDeclarativeGeoMapPixmapObject::coordinateAltitudeChanged(double /*altitude*/) -{ - pixmap_->setCoordinate(coordinate_->coordinate()); -} - -/*! - \qmlproperty int MapImage::offset.x - \qmlproperty int MapImage::offset.y - - These properties hold the offset from the on-screen position of - \l coordinate at which the image should be displayed. - - They both default to 0. -*/ - -QPoint QDeclarativeGeoMapPixmapObject::offset() const -{ - return pixmap_->offset(); -} - -void QDeclarativeGeoMapPixmapObject::setOffset(const QPoint &offset) -{ - pixmap_->setOffset(offset); -} - -/*! - \qmlproperty url MapImage::source - - This property holds the URL describing the location of the image to - display. - - The URL can be absolute or relative to where the QML file - was loaded from, and can be a local file, a file embedded within - a Qt Resource bundle, or a file retrieved from the network. -*/ - -void QDeclarativeGeoMapPixmapObject::setSource(const QUrl &source) -{ - if (source_ == source) - return; - - source_ = source; - - load(); - - emit sourceChanged(source); -} - -QUrl QDeclarativeGeoMapPixmapObject::source() const -{ - return source_; -} - -/*! - \qmlproperty enumeration MapImage::status - - This property holds the status of image loading. It can be one of: - \list - \o MapImage.Null - no image has been set - \o MapImage.Ready - the image has been loaded - \o MapImage.Loading - the image is currently being loaded - \o MapImage.Error - an error occurred while loading the image - \endlist -*/ - -QDeclarativeGeoMapPixmapObject::Status QDeclarativeGeoMapPixmapObject::status() const -{ - return status_; -} - - -void QDeclarativeGeoMapPixmapObject::setStatus(const QDeclarativeGeoMapPixmapObject::Status status) -{ - if (status_ == status) - return; - - status_ = status; - - emit statusChanged(status_); -} - -void QDeclarativeGeoMapPixmapObject::load() -{ - // need to deal with absolute / relative local / remote files - - QUrl url = QDeclarativeEngine::contextForObject(this)->resolvedUrl(source_); - - QString path; - - if (url.scheme().compare(QLatin1String("qrc"), Qt::CaseInsensitive) == 0) { - if (url.authority().isEmpty()) - path = QLatin1Char(':') + url.path(); - } else if (url.scheme().compare(QLatin1String("file"), Qt::CaseInsensitive) == 0) { - path = url.toLocalFile(); - } - - if (!path.isEmpty()) { - QFile f(path); - if (f.open(QIODevice::ReadOnly)) { - QImage image; - QImageReader imageReader(&f); - if (imageReader.read(&image)) { - pixmap_->setPixmap(QPixmap::fromImage(image)); - setStatus(QDeclarativeGeoMapPixmapObject::Ready); - } else { - pixmap_->setPixmap(QPixmap()); - setStatus(QDeclarativeGeoMapPixmapObject::Error); - //qWarning() << "image read fail"; - } - } else { - pixmap_->setPixmap(QPixmap()); - setStatus(QDeclarativeGeoMapPixmapObject::Error); - //qWarning() << "file open fail"; - } - } else { - if (reply_) { - reply_->abort(); - reply_->deleteLater(); - reply_ = 0; - } - - QDeclarativeEngine *engine = QDeclarativeEngine::contextForObject(this)->engine(); - if (engine) { - QNetworkAccessManager *nam = engine->networkAccessManager(); - reply_ = nam->get(QNetworkRequest(url)); - - if (reply_->isFinished()) { - if (reply_->error() == QNetworkReply::NoError) { - finished(); - } else { - error(reply_->error()); - } - delete reply_; - reply_ = 0; - return; - } - - setStatus(QDeclarativeGeoMapPixmapObject::Loading); - - connect(reply_, - SIGNAL(finished()), - this, - SLOT(finished())); - connect(reply_, - SIGNAL(error(QNetworkReply::NetworkError)), - this, - SLOT(error(QNetworkReply::NetworkError))); - - } else { - pixmap_->setPixmap(QPixmap()); - setStatus(QDeclarativeGeoMapPixmapObject::Error); - //qWarning() << "null engine fail"; - } - } -} - -void QDeclarativeGeoMapPixmapObject::finished() -{ - if (reply_->error() != QNetworkReply::NoError) { - reply_->deleteLater(); - reply_ = 0; - return; - } - - QImage image; - QImageReader imageReader(reply_); - if (imageReader.read(&image)) { - pixmap_->setPixmap(QPixmap::fromImage(image)); - setStatus(QDeclarativeGeoMapPixmapObject::Ready); - } else { - pixmap_->setPixmap(QPixmap()); - setStatus(QDeclarativeGeoMapPixmapObject::Error); - //qWarning() << "image read fail"; - } - - reply_->deleteLater(); - reply_ = 0; -} - -void QDeclarativeGeoMapPixmapObject::error(QNetworkReply::NetworkError error) -{ - Q_UNUSED(error) - reply_->deleteLater(); - reply_ = 0; - - pixmap_->setPixmap(QPixmap()); - setStatus(QDeclarativeGeoMapPixmapObject::Error); - //qWarning() << "network error fail"; -} - -/*! - \qmlproperty int MapImage::z - - This property holds the z-value of the image. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. -*/ - -/*! - \qmlproperty bool MapImage::visible - - This property holds a boolean corresponding to whether or not the - image is visible. -*/ - -#include "moc_qdeclarativegeomappixmapobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomappixmapobject_p.h b/src/imports/location/qdeclarativegeomappixmapobject_p.h deleted file mode 100644 index 82f9a7e4..00000000 --- a/src/imports/location/qdeclarativegeomappixmapobject_p.h +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPPIXMAPOBJECT_H -#define QDECLARATIVEGEOMAPPIXMAPOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qgeomappixmapobject.h" - -#include <QColor> -#include <QUrl> -#include <QNetworkReply> - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapPixmapObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - Q_ENUMS(Status) - - Q_PROPERTY(QDeclarativeCoordinate* coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) - Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged) - Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged) - Q_PROPERTY(Status status READ status NOTIFY statusChanged) - -public: - enum Status { - Null, - Ready, - Loading, - Error - }; - - QDeclarativeGeoMapPixmapObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapPixmapObject(); - - QDeclarativeCoordinate* coordinate(); - void setCoordinate(QDeclarativeCoordinate *coordinate); - - QUrl source() const; - void setSource(const QUrl &source); - - QPoint offset() const; - void setOffset(const QPoint &offset); - - Status status() const; - -Q_SIGNALS: - void coordinateChanged(const QDeclarativeCoordinate *coordinate); - void sourceChanged(const QUrl &source); - void offsetChanged(const QPoint &offset); - void statusChanged(QDeclarativeGeoMapPixmapObject::Status status); - -private Q_SLOTS: - void coordinateLatitudeChanged(double latitude); - void coordinateLongitudeChanged(double longitude); - void coordinateAltitudeChanged(double altitude); - void finished(); - void error(QNetworkReply::NetworkError error); - -private: - void setStatus(const QDeclarativeGeoMapPixmapObject::Status status); - void load(); - - QPointer<QGeoMapPixmapObject> pixmap_; - QDeclarativeCoordinate *coordinate_; - QUrl source_; - QNetworkReply *reply_; - Status status_; - - Q_DISABLE_COPY(QDeclarativeGeoMapPixmapObject) -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapPixmapObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomappolygonobject.cpp b/src/imports/location/qdeclarativegeomappolygonobject.cpp deleted file mode 100644 index d0789c01..00000000 --- a/src/imports/location/qdeclarativegeomappolygonobject.cpp +++ /dev/null @@ -1,337 +0,0 @@ - -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomappolygonobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -#include <QColor> -#include <QBrush> - -#include <QtDeclarative/qdeclarativeinfo.h> - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapPolygon - - \brief The MapPolygon element displays a polygon on a map. - \inherits QGeoMapPolygonObject - - \ingroup qml-location-maps - - The polygon is specified in terms of an ordered list of - coordinates. Any invalid coordinates in the list will be ignored. - - If the list contains less than 3 valid coordinates the polygon - will not be displayed. - - Simplistic example to illustrate, this element could be defined in Map body: - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic MapPolygon - - The MapPolygon element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapPolygonObject::QDeclarativeGeoMapPolygonObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), polygon_(0), componentCompleted_(false) -{ - polygon_ = new QGeoMapPolygonObject(); - setMapObject(polygon_); - - connect(&border_, - SIGNAL(colorChanged(QColor)), - this, - SLOT(borderColorChanged(QColor))); - connect(&border_, - SIGNAL(widthChanged(int)), - this, - SLOT(borderWidthChanged(int))); -} - -QDeclarativeGeoMapPolygonObject::~QDeclarativeGeoMapPolygonObject() -{ - // QML engine deletes coordinates, no need to delete them here. - path_.clear(); - - // Memory management is bit tricky because we do not know - // which will be deleted first, the Map or some/all of the - // MapObjects. Hence we need to make sure that the internal - // c++ map objects are removed from QGeoMapData in either place - // (but not both). - if (map_) - map_->removeMapObject(this); - delete polygon_; -} - -/*! - \qmlproperty list<Coordinate> MapPolygon::path - \default - - This property holds the ordered list of coordinates which - define the polygon. -*/ - -QDeclarativeListProperty<QDeclarativeCoordinate> QDeclarativeGeoMapPolygonObject::declarativePath() -{ - return QDeclarativeListProperty<QDeclarativeCoordinate>(this, - 0, - path_append, - path_count, - path_at, - path_clear); -} - -void QDeclarativeGeoMapPolygonObject::path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate) -{ - QDeclarativeGeoMapPolygonObject* poly = static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object); - poly->path_.append(coordinate); - QList<QGeoCoordinate> p = poly->polygon_->path(); - p.append(coordinate->coordinate()); - poly->polygon_->setPath(p); - poly->pathPropertyChanged(); -} - -int QDeclarativeGeoMapPolygonObject::path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop) -{ - return static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object)->path_.count(); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapPolygonObject::path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index) -{ - return static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object)->path_.at(index); -} - -void QDeclarativeGeoMapPolygonObject::path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop) -{ - QDeclarativeGeoMapPolygonObject* poly = static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object); - QList<QDeclarativeCoordinate*> p = poly->path_; - qDeleteAll(p); - p.clear(); - poly->polygon_->setPath(QList<QGeoCoordinate>()); - poly->pathPropertyChanged(); -} - -void QDeclarativeGeoMapPolygonObject::pathPropertyChanged() -{ - if (componentCompleted_) - emit pathChanged(); -} - -void QDeclarativeGeoMapPolygonObject::componentComplete() -{ - // Setup member coordinates - QObjectList kids = children(); - QList<QGeoCoordinate> path = polygon_->path(); - for (int i = 0; i < kids.size(); ++i) { - QDeclarativeCoordinate *coordinate = qobject_cast<QDeclarativeCoordinate*>(kids.at(i)); - if (coordinate) { - path_.append(coordinate); - path.append(coordinate->coordinate()); - } else { - qmlInfo(this) << tr("Member is not a Coordinate"); - } - } - polygon_->setPath(path); - componentCompleted_ = true; - QDeclarativeGeoMapObject::componentComplete(); -} - -/*! - \qmlproperty color MapPolygon::color - - This property holds the color used to fill the circle. - - The default value corresponds to a transparent color. -*/ - -void QDeclarativeGeoMapPolygonObject::setColor(const QColor &color) -{ - if (color_ == color) - return; - - color_ = color; - QBrush m_brush(color); - polygon_->setBrush(m_brush); - emit colorChanged(color_); -} - -QColor QDeclarativeGeoMapPolygonObject::color() const -{ - return color_; -} - -/*! - \qmlproperty int MapPolygon::border.width - \qmlproperty color MapPolygon::border.color - - These properties hold the width and color used to draw the border of the circle. - - The width is in pixels and is independent of the zoom level of the map. - - The default values correspond to a black border with a width of 1 pixel. - - For no line, use a width of 0 or a transparent color. -*/ - -QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapPolygonObject::border() -{ - return &border_; -} - -void QDeclarativeGeoMapPolygonObject::borderColorChanged(const QColor &color) -{ - QPen p = polygon_->pen(); - p.setColor(color); - polygon_->setPen(p); -} - -void QDeclarativeGeoMapPolygonObject::borderWidthChanged(int width) -{ - QPen p = polygon_->pen(); - p.setWidth(width); - if (width == 0) - p.setStyle(Qt::NoPen); - else - p.setStyle(Qt::SolidLine); - polygon_->setPen(p); -} - -/*! - \qmlmethod MapPolygon::addCoordinate(Coordinate) - - Adds coordinate to the path. The resulting path is derived - from values at the time of assignment, meaning that later changes - in values are not reflected in the path. - - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Adding to polygon - - \sa removeCoordinate - -*/ - -void QDeclarativeGeoMapPolygonObject::addCoordinate(QDeclarativeCoordinate* coordinate) -{ - Q_ASSERT(path_.count() == polygon_->path().count()); - path_.append(coordinate); - QList<QGeoCoordinate> p = polygon_->path(); - p.append(coordinate->coordinate()); - polygon_->setPath(p); - emit pathChanged(); -} - -/*! - \qmlmethod MapPolygon::removeCoordinate(Coordinate) - - Remove coordinate from the path. Removed Coordinate is not deleted. - If there are multiple instances of the same coordinate, the one added - last is removed. - - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Removing from polygon - - If more finetuned control is needed, one can also - iterate and/or use the inherent index property of the path list. - - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Iterating and removing polyline - - \sa addCoordinate - -*/ - -void QDeclarativeGeoMapPolygonObject::removeCoordinate(QDeclarativeCoordinate* coordinate) -{ - Q_ASSERT(path_.count() == polygon_->path().count()); - int index = path_.lastIndexOf(coordinate); - if (index == -1) { - qmlInfo(this) << tr("Cannot remove nonexistent coordinate."); - return; - } - QList<QGeoCoordinate> path = polygon_->path(); - if (path.count() < index + 1) { - qmlInfo(this) << tr("Cannot remove the coordinate, it does not exist."); - return; - } - path.removeAt(index); - path_.removeAt(index); - polygon_->setPath(path); - emit pathChanged(); -} - -/*! - \qmlmethod MapPolygon::clearCoordinates() - - Clears all coordinates. - - \sa removeCoordinate addCoordinate - -*/ - -Q_INVOKABLE void QDeclarativeGeoMapPolygonObject::clearCoordinates() -{ - Q_ASSERT(path_.count() == polygon_->path().count()); - if (polygon_->path().isEmpty() && path_.isEmpty()) - return; - QList<QGeoCoordinate> temp; - polygon_->setPath(temp); - path_.clear(); - emit pathChanged(); -} - -/*! - \qmlproperty int MapPolygon::z - - This property holds the z-value of the polygon. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. -*/ - -/*! - \qmlproperty bool MapPolygon::visible - - This property holds a boolean corresponding to whether or not the - polygon is visible. -*/ - -#include "moc_qdeclarativegeomappolygonobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomappolygonobject_p.h b/src/imports/location/qdeclarativegeomappolygonobject_p.h deleted file mode 100644 index d7e26206..00000000 --- a/src/imports/location/qdeclarativegeomappolygonobject_p.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPPOLYGONOBJECT_H -#define QDECLARATIVEGEOMAPPOLYGONOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qdeclarativegeomapobjectborder_p.h" -#include "qgeomappolygonobject.h" - -#include <QDeclarativeListProperty> - -class QColor; -class QBrush; - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapPolygonObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeListProperty<QDeclarativeCoordinate> path READ declarativePath NOTIFY pathChanged) - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border CONSTANT) - -public: - QDeclarativeGeoMapPolygonObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapPolygonObject(); - - QDeclarativeListProperty<QDeclarativeCoordinate> declarativePath(); - - Q_INVOKABLE void addCoordinate(QDeclarativeCoordinate* coordinate); - Q_INVOKABLE void removeCoordinate(QDeclarativeCoordinate* coordinate); - Q_INVOKABLE void clearCoordinates(); - - QColor color() const; - void setColor(const QColor &color); - - // From QDeclarativeParserStatus - virtual void classBegin() {} - virtual void componentComplete(); - - QDeclarativeGeoMapObjectBorder* border(); - -Q_SIGNALS: - void colorChanged(const QColor &color); - void pathChanged(); - -private Q_SLOTS: - void borderColorChanged(const QColor &color); - void borderWidthChanged(int width); - -private: - static void path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate); - static int path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop); - static QDeclarativeCoordinate* path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index); - static void path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop); - void pathPropertyChanged(); - - QPointer<QGeoMapPolygonObject> polygon_; - QList<QDeclarativeCoordinate*> path_; - QColor color_; - QDeclarativeGeoMapObjectBorder border_; - bool componentCompleted_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapPolygonObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomappolylineobject.cpp b/src/imports/location/qdeclarativegeomappolylineobject.cpp deleted file mode 100644 index c9b5a75e..00000000 --- a/src/imports/location/qdeclarativegeomappolylineobject.cpp +++ /dev/null @@ -1,310 +0,0 @@ - -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomappolylineobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -#include <QColor> -#include <QBrush> - -#include <QtDeclarative/qdeclarativeinfo.h> - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapPolyline - - \brief The MapPolyline element displays a polyline on a map. - \inherits QGeoMapPolylineObject - - \ingroup qml-location-maps - - The polyline is specified in terms of an ordered list of - coordinates. Any invalid coordinates in the list will be ignored. - - If the list contains less than 2 valid coordinates the polyline - will not be displayed. - - Simplistic example to illustrate, this element could be defined in Map body: - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic MapPolyline - - The MapPolyline element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapPolylineObject::QDeclarativeGeoMapPolylineObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), polyline_(0), componentCompleted_(false) -{ - polyline_ = new QGeoMapPolylineObject(); - setMapObject(polyline_); - - connect(&border_, - SIGNAL(colorChanged(QColor)), - this, - SLOT(borderColorChanged(QColor))); - connect(&border_, - SIGNAL(widthChanged(int)), - this, - SLOT(borderWidthChanged(int))); -} - -QDeclarativeGeoMapPolylineObject::~QDeclarativeGeoMapPolylineObject() -{ - // QML engine will delete the actual declarative coordinates. - path_.clear(); - // Memory management is bit tricky because we do not know - // which will be deleted first, the Map or some/all of the - // MapObjects. Hence we need to make sure that the internal - // c++ map objects are removed from QGeoMapData in either place - // (but not both). - if (map_) - map_->removeMapObject(this); - delete polyline_; -} - -/*! - \qmlproperty list<Coordinate> MapPolyline::path - \default - - This property holds the ordered list of coordinates which - define the polyline. -*/ - -QDeclarativeListProperty<QDeclarativeCoordinate> QDeclarativeGeoMapPolylineObject::declarativePath() -{ - return QDeclarativeListProperty<QDeclarativeCoordinate>(this, - 0, - path_append, - path_count, - path_at, - path_clear); -} - -void QDeclarativeGeoMapPolylineObject::path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate) -{ - QDeclarativeGeoMapPolylineObject* poly = static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object); - poly->path_.append(coordinate); - QList<QGeoCoordinate> p = poly->polyline_->path(); - p.append(coordinate->coordinate()); - poly->polyline_->setPath(p); - poly->pathPropertyChanged(); -} - -int QDeclarativeGeoMapPolylineObject::path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop) -{ - return static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object)->path_.count(); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapPolylineObject::path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index) -{ - return static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object)->path_.at(index); -} - -void QDeclarativeGeoMapPolylineObject::path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop) -{ - QDeclarativeGeoMapPolylineObject* poly = static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object); - QList<QDeclarativeCoordinate*> p = poly->path_; - qDeleteAll(p); - p.clear(); - poly->polyline_->setPath(QList<QGeoCoordinate>()); - poly->pathPropertyChanged(); -} - -void QDeclarativeGeoMapPolylineObject::componentComplete() -{ - // Setup member coordinates - QObjectList kids = children(); - QList<QGeoCoordinate> path = polyline_->path(); - for (int i = 0; i < kids.size(); ++i) { - QDeclarativeCoordinate *coordinate = qobject_cast<QDeclarativeCoordinate*>(kids.at(i)); - if (coordinate) { - path_.append(coordinate); - path.append(coordinate->coordinate()); - } - } - polyline_->setPath(path); - componentCompleted_ = true; - QDeclarativeGeoMapObject::componentComplete(); -} - -void QDeclarativeGeoMapPolylineObject::pathPropertyChanged() -{ - if (componentCompleted_) - emit pathChanged(); -} - -/*! - \qmlproperty int MapPolyline::border.width - \qmlproperty color MapPolyline::border.color - - These properties hold the width and color used to draw the border of the circle. - - The width is in pixels and is independent of the zoom level of the map. - - The default values correspond to a black border with a width of 1 pixel. - - For no line, use a width of 0 or a transparent color. -*/ - -QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapPolylineObject::border() -{ - return &border_; -} - -void QDeclarativeGeoMapPolylineObject::borderColorChanged(const QColor &color) -{ - QPen p = polyline_->pen(); - p.setColor(color); - polyline_->setPen(p); -} - -void QDeclarativeGeoMapPolylineObject::borderWidthChanged(int width) -{ - QPen p = polyline_->pen(); - p.setWidth(width); - if (width == 0) - p.setStyle(Qt::NoPen); - else - p.setStyle(Qt::SolidLine); - polyline_->setPen(p); -} - -/*! - \qmlmethod MapPolyline::addCoordinate(Coordinate) - - Adds coordinate to the path. The resulting path is derived - from values at the time of assignment, meaning that later changes - in values are not reflected in the path. - - A basic example is to draw the path where one has been: - - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Wherever I may roam - - \sa removeCoordinate - -*/ - -void QDeclarativeGeoMapPolylineObject::addCoordinate(QDeclarativeCoordinate* coordinate) -{ - path_.append(coordinate); - QList<QGeoCoordinate> p = polyline_->path(); - p.append(coordinate->coordinate()); - polyline_->setPath(p); - emit pathChanged(); -} - - -/*! - \qmlmethod MapPolyline::clearCoordinates() - - Clears all coordinates. - - \sa removeCoordinate addCoordinate - -*/ - -Q_INVOKABLE void QDeclarativeGeoMapPolylineObject::clearCoordinates() -{ - Q_ASSERT(path_.count() == polyline_->path().count()); - if (polyline_->path().isEmpty() && path_.isEmpty()) - return; - QList<QGeoCoordinate> temp; - polyline_->setPath(temp); - path_.clear(); - emit pathChanged(); -} - -/*! - \qmlmethod MapPolyline::removeCoordinate(Coordinate) - - Remove coordinate from the path. If there are multiple instances - of the same coordinate, the one added last is removed. Removed Coordinate is not deleted. - - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Removing from polyline - - If more finetuned control is needed, one can also - iterate and/or use the inherent index property of the path list. - - \snippet doc/src/snippets/declarative/testpolymapobjects.qml Iterating and removing polyline - - \sa addCoordinate - -*/ - -void QDeclarativeGeoMapPolylineObject::removeCoordinate(QDeclarativeCoordinate* coordinate) -{ - int index = path_.lastIndexOf(coordinate); - if (index == -1) { - qmlInfo(this) << tr("Cannot remove nonexistent coordinate."); - return; - } - QList<QGeoCoordinate> path = polyline_->path(); - if (path.count() < index + 1) { - qmlInfo(this) << tr("Cannot remove the coordinate, it does not exist."); - return; - } - path.removeAt(index); - path_.removeAt(index); - polyline_->setPath(path); - emit pathChanged(); -} - -/*! - \qmlproperty int MapPolyline::z - - This property holds the z-value of the polyline. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. -*/ - -/*! - \qmlproperty bool MapPolyline::visible - - This property holds a boolean corresponding to whether or not the - polyline is visible. -*/ - -#include "moc_qdeclarativegeomappolylineobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomappolylineobject_p.h b/src/imports/location/qdeclarativegeomappolylineobject_p.h deleted file mode 100644 index 7ab22c35..00000000 --- a/src/imports/location/qdeclarativegeomappolylineobject_p.h +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPPOLYLINEOBJECT_H -#define QDECLARATIVEGEOMAPPOLYLINEOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qdeclarativegeomapobjectborder_p.h" -#include "qgeomappolylineobject.h" - -#include <QDeclarativeListProperty> - -class QColor; -class QBrush; - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapPolylineObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeListProperty<QDeclarativeCoordinate> path READ declarativePath NOTIFY pathChanged) - Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border CONSTANT) - -public: - QDeclarativeGeoMapPolylineObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapPolylineObject(); - - Q_INVOKABLE void addCoordinate(QDeclarativeCoordinate* coordinate); - Q_INVOKABLE void removeCoordinate(QDeclarativeCoordinate* coordinate); - Q_INVOKABLE void clearCoordinates(); - - // From QDeclarativeParserStatus - virtual void classBegin() {} - virtual void componentComplete(); - - QDeclarativeListProperty<QDeclarativeCoordinate> declarativePath(); - QDeclarativeGeoMapObjectBorder* border(); - -Q_SIGNALS: - void pathChanged(); - -private Q_SLOTS: - void borderColorChanged(const QColor &color); - void borderWidthChanged(int width); - -private: - static void path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate); - static int path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop); - static QDeclarativeCoordinate* path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index); - static void path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop); - void pathPropertyChanged(); - - QPointer<QGeoMapPolylineObject> polyline_; - QList<QDeclarativeCoordinate*> path_; - QDeclarativeGeoMapObjectBorder border_; - bool componentCompleted_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapPolylineObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomaprectangleobject.cpp b/src/imports/location/qdeclarativegeomaprectangleobject.cpp deleted file mode 100644 index fbcf486c..00000000 --- a/src/imports/location/qdeclarativegeomaprectangleobject.cpp +++ /dev/null @@ -1,287 +0,0 @@ - - - -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomaprectangleobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -#include <QColor> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapRectangle - - \brief The MapRectangle element displays a rectangle on a map. - \inherits QGeoMapRectangleObject - - \ingroup qml-location-maps - - The rectangle is specified in terms of the top left and bottom - right coordinates. - - If \l topLeft and \l bottomRight are not specified and valid the - rectangle will not be displayed. - - An example of one big yellow rectangle: - \snippet doc/src/snippets/declarative/testpolymapobjects.qml MapRectangle - - The MapRectangle element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapRectangleObject::QDeclarativeGeoMapRectangleObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), rectangle_(0), topLeft_(0), bottomRight_(0) -{ - rectangle_ = new QGeoMapRectangleObject(); - setMapObject(rectangle_); - - connect(&border_, - SIGNAL(colorChanged(QColor)), - this, - SLOT(borderColorChanged(QColor))); - connect(&border_, - SIGNAL(widthChanged(int)), - this, - SLOT(borderWidthChanged(int))); -} - -QDeclarativeGeoMapRectangleObject::~QDeclarativeGeoMapRectangleObject() -{ - // Memory management is bit tricky because we do not know - // which will be deleted first, the Map or some/all of the - // MapObjects. Hence we need to make sure that the internal - // c++ map objects are removed from QGeoMapData in either place - // (but not both). - if (map_) - map_->removeMapObject(this); - delete rectangle_; -} - -/*! - \qmlproperty Coordinate MapRectangle::topLeft - - This property holds the coordinate corresponding to the top left - corner of the rectangle. - - The default value is an invalid coordinate. -*/ - -void QDeclarativeGeoMapRectangleObject::setTopLeft(QDeclarativeCoordinate *topLeft) -{ - if (!topLeft || topLeft == topLeft_) - return; - - topLeft_ = topLeft; - - connect(topLeft_, - SIGNAL(latitudeChanged(double)), - this, - SLOT(topLeftLatitudeChanged(double))); - connect(topLeft_, - SIGNAL(longitudeChanged(double)), - this, - SLOT(topLeftLongitudeChanged(double))); - connect(topLeft_, - SIGNAL(altitudeChanged(double)), - this, - SLOT(topLeftAltitudeChanged(double))); - - rectangle_->setTopLeft(topLeft->coordinate()); - emit topLeftChanged(topLeft_); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapRectangleObject::topLeft() -{ - return topLeft_; -} - -void QDeclarativeGeoMapRectangleObject::topLeftLatitudeChanged(double /*latitude*/) -{ - rectangle_->setTopLeft(topLeft_->coordinate()); -} - -void QDeclarativeGeoMapRectangleObject::topLeftLongitudeChanged(double /*longitude*/) -{ - rectangle_->setTopLeft(topLeft_->coordinate()); -} - -void QDeclarativeGeoMapRectangleObject::topLeftAltitudeChanged(double /*altitude*/) -{ - rectangle_->setTopLeft(topLeft_->coordinate()); -} - -/*! - \qmlproperty Coordinate MapRectangle::bottomRight - - This property holds the coordinate corresponding to the bottom right - corner of the rectangle. - - The default value is an invalid coordinate. -*/ - -void QDeclarativeGeoMapRectangleObject::setBottomRight(QDeclarativeCoordinate *bottomRight) -{ - if (!bottomRight || bottomRight == bottomRight_) - return; - - bottomRight_ = bottomRight; - connect(bottomRight_, - SIGNAL(latitudeChanged(double)), - this, - SLOT(bottomRightLatitudeChanged(double))); - connect(bottomRight_, - SIGNAL(longitudeChanged(double)), - this, - SLOT(bottomRightLongitudeChanged(double))); - connect(bottomRight_, - SIGNAL(altitudeChanged(double)), - this, - SLOT(bottomRightAltitudeChanged(double))); - - rectangle_->setBottomRight(bottomRight->coordinate()); - - emit bottomRightChanged(bottomRight_); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapRectangleObject::bottomRight() -{ - return bottomRight_; -} - -void QDeclarativeGeoMapRectangleObject::bottomRightLatitudeChanged(double /*latitude*/) -{ - rectangle_->setBottomRight(bottomRight_->coordinate()); -} - -void QDeclarativeGeoMapRectangleObject::bottomRightLongitudeChanged(double /*longitude*/) -{ - rectangle_->setBottomRight(bottomRight_->coordinate()); -} - -void QDeclarativeGeoMapRectangleObject::bottomRightAltitudeChanged(double /*altitude*/) -{ - rectangle_->setBottomRight(bottomRight_->coordinate()); -} - -/*! - \qmlproperty color MapRectangle::color - - This property holds the color used to fill the circle. - - The default value corresponds to a transparent color. -*/ - -void QDeclarativeGeoMapRectangleObject::setColor(const QColor &color) -{ - if (color_ == color) - return; - - color_ = color; - QBrush m_brush(color); - rectangle_->setBrush(m_brush); - emit colorChanged(color_); -} - -QColor QDeclarativeGeoMapRectangleObject::color() const -{ - return color_; -} - -/*! - \qmlproperty int MapRectangle::border.width - \qmlproperty color MapRectangle::border.color - - These properties hold the width and color used to draw the border of the circle. - - The width is in pixels and is independent of the zoom level of the map. - - The default values correspond to a black border with a width of 1 pixel. - - For no line, use a width of 0 or a transparent color. -*/ - -QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapRectangleObject::border() -{ - return &border_; -} - -void QDeclarativeGeoMapRectangleObject::borderColorChanged(const QColor &color) -{ - QPen p = rectangle_->pen(); - p.setColor(color); - rectangle_->setPen(p); -} - -void QDeclarativeGeoMapRectangleObject::borderWidthChanged(int width) -{ - QPen p = rectangle_->pen(); - p.setWidth(width); - if (width == 0) - p.setStyle(Qt::NoPen); - else - p.setStyle(Qt::SolidLine); - rectangle_->setPen(p); -} - -/*! - \qmlproperty int MapRectangle::z - - This property holds the z-value of the rectangle. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. -*/ - -/*! - \qmlproperty bool MapRectangle::visible - - This property holds a boolean corresponding to whether or not the - rectangle is visible. -*/ - -#include "moc_qdeclarativegeomaprectangleobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomaprectangleobject_p.h b/src/imports/location/qdeclarativegeomaprectangleobject_p.h deleted file mode 100644 index 66117a24..00000000 --- a/src/imports/location/qdeclarativegeomaprectangleobject_p.h +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPRECTANGLEOBJECT_H -#define QDECLARATIVEGEOMAPRECTANGLEOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qdeclarativegeomapobjectborder_p.h" -#include "qgeomaprectangleobject.h" - -class QColor; -class QBrush; - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapRectangleObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeCoordinate* topLeft READ topLeft WRITE setTopLeft NOTIFY topLeftChanged) - Q_PROPERTY(QDeclarativeCoordinate* bottomRight READ bottomRight WRITE setBottomRight NOTIFY bottomRightChanged) - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border) - -public: - QDeclarativeGeoMapRectangleObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapRectangleObject(); - - QDeclarativeCoordinate* topLeft(); - void setTopLeft(QDeclarativeCoordinate *center); - - QDeclarativeCoordinate* bottomRight(); - void setBottomRight(QDeclarativeCoordinate *center); - - QColor color() const; - void setColor(const QColor &color); - - QDeclarativeGeoMapObjectBorder* border(); - -Q_SIGNALS: - void topLeftChanged(const QDeclarativeCoordinate *center); - void bottomRightChanged(const QDeclarativeCoordinate *center); - void colorChanged(const QColor &color); - -private Q_SLOTS: - void topLeftLatitudeChanged(double latitude); - void topLeftLongitudeChanged(double longitude); - void topLeftAltitudeChanged(double altitude); - - void bottomRightLatitudeChanged(double latitude); - void bottomRightLongitudeChanged(double longitude); - void bottomRightAltitudeChanged(double altitude); - - void borderColorChanged(const QColor &color); - void borderWidthChanged(int width); - -private: - QPointer<QGeoMapRectangleObject> rectangle_; - QDeclarativeCoordinate *topLeft_; - QDeclarativeCoordinate *bottomRight_; - QColor color_; - QDeclarativeGeoMapObjectBorder border_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapRectangleObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomaprouteobject.cpp b/src/imports/location/qdeclarativegeomaprouteobject.cpp deleted file mode 100644 index d1f3e4f7..00000000 --- a/src/imports/location/qdeclarativegeomaprouteobject.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QPen> -#include "qdeclarativegeomaprouteobject_p.h" - -QT_BEGIN_NAMESPACE - -QDeclarativeGeoMapRouteObject::QDeclarativeGeoMapRouteObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), route_(0) -{ - route_ = new QGeoMapRouteObject(); // graphical object - setMapObject(route_); - - connect(&border_, - SIGNAL(colorChanged(QColor)), - this, - SLOT(borderColorChanged(QColor))); - connect(&border_, - SIGNAL(widthChanged(int)), - this, - SLOT(borderWidthChanged(int))); -} - -QDeclarativeGeoMapRouteObject::~QDeclarativeGeoMapRouteObject() -{ - delete route_; -} - -void QDeclarativeGeoMapRouteObject::setRoute(QDeclarativeGeoRoute* route) -{ - if (route == declarativeRoute_) - return; - declarativeRoute_ = route; - if (declarativeRoute_) { - route_->setRoute(declarativeRoute_->route_); - } else { - route_->setRoute(QGeoRoute()); - } - emit routeChanged(); -} - -QDeclarativeGeoRoute* QDeclarativeGeoMapRouteObject::route() -{ - return declarativeRoute_; -} - -void QDeclarativeGeoMapRouteObject::setDetailLevel(quint32 detailLevel) -{ - if (detailLevel == route_->detailLevel()) - return; - route_->setDetailLevel(detailLevel); - emit detailLevelChanged(); -} - -quint32 QDeclarativeGeoMapRouteObject::detailLevel() const -{ - return route_->detailLevel(); -} - -QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapRouteObject::border() -{ - return &border_; -} - -void QDeclarativeGeoMapRouteObject::borderColorChanged(const QColor &color) -{ - QPen p = route_->pen(); - p.setColor(color); - route_->setPen(p); -} - -void QDeclarativeGeoMapRouteObject::borderWidthChanged(int width) -{ - QPen p = route_->pen(); - p.setWidth(width); - if (width == 0) - p.setStyle(Qt::NoPen); - else - p.setStyle(Qt::SolidLine); - route_->setPen(p); -} - -#include "moc_qdeclarativegeomaprouteobject_p.cpp" - -QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarativegeomaprouteobject_p.h b/src/imports/location/qdeclarativegeomaprouteobject_p.h deleted file mode 100644 index da2f8ebd..00000000 --- a/src/imports/location/qdeclarativegeomaprouteobject_p.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPROUTEOBJECT_H -#define QDECLARATIVEGEOMAPROUTEOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qdeclarativegeoroute_p.h" -#include "qdeclarativegeomapobjectborder_p.h" -#include "qgeomaprouteobject.h" - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapRouteObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeGeoRoute* route READ route WRITE setRoute NOTIFY routeChanged) - Q_PROPERTY(quint32 detailLevel READ detailLevel WRITE setDetailLevel NOTIFY detailLevelChanged) - Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border CONSTANT) - -public: - QDeclarativeGeoMapRouteObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapRouteObject(); - - QDeclarativeGeoRoute* route(); - void setRoute(QDeclarativeGeoRoute* route); - - quint32 detailLevel() const; - void setDetailLevel(quint32 radius); - - QDeclarativeGeoMapObjectBorder* border(); - -Q_SIGNALS: - void routeChanged(); - void detailLevelChanged(); - void colorChanged(); - -private Q_SLOTS: - void borderColorChanged(const QColor &color); - void borderWidthChanged(int width); - -private: - // The declarative route (datatype) - QDeclarativeGeoRoute* declarativeRoute_; - // Used internally as the visual map object - QGeoMapRouteObject* route_; - QDeclarativeGeoMapObjectBorder border_; - QColor color_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapRouteObject)); - -#endif diff --git a/src/imports/location/qdeclarativegeomaptextobject.cpp b/src/imports/location/qdeclarativegeomaptextobject.cpp deleted file mode 100644 index 80702091..00000000 --- a/src/imports/location/qdeclarativegeomaptextobject.cpp +++ /dev/null @@ -1,415 +0,0 @@ - -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativegeomaptextobject_p.h" -#include "qdeclarativegraphicsgeomap_p.h" -#include "qgeomapdata.h" - -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -/*! - \qmlclass MapText - - \brief The MapText element displays text on a map. - \inherits QGeoMapTextObject - - \ingroup qml-location-maps - - The string \l text will be drawn \l offset.x and \l offset.y pixels away from the - on-screen position of \l coordinate. - - The text will be rendered with font \l font and color \l color, and will - be aligned according to \l horizontalAlignment and \l verticalAlignment. - - If \l text is empty or \l coordinate is invalid nothing will be displayed. - - An example of text item: - \snippet doc/src/snippets/declarative/testpolymapobjects.qml MapText - - The MapText element is part of the \bold{QtMobility.location 1.2} module. -*/ - -QDeclarativeGeoMapTextObject::QDeclarativeGeoMapTextObject(QSGItem *parent) - : QDeclarativeGeoMapObject(parent), - text_(0), coordinate_(0) -{ - text_ = new QGeoMapTextObject(); - setMapObject(text_); - - QPen p = text_->pen(); - p.setStyle(Qt::NoPen); - text_->setPen(p); - - text_->setBrush(QBrush(Qt::black)); - - connect(text_, - SIGNAL(textChanged(QString)), - this, - SIGNAL(textChanged(QString))); - connect(text_, - SIGNAL(fontChanged(QFont)), - this, - SIGNAL(fontChanged(QFont))); - connect(text_, - SIGNAL(offsetChanged(QPoint)), - this, - SIGNAL(offsetChanged(QPoint))); - - hAlignment_ = QDeclarativeGeoMapTextObject::AlignHCenter; - vAlignment_ = QDeclarativeGeoMapTextObject::AlignVCenter; -} - -QDeclarativeGeoMapTextObject::~QDeclarativeGeoMapTextObject() -{ - // Memory management is bit tricky because we do not know - // which will be deleted first, the Map or some/all of the - // MapObjects. Hence we need to make sure that the internal - // c++ map objects are removed from QGeoMapData in either place - // (but not both). - if (map_) - map_->removeMapObject(this); - delete text_; -} - -/*! - \qmlproperty Coordinate MapText::coordinate - - This property holds the coordinate at which to anchor the text. -*/ - -void QDeclarativeGeoMapTextObject::setCoordinate(QDeclarativeCoordinate *coordinate) -{ - if (!coordinate || coordinate == coordinate_) - return; - - coordinate_ = coordinate; - connect(coordinate_, - SIGNAL(latitudeChanged(double)), - this, - SLOT(coordinateLatitudeChanged(double))); - connect(coordinate_, - SIGNAL(longitudeChanged(double)), - this, - SLOT(coordinateLongitudeChanged(double))); - connect(coordinate_, - SIGNAL(altitudeChanged(double)), - this, - SLOT(coordinateAltitudeChanged(double))); - - text_->setCoordinate(coordinate->coordinate()); - emit coordinateChanged(coordinate_); -} - -QDeclarativeCoordinate* QDeclarativeGeoMapTextObject::coordinate() -{ - return coordinate_; -} - -void QDeclarativeGeoMapTextObject::coordinateLatitudeChanged(double /*latitude*/) -{ - text_->setCoordinate(coordinate_->coordinate()); -} - -void QDeclarativeGeoMapTextObject::coordinateLongitudeChanged(double /*longitude*/) -{ - text_->setCoordinate(coordinate_->coordinate()); -} - -void QDeclarativeGeoMapTextObject::coordinateAltitudeChanged(double /*altitude*/) -{ - text_->setCoordinate(coordinate_->coordinate()); -} - -/*! - \qmlproperty string MapText::text - - This property holds the text to display. - - The default value is an empty string. -*/ - -QString QDeclarativeGeoMapTextObject::text() const -{ - return text_->text(); -} - -void QDeclarativeGeoMapTextObject::setText(const QString &text) -{ - text_->setText(text); -} - -/*! - \qmlproperty string MapText::font.family - - Sets the family name of the font. - - The family name is case insensitive and may optionally include a foundry name, e.g. "Helvetica [Cronyx]". - If the family is available from more than one foundry and the foundry isn't specified, an arbitrary foundry is chosen. - If the family isn't available a family will be set using the font matching algorithm. -*/ - -/*! - \qmlproperty bool MapText::font.bold - - Sets whether the font weight is bold. -*/ - -/*! - \qmlproperty enumeration MapText::font.weight - - Sets the font's weight. - - The weight can be one of: - \list - \o Font.Light - \o Font.Normal - the default - \o Font.DemiBold - \o Font.Bold - \o Font.Black - \endlist - - \qml - MapText { text: "Hello"; font.weight: Font.DemiBold } - \endqml -*/ - -/*! - \qmlproperty bool MapText::font.italic - - Sets whether the font has an italic style. -*/ - -/*! - \qmlproperty bool MapText::font.underline - - Sets whether the text is underlined. -*/ - -/*! - \qmlproperty bool MapText::font.strikeout - - Sets whether the font has a strikeout style. -*/ - -/*! - \qmlproperty real MapText::font.pointSize - - Sets the font size in points. The point size must be greater than zero. -*/ - -/*! - \qmlproperty int MapText::font.pixelSize - - Sets the font size in pixels. - - Using this function makes the font device dependent. - Use \c pointSize to set the size of the font in a device independent manner. -*/ - -/*! - \qmlproperty real MapText::font.letterSpacing - - Sets the letter spacing for the font. - - Letter spacing changes the default spacing between individual letters in the font. - A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing. -*/ - -/*! - \qmlproperty real MapText::font.wordSpacing - - Sets the word spacing for the font. - - Word spacing changes the default spacing between individual words. - A positive value increases the word spacing by a corresponding amount of pixels, - while a negative value decreases the inter-word spacing accordingly. -*/ - -/*! - \qmlproperty enumeration MapText::font.capitalization - - Sets the capitalization for the text. - - \list - \o Font.MixedCase - This is the normal text rendering option where no capitalization change is applied. - \o Font.AllUppercase - This alters the text to be rendered in all uppercase type. - \o Font.AllLowercase - This alters the text to be rendered in all lowercase type. - \o Font.SmallCaps - This alters the text to be rendered in small-caps type. - \o Font.Capitalize - This alters the text to be rendered with the first character of each word as an uppercase character. - \endlist - - \qml - MapText { text: "Hello"; font.capitalization: Font.AllLowercase } - \endqml -*/ - -QFont QDeclarativeGeoMapTextObject::font() const -{ - return text_->font(); -} - -void QDeclarativeGeoMapTextObject::setFont(const QFont &font) -{ - text_->setFont(font); -} - -/*! - \qmlproperty int MapText::offset.x - \qmlproperty int MapText::offset.y - - These properties hold the offset from the on-screen position of - \l coordinate at which the text should be displayed. - - They both default to 0. -*/ - -QPoint QDeclarativeGeoMapTextObject::offset() const -{ - return text_->offset(); -} - -void QDeclarativeGeoMapTextObject::setOffset(const QPoint &offset) -{ - text_->setOffset(offset); -} - -/*! - \qmlproperty color MapText::color - - This property holds the color used to draw the text. - - The default value is black. -*/ - -void QDeclarativeGeoMapTextObject::setColor(const QColor &color) -{ - if (color_ == color) - return; - - color_ = color; - QBrush m_brush(color); - text_->setBrush(m_brush); - emit colorChanged(color_); -} - -QColor QDeclarativeGeoMapTextObject::color() const -{ - return color_; -} - -/*! - \qmlproperty enumeration MapText::horizontalAlignment - \qmlproperty enumeration MapText::verticalAlignment - - Sets the horizontal and vertical alignment of the text. - - The alignment is relative to the point \l offset.x and \l offset.y pixels away from - the on-screen position of \l coordinate. - - The valid values for \c horizontalAlignment are \c MapText.AlignLeft, - \c MapText.AlignRight and \c MapText.AlignHCenter. The valid values - for \c verticalAlignment are \c MapText.AlignTop, \c MapText.AlignBottom - and \c MapText.AlignVCenter. - - The default values are \c MapText.AlignHCenter and \c MapText.AlignVCenter - respectively. -*/ - -QDeclarativeGeoMapTextObject::HorizontalAlignment QDeclarativeGeoMapTextObject::horizontalAlignment() const -{ - return hAlignment_; -} - -void QDeclarativeGeoMapTextObject::setHorizontalAlignment(QDeclarativeGeoMapTextObject::HorizontalAlignment alignment) -{ - if (hAlignment_ == alignment) - return; - - - hAlignment_ = alignment; - - text_->setAlignment(Qt::Alignment(hAlignment_ | vAlignment_)); - - emit horizontalAlignmentChanged(hAlignment_); -} - - -QDeclarativeGeoMapTextObject::VerticalAlignment QDeclarativeGeoMapTextObject::verticalAlignment() const -{ - return vAlignment_; -} - -void QDeclarativeGeoMapTextObject::setVerticalAlignment(QDeclarativeGeoMapTextObject::VerticalAlignment alignment) -{ - if (vAlignment_ == alignment) - return; - - vAlignment_ = alignment; - - text_->setAlignment(Qt::Alignment(hAlignment_ | vAlignment_)); - - emit verticalAlignmentChanged(vAlignment_); -} - -/*! - \qmlproperty int MapText::z - - This property holds the z-value of the text. - - Map objects are drawn in z-value order, and objects with the - same z-value will be drawn in insertion order. -*/ - -/*! - \qmlproperty bool MapText::visible - - This property holds a boolean corresponding to whether or not the - text is visible. -*/ - -#include "moc_qdeclarativegeomaptextobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/imports/location/qdeclarativegeomaptextobject_p.h b/src/imports/location/qdeclarativegeomaptextobject_p.h deleted file mode 100644 index 48a74d3f..00000000 --- a/src/imports/location/qdeclarativegeomaptextobject_p.h +++ /dev/null @@ -1,130 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEGEOMAPTEXTOBJECT_H -#define QDECLARATIVEGEOMAPTEXTOBJECT_H - -#include "qdeclarativegeomapobject_p.h" -#include "qdeclarativecoordinate_p.h" -#include "qgeomaptextobject.h" - -#include <QColor> - -QT_BEGIN_NAMESPACE - -class QDeclarativeGeoMapTextObject : public QDeclarativeGeoMapObject -{ - Q_OBJECT - Q_ENUMS(HorizontalAlignment) - Q_ENUMS(VerticalAlignment) - - Q_PROPERTY(QDeclarativeCoordinate* coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) - Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged) - Q_PROPERTY(HorizontalAlignment horizontalAlignment READ horizontalAlignment WRITE setHorizontalAlignment NOTIFY horizontalAlignmentChanged) - Q_PROPERTY(VerticalAlignment verticalAlignment READ verticalAlignment WRITE setVerticalAlignment NOTIFY verticalAlignmentChanged) - -public: - enum HorizontalAlignment { - AlignHCenter = Qt::AlignHCenter, - AlignLeft = Qt::AlignLeft, - AlignRight = Qt::AlignRight - }; - - enum VerticalAlignment { - AlignVCenter = Qt::AlignVCenter, - AlignTop = Qt::AlignTop, - AlignBottom = Qt::AlignBottom - }; - - QDeclarativeGeoMapTextObject(QSGItem *parent = 0); - ~QDeclarativeGeoMapTextObject(); - - QDeclarativeCoordinate* coordinate(); - void setCoordinate(QDeclarativeCoordinate *coordinate); - - QString text() const; - void setText(const QString &text); - - QFont font() const; - void setFont(const QFont &font); - - QColor color() const; - void setColor(const QColor &color); - - QPoint offset() const; - void setOffset(const QPoint &offset); - - HorizontalAlignment horizontalAlignment() const; - void setHorizontalAlignment(HorizontalAlignment alignment); - - VerticalAlignment verticalAlignment() const; - void setVerticalAlignment(VerticalAlignment alignment); - -Q_SIGNALS: - void coordinateChanged(const QDeclarativeCoordinate *coordinate); - void textChanged(const QString &text); - void fontChanged(const QFont &font); - void colorChanged(const QColor &color); - void offsetChanged(const QPoint &offset); - void horizontalAlignmentChanged(HorizontalAlignment alignment); - void verticalAlignmentChanged(VerticalAlignment alignment); - -private Q_SLOTS: - void coordinateLatitudeChanged(double latitude); - void coordinateLongitudeChanged(double longitude); - void coordinateAltitudeChanged(double altitude); - -private: - QPointer<QGeoMapTextObject> text_; - QDeclarativeCoordinate *coordinate_; - QColor color_; - HorizontalAlignment hAlignment_; - VerticalAlignment vAlignment_; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapTextObject)); - -#endif diff --git a/src/imports/location/qdeclarativegraphicsgeomap.cpp b/src/imports/location/qdeclarativegraphicsgeomap.cpp index b91f330a..86b34909 100644 --- a/src/imports/location/qdeclarativegraphicsgeomap.cpp +++ b/src/imports/location/qdeclarativegraphicsgeomap.cpp @@ -44,12 +44,9 @@ #include "qdeclarativecoordinate_p.h" #include "qdeclarativegeoserviceprovider_p.h" -#include "qdeclarativegeomapgroupobject_p.h" #include <qgeoserviceprovider.h> #include <qgeomappingmanager.h> -#include <qgeomapdata.h> -#include <qgeomapobject.h> #include <QGraphicsSceneMouseEvent> #include <QDeclarativeContext> @@ -103,11 +100,11 @@ QT_BEGIN_NAMESPACE QDeclarativeGraphicsGeoMap::QDeclarativeGraphicsGeoMap(QSGItem *parent) : QSGItem(parent), plugin_(0), - mapData_(0), +// mapData_(0), center_(0), initialCoordinate(0), - mapType_(NoMap), - connectivityMode_(NoConnectivity), +// mapType_(NoMap), +// connectivityMode_(NoConnectivity), componentCompleted_(false) { initialCoordinate = new QGeoCoordinate(-27.0, 153.0); @@ -133,8 +130,8 @@ QDeclarativeGraphicsGeoMap::~QDeclarativeGraphicsGeoMap() // otherwise qgeomapdata will delete data it doesn't own. if (!mapViews_.isEmpty()) qDeleteAll(mapViews_); - if (mapData_) - delete mapData_; + //if (mapData_) + // delete mapData_; if (initialCoordinate) delete initialCoordinate; } @@ -150,6 +147,7 @@ void QDeclarativeGraphicsGeoMap::componentComplete() void QDeclarativeGraphicsGeoMap::recursiveAddToObjectMap(QDeclarativeGeoMapObject *mapObject) { +#if 0 objectMap_.insert(mapObject->mapObject(), mapObject); QDeclarativeGeoMapGroupObject *groupObject = @@ -165,8 +163,12 @@ void QDeclarativeGraphicsGeoMap::recursiveAddToObjectMap(QDeclarativeGeoMapObjec recursiveAddToObjectMap(subObject); } } +#else + qDebug() << Q_FUNC_INFO << "FIXME"; +#endif } +#if 0 void QDeclarativeGraphicsGeoMap::recursiveRemoveFromObjectMap(QGeoMapObject *mapObject) { objectMap_.remove(mapObject); @@ -177,10 +179,12 @@ void QDeclarativeGraphicsGeoMap::recursiveRemoveFromObjectMap(QGeoMapObject *map recursiveRemoveFromObjectMap(subObject); } } +#endif void QDeclarativeGraphicsGeoMap::populateMap() { - if (!mapData_ || !componentCompleted_) +// if (!mapData_ || !componentCompleted_) + if (!componentCompleted_) return; QObjectList kids = children(); for (int i = 0; i < kids.size(); ++i) { @@ -194,8 +198,8 @@ void QDeclarativeGraphicsGeoMap::populateMap() QDeclarativeGeoMapObject *mapObject = qobject_cast<QDeclarativeGeoMapObject*>(kids.at(i)); if (mapObject) { mapObjects_.append(mapObject); - recursiveAddToObjectMap(mapObject); - mapData_->addMapObject(mapObject->mapObject()); + //recursiveAddToObjectMap(mapObject); + //mapData_->addMapObject(mapObject->mapObject()); mapObject->setMap(this); emit objectsChanged(); continue; @@ -211,7 +215,8 @@ void QDeclarativeGraphicsGeoMap::populateMap() void QDeclarativeGraphicsGeoMap::setupMapView(QDeclarativeGeoMapObjectView *view) { - view->setMapData(this); + qFatal("fix the next line"); +// view->setMapData(this); view->repopulate(); } @@ -219,9 +224,9 @@ void QDeclarativeGraphicsGeoMap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * /*widget*/) { - if (mapData_) { - mapData_->paint(painter, option); - } +// if (mapData_) { +// mapData_->paint(painter, option); +// } } void QDeclarativeGraphicsGeoMap::geometryChanged(const QRectF &newGeometry, @@ -257,54 +262,54 @@ void QDeclarativeGraphicsGeoMap::setPlugin(QDeclarativeGeoServiceProvider *plugi qWarning() << serviceProvider->errorString(); return; } - mapData_ = mappingManager->createMapData(); - mapData_->init(); + //mapData_ = mappingManager->createMapData(); + //mapData_->init(); //mapData_->setParentItem(this); - // setters - mapData_->setWindowSize(size_); - mapData_->setZoomLevel(zoomLevel_); +// // setters +// mapData_->setWindowSize(size_); +// mapData_->setZoomLevel(zoomLevel_); - if (center_) - mapData_->setCenter(center_->coordinate()); - else - mapData_->setCenter(*initialCoordinate); +// if (center_) +// mapData_->setCenter(center_->coordinate()); +// else +// mapData_->setCenter(*initialCoordinate); - mapData_->setMapType(QGraphicsGeoMap::MapType(mapType_)); - mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode_)); +// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType_)); +// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode_)); // Populate the map objects. populateMap(); // setup signals - connect(mapData_, - SIGNAL(updateMapDisplay(QRectF)), - this, - SLOT(updateMapDisplay(QRectF))); +// connect(mapData_, +// SIGNAL(updateMapDisplay(QRectF)), +// this, +// SLOT(updateMapDisplay(QRectF))); - connect(mapData_, - SIGNAL(centerChanged(QGeoCoordinate)), - this, - SLOT(internalCenterChanged(QGeoCoordinate))); +// connect(mapData_, +// SIGNAL(centerChanged(QGeoCoordinate)), +// this, +// SLOT(internalCenterChanged(QGeoCoordinate))); - connect(mapData_, - SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)), - this, - SLOT(internalMapTypeChanged(QGraphicsGeoMap::MapType))); +// connect(mapData_, +// SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)), +// this, +// SLOT(internalMapTypeChanged(QGraphicsGeoMap::MapType))); - connect(mapData_, - SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)), - this, - SLOT(internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode))); +// connect(mapData_, +// SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)), +// this, +// SLOT(internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode))); - connect(mapData_, - SIGNAL(windowSizeChanged(QSizeF)), - this, - SIGNAL(sizeChanged(QSizeF))); +// connect(mapData_, +// SIGNAL(windowSizeChanged(QSizeF)), +// this, +// SIGNAL(sizeChanged(QSizeF))); - connect(mapData_, - SIGNAL(zoomLevelChanged(qreal)), - this, - SIGNAL(zoomLevelChanged(qreal))); +// connect(mapData_, +// SIGNAL(zoomLevelChanged(qreal)), +// this, +// SIGNAL(zoomLevelChanged(qreal))); } void QDeclarativeGraphicsGeoMap::updateMapDisplay(const QRectF &target) @@ -367,26 +372,26 @@ qreal QDeclarativeGraphicsGeoMap::maximumZoomLevel() const */ void QDeclarativeGraphicsGeoMap::setSize(const QSizeF &size) { - if (mapData_) { - setWidth(size.width()); - setHeight(size.height()); - mapData_->setWindowSize(size); - } else { +// if (mapData_) { +// setWidth(size.width()); +// setHeight(size.height()); +// mapData_->setWindowSize(size); +// } else { if (size_ == size) return; size_ = size; emit sizeChanged(size_); - } +// } } QSizeF QDeclarativeGraphicsGeoMap::size() const { - if (mapData_) - return mapData_->windowSize(); - else +// if (mapData_) +// return mapData_->windowSize(); +// else return size_; } @@ -401,25 +406,25 @@ QSizeF QDeclarativeGraphicsGeoMap::size() const */ void QDeclarativeGraphicsGeoMap::setZoomLevel(qreal zoomLevel) { - if (mapData_) { - mapData_->setZoomLevel(zoomLevel); - } else { +// if (mapData_) { +// mapData_->setZoomLevel(zoomLevel); +// } else { if (zoomLevel_ == zoomLevel) return; zoomLevel_ = zoomLevel; emit zoomLevelChanged(zoomLevel_); - } +// } } qreal QDeclarativeGraphicsGeoMap::zoomLevel() const { - if (mapData_) { - return mapData_->zoomLevel(); - } else { +// if (mapData_) { +// return mapData_->zoomLevel(); +// } else { return zoomLevel_; - } +// } } /*! @@ -450,36 +455,36 @@ void QDeclarativeGraphicsGeoMap::setCenter(QDeclarativeCoordinate *center) this, SLOT(centerAltitudeChanged(double))); - if (mapData_) { - mapData_->setCenter(center_->coordinate()); - } +// if (mapData_) { +// mapData_->setCenter(center_->coordinate()); +// } } emit declarativeCenterChanged(center_); } QDeclarativeCoordinate* QDeclarativeGraphicsGeoMap::center() { - if (mapData_ && center_) - center_->setCoordinate(mapData_->center()); +// if (mapData_ && center_) +// center_->setCoordinate(mapData_->center()); return center_; } void QDeclarativeGraphicsGeoMap::centerLatitudeChanged(double /*latitude*/) { - if (mapData_ && center_) - mapData_->setCenter(center_->coordinate()); +// if (mapData_ && center_) +// mapData_->setCenter(center_->coordinate()); } void QDeclarativeGraphicsGeoMap::centerLongitudeChanged(double /*longitude*/) { - if (mapData_ && center_) - mapData_->setCenter(center_->coordinate()); +// if (mapData_ && center_) +// mapData_->setCenter(center_->coordinate()); } void QDeclarativeGraphicsGeoMap::centerAltitudeChanged(double /*altitude*/) { - if (mapData_ && center_) - mapData_->setCenter(center_->coordinate()); +// if (mapData_ && center_) +// mapData_->setCenter(center_->coordinate()); } /*! @@ -497,28 +502,28 @@ void QDeclarativeGraphicsGeoMap::centerAltitudeChanged(double /*altitude*/) The default value is determined by the plugin. */ -void QDeclarativeGraphicsGeoMap::setMapType(QDeclarativeGraphicsGeoMap::MapType mapType) -{ - if (mapData_) { - mapData_->setMapType(QGraphicsGeoMap::MapType(mapType)); - } else { - if (mapType_ == mapType) - return; - - mapType_ = mapType; - - emit mapTypeChanged(mapType_); - } -} - -QDeclarativeGraphicsGeoMap::MapType QDeclarativeGraphicsGeoMap::mapType() const -{ - if (mapData_) { - return QDeclarativeGraphicsGeoMap::MapType(mapData_->mapType()); - } else { - return mapType_; - } -} +//void QDeclarativeGraphicsGeoMap::setMapType(QDeclarativeGraphicsGeoMap::MapType mapType) +//{ +// if (mapData_) { +// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType)); +// } else { +// if (mapType_ == mapType) +// return; + +// mapType_ = mapType; + +// emit mapTypeChanged(mapType_); +// } +//} + +//QDeclarativeGraphicsGeoMap::MapType QDeclarativeGraphicsGeoMap::mapType() const +//{ +// if (mapData_) { +// return QDeclarativeGraphicsGeoMap::MapType(mapData_->mapType()); +// } else { +// return mapType_; +// } +//} // TODO document this (list has objects managed by add/removeMapObject and // those declared as part of the class. @@ -569,27 +574,27 @@ void QDeclarativeGraphicsGeoMap::objects_clear(QDeclarativeListProperty<QDeclara The default value is determined by the plugin. */ -void QDeclarativeGraphicsGeoMap::setConnectivityMode(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode) -{ - if (mapData_) { - mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode)); - } else { - if (connectivityMode_ == connectivityMode) - return; - - connectivityMode_ = connectivityMode; - - emit connectivityModeChanged(connectivityMode_); - } -} - -QDeclarativeGraphicsGeoMap::ConnectivityMode QDeclarativeGraphicsGeoMap::connectivityMode() const -{ - if (mapData_) - return QDeclarativeGraphicsGeoMap::ConnectivityMode(mapData_->connectivityMode()); - else - return connectivityMode_; -} +//void QDeclarativeGraphicsGeoMap::setConnectivityMode(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode) +//{ +// if (mapData_) { +// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode)); +// } else { +// if (connectivityMode_ == connectivityMode) +// return; + +// connectivityMode_ = connectivityMode; + +// emit connectivityModeChanged(connectivityMode_); +// } +//} + +//QDeclarativeGraphicsGeoMap::ConnectivityMode QDeclarativeGraphicsGeoMap::connectivityMode() const +//{ +// if (mapData_) +// return QDeclarativeGraphicsGeoMap::ConnectivityMode(mapData_->connectivityMode()); +// else +// return connectivityMode_; +//} /*! \qmlproperty list<QGeoMapObject> Map::objects @@ -624,8 +629,8 @@ QDeclarativeCoordinate* QDeclarativeGraphicsGeoMap::toCoordinate(QPointF screenP { QGeoCoordinate coordinate; - if (mapData_) - coordinate = mapData_->screenPositionToCoordinate(screenPosition); +// if (mapData_) +// coordinate = mapData_->screenPositionToCoordinate(screenPosition); return new QDeclarativeCoordinate(coordinate, const_cast<QDeclarativeGraphicsGeoMap *>(this)); @@ -644,94 +649,94 @@ QPointF QDeclarativeGraphicsGeoMap::toScreenPosition(QDeclarativeCoordinate* coo { QPointF point; - if (mapData_) - point = mapData_->coordinateToScreenPosition(coordinate->coordinate()); +// if (mapData_) +// point = mapData_->coordinateToScreenPosition(coordinate->coordinate()); return point; } void QDeclarativeGraphicsGeoMap::pan(int dx, int dy) { - if (mapData_) { - mapData_->pan(dx, dy); - update(); - } else { +// if (mapData_) { +// mapData_->pan(dx, dy); +// update(); +// } else { qmlInfo(this) << tr("Map plugin is not set, cannot pan."); - } +// } } QDeclarativeGeoMapMouseEvent* QDeclarativeGraphicsGeoMap::createMapMouseEvent(QGraphicsSceneMouseEvent *event) { - if (!event || !mapData_) +// if (!event || !mapData_) return 0; - QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this); +// QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this); - mouseEvent->setButton(event->button()); - mouseEvent->setModifiers(event->modifiers()); +// mouseEvent->setButton(event->button()); +// mouseEvent->setModifiers(event->modifiers()); - QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos()); - mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this)); - mouseEvent->setX(event->pos().x()); - mouseEvent->setY(event->pos().y()); +// QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos()); +// mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this)); +// mouseEvent->setX(event->pos().x()); +// mouseEvent->setY(event->pos().y()); - return mouseEvent; +// return mouseEvent; } QDeclarativeGeoMapMouseEvent* QDeclarativeGraphicsGeoMap::createMapMouseEvent(QGraphicsSceneHoverEvent *event) { - if (!event || !mapData_) +// if (!event || !mapData_) return 0; - QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this); +// QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this); - mouseEvent->setModifiers(event->modifiers()); +// mouseEvent->setModifiers(event->modifiers()); - QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos()); - mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this)); - mouseEvent->setX(event->pos().x()); - mouseEvent->setY(event->pos().y()); +// QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos()); +// mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this)); +// mouseEvent->setX(event->pos().x()); +// mouseEvent->setY(event->pos().y()); - return mouseEvent; +// return mouseEvent; } void QDeclarativeGraphicsGeoMap::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (!mapData_) { - qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed."); - return; - } - - // First deliver the mouse event to possible map objects (they will accept it if - // they have their own mouse area). If no accepting objects, check if the map - // object itself has any mouse areas. This way the map objects have higher priority - // in mouse event handling. - QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); - - QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); - - for (int i = objects.size() - 1; i >= 0; --i) { - QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); - if (mapObject) { - mapObject->pressEvent(mouseEvent); - if (mouseEvent->accepted()) { - event->setAccepted(true); - delete mouseEvent; - return; - } - } - } - - for (int i = 0; i < mouseAreas_.size(); ++i) { - mouseAreas_.at(i)->pressEvent(mouseEvent); - if (mouseEvent->accepted()) { - event->setAccepted(true); - delete mouseEvent; - return; - } - } - - delete mouseEvent; +// if (!mapData_) { +// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed."); +// return; +// } + +// // First deliver the mouse event to possible map objects (they will accept it if +// // they have their own mouse area). If no accepting objects, check if the map +// // object itself has any mouse areas. This way the map objects have higher priority +// // in mouse event handling. +// QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); + +// QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); + +// for (int i = objects.size() - 1; i >= 0; --i) { +// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); +// if (mapObject) { +// mapObject->pressEvent(mouseEvent); +// if (mouseEvent->accepted()) { +// event->setAccepted(true); +// delete mouseEvent; +// return; +// } +// } +// } + +// for (int i = 0; i < mouseAreas_.size(); ++i) { +// mouseAreas_.at(i)->pressEvent(mouseEvent); +// if (mouseEvent->accepted()) { +// event->setAccepted(true); +// delete mouseEvent; +// return; +// } +// } + +// delete mouseEvent; //QSGItem::mousePressEvent(event); QSGItem::mousePressEvent(event); @@ -757,44 +762,44 @@ void QDeclarativeGraphicsGeoMap::mouseReleaseEvent(QGraphicsSceneMouseEvent *eve void QDeclarativeGraphicsGeoMap::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { - if (!mapData_) { - qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed."); - return; - } +// if (!mapData_) { +// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed."); +// return; +// } - activeMouseArea_ = 0; +// activeMouseArea_ = 0; - QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); +// QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); - QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); +// QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); - for (int i = objects.size() - 1; i >= 0; --i) { - QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); - if (mapObject) { - mapObject->doubleClickEvent(mouseEvent); - if (mouseEvent->accepted()) { - event->setAccepted(true); - delete mouseEvent; - return; - } - } - } +// for (int i = objects.size() - 1; i >= 0; --i) { +// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); +// if (mapObject) { +// mapObject->doubleClickEvent(mouseEvent); +// if (mouseEvent->accepted()) { +// event->setAccepted(true); +// delete mouseEvent; +// return; +// } +// } +// } - for (int i = 0; i < mouseAreas_.size(); ++i) { - mouseAreas_.at(i)->doubleClickEvent(mouseEvent); - if (mouseEvent->accepted()) { - event->setAccepted(true); - delete mouseEvent; - return; - } - } +// for (int i = 0; i < mouseAreas_.size(); ++i) { +// mouseAreas_.at(i)->doubleClickEvent(mouseEvent); +// if (mouseEvent->accepted()) { +// event->setAccepted(true); +// delete mouseEvent; +// return; +// } +// } - bool accepted = (mouseEvent->accepted()); +// bool accepted = (mouseEvent->accepted()); - delete mouseEvent; +// delete mouseEvent; - if (accepted) - return; +// if (accepted) +// return; QSGItem::mouseDoubleClickEvent(event); } @@ -824,66 +829,66 @@ void QDeclarativeGraphicsGeoMap::hoverEnterEvent(QGraphicsSceneHoverEvent *event void QDeclarativeGraphicsGeoMap::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { - if (!mapData_) - return; +// if (!mapData_) +// return; - QList<QGeoMapObject*> objectsThen = mapData_->mapObjectsAtScreenPosition(event->lastPos()); - QList<QGeoMapObject*> objectsNow = mapData_->mapObjectsAtScreenPosition(event->pos()); +// QList<QGeoMapObject*> objectsThen = mapData_->mapObjectsAtScreenPosition(event->lastPos()); +// QList<QGeoMapObject*> objectsNow = mapData_->mapObjectsAtScreenPosition(event->pos()); - QSet<QGeoMapObject*> enter = objectsNow.toSet(); - enter -= objectsThen.toSet(); +// QSet<QGeoMapObject*> enter = objectsNow.toSet(); +// enter -= objectsThen.toSet(); - for (int i = 0; i < objectsNow.size(); ++i) { - if (!enter.contains(objectsNow.at(i))) - continue; +// for (int i = 0; i < objectsNow.size(); ++i) { +// if (!enter.contains(objectsNow.at(i))) +// continue; - QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsNow.at(i), 0); - if (mapObject) - mapObject->enterEvent(); - } +// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsNow.at(i), 0); +// if (mapObject) +// mapObject->enterEvent(); +// } - QSet<QGeoMapObject*> exit = objectsThen.toSet(); - exit -= objectsNow.toSet(); +// QSet<QGeoMapObject*> exit = objectsThen.toSet(); +// exit -= objectsNow.toSet(); - for (int i = 0; i < objectsThen.size(); ++i) { - if (!exit.contains(objectsThen.at(i))) - continue; +// for (int i = 0; i < objectsThen.size(); ++i) { +// if (!exit.contains(objectsThen.at(i))) +// continue; - QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsThen.at(i), 0); - if (mapObject) - mapObject->exitEvent(); - } +// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsThen.at(i), 0); +// if (mapObject) +// mapObject->exitEvent(); +// } - QSet<QGeoMapObject*> move = objectsNow.toSet(); - move += objectsThen.toSet(); +// QSet<QGeoMapObject*> move = objectsNow.toSet(); +// move += objectsThen.toSet(); - QList<QGeoMapObject*> objects = mapData_->mapObjectsInViewport(); +// QList<QGeoMapObject*> objects = mapData_->mapObjectsInViewport(); - QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); +// QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); - for (int i = 0; i < objects.size(); ++i) { - if (!move.contains(objects.at(i))) - continue; +// for (int i = 0; i < objects.size(); ++i) { +// if (!move.contains(objects.at(i))) +// continue; - QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); - if (mapObject) - mapObject->moveEvent(mouseEvent); - } +// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); +// if (mapObject) +// mapObject->moveEvent(mouseEvent); +// } - /* - QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); +// /* +// QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); - for (int i = objects.size() - 1; i >= 0; --i) { - QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); - if (mapObject) - mapObject->moveEvent(mouseEvent); - } - */ +// for (int i = objects.size() - 1; i >= 0; --i) { +// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); +// if (mapObject) +// mapObject->moveEvent(mouseEvent); +// } +// */ - for (int i = 0; i < mouseAreas_.size(); ++i) - mouseAreas_.at(i)->moveEvent(mouseEvent); +// for (int i = 0; i < mouseAreas_.size(); ++i) +// mouseAreas_.at(i)->moveEvent(mouseEvent); - delete mouseEvent; +// delete mouseEvent; } void QDeclarativeGraphicsGeoMap::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) @@ -897,15 +902,15 @@ void QDeclarativeGraphicsGeoMap::internalCenterChanged(const QGeoCoordinate &coo emit declarativeCenterChanged(new QDeclarativeCoordinate(coordinate, this)); } -void QDeclarativeGraphicsGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType) -{ - emit mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType(mapType)); -} +//void QDeclarativeGraphicsGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType) +//{ +// emit mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType(mapType)); +//} -void QDeclarativeGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode) -{ - emit connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode(connectivityMode)); -} +//void QDeclarativeGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode) +//{ +// emit connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode(connectivityMode)); +//} /*! \qmlmethod Map::addMapObject(MapObject) @@ -924,15 +929,15 @@ void QDeclarativeGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap void QDeclarativeGraphicsGeoMap::addMapObject(QDeclarativeGeoMapObject *object) { - if (!mapData_) - qmlInfo(this) << tr("Map plugin is not set, map object cannot be added."); - if (!mapData_ || !object || objectMap_.contains(object->mapObject())) - return; - mapObjects_.append(object); - recursiveAddToObjectMap(object); - mapData_->addMapObject(object->mapObject()); - object->setMap(this); - emit objectsChanged(); +// if (!mapData_) +// qmlInfo(this) << tr("Map plugin is not set, map object cannot be added."); +// if (!mapData_ || !object || objectMap_.contains(object->mapObject())) +// return; +// mapObjects_.append(object); +// recursiveAddToObjectMap(object); +// mapData_->addMapObject(object->mapObject()); +// object->setMap(this); +// emit objectsChanged(); } /*! @@ -952,33 +957,40 @@ void QDeclarativeGraphicsGeoMap::addMapObject(QDeclarativeGeoMapObject *object) void QDeclarativeGraphicsGeoMap::removeMapObject(QDeclarativeGeoMapObject *object) { - if (!mapData_) - qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed."); - if (!mapData_ || !object || !objectMap_.contains(object->mapObject())) - return; - recursiveRemoveFromObjectMap(object->mapObject()); - mapObjects_.removeOne(object); - mapData_->removeMapObject(object->mapObject()); - object->setMap(0); - emit objectsChanged(); +// if (!mapData_) +// qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed."); +// if (!mapData_ || !object || !objectMap_.contains(object->mapObject())) +// return; +// objectMap_.remove(object->mapObject()); +// mapObjects_.removeOne(object); +// mapData_->removeMapObject(object->mapObject()); +// if (!mapData_) +// qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed."); +// if (!mapData_ || !object || !objectMap_.contains(object->mapObject())) +// return; +// recursiveRemoveFromObjectMap(object->mapObject()); +// mapObjects_.removeOne(object); +// mapData_->removeMapObject(object->mapObject()); +// object->setMap(0); +// emit objectsChanged(); } // TODO document. Removes all map items that are added with addMapObject, // leaves objects from model intact. void QDeclarativeGraphicsGeoMap::clearMapObjects() { - if (!mapData_ || mapObjects_.isEmpty()) - return; - QList<QDeclarativeGeoMapObject*> mapObjects = mapObjects_; - for (int i = 0; i < mapObjects.count(); ++ i) { - if (!objectMap_.contains(mapObjects.at(i)->mapObject())) - continue; - recursiveRemoveFromObjectMap(mapObjects.at(i)->mapObject()); - mapObjects_.removeOne(mapObjects.at(i)); - mapData_->removeMapObject(mapObjects.at(i)->mapObject()); - mapObjects.at(i)->setMap(0); - } - emit objectsChanged(); + //if (!mapData_ || mapObjects_.isEmpty()) + // return; + //QList<QDeclarativeGeoMapObject*> mapObjects = mapObjects_; + //for (int i = 0; i < mapObjects.count(); ++ i) { + // if (!objectMap_.contains(mapObjects.at(i)->mapObject())) + // continue; + // recursiveRemoveFromObjectMap(mapObjects.at(i)->mapObject()); + // mapObjects_.removeOne(mapObjects.at(i)); + // mapData_->removeMapObject(mapObjects.at(i)->mapObject()); + // mapObjects.at(i)->setMap(0); + //} + //emit objectsChanged(); } void QDeclarativeGraphicsGeoMap::setActiveMouseArea(QDeclarativeGeoMapMouseArea *area) @@ -994,7 +1006,8 @@ QDeclarativeGeoMapMouseArea* QDeclarativeGraphicsGeoMap::activeMouseArea() const // This function is strictly for testing purposes int QDeclarativeGraphicsGeoMap::testGetDeclarativeMapObjectCount() { - return objectMap_.values().count(); +// return objectMap_.values().count(); + return 0; } #include "moc_qdeclarativegraphicsgeomap_p.cpp" diff --git a/src/imports/location/qdeclarativegraphicsgeomap_p.h b/src/imports/location/qdeclarativegraphicsgeomap_p.h index c2da9ce8..0fca4deb 100644 --- a/src/imports/location/qdeclarativegraphicsgeomap_p.h +++ b/src/imports/location/qdeclarativegraphicsgeomap_p.h @@ -42,7 +42,7 @@ #ifndef QDECLARATIVEGRAPHICSGEOMAP_H #define QDECLARATIVEGRAPHICSGEOMAP_H -#include <qgraphicsgeomap.h> +//#include <qgraphicsgeomap.h> #include <QPointer> #include <QtDeclarative/qsgitem.h> #include <QtDeclarative/QDeclarativeListProperty> @@ -52,11 +52,11 @@ QT_BEGIN_NAMESPACE class QGeoCoordinate; -class QGeoMapObject; -class QGeoMapData; +class QGeoMappingManager; class QGeoServiceProvider; class QDeclarativeCoordinate; class QDeclarativeGeoServiceProvider; +class QStyleOptionGraphicsItem; // !!! IMPORTANT !!! // @@ -80,27 +80,27 @@ class QDeclarativeGraphicsGeoMap : public QSGItem Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel CONSTANT) Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel CONSTANT) Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) - Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged) +// Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged) Q_PROPERTY(QDeclarativeCoordinate* center READ center WRITE setCenter NOTIFY declarativeCenterChanged) Q_PROPERTY(QDeclarativeListProperty<QDeclarativeGeoMapObject> objects READ objects NOTIFY objectsChanged) - Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged) + //Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged) Q_INTERFACES(QDeclarativeParserStatus) public: - enum MapType { - NoMap = QGraphicsGeoMap::NoMap, - StreetMap = QGraphicsGeoMap::StreetMap, - SatelliteMapDay = QGraphicsGeoMap::SatelliteMapDay, - SatelliteMapNight = QGraphicsGeoMap::SatelliteMapNight, - TerrainMap = QGraphicsGeoMap::TerrainMap - }; - - enum ConnectivityMode { - NoConnectivity = QGraphicsGeoMap::NoConnectivity, - OfflineMode = QGraphicsGeoMap::OfflineMode, - OnlineMode = QGraphicsGeoMap::OnlineMode, - HybridMode = QGraphicsGeoMap::HybridMode - }; +// enum MapType { +// NoMap = QGraphicsGeoMap::NoMap, +// StreetMap = QGraphicsGeoMap::StreetMap, +// SatelliteMapDay = QGraphicsGeoMap::SatelliteMapDay, +// SatelliteMapNight = QGraphicsGeoMap::SatelliteMapNight, +// TerrainMap = QGraphicsGeoMap::TerrainMap +// }; + +// enum ConnectivityMode { +// NoConnectivity = QGraphicsGeoMap::NoConnectivity, +// OfflineMode = QGraphicsGeoMap::OfflineMode, +// OnlineMode = QGraphicsGeoMap::OnlineMode, +// HybridMode = QGraphicsGeoMap::HybridMode +// }; public: QDeclarativeGraphicsGeoMap(QSGItem *parent = 0); @@ -133,11 +133,11 @@ public: void setCenter(QDeclarativeCoordinate *center); QDeclarativeCoordinate* center(); - void setMapType(MapType mapType); - MapType mapType() const; +// void setMapType(MapType mapType); +// MapType mapType() const; - void setConnectivityMode(ConnectivityMode connectivityMode); - ConnectivityMode connectivityMode() const; +// void setConnectivityMode(ConnectivityMode connectivityMode); +// ConnectivityMode connectivityMode() const; QDeclarativeListProperty<QDeclarativeGeoMapObject> objects(); static void objects_append(QDeclarativeListProperty<QDeclarativeGeoMapObject>* prop, QDeclarativeGeoMapObject* object); @@ -160,7 +160,7 @@ public: void setActiveMouseArea(QDeclarativeGeoMapMouseArea *area); QDeclarativeGeoMapMouseArea* activeMouseArea() const; - QGeoMapData* mapData() {return mapData_;} + //QGeoMapData* mapData() {return mapData_;} public Q_SLOTS: void pan(int dx, int dy); @@ -182,14 +182,14 @@ Q_SIGNALS: void sizeChanged(const QSizeF &size); void zoomLevelChanged(qreal zoomLevel); void declarativeCenterChanged(const QDeclarativeCoordinate *coordinate); - void mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType mapType); - void connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode); +// void mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType mapType); +// void connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode); private Q_SLOTS: void updateMapDisplay(const QRectF& target); void internalCenterChanged(const QGeoCoordinate &coordinate); - void internalMapTypeChanged(QGraphicsGeoMap::MapType mapType); - void internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode); +// void internalMapTypeChanged(QGraphicsGeoMap::MapType mapType); +// void internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode); void centerLatitudeChanged(double latitude); void centerLongitudeChanged(double longitude); void centerAltitudeChanged(double altitude); @@ -198,25 +198,25 @@ private: void setupMapView(QDeclarativeGeoMapObjectView *view); void populateMap(); void recursiveAddToObjectMap(QDeclarativeGeoMapObject *mapObject); - void recursiveRemoveFromObjectMap(QGeoMapObject *mapObject); + //void recursiveRemoveFromObjectMap(QGeoMapObject *mapObject); QDeclarativeGeoMapObject* createItem(int modelIndex); QDeclarativeGeoMapMouseEvent* createMapMouseEvent(QGraphicsSceneMouseEvent *event); QDeclarativeGeoMapMouseEvent* createMapMouseEvent(QGraphicsSceneHoverEvent *event); QDeclarativeGeoServiceProvider* plugin_; - QGeoMapData* mapData_; +// QGeoMapData* mapData_; qreal zoomLevel_; QPointer<QDeclarativeCoordinate> center_; QGeoCoordinate* initialCoordinate; - QDeclarativeGraphicsGeoMap::MapType mapType_; - QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode_; +// QDeclarativeGraphicsGeoMap::MapType mapType_; +// QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode_; QSizeF size_; QList<QDeclarativeGeoMapObject*> mapObjects_; - QHash<QGeoMapObject*, QDeclarativeGeoMapObject*> objectMap_; +// QHash<QGeoMapObject*, QDeclarativeGeoMapObject*> objectMap_; bool componentCompleted_; QList<QDeclarativeGeoMapObjectView*> mapViews_; diff --git a/src/imports/location/qdeclarativeposition_p.h b/src/imports/location/qdeclarativeposition_p.h index 565742ae..635c9096 100644 --- a/src/imports/location/qdeclarativeposition_p.h +++ b/src/imports/location/qdeclarativeposition_p.h @@ -46,7 +46,7 @@ #include <QDateTime> #include <qgeopositioninfosource.h> #include <qgeopositioninfo.h> -#include <qdeclarativecoordinate_p.h> +#include "qdeclarativecoordinate_p.h" #include <QtDeclarative/qdeclarative.h> // Define this to get qDebug messages diff --git a/src/imports/qimportbase.pri b/src/imports/qimportbase.pri deleted file mode 100644 index 405af24e..00000000 --- a/src/imports/qimportbase.pri +++ /dev/null @@ -1,38 +0,0 @@ -load(qt_module) - -symbian:load(qt_plugin) -TEMPLATE = lib -CONFIG += qt plugin - -win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release - -isEmpty(TARGETPATH) { - error("qimportbase.pri: You must provide a TARGETPATH!") -} -isEmpty(TARGET) { - error("qimportbase.pri: You must provide a TARGET!") -} - -QMLDIRFILE = $${_PRO_FILE_PWD_}/qmldir -copy2build.input = QMLDIRFILE -copy2build.output = $$QT.declarative.imports/$$TARGETPATH/qmldir -!contains(TEMPLATE_PREFIX, vc):copy2build.variable_out = PRE_TARGETDEPS -copy2build.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} -copy2build.name = COPY ${QMAKE_FILE_IN} -copy2build.CONFIG += no_link -# `clean' should leave the build in a runnable state, which means it shouldn't delete qmldir -copy2build.CONFIG += no_clean -QMAKE_EXTRA_COMPILERS += copy2build - -TARGET = $$qtLibraryTarget($$TARGET) -contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols - -load(qt_targets) - -wince*:LIBS += $$QMAKE_LIBS_GUI - -symbian: { - TARGET.EPOCALLOWDLLDATA=1 - TARGET.CAPABILITY = All -Tcb - load(armcc_warnings) -} diff --git a/src/location/location.pro b/src/location/location.pro index 8e6d89ba..63fd8ce0 100644 --- a/src/location/location.pro +++ b/src/location/location.pro @@ -17,15 +17,9 @@ load(qt_module_config) HEADERS += qtlocationversion.h include(maps/maps.pri) +include(mapsgl/mapsgl.pri) include(places/places.pri) -contains(proj_enabled, yes) { - LIBS += -lproj -} else { - include($$PWD/../3rdparty/proj.pri) - LIBS += -L$$OUT_PWD/../3rdparty -lproj -} - PUBLIC_HEADERS += \ qgeoaddress.h \ qgeoareamonitor.h \ @@ -51,7 +45,6 @@ PRIVATE_HEADERS += \ qlocationutils_p.h \ qnmeapositioninfosource_p.h \ qgeoareamonitor_polling_p.h \ - projwrapper_p.h \ qgeocoordinate_p.h symbian { @@ -145,7 +138,6 @@ SOURCES += \ qlocationutils.cpp \ qnmeapositioninfosource.cpp \ qgeoareamonitor_polling.cpp \ - projwrapper_p.cpp \ qgeopositioninfosourcefactory.cpp symbian { diff --git a/src/location/maps/maps.pri b/src/location/maps/maps.pri index ffe5bd8e..01603279 100644 --- a/src/location/maps/maps.pri +++ b/src/location/maps/maps.pri @@ -1,28 +1,13 @@ INCLUDEPATH += maps -include(tiled/tiled.pri) - PUBLIC_HEADERS += \ maps/qgeocodingmanager.h \ maps/qgeocodingmanagerengine.h \ maps/qgeocodereply.h \ maps/qgeomaneuver.h \ - maps/qgeomapcircleobject.h \ - maps/qgeomapcustomobject.h \ - maps/qgeomapdata.h \ - maps/qgeomapgroupobject.h \ - maps/qgeomapobject.h \ - maps/qgeomapobjectinfo.h \ - maps/qgeomapoverlay.h \ maps/qgeomappingmanager.h \ maps/qgeomappingmanagerengine.h \ - maps/qgeomappixmapobject.h \ - maps/qgeomappolygonobject.h \ - maps/qgeomappolylineobject.h \ - maps/qgeomaprectangleobject.h \ - maps/qgeomaprouteobject.h \ - maps/qgeomaptextobject.h \ maps/qgeoroute.h \ maps/qgeoroutereply.h \ maps/qgeorouterequest.h \ @@ -31,28 +16,15 @@ PUBLIC_HEADERS += \ maps/qgeoroutingmanagerengine.h \ maps/qgeoserviceprovider.h \ maps/qgeoserviceproviderfactory.h \ - maps/qgraphicsgeomap.h + maps/qgeotiledmapreply.h PRIVATE_HEADERS += \ maps/qgeocodingmanager_p.h \ maps/qgeocodingmanagerengine_p.h \ maps/qgeocodereply_p.h \ maps/qgeomaneuver_p.h \ - maps/qgeomapcircleobject_p.h \ - maps/qgeomapcustomobject_p.h \ - maps/qgeomapdata_p.h \ - maps/qgeomapgroupobject_p.h \ - maps/qgeomapobject_p.h \ - maps/qgeomapobjectinfo_p.h \ - maps/qgeomapoverlay_p.h \ maps/qgeomappingmanager_p.h \ maps/qgeomappingmanagerengine_p.h \ - maps/qgeomappixmapobject_p.h \ - maps/qgeomappolygonobject_p.h \ - maps/qgeomappolylineobject_p.h \ - maps/qgeomaprectangleobject_p.h \ - maps/qgeomaprouteobject_p.h \ - maps/qgeomaptextobject_p.h \ maps/qgeoroute_p.h \ maps/qgeoroutereply_p.h \ maps/qgeorouterequest_p.h \ @@ -60,28 +32,15 @@ PRIVATE_HEADERS += \ maps/qgeoroutingmanager_p.h \ maps/qgeoroutingmanagerengine_p.h \ maps/qgeoserviceprovider_p.h \ - maps/qgraphicsgeomap_p.h \ - maps/qgeomapobjectengine_p.h + maps/qgeotiledmapreply_p.h SOURCES += \ maps/qgeocodingmanager.cpp \ maps/qgeocodingmanagerengine.cpp \ maps/qgeocodereply.cpp \ maps/qgeomaneuver.cpp \ - maps/qgeomapcircleobject.cpp \ - maps/qgeomapcustomobject.cpp \ - maps/qgeomapdata.cpp \ - maps/qgeomapgroupobject.cpp \ - maps/qgeomapobject.cpp \ - maps/qgeomapoverlay.cpp \ maps/qgeomappingmanager.cpp \ maps/qgeomappingmanagerengine.cpp \ - maps/qgeomappixmapobject.cpp \ - maps/qgeomappolygonobject.cpp \ - maps/qgeomappolylineobject.cpp \ - maps/qgeomaprectangleobject.cpp \ - maps/qgeomaprouteobject.cpp \ - maps/qgeomaptextobject.cpp \ maps/qgeoroute.cpp \ maps/qgeoroutereply.cpp \ maps/qgeorouterequest.cpp \ @@ -90,6 +49,4 @@ SOURCES += \ maps/qgeoroutingmanagerengine.cpp \ maps/qgeoserviceprovider.cpp \ maps/qgeoserviceproviderfactory.cpp \ - maps/qgraphicsgeomap.cpp \ - maps/qgeomapobjectinfo.cpp \ - maps/qgeomapobjectengine_p.cpp + maps/qgeotiledmapreply.cpp diff --git a/src/location/maps/qgeomapcircleobject.cpp b/src/location/maps/qgeomapcircleobject.cpp deleted file mode 100644 index 9da75184..00000000 --- a/src/location/maps/qgeomapcircleobject.cpp +++ /dev/null @@ -1,340 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapcircleobject.h" -#include "qgeomapcircleobject_p.h" - -#include "qgeocoordinate.h" - -#include <QDebug> - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapCircleObject - \brief The QGeoMapCircleObject class is a QGeoMapObject used to draw the region - within a given distance of a coordinate. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The circle is specified by either a valid QGeoBoundingCircle instance or a - valid QGeoCoordinate instance and a qreal with value greater than 0.0, - which represent the center of the circle and the radius of the circle in - metres respectively. - - The circle may appear as an ellipse on maps which use the Mercator - projection. This is done so that the circle accurately covers all points at - a distance of the radius or less from the center. -*/ - -/*! - Constructs a new circle object. -*/ -QGeoMapCircleObject::QGeoMapCircleObject() - : d_ptr(new QGeoMapCircleObjectPrivate()) -{ - setUnits(QGeoMapObject::MeterUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Constructs a new circle object based on the circle \a circle. -*/ -QGeoMapCircleObject::QGeoMapCircleObject(const QGeoBoundingCircle &circle) - : d_ptr(new QGeoMapCircleObjectPrivate()) -{ - d_ptr->circle = circle; - setUnits(QGeoMapObject::MeterUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Constructs a new circle object with a center at coordinate \a center - and a radius in meters of \a radius. -*/ -QGeoMapCircleObject::QGeoMapCircleObject(const QGeoCoordinate ¢er, qreal radius) - : d_ptr(new QGeoMapCircleObjectPrivate()) -{ - d_ptr->circle = QGeoBoundingCircle(center, radius); - setUnits(QGeoMapObject::MeterUnit); - setTransformType(QGeoMapObject::ExactTransform); - setOrigin(center); -} - -/*! - Destroys this circle object. -*/ -QGeoMapCircleObject::~QGeoMapCircleObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapCircleObject::type() const -{ - return QGeoMapObject::CircleType; -} - -/*! - \property QGeoMapCircleObject::pen - \brief This property holds the pen that will be used to draw this object. - - The pen is used to draw an outline around the circle. The circle is - filled using the QGeoMapCircleObject::brush property. - - The pen will be treated as a cosmetic pen, which means that the width - of the pen will be independent of the zoom level of the map. -*/ -void QGeoMapCircleObject::setPen(const QPen &pen) -{ - QPen newPen = pen; - newPen.setCosmetic(true); - const QPen oldPen = d_ptr->pen; - - if (oldPen == newPen) - return; - - d_ptr->pen = newPen; - emit penChanged(newPen); -} - -QPen QGeoMapCircleObject::pen() const -{ - return d_ptr->pen; -} - -/*! - \reimp - */ -bool QGeoMapCircleObject::contains(const QGeoCoordinate &coordinate) const -{ - return d_ptr->circle.contains(coordinate); -} - -/*! - \property QGeoMapCircleObject::brush - \brief This property holds the brush that will be used to draw this object. - - The brush is used to fill in circle. - - The outline around the perimeter of the circle is drawn using the - QGeoMapCircleObject::pen property. -*/ -void QGeoMapCircleObject::setBrush(const QBrush &brush) -{ - if (d_ptr->brush != brush) { - d_ptr->brush = brush; - emit brushChanged(brush); - } -} - -QBrush QGeoMapCircleObject::brush() const -{ - return d_ptr->brush; -} - -/*! - \property QGeoMapCircleObject::pointCount - \brief This property holds the number of vertices used in an approximate polygon. - - \since 1.2 - - For a circle using ExactTransform, this property describes the number - of sides that should be used to generate a polygonal approximation which - is then transformed vertex-by-vertex into screen coordinates. -*/ -quint32 QGeoMapCircleObject::pointCount() const -{ - return d_ptr->pointCount; -} - -void QGeoMapCircleObject::setPointCount(quint32 pointCount) -{ - d_ptr->pointCount = pointCount; -} - -/*! - Returns a QGeoBoundingCircle instance which corresponds to the circle that - will be drawn by this object. - - This is equivalent to - \code - QGeoMapCircleObject *object; - // setup object - QGeoBoundingCircle(object->center(), object->radius()); - \endcode -*/ -QGeoBoundingCircle QGeoMapCircleObject::circle() const -{ - return d_ptr->circle; -} - -/*! - Sets the circle that will be drawn by this object to \a circle. - - This is equivalent to - \code - QGeoMapCircleObject *object; - // setup object - object->setCenter(circle.center()); - object->setRadius(circle.radius()); - \endcode -*/ -void QGeoMapCircleObject::setCircle(const QGeoBoundingCircle &circle) -{ - QGeoBoundingCircle oldCircle = d_ptr->circle; - - if (oldCircle == circle) - return; - - d_ptr->circle = circle; - setOrigin(circle.center()); - setRadius(circle.radius()); - - if (oldCircle.center() != d_ptr->circle.center()) - emit centerChanged(d_ptr->circle.center()); - - if (oldCircle.radius() != d_ptr->circle.radius()) - emit radiusChanged(d_ptr->circle.radius()); -} - -/*! - \property QGeoMapCircleObject::center - - \brief This property holds the coordinate of the center of the circle to be - drawn by this circle object. - - The default value of this property is an invalid coordinate. While the - value of this property is invalid the circle object will not be displayed. -*/ -void QGeoMapCircleObject::setCenter(const QGeoCoordinate ¢er) -{ - if (d_ptr->circle.center() != center) { - d_ptr->circle.setCenter(center); - setOrigin(center); - emit centerChanged(center); - } -} - -QGeoCoordinate QGeoMapCircleObject::center() const -{ - return d_ptr->circle.center(); -} - -/*! - \property QGeoMapCircleObject::radius - \brief This property holds the radius in metres of the circle that will be - drawn by this circle object. - - The default value of this property is -1.0. While the value of this - property is not greater than 0 the circle object will not be displayed. -*/ -void QGeoMapCircleObject::setRadius(qreal radius) -{ - if (d_ptr->circle.radius() != radius) { - d_ptr->circle.setRadius(radius); - emit radiusChanged(radius); - } -} - -qreal QGeoMapCircleObject::radius() const -{ - return d_ptr->circle.radius(); -} - -/*! -\fn void QGeoMapCircleObject::centerChanged(const QGeoCoordinate ¢er) - - This signal is emitted when the center of the circle object has - changed. - - The new value is \a center. -*/ - -/*! -\fn void QGeoMapCircleObject::radiusChanged(qreal radius) - - This signal is emitted when the radius of the circle object has - changed. - - The new value is \a radius. -*/ - -/*! -\fn void QGeoMapCircleObject::penChanged(const QPen &pen) - - This signal is emitted when the pen used to draw the edge of - the circle object has changed. - - The new value is \a pen. -*/ - -/*! -\fn void QGeoMapCircleObject::brushChanged(const QBrush &brush) - - This signal is emitted when the brush used to fill the inside of - the circle object has changed. - - The new value is \a brush. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapCircleObjectPrivate::QGeoMapCircleObjectPrivate() : - pointCount(120) -{ - pen.setCosmetic(true); -} - -QGeoMapCircleObjectPrivate::~QGeoMapCircleObjectPrivate() -{ -} - -#include "moc_qgeomapcircleobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomapcircleobject.h b/src/location/maps/qgeomapcircleobject.h deleted file mode 100644 index 5fce4504..00000000 --- a/src/location/maps/qgeomapcircleobject.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPCIRCLEOBJECT_H -#define QGEOMAPCIRCLEOBJECT_H - -#include "qgeomapobject.h" - -#include <QMetaType> -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -class QGeoCoordinate; -class QGeoBoundingCircle; -class QGeoMapCircleObjectPrivate; - -class Q_LOCATION_EXPORT QGeoMapCircleObject : public QGeoMapObject -{ - Q_OBJECT -public: - Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged) - Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged) - Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged) - Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged) - Q_PROPERTY(quint32 pointCount READ pointCount WRITE setPointCount) - - QGeoMapCircleObject(); - QGeoMapCircleObject(const QGeoBoundingCircle &circle); - QGeoMapCircleObject(const QGeoCoordinate ¢er, qreal radius); - ~QGeoMapCircleObject(); - - QGeoMapObject::Type type() const; - - QGeoBoundingCircle circle() const; - void setCircle(const QGeoBoundingCircle &circle); - - bool contains(const QGeoCoordinate &coordinate) const; - - QGeoCoordinate center() const; - void setCenter(const QGeoCoordinate ¢er); - - qreal radius() const; - void setRadius(qreal radius); - - QPen pen() const; - void setPen(const QPen &pen); - - QBrush brush() const; - void setBrush(const QBrush &brush); - - quint32 pointCount() const; - void setPointCount(quint32 pointCount); - -Q_SIGNALS: - void centerChanged(const QGeoCoordinate ¢er); - void radiusChanged(qreal radius); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); - -private: - QGeoMapCircleObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapCircleObject) - Q_DISABLE_COPY(QGeoMapCircleObject) -}; - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(qreal) - -#endif diff --git a/src/location/maps/qgeomapcircleobject_p.h b/src/location/maps/qgeomapcircleobject_p.h deleted file mode 100644 index 565f6b3c..00000000 --- a/src/location/maps/qgeomapcircleobject_p.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPCIRCLEOBJECT_P_H -#define QGEOMAPCIRCLEOBJECT_P_H - -#include <QPen> -#include <QBrush> - -#include "qgeoboundingcircle.h" - -QT_BEGIN_NAMESPACE - -class QGeoMapCircleObjectPrivate -{ -public: - QGeoMapCircleObjectPrivate(); - ~QGeoMapCircleObjectPrivate(); - - QGeoBoundingCircle circle; - QPen pen; - QBrush brush; - quint32 pointCount; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomapcustomobject.cpp b/src/location/maps/qgeomapcustomobject.cpp deleted file mode 100644 index 77203818..00000000 --- a/src/location/maps/qgeomapcustomobject.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapcustomobject.h" -#include "qgeomapcustomobject_p.h" -#include "qgeoboundingbox.h" - -#include <QGraphicsItem> - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapCustomObject - \brief The QGeoMapCustomObject class is a QGeoMapObject used to draw - a QGraphicsItem on a map. - - \inmodule QtLocation - - \ingroup maps-mapping-objects - \since 1.2 - - Any arbitrary QGraphicsItem can be associated with a QGeoMapCustomObject, and to - this end it contains support for interpreting the coordinates of the - QGraphicsItem in a variety of different ways. - - For example, the following code creates a QGraphicsEllipseItem and a - QGeoMapCustomObject to display it. The EllipseItem extends from the origin point, - out 20 meters to the east and 30 metres south. - - \code - QGraphicsEllipseItem *ellipseItem = new QGraphicsEllipseItem; - ellipseItem->setRect(0, 0, 20, 30); - - QGeoMapCustomObject *mapObject = new QGeoMapCustomObject; - mapObject->setGraphicsItem(ellipseItem); - mapObject->setUnits(QGeoMapObject::MeterUnit); - mapObject->setOrigin(QGeoCoordinate(-27.5796, 153.1)); - \endcode - - \section2 Units and coordinates - - The local units and coordinates of the QGraphicsItem are transformed - onto the map based on the \a units, \a origin, \a transformType and - \a transform properties. Several systems are available, including - pixels, meters and seconds of arc. - - It should be noted that both pixel and meter coordinate systems are south- - oriented (ie, positive Y axis faces south on the map). However, the - RelativeArcSeconds unit system faces north to align with the standard - latitude grid. The Y axis can be flipped if necessary by making use of the - GraphicsItem's \a transform property - - \code - QTransform northFlip; - northFlip.scale(0, -1); - - ellipseItem->setTransform(northFlip); - \endcode - - \section2 Transform methods - - Normally, the GraphicsItem will be transformed into map coordinates using - a bilinear interpolation. Another option is the ExactTransform, which - converts the GraphicsItem exactly into map coordinates, but is only available - for certain subclasses of QGraphicsItem. Other interpolation methods may - be provided in future for greater accuracy near poles and in different - map projections, without the limitations of ExactTransform. - - Calling setUnits() or setting the units property will result in the - default value of transformType being restored. See QGeoMapObject::transformType - for more details. - - \section2 Caveats - - Other than the coordinate system features, there are a few differences - with using QGraphicsItems on a map compared to using them on a standard - QGraphicsScene. One of the most important of these is the use of the - \a update() function. When an application changes anything that has an - effect upon the appearance, size, shape etc of the QGraphicsItem, it - must call \a QGeoMapCustomObject::update() to ensure that the map is updated. - - Another is the use of child items of a QGraphicsItem. These are supported - in more or less the same manner as in QGraphicsScene, with the exception - of use in concert with \a ExactTransform -- any object with transformType - set to \a ExactTransform will not have children of its QGraphicsItem drawn - on the map. -*/ - -/*! - Constructs a new custom object. -*/ -QGeoMapCustomObject::QGeoMapCustomObject() - : d_ptr(new QGeoMapCustomObjectPrivate()) -{ -} - -/*! - Constructs a new custom object which will draw a QGraphicsItem at an - offset of \a offset pixels from the coordinate \a coordinate. -*/ -QGeoMapCustomObject::QGeoMapCustomObject(const QGeoCoordinate &coordinate, const QPoint &offset) - : d_ptr(new QGeoMapCustomObjectPrivate()) -{ - setOrigin(coordinate); - d_ptr->offset = offset; -} - -/*! - Destroys this custom object. -*/ -QGeoMapCustomObject::~QGeoMapCustomObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapCustomObject::type() const -{ - return QGeoMapObject::CustomType; -} - -/*! - If the graphics item is modified this - method should be called immediately afterwards to inform - the map that an update is required. . - - This method causes the triggerUpdate() signal to be emitted. -*/ -void QGeoMapCustomObject::update() -{ - emit triggerUpdate(); -} - -/*! -\fn void QGeoMapCustomObject::triggerUpdate() - - This signal indicates that the graphics item has - changed and that the map needs to be updated. -*/ - -/*! - \property QGeoMapCustomObject::graphicsItem - \brief This property holds the graphics item which will - be drawn by this custom object. - - If the graphics item is 0 then nothing will be drawn. -*/ - -QGraphicsItem* QGeoMapCustomObject::graphicsItem() const -{ - return d_ptr->graphicsItem; -} - -void QGeoMapCustomObject::setGraphicsItem(QGraphicsItem *graphicsItem) -{ - if (d_ptr->graphicsItem == graphicsItem) - return; - - d_ptr->graphicsItem = graphicsItem; - - emit graphicsItemChanged(graphicsItem); -} - -/*! -\fn void QGeoMapCustomObject::graphicsItemChanged(QGraphicsItem *graphicsItem) - - This signal is emitted when the graphics item which this custom object - draws is changed. - - The new value will be \a graphicsItem. -*/ - -/*! - \property QGeoMapCustomObject::offset - \brief This property holds the offset in pixels at which the graphics - item will be drawn by this custom object. - - The default value of this property is QPoint(0, 0). If this value is not - changed the upper left coordinate of the graphics item will be drawn at the - coordinate specified by QGeoMapCustomObject::coordinate. - - The offset is in pixels and is independent of the zoom level of the map. -*/ -QPoint QGeoMapCustomObject::offset() const -{ - return d_ptr->offset; -// QPointF pt = d_ptr->offset; -// -// QPoint rounded; -// rounded.setX(int(pt.x() > 0 ? pt.x() + 0.5 : pt.x() - 0.5)); -// rounded.setY(int(pt.y() > 0 ? pt.y() + 0.5 : pt.y() - 0.5)); -// -// return rounded; -} - -void QGeoMapCustomObject::setOffset(const QPoint &offset) -{ - if (d_ptr->offset != offset) { - d_ptr->offset = offset; - emit offsetChanged(offset); - } -} - -/*! -\fn void QGeoMapCustomObject::offsetChanged(const QPoint &offset) - - This signal is emitted when the on-screen offset from the coordinate - at which this custom object should be drawn has changed. - - The new value will be \a offset. -*/ - -/*! - Sets the origin of the object to \a origin. -*/ -void QGeoMapCustomObject::setOrigin(const QGeoCoordinate &origin) -{ - QGeoMapObject::setOrigin(origin); -} - -/*! - Sets the coordinate units of the object to \a unit. - - Note that setting this property will reset the transformType property to - the default for the units given. For PixelUnit, this is ExactTransform, - and for all others, BilinearTransform. -*/ -void QGeoMapCustomObject::setUnits(const CoordinateUnit &unit) -{ - QGeoMapObject::setUnits(unit); -} - -/*! - Sets the transform type of the object to \a type. -*/ -void QGeoMapCustomObject::setTransformType(const TransformType &type) -{ - QGeoMapObject::setTransformType(type); -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapCustomObjectPrivate::QGeoMapCustomObjectPrivate() - : graphicsItem(0) {} - -QGeoMapCustomObjectPrivate::~QGeoMapCustomObjectPrivate() -{ -} - -#include "moc_qgeomapcustomobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomapcustomobject_p.h b/src/location/maps/qgeomapcustomobject_p.h deleted file mode 100644 index 5387f193..00000000 --- a/src/location/maps/qgeomapcustomobject_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPCUSTOMOBJECT_P_H -#define QGEOMAPCUSTOMOBJECT_P_H - -#include "qgeocoordinate.h" - -#include <QPoint> - - -QT_BEGIN_NAMESPACE - -class QGraphicsItem; -class QGeoMapCustomObjectPrivate -{ -public: - QGeoMapCustomObjectPrivate(); - ~QGeoMapCustomObjectPrivate(); - - QGraphicsItem *graphicsItem; - QPoint offset; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomapdata.cpp b/src/location/maps/qgeomapdata.cpp deleted file mode 100644 index 6f7a2be3..00000000 --- a/src/location/maps/qgeomapdata.cpp +++ /dev/null @@ -1,836 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapdata.h" -#include "qgeomapdata_p.h" - -#include <QGraphicsScene> -#include <QGraphicsItem> -#include <QGraphicsPolygonItem> -#include <QGraphicsLineItem> -#include <QGraphicsEllipseItem> -#include <QGraphicsPathItem> - -#include "qgeoboundingbox.h" -#include "qgeocoordinate.h" -#include "qgraphicsgeomap.h" -#include "qgeomapobject.h" -#include "qgeomappixmapobject.h" -#include "qgeomapgroupobject.h" -#include "qgeomaptextobject.h" -#include "qgeomappingmanagerengine.h" -#include "qgeomapoverlay.h" - -#include "qgeomapobjectengine_p.h" -#include "qgeomapobject_p.h" -#include <private/projwrapper_p.h> - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapData - - \brief The QGeoMapData class are used as a bridge between QGraphicsGeoMap and - QGeoMappingManager. - - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-impl - - Instances of QGeoMapData are created with - QGeoMappingManager::createMapData(), and are used internally by - QGraphicsGeoMap to manage the state of the map and the associated - QGeoMapObject instances. - - Plugin implementers will need to provide implementations of - coordinateToScreenPosition(const QGeoCoordinate &coordinate) and - QGeoCoordinate screenPositionToCoordinate(const QPointF &screenPosition). - - The other virtual functions can be overridden. If the screen position to - coordinate tranformations are expensive then overriding these functions may - allow optimizations based on caching parts of the geometry information. - - Subclasses should override createMapObjectInfo() so that QGeoMapObjectInfo - instances will be created for each QGeoMapObject type in order to provide - the QGeoMapData subclass specific behaviours for the map objects. - */ - -/*! - Constructs a new map data object, which makes use of the functionality provided by \a engine. -*/ -QGeoMapData::QGeoMapData(QGeoMappingManagerEngine *engine) - : d_ptr(new QGeoMapDataPrivate(this, engine)) -{ - if (engine->supportedConnectivityModes().length() > 0) - setConnectivityMode(engine->supportedConnectivityModes().at(0)); - else - setConnectivityMode(QGraphicsGeoMap::NoConnectivity); -} - -/*! - \internal -*/ -QGeoMapData::QGeoMapData(QGeoMapDataPrivate *dd) : d_ptr(dd) {} - -/*! - Destroys this map data object. -*/ -QGeoMapData::~QGeoMapData() -{ - Q_D(QGeoMapData); - delete d; -} - -/*! - This function is run after the QGeoMapData instance has been - constructed. - - Any subclasses which override this function should make sure that - QGeoMapData::init() is called within the body of the overriding function. -*/ -void QGeoMapData::init() -{ - d_ptr->containerObject = new QGeoMapGroupObject(); - d_ptr->containerObject->setMapData(this); -} - -/*! - Returns the mapping engine that this map data object is associated with. -*/ -QGeoMappingManagerEngine* QGeoMapData::engine() const -{ - return d_ptr->engine; -} - -/*! - Returns the QGeoMapObject which acts as the parent to all QGeoMapObject - instances which are added to the map by the user. -*/ -QGeoMapObject* QGeoMapData::containerObject() -{ - return d_ptr->containerObject; -} - -/*! - Sets the size of the map viewport to \a size. - - The size will be adjusted by the associated QGraphicsGeoMap as it resizes. -*/ -void QGeoMapData::setWindowSize(const QSizeF &size) -{ - if (d_ptr->windowSize == size) - return; - - d_ptr->windowSize = size; - - if (!d_ptr->blockPropertyChangeSignals) - emit windowSizeChanged(d_ptr->windowSize); -} - -/*! - \property QGeoMapData::windowSize - Returns the size of the map viewport. - - The size will be adjusted by the associated QGraphicsGeoMap as it resizes. -*/ -QSizeF QGeoMapData::windowSize() const -{ - return d_ptr->windowSize; -} - -/*! - Sets the zoom level of the map to \a zoomLevel. - - Larger values of the zoom level correspond to more detailed views of the - map. - - If \a zoomLevel is less than minimumZoomLevel() then minimumZoomLevel() - will be used, and if \a zoomLevel is larger than - maximumZoomLevel() then maximumZoomLevel() will be used. -*/ -void QGeoMapData::setZoomLevel(qreal zoomLevel) -{ - zoomLevel = qMin(zoomLevel, d_ptr->engine->maximumZoomLevel()); - zoomLevel = qMax(zoomLevel, d_ptr->engine->minimumZoomLevel()); - - if (d_ptr->zoomLevel == zoomLevel) - return; - - d_ptr->zoomLevel = zoomLevel; - - if (!d_ptr->blockPropertyChangeSignals) - emit zoomLevelChanged(d_ptr->zoomLevel); -} - -/*! - \property QGeoMapData::zoomLevel - - Returns the zoom level of the map. - - Larger values of the zoom level correspond to more detailed views of the - map. -*/ -qreal QGeoMapData::zoomLevel() const -{ - return d_ptr->zoomLevel; -} - -/*! - \property QGeoMapData::supportsBearing - - Returns whether bearing is supported by this engine. -*/ -bool QGeoMapData::supportsBearing() const -{ - return d_ptr->engine->supportsBearing(); -} - -/*! - Sets the bearing of the map to \a bearing. - - Value in degrees in the range of 0-360. 0 being equivalent to 0 degrees from - north. -*/ -void QGeoMapData::setBearing(qreal bearing) -{ - if (!supportsBearing()) - return; - - bearing = qMin(bearing, qreal(360.0)); - bearing = qMax(bearing, qreal(0.0)); - - if (d_ptr->bearing == bearing) - return; - - d_ptr->bearing = bearing; - - if (!d_ptr->blockPropertyChangeSignals) - emit bearingChanged(d_ptr->bearing); -} - -/*! - \property QGeoMapData::bearing - - Returns the current bearing of the map. - - Value in degrees in the range of 0-360. 0 being equivalent to 0 degrees from - north. -*/ -qreal QGeoMapData::bearing() const -{ - return d_ptr->bearing; -} - -/*! - \property QGeoMapData::supportsTilting - - Returns whether tilting is supported by this engine. -*/ -bool QGeoMapData::supportsTilting() const -{ - return d_ptr->engine->supportsTilting(); -} - -/*! - \property QGeoMapData::minimumTilt - - Returns minimum tilt supported by this engine. -*/ -qreal QGeoMapData::minimumTilt() const -{ - return d_ptr->engine->minimumTilt(); -} - -/*! - \property QGeoMapData::maximumTilt - - Returns maximum tilt supported by this engine. -*/ -qreal QGeoMapData::maximumTilt() const -{ - return d_ptr->engine->maximumTilt(); -} - -/*! - Sets the tilt of the map to \a tilt. - - Value in degrees where 0 is equivalent to 90 degrees between view and earth's - surface i.e. looking straight down to earth. - - If \a tilt is less than minimumTilt() then minimumTilt() - will be used, and if \a tilt is larger than - maximumTilt() then maximumTilt() will be used. -*/ -void QGeoMapData::setTilt(qreal tilt) -{ - if (!supportsTilting()) - return; - - tilt = qMin(tilt, d_ptr->engine->maximumTilt()); - tilt = qMax(tilt, d_ptr->engine->minimumTilt()); - - if (d_ptr->tilt == tilt) - return; - - d_ptr->tilt = tilt; - - if (!d_ptr->blockPropertyChangeSignals) - emit tiltChanged(d_ptr->tilt); -} - -/*! - \property QGeoMapData::tilt - - Returns the current tilt of the map. - - Value in degrees where 0 is equivalent to 90 degrees between view and earth's - surface i.e. looking straight down to earth. -*/ -qreal QGeoMapData::tilt() const -{ - return d_ptr->tilt; -} - -/*! - Pans the map view \a dx pixels in the x direction and \a dy pixels - in the y direction. - - The x and y axes are specified in Graphics View Framework coordinates. - By default this will mean that positive values of \a dx move the - viewed area to the right and that positive values of \a dy move the - viewed area down. - - Subclasses should call QGeoMapData::setCenter() when the pan has completed. -*/ -void QGeoMapData::pan(int dx, int dy) -{ - QPointF pos = coordinateToScreenPosition(center()); - setCenter(screenPositionToCoordinate(QPointF(pos.x() + dx, pos.y() + dy))); -} - -/*! - Centers the map viewport on the coordinate \a center. -*/ -void QGeoMapData::setCenter(const QGeoCoordinate ¢er) -{ - if (d_ptr->center == center) - return; - - d_ptr->center = center; - - if (!d_ptr->blockPropertyChangeSignals) - emit centerChanged(d_ptr->center); -} - -/*! - \property QGeoMapData::center - - Returns the coordinate of the point in the center of the map viewport. -*/ -QGeoCoordinate QGeoMapData::center() const -{ - return d_ptr->center; -} - -/*! - Changes the type of map data to display to \a mapType. -*/ -void QGeoMapData::setMapType(QGraphicsGeoMap::MapType mapType) -{ - if (d_ptr->mapType == mapType) - return; - - d_ptr->mapType = mapType; - - if (!d_ptr->blockPropertyChangeSignals) - emit mapTypeChanged(mapType); -} - -/*! - \property QGeoMapData::mapType - - Returns the type of map data which is being displayed. -*/ -QGraphicsGeoMap::MapType QGeoMapData::mapType() const -{ - return d_ptr->mapType; -} - -/*! - Changes the connectivity mode of this map to \a connectivityMode -*/ -void QGeoMapData::setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode) -{ - if (d_ptr->connectivityMode == connectivityMode) - return; - - d_ptr->connectivityMode = connectivityMode; - - if (!d_ptr->blockPropertyChangeSignals) - emit connectivityModeChanged(connectivityMode); -} - -/*! - \property QGeoMapData::connectivityMode - - Returns the connectivity mode for this map. -*/ -QGraphicsGeoMap::ConnectivityMode QGeoMapData::connectivityMode() const -{ - return d_ptr->connectivityMode; -} - -/*! - Returns the map objects associated with this map. -*/ -QList<QGeoMapObject*> QGeoMapData::mapObjects() const -{ - return d_ptr->containerObject->childObjects(); -} - -/*! - Adds \a mapObject to the list of map objects managed by this map. - - The children objects are drawn in order of the QGeoMapObject::zValue() - value. Children objects having the same z value will be drawn - in the order they were added. - - The map will take ownership of the \a mapObject. -*/ -void QGeoMapData::addMapObject(QGeoMapObject *mapObject) -{ - d_ptr->addObject(mapObject); -} - -/*! - Removes \a mapObject from the list of map objects managed by this map. - The map will release ownership of the \a mapObject. -*/ -void QGeoMapData::removeMapObject(QGeoMapObject *mapObject) -{ - d_ptr->removeObject(mapObject); -} - -/*! - Clears the map objects associated with this map. - - The map objects will be deleted. -*/ -void QGeoMapData::clearMapObjects() -{ - d_ptr->clearObjects(); -} - -/*! - \fn QGeoBoundingBox QGeoMapData::viewport() const - Returns a bounding box corresponding to the physical area displayed - in the viewport of the map. - - The bounding box which is returned is defined by the upper left and - lower right corners of the visible area of the map. -*/ - -/*! - \fn void QGeoMapData::fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter) - - Attempts to fit the bounding box \a bounds into the viewport of the map. - - This method will change the zoom level to the maximum zoom level such - that all of \a bounds is visible within the resulting viewport. - - If \a preserveViewportCenter is false the map will be centered on the - bounding box \a bounds before the zoom level is changed, otherwise the - center of the map will not be changed. -*/ - -/*! - Returns the list of visible map objects managed by this map which - contain the point \a screenPosition within their boundaries. -*/ -QList<QGeoMapObject*> QGeoMapData::mapObjectsAtScreenPosition(const QPointF &screenPosition) const -{ - QList<QGeoMapObject*> results; - - QGeoCoordinate coord = screenPositionToCoordinate(screenPosition); - int childObjectCount = d_ptr->containerObject->childObjects().count(); - for (int i = 0; i < childObjectCount; ++i) { - QGeoMapObject *object = d_ptr->containerObject->childObjects().at(i); - if (object->contains(coord) && object->isVisible()) - results.append(object); - } - - return results; -} - -/*! - Returns the list of visible map objects managed by this map which are displayed at - least partially within the on screen rectangle \a screenRect. -*/ -QList<QGeoMapObject*> QGeoMapData::mapObjectsInScreenRect(const QRectF &screenRect) const -{ - QList<QGeoMapObject*> results; - - QGeoCoordinate topLeft = screenPositionToCoordinate(screenRect.topLeft()); - QGeoCoordinate bottomRight = screenPositionToCoordinate(screenRect.bottomRight()); - - QGeoBoundingBox bounds(topLeft, bottomRight); - - int childObjectCount = d_ptr->containerObject->childObjects().count(); - for (int i = 0; i < childObjectCount; ++i) { - QGeoMapObject *object = d_ptr->containerObject->childObjects().at(i); - if (bounds.intersects(object->boundingBox()) && object->isVisible()) - results.append(object); - } - - return results; -} - -/*! - Returns the list of visible map objects manager by this widget which - are displayed at least partially within the viewport of the map. -*/ -QList<QGeoMapObject*> QGeoMapData::mapObjectsInViewport() const -{ - return this->mapObjectsInScreenRect(QRectF(0.0, - 0.0, - d_ptr->windowSize.width(), - d_ptr->windowSize.height())); -} - -/*! -\fn QPointF QGeoMapData::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const - - Returns the position on the screen at which \a coordinate is displayed. - - An invalid QPointF will be returned if \a coordinate is invalid or is not - within the current viewport. -*/ - -/*! -\fn QGeoCoordinate QGeoMapData::screenPositionToCoordinate(const QPointF &screenPosition) const - - Returns the coordinate corresponding to the point in the viewport at \a - screenPosition. - - An invalid QGeoCoordinate will be returned if \a screenPosition is invalid - or is not within the current viewport. -*/ - -/*! - Paints the map and everything associated with it on \a painter, using the - options \a option. - - This will paint the map with paintMap(), then the map overlays with - QGeoMapOverlay::paint(), then the map objects with paintObjects(), and - finally paintProviderNotices(). -*/ -void QGeoMapData::paint(QPainter *painter, const QStyleOptionGraphicsItem *option) -{ - paintMap(painter, option); - - for (int i = 0; i < d_ptr->overlays.size(); ++i) - d_ptr->overlays[i]->paint(painter, option); - - paintObjects(painter, option); - - paintProviderNotices(painter, option); -} - -/*! - Paints the map on \a painter, using the options \a option. - - The map overlays, map objects and the provider notices (such as copyright - and powered by notices) are painted in separate methods, which are combined - in the paint() method. - - The default implementation does not paint anything. -*/ -void QGeoMapData::paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option) -{ - Q_UNUSED(painter) - Q_UNUSED(option) -} - -/*! - Paints the map objects on \a painter, using the options \a option. - - The default implementation makes use of the coordinateToScreenPosition - implemented by the subclass to perform object positioning and rendering. - - This implementation should suffice for most common use cases, and supports - the full range of coordinate systems and transforms available to a - QGeoMapObject. -*/ -void QGeoMapData::paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option) -{ - Q_UNUSED(painter) - Q_UNUSED(option) -} - -/*! - Paints the provider notices on \a painter, using the options \a option. - - The provider notices are things like the copyright and powered by notices. - - The provider may not want the client developers to be able to move the - notices from their standard positions and so we have not provided API - support for specifying the position of the notices at this time. - - If support for hinting at the position of the notices is to be provided by - plugin parameters, the suggested parameter keys are - "mapping.notices.copyright.alignment" and - "mapping.notices.poweredby.alignment", with type Qt::Alignment. - - The default implementation does not paint anything. -*/ -void QGeoMapData::paintProviderNotices(QPainter *painter, const QStyleOptionGraphicsItem *option) -{ - Q_UNUSED(painter) - Q_UNUSED(option) -} - -/*! - Creates a QGeoMapObjectInfo instance which implements the behaviours o - the map object \a object which are specific to this QGeoMapData. - - The default implementation returns 0. -*/ -QGeoMapObjectInfo *QGeoMapData::createMapObjectInfo(QGeoMapObject *object) -{ - Q_UNUSED(object); - return 0; -} - -/*! - Returns the map overlays associated with this map. -*/ -QList<QGeoMapOverlay*> QGeoMapData::mapOverlays() const -{ - return d_ptr->overlays; -} - -/*! - Adds \a overlay to the list of map overlays associated with this map. - - The overlays will be drawn in the order in which they were added. - - The map will take ownership of \a overlay. -*/ -void QGeoMapData::addMapOverlay(QGeoMapOverlay *overlay) -{ - if (!overlay) - return; - - overlay->setMapData(this); - d_ptr->overlays.append(overlay); -} - -/*! - Removes \a overlay from the list of map overlays associated with this map. - - The map will release ownership of \a overlay. -*/ -void QGeoMapData::removeMapOverlay(QGeoMapOverlay *overlay) -{ - if (!overlay) - return; - - d_ptr->overlays.removeAll(overlay); -} - -/*! - Clears the map overlays associated with this map. - - The map overlays will be deleted. -*/ -void QGeoMapData::clearMapOverlays() -{ - qDeleteAll(d_ptr->overlays); - d_ptr->overlays.clear(); -} - - -/*! - Sets whether changes to properties will trigger their corresponding signals to \a block. - - By default the QGeoMapData implementations of the property functions are used - which cause the property notification signals to be emitted immediately. - - Calling this function with \a block set to true will prevent these - signals from being called, which will allow a subclass to defer the - emission of the signal until a later time. - - If this function needs to be called it should be used as soon as possible, - preferably in the constructor of the QGeoMapData subclass. -*/ -void QGeoMapData::setBlockPropertyChangeSignals(bool block) -{ - d_ptr->blockPropertyChangeSignals = block; -} - -/*! -\fn void QGeoMapData::windowSizeChanged(const QSizeF &windowSize) - - This signal is emitted when the size of the window which contains - the map has changed. - - The new value is \a windowSize. -*/ - -/*! -\fn void QGeoMapData::zoomLevelChanged(qreal zoomLevel) - - This signal is emitted when the zoom level of the map has changed. - - The new value is \a zoomLevel. -*/ - -/*! -\fn void QGeoMapData::bearingChanged(qreal bearing) - - This signal is emitted when the bearing of the map has changed. - - The new value is \a bearing. -*/ - -/*! -\fn void QGeoMapData::tiltChanged(qreal tilt) - - This signal is emitted when the tilt of the map has changed. - - The new value is \a tilt. -*/ - -/*! -\fn void QGeoMapData::centerChanged(const QGeoCoordinate &coordinate) - - This signal is emitted when the center of the map has changed. - - The new value is \a coordinate. -*/ - -/*! -\fn void QGeoMapData::mapTypeChanged(QGraphicsGeoMap::MapType mapType) - - This signal is emitted when the type of the map has changes. - - The value is \a mapType. -*/ - -/*! -\fn void QGeoMapData::connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode) - - This signal is emitted when the connectivity mode used to fetch the - map data has changed. - - The new value is \a connectivityMode. -*/ - -/*! -\fn void QGeoMapData::updateMapDisplay(const QRectF &target) - - This signal is emitted when the region \a target of the window which - contains the map needs to be updated. - - - If \a target is empty then the entire map will be updated. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapDataPrivate::QGeoMapDataPrivate(QGeoMapData *parent, QGeoMappingManagerEngine *engine) - : QObject(0), - engine(engine), - containerObject(0), - zoomLevel(-1.0), - shiftSinceLastInval(0, 0), - bearing(0.0), - tilt(0.0), - windowSize(0, 0), - blockPropertyChangeSignals(false), - q_ptr(parent) -{} - -QGeoMapDataPrivate::~QGeoMapDataPrivate() -{ - if (containerObject) - delete containerObject; - qDeleteAll(overlays); -} - -void QGeoMapDataPrivate::addObject(QGeoMapObject *object) -{ - containerObject->addChildObject(object); - //emit q_ptr->updateMapDisplay(); -} - -void QGeoMapDataPrivate::removeObject(QGeoMapObject *object) -{ - containerObject->removeChildObject(object); -} - -void QGeoMapDataPrivate::clearObjects() -{ - foreach (QGeoMapObject *obj, containerObject->childObjects()) { - this->removeObject(obj); - delete obj; - } -} - -QPointF QGeoMapDataPrivate::coordinateToScreenPosition(double lon, double lat) const -{ - QGeoCoordinate c(lon, lat); - return q_ptr->coordinateToScreenPosition(c); -} - -void QGeoMapDataPrivate::emitUpdateMapDisplay(const QRectF &target) -{ - emit q_ptr->updateMapDisplay(target); -} - - -#include "moc_qgeomapdata.cpp" -#include "moc_qgeomapdata_p.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapdata.h b/src/location/maps/qgeomapdata.h deleted file mode 100644 index 20a22a24..00000000 --- a/src/location/maps/qgeomapdata.h +++ /dev/null @@ -1,171 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPDATA_H -#define QGEOMAPDATA_H - -#include "qgraphicsgeomap.h" - -#include <QObject> -#include <QSize> -#include <QRectF> -#include <QPainter> -#include <QStyleOptionGraphicsItem> - -QT_BEGIN_NAMESPACE - -class QGeoCoordinate; -class QGeoBoundingBox; -class QGeoMappingManagerEngine; -class QGeoMapObject; -class QGeoMapGroupObject; -class QGeoMapDataPrivate; -class QGeoMapOverlay; -class QGeoMapObjectInfo; - -class Q_LOCATION_EXPORT QGeoMapData : public QObject -{ - Q_OBJECT - Q_PROPERTY(QSizeF windowSize READ windowSize WRITE setWindowSize NOTIFY windowSizeChanged) - Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) - Q_PROPERTY(QGraphicsGeoMap::MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged) - Q_PROPERTY(QGraphicsGeoMap::ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged) - Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged) - Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged) - Q_PROPERTY(qreal minimumTilt READ minimumTilt CONSTANT) - Q_PROPERTY(qreal maximumTilt READ maximumTilt CONSTANT) - Q_PROPERTY(bool supportsTilting READ supportsTilting CONSTANT) - Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged) - Q_PROPERTY(bool supportsBearing READ supportsBearing CONSTANT) - -public: - QGeoMapData(QGeoMappingManagerEngine *engine); - virtual ~QGeoMapData(); - - virtual void init(); - - virtual void setWindowSize(const QSizeF &size); - virtual QSizeF windowSize() const; - - virtual void setZoomLevel(qreal zoomLevel); - virtual qreal zoomLevel() const; - - bool supportsBearing() const; - void setBearing(qreal bearing); - qreal bearing() const; - - bool supportsTilting() const; - void setTilt(qreal tilt); - qreal tilt() const; - qreal minimumTilt() const; - qreal maximumTilt() const; - - virtual void pan(int dx, int dy); - - virtual void setCenter(const QGeoCoordinate ¢er); - virtual QGeoCoordinate center() const; - - virtual void setMapType(QGraphicsGeoMap::MapType mapType); - virtual QGraphicsGeoMap::MapType mapType() const; - - virtual void setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode); - virtual QGraphicsGeoMap::ConnectivityMode connectivityMode() const; - - QList<QGeoMapObject*> mapObjects() const; - void addMapObject(QGeoMapObject *mapObject); - void removeMapObject(QGeoMapObject *mapObject); - void clearMapObjects(); - - virtual QGeoBoundingBox viewport() const = 0; - virtual void fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter = false) = 0; - - virtual QList<QGeoMapObject*> mapObjectsAtScreenPosition(const QPointF &screenPosition) const; - virtual QList<QGeoMapObject*> mapObjectsInScreenRect(const QRectF &screenRect) const; - virtual QList<QGeoMapObject*> mapObjectsInViewport() const; - - QList<QGeoMapOverlay*> mapOverlays() const; - void addMapOverlay(QGeoMapOverlay *overlay); - void removeMapOverlay(QGeoMapOverlay *overlay); - void clearMapOverlays(); - - virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const = 0; - virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &screenPosition) const = 0; - - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option); - -protected: - QGeoMapData(QGeoMapDataPrivate *dd); - - QGeoMappingManagerEngine* engine() const; - QGeoMapObject* containerObject(); - - void setBlockPropertyChangeSignals(bool block); - - virtual void paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option); - virtual void paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option); - virtual void paintProviderNotices(QPainter *painter, const QStyleOptionGraphicsItem *option); - - virtual QGeoMapObjectInfo* createMapObjectInfo(QGeoMapObject *object); - - QGeoMapDataPrivate* d_ptr; - -Q_SIGNALS: - void windowSizeChanged(const QSizeF &windowSize); - void zoomLevelChanged(qreal zoomLevel); - void centerChanged(const QGeoCoordinate &coordinate); - void mapTypeChanged(QGraphicsGeoMap::MapType mapType); - void connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode); - void updateMapDisplay(const QRectF &target = QRectF()); - void bearingChanged(qreal bearing); - void tiltChanged(qreal tilt); - -private: - Q_DECLARE_PRIVATE(QGeoMapData) - Q_DISABLE_COPY(QGeoMapData) - - friend class QGeoMapObject; - friend class QGeoMapObjectInfo; - friend class QGeoMapGroupObject; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomapgroupobject.cpp b/src/location/maps/qgeomapgroupobject.cpp deleted file mode 100644 index 07b19441..00000000 --- a/src/location/maps/qgeomapgroupobject.cpp +++ /dev/null @@ -1,316 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapgroupobject.h" -#include "qgeomapgroupobject_p.h" - -#include "qgeomapobject_p.h" -#include "qgeomapobjectengine_p.h" - -#include "qgeocoordinate.h" -#include "qgeoboundingbox.h" - -#include "qgeomapdata.h" -#include "qgeomapdata_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapGroupObject - \brief The QGeoMapGroupObject class is a QGeoMapObject used to - manager a group of other map objects. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The QGeoMapGroupObject class can be used to quickly add and remove - groups of objects to a map. - - The map objects contained in the group will be ordered relative to - one another in the usual manner, such that objects with higher z-values - will be drawn over objects with lower z-values and objects with - equal z-values will be drawn in insertion order. - - This ordering of the objects will be independent of the other - objects that are added to the map, since the z-value and insertion - order of the QGeoMapGroupObject is used to determine where the - group is placed in the scene. -*/ - -/*! - Constructs a new group object. -*/ -QGeoMapGroupObject::QGeoMapGroupObject() - : d_ptr(new QGeoMapGroupObjectPrivate(this)) {} - -/*! - Destroys this group object. -*/ -QGeoMapGroupObject::~QGeoMapGroupObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapGroupObject::type() const -{ - return QGeoMapObject::GroupType; -} - -/*! - Returns a bounding box which contains this map object. - - If this map object has children, the bounding box will be large - enough to contain both this map object and all of its children. -*/ -QGeoBoundingBox QGeoMapGroupObject::boundingBox() const -{ - QGeoBoundingBox bounds; - - if (d_ptr->children.size() == 0) - return bounds; - - bounds = d_ptr->children.at(0)->boundingBox(); - - for (int i = 1; i < d_ptr->children.size(); ++i) - bounds = bounds.united(d_ptr->children.at(i)->boundingBox()); - - return bounds; -} - -/*! - Returns whether \a coordinate is contained with the boundary of this - map object. - - If this map object has children, this function will return whether - \a coordinate is contained within the boundary of this map object or - within the boundary of any of its children. -*/ -bool QGeoMapGroupObject::contains(const QGeoCoordinate &coordinate) const -{ - for (int i = 0; i < d_ptr->children.size(); ++i) - if (d_ptr->children.at(i)->contains(coordinate)) - return true; - - return false; -} - -bool mapObjectLessThan(const QGeoMapObject* op1, const QGeoMapObject* op2) -{ - return op1->operator <(*op2); -} - -/*! - Adds \a childObject to the list of children of this map object. - - The children objects are drawn in order of the QGeoMapObject::zValue() - value. Children objects having the same z value will be drawn - in the order they were added. - - The map object will take ownership of \a childObject. -*/ -void QGeoMapGroupObject::addChildObject(QGeoMapObject *childObject) -{ - if (!childObject || d_ptr->children.contains(childObject)) - return; - - childObject->setMapData(mapData()); - childObject->d_func()->serial = d_func()->serial++; - - //binary search - QList<QGeoMapObject*>::iterator i = qUpperBound(d_ptr->children.begin(), - d_ptr->children.end(), - childObject, - mapObjectLessThan); - d_ptr->children.insert(i, childObject); - - connect(childObject, SIGNAL(zValueChanged(int)), - d_ptr, SLOT(childChangedZValue(int))); - - emit childAdded(childObject); -} - -/*! - Removes \a childObject from the list of children of this map object. - - The map object will release ownership of \a childObject. -*/ -void QGeoMapGroupObject::removeChildObject(QGeoMapObject *childObject) -{ - if (!childObject) - return; - - if (d_ptr->children.removeAll(childObject) > 0) { - - disconnect(childObject, SIGNAL(zValueChanged(int)), - d_ptr, SLOT(childChangedZValue(int))); - - emit childRemoved(childObject); - childObject->setMapData(0); - -// if (this->mapData()) { -// QGeoMapObjectEngine *oe = this->mapData()->d_ptr->oe; -// if (oe) -// oe->removeObject(childObject); -// } - } - -// update(); -} - -/*! - Returns the children of this object. -*/ -QList<QGeoMapObject*> QGeoMapGroupObject::childObjects() const -{ - return d_ptr->children; -} - -/*! - Clears the children of this object. - - The child objects will be deleted. -*/ -void QGeoMapGroupObject::clearChildObjects() -{ - for (int i = d_ptr->children.size() - 1; i >=0; --i) { - QGeoMapObject* child = d_ptr->children[i]; - removeChildObject(child); - delete child; - } - - d_ptr->children.clear(); -} - -/*! - Sets whether this group of objects is visible to \a visible. -*/ -void QGeoMapGroupObject::setVisible(bool visible) -{ - for (int i = 0; i < d_ptr->children.size(); ++i) - d_ptr->children[i]->setVisible(visible); - - QGeoMapObject::setVisible(visible); -} - -/*! - \reimp -*/ -void QGeoMapGroupObject::setMapData(QGeoMapData *mapData) -{ - - for (int i = 0; i < d_ptr->children.size(); ++i) { - d_ptr->children[i]->setMapData(mapData); - if (mapData) - emit childAdded(d_ptr->children[i]); - } - - QGeoMapObject::setMapData(mapData); -} - -/*! -\fn void QGeoMapGroupObject::childAdded(QGeoMapObject *childObject) - - This signal will be emitted when the map object \a childObject - is added to the group. -*/ - -/*! -\fn void QGeoMapGroupObject::childUpdated(QGeoMapObject *childObject) - - This signal will be emitted if the map object \a childObject has - changed such that the corresponding QGeoMapObjectInfo class that handles - the map-specific behaviours of the object needs to be informed of - the change. - - The map object \a childObject must belong to this group. - - At the moment this is only emitted when the z-value of the - child-objects are changed. -*/ - -/*! -\fn void QGeoMapGroupObject::childRemoved(QGeoMapObject *childObject) - - This signal will be emitted when the map object \a childObject - is removed from the group. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapGroupObjectPrivate::QGeoMapGroupObjectPrivate(QGeoMapGroupObject *p) : - QObject(p), - serial(1), - q_ptr(p) -{} - -QGeoMapGroupObjectPrivate::~QGeoMapGroupObjectPrivate() -{ - qDeleteAll(children); -} - -void QGeoMapGroupObjectPrivate::childChangedZValue(int zValue) -{ - Q_UNUSED(zValue); - QGeoMapObject *child = qobject_cast<QGeoMapObject*>(sender()); - if (!child) - return; - - if (children.removeAll(child) > 0) { - QList<QGeoMapObject*>::iterator i = qUpperBound(children.begin(), - children.end(), - child, - mapObjectLessThan); - children.insert(i, child); - emit q_ptr->childUpdated(child); - } -} - -#include "moc_qgeomapgroupobject.cpp" -#include "moc_qgeomapgroupobject_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomapobject.cpp b/src/location/maps/qgeomapobject.cpp deleted file mode 100644 index 3f0b3993..00000000 --- a/src/location/maps/qgeomapobject.cpp +++ /dev/null @@ -1,534 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapobject.h" -#include "qgeomapobject_p.h" -#include "qgeomapobjectengine_p.h" -#include "qgeomapobjectinfo.h" -#include "qgeomapdata.h" -#include "qgeomapdata_p.h" -#include "qgeoboundingbox.h" -#include "qgeocoordinate.h" -#include <private/projwrapper_p.h> - -#include <QtAlgorithms> - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapObject - \brief The QGeoMapObject class is a graphical item to be displayed on a map. - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - QGeoMapObject is the base class used to display graphical items on a map. - - Subclasses of QGeoMapObject exist in order to simplify the task of - creating and managing map objects of various kinds. - - QGeoMapCustomObject is the most generic of these objects in that it - allows QGraphicsItems to be added to a map, however as not all mapping - plugins use the Qt Graphics View framework so clients should use - QGraphicsGeoMap::supportsCustomMapObjects() before using - QGeoMapCustomObject. - - QGeoMapObject instances can also be grouped into heirarchies in order to - simplify the process of creating compound objects and managing groups of - objects (see QGeoMapGroupObject) -*/ - -/*! - \enum QGeoMapObject::Type - - Describes the type of a map object. - - \value NullType - An empty QGeoMapObject. - \value GroupType - A QGeoMapObject used to organize other map objects into groups. - \value RectangleType - A QGeoMapObject used to display a rectangular region. - \value CircleType - A QGeoMapObject used to display a circular region. - \value PolylineType - A QGeoMapObject used to display a multi-segment line. - \value PolygonType - A QGeoMapObject used to display a polygonal region. - \value PixmapType - A QGeoMapObject used to display a pixmap on a map. - \value TextType - A QGeoMapObject used to display text on a map - \value RouteType - A QGeoMapObject used to display a route. - \value CustomType - A QGeoMapObject displaying a custom GraphicsItem. -*/ - -/*! - \enum QGeoMapObject::CoordinateUnit - - \since 1.2 - - Describes the units of measurement used for a map object's - graphics item. - - \value PixelUnit - Units are in pixels on the screen. Pixel coordinate (0,0) is - translated to the origin coordinate. - \value MeterUnit - Units are in meters on the ground -- a local Transverse Mercator - coordinate system (on the WGS84 ellipsoid) is used for translation, - centered on the origin coordinate. - \value RelativeArcSecondUnit - Units are in arc seconds relative to the origin coordinate (along the - WGS84 ellipsoid). - \value AbsoluteArcSecondUnit - Units are in arc seconds on WGS84, origin ignored. -*/ - -/*! - \enum QGeoMapObject::TransformType - - \since 1.2 - - Describes the type of transformation applied to change this object's - coordinate system into screen coordinates. - - \value BilinearTransform - This object's bounding box is taken, and transformed at each of its - corners into screen coordinates. A bilinear interpolation is then used - to draw the rest of the object's GraphicsItem. - \value ExactTransform - Individual key points on the object are transformed and the GraphicsItem - is constructed in direct pixel coordinates. This is only available for - certain subclasses, depending on the implementation of QGeoMapData used. -*/ - -/*! - Constructs a new map object associated with \a mapData. - - The object will be in pixel coordinates, with exact transform. -*/ -QGeoMapObject::QGeoMapObject(QGeoMapData *mapData) - : d_ptr(new QGeoMapObjectPrivate()) -{ - setMapData(mapData); -} - -/*! - Destroys this map object. -*/ -QGeoMapObject::~QGeoMapObject() -{ - setMapData(0); - delete d_ptr; -} - -/*! - Returns the type of this map object. -*/ -QGeoMapObject::Type QGeoMapObject::type() const -{ -// if (d_ptr->graphicsItem) -// return QGeoMapObject::CustomType; -// else - return QGeoMapObject::NullType; -} - -/*! - \property QGeoMapObject::zValue - \brief This property holds the z-value of the map object. - - The z-value determines the order in which the objects are drawn on the - screen. Objects with the same value will be drawn in the order that - they were added to the map or map object. - - This is the same behaviour as QGraphicsItem. -*/ -void QGeoMapObject::setZValue(int zValue) -{ - if (d_ptr->zValue != zValue) { - d_ptr->zValue = zValue; - emit zValueChanged(d_ptr->zValue); - } -} - -int QGeoMapObject::zValue() const -{ - return d_ptr->zValue; -} - -/*! - \property QGeoMapObject::visible - \brief This property holds whether the map object is visible. -*/ -void QGeoMapObject::setVisible(bool visible) -{ - if (d_ptr->isVisible != visible) { - d_ptr->isVisible = visible; - emit visibleChanged(d_ptr->isVisible); - } -} - -bool QGeoMapObject::isVisible() const -{ - return d_ptr->isVisible; -} - -/*! - \property QGeoMapObject::selected - \brief This property holds whether the map object is selected. -*/ -void QGeoMapObject::setSelected(bool selected) -{ - if (d_ptr->isSelected != selected) { - d_ptr->isSelected = selected; - emit selectedChanged(d_ptr->isSelected); - } -} - -bool QGeoMapObject::isSelected() const -{ - return d_ptr->isSelected; -} - -/*! - Returns a bounding box which contains this map object. - - The default implementation requires the object to be added to a map - before this function returns a valid bounding box. -*/ -QGeoBoundingBox QGeoMapObject::boundingBox() const -{ - if (!d_ptr->info) - return QGeoBoundingBox(); - - return d_ptr->info->boundingBox(); -} - -/*! - Returns whether \a coordinate is contained with the boundary of this - map object. - - The default implementation requires the object to be added to a map - before this function is able to return true. -*/ -bool QGeoMapObject::contains(const QGeoCoordinate &coordinate) const -{ - if (!d_ptr->info) - return false; - - return d_ptr->info->contains(coordinate); -} - -/*! - \internal -*/ -bool QGeoMapObject::operator<(const QGeoMapObject &other) const -{ - return d_ptr->zValue < other.d_ptr->zValue || - (d_ptr->zValue == other.d_ptr->zValue && d_ptr->serial < other.d_ptr->serial); -} - -/*! - \internal -*/ -bool QGeoMapObject::operator>(const QGeoMapObject &other) const -{ - return d_ptr->zValue > other.d_ptr->zValue || - (d_ptr->zValue == other.d_ptr->zValue && d_ptr->serial > other.d_ptr->serial); -} - -/*! - Associates the QGeoMapData instance \a mapData with this map object. - - This will create an appropriate QGeoMapObjectInfo instance for - this QGeoMapObject and will connect the appropriate signals to it - so that it can be kept up to date. -*/ -void QGeoMapObject::setMapData(QGeoMapData *mapData) -{ - if (d_ptr->mapData == mapData) - return; - - if (d_ptr->info) { - delete d_ptr->info; - d_ptr->info = 0; - } - - d_ptr->mapData = mapData; - if (!d_ptr->mapData) - return; - - d_ptr->info = mapData->createMapObjectInfo(this); - - if (!d_ptr->info) - return; - - connect(d_ptr->mapData, - SIGNAL(windowSizeChanged(QSizeF)), - d_ptr->info, - SLOT(windowSizeChanged(QSizeF))); - connect(d_ptr->mapData, - SIGNAL(zoomLevelChanged(qreal)), - d_ptr->info, - SLOT(zoomLevelChanged(qreal))); - connect(d_ptr->mapData, - SIGNAL(centerChanged(QGeoCoordinate)), - d_ptr->info, - SLOT(centerChanged(QGeoCoordinate))); - - connect(this, - SIGNAL(zValueChanged(int)), - d_ptr->info, - SLOT(zValueChanged(int))); - connect(this, - SIGNAL(visibleChanged(bool)), - d_ptr->info, - SLOT(visibleChanged(bool))); - connect(this, - SIGNAL(selectedChanged(bool)), - d_ptr->info, - SLOT(selectedChanged(bool))); - connect(this, - SIGNAL(originChanged(QGeoCoordinate)), - d_ptr->info, - SLOT(originChanged(QGeoCoordinate))); - connect(this, - SIGNAL(transformTypeChanged(QGeoMapObject::TransformType)), - d_ptr->info, - SLOT(transformTypeChanged(QGeoMapObject::TransformType))); - connect(this, - SIGNAL(unitsChanged(QGeoMapObject::CoordinateUnit)), - d_ptr->info, - SLOT(unitsChanged(QGeoMapObject::CoordinateUnit))); - - d_ptr->info->init(); -} - -/*! - Returns the QGeoMapData instance associated with this object. - - Will return 0 if not QGeoMapData instance has been set. -*/ -QGeoMapData* QGeoMapObject::mapData() const -{ - return d_ptr->mapData; -} - -/*! - Returns the QGeoMapObjectInfo instance which implements the - QGeoMapData specific behaviours of this map object. - - This will mostly be useful when implementing custom QGeoMapData - subclasses. -*/ -QGeoMapObjectInfo *QGeoMapObject::info() const -{ - return d_ptr->info; -} - -/*! - \property QGeoMapObject::transformType - \brief This property holds the transformation type used to draw the object. - - \since 1.2 - - \sa QGeoMapObject::TransformType -*/ -QGeoMapObject::TransformType QGeoMapObject::transformType() const -{ - return d_ptr->transType; -} - -/*! - Sets the transform type of the object to \a type. -*/ -void QGeoMapObject::setTransformType(const TransformType &type) -{ - if (type == d_ptr->transType) - return; - - d_ptr->transType = type; - - emit transformTypeChanged(type); -} - -/*! - \property QGeoMapObject::origin - \brief This property holds the origin of the object's coordinate system. - - \since 1.2 - - How the origin coordinate is used depends on the selected coordinate - system, see QGeoMapObject::TransformType for more details. -*/ -QGeoCoordinate QGeoMapObject::origin() const -{ - return d_ptr->origin; -} - -/*! - Sets the origin of the object to \a origin. -*/ -void QGeoMapObject::setOrigin(const QGeoCoordinate &origin) -{ - if (origin == d_ptr->origin) - return; - - d_ptr->origin = origin; - - emit originChanged(origin); -} - -/*! - \property QGeoMapObject::units - \brief This property holds the units of measurement for the object. - - \since 1.2 - - \sa QGeoMapObject::CoordinateUnit -*/ -QGeoMapObject::CoordinateUnit QGeoMapObject::units() const -{ - return d_ptr->units; -} - -/*! - Sets the coordinate units of the object to \a unit. - - Note that setting this property will reset the transformType property to - the default for the units given. For PixelUnit, this is ExactTransform, - and for all others, BilinearTransform. -*/ -void QGeoMapObject::setUnits(const CoordinateUnit &unit) -{ - if (unit == d_ptr->units) - return; - - d_ptr->units = unit; - - if (unit == QGeoMapObject::PixelUnit) - setTransformType(QGeoMapObject::ExactTransform); - else - setTransformType(QGeoMapObject::BilinearTransform); - - emit unitsChanged(unit); -} - -/*! -\fn void QGeoMapObject::zValueChanged(int zValue) - - This signal is emitted when the z value of the map object - has changed. - - The new value is \a zValue. -*/ - -/*! -\fn void QGeoMapObject::visibleChanged(bool visible) - - This signal is emitted when the visible state of the map object - has changed. - - The new value is \a visible. -*/ - -/*! -\fn void QGeoMapObject::selectedChanged(bool selected) - - This signal is emitted when the selected state of the map object - has changed. - - The new vlaue is \a selected. -*/ - -/*! -\fn void QGeoMapObject::originChanged(QGeoCoordinate origin) - - This signal is emitted when the origin of the map object has changed. - - The new value is \a origin. -*/ - -/*! -\fn void QGeoMapObject::unitsChanged(QGeoMapObject::CoordinateUnit units) - - This signal is emitted when the coordinate units of the map object have changed. - - The new value is \a units. -*/ - -/*! -\fn void QGeoMapObject::transformTypeChanged(QGeoMapObject::TransformType transformType) - - This signal is emitted when the transform type of the map object has changed. - - The new value is \a transformType. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapObjectPrivate::QGeoMapObjectPrivate() - : zValue(0), - serial(0), - isVisible(true), - isSelected(false), - mapData(0), - info(0), - units(QGeoMapObject::PixelUnit), - transType(QGeoMapObject::ExactTransform){} - -QGeoMapObjectPrivate::~QGeoMapObjectPrivate() -{ - if (info) - delete info; -} - -/******************************************************************************* -*******************************************************************************/ - -#include "moc_qgeomapobject.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapobject.h b/src/location/maps/qgeomapobject.h deleted file mode 100644 index 11e40b25..00000000 --- a/src/location/maps/qgeomapobject.h +++ /dev/null @@ -1,154 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPOBJECT_H -#define QGEOMAPOBJECT_H - -#include "qmobilityglobal.h" - -#include <QList> -#include <QObject> - -QT_BEGIN_NAMESPACE -class QPainter; -class QRectF; -class QGraphicsItem; - - -class QGeoCoordinate; -class QGeoBoundingBox; -class QGeoMapObjectPrivate; -class QGeoMapContainer; -class QGeoMapObjectInfo; - -class QGeoMapData; - -class Q_LOCATION_EXPORT QGeoMapObject : public QObject -{ - Q_OBJECT - Q_PROPERTY(int zValue READ zValue WRITE setZValue NOTIFY zValueChanged) - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged) - Q_PROPERTY(bool selected READ isSelected WRITE setSelected NOTIFY selectedChanged) - Q_PROPERTY(QGeoCoordinate origin READ origin NOTIFY originChanged) - Q_PROPERTY(CoordinateUnit units READ units NOTIFY unitsChanged) - Q_PROPERTY(TransformType transformType READ transformType NOTIFY transformTypeChanged) - -public: - enum Type { - NullType, - GroupType, - RectangleType, - CircleType, - PolylineType, - PolygonType, - PixmapType, - TextType, - RouteType, - CustomType - }; - - enum CoordinateUnit { - PixelUnit, - MeterUnit, - RelativeArcSecondUnit, - AbsoluteArcSecondUnit - }; - - enum TransformType { - BilinearTransform, - ExactTransform - }; - - QGeoMapObject(QGeoMapData *mapData = 0); - virtual ~QGeoMapObject(); - - virtual Type type() const; - - void setZValue(int zValue); - int zValue() const; - - void setVisible(bool visible); - bool isVisible() const; - - void setSelected(bool selected); - bool isSelected() const; - - virtual QGeoBoundingBox boundingBox() const; - virtual bool contains(const QGeoCoordinate &coordinate) const; - - bool operator<(const QGeoMapObject &other) const; - bool operator>(const QGeoMapObject &other) const; - - virtual void setMapData(QGeoMapData *mapData); - virtual QGeoMapData* mapData() const; - - QGeoMapObjectInfo *info() const; - - QGeoCoordinate origin() const; - CoordinateUnit units() const; - TransformType transformType() const; - -protected: - void setOrigin(const QGeoCoordinate &origin); - void setUnits(const CoordinateUnit &unit); - void setTransformType(const TransformType &type); - -Q_SIGNALS: - void zValueChanged(int zValue); - void visibleChanged(bool visible); - void selectedChanged(bool selected); - - void originChanged(QGeoCoordinate origin); - void unitsChanged(QGeoMapObject::CoordinateUnit units); - void transformTypeChanged(QGeoMapObject::TransformType transformType); - -private: - QGeoMapObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapObject) - Q_DISABLE_COPY(QGeoMapObject) - - friend class QGeoMapDataPrivate; - friend class QGeoMapGroupObject; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomapobjectengine_p.cpp b/src/location/maps/qgeomapobjectengine_p.cpp deleted file mode 100644 index 7579b829..00000000 --- a/src/location/maps/qgeomapobjectengine_p.cpp +++ /dev/null @@ -1,1182 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapobjectengine_p.h" -#include "qgeomaprouteobject.h" -#include "qgeomapcircleobject.h" -#include <private/qgeocoordinate_p.h> -#include "qgeoboundingbox.h" -#include <private/projwrapper_p.h> -#include "qgeotiledmapobjectinfo_p.h" - -#include <QTransform> -#include <QGraphicsItem> -#include <QGraphicsScene> -#include <QGraphicsPolygonItem> -#include <QGraphicsPathItem> -#include <QGraphicsEllipseItem> - -#include <cmath> - -#include <QDebug> - -QT_BEGIN_NAMESPACE - -/* - A quick note about how the transforms are set up: - - Each QGeoMapObject has its own "local" coordinate system, whether this - a pixel system or meters or whatever. - - For local systems that are not in pixels, we do a two-stage transform -- - first we transform the object to arc-seconds, then we transform from - arc-seconds to pixels on the screen. This is necessary as QGeoMapData - subclasses only provide a mapping from lat/lon coordinates to screen pixels - and no other source. - - For local systems that are in pixels, we simply translate to the screen - coordinates. However, we still generate a transform to arc-seconds for these - objects, to speed up the drawing process. - - QGeoMapDataPrivate has two sets of 3 fields that are used here: - - xxxTrans - - xxxScene - - xxxItems - (where xxx = [latLon, pixel]) - - xxxTrans = a multi-hash of transforms associated with each QGeoMapObject - (a given map object may appear at more than one coordinate if - it wraps over the dateline) - xxxScene = a QGraphicsScene filled with bounding boxes for each object, one - for each entry in xxxTrans - xxxItems = a hash taking the items in the xxxScene and giving back the original - QGeoMapObject they were created for - - the "latLon" entries describe the transformations from local coordinates to - arc-seconds, and the "pixel" entries describe the transformations from local - coordinates to pixels on screen. - - Items within latLonScene have their coordinates in arc-seconds, and items - within pixelScene have theirs in pixels. - -*/ - -QGeoMapObjectEngine::QGeoMapObjectEngine(QGeoMapData *mapData, QGeoMapDataPrivate *mapDataP) : - md(mapData), - mdp(mapDataP), - exactMappingTolerance(1.0), - latLonScene(new QGraphicsScene), - pixelScene(new QGraphicsScene) -{ - pixelScene->setItemIndexMethod(QGraphicsScene::NoIndex); -} - -QGeoMapObjectEngine::~QGeoMapObjectEngine() -{ - delete pixelScene; - delete latLonScene; - - latLonTrans.clear(); - latLonItems.clear(); - latLonItemsRev.clear(); - pixelTrans.clear(); - pixelItems.clear(); - pixelItemsRev.clear(); - - foreach (QGraphicsItem *i, latLonExact.values()) - delete i; - latLonExact.clear(); - - foreach (QGraphicsItem *i, pixelExact.values()) - delete i; - pixelExact.clear(); -} - -/***************************************************************************** - Object management - *****************************************************************************/ - -void QGeoMapObjectEngine::addObject(QGeoMapObject *object) -{ - objectsForLatLonUpdate << object; - objectsForPixelUpdate << object; - updateTransforms(); - rebuildScenes(); -} - -void QGeoMapObjectEngine::removeObject(QGeoMapObject *object) -{ - QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(object); - if (group) { - foreach (QGeoMapObject *child, group->childObjects()) - removeObject(child); - } else { - QList<QRectF> rectsToUpdate; - foreach (QGraphicsItem *item, pixelItemsRev.values(object)) - rectsToUpdate << item->boundingRect(); - - latLonTrans.remove(object); - foreach (QGraphicsItem *item, latLonItemsRev.values(object)) { - latLonItems.remove(item); - latLonScene->removeItem(item); - delete item; - } - latLonItemsRev.remove(object); - - pixelTrans.remove(object); - foreach (QGraphicsItem *item, pixelItemsRev.values(object)) { - pixelItems.remove(item); - pixelScene->removeItem(item); - delete item; - } - pixelItemsRev.remove(object); - - foreach (QRectF rect, rectsToUpdate) - mdp->emitUpdateMapDisplay(rect); - - objectsForLatLonUpdate.removeAll(object); - objectsForPixelUpdate.removeAll(object); - } -} - -/***************************************************************************** - Transform support functions - *****************************************************************************/ - -static QGraphicsPolygonItem *polyCopy(const QGraphicsPolygonItem *polyItem) -{ - QGraphicsPolygonItem *pi = new QGraphicsPolygonItem; - pi->setBrush(polyItem->brush()); - pi->setPen(polyItem->pen()); - pi->setVisible(polyItem->isVisible()); - pi->setFillRule(polyItem->fillRule()); - pi->setOpacity(polyItem->opacity()); - pi->setGraphicsEffect(polyItem->graphicsEffect()); - return pi; -} - -static QGraphicsPolygonItem *polyCopy(const QGraphicsEllipseItem *elItem) -{ - QGraphicsPolygonItem *pi = new QGraphicsPolygonItem; - pi->setBrush(elItem->brush()); - pi->setPen(elItem->pen()); - pi->setVisible(elItem->isVisible()); - pi->setOpacity(elItem->opacity()); - pi->setGraphicsEffect(elItem->graphicsEffect()); - return pi; -} - -static QGraphicsPathItem *pathCopy(const QGraphicsPathItem *pathItem) -{ - QGraphicsPathItem *pi = new QGraphicsPathItem; - pi->setBrush(pathItem->brush()); - pi->setPen(pathItem->pen()); - pi->setVisible(pathItem->isVisible()); - pi->setOpacity(pathItem->opacity()); - pi->setGraphicsEffect(pathItem->graphicsEffect()); - return pi; -} - -static QPolygonF approximateCircle(QGraphicsEllipseItem *elItem, - QGeoMapObject *object, - const QGeoCoordinate ¢er, - const ProjCoordinate &projCenter) -{ - const QRectF rect = elItem->rect(); - - const double a = rect.height() / 2.0; - const double b = rect.width() / 2.0; - - const double asq = a*a; - const double bsq = b*b; - - QPolygonF secPoly; - - quint32 detail = 150; - QGeoMapCircleObject *circObj = dynamic_cast<QGeoMapCircleObject*>(object); - if (circObj) - detail = circObj->pointCount(); - - const double Pi = 3.14159265358; - const double twopi = 6.283185307179; - - const double dth = twopi / detail; - - // TODO: make the semantics here the same as in normal graphicsview - double startAngle = elItem->startAngle(); - startAngle /= 16.0; - startAngle *= twopi; - startAngle /= 360.0; - - double stopAngle = elItem->startAngle() + elItem->spanAngle(); - stopAngle /= 16.0; - stopAngle *= twopi; - stopAngle /= 360.0; - - bool drawToCenter = (elItem->spanAngle() != 360 * 16); - - for (double theta = startAngle; theta < stopAngle; theta += dth) { - const double top = b*sin(theta); - const double bottom = a*cos(theta); - - double phi = atan(top / bottom); - if (bottom < 0) - phi = phi + Pi; - - const double phiDeg = (360.0 * phi) / twopi; - - const double costh = cos(theta); - const double sinth = sin(theta); - - const double r = sqrt(asq*costh*costh + bsq*sinth*sinth); - - double x, y; - QGeoCoordinatePrivate::atDistanceAndAzimuth(center, r, phiDeg, - &x, &y); - x *= 3600.0; - y *= 3600.0; - - secPoly << QPointF(x,y); - } - - if (drawToCenter) - secPoly << QPointF(projCenter.x() * 3600.0, projCenter.y() * 3600.0); - - return secPoly; -} - -bool QGeoMapObjectEngine::exactMetersToSeconds(const QGeoCoordinate &origin, - QGeoMapObject *object, - QGraphicsItem *item, - QList<QPolygonF> &polys) -{ - QString projStr = QLatin1String("+proj=tmerc +lat_0=%1 +lon_0=%2 +k=1.0 +x_0=0 +y_0=0 +ellps=WGS84"); - projStr = projStr.arg(origin.latitude(), 0, 'f', 12) - .arg(origin.longitude(), 0, 'f', 12); - - ProjCoordinateSystem localSys(projStr, false); - ProjCoordinateSystem wgs84(QLatin1String("+proj=latlon +ellps=WGS84")); - - QTransform west; - west.translate(360.0 * 3600.0, 0.0); - - QTransform east; - east.translate(-360.0 * 3600.0, 0.0); - - foreach (QGraphicsItem *i, latLonExact.values(object)) - delete i; - latLonExact.remove(object); - - QGraphicsEllipseItem *elItem = dynamic_cast<QGraphicsEllipseItem*>(item); - if (elItem) { - QRectF rect = elItem->rect(); - - const QPointF cen = rect.center(); - ProjCoordinate c(cen.x(), -1*cen.y(), 0.0, localSys); - c.convert(wgs84); - const QGeoCoordinate center = c.toGeoCoordinate(); - - QPolygonF wgs = approximateCircle(elItem, object, center, c); - - QGraphicsPolygonItem *pi = polyCopy(elItem); - pi->setPolygon(wgs); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPolygonF westPoly = wgs * west; - pi = polyCopy(elItem); - pi->setPolygon(westPoly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPolygonF eastPoly = wgs * east; - pi = polyCopy(elItem); - pi->setPolygon(eastPoly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - return true; - } - - QGraphicsPolygonItem *polyItem = dynamic_cast<QGraphicsPolygonItem*>(item); - if (polyItem) { - QPolygonF poly = polyItem->polygon() * polyItem->transform(); - - ProjPolygon p(poly, localSys); - p.scalarMultiply(1, -1, 1); - p.convert(wgs84); - QPolygonF wgs = p.toPolygonF(3600.0); - - QGraphicsPolygonItem *pi = polyCopy(polyItem); - pi->setPolygon(wgs); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPolygonF westPoly = wgs * west; - pi = polyCopy(polyItem); - pi->setPolygon(westPoly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPolygonF eastPoly = wgs * east; - pi = polyCopy(polyItem); - pi->setPolygon(eastPoly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - return true; - } - - QGraphicsPathItem *pathItem = dynamic_cast<QGraphicsPathItem*>(item); - if (pathItem) { - QPainterPath path = pathItem->path() * pathItem->transform(); - - for (int i = 0; i < path.elementCount(); ++i) { - QPainterPath::Element e = path.elementAt(i); - - ProjCoordinate c(e.x, -1*e.y, 0.0, localSys); - Q_ASSERT(c.convert(wgs84)); - - path.setElementPositionAt(i, c.x() * 3600.0, c.y() * 3600.0); - } - - QGraphicsPathItem *pi = pathCopy(pathItem); - pi->setPath(path); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPainterPath westPath = path * west; - pi = pathCopy(pathItem); - pi->setPath(westPath); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPainterPath eastPath = path * east; - pi = pathCopy(pathItem); - pi->setPath(eastPath); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - return true; - } - - qWarning("QGeoMapData: did not recognize type of exact-transformed" - "object: type #%d (object not supported for exact transform)", - item->type()); - return false; -} - -bool QGeoMapObjectEngine::exactSecondsToSeconds(const QGeoCoordinate &origin, - QGeoMapObject *object, - QGraphicsItem *item, - QList<QPolygonF> &polys) -{ - QTransform west; - west.translate(360.0 * 3600.0, 0.0); - - QTransform east; - east.translate(-360.0 * 3600.0, 0.0); - - QTransform toAbs; - if (object->units() == QGeoMapObject::RelativeArcSecondUnit) { - double ox = origin.longitude() * 3600.0; - double oy = origin.latitude() * 3600.0; - toAbs.translate(ox, oy); - } - - foreach (QGraphicsItem *i, latLonExact.values(object)) - delete i; - latLonExact.remove(object); - - QGraphicsPolygonItem *polyItem = dynamic_cast<QGraphicsPolygonItem*>(item); - if (polyItem) { - if (polyItem->polygon().isEmpty() || polyItem->polygon().size() < 3) - return false; - - QPolygonF poly = polyItem->polygon() * polyItem->transform(); - poly = poly * toAbs; - - QGraphicsPolygonItem *pi = polyCopy(polyItem); - pi->setPolygon(poly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPolygonF westPoly = poly * west; - pi = polyCopy(polyItem); - pi->setPolygon(westPoly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - QPolygonF eastPoly = poly * east; - pi = polyCopy(polyItem); - pi->setPolygon(eastPoly); - latLonExact.insertMulti(object, pi); - polys << pi->boundingRect(); - - return true; - } - - QGraphicsPathItem *pathItem = dynamic_cast<QGraphicsPathItem*>(item); - if (pathItem) { - if (pathItem->path().isEmpty() || pathItem->path().elementCount() < 2) - return false; - - QPainterPath path = pathItem->path() * pathItem->transform(); - path = path * toAbs; - - QGraphicsPathItem *pi = pathCopy(pathItem); - pi->setPath(path); - latLonExact.insertMulti(object, pi); - const QPolygonF originalBounds = pi->boundingRect(); - polys << originalBounds; - - QPainterPath westPath = path * west; - pi = pathCopy(pathItem); - pi->setPath(westPath); - latLonExact.insertMulti(object, pi); - polys << originalBounds * west; - - QPainterPath eastPath = path * east; - pi = pathCopy(pathItem); - pi->setPath(eastPath); - latLonExact.insertMulti(object, pi); - polys << originalBounds * east; - - return true; - } - - qWarning("QGeoMapData: did not recognize type of exact-transformed " - "object: type #%d (object not supported for exact transform)", - item->type()); - return false; -} - -void QGeoMapObjectEngine::bilinearMetersToSeconds(const QGeoCoordinate &origin, - QGraphicsItem *item, - QPolygonF &local, - QTransform &latLon) -{ - QString projStr = QLatin1String("+proj=tmerc +lat_0=%1 +lon_0=%2 +k=1.0 +x_0=0 +y_0=0 +ellps=WGS84"); - projStr = projStr.arg(origin.latitude(), 0, 'f', 12) - .arg(origin.longitude(), 0, 'f', 12); - - ProjCoordinateSystem localSys(projStr, false); - ProjCoordinateSystem wgs84(QLatin1String("+proj=latlon +ellps=WGS84")); - - ProjPolygon p(local, localSys); - if (!p.convert(wgs84)) { - qWarning("QGeoMapData: bilinear transform from meters to arc-seconds " - "failed: projection is singular"); - return; - } - QPolygonF wgs = p.toPolygonF(3600.0); - - // QTransform expects the last vertex (closing vertex) to be dropped - local.remove(4); - wgs.remove(4); - - // perform wrapping - if (wgs.at(2).x() < wgs.at(3).x()) { - QPointF topRight = wgs.at(1); - topRight.setX(topRight.x() + 360.0 * 3600.0); - wgs.replace(1, topRight); - - QPointF bottomRight = wgs.at(2); - bottomRight.setX(bottomRight.x() + 360.0 * 3600.0); - wgs.replace(2, bottomRight); - } - - bool ok = QTransform::quadToQuad(local, wgs, latLon); - if (!ok) { - qWarning("QGeoMapData: bilinear transform from meters to arc-seconds " - "failed: could not obtain a transformation matrix"); - return; - } - - QTransform flip; - flip.scale(1, -1); - - latLon = flip * item->transform() * latLon; -} - -void QGeoMapObjectEngine::bilinearPixelsToSeconds(const QGeoCoordinate &origin, - QGraphicsItem *item, - QPolygonF &local, - QTransform &latLon) -{ - QPointF pixelOrigin = mdp->coordinateToScreenPosition(origin.longitude(), - origin.latitude()); - - QPolygonF wgs; - foreach (const QPointF &pt, local) { - const QGeoCoordinate coord = - md->screenPositionToCoordinate(pt + pixelOrigin); - const QPointF lpt(coord.longitude() * 3600.0, coord.latitude() * 3600.0); - wgs.append(lpt); - } - - // QTransform expects the last vertex (closing vertex) to be dropped - local.remove(4); - wgs.remove(4); - - // perform wrapping - if (wgs.at(2).x() < wgs.at(3).x()) { - QPointF topRight = wgs.at(1); - topRight.setX(topRight.x() + 360.0 * 3600.0); - wgs.replace(1, topRight); - - QPointF bottomRight = wgs.at(2); - bottomRight.setX(bottomRight.x() + 360.0 * 3600.0); - wgs.replace(2, bottomRight); - } - - bool ok = QTransform::quadToQuad(local, wgs, latLon); - if (!ok) { - qWarning("QGeoMapData: bilinear transform from meters to arc-seconds " - "failed: could not obtain a transformation matrix"); - return; - } - - latLon = item->transform() * latLon; -} - -void QGeoMapObjectEngine::bilinearSecondsToScreen(const QGeoCoordinate &origin, - QGeoMapObject *object, - QList<QPolygonF> &polys) -{ - Q_UNUSED(origin) - - QList<QTransform> latLons = latLonTrans.values(object); - - QGraphicsItem *item = graphicsItemFromMapObject(object); - if (!item) - return; - - // compute the transform by linearising from the lat/lon space - foreach (QTransform latLon, latLons) { - QTransform pixel; - - - QPolygonF local = (item->boundingRect() | item->childrenBoundingRect()); - QPolygonF latLonPoly = latLon.map(local); - - QPolygonF pixelPoly = polyToScreen(latLonPoly); - - // QTransform expects the last vertex (closing vertex) to be dropped - local.remove(4); - pixelPoly.remove(4); - - bool ok = QTransform::quadToQuad(local, pixelPoly, pixel); - if (!ok) { - qWarning("QGeoMapData: bilinear transform to screen from arc-seconds " - "failed: could not compute transformation matrix"); - return; - } - - pixelTrans.insertMulti(object, pixel); - - polys << pixelPoly; - } -} - -struct PathStep -{ - bool tooClose; - QPointF pixel; - QPainterPath::Element e; -}; - -void QGeoMapObjectEngine::exactPixelMap(const QGeoCoordinate &origin, - QGeoMapObject *object, - QList<QPolygonF> &polys) -{ - Q_UNUSED(origin) - - QList<QGraphicsItem*> latLonItems = latLonExact.values(object); - - foreach (QGraphicsItem *i, pixelExact.values(object)) - delete i; - pixelExact.remove(object); - - double tolerance = exactMappingTolerance; - QGeoMapRouteObject *robj = qobject_cast<QGeoMapRouteObject*>(object); - if (robj) - tolerance = robj->detailLevel(); - // square it - tolerance = tolerance * tolerance; - - foreach (QGraphicsItem *latLonItem, latLonItems) { - QGraphicsPolygonItem *polyItem = qgraphicsitem_cast<QGraphicsPolygonItem*>(latLonItem); - if (polyItem) { - QPolygonF poly = polyItem->polygon(); - QPolygonF pixelPoly = polyToScreen(poly); - - QGraphicsPolygonItem *pi = polyCopy(polyItem); - pi->setPolygon(pixelPoly); - pixelExact.insertMulti(object, pi); - polys << pi->boundingRect(); - } - - QGraphicsPathItem *pathItem = qgraphicsitem_cast<QGraphicsPathItem*>(latLonItem); - if (pathItem) { - const QPainterPath path = pathItem->path(); - const int pathSize = path.elementCount(); - QPainterPath mpath; - - const QRectF screen = latLonViewport().boundingRect(); - - QPointF lastPixelAdded; - bool lastOutside = true; - - struct PathStep *steps = new struct PathStep[pathSize]; - - for (int i = 0; i < pathSize; ++i) { - const QPainterPath::Element e = path.elementAt(i); - steps[i].e = e; - - double x = e.x; x /= 3600.0; - double y = e.y; y /= 3600.0; - - const QPointF pixel = mdp->coordinateToScreenPosition(x, y); - const QPointF deltaP = (pixel - lastPixelAdded); - const double delta = deltaP.x() * deltaP.x() + deltaP.y() * deltaP.y(); - - steps[i].pixel = pixel; - - if (!lastPixelAdded.isNull() && delta < tolerance) { - steps[i].tooClose = true; - } else { - steps[i].tooClose = false; - lastPixelAdded = pixel; - } - } - - QPainterPath::Element em = steps[0].e; - - for (int i = 0; i < pathSize; ++i) { - const QPainterPath::Element &e = steps[i].e; - - if (steps[i].tooClose) - continue; - - // guilty until proven innocent - bool outside = true; - if (screen.contains(e.x, e.y)) - outside = false; - if (lastOutside) { - if (em.x < screen.left() && e.x > screen.right()) - outside = false; - if (em.x > screen.right() && e.x < screen.left()) - outside = false; - if (em.y < screen.bottom() && e.y > screen.top()) - outside = false; - if (em.y > screen.top() && e.y < screen.bottom()) - outside = false; - } - - // skip points not inside the screen rect - // or attached to points inside it - if (outside && lastOutside) - continue; - - // entering the screen rect - if (!outside && lastOutside && i > 0) { - const QPointF lastPixel = steps[i-1].pixel; - mpath.moveTo(lastPixel); - } - lastOutside = outside; - - QPointF pixel = steps[i].pixel; - - if (e.isMoveTo()) - mpath.moveTo(pixel); - else - mpath.lineTo(pixel); - - em = e; - } - - delete[] steps; - - QGraphicsPathItem *pi = pathCopy(pathItem); - pi->setPath(mpath); - pixelExact.insertMulti(object, pi); - polys << QPolygonF(pi->boundingRect()); - } - } -} - -void QGeoMapObjectEngine::pixelShiftToScreen(const QGeoCoordinate &origin, - QGeoMapObject *object, - QList<QPolygonF> &polys) -{ - QGraphicsItem *item = graphicsItemFromMapObject(object); - if (!item) - return; - - const QRectF localRect = item->boundingRect() - | item->childrenBoundingRect(); - - // compute the transform as an origin shift - QList<QPointF> origins; - origins << QPointF(origin.longitude(), origin.latitude()); - origins << QPointF(origin.longitude() + 360.0, origin.latitude()); - origins << QPointF(origin.longitude() - 360.0, origin.latitude()); - - foreach (QPointF o, origins) { - QTransform pixel = item->transform(); - QPointF pixelOrigin = mdp->coordinateToScreenPosition(o.x(), o.y()); - pixel.translate(pixelOrigin.x(), pixelOrigin.y()); - pixelTrans.insertMulti(object, pixel); - polys << pixel.map(localRect); - } -} - -/***************************************************************************** - Update utility functions - *****************************************************************************/ - -static void _zoomDepsRecurse(QGeoMapObjectEngine *eng, QGeoMapGroupObject *group) -{ - foreach (QGeoMapObject *obj, group->childObjects()) { - QGeoMapGroupObject *subgroup = qobject_cast<QGeoMapGroupObject*>(obj); - if (subgroup) { - _zoomDepsRecurse(eng, subgroup); - } else { - if (obj->units() == QGeoMapObject::PixelUnit) { - eng->objectsForLatLonUpdate << obj; - eng->objectsForPixelUpdate << obj; - } - } - } -} - -void QGeoMapObjectEngine::invalidateZoomDependents() -{ - if (mdp->containerObject) - _zoomDepsRecurse(this, mdp->containerObject); -} - -void QGeoMapObjectEngine::invalidatePixelsForViewport(bool updateNow) -{ - QPolygonF view = latLonViewport(); - - QList<QGraphicsItem*> itemsInView; - itemsInView = latLonScene->items(view, Qt::IntersectsItemShape, - Qt::AscendingOrder); - - QSet<QGeoMapObject*> done = objectsForPixelUpdate.toSet(); - - foreach (QGraphicsItem *latLonItem, itemsInView) { - QGeoMapObject *object = latLonItems.value(latLonItem); - Q_ASSERT(object); - if (!done.contains(object)) { - objectsForPixelUpdate << object; - done.insert(object); - } - } - - if (updateNow) - mdp->emitUpdateMapDisplay(); -} - -void QGeoMapObjectEngine::trimPixelTransforms() -{ - QPolygonF view = latLonViewport(); - - QList<QGraphicsItem*> itemsInView; - itemsInView = latLonScene->items(view, Qt::IntersectsItemShape, - Qt::AscendingOrder); - - QSet<QGeoMapObject*> shouldBe; - foreach (QGraphicsItem *latLonItem, itemsInView) { - QGeoMapObject *object = latLonItems.value(latLonItem); - Q_ASSERT(object); - shouldBe.insert(object); - } - - QList<QGraphicsItem*> itemsInPixels; - itemsInPixels = pixelScene->items(); - - QSet<QGeoMapObject*> currentlyAre; - foreach (QGraphicsItem *pixelItem, itemsInPixels) { - QGeoMapObject *object = pixelItems.value(pixelItem); - Q_ASSERT(object); - currentlyAre.insert(object); - } - - QSet<QGeoMapObject*> excess = currentlyAre.subtract(shouldBe); - foreach (QGeoMapObject *object, excess) { - foreach (QGraphicsItem *item, pixelItemsRev.values(object)) { - pixelScene->removeItem(item); - pixelItems.remove(item); - delete item; - } - pixelTrans.remove(object); - pixelItemsRev.remove(object); - } - - mdp->emitUpdateMapDisplay(); -} - -void QGeoMapObjectEngine::invalidateObject(QGeoMapObject *obj) -{ - // force the lat lon to update now - // otherwise we can't tell if it's supposed to be on screen - updateLatLonTransform(obj); - - const QRectF view = latLonViewport().boundingRect(); - - bool needsPixelUpdate = false; - foreach (QGraphicsItem *item, latLonItemsRev.values(obj)) { - if (item->boundingRect().intersects(view)) { - needsPixelUpdate = true; - break; - } - } - - if (needsPixelUpdate) { - objectsForPixelUpdate << obj; - mdp->emitUpdateMapDisplay(); - } -} - -// update the transform tables as necessary -void QGeoMapObjectEngine::updateTransforms() -{ - bool groupUpdated = false; - - foreach (QGeoMapObject *obj, objectsForLatLonUpdate) { - QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(obj); - if (group) { - updateLatLonsForGroup(group); - groupUpdated = true; - } else { - updateLatLonTransform(obj); - } - } - - objectsForLatLonUpdate.clear(); - - foreach (QGeoMapObject *obj, objectsForPixelUpdate) { - QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(obj); - if (group) { - updatePixelsForGroup(group); - groupUpdated = true; - } else { - updatePixelTransform(obj); - } - } - - objectsForPixelUpdate.clear(); - - if (groupUpdated) - rebuildScenes(); -} - -void QGeoMapObjectEngine::updatePixelsForGroup(QGeoMapGroupObject *group) -{ - foreach (QGeoMapObject *obj, group->childObjects()) { - QGeoMapGroupObject *subgroup = qobject_cast<QGeoMapGroupObject*>(obj); - if (subgroup) { - updatePixelsForGroup(subgroup); - } else { - updatePixelTransform(obj); - } - } -} - -void QGeoMapObjectEngine::updateLatLonsForGroup(QGeoMapGroupObject *group) -{ - foreach (QGeoMapObject *object, group->childObjects()) { - QGeoMapGroupObject *subGroup = qobject_cast<QGeoMapGroupObject*>(object); - if (subGroup) - updateLatLonsForGroup(subGroup); - else - updateLatLonTransform(object); - } -} - -static void addGroupToScene(QGeoMapObjectEngine *eng, QGeoMapGroupObject *group) -{ - foreach (QGeoMapObject *object, group->childObjects()) { - QGeoMapGroupObject *subGroup = qobject_cast<QGeoMapGroupObject*>(object); - if (subGroup) { - addGroupToScene(eng, subGroup); - } else { - foreach (QGraphicsItem *i, eng->latLonItemsRev.values(object)) - eng->latLonScene->addItem(i); - foreach (QGraphicsItem *i, eng->pixelItemsRev.values(object)) - eng->pixelScene->addItem(i); - } - } -} - -void QGeoMapObjectEngine::rebuildScenes() -{ - foreach (QGraphicsItem *i, latLonScene->items()) - latLonScene->removeItem(i); - foreach (QGraphicsItem *i, pixelScene->items()) - pixelScene->removeItem(i); - - delete latLonScene; - delete pixelScene; - - latLonScene = new QGraphicsScene; - pixelScene = new QGraphicsScene; - pixelScene->setItemIndexMethod(QGraphicsScene::NoIndex); - - addGroupToScene(this, mdp->containerObject); -} - -/***************************************************************************** - Actual update functions - *****************************************************************************/ - -void QGeoMapObjectEngine::updateLatLonTransform(QGeoMapObject *object) -{ - QGeoCoordinate origin = object->origin(); - - QGraphicsItem *item = graphicsItemFromMapObject(object); - - // skip any objects without graphicsitems - if (!item) - return; - - QRectF localRect = (item->boundingRect() | item->childrenBoundingRect()); - - // skip any objects with invalid bounds - if (!localRect.isValid() || localRect.isEmpty() || localRect.isNull()) - return; - - QPolygonF local = localRect * item->transform(); - QList<QPolygonF> polys; - - latLonTrans.remove(object); - - if (object->transformType() == QGeoMapObject::BilinearTransform || - object->units() == QGeoMapObject::PixelUnit) { - QTransform latLon; - - if (object->units() == QGeoMapObject::MeterUnit) { - bilinearMetersToSeconds(origin, item, local, latLon); - } else if (object->units() == QGeoMapObject::RelativeArcSecondUnit) { - latLon.translate(origin.longitude() * 3600.0, origin.latitude() * 3600.0); - } else if (object->units() == QGeoMapObject::PixelUnit) { - bilinearPixelsToSeconds(origin, item, local, latLon); - } - - polys << latLon.map(localRect); - latLonTrans.insertMulti(object, latLon); - - QTransform latLonWest; - latLonWest.translate(360.0 * 3600.0, 0.0); - latLonWest = latLon * latLonWest; - - polys << latLonWest.map(localRect); - latLonTrans.insertMulti(object, latLonWest); - - QTransform latLonEast; - latLonEast.translate(-360.0 * 3600.0, 0.0); - latLonEast = latLon * latLonEast; - - polys << latLonEast.map(localRect); - latLonTrans.insertMulti(object, latLonEast); - - } else if (object->transformType() == QGeoMapObject::ExactTransform) { - if (object->units() == QGeoMapObject::MeterUnit) { - if (!exactMetersToSeconds(origin, object, item, polys)) - return; - } else if (object->units() == QGeoMapObject::AbsoluteArcSecondUnit || - object->units() == QGeoMapObject::RelativeArcSecondUnit) { - if (!exactSecondsToSeconds(origin, object, item, polys)) - return; - } else { - qWarning("QGeoMapData: unknown units for map object"); - return; - } - } - - QList<QGraphicsItem*> items = latLonItemsRev.values(object); - if (items.size() != polys.size()) { - foreach (QGraphicsItem *item, items) { - latLonScene->removeItem(item); - latLonItems.remove(item); - delete item; - } - latLonItemsRev.remove(object); - - foreach (QPolygonF poly, polys) { - QGraphicsItem *item = new QGraphicsPolygonItem(poly); - //item->setZValue(object->zValue()); - item->setVisible(true); - latLonItems.insert(item, object); - latLonItemsRev.insertMulti(object, item); - latLonScene->addItem(item); - } - } else { - for (int i = 0; i < polys.size(); ++i) { - QGraphicsItem *item = items.at(i); - - if (!item) - continue; - - QGraphicsPolygonItem *pi = dynamic_cast<QGraphicsPolygonItem*>(item); - Q_ASSERT(pi); - pi->setPolygon(polys.at(i)); - // pi->setZValue(object->zValue()); - } - } -} - -void QGeoMapObjectEngine::updatePixelTransform(QGeoMapObject *object) -{ - QGeoCoordinate origin = object->origin(); - QGraphicsItem *item = graphicsItemFromMapObject(object); - - // skip any objects without graphicsitems - if (!item) - return; - - QRectF localRect = (item->boundingRect() | item->childrenBoundingRect()); - - // skip any objects with invalid bounds - if (!localRect.isValid() || localRect.isEmpty() || localRect.isNull()) - return; - - QList<QPolygonF> polys; - - pixelTrans.remove(object); - if (object->transformType() == QGeoMapObject::BilinearTransform) { - bilinearSecondsToScreen(origin, object, polys); - } else if (object->transformType() == QGeoMapObject::ExactTransform) { - if (object->units() == QGeoMapObject::PixelUnit) { - pixelShiftToScreen(origin, object, polys); - } else { - exactPixelMap(origin, object, polys); - } - } - - QList<QGraphicsItem*> items = pixelItemsRev.values(object); - - if (items.size() != polys.size()) { - foreach (QGraphicsItem *item, items) { - pixelItems.remove(item); - pixelScene->removeItem(item); - delete item; - } - pixelItemsRev.remove(object); - foreach (QPolygonF poly, polys) { - QGraphicsPolygonItem *item = new QGraphicsPolygonItem(poly); - //item->setZValue(object->zValue()); - item->setVisible(true); - pixelItems.insert(item, object); - pixelItemsRev.insertMulti(object, item); - pixelScene->addItem(item); - } - } else { - for (int i = 0; i < polys.size(); ++i) { - QGraphicsItem *item = items.at(i); - - if (!item) - continue; - - QGraphicsPolygonItem *pi = dynamic_cast<QGraphicsPolygonItem*>(item); - Q_ASSERT(pi); - pi->setPolygon(polys.at(i)); - //pi->setZValue(object->zValue()); - } - } -} - -QPolygonF QGeoMapObjectEngine::latLonViewport() -{ - QPolygonF view; - QGeoBoundingBox viewport = md->viewport(); - QGeoCoordinate c, c2; - double offset = 0.0; - - c = viewport.bottomLeft(); - view << QPointF(c.longitude() * 3600.0, c.latitude() * 3600.0); - c2 = viewport.bottomRight(); - if (c2.longitude() <= c.longitude()) - offset = 360.0 * 3600.0; - view << QPointF(c2.longitude() * 3600.0 + offset, c2.latitude() * 3600.0); - c = viewport.topRight(); - view << QPointF(c.longitude() * 3600.0 + offset, c.latitude() * 3600.0); - c = viewport.topLeft(); - view << QPointF(c.longitude() * 3600.0, c.latitude() * 3600.0); - - return view; -} - -QPolygonF QGeoMapObjectEngine::polyToScreen(const QPolygonF &poly) -{ - QPolygonF r; -#if QT_VERSION >= 0x040700 - r.reserve(poly.size()); -#endif - foreach (QPointF pt, poly) { - const double x = pt.x() / 3600.0; - const double y = pt.y() / 3600.0; - const QPointF pixel = mdp->coordinateToScreenPosition(x, y); - r.append(pixel); - } - return r; -} - -QGraphicsItem* QGeoMapObjectEngine::graphicsItemFromMapObject(QGeoMapObject *object) -{ - if (!object || !object->info()) - return 0; - - QGeoTiledMapObjectInfo *tiledInfo - = static_cast<QGeoTiledMapObjectInfo*>(object->info()); - - if (tiledInfo) - return tiledInfo->graphicsItem; - - return 0; -} - -#include "moc_qgeomapobjectengine_p.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapobjectengine_p.h b/src/location/maps/qgeomapobjectengine_p.h deleted file mode 100644 index 91d0bc97..00000000 --- a/src/location/maps/qgeomapobjectengine_p.h +++ /dev/null @@ -1,175 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPOBJECTENGINE_P_H -#define QGEOMAPOBJECTENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qmobilityglobal.h" -#include "qgeomapdata_p.h" -#include "qgeomapdata.h" -#include "qgeomapobject_p.h" -#include "qgeomapobject.h" - -#include <QHash> -#include <QList> - -QT_BEGIN_NAMESPACE -class QTransform; -class QGraphicsItem; -class QGraphicsScene; - - -class QGeoMapObjectEngine : public QObject -{ - Q_OBJECT -public: - QGeoMapObjectEngine(QGeoMapData *mapData, QGeoMapDataPrivate *mapDataP); - virtual ~QGeoMapObjectEngine(); - - QGeoMapData *md; - QGeoMapDataPrivate *mdp; - - double exactMappingTolerance; - - /*** Lookup hashes and scenes ***/ - - QHash<const QGeoMapObject*, QGraphicsItem*> latLonExact; - QHash<const QGeoMapObject*, QGraphicsItem*> pixelExact; - - QHash<const QGeoMapObject*, QTransform> latLonTrans; - QGraphicsScene *latLonScene; - QHash<QGraphicsItem*, QGeoMapObject*> latLonItems; - QHash<QGeoMapObject*, QGraphicsItem*> latLonItemsRev; - - QHash<const QGeoMapObject*, QTransform> pixelTrans; - QGraphicsScene *pixelScene; - QHash<QGraphicsItem*, QGeoMapObject*> pixelItems; - QHash<QGeoMapObject*, QGraphicsItem*> pixelItemsRev; - - /*** Object management ***/ - - virtual void addObject(QGeoMapObject *object); - virtual void removeObject(QGeoMapObject *object); - - /*** Updating and validity ***/ - - virtual void updateTransforms(); - - QList<QGeoMapObject*> objectsForPixelUpdate; - QList<QGeoMapObject*> objectsForLatLonUpdate; - - virtual void updatePixelsForGroup(QGeoMapGroupObject *group); - virtual void updateLatLonsForGroup(QGeoMapGroupObject *group); - - virtual void updateLatLonTransform(QGeoMapObject *object); - virtual void updatePixelTransform(QGeoMapObject *object); - - virtual void rebuildScenes(); - - virtual void invalidateObject(QGeoMapObject *obj); - virtual void invalidateZoomDependents(); - virtual void invalidatePixelsForViewport(bool updateNow=true); - virtual void trimPixelTransforms(); - -public: - - /*** Exact transform functions ***/ - - // these are virtual so subclasses can add new types - // of exact transform - virtual bool exactMetersToSeconds(const QGeoCoordinate &origin, - QGeoMapObject *object, - QGraphicsItem *item, - QList<QPolygonF> &polys); - virtual bool exactSecondsToSeconds(const QGeoCoordinate &origin, - QGeoMapObject *object, - QGraphicsItem *item, - QList<QPolygonF> &polys); - - virtual void exactPixelMap(const QGeoCoordinate &origin, - QGeoMapObject *object, - QList<QPolygonF> &polys); - - /*** Bilinear transforms ***/ - - void bilinearMetersToSeconds(const QGeoCoordinate &origin, - QGraphicsItem *item, - QPolygonF &local, - QTransform &latLon); - void bilinearPixelsToSeconds(const QGeoCoordinate &origin, - QGraphicsItem *item, - QPolygonF &local, - QTransform &latLon); - void bilinearSecondsToScreen(const QGeoCoordinate &origin, - QGeoMapObject *object, - QList<QPolygonF> &polys); - - /*** Pixel shift transforms ***/ - - void pixelShiftToScreen(const QGeoCoordinate &origin, - QGeoMapObject *object, - QList<QPolygonF> &polys); - - /*** Misc ***/ - virtual QGraphicsItem* graphicsItemFromMapObject(QGeoMapObject *object); - -private: - /*** Internal helpers ***/ - QPolygonF latLonViewport(); - QPolygonF polyToScreen(const QPolygonF &poly); - - Q_DISABLE_COPY(QGeoMapObjectEngine) -}; - -QT_END_NAMESPACE - -#endif // QGEOMAPOBJECTENGINE_P_H diff --git a/src/location/maps/qgeomapobjectinfo.cpp b/src/location/maps/qgeomapobjectinfo.cpp deleted file mode 100644 index eeefcb8a..00000000 --- a/src/location/maps/qgeomapobjectinfo.cpp +++ /dev/null @@ -1,264 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapobjectinfo.h" -#include "qgeomapobjectinfo_p.h" - -#include "qgeomapdata.h" -#include "qgeomapdata_p.h" -#include "qgeomapobject.h" -#include "qgeomapobject_p.h" -#include "qgeoboundingbox.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapObjectInfo - \brief The QGeoMapObjectInfo class is the base class used to define the - parts of QGeoMapObject and its subclasses that are specific to a - particular QGeoMapData subclass. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-impl - - Most of the mapping functionality is provided by a QGeoMapData subclass, - including the rendering of the map itself. - - This means that QGeoMapData subclasses need to be able to render each of - the QGeoMapObject instances and instances of the QGeoMapObject subclasses. - - Furthermore, the need to be able to create and manipulate map objects - independently from the QGeoMapData instance precludes the use of a set of - factory methods for creating QGeoMapData specific map objects. - - The QGeoMapObjectInfo class is used to provide the QGeoMapData subclass - specific behaviours for the map objects in a way which fulfils this need, - as the QGeoMapObjectInfo instances are only created at the point when a - map object becomes associated with a QGeoMapData subclass - which is most - commonly when the object is added to a QGraphicsGeoMap. -*/ - -/*! - Constructs a new object info instance which will provide the behaviours of - \a mapObject which are specific to \a mapData. -*/ -QGeoMapObjectInfo::QGeoMapObjectInfo(QGeoMapData *mapData, QGeoMapObject *mapObject) - : QObject(mapObject), - d_ptr(new QGeoMapObjectInfoPrivate(mapData, mapObject)) {} - -/*! - Destroys this info object. -*/ -QGeoMapObjectInfo::~QGeoMapObjectInfo() -{ - delete d_ptr; -} - -/*! - This function is run after the constructor. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::init() {} - -/*! - This function is called when the window size of the map changes to - \a windowSize. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::windowSizeChanged(const QSizeF &windowSize) -{ - Q_UNUSED(windowSize) -} - -/*! - This function is called when the zoom level of the map changes to - \a zoomLevel. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::zoomLevelChanged(qreal zoomLevel) -{ - Q_UNUSED(zoomLevel) -} - -/*! - This function is called when the center of the map changes to - \a coordinate. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::centerChanged(const QGeoCoordinate &coordinate) -{ - Q_UNUSED(coordinate) -} - -/*! - This function is run when the z value of the object changes to \a zValue. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::zValueChanged(int zValue) -{ - Q_UNUSED(zValue) -} - -/*! - This function is run when the visible state of the object changes to - \a visible. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::visibleChanged(bool visible) -{ - Q_UNUSED(visible) -} - -/*! - This function is run when the selected state of the object changes to - \a selected. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::selectedChanged(bool selected) -{ - Q_UNUSED(selected) -} - -/*! - This function is run when the origin of the object changes to - \a origin. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::originChanged(const QGeoCoordinate &origin) -{ - Q_UNUSED(origin); -} - -/*! - This function is run when the coordinate units of the object changes to - \a units. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::unitsChanged(QGeoMapObject::CoordinateUnit units) -{ - Q_UNUSED(units); -} - -/*! - This function is run when the transform type of the object changes to - \a transformType. - - The default implementation does nothing. -*/ -void QGeoMapObjectInfo::transformTypeChanged(QGeoMapObject::TransformType transformType) -{ - Q_UNUSED(transformType); -} - -/*! - Returns a bounding box which contains this map object. - - The default implementation returns an invalid bounding box. -*/ -QGeoBoundingBox QGeoMapObjectInfo::boundingBox() const -{ - return QGeoBoundingBox(); -} - -/*! - Returns whether \a coordinate is contained with the boundary of this - map object. - - The default implementation returns false. -*/ -bool QGeoMapObjectInfo::contains(const QGeoCoordinate &coordinate) const -{ - Q_UNUSED(coordinate) - return false; -} - -/*! - Returns the QGeoMapData instance associated with this info object. -*/ -QGeoMapData* QGeoMapObjectInfo::mapData() -{ - return d_ptr->mapData; -} - -// Need to keep this for BC, otherwise would probably replace with const -// version -/*! - Returns the QGeoMapObject instance associated with this info object. -*/ -QGeoMapObject* QGeoMapObjectInfo::mapObject() -{ - return d_ptr->mapObject; -} - -/*! - Returns the QGeoMapObject instance associated with this info object. -*/ -QGeoMapObject* QGeoMapObjectInfo::mapObject() const -{ - return d_ptr->mapObject; -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapObjectInfoPrivate::QGeoMapObjectInfoPrivate(QGeoMapData *mapData, QGeoMapObject *mapObject) - : mapData(mapData), - mapObject(mapObject) {} - -QGeoMapObjectInfoPrivate::~QGeoMapObjectInfoPrivate() {} - -/******************************************************************************* -*******************************************************************************/ - -#include "moc_qgeomapobjectinfo.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapoverlay.cpp b/src/location/maps/qgeomapoverlay.cpp deleted file mode 100644 index 8ee2e80d..00000000 --- a/src/location/maps/qgeomapoverlay.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomapoverlay.h" -#include "qgeomapoverlay_p.h" - -#include "qgeomapdata.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapOverlay - \brief The QGeoMapOverlay class is used to draw overlays on the map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping - - This allows for general drawing to occur in overlays above the map. -*/ - -/*! - Constructs a new map overlay object. -*/ -QGeoMapOverlay::QGeoMapOverlay() - : d_ptr(new QGeoMapOverlayPrivate()) {} - -/*! - Destroys this map overlay object. -*/ -QGeoMapOverlay::~QGeoMapOverlay() -{ - delete d_ptr; -} - -/*! -\fn void QGeoMapOverlay::paint(QPainter *painter, const QStyleOptionGraphicsItem *option) - -Paints the overlay on \a painter, using the options \a option. -*/ - -/*! - \internal -*/ -void QGeoMapOverlay::setMapData(QGeoMapData * mapData) -{ - d_ptr->mapData = mapData; -} - -/*! - Returns the QGeoMapData instance that this overlay is associated, or 0 - if there is not such instance. - - The QGeoMapData instance provides access to information such as the - zoom level and viewport position as well as methods to convert - screen positions to coordinates and vice-versa. -*/ -QGeoMapData const * QGeoMapOverlay::mapData() const -{ - return d_ptr->mapData; -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapOverlayPrivate::QGeoMapOverlayPrivate() - : mapData(0) {} - - -QGeoMapOverlayPrivate::~QGeoMapOverlayPrivate() {} - -/******************************************************************************* -*******************************************************************************/ - -QT_END_NAMESPACE diff --git a/src/location/maps/qgeomappingmanager.cpp b/src/location/maps/qgeomappingmanager.cpp index 23027fa8..adc65691 100644 --- a/src/location/maps/qgeomappingmanager.cpp +++ b/src/location/maps/qgeomappingmanager.cpp @@ -42,7 +42,9 @@ #include "qgeomappingmanager.h" #include "qgeomappingmanager_p.h" #include "qgeomappingmanagerengine.h" +#include "qgeotiledmapreply.h" +#include <QTimer> #include <QNetworkProxy> #include <QLocale> @@ -90,11 +92,36 @@ QGeoMappingManager::QGeoMappingManager(QGeoMappingManagerEngine *engine, QObject d_ptr(new QGeoMappingManagerPrivate) { d_ptr->engine = engine; - if (d_ptr->engine) { - d_ptr->engine->setParent(this); - } else { + if (!d_ptr->engine) { qFatal("The mapping manager engine that was set for this mapping manager was NULL."); } + + d_ptr->thread= new QThread; + + connect(d_ptr->engine, + SIGNAL(tileFinished(TileSpec,QByteArray)), + this, + SIGNAL(tileFinished(TileSpec,QByteArray)), + Qt::QueuedConnection); + connect(d_ptr->engine, + SIGNAL(tileError(TileSpec,QString)), + this, + SIGNAL(tileError(TileSpec,QString)), + Qt::QueuedConnection); + connect(d_ptr->engine, + SIGNAL(queueFinished()), + this, + SIGNAL(queueFinished()), + Qt::QueuedConnection); + + connect(d_ptr->thread, + SIGNAL(started()), + d_ptr->engine, + SLOT(threadStarted()), + Qt::QueuedConnection); + + d_ptr->engine->moveToThread(d_ptr->thread); + QTimer::singleShot(0, d_ptr->thread, SLOT(start())); } /*! @@ -129,29 +156,47 @@ int QGeoMappingManager::managerVersion() const return d_ptr->engine->managerVersion(); } -/*! - Returns a new QGeoMapData instance which will be managed by this manager. -*/ -QGeoMapData* QGeoMappingManager::createMapData() +void QGeoMappingManager::requestTiles(const QList<TileSpec> &tiles) { - return d_ptr->engine->createMapData(); + QMetaObject::invokeMethod(d_ptr->engine, "requestTiles", + Qt::QueuedConnection, + Q_ARG(QList<TileSpec>, tiles)); } -/*! - Returns a list of the map types supported by this manager. -*/ -QList<QGraphicsGeoMap::MapType> QGeoMappingManager::supportedMapTypes() const -{ - return d_ptr->engine->supportedMapTypes(); -} - -/*! - Returns a list of the connectivity modes supported by this manager. -*/ -QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManager::supportedConnectivityModes() const -{ - return d_ptr->engine->supportedConnectivityModes(); -} +//QGeoTiledMapReply* QGeoMappingManager::getTileImage(const TileSpec &spec) +//{ +// qWarning() << d_ptr->engine->minimumZoomLevel() << d_ptr->engine->maximumZoomLevel(); +// QGeoTiledMapReply* reply = d_ptr->engine->getTileImage(spec); + +// connect(reply, SIGNAL(finished()), this, SLOT(tileFinished())); + +// return reply; +//} + +//void QGeoMappingManager::tileFinished() +//{ +// QGeoTiledMapReply *reply = qobject_cast<QGeoTiledMapReply*>(sender()); +// if (!reply) +// return; + +// emit finished(reply); +//} + +///*! +// Returns a list of the map types supported by this manager. +//*/ +//QList<QGraphicsGeoMap::MapType> QGeoMappingManager::supportedMapTypes() const +//{ +// return d_ptr->engine->supportedMapTypes(); +//} + +///*! +// Returns a list of the connectivity modes supported by this manager. +//*/ +//QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManager::supportedConnectivityModes() const +//{ +// return d_ptr->engine->supportedConnectivityModes(); +//} /*! Returns the minimum zoom level supported by this manager. @@ -214,18 +259,6 @@ qreal QGeoMappingManager::maximumTilt() const } /*! - Returns whether custom map objects are supported by this engine. - - Custom map objects are map objects based on QGraphicsItem instances, which - are hard to support in cases where the map rendering is not being - performed by the Qt Graphics View framwork. -*/ -bool QGeoMappingManager::supportsCustomMapObjects() const -{ - return d_ptr->engine->supportsCustomMapObjects(); -} - -/*! Sets the locale to be used by the this manager to \a locale. If this mapping manager supports returning map labels @@ -257,6 +290,7 @@ QGeoMappingManagerPrivate::~QGeoMappingManagerPrivate() { if (engine) delete engine; + delete thread; } #include "moc_qgeomappingmanager.cpp" diff --git a/src/location/maps/qgeomappingmanager.h b/src/location/maps/qgeomappingmanager.h index d2e51b32..59c9b57d 100644 --- a/src/location/maps/qgeomappingmanager.h +++ b/src/location/maps/qgeomappingmanager.h @@ -42,7 +42,9 @@ #ifndef QGEOMAPPINGMANAGER_H #define QGEOMAPPINGMANAGER_H -#include "qgraphicsgeomap.h" +//#include "qgraphicsgeomap.h" + +#include "qmobilityglobal.h" #include <QObject> #include <QSize> @@ -54,12 +56,14 @@ class QLocale; class QGeoBoundingBox; class QGeoCoordinate; -class QGeoMapData; class QGeoMappingManagerPrivate; class QGeoMapRequestOptions; class QGeoMappingManagerEngine; +class QGeoTiledMapReply; +class TileSpec; + class Q_LOCATION_EXPORT QGeoMappingManager : public QObject { Q_OBJECT @@ -70,10 +74,20 @@ public: QString managerName() const; int managerVersion() const; - QGeoMapData* createMapData(); - - QList<QGraphicsGeoMap::MapType> supportedMapTypes() const; - QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const; + void requestTiles(const QList<TileSpec> &tiles); + + /* + Possibly replace the MapType enum with some kind of struct / class + MapLayer { + enum? type + QString key; + QString description; + } + where enum includes things like street, satellite (day), satellite (night), traffic + but _really_ needs to include custom so people can go wild with layers + */ +// QList<QGraphicsGeoMap::MapType> supportedMapTypes() const; +// QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const; qreal minimumZoomLevel() const; qreal maximumZoomLevel() const; @@ -84,11 +98,14 @@ public: qreal minimumTilt() const; qreal maximumTilt() const; - bool supportsCustomMapObjects() const; - void setLocale(const QLocale &locale); QLocale locale() const; +signals: + void tileFinished(const TileSpec &spec, const QByteArray &bytes); + void tileError(const TileSpec &spec, const QString &errorString); + void queueFinished(); + private: QGeoMappingManager(QGeoMappingManagerEngine *engine, QObject *parent = 0); diff --git a/src/location/maps/qgeomappingmanager_p.h b/src/location/maps/qgeomappingmanager_p.h index fa0cbbca..73688384 100644 --- a/src/location/maps/qgeomappingmanager_p.h +++ b/src/location/maps/qgeomappingmanager_p.h @@ -53,10 +53,11 @@ // We mean it. // -#include "qgraphicsgeomap.h" +#include "qmobilityglobal.h" #include <QSize> #include <QList> +#include <QThread> QT_BEGIN_NAMESPACE @@ -68,6 +69,7 @@ public: QGeoMappingManagerPrivate(); ~QGeoMappingManagerPrivate(); + QThread *thread; QGeoMappingManagerEngine *engine; private: diff --git a/src/location/maps/qgeomappingmanagerengine.cpp b/src/location/maps/qgeomappingmanagerengine.cpp index 362ec23f..df1f464f 100644 --- a/src/location/maps/qgeomappingmanagerengine.cpp +++ b/src/location/maps/qgeomappingmanagerengine.cpp @@ -41,6 +41,8 @@ #include "qgeomappingmanagerengine.h" #include "qgeomappingmanagerengine_p.h" +#include "qgeotiledmapreply.h" +#include "tilespec.h" #include <QNetworkProxy> @@ -76,7 +78,7 @@ QGeoMappingManagerEngine::QGeoMappingManagerEngine(const QMap<QString, QVariant> : QObject(parent), d_ptr(new QGeoMappingManagerEnginePrivate()) { - Q_UNUSED(parameters) + d_ptr->parameters = parameters; } /*! @@ -95,6 +97,124 @@ QGeoMappingManagerEngine::~QGeoMappingManagerEngine() delete d; } +QMap<QString, QVariant> QGeoMappingManagerEngine::parameters() const +{ + Q_D(const QGeoMappingManagerEngine); + return d->parameters; +} + +void QGeoMappingManagerEngine::init() +{ +} + +void QGeoMappingManagerEngine::threadStarted() +{ + Q_D(QGeoMappingManagerEngine); + + init(); + + d->timer_ = new QTimer(this); + + d->timer_->setInterval(0); + + connect(d->timer_, + SIGNAL(timeout()), + this, + SLOT(requestNextTile())); + + d->started_ = true; + if (!d->queue_.isEmpty()) + d->timer_->start(); +} + + +void QGeoMappingManagerEngine::requestTiles(const QList<TileSpec> &tiles) +{ + Q_D(QGeoMappingManagerEngine); + + if (!d->started_) { + d->queue_ = tiles; + return; + } + + for (int i = 0; i < d->queue_.size(); ++i) { + QGeoTiledMapReply* reply = d->invmap_.value(d->queue_.at(i), 0); + if (reply) { + reply->abort(); + d->map_.remove(reply); + d->invmap_.remove(d->queue_.at(i)); + reply->deleteLater(); + } + } + + d->queue_ = tiles; + + if (!d->queue_.empty()) + d->timer_->start(); +} + +void QGeoMappingManagerEngine::requestNextTile() +{ + Q_D(QGeoMappingManagerEngine); + + TileSpec ts = d->queue_.takeFirst(); + + QGeoTiledMapReply *reply = getTileImage(ts); + + if (reply->isFinished()) { + handleReply(reply, ts); + } else { + connect(reply, + SIGNAL(finished()), + this, + SLOT(finished())); + + d->map_.insert(reply, ts); + d->invmap_.insert(ts, reply); + } + + if (d->queue_.isEmpty()) + d->timer_->stop(); +} + +void QGeoMappingManagerEngine::finished() +{ + Q_D(QGeoMappingManagerEngine); + + QGeoTiledMapReply *reply = qobject_cast<QGeoTiledMapReply*>(sender()); + if (!reply) + return; + + if (!d->map_.contains(reply)) { + reply->deleteLater(); + return; + } + + TileSpec spec = d->map_.value(reply); + + d->map_.remove(reply); + d->invmap_.remove(spec); + + handleReply(reply, spec); +} + +void QGeoMappingManagerEngine::handleReply(QGeoTiledMapReply *reply, const TileSpec &spec) +{ + Q_D(QGeoMappingManagerEngine); + + if (reply->error() == QGeoTiledMapReply::NoError) { + QByteArray bytes = reply->mapImageData(); + emit tileFinished(spec, bytes); + } else { + emit tileError(spec, reply->errorString()); + } + + if (d->queue_.isEmpty()) + emit queueFinished(); + + reply->deleteLater(); +} + /*! Sets the name which this engine implementation uses to distinguish itself from the implementations provided by other plugins to \a managerName. @@ -141,42 +261,23 @@ int QGeoMappingManagerEngine::managerVersion() const return d_ptr->managerVersion; } -/*! -\fn QGeoMapData* QGeoMappingManagerEngine::createMapData() - - Returns a new QGeoMapData instance which will be managed by - this manager. - - A QGeoMapData instance contains and manages the information about - what a QGraphicsGeoMap is looking at. A single manager can be used by several - QGraphicsGeoMap instances since each instance has an associated QGeoMapData instance. - - The QGeoMapData instance can be treated as a kind of session object, or - as a model in a model-view-controller architecture, with QGraphicsGeoMap - as the view and QGeoMappingManagerEngine as the controller. - - Subclasses of QGeoMappingManagerEngine are free to override this function - to return subclasses of QGeoMapData in order to customize the - map. -*/ - -/*! - Returns a list of the map types supported by this engine. -*/ -QList<QGraphicsGeoMap::MapType> QGeoMappingManagerEngine::supportedMapTypes() const -{ - Q_D(const QGeoMappingManagerEngine); - return d->supportedMapTypes; -} - -/*! - Returns a list of the connectivity modes supported by this engine. -*/ -QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManagerEngine::supportedConnectivityModes() const -{ - Q_D(const QGeoMappingManagerEngine); - return d->supportedConnectivityModes; -} +///*! +// Returns a list of the map types supported by this engine. +//*/ +//QList<QGraphicsGeoMap::MapType> QGeoMappingManagerEngine::supportedMapTypes() const +//{ +// Q_D(const QGeoMappingManagerEngine); +// return d->supportedMapTypes; +//} + +///*! +// Returns a list of the connectivity modes supported by this engine. +//*/ +//QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManagerEngine::supportedConnectivityModes() const +//{ +// Q_D(const QGeoMappingManagerEngine); +// return d->supportedConnectivityModes; +//} /*! Returns the minimum zoom level supported by this engine. @@ -203,32 +304,44 @@ qreal QGeoMappingManagerEngine::maximumZoomLevel() const return d->maximumZoomLevel; } -/*! - Sets the list of map types supported by this engine to \a mapTypes. - - Subclasses of QGeoMappingManagerEngine should use this function to ensure - that supportedMapTypes() provides accurate information. -*/ -void QGeoMappingManagerEngine::setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes) +///*! +// Sets the list of map types supported by this engine to \a mapTypes. + +// Subclasses of QGeoMappingManagerEngine should use this function to ensure +// that supportedMapTypes() provides accurate information. +//*/ +//void QGeoMappingManagerEngine::setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes) +//{ +// Q_D(QGeoMappingManagerEngine); +// d->supportedMapTypes = mapTypes; +//} + +///*! +// Sets the list of connectivity modes supported by this engine to \a connectivityModes. + +// Subclasses of QGeoMappingManagerEngine should use this function to ensure +// that supportedConnectivityModes() provides accurate information. + +// If createMapData does not specify a connectivity mode the first mode from +// \a connectivityModes will be used, or QGraphicsGeoMap::NoConnectivity will +// be used if \a connectivityModes is empty. +//*/ +//void QGeoMappingManagerEngine::setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes) +//{ +// Q_D(QGeoMappingManagerEngine); +// d->supportedConnectivityModes = connectivityModes; +//} + +void QGeoMappingManagerEngine::setTileSize(const QSize &tileSize) { Q_D(QGeoMappingManagerEngine); - d->supportedMapTypes = mapTypes; + d->tileSize = tileSize; } -/*! - Sets the list of connectivity modes supported by this engine to \a connectivityModes. - - Subclasses of QGeoMappingManagerEngine should use this function to ensure - that supportedConnectivityModes() provides accurate information. - - If createMapData does not specify a connectivity mode the first mode from - \a connectivityModes will be used, or QGraphicsGeoMap::NoConnectivity will - be used if \a connectivityModes is empty. -*/ -void QGeoMappingManagerEngine::setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes) +QSize QGeoMappingManagerEngine::tileSize() const { - Q_D(QGeoMappingManagerEngine); - d->supportedConnectivityModes = connectivityModes; + Q_D(const QGeoMappingManagerEngine); + return d->tileSize; } /*! @@ -364,32 +477,6 @@ void QGeoMappingManagerEngine::setSupportsTilting(bool supportsTilting) } /*! - Returns whether custom map objects are supported by this engine. - - Custom map objects are map objects based on QGraphicsItem instances, which - are hard to support in cases where the map rendering is not being - performed by the Qt Graphics View framwork. -*/ -bool QGeoMappingManagerEngine::supportsCustomMapObjects() const -{ - Q_D(const QGeoMappingManagerEngine); - return d->supportsCustomMapObjects; -} - -/*! - Sets whether custom map objects are supported by this engine to \a supportsCustomMapObjects. - - Custom map objects are map objects based on QGraphicsItem instances, which - are hard to support in cases where the map rendering is not being - performed by the Qt Graphics View framwork. -*/ -void QGeoMappingManagerEngine::setSupportsCustomMapObjects(bool supportsCustomMapObjects) -{ - Q_D(QGeoMappingManagerEngine); - d->supportsCustomMapObjects = supportsCustomMapObjects; -} - -/*! Sets the locale to be used by the this manager to \a locale. If this mapping manager supports returning map labels @@ -422,7 +509,7 @@ QGeoMappingManagerEnginePrivate::QGeoMappingManagerEnginePrivate() supportsTilting(false), minimumTilt(0.0), maximumTilt(0.0), - supportsCustomMapObjects(false) {} + started_(false) {} QGeoMappingManagerEnginePrivate::~QGeoMappingManagerEnginePrivate() {} diff --git a/src/location/maps/qgeomappingmanagerengine.h b/src/location/maps/qgeomappingmanagerengine.h index f8dd9872..be15438c 100644 --- a/src/location/maps/qgeomappingmanagerengine.h +++ b/src/location/maps/qgeomappingmanagerengine.h @@ -42,7 +42,9 @@ #ifndef QGEOMAPPINGMANAGERENGINE_H #define QGEOMAPPINGMANAGERENGINE_H -#include "qgraphicsgeomap.h" +//#include "qgraphicsgeomap.h" + +#include "qmobilityglobal.h" #include <QObject> #include <QSize> @@ -60,6 +62,9 @@ class QGeoMapRequestOptions; class QGeoMappingManagerEnginePrivate; +class QGeoTiledMapReply; +class TileSpec; + class Q_LOCATION_EXPORT QGeoMappingManagerEngine : public QObject { Q_OBJECT @@ -68,13 +73,15 @@ public: QGeoMappingManagerEngine(const QMap<QString, QVariant> ¶meters, QObject *parent = 0); virtual ~QGeoMappingManagerEngine(); + QMap<QString, QVariant> parameters() const; + QString managerName() const; int managerVersion() const; - virtual QGeoMapData* createMapData() = 0; +// QList<QGraphicsGeoMap::MapType> supportedMapTypes() const; +// QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const; - QList<QGraphicsGeoMap::MapType> supportedMapTypes() const; - QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const; + QSize tileSize() const; qreal minimumZoomLevel() const; qreal maximumZoomLevel() const; @@ -85,16 +92,31 @@ public: qreal minimumTilt() const; qreal maximumTilt() const; - bool supportsCustomMapObjects() const; - void setLocale(const QLocale &locale); QLocale locale() const; + virtual void init(); + +public slots: + void threadStarted(); + void requestTiles(const QList<TileSpec> &tiles); + +private slots: + void requestNextTile(); + void finished(); + +signals: + void tileFinished(const TileSpec &spec, const QByteArray &bytes); + void tileError(const TileSpec &spec, const QString &errorString); + void queueFinished(); + protected: QGeoMappingManagerEngine(QGeoMappingManagerEnginePrivate *dd, QObject *parent = 0); - void setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes); - void setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes); +// void setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes); +// void setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes); + + void setTileSize(const QSize &tileSize); void setMinimumZoomLevel(qreal minimumZoom); void setMaximumZoomLevel(qreal maximumZoom); @@ -105,11 +127,13 @@ protected: void setSupportsBearing(bool supportsBearing); void setSupportsTilting(bool supportsTilting); - void setSupportsCustomMapObjects(bool supportsCustomMapObjects); - QGeoMappingManagerEnginePrivate* d_ptr; private: + virtual QGeoTiledMapReply* getTileImage(const TileSpec &spec) = 0; + + void handleReply(QGeoTiledMapReply *reply, const TileSpec &spec); + void setManagerName(const QString &managerName); void setManagerVersion(int managerVersion); diff --git a/src/location/maps/qgeomappingmanagerengine_p.h b/src/location/maps/qgeomappingmanagerengine_p.h index 95decae5..f244c639 100644 --- a/src/location/maps/qgeomappingmanagerengine_p.h +++ b/src/location/maps/qgeomappingmanagerengine_p.h @@ -53,11 +53,16 @@ // We mean it. // -#include "qgraphicsgeomap.h" +//#include "qgraphicsgeomap.h" #include <QSize> #include <QList> +#include <QMap> #include <QLocale> +#include <QTimer> + +class TileSpec; +class QGeoTiledMapReply; QT_BEGIN_NAMESPACE @@ -67,21 +72,29 @@ public: QGeoMappingManagerEnginePrivate(); virtual ~QGeoMappingManagerEnginePrivate(); + QMap<QString, QVariant> parameters; + QString managerName; int managerVersion; - QList<QGraphicsGeoMap::MapType> supportedMapTypes; - QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes; +// QList<QGraphicsGeoMap::MapType> supportedMapTypes; +// QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes; + QSize tileSize; qreal minimumZoomLevel; qreal maximumZoomLevel; bool supportsBearing; bool supportsTilting; qreal minimumTilt; qreal maximumTilt; - bool supportsCustomMapObjects; QLocale locale; + bool started_; + QTimer *timer_; + QList<TileSpec> queue_; + QHash<QGeoTiledMapReply*, TileSpec> map_; + QHash<TileSpec, QGeoTiledMapReply*> invmap_; + private: Q_DISABLE_COPY(QGeoMappingManagerEnginePrivate) }; diff --git a/src/location/maps/qgeomappixmapobject.cpp b/src/location/maps/qgeomappixmapobject.cpp deleted file mode 100644 index 3b5a6a74..00000000 --- a/src/location/maps/qgeomappixmapobject.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomappixmapobject.h" -#include "qgeomappixmapobject_p.h" -#include "qgeoboundingbox.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapPixmapObject - \brief The QGeoMapPixmapObject class is a QGeoMapObject used to draw - a pixmap on a map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The pixmap object is rendered such that the upper left corner of - QGeoMapPixmapObject::pixmap will be drawn QGeoMapPixmapObject::offset - pixels away from the position of QGeoMapPixmapObject::coordinate on the - map. -*/ - -/*! - Constructs a new pixmap object. -*/ -QGeoMapPixmapObject::QGeoMapPixmapObject() - : d_ptr(new QGeoMapPixmapObjectPrivate()) -{ -} - -/*! - Constructs a new pixmap object which will draw the pixmap \a pixmap at an - offset of \a offset pixels from the coordinate \a coordinate. -*/ -QGeoMapPixmapObject::QGeoMapPixmapObject(const QGeoCoordinate &coordinate, const QPoint &offset, const QPixmap &pixmap) - : d_ptr(new QGeoMapPixmapObjectPrivate()) -{ - setOrigin(coordinate); - d_ptr->pixmap = pixmap; - d_ptr->offset = offset; -} - -/*! - Destroys this pixmap object. -*/ -QGeoMapPixmapObject::~QGeoMapPixmapObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapPixmapObject::type() const -{ - return QGeoMapObject::PixmapType; -} - -/*! - \property QGeoMapPixmapObject::coordinate - \brief This property holds the coordinate that specifies where the pixmap - will be drawn by this pixmap object. - - The default value of this property is an invalid coordinate. While the - value of this property is invalid the pixmap object will not be displayed. -*/ -QGeoCoordinate QGeoMapPixmapObject::coordinate() const -{ - return origin(); -} - -void QGeoMapPixmapObject::setCoordinate(const QGeoCoordinate &coordinate) -{ - if (origin() != coordinate) { - setOrigin(coordinate); - emit coordinateChanged(coordinate); - } -} - -/*! - \property QGeoMapPixmapObject::pixmap - \brief This property holds the pixmap that will be drawn by this pixmap - object. - - The default value of this property is a null pixmap. While the value of - this property is the null pixmap the pixmap object will not be displayed. - - The pixmap will be drawn such that the upper left corner of the pixmap - will be drawn QGeoMapPixmapObject::offset pixels away from the position of - QGeoMapPixmapObject::coordinate on the map. -*/ -QPixmap QGeoMapPixmapObject::pixmap() const -{ - return d_ptr->pixmap; -} - -void QGeoMapPixmapObject::setPixmap(const QPixmap &pixmap) -{ - QPixmap curPixmap = d_ptr->pixmap; - if (curPixmap.isNull() && pixmap.isNull()) - return; - - if ((curPixmap.isNull() && !pixmap.isNull()) - || (!curPixmap.isNull() && pixmap.isNull()) - || (curPixmap.toImage() != pixmap.toImage())) { - d_ptr->pixmap = pixmap; - emit pixmapChanged(pixmap); - } -} - -/*! - \property QGeoMapPixmapObject::offset - \brief This property holds the offset in pixels at which the pixmap will be - drawn by this pixmap object. - - The default value of this property is QPoint(0, 0). If this value is not - changed the upper left coordinate of the pixmap will be drawn at the - coordinate specified by QGeoMapPixmapObject::coordinate. - - The offset is in pixels and is independent of the zoom level of the map. - The offset property is provided so that pixmaps such as arrows can be drawn - with the point of the arrow placed exactly on the associated coordinate. -*/ -QPoint QGeoMapPixmapObject::offset() const -{ - return d_ptr->offset; -// QPointF pt = d_ptr->offset; -// -// QPoint rounded; -// rounded.setX(int(pt.x() > 0 ? pt.x() + 0.5 : pt.x() - 0.5)); -// rounded.setY(int(pt.y() > 0 ? pt.y() + 0.5 : pt.y() - 0.5)); -// -// return rounded; -} - -void QGeoMapPixmapObject::setOffset(const QPoint &offset) -{ - if (d_ptr->offset != offset) { - d_ptr->offset = offset; - emit offsetChanged(offset); - } -} - -/*! -\fn void QGeoMapPixmapObject::coordinateChanged(const QGeoCoordinate &coordinate) - - This signal is emitted when the coordinate at which the pixmap - should be drawn has changed. - - The new value will be \a coordinate. -*/ - -/*! -\fn void QGeoMapPixmapObject::pixmapChanged(const QPixmap &pixmap) - - This signal is emitted when the pixmap associated with this - pixmap object has changed. - - The new value will be \a pixmap. -*/ - -/*! -\fn void QGeoMapPixmapObject::offsetChanged(const QPoint &offset) - - This signal is emitted when the on-screen offset from the coordinate - at which this pixmap object should be drawn has changed. - - The new value will be \a offset. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapPixmapObjectPrivate::QGeoMapPixmapObjectPrivate() {} - -QGeoMapPixmapObjectPrivate::~QGeoMapPixmapObjectPrivate() {} - -#include "moc_qgeomappixmapobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomappixmapobject.h b/src/location/maps/qgeomappixmapobject.h deleted file mode 100644 index 6a3ac825..00000000 --- a/src/location/maps/qgeomappixmapobject.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPPIXMAPOBJECT_H -#define QGEOMAPPIXMAPOBJECT_H - -#include "qgeomapobject.h" -#include "qgeocoordinate.h" - -#include <QPixmap> -#include <QPoint> - -QT_BEGIN_NAMESPACE - -class QGeoMapPixmapObjectPrivate; - -class Q_LOCATION_EXPORT QGeoMapPixmapObject : public QGeoMapObject -{ - Q_OBJECT - Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) - Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap NOTIFY pixmapChanged) - Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged) - -public: - QGeoMapPixmapObject(); - QGeoMapPixmapObject(const QGeoCoordinate &coordinate, const QPoint &offset = QPoint(0, 0), const QPixmap &pixmap = QPixmap()); - ~QGeoMapPixmapObject(); - - QGeoMapObject::Type type() const; - - QGeoCoordinate coordinate() const; - void setCoordinate(const QGeoCoordinate &coordinate); - - QPixmap pixmap() const; - void setPixmap(const QPixmap &pixmap); - - QPoint offset() const; - void setOffset(const QPoint &offset); - -Q_SIGNALS: - void coordinateChanged(const QGeoCoordinate &coordinate); - void pixmapChanged(const QPixmap &pixmap); - void offsetChanged(const QPoint &offset); - -private: - QGeoMapPixmapObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapPixmapObject) - Q_DISABLE_COPY(QGeoMapPixmapObject) -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomappixmapobject_p.h b/src/location/maps/qgeomappixmapobject_p.h deleted file mode 100644 index 9f6166fd..00000000 --- a/src/location/maps/qgeomappixmapobject_p.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPPIXMAPOBJECT_P_H -#define QGEOMAPPIXMAPOBJECT_P_H - -#include "qgeocoordinate.h" - -#include <QPixmap> -#include <QPoint> - -QT_BEGIN_NAMESPACE - -class QGeoMapPixmapObjectPrivate -{ -public: - QGeoMapPixmapObjectPrivate(); - ~QGeoMapPixmapObjectPrivate(); - - QPixmap pixmap; - QPoint offset; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomappolygonobject.cpp b/src/location/maps/qgeomappolygonobject.cpp deleted file mode 100644 index d82aba18..00000000 --- a/src/location/maps/qgeomappolygonobject.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomappolygonobject.h" -#include "qgeomappolygonobject_p.h" - -#include "qgeocoordinate.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapPolygonObject - \brief The QGeoMapPolygonObject class is a QGeoMapObject used to draw - a polygon on a map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The polygon is specified by a set of at least 3 valid QGeoCoordinate - instances listed in the same order in which the coordinates would be - traversed when traveling around the border of the polygon. -*/ - -/*! - Constructs a new polygon object. -*/ -QGeoMapPolygonObject::QGeoMapPolygonObject() - : d_ptr(new QGeoMapPolygonObjectPrivate()) -{ - setUnits(QGeoMapObject::RelativeArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Destroys this polygon object. -*/ -QGeoMapPolygonObject::~QGeoMapPolygonObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapPolygonObject::type() const -{ - return QGeoMapObject::PolygonType; -} - -/*! - \property QGeoMapPolygonObject::path - \brief This property holds the ordered list of coordinates which define the - polygon to be drawn by this polygon object. - - The default value of this property is an empty list of coordinates. - - The coordinates should be listed in the order in which they would be - traversed when traveling around the border of the polygon. - - Invalid coordinates in the list will be ignored, and if the list of - coordinates contains less than 3 valid coordinates then the polygon object - will not be displayed. - -*/ -void QGeoMapPolygonObject::setPath(const QList<QGeoCoordinate> &path) -{ - if (d_ptr->path != path) { - d_ptr->path = path; - if (path.size() != 0) - setOrigin(path.at(0)); - else - setOrigin(QGeoCoordinate()); - emit pathChanged(emit d_ptr->path); - } -} - -QList<QGeoCoordinate> QGeoMapPolygonObject::path() const -{ - return d_ptr->path; -} - -/*! - \property QGeoMapPolygonObject::pen - \brief This property holds the pen that will be used to draw this object. - - The pen is used to draw an outline around the polygon. The polygon is - filled using the QGeoMapPolygonObject::brush property. - - The pen will be treated as a cosmetic pen, which means that the width - of the pen will be independent of the zoom level of the map. -*/ -void QGeoMapPolygonObject::setPen(const QPen &pen) -{ - - QPen newPen = pen; - newPen.setCosmetic(true); - - if (d_ptr->pen == newPen) - return; - - d_ptr->pen = pen; - emit penChanged(pen); -} - -QPen QGeoMapPolygonObject::pen() const -{ - return d_ptr->pen; -} - -/*! - \property QGeoMapPolygonObject::brush - \brief This property holds the brush that will be used to draw this object. - - The brush is used to fill in polygon. - - The outline around the perimeter of the polygon is drawn using the - QGeoMapPolygonObject::pen property. -*/ -void QGeoMapPolygonObject::setBrush(const QBrush &brush) -{ - if (d_ptr->brush != brush) { - d_ptr->brush = brush; - emit brushChanged(brush); - } -} - -QBrush QGeoMapPolygonObject::brush() const -{ - return d_ptr->brush; -} - -/*! -\fn void QGeoMapPolygonObject::pathChanged(const QList<QGeoCoordinate> &path) - - This signal is emitted when the ordered list of coordinates that define - the polygon to be drawn by this polygon object has changed. - - The new value is \a path. -*/ - -/*! -\fn void QGeoMapPolygonObject::penChanged(const QPen &pen) - - This signal is emitted when the pen used to draw the edge of this - polygon object has changed. - - The new value is \a pen. -*/ - -/*! -\fn void QGeoMapPolygonObject::brushChanged(const QBrush &brush) - - This signal is emitted when the brush used to fill in the interior of - this polygon object has changed. - - The new value is \a brush. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapPolygonObjectPrivate::QGeoMapPolygonObjectPrivate() -{ - pen.setCosmetic(true); -} - -QGeoMapPolygonObjectPrivate::~QGeoMapPolygonObjectPrivate() {} - -#include "moc_qgeomappolygonobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomappolygonobject_p.h b/src/location/maps/qgeomappolygonobject_p.h deleted file mode 100644 index c8bf4509..00000000 --- a/src/location/maps/qgeomappolygonobject_p.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPPOLYGONOBJECT_P_H -#define QGEOMAPPOLYGONOBJECT_P_H - -#include "qgeocoordinate.h" - -#include <QList> -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -class QGeoMapPolygonObjectPrivate -{ -public: - QGeoMapPolygonObjectPrivate(); - ~QGeoMapPolygonObjectPrivate(); - - QList<QGeoCoordinate> path; - QPen pen; - QBrush brush; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomappolylineobject.cpp b/src/location/maps/qgeomappolylineobject.cpp deleted file mode 100644 index bb3c501c..00000000 --- a/src/location/maps/qgeomappolylineobject.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomappolylineobject.h" -#include "qgeomappolylineobject_p.h" - -#include "qgeocoordinate.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapPolylineObject - \brief The QGeoMapPolylineObject class is a QGeoMapObject used to draw - a segmented line on a map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The polyline is specified by a list of at least 2 valid QGeoCoordinate - instances and a line will be drawn between every adjacent pairs of - coordinates in the list. -*/ - -/*! - Constructs a new polyline object. -*/ -QGeoMapPolylineObject::QGeoMapPolylineObject() - : d_ptr(new QGeoMapPolylineObjectPrivate()) -{ - setUnits(QGeoMapObject::RelativeArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Destroys this polyline object. -*/ -QGeoMapPolylineObject::~QGeoMapPolylineObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapPolylineObject::type() const -{ - return QGeoMapObject::PolylineType; -} - -/*! - \property QGeoMapPolylineObject::path - \brief This property holds the ordered list of coordinates which define the - segmented line to be drawn by this polyline object. - - The default value of this property is an empty list of coordinates. - - A line will be drawn between every pair of coordinates which are adjacent in - the list. - - Invalid coordinates in the list will be ignored, and if the list of - coordinates contains less than 2 valid coordinates then the polyline object - will not be displayed. -*/ -void QGeoMapPolylineObject::setPath(const QList<QGeoCoordinate> &path) -{ - if (d_ptr->path != path) { - d_ptr->path = path; - if (path.size() != 0) - setOrigin(path.at(0)); - else - setOrigin(QGeoCoordinate()); - emit pathChanged(d_ptr->path); - } -} - -QList<QGeoCoordinate> QGeoMapPolylineObject::path() const -{ - return d_ptr->path; -} - -/*! - \property QGeoMapPolylineObject::pen - \brief This property holds the pen that will be used to draw this object. - - The pen is used to draw the polyline. - - The pen will be treated as a cosmetic pen, which means that the width - of the pen will be independent of the zoom level of the map. -*/ -void QGeoMapPolylineObject::setPen(const QPen &pen) -{ - QPen newPen = pen; - newPen.setCosmetic(false); - - if (d_ptr->pen == newPen) - return; - - d_ptr->pen = pen; - emit penChanged(pen); -} - -QPen QGeoMapPolylineObject::pen() const -{ - return d_ptr->pen; -} - -/*! -\fn void QGeoMapPolylineObject::pathChanged(const QList<QGeoCoordinate> &path) - - This signal is emitted when the ordered list of coordinates that define - the polyline to be drawn by this polyline object has changed. - - The new value is \a path. -*/ - -/*! -\fn void QGeoMapPolylineObject::penChanged(const QPen &pen) - - This signal is emitted when the pen used to draw the edge of this - polyline object has changed. - - The new value is \a pen. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapPolylineObjectPrivate::QGeoMapPolylineObjectPrivate() -{ - pen.setCosmetic(true); -} - -QGeoMapPolylineObjectPrivate::~QGeoMapPolylineObjectPrivate() {} - -#include "moc_qgeomappolylineobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomappolylineobject.h b/src/location/maps/qgeomappolylineobject.h deleted file mode 100644 index ec343841..00000000 --- a/src/location/maps/qgeomappolylineobject.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPPOLYLINEOBJECT_H -#define QGEOMAPPOLYLINEOBJECT_H - -#include "qgeomapobject.h" - -#include <QList> -#include <QPen> - -QT_BEGIN_NAMESPACE - -class QGeoCoordinate; - -class QGeoMapPolylineObjectPrivate; - -class Q_LOCATION_EXPORT QGeoMapPolylineObject : public QGeoMapObject -{ - Q_OBJECT - Q_PROPERTY(QList<QGeoCoordinate> path READ path WRITE setPath NOTIFY pathChanged) - Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged) - -public: - QGeoMapPolylineObject(); - ~QGeoMapPolylineObject(); - - QGeoMapObject::Type type() const; - - void setPath(const QList<QGeoCoordinate> &path); - QList<QGeoCoordinate> path() const; - - void setPen(const QPen &pen); - QPen pen() const; - -Q_SIGNALS: - void pathChanged(const QList<QGeoCoordinate> &path); - void penChanged(const QPen &pen); - -private: - QGeoMapPolylineObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapPolylineObject) - Q_DISABLE_COPY(QGeoMapPolylineObject) -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomappolylineobject_p.h b/src/location/maps/qgeomappolylineobject_p.h deleted file mode 100644 index 845b7953..00000000 --- a/src/location/maps/qgeomappolylineobject_p.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPPOLYLINEOBJECT_P_H -#define QGEOMAPPOLYLINEOBJECT_P_H - -#include "qgeocoordinate.h" - -#include <QList> -#include <QPen> - -QT_BEGIN_NAMESPACE - -class QGeoMapPolylineObjectPrivate -{ -public: - QGeoMapPolylineObjectPrivate(); - ~QGeoMapPolylineObjectPrivate(); - - QList<QGeoCoordinate> path; - QPen pen; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomaprectangleobject.cpp b/src/location/maps/qgeomaprectangleobject.cpp deleted file mode 100644 index 4712ce8b..00000000 --- a/src/location/maps/qgeomaprectangleobject.cpp +++ /dev/null @@ -1,299 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomaprectangleobject.h" -#include "qgeomaprectangleobject_p.h" - -#include "qgeocoordinate.h" -#include "qgeoboundingbox.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapRectangleObject - \brief The QGeoMapRectangleObject class is a QGeoMapObject used to draw - a rectangular region on a map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The rectangle is specified by either a valid QGeoBoundingBox instance or - a pair of valid QGeoCoordinate instances which represent the top left and - bottom right coordinates of the rectangle respectively. -*/ - -/*! - Constructs a new rectangle object. -*/ -QGeoMapRectangleObject::QGeoMapRectangleObject() - : d_ptr(new QGeoMapRectangleObjectPrivate()) -{ - setUnits(QGeoMapObject::AbsoluteArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Constructs a new rectangle object based on the bounding box \a boundingBox. -*/ -QGeoMapRectangleObject::QGeoMapRectangleObject(const QGeoBoundingBox &boundingBox) - : d_ptr(new QGeoMapRectangleObjectPrivate()) -{ - d_ptr->bounds = boundingBox; - setUnits(QGeoMapObject::AbsoluteArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Constructs a new rectangle object with the top left coordinate at \a - topLeft and the bottom right coordinate at \a bottomRight. -*/ -QGeoMapRectangleObject::QGeoMapRectangleObject(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight) - : d_ptr(new QGeoMapRectangleObjectPrivate()) -{ - d_ptr->bounds = QGeoBoundingBox(topLeft, bottomRight); - setUnits(QGeoMapObject::AbsoluteArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Destroys this rectangle object. -*/ -QGeoMapRectangleObject::~QGeoMapRectangleObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapRectangleObject::type() const -{ - return QGeoMapObject::RectangleType; -} - -/*! - Returns a QGeoBoundingBox instance which corresponds to the rectangle that - will be drawn by this object. - - This is equivalent to - \code - QGeoMapRectangleObject *object; - // setup object - QGeoBoundingBox(object->topLeft(), object->bottomRight()); - \endcode -*/ -QGeoBoundingBox QGeoMapRectangleObject::bounds() const -{ - return d_ptr->bounds; -} - -/*! - Sets the rectangle that will be drawn by this object to \a bounds. - - This is equivalent to - \code - QGeoMapRectangleObject *object; - // setup object - object->setTopLeft(bounds.topLeft()); - object->setBottomRight(bounds.bottomRight()); - \endcode -*/ -void QGeoMapRectangleObject::setBounds(const QGeoBoundingBox &bounds) -{ - QGeoBoundingBox oldBounds = d_ptr->bounds; - - if (oldBounds == bounds) - return; - - d_ptr->bounds = bounds; - - if (d_ptr->bounds.topLeft() != oldBounds.topLeft()) - emit topLeftChanged(d_ptr->bounds.topLeft()); - - if (d_ptr->bounds.bottomRight() != oldBounds.bottomRight()) - emit bottomRightChanged(d_ptr->bounds.bottomRight()); -} - -/*! - \property QGeoMapRectangleObject::topLeft - \brief This property holds the top left coordinate of the rectangle to be - drawn by this rectangle object. - - The default value of this property is an invalid coordinate. While - the value of this property is invalid the rectangle object will not be - displayed. -*/ -QGeoCoordinate QGeoMapRectangleObject::topLeft() const -{ - return d_ptr->bounds.topLeft(); -} - -void QGeoMapRectangleObject::setTopLeft(const QGeoCoordinate &topLeft) -{ - if (d_ptr->bounds.topLeft() != topLeft) { - d_ptr->bounds.setTopLeft(topLeft); - emit topLeftChanged(d_ptr->bounds.topLeft()); - } -} - -/*! - \property QGeoMapRectangleObject::bottomRight - \brief This property holds the bottom right coordinate of the rectangle to - be drawn by this rectangle object. - - The default value of this property is an invalid coordinate. While - the value of this property is invalid the rectangle object will not be - displayed. -*/ -QGeoCoordinate QGeoMapRectangleObject::bottomRight() const -{ - return d_ptr->bounds.bottomRight(); -} - -void QGeoMapRectangleObject::setBottomRight(const QGeoCoordinate &bottomRight) -{ - if (d_ptr->bounds.bottomRight() != bottomRight) { - d_ptr->bounds.setBottomRight(bottomRight); - emit bottomRightChanged(d_ptr->bounds.bottomRight()); - } -} - -/*! - \property QGeoMapRectangleObject::pen - \brief This property holds the pen that will be used to draw this object. - - The pen is used to draw an outline around the rectangle. The rectangle is - filled using the QGeoMapRectangleObject::brush property. - - The pen will be treated as a cosmetic pen, which means that the width - of the pen will be independent of the zoom level of the map. -*/ -QPen QGeoMapRectangleObject::pen() const -{ - return d_ptr->pen; -} - -void QGeoMapRectangleObject::setPen(const QPen &pen) -{ - QPen newPen = pen; - newPen.setCosmetic(true); - - if (d_ptr->pen == newPen) - return; - - d_ptr->pen = newPen; - emit penChanged(newPen); -} - -/*! - \property QGeoMapRectangleObject::brush - \brief This property holds the brush that will be used to draw this object. - - The brush is used to fill in rectangle. - - The outline around the perimeter of the rectangle is drawn using the - QGeoMapRectangleObject::pen property. -*/ -QBrush QGeoMapRectangleObject::brush() const -{ - return d_ptr->brush; -} - -void QGeoMapRectangleObject::setBrush(const QBrush &brush) -{ - if (d_ptr->brush != brush) { - d_ptr->brush = brush; - emit brushChanged(d_ptr->brush); - } -} - -/*! -\fn void QGeoMapRectangleObject::topLeftChanged(const QGeoCoordinate &topLeft) - - This signal is emitted when the top left coordinate of this rectangle - object has changed. - - The new value is \a topLeft. -*/ - -/*! -\fn void QGeoMapRectangleObject::bottomRightChanged(const QGeoCoordinate &bottomRight) - - This signal is emitted when the bottom right coordinate of this rectangle - object has changed. - - The new value is \a bottomRight. -*/ - -/*! -\fn void QGeoMapRectangleObject::penChanged(const QPen &pen) - - This signal is emitted when the pen used to draw the perimeter of this - rectangle object has changed. - - The new value is \a pen. -*/ - -/*! -\fn void QGeoMapRectangleObject::brushChanged(const QBrush &brush) - - This signal is emitted when the brush used to fill in the interior of - this rectangle object has changed. - - The new value is \a brush. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapRectangleObjectPrivate::QGeoMapRectangleObjectPrivate() -{ - pen.setCosmetic(true); -} - -QGeoMapRectangleObjectPrivate::~QGeoMapRectangleObjectPrivate() {} - -#include "moc_qgeomaprectangleobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomaprectangleobject.h b/src/location/maps/qgeomaprectangleobject.h deleted file mode 100644 index 6f24450f..00000000 --- a/src/location/maps/qgeomaprectangleobject.h +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPRECTANGLEOBJECT_H -#define QGEOMAPRECTANGLEOBJECT_H - -#include "qgeomapobject.h" - -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -class QGeoMapRectangleObjectPrivate; -class QGeoBoundingBox; -class QGeoCoordinate; - -class Q_LOCATION_EXPORT QGeoMapRectangleObject : public QGeoMapObject -{ - Q_OBJECT - Q_PROPERTY(QGeoCoordinate topLeft READ topLeft WRITE setTopLeft NOTIFY topLeftChanged) - Q_PROPERTY(QGeoCoordinate bottomRight READ bottomRight WRITE setBottomRight NOTIFY bottomRightChanged) - Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged) - Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged) - -public: - QGeoMapRectangleObject(); - QGeoMapRectangleObject(const QGeoBoundingBox &boundingBox); - QGeoMapRectangleObject(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight); - ~QGeoMapRectangleObject(); - - QGeoMapObject::Type type() const; - - QGeoBoundingBox bounds() const; - void setBounds(const QGeoBoundingBox &bounds); - - QGeoCoordinate topLeft() const; - void setTopLeft(const QGeoCoordinate &topLeft); - - QGeoCoordinate bottomRight() const; - void setBottomRight(const QGeoCoordinate &bottomRight); - - QPen pen() const; - void setPen(const QPen &pen); - - QBrush brush() const; - void setBrush(const QBrush &brush); - -Q_SIGNALS: - void topLeftChanged(const QGeoCoordinate &topLeft); - void bottomRightChanged(const QGeoCoordinate &bottomRight); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); - -private: - QGeoMapRectangleObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapRectangleObject) - Q_DISABLE_COPY(QGeoMapRectangleObject) -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomaprectangleobject_p.h b/src/location/maps/qgeomaprectangleobject_p.h deleted file mode 100644 index 814dc2fb..00000000 --- a/src/location/maps/qgeomaprectangleobject_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPRECTANGLEOBJECT_P_H -#define QGEOMAPRECTANGLEOBJECT_P_H - -#include "qgeoboundingbox.h" - -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -class QGeoMapRectangleObjectPrivate -{ -public: - QGeoMapRectangleObjectPrivate(); - ~QGeoMapRectangleObjectPrivate(); - - QGeoBoundingBox bounds; - QPen pen; - QBrush brush; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomaprouteobject.cpp b/src/location/maps/qgeomaprouteobject.cpp deleted file mode 100644 index 462d98f0..00000000 --- a/src/location/maps/qgeomaprouteobject.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomaprouteobject.h" -#include "qgeomaprouteobject_p.h" -#include "qgeocoordinate.h" -#include "qgeoroutesegment.h" - -#define DEFAULT_ROUTE_DETAIL_LEVEL 6 - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapRouteObject - \brief The QGeoMapRouteObject class is a QGeoMapObject used to draw - a route on a map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The route is specified by a QGeoRoute object. - - The route might be quite detailed, and so to improve performance the - detail level can be set with QGeoMapRouteObject::detailLevel. - - The route object draws the route as a series of lines with a minimum - on-screen harmattan length equal to the detail level. This is done so that - the small changes in direction of a road will be visible at high zoom - levels but will not slow down the rendering at the lower zoom levels. -*/ - -/*! - Constructs a new route object. -*/ -QGeoMapRouteObject::QGeoMapRouteObject() - : d_ptr(new QGeoMapRouteObjectPrivate()) -{ - setUnits(QGeoMapObject::AbsoluteArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Constructs a new route object for the route \a route. -*/ -QGeoMapRouteObject::QGeoMapRouteObject(const QGeoRoute &route) - : d_ptr(new QGeoMapRouteObjectPrivate()) -{ - d_ptr->route = route; - setUnits(QGeoMapObject::AbsoluteArcSecondUnit); - setTransformType(QGeoMapObject::ExactTransform); -} - -/*! - Destroys this route object -*/ -QGeoMapRouteObject::~QGeoMapRouteObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapRouteObject::type() const -{ - return QGeoMapObject::RouteType; -} - -/*! - \property QGeoMapRouteObject::route - \brief This property holds the which will be displayed. - - The default value of this property is an empty route. - - If QGeoRoute::path() returns a list of less than 2 valid QGeoCoordinates - then the route object will not be displayed. -*/ -QGeoRoute QGeoMapRouteObject::route() const -{ - return d_ptr->route; -} - -void QGeoMapRouteObject::setRoute(const QGeoRoute &route) -{ - d_ptr->route = route; - emit routeChanged(d_ptr->route); -} - -/*! - \property QGeoMapRouteObject::pen - \brief This property holds the pen that will be used to draw this object. - - The pen is used to draw the route. - - The pen will be treated like a cosmetic pen, which means that the width - of the pen will be independent of the zoom level of the map. -*/ -QPen QGeoMapRouteObject::pen() const -{ - return d_ptr->pen; -} - -void QGeoMapRouteObject::setPen(const QPen &pen) -{ - QPen newPen = pen; - newPen.setCosmetic(false); - - if (d_ptr->pen == newPen) - return; - - d_ptr->pen = newPen; - emit penChanged(newPen); -} - -/*! - \property QGeoMapRouteObject::detailLevel - \brief This property holds the level of detail used to draw this object. - - A QGeoRoute instance can contain a large amount of information about the - path taken by the route. This property is used as a hint to help reduce the - amount of information that needs to be drawn on the map. - - The path taken by the route is represented as a list of QGeoCoordinate - instances. This route object will draw lines between these coordinates, but - will skip members of the list until the manhattan distance between the - start point and the end point of the line is at least \a detailLevel. - - The default value of this property is 6. -*/ -quint32 QGeoMapRouteObject::detailLevel() const -{ - return d_ptr->detailLevel; -} - -void QGeoMapRouteObject::setDetailLevel(quint32 detailLevel) -{ - if (d_ptr->detailLevel != detailLevel) { - d_ptr->detailLevel = detailLevel; - emit detailLevelChanged(d_ptr->detailLevel); - } -} - -/*! -\fn void QGeoMapRouteObject::routeChanged(const QGeoRoute &route) - - This signal is emitted when the route drawn by this route object - has changed. - - The new value is \a route. -*/ - -/*! -\fn void QGeoMapRouteObject::penChanged(const QPen &pen) - - This signal is emitted when the pen used to draw this route object has - changed. - - The new value is \a pen. -*/ - -/*! -\fn void QGeoMapRouteObject::detailLevelChanged(quint32 detailLevel) - - This signal is emitted when the level of detail used to draw this - route object has changed. - - The new value is \a detailLevel. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapRouteObjectPrivate::QGeoMapRouteObjectPrivate() -{ - detailLevel = DEFAULT_ROUTE_DETAIL_LEVEL; - pen.setCosmetic(true); -} - -QGeoMapRouteObjectPrivate::~QGeoMapRouteObjectPrivate() {} - -#include "moc_qgeomaprouteobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomaprouteobject.h b/src/location/maps/qgeomaprouteobject.h deleted file mode 100644 index 7ea74723..00000000 --- a/src/location/maps/qgeomaprouteobject.h +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPROUTEOBJECT_H -#define QGEOMAPROUTEOBJECT_H - -#include "qgeomapobject.h" -#include "qgeoroute.h" - -#include <QPen> - -QT_BEGIN_NAMESPACE - -class QGeoMapRouteObjectPrivate; -class QGeoRoute; -class QGeoCoordinate; - -class Q_LOCATION_EXPORT QGeoMapRouteObject : public QGeoMapObject -{ - Q_OBJECT - Q_PROPERTY(QGeoRoute route READ route WRITE setRoute NOTIFY routeChanged) - Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged) - Q_PROPERTY(quint32 detailLevel READ detailLevel WRITE setDetailLevel NOTIFY detailLevelChanged) - -public: - QGeoMapRouteObject(); - QGeoMapRouteObject(const QGeoRoute &route); - ~QGeoMapRouteObject(); - - QGeoMapObject::Type type() const; - - QGeoRoute route() const; - void setRoute(const QGeoRoute &route); - - QPen pen() const; - void setPen(const QPen &pen); - - quint32 detailLevel() const; - void setDetailLevel(quint32 detailLevel); - -Q_SIGNALS: - void routeChanged(const QGeoRoute &route); - void penChanged(const QPen &pen); - void detailLevelChanged(quint32 detailLevel); - -private: - QGeoMapRouteObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapRouteObject) - Q_DISABLE_COPY(QGeoMapRouteObject) -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomaprouteobject_p.h b/src/location/maps/qgeomaprouteobject_p.h deleted file mode 100644 index 4d5fca57..00000000 --- a/src/location/maps/qgeomaprouteobject_p.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPROUTEOBJECT_P_H -#define QGEOMAPROUTEOBJECT_P_H - -#include "qgeoroute.h" - -#include <QPen> - -QT_BEGIN_NAMESPACE - -class QGeoMapRouteObjectPrivate -{ -public: - QGeoMapRouteObjectPrivate(); - ~QGeoMapRouteObjectPrivate(); - - QGeoRoute route; - QPen pen; - quint32 detailLevel; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomaptextobject.cpp b/src/location/maps/qgeomaptextobject.cpp deleted file mode 100644 index 2b9ee8cd..00000000 --- a/src/location/maps/qgeomaptextobject.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeomaptextobject.h" -#include "qgeomaptextobject_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoMapTextObject - \brief The QGeoMapTextObject class is a QGeoMapObject used to draw - text on a map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping-objects - - The text is drawn at a given coordinate on the map. - - The text object is drawn such that the rendered size of the text object is - independent of the zoom level of the map. -*/ - -/*! - Constructs a new text object. -*/ -QGeoMapTextObject::QGeoMapTextObject() - : d_ptr(new QGeoMapTextObjectPrivate()) -{ - setUnits(QGeoMapObject::PixelUnit); -} - -/*! - Constructs a new text object which will display the text \a text with font - \a font at the coordinate \a coordinate on the map. - - The text will be displayed at an on-screen offset from the coordinate of \a - offset pixels, and will be aligned according to \a alignment. -*/ -QGeoMapTextObject::QGeoMapTextObject(const QGeoCoordinate &coordinate, - const QString &text, - const QFont &font, - const QPoint &offset, - Qt::Alignment alignment) - : d_ptr(new QGeoMapTextObjectPrivate()) -{ - setOrigin(coordinate); - d_ptr->text = text; - d_ptr->font = font; - d_ptr->offset = offset; - d_ptr->alignment = alignment; - setUnits(QGeoMapObject::PixelUnit); -} - -/*! - Destroys this text object. -*/ -QGeoMapTextObject::~QGeoMapTextObject() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -QGeoMapObject::Type QGeoMapTextObject::type() const -{ - return QGeoMapObject::TextType; -} - -/*! - \property QGeoMapTextObject::coordinate - \brief This property holds the coordinate at which this text object - will be rendered. - - The default value of this property is an invalid coordinate. While the - value of this property is invalid the text object will not be displayed. - - If QGeoMapTextObject::offset and QGeoMapTextObject::alignment are not set - the text will be drawn so that it is centered both horizontally and - vertically around the position of QGeoMapTextObject::coordinate on the - screen. -*/ -QGeoCoordinate QGeoMapTextObject::coordinate() const -{ - return origin(); -} - -void QGeoMapTextObject::setCoordinate(const QGeoCoordinate &coordinate) -{ - if (origin() != coordinate) { - setOrigin(coordinate); - emit coordinateChanged(coordinate); - } -} - -/*! - \property QGeoMapTextObject::text - \brief This property holds the text that will be displayed by this text - object. - - The default value of this property is an empty string. -*/ -QString QGeoMapTextObject::text() const -{ - return d_ptr->text; -} - -void QGeoMapTextObject::setText(const QString &text) -{ - if (d_ptr->text != text) { - d_ptr->text = text; - emit textChanged(text); - } -} - -/*! - \property QGeoMapTextObject::font - \brief This property holds the font that will be used to render the text - for this text object. - - The default value of this property is the application's default font. - - It is not necessary to account for the zoom level of the map, since text - objects are scaled such that they appear to be independent of the zoom - level. -*/ -QFont QGeoMapTextObject::font() const -{ - return d_ptr->font; -} - -void QGeoMapTextObject::setFont(const QFont &font) -{ - if (d_ptr->font != font) { - d_ptr->font = font; - emit fontChanged(font); - } -} - -/*! - \property QGeoMapTextObject::pen - \brief This property holds the pen that will be used to draw this object. - - The pen is used to draw an outline around the text. The text itself is - filled using the QGeoMapTextObject::brush property. - - The pen will be treated as a cosmetic pen, which means that the width - of the pen will be independent of the zoom level of the map. -*/ -QPen QGeoMapTextObject::pen() const -{ - return d_ptr->pen; -} - -void QGeoMapTextObject::setPen(const QPen &pen) -{ - QPen newPen = pen; - newPen.setCosmetic(true); - - if (d_ptr->pen == newPen) - return; - - d_ptr->pen = newPen; - emit penChanged(pen); -} - -/*! - \property QGeoMapTextObject::brush - \brief This property holds the brush that will be used to draw this object. - - The brush is used to fill in the glyphs of the text. - - The outline around the perimeter of the glyphs is drawn using the - QGeoMapTextObject::pen property. -*/ -QBrush QGeoMapTextObject::brush() const -{ - return d_ptr->brush; -} - -void QGeoMapTextObject::setBrush(const QBrush &brush) -{ - if (d_ptr->brush != brush) { - d_ptr->brush = brush; - emit brushChanged(brush); - } -} - -/*! - \property QGeoMapTextObject::offset - \brief This property holds the offset in pixels from the screen position of - QGeoMapTextObject::coordinate at which the text will be rendered when - drawing this text object. - - The default value of this property is QPoint(0,0). -*/ -QPoint QGeoMapTextObject::offset() const -{ - return QPoint(d_ptr->offset.x(), d_ptr->offset.y()); -} - -void QGeoMapTextObject::setOffset(const QPoint &off) -{ - if (d_ptr->offset != off) { - d_ptr->offset = off; - emit offsetChanged(off); - } -} - -/*! - \property QGeoMapTextObject::alignment - \brief This property holds the alignment options used to align the - text when drawing this text object. - - The default value of this property will align the text so that it is - centered both horizontally and vertically around the point that is - QGeoMapTextObject::offset pixels away from the position of - QGeoMapTextObject::coordinate on the screen. - - Using - \code - textObject->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); - \endcode - will place the text so that the point halway up the left edge of - the text is at the anchor point defined by - QGeoMapTextObject::offset and QGeoMapTextObject::coordinate. - - The alignment property is a flag, so using - \code - textObject->setAlignment(Qt::AlignLeft); - \endcode - may alter the vertical alignment as well. - - The Qt::AlignVertical_Mask and Qt::AlignHorizontal_Mask enum - values can be used to alter one component of the alignment - independent of the other. - \code - textObject->setAlignment(Qt::AlignLeft | (textObject->alignment() & Qt::AlignVertical_Mask)); - \endcode - - The alignment does not take the width of QGeoMapTextObject::pen into - consideration. -*/ -Qt::Alignment QGeoMapTextObject::alignment() const -{ - return d_ptr->alignment; -} - -void QGeoMapTextObject::setAlignment(Qt::Alignment alignment) -{ - if (d_ptr->alignment != alignment) { - d_ptr->alignment = alignment; - emit alignmentChanged(d_ptr->alignment); - } -} - -/*! -\fn void QGeoMapTextObject::coordinateChanged(const QGeoCoordinate &coordinate) - - This signal is emitted when the coordinate at which this text - object will be drawn has changed. - - The new value is \a coordinate. -*/ - -/*! -\fn void QGeoMapTextObject::textChanged(const QString &text) - - This signal is emitted when the text to be drawn by this text object - has changed. - - The new value is \a text. -*/ - -/*! -\fn void QGeoMapTextObject::fontChanged(const QFont &font) - - This signal is emitted when the font use to draw this text object - has changed. - - The new value is \a font. -*/ - -/*! -\fn void QGeoMapTextObject::penChanged(const QPen &pen) - - This signal is emitted when the pen used to draw the outline of the - letters for this text object has changed. - - The new value is \a pen. -*/ - -/*! -\fn void QGeoMapTextObject::brushChanged(const QBrush &brush) - - This signal is emitted when the brush used to fill the inside of the - letters for this text object has changed. - - The new value is \a brush. -*/ - -/*! -\fn void QGeoMapTextObject::offsetChanged(const QPoint &offset) - - This signal is emitted when the on screen offset from the coordinate at - which this text object will be drawn has changed. - - The new value is \a offset. -*/ - -/*! -\fn void QGeoMapTextObject::alignmentChanged(Qt::Alignment alignment) - - This signal is emitted when the alignment of this text object has changed. - - The new value is \a alignment. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGeoMapTextObjectPrivate::QGeoMapTextObjectPrivate() : - offset(0, 0) -{ - pen.setCosmetic(true); - alignment = Qt::AlignCenter; -} - -QGeoMapTextObjectPrivate::~QGeoMapTextObjectPrivate() {} - -#include "moc_qgeomaptextobject.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomaptextobject.h b/src/location/maps/qgeomaptextobject.h deleted file mode 100644 index 0447aea4..00000000 --- a/src/location/maps/qgeomaptextobject.h +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPTEXTOBJECT_H -#define QGEOMAPTEXTOBJECT_H - -#include "qgeomapobject.h" -#include "qgeocoordinate.h" - -#include <QFont> -#include <QPoint> - -QT_BEGIN_NAMESPACE - -class QGeoMapTextObjectPrivate; - -class Q_LOCATION_EXPORT QGeoMapTextObject : public QGeoMapObject -{ - Q_OBJECT - Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) - Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) - Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged) - Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged) - Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged) - Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged) - -public: - QGeoMapTextObject(); - QGeoMapTextObject(const QGeoCoordinate &coordinate, - const QString &text = QString(), - const QFont &font = QFont(), - const QPoint &offset = QPoint(), - Qt::Alignment alignment = Qt::AlignCenter); - ~QGeoMapTextObject(); - - QGeoMapObject::Type type() const; - - QGeoCoordinate coordinate() const; - void setCoordinate(const QGeoCoordinate &coordinate); - - QString text() const; - void setText(const QString &text); - - QFont font() const; - void setFont(const QFont &font); - - QPen pen() const; - void setPen(const QPen &pen); - - QBrush brush() const; - void setBrush(const QBrush &brush); - - QPoint offset() const; - void setOffset(const QPoint &offset); - - Qt::Alignment alignment() const; - void setAlignment(Qt::Alignment alignment); - -Q_SIGNALS: - void coordinateChanged(const QGeoCoordinate &coordinate); - void textChanged(const QString &text); - void fontChanged(const QFont &font); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); - void offsetChanged(const QPoint &offset); - void alignmentChanged(Qt::Alignment alignment); - -private: - QGeoMapTextObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapTextObject) - Q_DISABLE_COPY(QGeoMapTextObject) -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/qgeomaptextobject_p.h b/src/location/maps/qgeomaptextobject_p.h deleted file mode 100644 index 4c1a7101..00000000 --- a/src/location/maps/qgeomaptextobject_p.h +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOMAPTEXTOBJECT_P_H -#define QGEOMAPTEXTOBJECT_P_H - -#include "qgeocoordinate.h" - -#include <QFont> -#include <QString> -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -class QGeoMapTextObjectPrivate -{ -public: - QGeoMapTextObjectPrivate(); - ~QGeoMapTextObjectPrivate(); - - QString text; - QFont font; - QPen pen; - QBrush brush; - QPoint offset; - Qt::Alignment alignment; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/tiled/qgeotiledmapreply.cpp b/src/location/maps/qgeotiledmapreply.cpp index 622db385..6908325b 100644 --- a/src/location/maps/tiled/qgeotiledmapreply.cpp +++ b/src/location/maps/qgeotiledmapreply.cpp @@ -42,8 +42,6 @@ #include "qgeotiledmapreply.h" #include "qgeotiledmapreply_p.h" -#include "qgeotiledmaprequest.h" - #include <qdebug.h> QT_BEGIN_NAMESPACE @@ -98,9 +96,9 @@ QT_BEGIN_NAMESPACE /*! Constructs a tiled map reply object based on \a request, with parent \a parent. */ -QGeoTiledMapReply::QGeoTiledMapReply(const QGeoTiledMapRequest &request, QObject *parent) +QGeoTiledMapReply::QGeoTiledMapReply(const TileSpec &spec, QObject *parent) : QObject(parent), - d_ptr(new QGeoTiledMapReplyPrivate(request)) + d_ptr(new QGeoTiledMapReplyPrivate(spec)) { } @@ -206,9 +204,9 @@ void QGeoTiledMapReply::setCached(bool cached) /*! Returns the request which corresponds to this reply. */ -QGeoTiledMapRequest QGeoTiledMapReply::request() const +TileSpec QGeoTiledMapReply::tileSpec() const { - return d_ptr->request; + return d_ptr->spec; } /*! @@ -309,12 +307,12 @@ void QGeoTiledMapReply::abort() /******************************************************************************* *******************************************************************************/ -QGeoTiledMapReplyPrivate::QGeoTiledMapReplyPrivate(const QGeoTiledMapRequest &request) +QGeoTiledMapReplyPrivate::QGeoTiledMapReplyPrivate(const TileSpec &spec) : error(QGeoTiledMapReply::NoError), errorString(QLatin1String("")), isFinished(false), isCached(false), - request(request) {} + spec(spec) {} QGeoTiledMapReplyPrivate::QGeoTiledMapReplyPrivate(QGeoTiledMapReply::Error error, const QString &errorString) : error(error), diff --git a/src/location/maps/tiled/qgeotiledmapreply.h b/src/location/maps/qgeotiledmapreply.h index 9b3bea4f..8258b22a 100644 --- a/src/location/maps/tiled/qgeotiledmapreply.h +++ b/src/location/maps/qgeotiledmapreply.h @@ -42,13 +42,13 @@ #ifndef QGEOTILEDMAPREPLY_H #define QGEOTILEDMAPREPLY_H -#include "qmobilityglobal.h" +#include "qglobal.h" #include <QObject> QT_BEGIN_NAMESPACE -class QGeoTiledMapRequest; +class TileSpec; class QGeoTiledMapReplyPrivate; class Q_LOCATION_EXPORT QGeoTiledMapReply : public QObject @@ -63,7 +63,7 @@ public: UnknownError }; - QGeoTiledMapReply(const QGeoTiledMapRequest &request, QObject *parent = 0); + QGeoTiledMapReply(const TileSpec &spec, QObject *parent = 0); QGeoTiledMapReply(Error error, const QString &errorString, QObject *parent = 0); virtual ~QGeoTiledMapReply(); @@ -73,7 +73,7 @@ public: bool isCached() const; - QGeoTiledMapRequest request() const; + TileSpec tileSpec() const; QByteArray mapImageData() const; QString mapImageFormat() const; diff --git a/src/location/maps/tiled/qgeotiledmapreply_p.h b/src/location/maps/qgeotiledmapreply_p.h index 537a23b7..e5e02235 100644 --- a/src/location/maps/tiled/qgeotiledmapreply_p.h +++ b/src/location/maps/qgeotiledmapreply_p.h @@ -54,14 +54,14 @@ // #include "qgeotiledmapreply.h" -#include "qgeotiledmaprequest.h" +#include "tilespec.h" QT_BEGIN_NAMESPACE class QGeoTiledMapReplyPrivate { public: - QGeoTiledMapReplyPrivate(const QGeoTiledMapRequest &request); + QGeoTiledMapReplyPrivate(const TileSpec &spec); QGeoTiledMapReplyPrivate(QGeoTiledMapReply::Error error, const QString& errorString); ~QGeoTiledMapReplyPrivate(); @@ -70,7 +70,7 @@ public: bool isFinished; bool isCached; - QGeoTiledMapRequest request; + TileSpec spec; QByteArray mapImageData; QString mapImageFormat; }; diff --git a/src/location/maps/qgraphicsgeomap.cpp b/src/location/maps/qgraphicsgeomap.cpp deleted file mode 100644 index 5ccad8a6..00000000 --- a/src/location/maps/qgraphicsgeomap.cpp +++ /dev/null @@ -1,821 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicsgeomap.h" -#include "qgraphicsgeomap_p.h" - -#include "qgeocoordinate.h" -#include "qgeoboundingbox.h" -#include "qgeomapobject.h" -#include "qgeomapoverlay.h" - -#include "qgeoserviceprovider.h" -#include "qgeomappingmanager.h" -#include "qgeomapdata.h" - -#include <QGraphicsSceneResizeEvent> -#include <QTimer> - -#include <QNetworkProxyFactory> - -#include <QDebug> - -QT_BEGIN_NAMESPACE - -/*! - \class QGraphicsGeoMap - \brief The QGraphicsGeoMap class is used to display a map and manager the - interactions between the user and the map. - - \inmodule QtLocation - \since 1.1 - - \ingroup maps-mapping - - Most of the functionality is provided by QGeoMappingManager, which - handles most aspects of the display. - - The map viewport can be panned, the zoom level can be changed and the - center coordinate of the viewport can be set explicitly. - - The screenPositionToCoordinate() and coordinateToScreenPoisition() - functions can be used to convert between positions on the screen and - global coordinates. - - Mouse and keyboard events should be handled by subclassing QGraphicsGeoMap - and providing implementations of the event handling functions present in - QGraphicsWidget. -*/ - -/*! -\enum QGraphicsGeoMap::MapType - -Describes a type of map data. - -\value NoMap -Indicates a lack of map valid data. - -\value StreetMap -The map data is a graphical representation of streets and building boundaries. - -\value SatelliteMapDay -The map data is composed of images collected by satellites during the daytime. - -\value SatelliteMapNight -The map data is composed of images collected by satellites during the nighttime. - -\value TerrainMap -The map data is a graphical representation of terrain features. This may also -include some of the information provided by QGraphicsGeoMap::StreetMap. -*/ - -/*! -\enum QGraphicsGeoMap::ConnectivityMode - -Describes the method of obtaining the mapping data. - -\value NoConnectivity -There is no map data. - -\value OfflineMode -The map data will come from an offline source. - -\value OnlineMode -The map data will come from an online source. - -\value HybridMode -The map data will come from a combination of offline and online sources. -*/ - -/*! - Creates a new mapping widget, with the mapping operations managed by - \a manager, and the specified \a parent. - - Note that the \a manager will typically be accessed from an instance of - QGeoServiceProvider: - \code - QGeoServiceProvider serviceProvider("nokia"); - QGeoMappingManager *manager = serviceProvider.mappingManager(); - QGraphicsGeoMap *widget = new QGraphicsGeoMap(manager); - \endcode -*/ -QGraphicsGeoMap::QGraphicsGeoMap(QGeoMappingManager *manager, QGraphicsItem *parent) - : QGraphicsWidget(parent), - d_ptr(new QGraphicsGeoMapPrivate()) -{ - Q_ASSERT(manager != 0); - d_ptr->manager = manager; - - d_ptr->mapData = d_ptr->manager->createMapData(); - d_ptr->mapData->init(); - - connect(d_ptr->mapData, - SIGNAL(updateMapDisplay(QRectF)), - this, - SLOT(updateMapDisplay(QRectF))); - - setMapType(QGraphicsGeoMap::StreetMap); - d_ptr->mapData->setWindowSize(size()); - - connect(d_ptr->mapData, - SIGNAL(zoomLevelChanged(qreal)), - this, - SIGNAL(zoomLevelChanged(qreal))); - connect(d_ptr->mapData, - SIGNAL(bearingChanged(qreal)), - this, - SIGNAL(bearingChanged(qreal))); - connect(d_ptr->mapData, - SIGNAL(tiltChanged(qreal)), - this, - SIGNAL(tiltChanged(qreal))); - connect(d_ptr->mapData, - SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)), - this, - SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType))); - connect(d_ptr->mapData, - SIGNAL(centerChanged(QGeoCoordinate)), - this, - SIGNAL(centerChanged(QGeoCoordinate))); - connect(d_ptr->mapData, - SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)), - this, - SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode))); - - setFlag(QGraphicsItem::ItemIsFocusable); - setFocus(); - - setMinimumSize(QSizeF(0, 0)); - setPreferredSize(QSizeF(500, 500)); -} - -/*! - Destroys this map widget. -*/ -QGraphicsGeoMap::~QGraphicsGeoMap() -{ - delete d_ptr; -} - -/*! - \reimp -*/ -void QGraphicsGeoMap::resizeEvent(QGraphicsSceneResizeEvent *event) -{ - if (d_ptr->mapData) { - d_ptr->mapData->setWindowSize(event->newSize()); - } -} - -/*! - \reimp -*/ -QPainterPath QGraphicsGeoMap::shape() const -{ - QPainterPath path; - path.addRect(boundingRect()); - return path; -} - -/*! - \reimp -*/ -void QGraphicsGeoMap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) -{ - if (d_ptr->mapData) - d_ptr->mapData->paint(painter, option); -} - -void QGraphicsGeoMap::updateMapDisplay(const QRectF &target) -{ - update(target); -} - -/*! - \property QGraphicsGeoMap::minimumZoomLevel - \brief This property holds the minimum zoom level supported by the - QGeoMappingManager associated with this widget. - - Larger values of the zoom level correspond to more detailed views of the - map. -*/ -qreal QGraphicsGeoMap::minimumZoomLevel() const -{ - if (d_ptr->manager) - return d_ptr->manager->minimumZoomLevel(); - - return -1; -} - -/*! - \property QGraphicsGeoMap::maximumZoomLevel - \brief This property holds the maximum zoom level supported by the - QGeoMappingManager associated with this widget. - - Larger values of the zoom level correspond to more detailed views of the - map. -*/ -qreal QGraphicsGeoMap::maximumZoomLevel() const -{ - if (d_ptr->manager) - return d_ptr->manager->maximumZoomLevel(); - - return -1; -} - -/*! - \property QGraphicsGeoMap::zoomLevel - \brief This property holds the zoom level of the map. - - Larger values of the zoom level correspond to more detailed views of the - map. - - If zoomLevel is less than minimumZoomLevel then minimumZoomLevel - will be used, and if zoomLevel is larger than - maximumZoomLevel then maximumZoomLevel will be used. -*/ -void QGraphicsGeoMap::setZoomLevel(qreal zoomLevel) -{ - if (d_ptr->mapData) - d_ptr->mapData->setZoomLevel(zoomLevel); -} - -qreal QGraphicsGeoMap::zoomLevel() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->zoomLevel(); - - return -1; -} -/*! - \property QGraphicsGeoMap::supportsBearing - \brief This property holds whether bearing is supported by the - QGeoMappingManager associated with this widget. -*/ -bool QGraphicsGeoMap::supportsBearing() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->supportsBearing(); - - return false; -} - -/*! - \property QGraphicsGeoMap::bearing - \brief This property holds the bearing of the map. - - Value in degrees where 0 is equivalent to 90 degrees between view and earth's - surface i.e. looking straight down to earth. - - Changes to this property will be ignored if supportsBearing() - returns false. -*/ -void QGraphicsGeoMap::setBearing(qreal bearing) -{ - if (d_ptr->mapData) - d_ptr->mapData->setBearing(bearing); -} - -qreal QGraphicsGeoMap::bearing() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->bearing(); - - return 0; -} - -/*! - \property QGraphicsGeoMap::supportsTilting - \brief This property holds whether tilting is supported by the - QGeoMappingManager associated with this widget. -*/ -bool QGraphicsGeoMap::supportsTilting() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->supportsTilting(); - - return false; -} - -/*! - \property QGraphicsGeoMap::minimumTilt - \brief This property holds the minimum tilt supported by the - QGeoMappingManager associated with this widget. - - Value in degrees where 0 is equivalent to 90 degrees between view and earth's - surface i.e. looking straight down to earth. -*/ -qreal QGraphicsGeoMap::minimumTilt() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->minimumTilt(); - - return 0; -} - -/*! - \property QGraphicsGeoMap::maximumTilt - \brief This property holds the maximum tilt supported by the - QGeoMappingManager associated with this widget. - - Value in degrees where 0 is equivalent to 90 degrees between view and earth's - surface i.e. looking straight down to earth. -*/ -qreal QGraphicsGeoMap::maximumTilt() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->maximumTilt(); - - return 0; -} - -/*! - \property QGraphicsGeoMap::tilt - \brief This property holds the tilt of the map. - - Value in degrees where 0 is equivalent to 90 degrees between view and earth's - surface i.e. looking straight down to earth. - - If \a tilt is less than minimumTilt() then minimumTilt() - will be used, and if \a tilt is larger than - maximumTilt() then maximumTilt() will be used. - - Changes to this property will be ignored if supportsTilting() - returns false. -*/ -void QGraphicsGeoMap::setTilt(qreal tilt) -{ - if (d_ptr->mapData) - d_ptr->mapData->setTilt(tilt); -} - -qreal QGraphicsGeoMap::tilt() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->tilt(); - - return 0; -} - -/*! - Pans the map view \a dx pixels in the x direction and \a dy pixels - in the y direction. - - The x and y axes are specified in Graphics View Framework coordinates. - By default this will mean that positive values of \a dx move the - viewed area to the right and that positive values of \a dy move the - viewed area down. - - After the panning has occurred the centerChanged() signal will be emitted. -*/ -void QGraphicsGeoMap::pan(int dx, int dy) -{ - if (d_ptr->mapData) { - d_ptr->mapData->pan(dx, dy); - update(); - } -} - -/*! - \property QGraphicsGeoMap::center - \brief This property holds the coordinate at the center of the map viewport. - - Panning the map can be more efficient than changing the center by small - increments. -*/ -void QGraphicsGeoMap::setCenter(const QGeoCoordinate ¢er) -{ - if (d_ptr->mapData) - d_ptr->mapData->setCenter(center); -} - -QGeoCoordinate QGraphicsGeoMap::center() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->center(); - - return QGeoCoordinate(); -} - -/*! - Returns the map types supported by the QGeoMappingManager associated with - this widget. -*/ -QList<QGraphicsGeoMap::MapType> QGraphicsGeoMap::supportedMapTypes() const -{ - if (d_ptr->manager) - return d_ptr->manager->supportedMapTypes(); - - return QList<QGraphicsGeoMap::MapType>(); -} - -/*! - \property QGraphicsGeoMap::mapType - \brief This property holds the type of map data displayed by the map. - - Setting mapType to a type not present in supportedMapTypes() will do - nothing. -*/ -void QGraphicsGeoMap::setMapType(QGraphicsGeoMap::MapType mapType) -{ - if (d_ptr->mapData && d_ptr->manager) { - if (!d_ptr->manager->supportedMapTypes().contains(mapType)) - return; - - d_ptr->mapData->setMapType(mapType); - } -} - -QGraphicsGeoMap::MapType QGraphicsGeoMap::mapType() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->mapType(); - - return QGraphicsGeoMap::NoMap; -} - -/*! - Returns the connectivity modes supported by the QGeoMappingManager associated with - this widget. -*/ -QList<QGraphicsGeoMap::ConnectivityMode> QGraphicsGeoMap::supportedConnectivityModes() const -{ - if (d_ptr->manager) - return d_ptr->manager->supportedConnectivityModes(); - - return QList<QGraphicsGeoMap::ConnectivityMode>(); -} - -/*! - \property QGraphicsGeoMap::connectivityMode - \brief This property holds the connectivity mode used to obtain the map data. - - Setting connectivityMode to a mode not present in supportedConnectivityModes() will do - nothing. -*/ -void QGraphicsGeoMap::setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode) -{ - if (d_ptr->mapData && d_ptr->manager) { - if (!d_ptr->manager->supportedConnectivityModes().contains(connectivityMode)) - return; - - d_ptr->mapData->setConnectivityMode(connectivityMode); - } -} - -QGraphicsGeoMap::ConnectivityMode QGraphicsGeoMap::connectivityMode() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->connectivityMode(); - - return QGraphicsGeoMap::NoConnectivity; -} - -/*! - Returns whether custom map objects are supported by this engine. - - Custom map objects are map objects based on QGraphicsItem instances, which - are hard to support in cases where the map rendering is not being - performed by the Qt Graphics View framwork. -*/ -bool QGraphicsGeoMap::supportsCustomMapObjects() const -{ - if (d_ptr->manager) - return d_ptr->manager->supportsCustomMapObjects(); - - return false; -} - -/*! - Returns the map objects associated with this map. -*/ -QList<QGeoMapObject*> QGraphicsGeoMap::mapObjects() const -{ - if (!d_ptr->mapData) - return QList<QGeoMapObject*>(); - - return d_ptr->mapData->mapObjects(); -} - -/*! - Adds \a mapObject to the list of map objects managed by this widget. - - If \a mapObject is within the viewport of the map and - QGeoMapObject::isVisible() returns true then the map will display the map - object immediately. - - The map will take ownership of the \a mapObject. - - If supportsCustomMapObject() returns false and \a mapObject is a custom map - object then \a mapObject will not be added to the map. -*/ -void QGraphicsGeoMap::addMapObject(QGeoMapObject *mapObject) -{ - if (!mapObject || !d_ptr->mapData) - return; - - if ((mapObject->type() == QGeoMapObject::CustomType) && !supportsCustomMapObjects()) - return; - - d_ptr->mapData->addMapObject(mapObject); - - this->update(); -} - -/*! - Removes \a mapObject from the list of map objects managed by this widget. - - If \a mapObject is within the viewport of the map and - QGeoMapObject::isVisible() returns true then the map will stop displaying - the map object immediately. - - The map will release ownership of the \a mapObject. -*/ -void QGraphicsGeoMap::removeMapObject(QGeoMapObject *mapObject) -{ - if (!mapObject || !d_ptr->mapData) - return; - - d_ptr->mapData->removeMapObject(mapObject); - - this->update(); -} - -/*! - Clears the map objects associated with this map. - - The map objects will be deleted. -*/ -void QGraphicsGeoMap::clearMapObjects() -{ - if (!d_ptr->mapData) - return; - - d_ptr->mapData->clearMapObjects(); -} - -/*! - Returns the map overlays associated with this map. -*/ -QList<QGeoMapOverlay*> QGraphicsGeoMap::mapOverlays() const -{ - if (!d_ptr->mapData) - return QList<QGeoMapOverlay*>(); - - return d_ptr->mapData->mapOverlays(); -} - -/*! - Adds \a overlay to the list of map overlays associated with this map. - - The overlays will be drawn in the order in which they were added. - - The map will take ownership of \a overlay. -*/ -void QGraphicsGeoMap::addMapOverlay(QGeoMapOverlay *overlay) -{ - if (!overlay || !d_ptr->mapData) - return; - - d_ptr->mapData->addMapOverlay(overlay); - - this->update(); -} - -/*! - Removes \a overlay from the list of map overlays associated with this map. - - The map will release ownership of \a overlay. -*/ -void QGraphicsGeoMap::removeMapOverlay(QGeoMapOverlay *overlay) -{ - if (!overlay || !d_ptr->mapData) - return; - - d_ptr->mapData->removeMapOverlay(overlay); - - this->update(); -} - -/*! - Clears the map overlays associated with this map. - - The map overlays will be deleted. -*/ -void QGraphicsGeoMap::clearMapOverlays() -{ - if (!d_ptr->mapData) - return; - - d_ptr->mapData->clearMapOverlays(); -} - -/*! - Returns a bounding box corresponding to the physical area displayed - in the viewport of the map. - - The bounding box which is returned is defined by the upper left and - lower right corners of the visible area of the map. -*/ -QGeoBoundingBox QGraphicsGeoMap::viewport() const -{ - if (!d_ptr->mapData) - return QGeoBoundingBox(); - - return d_ptr->mapData->viewport(); -} - -/*! - Attempts to fit the bounding box \a bounds into the viewport of the map. - - This method will change the zoom level to the maximum zoom level such - that all of \a bounds is visible within the resulting viewport. - - If \a preserveViewportCenter is false the map will be centered on the - bounding box \a bounds before the zoom level is changed, otherwise the - center of the map will not be changed. -*/ -void QGraphicsGeoMap::fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter) -{ - if (!d_ptr->mapData) - return; - - d_ptr->mapData->fitInViewport(bounds, preserveViewportCenter); -} - -/*! - Returns the list of visible map objects managed by this widget which - contain the point \a screenPosition within their boundaries. -*/ -QList<QGeoMapObject*> QGraphicsGeoMap::mapObjectsAtScreenPosition(const QPointF &screenPosition) const -{ - if (d_ptr->mapData) - return d_ptr->mapData->mapObjectsAtScreenPosition(screenPosition); - - return QList<QGeoMapObject*>(); -} - -/*! - Returns the list of visible map objects managed by this widget which are - displayed at least partially within the on screen rectangle - \a screenRect. -*/ -QList<QGeoMapObject*> QGraphicsGeoMap::mapObjectsInScreenRect(const QRectF &screenRect) const -{ - if (d_ptr->mapData) - return d_ptr->mapData->mapObjectsInScreenRect(screenRect); - - return QList<QGeoMapObject*>(); -} - -/*! - Returns the list of visible map objects manager by this widget which - are displayed at least partially within the viewport of the map. -*/ -QList<QGeoMapObject*> QGraphicsGeoMap::mapObjectsInViewport() const -{ - if (d_ptr->mapData) - return d_ptr->mapData->mapObjectsInViewport(); - - return QList<QGeoMapObject*>(); -} - -/*! - Returns the position on the screen at which \a coordinate is displayed. - - An invalid QPointF will be returned if \a coordinate is invalid or is not - within the current viewport. -*/ -QPointF QGraphicsGeoMap::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const -{ - if (d_ptr->mapData) - return d_ptr->mapData->coordinateToScreenPosition(coordinate); - - return QPointF(); -} - -/*! - Returns the coordinate corresponding to the point in the viewport at \a - screenPosition. - - An invalid QGeoCoordinate will be returned if \a screenPosition is invalid - or is not within the current viewport. -*/ -QGeoCoordinate QGraphicsGeoMap::screenPositionToCoordinate(QPointF screenPosition) const -{ - if (d_ptr->mapData) - return d_ptr->mapData->screenPositionToCoordinate(screenPosition); - - return QGeoCoordinate(); -} - -/*! -\fn void QGraphicsGeoMap::zoomLevelChanged(qreal zoomLevel) - - This signal is emitted when the zoom level of the map changes. - - The new value is \a zoomLevel. -*/ - -/*! -\fn void QGraphicsGeoMap::bearingChanged(qreal bearing) - - This signal is emitted when the bearing of the map changes. - - The new value is \a bearing. - - This signal will not be emitted if supportsBearing() - returns false. -*/ - -/*! -\fn void QGraphicsGeoMap::tiltChanged(qreal tilt) - - This signal is emitted when the tilt of the map changes. - - The new value is \a tilt. - - This signal will not be emitted if supportsTilting() - returns false. -*/ - -/*! -\fn void QGraphicsGeoMap::centerChanged(const QGeoCoordinate &coordinate) - - This signal is emitted when the center of the map changes. - - The new value is \a coordinate. -*/ - -/*! -\fn void QGraphicsGeoMap::mapTypeChanged(QGraphicsGeoMap::MapType mapType) - - This signal is emitted when the map type changes. - - The new value is \a mapType. -*/ - -/*! -\fn void QGraphicsGeoMap::connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode) - - This signal is emitted when the connectivity mode used to fetch the - map data changes. - - The new value is \a connectivityMode. -*/ - -/******************************************************************************* -*******************************************************************************/ - -QGraphicsGeoMapPrivate::QGraphicsGeoMapPrivate() - : manager(0), - mapData(0), - panActive(false) {} - -QGraphicsGeoMapPrivate::~QGraphicsGeoMapPrivate() -{ - if (mapData) - delete mapData; -} - -#include "moc_qgraphicsgeomap.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/qgraphicsgeomap.h b/src/location/maps/qgraphicsgeomap.h deleted file mode 100644 index 00a47d8c..00000000 --- a/src/location/maps/qgraphicsgeomap.h +++ /dev/null @@ -1,172 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSGEOMAP_H -#define QGRAPHICSGEOMAP_H - -#include "qmobilityglobal.h" - -#include <QGraphicsWidget> - -QT_BEGIN_NAMESPACE - -class QGeoCoordinate; -class QGeoMappingManager; -class QGeoBoundingBox; -class QGeoMapObject; -class QGeoMapOverlay; -class QGraphicsGeoMapPrivate; - -class Q_LOCATION_EXPORT QGraphicsGeoMap : public QGraphicsWidget -{ - Q_OBJECT - Q_ENUMS(MapType) - Q_ENUMS(ConnectivityMode) - - Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel CONSTANT) - Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel CONSTANT) - Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) - Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged) - Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged) - Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged) - Q_PROPERTY(qreal minimumTilt READ minimumTilt CONSTANT) - Q_PROPERTY(qreal maximumTilt READ maximumTilt CONSTANT) - Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged) - Q_PROPERTY(bool supportsTilting READ supportsTilting CONSTANT) - Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged) - Q_PROPERTY(bool supportsBearing READ supportsBearing CONSTANT) - -public: - enum MapType { - NoMap, - StreetMap, - SatelliteMapDay, - SatelliteMapNight, - TerrainMap - }; - - enum ConnectivityMode { - NoConnectivity, - OfflineMode, - OnlineMode, - HybridMode - }; - - QGraphicsGeoMap(QGeoMappingManager *manager, QGraphicsItem *parent = 0); - virtual ~QGraphicsGeoMap(); - - QPainterPath shape() const; - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *parent); - - qreal minimumZoomLevel() const; - qreal maximumZoomLevel() const; - - void setZoomLevel(qreal zoomLevel); - qreal zoomLevel() const; - - bool supportsBearing() const; - void setBearing(qreal bearing); - qreal bearing() const; - - bool supportsTilting() const; - void setTilt(qreal tilt); - qreal tilt() const; - qreal minimumTilt() const; - qreal maximumTilt() const; - - void setCenter(const QGeoCoordinate ¢er); - QGeoCoordinate center() const; - - QList<MapType> supportedMapTypes() const; - void setMapType(MapType mapType); - MapType mapType() const; - - QList<ConnectivityMode> supportedConnectivityModes() const; - void setConnectivityMode(ConnectivityMode connectivityMode); - ConnectivityMode connectivityMode() const; - - bool supportsCustomMapObjects() const; - - QList<QGeoMapObject*> mapObjects() const; - void addMapObject(QGeoMapObject *mapObject); - void removeMapObject(QGeoMapObject *mapObject); - void clearMapObjects(); - - QList<QGeoMapOverlay*> mapOverlays() const; - void addMapOverlay(QGeoMapOverlay *overlay); - void removeMapOverlay(QGeoMapOverlay *overlay); - void clearMapOverlays(); - - QGeoBoundingBox viewport() const; - void fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter = false); - - QList<QGeoMapObject*> mapObjectsAtScreenPosition(const QPointF &screenPosition) const; - QList<QGeoMapObject*> mapObjectsInScreenRect(const QRectF &screenRect) const; - QList<QGeoMapObject*> mapObjectsInViewport() const; - - QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const; - QGeoCoordinate screenPositionToCoordinate(QPointF screenPosition) const; - -public Q_SLOTS: - void pan(int dx, int dy); - -protected: - void resizeEvent(QGraphicsSceneResizeEvent *event); - -Q_SIGNALS: - void zoomLevelChanged(qreal zoomLevel); - void centerChanged(const QGeoCoordinate &coordinate); - void mapTypeChanged(QGraphicsGeoMap::MapType mapType); - void connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode); - void bearingChanged(qreal bearing); - void tiltChanged(qreal tilt); - -private Q_SLOTS: - void updateMapDisplay(const QRectF& target); - -private: - QGraphicsGeoMapPrivate *d_ptr; - Q_DISABLE_COPY(QGraphicsGeoMap) -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/tiled/makepoly_p.h b/src/location/maps/tiled/makepoly_p.h deleted file mode 100644 index d8b3a852..00000000 --- a/src/location/maps/tiled/makepoly_p.h +++ /dev/null @@ -1,138 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MAKEPOLY_P_H -#define MAKEPOLY_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" -#include "qgeocoordinate.h" - -#include <QList> -#include <QPolygonF> -#include <QGraphicsPolygonItem> - -QT_BEGIN_NAMESPACE - -// TODO: replace boolean parameter by enum -static inline void makepoly(QPolygonF &points, const QList<QGeoCoordinate> & path, const QGeoTiledMapDataPrivate * mapData, bool closedPath, qreal ypole = -100) -{ - points.clear(); - - QGeoCoordinate lastCoord = closedPath ? path.last() : path.first(); - QPointF lastPoint = mapData->q_ptr->coordinateToWorldPixel(lastCoord); - - int width = mapData->maxZoomSize.width(); - - for (int i = 0; i < path.size(); ++i) { - const QGeoCoordinate &coord = path.at(i); - - if (!coord.isValid()) - continue; - - const qreal lng = coord.longitude(); - const qreal lastLng = lastCoord.longitude(); - - // is the dateline crossed = different sign AND gap is large enough - const bool crossesDateline = lastLng * lng < 0 && abs(lastLng - lng) > 180; - - // calculate base point - QPointF point = mapData->q_ptr->coordinateToWorldPixel(coord); - - // if the dateline is crossed, draw "around" the map over the chosen pole - if (crossesDateline) { - // is the shortest route east = dateline crossed XOR longitude is east by simple comparison - const bool goesEast = crossesDateline != (lng > lastLng); - // direction = positive if east, negative otherwise - const qreal dir = goesEast ? 1 : -1; - - // lastPoint on this side - const QPointF & L = lastPoint; - - // point on the other side - const QPointF & P = point; - - // lastPoint on the other side - QPointF L_ = L - QPointF(width * dir, 0); - - // point on this side - QPointF P_ = P + QPointF(width * dir, 0); - - // TODO: make a better algorithm to make sure the off-screen points P' and L' are far enough from the dateline so the lines to the poles don't flicker through. - // this works for now :) - L_ += (L_ - P) * 7; - P_ += (P_ - L) * 7; - - // pole point on this side - QPointF O1 = QPointF(P_.x(), ypole); - // pole point on the other side - QPointF O2 = QPointF(L_.x(), ypole); - - //points.append(L); // implicit - points.append(P_); // P' - points.append(O1); - points.append(O2); - points.append(L_); // L' - points.append(P); - } else { - // add point to polygon - points.append(point); - } - - lastCoord = coord; - lastPoint = point; - } -} - -QT_END_NAMESPACE - -#endif //MAKEPOLY_P_H diff --git a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp deleted file mode 100644 index 2d726b2b..00000000 --- a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmapcircleobjectinfo_p.h" - -#include "qgeotiledmapobjectinfo_p.h" -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomapcircleobject.h" - -#include <QGraphicsItem> -#include <QGraphicsEllipseItem> - -QT_BEGIN_NAMESPACE - -QGeoTiledMapCircleObjectInfo::QGeoTiledMapCircleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - circle = static_cast<QGeoMapCircleObject*>(mapObject); - - connect(circle, - SIGNAL(radiusChanged(qreal)), - this, - SLOT(radiusChanged(qreal))); - connect(circle, - SIGNAL(penChanged(QPen)), - this, - SLOT(penChanged(QPen))); - connect(circle, - SIGNAL(brushChanged(QBrush)), - this, - SLOT(brushChanged(QBrush))); - - ellipseItem = new QGraphicsEllipseItem; - ellipseItem->setPos(0, 0); - - graphicsItem = ellipseItem; - - radiusChanged(circle->radius()); - brushChanged(circle->brush()); - penChanged(circle->pen()); -} - -QGeoTiledMapCircleObjectInfo::~QGeoTiledMapCircleObjectInfo() {} - -void QGeoTiledMapCircleObjectInfo::radiusChanged(qreal /*radius*/) -{ - qreal radius = circle->radius(); - ellipseItem->setRect(-1*radius, -1*radius, 2*radius, 2*radius); - updateItem(); -} - -void QGeoTiledMapCircleObjectInfo::penChanged(const QPen &pen) -{ - ellipseItem->setPen(pen); - updateItem(); -} - -void QGeoTiledMapCircleObjectInfo::brushChanged(const QBrush &brush) -{ - ellipseItem->setBrush(brush); - updateItem(); -} - -#include "moc_qgeotiledmapcircleobjectinfo_p.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h deleted file mode 100644 index c6f07383..00000000 --- a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPCIRCLEOBJECT_INFO_P_H -#define QGEOTILEDMAPCIRCLEOBJECT_INFO_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeotiledmapobjectinfo_p.h" - -#include <QPolygonF> -#include <QPen> -#include <QBrush> - -QT_BEGIN_NAMESPACE - -class QGraphicsEllipseItem; -class QGeoMapCircleObject; - -class QGeoTiledMapCircleObjectInfo : public QGeoTiledMapObjectInfo -{ - Q_OBJECT -public: - QGeoTiledMapCircleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapCircleObjectInfo(); - - QGeoMapCircleObject* circle; - QGraphicsEllipseItem *ellipseItem; - -public slots: - void radiusChanged(qreal radius); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); -}; - -QT_END_NAMESPACE - -#endif //QGEOTILEDMAPCIRCLEOBJECT_INFO_P_H diff --git a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h deleted file mode 100644 index cdf2c81c..00000000 --- a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPCUSTOMOBJECT_INFO_P_H -#define QGEOTILEDMAPCUSTOMOBJECT_INFO_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeotiledmapobjectinfo_p.h" -#include "qgeoboundingbox.h" - -#include <QPixmap> - -class QGraphicsPixmapItem; - -QT_BEGIN_NAMESPACE - -class QGeoMapCustomObject; - -class QGeoTiledMapCustomObjectInfo : public QGeoTiledMapObjectInfo -{ - Q_OBJECT -public: - QGeoTiledMapCustomObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapCustomObjectInfo(); - - QGeoMapCustomObject* custom; - -public slots: - void updateTriggered(); - void graphicsItemChanged(QGraphicsItem *graphicsItem); - void offsetChanged(const QPoint &offset); -}; - -QT_END_NAMESPACE - -#endif //QGEOTILEDMAPCUSTOMOBJECT_INFO_P_H - diff --git a/src/location/maps/tiled/qgeotiledmapdata.cpp b/src/location/maps/tiled/qgeotiledmapdata.cpp deleted file mode 100644 index 207242f1..00000000 --- a/src/location/maps/tiled/qgeotiledmapdata.cpp +++ /dev/null @@ -1,1431 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeotiledmappingmanagerengine.h" -#include "qgeotiledmappingmanagerengine_p.h" -#include "qgeotiledmaprequest.h" -#include "qgeocoordinate.h" -#include "qgeoboundingbox.h" -#include "qgeomapoverlay.h" -#include <private/projwrapper_p.h> -#include "qgeomapobjectengine_p.h" - -#include "qgeotiledmapobjectinfo_p.h" -#include "qgeotiledmapcircleobjectinfo_p.h" -#include "qgeotiledmapgroupobjectinfo_p.h" -#include "qgeotiledmappixmapobjectinfo_p.h" -#include "qgeotiledmappolygonobjectinfo_p.h" -#include "qgeotiledmappolylineobjectinfo_p.h" -#include "qgeotiledmaprectangleobjectinfo_p.h" -#include "qgeotiledmaprouteobjectinfo_p.h" -#include "qgeotiledmaptextobjectinfo_p.h" -#include "qgeotiledmapcustomobjectinfo_p.h" - -#include "qgeomaptextobject.h" - -#include <QTimer> -#include <QImage> -#include <QGraphicsScene> - -#include <QDebug> - -//#define DEFAULT_ZOOMLEVEL 8 -#define PI 3.14159265 -//#define HIT_DETECTION_COLOR qRgba(0, 0, 255, 127) //semi-transparent blue - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#include <math.h> - -QT_BEGIN_NAMESPACE - -uint qHash(const QRectF& key) -{ - uint result = qHash(qRound(key.x())); - result += qHash(qRound(key.y())); - result += qHash(qRound(key.width())); - result += qHash(qRound(key.height())); - return result; -} - - -/*! - \class QGeoTiledMapData - \brief The QGeoTiledMapData class is a subclass of QGeoMapData provided - to make working with tile based mapping services more convenient. - - \inmodule QtLocation - - \ingroup maps-impl-tiled - - \since 1.2 - - This class assumes that at a zoom level of z the world is represented as a - 2^z by 2^z grid of tiles, and that the Mercator projection is used to map - back and forth between coordinate and positions on the map. - - Different projections can be provided by reimplementing - coordinateToWorldReferencePosition() and worldReferencePositionToCoordinate(). - - Many of the internal calculations deal with positions as though they are - pixel positions on the map at the maximum zoom level. Several functions are - provided which expose information about the map and the viewport onto the - map in these terms for use with custom QGeoMapObjectInfo subclasses. - - These functions include worldReferenceViewportCenter(), worldReferenceSize() and - worldReferenceViewportRect(). - - NOTE: QGeoTiledMapData blocks property change signals from QGeoMapData by calling - QGeoMapData::setBlockPropertyChangeSignals() with true. Changing this in - QGeoTiledMapData subclasses will cause the signals being emitted at wrong time. -*/ - -/*! - Constructs a new tiled map data object, which makes use of the functionality provided by \a engine. -*/ -QGeoTiledMapData::QGeoTiledMapData(QGeoMappingManagerEngine *engine) - : QGeoMapData(new QGeoTiledMapDataPrivate(this, engine)) -{ - Q_D(QGeoTiledMapData); - - QGeoTiledMappingManagerEngine *tileEngine = static_cast<QGeoTiledMappingManagerEngine *>(d->engine); - - setBlockPropertyChangeSignals(true); - - setZoomLevel(8.0); - - d->worldReferenceSize = (1 << qRound(tileEngine->maximumZoomLevel())) * tileEngine->tileSize(); - - // TODO get this from the engine, which should give different values depending on if this is running on a device or not -#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) - d->cache.setMaxCost(5 * 1024 * 1024); - d->zoomCache.setMaxCost(5 * 1024 * 1024); -#else - d->cache.setMaxCost(10 * 1024 * 1024); - d->zoomCache.setMaxCost(10 * 1024 * 1024); -#endif -} - -/*! - Destroys this tiled map data object. -*/ -QGeoTiledMapData::~QGeoTiledMapData() -{ -} - - -QPointF QGeoTiledMapDataPrivate::coordinateToScreenPosition(double lon, double lat) const -{ - QPointF offset = windowOffset(); - - QPoint pos(coordinateToWorldReferencePosition(lon, lat)); - - const int x = pos.x() - worldReferenceViewportRect.left(); -// if (x < 0) -// x += worldReferenceSize.width(); - - const int y = pos.y() - worldReferenceViewportRect.top(); - - QPointF posF(offset.x() + qreal(x) / zoomFactor, offset.y() + qreal(y) / zoomFactor); - - return posF; -} - -/*! - \reimp -*/ -QPointF QGeoTiledMapData::coordinateToScreenPosition(const QGeoCoordinate &coordwgs) const -{ - Q_D(const QGeoTiledMapData); - return d->coordinateToScreenPosition(coordwgs.longitude(), coordwgs.latitude()); -} - -/*! - \reimp -*/ -QGeoCoordinate QGeoTiledMapData::screenPositionToCoordinate(const QPointF &screenPosition) const -{ - Q_D(const QGeoTiledMapData); - - QPoint worldRef = d->screenPositionToWorldReferencePosition(screenPosition); - - if (worldRef.isNull()) - return QGeoCoordinate(); - - const QGeoCoordinate insph = worldReferencePositionToCoordinate(worldRef); - - //ProjCoordinate c(insph.longitude(), insph.latitude(), 0.0, d->spherical); - //c.convert(d->wgs84); - return insph; -} - -// this belongs to QGeoTiledMapDataPrivate in order to avoid -// breaking B.C. -QPoint QGeoTiledMapDataPrivate::screenPositionToWorldReferencePosition(const QPointF &screenPosition) const -{ - QPointF offset = windowOffset(); - - QPointF pos(screenPosition.x() - offset.x(), screenPosition.y() - offset.y()); - - const int worldX = int(worldReferenceViewportRect.left() + pos.x() * zoomFactor + 0.5) % worldReferenceSize.width(); - const int worldY = int(worldReferenceViewportRect.top() + pos.y() * zoomFactor + 0.5) % worldReferenceSize.height(); - - return QPoint(worldX, worldY); -} - -QPoint QGeoTiledMapDataPrivate::coordinateToWorldReferencePosition(double lng, double lat) const -{ - lng = lng / 360.0 + 0.5; - - lat = 0.5 - (log(tan((PI / 4.0) + (PI / 2.0) * lat / 180.0)) / PI) / 2.0; - lat = qMax(0.0, lat); - lat = qMin(1.0, lat); - - const double x = lng * worldReferenceSize.width(); - const double y = lat * worldReferenceSize.height(); - - const QPoint r(int(x > 0 ? x + 0.5 : x - 0.5), - int(y > 0 ? y + 0.5 : y - 0.5)); - return r; -} - -/*! - Converts the coordinate \a coordinate to a pixel position on the entire - map at the maximum zoom level. - - The default implementation is based on the Mercator projection. -*/ -QPoint QGeoTiledMapData::coordinateToWorldReferencePosition(const QGeoCoordinate &coordinate) const -{ - Q_D(const QGeoTiledMapData); - return d->coordinateToWorldReferencePosition(coordinate.longitude(), - coordinate.latitude()); -} - -qreal rmod(const qreal a, const qreal b) -{ - quint64 div = static_cast<quint64>(a / b); - return a - static_cast<qreal>(div) * b; -} - -/*! - Converts the pixel position \a pixel on the map to a coordinate. - - The pixel position is relative the entire map at the maximum zoom level. - - The default implementation is based on the Mercator projection. -*/ -QGeoCoordinate QGeoTiledMapData::worldReferencePositionToCoordinate(const QPoint &pixel) const -{ - Q_D(const QGeoTiledMapData); - - qreal fx = qreal(pixel.x()) / d->worldReferenceSize.width(); - qreal fy = qreal(pixel.y()) / d->worldReferenceSize.height(); - - if (fy < 0.0f) - fy = 0.0f; - else if (fy > 1.0f) - fy = 1.0f; - - qreal lat; - - if (fy == 0.0f) - lat = 90.0f; - else if (fy == 1.0f) - lat = -90.0f; - else - lat = (180.0f / PI) * (2.0f * atan(exp(PI * (1.0f - 2.0f * fy))) - (PI / 2.0f)); - - qreal lng; - if (fx >= 0) { - lng = rmod(fx, 1.0f); - } else { - lng = rmod(1.0f - rmod(-1.0f * fx, 1.0f), 1.0f); - } - - lng = lng * 360.0f - 180.0f; - - return QGeoCoordinate(lat, lng, 0.0); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::setCenter(const QGeoCoordinate ¢er) -{ - Q_D(QGeoTiledMapData); - - bool changed = (d->center != center); - - if (!changed) - return; - - d->worldReferenceViewportCenter = coordinateToWorldReferencePosition(center); - d->updateScreenRect(); - emit updateMapDisplay(); - - emit centerChanged(center); - - d->updateMapImage(); - - QGeoMapData::setCenter(center); - d->oe->invalidatePixelsForViewport(); - d->oe->trimPixelTransforms(); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::setMapType(QGraphicsGeoMap::MapType mapType) -{ - Q_D(QGeoTiledMapData); - - bool changed = (d->mapType != mapType); - - if (!changed) - return; - - QGeoMapData::setMapType(mapType); - - d->clearRequests(); - d->cache.clear(); - d->zoomCache.clear(); - emit updateMapDisplay(); - - emit mapTypeChanged(d->mapType); - - d->updateMapImage(); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode) -{ - QGraphicsGeoMap::ConnectivityMode oldMode = QGeoMapData::connectivityMode(); - - if (oldMode == connectivityMode) - return; - - QGeoMapData::setConnectivityMode(connectivityMode); - - if (oldMode == QGeoMapData::connectivityMode()) - return; - - emit connectivityModeChanged(connectivityMode); -} - -/*! - \reimp -*/ -QGeoCoordinate QGeoTiledMapData::center() const -{ - Q_D(const QGeoTiledMapData); - return worldReferencePositionToCoordinate(d->worldReferenceViewportCenter); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::setZoomLevel(qreal zoomLevelf) -{ - Q_D(QGeoTiledMapData); - - QPixmap oldImage(windowSize().toSize()); - if (!oldImage.isNull()) { - // grab the old image - QPainter painter1(&oldImage); - d->paintMap(&painter1, 0); - painter1.end(); - } - - qreal oldZoomLevel = d->zoomLevel; - int zoomLevel = qRound(zoomLevelf); - - QGeoMapData::setZoomLevel(zoomLevel); - - d->oe->invalidateZoomDependents(); - d->oe->invalidatePixelsForViewport(); - d->oe->trimPixelTransforms(); - - // QGeoMapData::setZoomLevel clips the zoom level to be - // in between the minimum and maximum zoom levels - zoomLevel = QGeoMapData::zoomLevel(); - - int zoomDiff = qRound(zoomLevel - oldZoomLevel); - - if (zoomDiff == 0) - return; - - d->zoomFactor = 1 << qRound(d->engine->maximumZoomLevel() - d->zoomLevel); - - QGeoTiledMappingManagerEngine *tileEngine = static_cast<QGeoTiledMappingManagerEngine *>(d->engine); - QSize tileSize = tileEngine->tileSize(); - - d->updateScreenRect(); - - if (oldImage.isNull()) { - d->updateMapImage(); - emit zoomLevelChanged(d->zoomLevel); - return; - } - - //scale old image - QRectF target = oldImage.rect(); - qreal width = target.width() / (1 << qAbs(zoomDiff)); - qreal height = target.height() / (1 << qAbs(zoomDiff)); - qreal x = target.x() + ((target.width() - width) / 2.0); - qreal y = target.y() + ((target.height() - height) / 2.0); - QRectF source = QRectF(x, y, width, height); - - QPixmap newImage(oldImage.size()); - newImage.fill(Qt::lightGray); - QPainter painter2(&newImage); -#if !(defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)) - painter2.setRenderHint(QPainter::SmoothPixmapTransform, true); -#endif - if (zoomDiff < 0) { - painter2.drawPixmap(source, oldImage, target); - } else { - painter2.drawPixmap(target, oldImage, source); - } - painter2.end(); - - d->zoomCache.clear(); - - QGeoTileIterator it(d); - - QPointF offset = d->windowOffset(); - - while (it.hasNext()) { - QGeoTiledMapRequest req = it.next(); - QRect tileRect = req.tileRect(); - - if (d->cache.contains(req)) - continue; - - if (!d->intersectsScreen(tileRect)) - continue; - - QList<QPair<QRect, QRect> > overlaps = d->intersectedScreen(tileRect); - for (int i = 0; i < overlaps.size(); ++i) { - QRect s = overlaps.at(i).first; - QRect t = overlaps.at(i).second; - - QRectF source = QRectF(offset.x() + int(t.left()) / d->zoomFactor, - offset.y() + int(t.top()) / d->zoomFactor, - int(t.width()) / d->zoomFactor, - int(t.height()) / d->zoomFactor); - - QPixmap *tile = new QPixmap(tileSize); - tile->fill(Qt::lightGray); // TODO: this looks useless - - QRectF target = QRectF(int(s.left()) / d->zoomFactor, - int(s.top()) / d->zoomFactor, - int(s.width()) / d->zoomFactor, - int(s.height()) / d->zoomFactor); - - QPainter painter3(tile); - painter3.drawPixmap(target, newImage, source); - painter3.end(); - - d->zoomCache.insert(req, tile, (tile->depth() * tile->width() * tile->height()) / 8); - } - } - - emit updateMapDisplay(); - - d->clearRequests(); - d->updateMapImage(); - - emit zoomLevelChanged(d->zoomLevel); - - // call again - QGeoMapData::setZoomLevel(zoomLevel); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::setWindowSize(const QSizeF &size) -{ - Q_D(QGeoTiledMapData); - - bool changed = (d->windowSize != size); - - if (!changed) - return; - - QGeoMapData::setWindowSize(size); - - d->oe->invalidatePixelsForViewport(); - d->oe->trimPixelTransforms(); - - d->updateScreenRect(); - - emit windowSizeChanged(d->windowSize); - - d->updateMapImage(); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::pan(int dx, int dy) -{ - Q_D(QGeoTiledMapData); - - int x = d->worldReferenceViewportCenter.x(); - int y = d->worldReferenceViewportCenter.y(); - - x = (x + dx * d->zoomFactor) % d->worldReferenceSize.width(); - if (x < 0) - x += d->worldReferenceSize.width(); - - y = (y + dy * d->zoomFactor); - int height = int(d->worldReferenceViewportRect.height() / 2.0); - if (y < height) - y = height; - if (y > d->worldReferenceSize.height() - height) - y = d->worldReferenceSize.height() - height; - - d->worldReferenceViewportCenter.setX(x); - d->worldReferenceViewportCenter.setY(y); - - QGeoCoordinate centerCoord = center(); - - QGeoMapData::setCenter(centerCoord); - d->oe->invalidatePixelsForViewport(); - d->oe->trimPixelTransforms(); - - d->updateScreenRect(); - - emit centerChanged(centerCoord); - - d->updateMapImage(); -} - -/*! - \reimp -*/ -QGeoBoundingBox QGeoTiledMapData::viewport() const -{ - Q_D(const QGeoTiledMapData); - if (d->worldReferenceViewportRectRight.isValid()) { - return QGeoBoundingBox(worldReferencePositionToCoordinate(d->worldReferenceViewportRectLeft.topLeft()), - worldReferencePositionToCoordinate(d->worldReferenceViewportRectRight.bottomRight())); - } else { - return QGeoBoundingBox(worldReferencePositionToCoordinate(d->worldReferenceViewportRect.topLeft()), - worldReferencePositionToCoordinate(d->worldReferenceViewportRect.bottomRight())); - } -} - -/*! - \reimp -*/ -void QGeoTiledMapData::fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter) -{ - Q_D(QGeoTiledMapData); - - if (!preserveViewportCenter) - setCenter(bounds.center()); - - int minZoomLevel = engine()->minimumZoomLevel(); - int maxZoomLevel = engine()->maximumZoomLevel(); - - int zoomFactor = 1 << maxZoomLevel; - - for (int i = minZoomLevel; i <= maxZoomLevel; ++i) { - QRect rect = d->screenRectForZoomFactor(zoomFactor); - QGeoBoundingBox viewport = QGeoBoundingBox(worldReferencePositionToCoordinate(rect.topLeft()), - worldReferencePositionToCoordinate(rect.bottomRight())); - -// qWarning() << i << zoomFactor -// << viewport.topLeft() -// << viewport.bottomRight(); - - if (!viewport.contains(bounds)) { - setZoomLevel(qMax(minZoomLevel, i - 1)); - return; - } - - zoomFactor /= 2; - } - - setZoomLevel(maxZoomLevel); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option) -{ - Q_D(QGeoTiledMapData); - d->paintMap(painter, option); -} - -/*! - \reimp -*/ -void QGeoTiledMapData::paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option) -{ - Q_D(QGeoTiledMapData); - d->paintObjects(painter, option); -} - -/*! - \reimp -*/ -QGeoMapObjectInfo *QGeoTiledMapData::createMapObjectInfo(QGeoMapObject *mapObject) -{ - switch (mapObject->type()) { - case QGeoMapObject::GroupType: - return new QGeoTiledMapGroupObjectInfo(this, mapObject); - case QGeoMapObject::RectangleType: - return new QGeoTiledMapRectangleObjectInfo(this, mapObject); - case QGeoMapObject::CircleType: - return new QGeoTiledMapCircleObjectInfo(this, mapObject); - case QGeoMapObject::PolylineType: - return new QGeoTiledMapPolylineObjectInfo(this, mapObject); - case QGeoMapObject::PolygonType: - return new QGeoTiledMapPolygonObjectInfo(this, mapObject); - case QGeoMapObject::PixmapType: - return new QGeoTiledMapPixmapObjectInfo(this, mapObject); - case QGeoMapObject::TextType: - return new QGeoTiledMapTextObjectInfo(this, mapObject); - case QGeoMapObject::RouteType: - return new QGeoTiledMapRouteObjectInfo(this, mapObject); - case QGeoMapObject::CustomType: - return new QGeoTiledMapCustomObjectInfo(this, mapObject); - default: - return 0; - } -} - -void QGeoTiledMapData::processRequests() -{ - Q_D(QGeoTiledMapData); - - QMutableSetIterator<QGeoTiledMapReply*> replyIter(d->replies); - // Abort off-screen replies - while (replyIter.hasNext()) { - QGeoTiledMapReply *reply = replyIter.next(); - if (!d->intersectsScreen(reply->request().tileRect()) - || (zoomLevel() != reply->request().zoomLevel()) - || (mapType() != reply->request().mapType()) - || (connectivityMode() != reply->request().connectivityMode())) { - d->replyRects.remove(reply->request().tileRect()); - d->zoomCache.remove(reply->request()); - replyIter.remove(); - reply->abort(); - } - } - - QGeoTiledMappingManagerEngine *tiledEngine - = static_cast<QGeoTiledMappingManagerEngine*>(engine()); - - QMutableListIterator<QGeoTiledMapRequest> requestIter(d->requests); - while (requestIter.hasNext()) { - QGeoTiledMapRequest req = requestIter.next(); - - d->requestRects.remove(req.tileRect()); - requestIter.remove(); - - // Do not use the requests which have pending replies or are off screen - if (d->replyRects.contains(req.tileRect()) || !d->intersectsScreen(req.tileRect())) { - continue; - } - - QGeoTiledMapReply *reply = tiledEngine->getTileImage(req); - - if (!reply) { - continue; - } - - if (reply->error() != QGeoTiledMapReply::NoError) { - tileError(reply->error(), reply->errorString()); - reply->deleteLater(); - d->zoomCache.remove(reply->request()); - continue; - } - - connect(reply, - SIGNAL(finished()), - this, - SLOT(tileFinished())); - - connect(reply, - SIGNAL(error(QGeoTiledMapReply::Error, QString)), - this, - SLOT(tileError(QGeoTiledMapReply::Error, QString))); - - d->replies.insert(reply); - d->replyRects.insert(reply->request().tileRect()); - - if (reply->isFinished()) - replyFinished(reply); - } -} - -void QGeoTiledMapData::tileFinished() -{ - Q_D(QGeoTiledMapData); - - QGeoTiledMapReply *reply = qobject_cast<QGeoTiledMapReply*>(sender()); - - if (!reply) { - if (d->requests.size() > 0) - QTimer::singleShot(0, this, SLOT(processRequests())); - return; - } else { - replyFinished(reply); - } -} - -void QGeoTiledMapData::replyFinished(QGeoTiledMapReply *reply) -{ - Q_D(QGeoTiledMapData); - - d->replyRects.remove(reply->request().tileRect()); - d->replies.remove(reply); - d->zoomCache.remove(reply->request()); - - if (reply->error() != QGeoTiledMapReply::NoError) { - if (d->requests.size() > 0) - QTimer::singleShot(0, this, SLOT(processRequests())); - reply->deleteLater(); - return; - } - - if ((zoomLevel() != reply->request().zoomLevel()) - || (mapType() != reply->request().mapType()) - || (connectivityMode() != reply->request().connectivityMode())) { - if (d->requests.size() > 0) - QTimer::singleShot(0, this, SLOT(processRequests())); - reply->deleteLater(); - return; - } - - //QPixmap *tile = new QPixmap(); - QImage *tile = new QImage(); - - if (!tile->loadFromData(reply->mapImageData(), reply->mapImageFormat().toAscii())) { - delete tile; - if (d->requests.size() > 0) - QTimer::singleShot(0, this, SLOT(processRequests())); - reply->deleteLater(); - return; - //setError(QGeoTiledMapReply::ParseError, "The response from the service was not in a recognisable format."); - } - - if (tile->isNull() || tile->size().isEmpty()) { - delete tile; - if (d->requests.size() > 0) - QTimer::singleShot(0, this, SLOT(processRequests())); - reply->deleteLater(); - return; - //setError(QGeoTiledMapReply::ParseError, "The map image is empty."); - } - - d->cache.insert(reply->request(), tile, (tile->depth() * tile->width() * tile->height()) / 8); - - d->cleanupCaches(); - - QRect tileRect = reply->request().tileRect(); - - QPointF offset = d->windowOffset(); - - QList<QPair<QRect, QRect> > overlaps = d->intersectedScreen(tileRect); - for (int i = 0; i < overlaps.size(); ++i) { - QRect t = overlaps.at(i).second; - QRectF target = QRectF(offset.x() + int(t.left()) / d->zoomFactor, - offset.y() + int(t.top()) / d->zoomFactor, - int(t.width()) / d->zoomFactor, - int(t.height()) / d->zoomFactor); - - emit updateMapDisplay(target); - } - - if (d->requests.size() > 0) - QTimer::singleShot(0, this, SLOT(processRequests())); - - reply->deleteLater(); -} - -void QGeoTiledMapData::tileError(QGeoTiledMapReply::Error error, QString errorString) -{ - Q_UNUSED(error) - qWarning() << errorString; -} - -/*! - \reimp -*/ -QList<QGeoMapObject*> QGeoTiledMapData::mapObjectsAtScreenPosition(const QPointF &screenPosition) const -{ - return mapObjectsInScreenRect(QRectF(screenPosition - QPointF(1,1), - screenPosition + QPointF(1,1))); -// if (screenPosition.isNull()) -// return QList<QGeoMapObject*>(); - -// Q_D(const QGeoTiledMapData); - -// QList<QGeoMapObject*> results; -// QSet<QGeoMapObject*> considered; - -// d->oe->updateTransforms(); - -// QList<QGraphicsItem*> pixelItems; -// pixelItems = d->oe->pixelScene->items(QRectF(screenPosition - QPointF(1,1), -// screenPosition + QPointF(1,1)), -// Qt::IntersectsItemShape, -// Qt::AscendingOrder); - -// foreach (QGraphicsItem *item, pixelItems) { -// QGeoMapObject *object = d->oe->pixelItems.value(item); -// Q_ASSERT(object); - -// if (object->isVisible() && !considered.contains(object)) { -// bool contains = false; - -// if (d->oe->pixelExact.contains(object)) { -// foreach (QGraphicsItem *item, d->oe->pixelExact.values(object)) { -// if (item->shape().contains(screenPosition)) { -// contains = true; -// break; -// } -// } -// } else { -// QGraphicsItem *item -// = d->oe->graphicsItemFromMapObject(object); - -// if (item) { -// QList<QTransform> trans = d->oe->pixelTrans.values(object); - -// foreach (QTransform t, trans) { -// bool ok; -// QTransform inv = t.inverted(&ok); -// if (ok) { -// QPointF testPt = screenPosition * inv; - -// // we have to special case text objects here -// // in order to maintain their old (1.1) behaviour -// QGeoMapTextObject *tobj = qobject_cast<QGeoMapTextObject*>(object); -// if (tobj) { -// if (item->boundingRect().contains(testPt)) { -// contains = true; -// break; -// } -// } else { -// if (item->shape().contains(testPt)) { -// contains = true; -// break; -// } -// } -// } -// } -// } -// } - -// if (contains) -// results << object; - -// considered.insert(object); -// } -// } - -// return results; -} - -/*! - \reimp -*/ -QList<QGeoMapObject*> QGeoTiledMapData::mapObjectsInScreenRect(const QRectF &screenRect) const -{ - QList<QGeoMapObject*> results; - QSet<QGeoMapObject*> considered; - - Q_D(const QGeoTiledMapData); - - d->oe->updateTransforms(); - - QList<QGraphicsItem*> pixelItems = d->oe->pixelScene->items(screenRect, - Qt::IntersectsItemShape, - Qt::AscendingOrder); - - foreach (QGraphicsItem *item, pixelItems) { - QGeoMapObject *object = d->oe->pixelItems.value(item); - Q_ASSERT(object); - - if (object->isVisible() && !considered.contains(object)) { - bool contains = false; - - if (d->oe->pixelExact.contains(object)) { - foreach (QGraphicsItem *item, d->oe->pixelExact.values(object)) - if (item->shape().intersects(screenRect)) - contains = true; - } else { - QGraphicsItem *item - = d->oe->graphicsItemFromMapObject(object); - - if (item) { - QList<QTransform> trans = d->oe->pixelTrans.values(object); - - foreach (QTransform t, trans) { - bool ok; - QTransform inv = t.inverted(&ok); - if (ok) { - QPolygonF testPoly = screenRect * inv; - - QPainterPath testPath; - testPath.moveTo(testPoly[0]); - testPath.lineTo(testPoly[1]); - testPath.lineTo(testPoly[2]); - testPath.lineTo(testPoly[3]); - testPath.closeSubpath(); - - if (item->shape().intersects(testPath)) - contains = true; - } - } - } - } - - if (contains) - results << object; - - considered.insert(object); - } - } - - return results; -} - -/*! - Returns the center of the viewport, in pixels on the entire - map as a pixmap at the maximum zoom level. -*/ -QPoint QGeoTiledMapData::worldReferenceViewportCenter() const -{ - Q_D(const QGeoTiledMapData); - return d->worldReferenceViewportCenter; -} - -/*! - Returns the size, in pixels, of the entire map as a pixmap at the maximum - zoom level. -*/ -QSize QGeoTiledMapData::worldReferenceSize() const -{ - Q_D(const QGeoTiledMapData); - return d->worldReferenceSize; -} - -/*! - Returns the visible screen rectangle, in pixels on the entire map - as a pixmap at the maximum zoom level. -*/ -QRect QGeoTiledMapData::worldReferenceViewportRect() const -{ - Q_D(const QGeoTiledMapData); - return d->worldReferenceViewportRect; -} - -/*! - Returns the ratio between a single pixel on the screen and a pixel on - the entire map as a pixmap at the maximum zoom level. -*/ -int QGeoTiledMapData::zoomFactor() const -{ - Q_D(const QGeoTiledMapData); - return d->zoomFactor; -} - -/*! - Forces the map display to update in the region specified by \a target. - - If \a target is empty the entire map display will be updated. -*/ -void QGeoTiledMapData::triggerUpdateMapDisplay(const QRectF &target) -{ - emit updateMapDisplay(target); -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoTiledMapDataPrivate::QGeoTiledMapDataPrivate(QGeoTiledMapData *parent, QGeoMappingManagerEngine *engine) - : QGeoMapDataPrivate(parent, engine), - oe(new QGeoMapObjectEngine(parent, this)), - zoomFactor(0), - spherical(QLatin1String("+proj=latlon +ellps=sphere")), - wgs84(QLatin1String("+proj=latlon +ellps=WGS84")) {} - -QGeoTiledMapDataPrivate::~QGeoTiledMapDataPrivate() -{ - foreach(QGeoTiledMapReply * reply, replies) { - reply->abort(); - reply->deleteLater(); - } - - if (oe) - delete oe; -} - -QPointF QGeoTiledMapDataPrivate::windowOffset() const -{ - qreal offsetX = ((windowSize.width() * zoomFactor) - worldReferenceViewportRect.width()) / 2.0; - if (offsetX < 0.0) - offsetX = 0.0; - offsetX /= zoomFactor; - - qreal offsetY = ((windowSize.height() * zoomFactor) - worldReferenceViewportRect.height()) / 2.0; - if (offsetY < 0.0) - offsetY = 0.0; - offsetY /= zoomFactor; - - return QPointF(offsetX, offsetY); -} - -void QGeoTiledMapDataPrivate::updateMapImage() -{ - Q_Q(QGeoTiledMapData); - - if ((zoomLevel == -1.0) || !windowSize.isValid()) - return; - - bool wasEmpty = (requests.size() == 0); - QGeoTileIterator it(this); - - while (it.hasNext()) { - QGeoTiledMapRequest req = it.next(); - QRect tileRect = req.tileRect(); - - if (!cache.contains(req)) { - if (!requestRects.contains(tileRect) && !replyRects.contains(tileRect)) { - requests.append(req); - requestRects.insert(tileRect); - } - } - } - -// qWarning() -// << d->requests.size() -// << d->cache.size() -// << d->cache.totalCost() -// << d->zoomCache.size() -// << d->zoomCache.totalCost(); - - if (wasEmpty && requests.size() > 0) { - QTimer::singleShot(0, q, SLOT(processRequests())); - } -} - -void QGeoTiledMapDataPrivate::clearRequests() -{ - requests.clear(); - requestRects.clear(); -} - -void QGeoTiledMapDataPrivate::paintMap(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/) -{ - QPointF offset = windowOffset(); - - QGeoTileIterator it(this); - - while (it.hasNext()) { - QGeoTiledMapRequest req = it.next(); - QRect tileRect = req.tileRect(); - - QList<QPair<QRect, QRect> > overlaps = intersectedScreen(tileRect); - for (int i = 0; i < overlaps.size(); ++i) { - QRect s = overlaps.at(i).first; - QRect t = overlaps.at(i).second; - - QRectF source = QRectF(int(s.left()) / zoomFactor, - int(s.top()) / zoomFactor, - int(s.width()) / zoomFactor, - int(s.height()) / zoomFactor); - QRectF target = QRectF(offset.x() + int(t.left()) / zoomFactor, - offset.y() + int(t.top()) / zoomFactor, - int(t.width()) / zoomFactor, - int(t.height()) / zoomFactor); - - if (cache.contains(req)) { - //painter->drawPixmap(target, *cache.object(req), source); - painter->drawImage(target, *cache.object(req), source); - } else { - if (zoomCache.contains(req)) { - painter->drawPixmap(target, *zoomCache.object(req), source); - } else { - painter->fillRect(target, Qt::lightGray); - } - } - } - } -} - -void QGeoTiledMapDataPrivate::paintObjects(QPainter *painter, const QStyleOptionGraphicsItem * option) -{ - painter->save(); - painter->setRenderHint(QPainter::Antialiasing); - - QRectF target = option ? option->rect : QRectF(QPointF(0,0), windowSize); - - QPointF offset = windowOffset(); - - target.adjust(offset.x(), offset.y(), -1.0 * offset.x(), -1.0 * offset.y()); - - painter->setClipRect(target); - - oe->updateTransforms(); - - QList<QGraphicsItem*> items = oe->pixelScene->items(target, - Qt::IntersectsItemShape, - Qt::AscendingOrder); - QSet<QGeoMapObject*> objsDone; - - QTransform baseTrans = painter->transform(); - - QStyleOptionGraphicsItem *style = new QStyleOptionGraphicsItem; - - foreach (QGraphicsItem *item, items) { - QGeoMapObject *object = oe->pixelItems.value(item); - Q_ASSERT(object); - if (object->isVisible() && !objsDone.contains(object)) { - if (oe->pixelExact.contains(object)) { - foreach (QGraphicsItem *it, oe->pixelExact.values(object)) { - painter->setTransform(baseTrans); - -// QStyleOptionGraphicsItem *style = new QStyleOptionGraphicsItem; - it->paint(painter, style); -// delete style; - } - } else { - QGraphicsItem *item = oe->graphicsItemFromMapObject(object); - if (item) { - foreach (QTransform trans, oe->pixelTrans.values(object)) { - painter->setTransform(trans * baseTrans); - -// QStyleOptionGraphicsItem *style = new QStyleOptionGraphicsItem; - item->paint(painter, style); - foreach (QGraphicsItem *child, item->children()) { - painter->setTransform(child->transform() * trans * baseTrans); - painter->translate(child->pos()); - child->paint(painter, style); - } - -// delete style; - } - } - } - objsDone.insert(object); - } - } - - painter->restore(); - - delete style; -} - -void QGeoTiledMapDataPrivate::cleanupCaches() -{ - int boundaryTiles = 3; - - QGeoTiledMappingManagerEngine *tiledEngine = static_cast<QGeoTiledMappingManagerEngine*>(engine); - - QSize tileSize = tiledEngine->tileSize(); - - QRectF cacheRect1; - QRectF cacheRect2; - - cacheRect1 = worldReferenceViewportRect.adjusted(-boundaryTiles * tileSize.width(), - -boundaryTiles * tileSize.height(), - boundaryTiles * tileSize.width(), - boundaryTiles * tileSize.height()); - - if (cacheRect1.width() > worldReferenceSize.width()) { - cacheRect1.setX(0); - cacheRect1.setWidth(worldReferenceSize.width()); - } else { - if (cacheRect1.x() + cacheRect1.width() > worldReferenceSize.width()) { - int oldWidth = cacheRect1.width(); - cacheRect1.setWidth(worldReferenceSize.width() - cacheRect1.x()); - cacheRect2 = QRectF(0, - cacheRect1.y(), - oldWidth - cacheRect1.width(), - cacheRect1.height()); - } - } - - QList<QGeoTiledMapRequest> keys = cache.keys(); - for (int i = 0; i < keys.size(); ++i) { - QRectF tileRect = keys.at(i).tileRect(); - if (!cacheRect1.intersects(tileRect)) { - if (cacheRect2.isNull() || !cacheRect2.intersects(tileRect)) { - cache.remove(keys.at(i)); - } - } - } -} - -QRect QGeoTiledMapDataPrivate::screenRectForZoomFactor(int factor) -{ - qreal viewportWidth = q_ptr->windowSize().width(); - qreal viewportHeight = q_ptr->windowSize().height(); - - int width = int(viewportWidth * factor); - int height = int(viewportHeight * factor); - - if (width > worldReferenceSize.width()) - width = worldReferenceSize.width(); - - if (height > worldReferenceSize.height()) - height = worldReferenceSize.height(); - - int x = (worldReferenceViewportCenter.x() - (width / 2)) % worldReferenceSize.width(); - if (x < 0) - x += worldReferenceSize.width(); - - int y = worldReferenceViewportCenter.y() - (height / 2); - - if (y < 0) - y = 0; - - if ((y + height) >= worldReferenceSize.height()) - y = worldReferenceSize.height() - height; - - return QRect(x, y, width, height); -} - -void QGeoTiledMapDataPrivate::updateScreenRect() -{ - worldReferenceViewportRect = screenRectForZoomFactor(zoomFactor); - - int x = worldReferenceViewportRect.x(); - int y = worldReferenceViewportRect.y(); - int width = worldReferenceViewportRect.width(); - int height = worldReferenceViewportRect.height(); - - if (x + width < worldReferenceSize.width()) { - worldReferenceViewportRectLeft = worldReferenceViewportRect; - worldReferenceViewportRectRight = QRect(); - } else { - int widthLeft = worldReferenceSize.width() - x; - int widthRight = width - widthLeft; - worldReferenceViewportRectLeft = QRect(x, y, widthLeft, height); - worldReferenceViewportRectRight = QRect(0, y, widthRight, height); - } -} - -bool QGeoTiledMapDataPrivate::containedInScreen(const QPoint &point) const -{ - return (worldReferenceViewportRectLeft.contains(point) - || (worldReferenceViewportRectRight.isValid() - && worldReferenceViewportRectRight.contains(point))); -} - -bool QGeoTiledMapDataPrivate::intersectsScreen(const QRect &rect) const -{ - return (worldReferenceViewportRectLeft.intersects(rect) - || (worldReferenceViewportRectRight.isValid() - && worldReferenceViewportRectRight.intersects(rect))); -} - -QList<QPair<QRect, QRect> > QGeoTiledMapDataPrivate::intersectedScreen(const QRect &rect, bool translateToScreen) const -{ - QList<QPair<QRect, QRect> > result; - - QRect rectL = rect.intersected(worldReferenceViewportRectLeft); - if (!rectL.isEmpty()) { - QRect source = QRect(rectL.topLeft() - rect.topLeft(), rectL.size()); - QRect target = QRect(rectL.topLeft() - worldReferenceViewportRectLeft.topLeft(), rectL.size()); - result << QPair<QRect, QRect>(source, target); - } - - if (worldReferenceViewportRectRight.isValid()) { - QRect rectR = rect.intersected(worldReferenceViewportRectRight); - if (!rectR.isEmpty()) { - QRect source = QRect(rectR.topLeft() - rect.topLeft(), rectR.size()); - QRect target = QRect(rectR.topLeft() - worldReferenceViewportRectRight.topLeft(), rectR.size()); - if (translateToScreen) - target.translate(worldReferenceViewportRectLeft.width(), 0); - result << QPair<QRect, QRect>(source, target); - } - } - - return result; -} - -// Old version, for reference - -//void QGeoMapDataPrivate::addObject(QGeoMapObject *object) -//{ -// containerObject->addChildObject(object); -// oe->addObject(object); -// emit q_ptr->updateMapDisplay(); -//} - -//void QGeoMapDataPrivate::removeObject(QGeoMapObject *object) -//{ -// containerObject->removeChildObject(object); -// oe->removeObject(object); -//} - -void QGeoTiledMapDataPrivate::addObject(QGeoMapObject *object) -{ -// containerObject->addChildObject(object); -// oe->addObject(object); -// emit q_ptr->updateMapDisplay(); - - QGeoMapDataPrivate::addObject(object); - oe->addObject(object); -} - -void QGeoTiledMapDataPrivate::removeObject(QGeoMapObject *object) -{ - QGeoMapDataPrivate::removeObject(object); - oe->removeObject(object); -} - -void QGeoTiledMapDataPrivate::update(QObject *object) -{ - QGeoMapObject *obj = qobject_cast<QGeoMapObject*>(object); - if (obj) { - QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(obj); - if (group) { - oe->objectsForLatLonUpdate << group; - oe->objectsForPixelUpdate << group; - static_cast<QGeoTiledMapData*>(q_ptr)->triggerUpdateMapDisplay(); - } else { - oe->invalidateObject(obj); - } - } else { - static_cast<QGeoTiledMapData*>(q_ptr)->triggerUpdateMapDisplay(); - } -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoTileIterator::QGeoTileIterator(const QGeoTiledMapDataPrivate *mapDataPrivate) - : atEnd(false), - row(-1), - col(-1), - screenRect(mapDataPrivate->worldReferenceViewportRect), - mapType(mapDataPrivate->mapType), - connectivityMode(mapDataPrivate->connectivityMode), - zoomLevel(mapDataPrivate->zoomLevel) -{ - QGeoTiledMappingManagerEngine *tiledEngine - = static_cast<QGeoTiledMappingManagerEngine*>(mapDataPrivate->engine); - tileSize = tiledEngine->tileSize() * mapDataPrivate->zoomFactor; - tileRect = QRect(QPoint(0, 0), tileSize); - - qulonglong x = static_cast<qulonglong>(screenRect.topLeft().x() / tileSize.width()); - qulonglong y = static_cast<qulonglong>(screenRect.topLeft().y() / tileSize.height()); - - width = tileSize.width() * (1 << zoomLevel); - - currTopLeft.setX(x * tileSize.width()); - currTopLeft.setY(y * tileSize.height()); -} - -QGeoTileIterator::QGeoTileIterator(QGraphicsGeoMap::ConnectivityMode connectivityMode, - QGraphicsGeoMap::MapType mapType, - const QRect &screenRect, - const QSize &tileSize, - int zoomLevel) - : atEnd(false), - row(-1), - col(-1), - screenRect(screenRect), - tileSize(tileSize), - mapType(mapType), - connectivityMode(connectivityMode), - zoomLevel(zoomLevel), - tileRect(QPoint(0, 0), tileSize) -{ - qulonglong x = static_cast<qulonglong>(screenRect.topLeft().x() / tileSize.width()); - qulonglong y = static_cast<qulonglong>(screenRect.topLeft().y() / tileSize.height()); - - width = tileSize.width() * (1 << zoomLevel); - - currTopLeft.setX(x * tileSize.width()); - currTopLeft.setY(y * tileSize.height()); -} - -bool QGeoTileIterator::hasNext() -{ - return !atEnd; -} - -QGeoTiledMapRequest QGeoTileIterator::next() -{ - int numCols = 1 << zoomLevel; - col = static_cast<int>(currTopLeft.x() / tileSize.width()) % numCols; - row = static_cast<int>(currTopLeft.y() / tileSize.height()) % numCols; - tileRect.moveTopLeft(currTopLeft); - if (tileRect.left() >= width) - tileRect.translate(-width, 0); - - currTopLeft.rx() += tileSize.width(); - - if (currTopLeft.x() > screenRect.right()) { //next row - qulonglong x = static_cast<qulonglong>(screenRect.topLeft().x() / tileSize.width()); - currTopLeft.setX(x * tileSize.width()); - currTopLeft.ry() += tileSize.height(); - } - - if (currTopLeft.y() > screenRect.bottom()) //done - atEnd = true; - - return QGeoTiledMapRequest(connectivityMode, mapType, zoomLevel, row, col, tileRect); -} - -#include "moc_qgeotiledmapdata.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/tiled/qgeotiledmapdata.h b/src/location/maps/tiled/qgeotiledmapdata.h deleted file mode 100644 index 5926f085..00000000 --- a/src/location/maps/tiled/qgeotiledmapdata.h +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPDATA_H -#define QGEOTILEDMAPDATA_H - -#include "qgeomapdata.h" -#include "qgeotiledmapreply.h" - -#include <QRectF> - -QT_BEGIN_NAMESPACE - -class QGeoTiledMapDataPrivate; - -class Q_LOCATION_EXPORT QGeoTiledMapData : public QGeoMapData -{ - Q_OBJECT - -public: - QGeoTiledMapData(QGeoMappingManagerEngine *engine); - virtual ~QGeoTiledMapData(); - - void setWindowSize(const QSizeF &size); - - void setZoomLevel(qreal zoomLevel); - - void pan(int dx, int dy); - - void setCenter(const QGeoCoordinate ¢er); - QGeoCoordinate center() const; - - void setMapType(QGraphicsGeoMap::MapType mapType); - - void setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode); - - virtual QGeoBoundingBox viewport() const; - virtual void fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter = false); - - QList<QGeoMapObject*> mapObjectsAtScreenPosition(const QPointF &screenPosition) const; - QList<QGeoMapObject*> mapObjectsInScreenRect(const QRectF &screenRect) const; - - QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const; - QGeoCoordinate screenPositionToCoordinate(const QPointF &screenPosition) const; - - virtual QPoint coordinateToWorldReferencePosition(const QGeoCoordinate &coordinate) const; - virtual QGeoCoordinate worldReferencePositionToCoordinate(const QPoint &pixel) const; - - QPoint worldReferenceViewportCenter() const; - QSize worldReferenceSize() const; - QRect worldReferenceViewportRect() const; - int zoomFactor() const; - - void triggerUpdateMapDisplay(const QRectF &target = QRectF()); - -protected: - void paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option); - void paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option); - - QGeoMapObjectInfo* createMapObjectInfo(QGeoMapObject *mapObject); - -private Q_SLOTS: - void processRequests(); - void tileFinished(); - void replyFinished(QGeoTiledMapReply *reply); - void tileError(QGeoTiledMapReply::Error error, QString errorString); - -private: - Q_DECLARE_PRIVATE(QGeoTiledMapData) - Q_DISABLE_COPY(QGeoTiledMapData) - friend class QGeoTiledMappingManagerEngine; - friend class QGeoTiledMapObjectInfo; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/tiled/qgeotiledmapdata_p.h b/src/location/maps/tiled/qgeotiledmapdata_p.h deleted file mode 100644 index 5df38012..00000000 --- a/src/location/maps/tiled/qgeotiledmapdata_p.h +++ /dev/null @@ -1,168 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPDATA_P_H -#define QGEOTILEDMAPDATA_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeomapdata_p.h" -#include "qgeomapobject.h" -#include "qgeomapobject_p.h" -#include <private/projwrapper_p.h> - -#include <QRectF> -#include <QHash> -#include <QCache> -#include <QPair> -#include <QList> - -class QGraphicsScene; - -QT_BEGIN_NAMESPACE - -class QGeoTiledMapData; -class QGeoTiledMapRequest; -class QGeoTiledMapReply; -class QGeoTiledMapObjectInfo; -class QGeoMapObjectEngine; - -class QGeoTiledMapDataPrivate : public QGeoMapDataPrivate -{ -public: - QGeoTiledMapDataPrivate(QGeoTiledMapData *parent, QGeoMappingManagerEngine *engine); - ~QGeoTiledMapDataPrivate(); - - void updateMapImage(); - void clearRequests(); - - QPointF windowOffset() const; - - void paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option); - void paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option); - - void cleanupCaches(); - - bool intersects(QGeoMapObject *mapObject, const QRectF &rect); - - QRect screenRectForZoomFactor(int zoomFactor); - void updateScreenRect(); - - bool containedInScreen(const QPoint &point) const; - bool intersectsScreen(const QRect &rect) const; - QList<QPair<QRect, QRect> > intersectedScreen(const QRect &rect, bool translateToScreen = true) const; - - virtual QPoint screenPositionToWorldReferencePosition(const QPointF &screenPosition) const; - virtual QPoint coordinateToWorldReferencePosition(double lon, double lat) const; - virtual QPointF coordinateToScreenPosition(double lon, double lat) const; - - virtual void addObject(QGeoMapObject *object); - virtual void removeObject(QGeoMapObject *object); - - virtual void update(QObject *object); - - QGeoMapObjectEngine *oe; - - int zoomFactor; - - QPoint worldReferenceViewportCenter; - QSize worldReferenceSize; - QRect worldReferenceViewportRect; - - QRect worldReferenceViewportRectLeft; - QRect worldReferenceViewportRectRight; - - QSet<QRect> requestRects; - QSet<QRect> replyRects; - - QList<QGeoTiledMapRequest> requests; - QSet<QGeoTiledMapReply*> replies; - - QCache<QGeoTiledMapRequest, QImage> cache; - QCache<QGeoTiledMapRequest, QPixmap> zoomCache; - - ProjCoordinateSystem spherical; - ProjCoordinateSystem wgs84; - - Q_DECLARE_PUBLIC(QGeoTiledMapData) -private: - Q_DISABLE_COPY(QGeoTiledMapDataPrivate) -}; - -class QGeoTileIterator -{ -public: - QGeoTileIterator(const QGeoTiledMapDataPrivate *mapData); - QGeoTileIterator(QGraphicsGeoMap::ConnectivityMode connectivityMode, - QGraphicsGeoMap::MapType mapType, - const QRect &screenRect, - const QSize &tileSize, - int zoomLevel); - - bool hasNext(); - QGeoTiledMapRequest next(); - -private: - bool atEnd; - int row; - int col; - int width; - QRect screenRect; - QSize tileSize; - QGraphicsGeoMap::MapType mapType; - QGraphicsGeoMap::ConnectivityMode connectivityMode; - int zoomLevel; - QPoint currTopLeft; - QRect tileRect; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp deleted file mode 100644 index 0bac17f8..00000000 --- a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmapgroupobjectinfo_p.h" - -#include "qgeotiledmapobjectinfo_p.h" -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomapobject.h" -#include "qgeomapgroupobject.h" - -#include "qgeomapobjectengine_p.h" - -#include <QGraphicsItem> -#include <QGraphicsScene> -#include <QGraphicsPathItem> - -QT_BEGIN_NAMESPACE - -QGeoTiledMapGroupObjectInfo::QGeoTiledMapGroupObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - - group = static_cast<QGeoMapGroupObject*>(mapObject); - - connect(group, - SIGNAL(childAdded(QGeoMapObject*)), - this, - SLOT(childAdded(QGeoMapObject*))); - connect(group, - SIGNAL(childUpdated(QGeoMapObject*)), - this, - SLOT(childUpdated(QGeoMapObject*))); - connect(group, - SIGNAL(childRemoved(QGeoMapObject*)), - this, - SLOT(childRemoved(QGeoMapObject*))); - - pathItem = new QGraphicsPathItem(); - graphicsItem = pathItem; - pathItem->setPos(0.0, 0.0); - - QList<QGeoMapObject*> objects = group->childObjects(); - - foreach(QGeoMapObject * object, objects) { - QGeoTiledMapObjectInfo* info = static_cast<QGeoTiledMapObjectInfo*>(object->info()); - - if (info) - info->graphicsItem->setParentItem(graphicsItem); - } - - updateItem(); -} - -QGeoTiledMapGroupObjectInfo::~QGeoTiledMapGroupObjectInfo() -{ -} - -void QGeoTiledMapGroupObjectInfo::childAdded(QGeoMapObject *childObject) -{ - if (!childObject) - return; - - QGeoTiledMapObjectInfo* info = static_cast<QGeoTiledMapObjectInfo*>(childObject->info()); - if (info && info->graphicsItem) { - // the child's z value will get updated in QGeoTiledMapGroupObjectInfo::childUpdated - // we do this in order to keep the same order of operations that we had previously - childObject->disconnect(childObject, SIGNAL(zValueChanged(int)), info, SLOT(zValueChanged(int))); - info->graphicsItem->setParentItem(graphicsItem); - tiledMapDataPrivate->update(mapObject()); - //tiledMapDataPrivate->update(childObject); - } -} - -void QGeoTiledMapGroupObjectInfo::childUpdated(QGeoMapObject *childObject) -{ - if (!childObject) - return; - - QGeoTiledMapObjectInfo* info = static_cast<QGeoTiledMapObjectInfo*>(childObject->info()); - if (info && info->graphicsItem) { - //info->graphicsItem->setParentItem(graphicsItem); - tiledMapDataPrivate->update(mapObject()); - info->zValueChanged(childObject->zValue()); - } -} - -void QGeoTiledMapGroupObjectInfo::childRemoved(QGeoMapObject *childObject) -{ - if (childObject && tiledMapDataPrivate->oe) { - tiledMapDataPrivate->oe->removeObject(childObject); - updateItem(); - } -} - -#include "moc_qgeotiledmapgroupobjectinfo_p.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h deleted file mode 100644 index 7ea3de33..00000000 --- a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPGROUPOBJECT_INFO_P_H -#define QGEOTILEDMAPGROUPOBJECT_INFO_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeotiledmapobjectinfo_p.h" - -QT_BEGIN_NAMESPACE -class QGraphicsPathItem; - -class QGeoMapGroupObject; - -class QGeoTiledMapGroupObjectInfo : public QGeoTiledMapObjectInfo -{ - Q_OBJECT -public: - QGeoTiledMapGroupObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapGroupObjectInfo(); - - QGeoMapGroupObject *group; - QGraphicsPathItem *pathItem; - -public slots: - void childAdded(QGeoMapObject *childObject); - void childUpdated(QGeoMapObject *childObject); - void childRemoved(QGeoMapObject *childObject); -}; - -QT_END_NAMESPACE - -#endif //QGEOTILEDMAPGROUPOBJECT_INFO_P_H diff --git a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp deleted file mode 100644 index 6b19d571..00000000 --- a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmapobjectinfo_p.h" - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" -#include "qgeoboundingbox.h" -#include "qgeomapobjectengine_p.h" - -#include <QGraphicsScene> - -#include <QPolygonF> - -#include <QDebug> - -QT_BEGIN_NAMESPACE - -QGeoTiledMapObjectInfo::QGeoTiledMapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoMapObjectInfo(mapData, mapObject), - inited(false), - updateAfterInit(false), - graphicsItem(0) -{ - tiledMapData = mapData; - tiledMapDataPrivate = static_cast<QGeoTiledMapDataPrivate*>(mapData->d_ptr); -} - -QGeoTiledMapObjectInfo::~QGeoTiledMapObjectInfo() -{ - if (graphicsItem) { - delete graphicsItem; - graphicsItem = 0; - } -} - -void QGeoTiledMapObjectInfo::init() -{ - if (graphicsItem) { - graphicsItem->setZValue(mapObject()->zValue()); - graphicsItem->setVisible(mapObject()->isVisible()); - //graphicsItem->setFlag(QGraphicsItem::ItemIsSelectable); - } - inited = true; - if (updateAfterInit) { - tiledMapData->updateMapDisplay(); - updateAfterInit = false; - } -} - -QGeoMapObject* QGeoTiledMapObjectInfo::mapObject() const -{ - return QGeoMapObjectInfo::mapObject(); -} - -void QGeoTiledMapObjectInfo::zValueChanged(int zValue) -{ - if (graphicsItem) { - graphicsItem->setZValue(zValue); - updateItem(); - if (tiledMapDataPrivate && tiledMapDataPrivate->oe) - tiledMapDataPrivate->oe->rebuildScenes(); - } -} - -void QGeoTiledMapObjectInfo::visibleChanged(bool visible) -{ - if (graphicsItem) { - graphicsItem->setVisible(visible); - updateItem(); - } -} - -void QGeoTiledMapObjectInfo::selectedChanged(bool /*selected*/) -{ - // don't want to draw the selection box -// if (graphicsItem) { -// graphicsItem->setSelected(selected); -// updateItem(); -// } -} - -void QGeoTiledMapObjectInfo::originChanged(const QGeoCoordinate &/*origin*/) -{ - if (graphicsItem) - updateItem(); -} - -void QGeoTiledMapObjectInfo::unitsChanged(QGeoMapObject::CoordinateUnit /*units*/) -{ - if (graphicsItem) - updateItem(); -} - -void QGeoTiledMapObjectInfo::transformTypeChanged(QGeoMapObject::TransformType /*transformType*/) -{ - if (graphicsItem) - updateItem(); -} - -QGeoBoundingBox QGeoTiledMapObjectInfo::boundingBox() const -{ - if (!graphicsItem || !tiledMapData) - return QGeoBoundingBox(); - - QGeoMapObjectEngine *e = tiledMapDataPrivate->oe; - - QGeoMapObject *object = mapObject(); - - e->updateTransforms(); - - if (e->latLonExact.contains(object)) { - QList<QGraphicsItem*> items = e->latLonExact.values(object); - QGeoBoundingBox box; - foreach (QGraphicsItem *item, items) { - QRectF latLonBounds = item->boundingRect(); - QPointF topLeft = latLonBounds.bottomLeft(); - if (topLeft.x() >= 180.0 * 3600.0) - topLeft.setX(topLeft.x() - 360.0 * 3600.0); - if (topLeft.x() < -180.0 * 3600.0) - topLeft.setX(topLeft.x() + 360.0 * 3600.0); - - QPointF bottomRight = latLonBounds.topRight(); - if (bottomRight.x() >= 180.0 * 3600.0) - bottomRight.setX(bottomRight.x() - 360.0 * 3600.0); - if (bottomRight.x() < -180.0 * 3600.0) - bottomRight.setX(bottomRight.x() + 360.0 * 3600.0); - - QGeoCoordinate tlc(topLeft.y() / 3600.0, topLeft.x() / 3600.0); - QGeoCoordinate brc(bottomRight.y() / 3600.0, bottomRight.x() / 3600.0); - - return QGeoBoundingBox(tlc, brc); - - // it looks like the following is overkill -// if (box.isValid()) { -// box |= QGeoBoundingBox(tlc, brc); -// } else { -// box = QGeoBoundingBox(tlc, brc); -// } - } - return box; - } else { - QTransform trans = e->latLonTrans.value(object); - - QRectF bounds = graphicsItem->boundingRect(); - QPolygonF poly = bounds * trans; - - QRectF latLonBounds = poly.boundingRect(); - QPointF topLeft = latLonBounds.bottomLeft(); - if (topLeft.x() >= 180.0 * 3600.0) - topLeft.setX(topLeft.x() - 360.0 * 3600.0); - if (topLeft.x() < -180.0 * 3600.0) - topLeft.setX(topLeft.x() + 360.0 * 3600.0); - - QPointF bottomRight = latLonBounds.topRight(); - if (bottomRight.x() >= 180.0 * 3600.0) - bottomRight.setX(bottomRight.x() - 360.0 * 3600.0); - if (bottomRight.x() < -180.0 * 3600.0) - bottomRight.setX(bottomRight.x() + 360.0 * 3600.0); - - QGeoCoordinate tlc(topLeft.y() / 3600.0, topLeft.x() / 3600.0); - QGeoCoordinate brc(bottomRight.y() / 3600.0, bottomRight.x() / 3600.0); - - return QGeoBoundingBox(tlc, brc); - } -} - -bool QGeoTiledMapObjectInfo::contains(const QGeoCoordinate &coordinate) const -{ - if (!graphicsItem || !tiledMapData) - return false; - - QGeoMapObjectEngine *e = tiledMapDataPrivate->oe; - - e->updateTransforms(); - QPointF latLonPoint(coordinate.longitude()*3600.0, coordinate.latitude()*3600.0); - - QGeoMapObject *object = mapObject(); - - if (e->latLonExact.contains(object)) { - QList<QGraphicsItem*> items = e->latLonExact.values(object); - foreach (QGraphicsItem *item, items) { - if (item->contains(latLonPoint)) - return true; - } - } else { - QList<QTransform> transList = e->latLonTrans.values(object); - foreach (QTransform trans, transList) { - bool ok; - QTransform inv = trans.inverted(&ok); - if (!ok) - continue; - - QPointF localPoint = latLonPoint * inv; - - if (graphicsItem->contains(localPoint)) - return true; - } - } - - return false; -} - -void QGeoTiledMapObjectInfo::updateItem(const QRectF& target) -{ - if (!inited) { - updateAfterInit = true; - return; - } - - QGeoMapObject *object = mapObject(); - if (object) - tiledMapDataPrivate->update(object); - if (graphicsItem) - tiledMapData->triggerUpdateMapDisplay(target); -} - -#include "moc_qgeotiledmapobjectinfo_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapobjectinfo_p.h deleted file mode 100644 index ea1fb559..00000000 --- a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.h +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPOBJECT_INFO_P_H -#define QGEOTILEDMAPOBJECT_INFO_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeomapobject_p.h" - -#include <QRectF> - -QT_BEGIN_NAMESPACE - -class QGraphicsItem; -class QRect; -class QPolygonF; - -class QGeoTiledMapData; -class QGeoBoundingBox; -class QGeoCoordinate; -class QGeoTiledMapDataPrivate; - -class QGeoTiledMapObjectInfo : public QGeoMapObjectInfo -{ - Q_OBJECT -public: - QGeoTiledMapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapObjectInfo(); - - virtual void init(); - - QGeoMapObject* mapObject() const; - - QGeoBoundingBox boundingBox() const; - bool contains(const QGeoCoordinate &coordinate) const; - - void updateItem(const QRectF &target = QRectF()); - - bool inited; - bool updateAfterInit; - - QGraphicsItem *graphicsItem; - QGeoTiledMapData *tiledMapData; - -public slots: - virtual void zValueChanged(int zValue); - virtual void visibleChanged(bool visible); - virtual void selectedChanged(bool selected); - - virtual void originChanged(const QGeoCoordinate &origin); - virtual void unitsChanged(QGeoMapObject::CoordinateUnit units); - virtual void transformTypeChanged(QGeoMapObject::TransformType transformType); - -protected: - QGeoTiledMapDataPrivate *tiledMapDataPrivate; -}; - -QT_END_NAMESPACE - -#endif //QGEOTILEDMAPOBJECT_INFO_P_H - diff --git a/src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp b/src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp deleted file mode 100644 index aedff2b6..00000000 --- a/src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmappingmanagerengine.h" -#include "qgeotiledmappingmanagerengine_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoTiledMappingManagerEngine - - \brief The QGeoTiledMappingManagerEngine class is provided to make writing - Qt Maps and Navigation API plugins for tiled based mapping services easier. - - \inmodule QtLocation - - \ingroup maps-impl-tiled - - \since 1.2 - - Subclasses of QGeoTiledMappingManagerEngine need to provide an implementation - of getTileImage(). - - It is important that the function setTileSize() is called before - getTileImage() to ensure that the tile is dealt with correctly after it is - fetched. If setTileSize() is not calle dfirst the behaviour is undefined. - - A subclass of QGeoTiledMappingManagerEngine will often make use of a subclass - fo QGeoTiledMapReply internally, in order to add any engine-specific - data (such as a QNetworkReply object for network-based services) to the - QGeoTiledMapReply instances used by the engine. - - QGeoTiledMappingManagerEngine will report that custom map objects are supported - by default. -*/ - -/*! - Constructs a new tiled mapping manager using the parameters \a parameters - and the parent \a parent. -*/ -QGeoTiledMappingManagerEngine::QGeoTiledMappingManagerEngine(const QMap<QString, QVariant> ¶meters, QObject *parent) - : QGeoMappingManagerEngine(new QGeoTiledMappingManagerEnginePrivate(), parent) -{ - Q_UNUSED(parameters) - setSupportsCustomMapObjects(true); -} - -/*! - Destroys this tiled mapping manager. -*/ -QGeoTiledMappingManagerEngine::~QGeoTiledMappingManagerEngine() -{ - // deleted in superclass destructor -} - -/* - Requests the map tiled specified by \a request. - - A QGeoTiledMapReply object will be returned, which can be used to manage the - fetching of the tile and to return the tile data. - - This manager and the returned QGeoTiledMapReply object will emit signals - indicating if the operation completes or if errors occur. - - Once the operation has completed, QGeoTiledMapReply::mapImageData() and - QGeoTiledMapReply::mapImageFormat() can be used to generate the tile image. - - The user is responsible for deleting the returned reply object, although - this can be done in the slot connected to QGeoTiledMappingManagerEngine::finished(), - QGeoTiledMappingManagerEngine::error(), QGeoTiledMapReply::finished() or - QGeoTiledMapReply::error() with deleteLater(). -*/ - -/*! -\fn virtual QGeoTiledMapReply* QGeoTiledMappingManagerEngine::getTileImage(const QGeoTiledMapRequest &request) - Requests the map tiled specified by \a request. - - A QGeoTiledMapReply object will be returned, which can be used to manage the - fetching of the tile and to return the tile data. - - The returned QGeoTiledMapReply object will emit signals - indicating if the operation completes or if errors occur. - - Once the operation has completed, QGeoTiledMapReply::mapImageData() and - QGeoTiledMapReply::mapImageFormat() can be used to generate the tile image. - - The user is responsible for deleting the returned reply object, although - this can be done in the slot connected to QGeoTiledMapReply::finished() or - QGeoTiledMapReply::error() with deleteLater(). - -*/ - -/*! - Returns a new QGeoMapData instance which will be managed by - this manager. - - A QGeoMapData instance contains and manages the information about - what a map widget is looking at. A single manager can be used by several - QGraphcisGeoMap instances since each instance has an associated QGeoMapData instance. - - The QGeoMapData instance can be treated as a kind of session object, or - as a model in a model-view-controller architecture, with QGraphicsGeoMap - as the view and QGeoMappingManagerEngine as the controller. - - The instance returned by the default implementation will be a - QGeoTiledMapData instance. Subclasses of QGeoTiledMappingManagerEngine are - free to override this function to return subclasses of QGeoTiledMapData in - order to customize the map. -*/ -QGeoMapData* QGeoTiledMappingManagerEngine::createMapData() -{ - return new QGeoTiledMapData(this); -} - -/*! - Returns the size of the tiles returned by this tiled mapping manager. -*/ -QSize QGeoTiledMappingManagerEngine::tileSize() const -{ - Q_D(const QGeoTiledMappingManagerEngine); - return d->tileSize; -} - -/*! - Sets the size of the tiles returned by this tiled mapping manager to \a - tileSize. - - Subclasses of QGeoTiledMappingManagerEngine should use this function to - ensure tileSize() provides accurate information. -*/ -void QGeoTiledMappingManagerEngine::setTileSize(const QSize &tileSize) -{ - Q_D(QGeoTiledMappingManagerEngine); - d->tileSize = tileSize; -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoTiledMappingManagerEnginePrivate::QGeoTiledMappingManagerEnginePrivate() - : QGeoMappingManagerEnginePrivate() {} - -QGeoTiledMappingManagerEnginePrivate::~QGeoTiledMappingManagerEnginePrivate() {} - -/******************************************************************************* -*******************************************************************************/ - -#include "moc_qgeotiledmappingmanagerengine.cpp" - -QT_END_NAMESPACE diff --git a/src/location/maps/tiled/qgeotiledmappingmanagerengine.h b/src/location/maps/tiled/qgeotiledmappingmanagerengine.h deleted file mode 100644 index 975fd02a..00000000 --- a/src/location/maps/tiled/qgeotiledmappingmanagerengine.h +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPPINGMANAGERENGINE_H -#define QGEOTILEDMAPPINGMANAGERENGINE_H - -#include "qgeomappingmanagerengine.h" - -#include "qgeotiledmapreply.h" -#include "qgeotiledmaprequest.h" -#include "qgeotiledmapdata.h" - -#include <QMap> -#include <QVariant> - -QT_BEGIN_NAMESPACE - -class QGeoTiledMappingManagerEnginePrivate; - -class Q_LOCATION_EXPORT QGeoTiledMappingManagerEngine : public QGeoMappingManagerEngine -{ - Q_OBJECT -public: - virtual ~QGeoTiledMappingManagerEngine(); - - virtual QGeoTiledMapReply* getTileImage(const QGeoTiledMapRequest &request) = 0; - - virtual QGeoMapData* createMapData(); - - QSize tileSize() const; - -protected: - QGeoTiledMappingManagerEngine(const QMap<QString, QVariant> ¶meters, QObject *parent = 0); - void setTileSize(const QSize &tileSize); - -private: - Q_DECLARE_PRIVATE(QGeoTiledMappingManagerEngine) - Q_DISABLE_COPY(QGeoTiledMappingManagerEngine) -}; - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QGeoTiledMapReply::Error)) - -#endif diff --git a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h deleted file mode 100644 index 580346f9..00000000 --- a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPPIXMAPOBJECT_INFO_P_H -#define QGEOTILEDMAPPIXMAPOBJECT_INFO_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeotiledmapobjectinfo_p.h" -#include "qgeoboundingbox.h" - -#include <QPixmap> - -QT_BEGIN_NAMESPACE - -class QGraphicsPixmapItem; -class QGeoMapPixmapObject; - -class QGeoTiledMapPixmapObjectInfo : public QGeoTiledMapObjectInfo -{ - Q_OBJECT -public: - QGeoTiledMapPixmapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapPixmapObjectInfo(); - - QGeoMapPixmapObject* pixmap; - QGraphicsPixmapItem *pixmapItem; - -public slots: - void pixmapChanged(const QPixmap &pixmap); - void offsetChanged(const QPoint &offset); -}; - -QT_END_NAMESPACE - -#endif //QGEOTILEDMAPPIXMAPOBJECT_INFO_P_H - diff --git a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp deleted file mode 100644 index 9e5928bd..00000000 --- a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmappolygonobjectinfo_p.h" - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomappolygonobject.h" - -QT_BEGIN_NAMESPACE - -QGeoTiledMapPolygonObjectInfo::QGeoTiledMapPolygonObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - polygon = static_cast<QGeoMapPolygonObject*>(mapObject); - - connect(polygon, - SIGNAL(pathChanged(QList<QGeoCoordinate>)), - this, - SLOT(pathChanged(QList<QGeoCoordinate>))); - connect(polygon, - SIGNAL(penChanged(QPen)), - this, - SLOT(penChanged(QPen))); - connect(polygon, - SIGNAL(brushChanged(QBrush)), - this, - SLOT(brushChanged(QBrush))); - - polygonItem = new QGraphicsPolygonItem(); - graphicsItem = polygonItem; - - penChanged(polygon->pen()); - brushChanged(polygon->brush()); - pathChanged(polygon->path()); -} - -QGeoTiledMapPolygonObjectInfo::~QGeoTiledMapPolygonObjectInfo() {} - -void QGeoTiledMapPolygonObjectInfo::pathChanged(const QList<QGeoCoordinate> &/*path*/) -{ - genPoly(); - updateItem(); -} - -void QGeoTiledMapPolygonObjectInfo::penChanged(const QPen &/*pen*/) -{ - polygonItem->setPen(polygon->pen()); - updateItem(); -} - -void QGeoTiledMapPolygonObjectInfo::brushChanged(const QBrush &/*brush*/) -{ - polygonItem->setBrush(polygon->brush()); - updateItem(); -} - -void QGeoTiledMapPolygonObjectInfo::genPoly() -{ - QPolygonF poly; - - QList<QGeoCoordinate> path = polygon->path(); - - if (path.size() > 0) { - QGeoCoordinate origin = path.at(0); - double ox = origin.longitude() * 3600.0; - double oy = origin.latitude() * 3600.0; - - double oldx = ox; - - poly << QPointF(0,0); - for (int i = 0; i < path.size(); ++i) { - QGeoCoordinate pt = path.at(i); - double x = pt.longitude() * 3600.0; - double y = pt.latitude() * 3600.0; - - if (qAbs(x - oldx) > 180.0 * 3600.0) { - if (x > oldx) { - x -= 360.0 * 3600.0; - } else if (x < oldx) { - x += 360.0 * 3600.0; - } - } - - poly << QPointF(x - ox, y - oy); - - oldx = x; - } - } - - polygonItem->setPolygon(poly); -} - -#include "moc_qgeotiledmappolygonobjectinfo_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp deleted file mode 100644 index 472d032b..00000000 --- a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmappolylineobjectinfo_p.h" -//#include "makepoly_p.h" - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomappolylineobject.h" - -#include "qgeocoordinate.h" - -QT_BEGIN_NAMESPACE - -QGeoTiledMapPolylineObjectInfo::QGeoTiledMapPolylineObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - polyline = static_cast<QGeoMapPolylineObject*>(mapObject); - - connect(polyline, - SIGNAL(pathChanged(QList<QGeoCoordinate>)), - this, - SLOT(pathChanged(QList<QGeoCoordinate>))); - connect(polyline, - SIGNAL(penChanged(QPen)), - this, - SLOT(penChanged(QPen))); - - pathItem = new QGraphicsPathItem(); - graphicsItem = pathItem; - - penChanged(polyline->pen()); - pathChanged(polyline->path()); -} - -QGeoTiledMapPolylineObjectInfo::~QGeoTiledMapPolylineObjectInfo() {} - -void QGeoTiledMapPolylineObjectInfo::pathChanged(const QList<QGeoCoordinate> &/*path*/) -{ - genPath(); - updateItem(); -} - -void QGeoTiledMapPolylineObjectInfo::penChanged(const QPen &/*pen*/) -{ - pathItem->setPen(polyline->pen()); - updateItem(); -} - -void QGeoTiledMapPolylineObjectInfo::genPath() -{ - QPainterPath p; - - QList<QGeoCoordinate> path = polyline->path(); - - if (path.size() > 0) { - QGeoCoordinate origin = path.at(0); - double ox = origin.longitude() * 3600.0; - double oy = origin.latitude() * 3600.0; - - double oldx = ox; - - p.moveTo(0, 0); - for (int i = 1; i < path.size(); ++i) { - QGeoCoordinate pt = path.at(i); - double x = pt.longitude() * 3600.0; - double y = pt.latitude() * 3600.0; - - if (qAbs(x - oldx) > 180.0 * 3600.0) { - if (x > oldx) { - x -= 360.0 * 3600.0; - } else if (x < oldx) { - x += 360.0 * 3600.0; - } - } - - p.lineTo(x - ox, y - oy); - - oldx = x; - } - } - - pathItem->setPath(p); -} - -#include "moc_qgeotiledmappolylineobjectinfo_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp deleted file mode 100644 index 7f20bab4..00000000 --- a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmaprectangleobjectinfo_p.h" - -#include <QGraphicsPolygonItem> - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeoboundingbox.h" - -#include "qgeomaprectangleobject.h" - -QT_BEGIN_NAMESPACE - -QGeoTiledMapRectangleObjectInfo::QGeoTiledMapRectangleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - rectangle = static_cast<QGeoMapRectangleObject*>(mapObject); - - connect(rectangle, - SIGNAL(topLeftChanged(QGeoCoordinate)), - this, - SLOT(topLeftChanged(QGeoCoordinate))); - connect(rectangle, - SIGNAL(bottomRightChanged(QGeoCoordinate)), - this, - SLOT(bottomRightChanged(QGeoCoordinate))); - connect(rectangle, - SIGNAL(penChanged(QPen)), - this, - SLOT(penChanged(QPen))); - connect(rectangle, - SIGNAL(brushChanged(QBrush)), - this, - SLOT(brushChanged(QBrush))); - - polygonItem = new QGraphicsPolygonItem(); - graphicsItem = polygonItem; - - topLeftChanged(rectangle->topLeft()); - bottomRightChanged(rectangle->bottomRight()); - penChanged(rectangle->pen()); - brushChanged(rectangle->brush()); -} - -QGeoTiledMapRectangleObjectInfo::~QGeoTiledMapRectangleObjectInfo() {} - -void QGeoTiledMapRectangleObjectInfo::topLeftChanged(const QGeoCoordinate &/*topLeft*/) -{ - regenPolygon(); - updateItem(); -} - -void QGeoTiledMapRectangleObjectInfo::bottomRightChanged(const QGeoCoordinate &/*bottomRight*/) -{ - regenPolygon(); - updateItem(); -} - -void QGeoTiledMapRectangleObjectInfo::penChanged(const QPen &/*pen*/) -{ - polygonItem->setPen(rectangle->pen()); - updateItem(); -} - -void QGeoTiledMapRectangleObjectInfo::brushChanged(const QBrush &/*brush*/) -{ - polygonItem->setBrush(rectangle->brush()); - updateItem(); -} - -void QGeoTiledMapRectangleObjectInfo::regenPolygon() -{ - QPolygonF poly; - - if (!rectangle->bounds().isValid()) - return; - - const QGeoCoordinate tl = rectangle->bounds().topLeft(); - if (!tl.isValid()) - return; - - const QGeoCoordinate br = rectangle->bounds().bottomRight(); - if (!br.isValid()) - return; - - double left = tl.longitude() * 3600.0; - double right = br.longitude() * 3600.0; - double top = tl.latitude() * 3600.0; - double bottom = br.latitude() * 3600.0; - - if (left > right) - right += 360.0 * 3600.0; - - poly << QPointF(left, top); - poly << QPointF(right, top); - poly << QPointF(right, bottom); - poly << QPointF(left, bottom); - - polygonItem->setPolygon(poly); -} - -#include "moc_qgeotiledmaprectangleobjectinfo_p.cpp" - -QT_END_NAMESPACE - - diff --git a/src/location/maps/tiled/qgeotiledmaprequest.cpp b/src/location/maps/tiled/qgeotiledmaprequest.cpp deleted file mode 100644 index cad5a7f2..00000000 --- a/src/location/maps/tiled/qgeotiledmaprequest.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmaprequest.h" -#include "qgeotiledmaprequest_p.h" - -#include "qgeotiledmapdata.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QGeoTiledMapRequest - \brief The QGeoTiledMapRequest class represents a request for a map tile - from a tile-based mapping service. - - \inmodule QtLocation - - \ingroup maps-impl-tiled - - \since 1.2 - - The tile is specified by a map type, a zoom level, a row and a column. - - At a zoom level of z the world is represented as a 2^z by 2^z grid - of tiles, and the row and column are relative to the grid of tiles - for the zoom level of the request. -*/ - -/*! - Constructs a new tiled map request. -*/ -QGeoTiledMapRequest::QGeoTiledMapRequest() - : d_ptr(new QGeoTiledMapRequestPrivate()) {} - -/*! - Constructs a new tiled map request. - - At a zoom level of z the world is represented as a 2^z by 2^z grid - of tiles. - - This tiled map request represents a request for the tile at row \a row and - column \a column at zoom level \a zoomLevel and type - \a mapType. - - The request will use connectivity mode \a connectivityMode when - accessing the map data. - - The rectangle that the tile occupies on the map at the maximum zoom level - is also given as \a tileRect. -*/ -QGeoTiledMapRequest::QGeoTiledMapRequest(QGraphicsGeoMap::ConnectivityMode connectivityMode, - QGraphicsGeoMap::MapType mapType, - qreal zoomLevel, - int row, - int column, - const QRect &tileRect) - : d_ptr(new QGeoTiledMapRequestPrivate()) -{ - //d_ptr->mapData = mapData; - d_ptr->row = row; - d_ptr->column = column; - d_ptr->tileRect = tileRect; - - d_ptr->zoomLevel = zoomLevel; - d_ptr->mapType = mapType; - d_ptr->connectivityMode = connectivityMode; -} - -/*! - Constructs a tiled map request from the contents of \a other. -*/ -QGeoTiledMapRequest::QGeoTiledMapRequest(const QGeoTiledMapRequest &other) - : d_ptr(other.d_ptr) {} - -/*! - Destroys this tiled map request. -*/ -QGeoTiledMapRequest::~QGeoTiledMapRequest() {} - -/*! - Assigns \a other to this tiled map request and then returns a reference to - this tiled map request. -*/ -QGeoTiledMapRequest& QGeoTiledMapRequest::operator= (const QGeoTiledMapRequest & other) -{ - d_ptr = other.d_ptr; - - return *this; -} - -/*! - Returns with this tiled map request is equal to \a other. -*/ -bool QGeoTiledMapRequest::operator== (const QGeoTiledMapRequest &other) const -{ - return (d_ptr->row == other.d_ptr->row) && - (d_ptr->column == other.d_ptr->column) && - (d_ptr->zoomLevel == other.d_ptr->zoomLevel) && - (d_ptr->mapType == other.d_ptr->mapType) && - (d_ptr->connectivityMode == other.d_ptr->connectivityMode); -} - -/* - Returns the QGeoMapData instance associated with this request. -*/ -//QGeoTiledMapData* QGeoTiledMapRequest::mapData() const -//{ -// return d_ptr->mapData; -//} - -/*! - Returns the connectivity mode of the tile request. -*/ -QGraphicsGeoMap::ConnectivityMode QGeoTiledMapRequest::connectivityMode() const -{ - return d_ptr->connectivityMode; -} - -/*! - Returns the map type of the requested tile. -*/ -QGraphicsGeoMap::MapType QGeoTiledMapRequest::mapType() const -{ - return d_ptr->mapType; -} - -/*! - Returns the zoom level of the requested tile. - - The lower and upper bounds of the zoom level are set by - the QGeoMappingManager that created this request. -*/ -int QGeoTiledMapRequest::zoomLevel() const -{ - return d_ptr->zoomLevel; -} - -/*! - Returns the row of the requested tile. - - At a zoom level of z the world is represented as a 2^z by 2^z grid - of tiles, and so the row will be between 0 and 2^z - 1. -*/ -int QGeoTiledMapRequest::row() const -{ - return d_ptr->row; -} - -/*! - Returns the column of the requested tile. - - At a zoom level of z the world is represented as a 2^z by 2^z grid - of tiles, and so the column will be between 0 and 2^z - 1. -*/ -int QGeoTiledMapRequest::column() const -{ - return d_ptr->column; -} - -/*! - Returns the rectangle that the tile covers on the map at the maximum zoon - level. - - At a zoom level of z the world is represented as a 2^z by 2^z grid of - tiles. If m is the maximum zoom level and the tiles are t by t pixel - squares, then the entire world could be viewed as a 2^m * t by 2^m * t - pixel image. - - The rectangle returned is specified relative to the pixel coordinates of - the map at the maximum zoom level. -*/ -QRect QGeoTiledMapRequest::tileRect() const -{ - return d_ptr->tileRect; -} - -/*! - Returns a hash of the tiled map request \a key. -*/ -uint qHash(const QGeoTiledMapRequest &key) -{ - uint result = QT_PREPEND_NAMESPACE(qHash)(key.row() * 13); - result += QT_PREPEND_NAMESPACE(qHash)(key.column() * 17); - result += QT_PREPEND_NAMESPACE(qHash)(key.zoomLevel() * 19); - result += QT_PREPEND_NAMESPACE(qHash)(static_cast<int>(key.mapType())); - return result; -} - -/******************************************************************************* -*******************************************************************************/ - -QGeoTiledMapRequestPrivate::QGeoTiledMapRequestPrivate() - : QSharedData(), - connectivityMode(QGraphicsGeoMap::NoConnectivity), - mapType(QGraphicsGeoMap::NoMap), - zoomLevel(0), - row(0), - column(0), - tileRect(QRect()) {} -//mapData(0) {} - -QGeoTiledMapRequestPrivate::QGeoTiledMapRequestPrivate(const QGeoTiledMapRequestPrivate &other) - : QSharedData(other), -// mapData(other.mapData), - connectivityMode(other.connectivityMode), - mapType(other.mapType), - zoomLevel(other.zoomLevel), - row(other.row), - column(other.column), - tileRect(other.tileRect) {} - -QGeoTiledMapRequestPrivate::~QGeoTiledMapRequestPrivate() {} - -QGeoTiledMapRequestPrivate& QGeoTiledMapRequestPrivate::operator= (const QGeoTiledMapRequestPrivate & other) -{ -// mapData = other.mapData; - connectivityMode = other.connectivityMode; - mapType = other.mapType; - zoomLevel = other.zoomLevel; - row = other.row; - column = other.column; - tileRect = other.tileRect; - - return *this; -} - -QT_END_NAMESPACE - diff --git a/src/location/maps/tiled/qgeotiledmaprequest.h b/src/location/maps/tiled/qgeotiledmaprequest.h deleted file mode 100644 index bf00f4fb..00000000 --- a/src/location/maps/tiled/qgeotiledmaprequest.h +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPREQUEST_H -#define QGEOTILEDMAPREQUEST_H - -#include "qgraphicsgeomap.h" - -#include <QRect> -#include <QExplicitlySharedDataPointer> - -QT_BEGIN_NAMESPACE - -class QGeoTiledMapData; -class QGeoTiledMapRequestPrivate; - -class Q_LOCATION_EXPORT QGeoTiledMapRequest -{ -public: - QGeoTiledMapRequest(); - QGeoTiledMapRequest(QGraphicsGeoMap::ConnectivityMode connectivityMode, - QGraphicsGeoMap::MapType mapType, - qreal zoomLevel, - int row, - int column, - const QRect &tileRect); - QGeoTiledMapRequest(const QGeoTiledMapRequest &other); - ~QGeoTiledMapRequest(); - - QGeoTiledMapRequest& operator= (const QGeoTiledMapRequest &other); - - bool operator== (const QGeoTiledMapRequest &other) const; - - //QGeoTiledMapData *mapData() const; - - QGraphicsGeoMap::ConnectivityMode connectivityMode() const; - QGraphicsGeoMap::MapType mapType() const; - int zoomLevel() const; - - int row() const; - int column() const; - QRect tileRect() const; - -private: - QExplicitlySharedDataPointer<QGeoTiledMapRequestPrivate> d_ptr; -}; - -Q_LOCATION_EXPORT uint qHash(const QGeoTiledMapRequest &key); - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/tiled/qgeotiledmaprequest_p.h b/src/location/maps/tiled/qgeotiledmaprequest_p.h deleted file mode 100644 index 5c0a474a..00000000 --- a/src/location/maps/tiled/qgeotiledmaprequest_p.h +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGEOTILEDMAPREQUEST_P_H -#define QGEOTILEDMAPREQUEST_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgraphicsgeomap.h" - -#include <QSharedData> - -QT_BEGIN_NAMESPACE - -//class QGeoTiledMapData; - -class QGeoTiledMapRequestPrivate : public QSharedData -{ -public: - QGeoTiledMapRequestPrivate(); - QGeoTiledMapRequestPrivate(const QGeoTiledMapRequestPrivate &other); - ~QGeoTiledMapRequestPrivate(); - - QGeoTiledMapRequestPrivate& operator= (const QGeoTiledMapRequestPrivate &other); - - //QGeoTiledMapData *mapData; - QGraphicsGeoMap::ConnectivityMode connectivityMode; - QGraphicsGeoMap::MapType mapType; - int zoomLevel; - int row; - int column; - QRect tileRect; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp deleted file mode 100644 index 4b14647f..00000000 --- a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmaprouteobjectinfo_p.h" - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomaprouteobject.h" - -#include "qgeoroutesegment.h" - -#include <QPointF> - -QT_BEGIN_NAMESPACE - -QGeoTiledMapRouteObjectInfo::QGeoTiledMapRouteObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - route = static_cast<QGeoMapRouteObject*>(mapObject); - - connect(route, - SIGNAL(routeChanged(QGeoRoute)), - this, - SLOT(routeChanged(QGeoRoute))); - connect(route, - SIGNAL(penChanged(QPen)), - this, - SLOT(penChanged(QPen))); - connect(route, - SIGNAL(detailLevelChanged(quint32)), - this, - SLOT(detailLevelChanged(quint32))); - - pathItem = new QGraphicsPathItem(); - graphicsItem = pathItem; - - routeChanged(route->route()); - penChanged(route->pen()); - routeChanged(route->route()); -} - -QGeoTiledMapRouteObjectInfo::~QGeoTiledMapRouteObjectInfo() {} - -void QGeoTiledMapRouteObjectInfo::routeChanged(const QGeoRoute &/*route*/) -{ - regenPath(); - updateItem(); -} - -void QGeoTiledMapRouteObjectInfo::penChanged(const QPen &/*pen*/) -{ - pathItem->setPen(route->pen()); - updateItem(); -} - -void QGeoTiledMapRouteObjectInfo::detailLevelChanged(quint32 /*detailLevel*/) -{ - updateItem(); -} - -void QGeoTiledMapRouteObjectInfo::regenPath() -{ - QList<QGeoCoordinate> path; - - QGeoRouteSegment segment = route->route().firstRouteSegment(); - while (segment.isValid()) { - path.append(segment.path()); - segment = segment.nextRouteSegment(); - } - - QPainterPath pth; - - if (path.size() > 0) { - double oldx = 0.0; - - for (int i = 0; i < path.size(); ++i) { - double x = path.at(i).longitude() * 3600.0; - double y = path.at(i).latitude() * 3600.0; - if (i == 0) { - pth.moveTo(x, y); - } else { - if (qAbs(x - oldx) > 180.0 * 3600.0) { - if (x > oldx) { - x -= 360.0 * 3600.0; - } else if (x < oldx) { - x += 360.0 * 3600.0; - } - } - - pth.lineTo(x, y); - } - - oldx = x; - } - } - - pathItem->setPath(pth); -} - -#include "moc_qgeotiledmaprouteobjectinfo_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp deleted file mode 100644 index 576eff82..00000000 --- a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgeotiledmaptextobjectinfo_p.h" - -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomaptextobject.h" - -#include <QFontMetrics> - -QT_BEGIN_NAMESPACE - -QGeoTiledMapTextObjectInfo::QGeoTiledMapTextObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - text = static_cast<QGeoMapTextObject*>(mapObject); - - connect(text, - SIGNAL(textChanged(QString)), - this, - SLOT(textChanged(QString))); - connect(text, - SIGNAL(fontChanged(QFont)), - this, - SLOT(fontChanged(QFont))); - connect(text, - SIGNAL(penChanged(QPen)), - this, - SLOT(penChanged(QPen))); - connect(text, - SIGNAL(brushChanged(QBrush)), - this, - SLOT(brushChanged(QBrush))); - connect(text, - SIGNAL(offsetChanged(QPoint)), - this, - SLOT(offsetChanged(QPoint))); - connect(text, - SIGNAL(alignmentChanged(Qt::Alignment)), - this, - SLOT(alignmentChanged(Qt::Alignment))); - - textItem = new QGraphicsSimpleTextItem(); - graphicsItem = textItem; - - penChanged(text->pen()); - brushChanged(text->brush()); - originChanged(text->origin()); - fontChanged(text->font()); - textChanged(text->text()); -} - -QGeoTiledMapTextObjectInfo::~QGeoTiledMapTextObjectInfo() {} - -void QGeoTiledMapTextObjectInfo::textChanged(const QString &/*text*/) -{ - textItem->setText(text->text()); - doAlignment(); - updateItem(); -} - -void QGeoTiledMapTextObjectInfo::fontChanged(const QFont &/*font*/) -{ - textItem->setFont(text->font()); - doAlignment(); - updateItem(); -} - -void QGeoTiledMapTextObjectInfo::offsetChanged(const QPoint &/*offset*/) -{ - doAlignment(); - updateItem(); -} - -void QGeoTiledMapTextObjectInfo::alignmentChanged(Qt::Alignment /*alignment*/) -{ - doAlignment(); - updateItem(); -} - -void QGeoTiledMapTextObjectInfo::penChanged(const QPen &/*pen*/) -{ - textItem->setPen(text->pen()); - doAlignment(); - updateItem(); -} - -void QGeoTiledMapTextObjectInfo::brushChanged(const QBrush &/*brush*/) -{ - if (textItem) { - textItem->setBrush(text->brush()); - doAlignment(); - updateItem(); - } -} - -void QGeoTiledMapTextObjectInfo::doAlignment() -{ - Qt::Alignment align = text->alignment(); - QTransform trans; - textItem->setTransform(trans); - - QRectF rect = textItem->boundingRect(); - QPointF center = rect.center(); - - if (align & Qt::AlignVCenter) { - trans.translate(0, -1 * center.y()); - } else if (align & Qt::AlignTop) { - trans.translate(0, -1 * rect.top()); - } else if (align & Qt::AlignBottom) { - trans.translate(0, -1 * rect.bottom()); - } - if (align & Qt::AlignHCenter) { - trans.translate(-1 * center.x(), 0); - } else if (align & Qt::AlignLeft) { - trans.translate(-1 * rect.left(), 0); - } else if (align & Qt::AlignRight) { - trans.translate(-1 * rect.right(), 0); - } - - QPoint offset = text->offset(); - trans.translate(offset.x(), offset.y()); - textItem->setTransform(trans); -} - -#include "moc_qgeotiledmaptextobjectinfo_p.cpp" - -QT_END_NAMESPACE - diff --git a/src/location/maps/tiled/tiled.pri b/src/location/maps/tiled/tiled.pri deleted file mode 100644 index c6a2c108..00000000 --- a/src/location/maps/tiled/tiled.pri +++ /dev/null @@ -1,40 +0,0 @@ - -INCLUDEPATH += maps/tiled - -PUBLIC_HEADERS += \ - maps/tiled/qgeotiledmapdata.h \ - maps/tiled/qgeotiledmappingmanagerengine.h \ - maps/tiled/qgeotiledmapreply.h \ - maps/tiled/qgeotiledmaprequest.h - -PRIVATE_HEADERS += \ - maps/tiled/qgeotiledmapdata_p.h \ - maps/tiled/qgeotiledmapobjectinfo_p.h \ - maps/tiled/qgeotiledmapcircleobjectinfo_p.h \ - maps/tiled/qgeotiledmapcustomobjectinfo_p.h \ - maps/tiled/qgeotiledmapgroupobjectinfo_p.h \ - maps/tiled/qgeotiledmappixmapobjectinfo_p.h \ - maps/tiled/qgeotiledmappolygonobjectinfo_p.h \ - maps/tiled/qgeotiledmappolylineobjectinfo_p.h \ - maps/tiled/qgeotiledmaprectangleobjectinfo_p.h \ - maps/tiled/qgeotiledmaprouteobjectinfo_p.h \ - maps/tiled/qgeotiledmaptextobjectinfo_p.h \ - maps/tiled/qgeotiledmappingmanagerengine_p.h \ - maps/tiled/qgeotiledmapreply_p.h \ - maps/tiled/qgeotiledmaprequest_p.h - -SOURCES += \ - maps/tiled/qgeotiledmapdata.cpp \ - maps/tiled/qgeotiledmapobjectinfo_p.cpp \ - maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp \ - maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp \ - maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp \ - maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp \ - maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp \ - maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp \ - maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp \ - maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp \ - maps/tiled/qgeotiledmaptextobjectinfo_p.cpp \ - maps/tiled/qgeotiledmappingmanagerengine.cpp \ - maps/tiled/qgeotiledmapreply.cpp \ - maps/tiled/qgeotiledmaprequest.cpp diff --git a/src/location/mapsgl/cameradata.cpp b/src/location/mapsgl/cameradata.cpp new file mode 100644 index 00000000..4d522b68 --- /dev/null +++ b/src/location/mapsgl/cameradata.cpp @@ -0,0 +1,290 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "cameradata.h" + +#include "projection_p.h" + +#include <QVariant> +#include <QVariantAnimation> + +#include <QMetaType> + +#include <QWeakPointer> + +#include <cmath> + + +class CameraDataPrivate : public QSharedData +{ +public: + CameraDataPrivate(); + CameraDataPrivate(const CameraDataPrivate &rhs); + + CameraDataPrivate& operator = (const CameraDataPrivate &rhs); + + bool operator == (const CameraDataPrivate &rhs) const; + + QGeoCoordinate center_; + double distance_; + double bearing_; + double tilt_; + double roll_; + double aspectRatio_; + int zoomLevel_; + double zoomFactor_; + + QWeakPointer<Projection> projection_; +}; + +CameraDataPrivate::CameraDataPrivate() + : QSharedData(), + center_(-27.5, 153), + distance_(0.02), + bearing_(0.0), + tilt_(0.0), + roll_(0.0), + aspectRatio_(1.0), + zoomLevel_(9) {} + +CameraDataPrivate::CameraDataPrivate(const CameraDataPrivate &rhs) + : QSharedData(rhs), + center_(rhs.center_), + distance_(rhs.distance_), + bearing_(rhs.bearing_), + tilt_(rhs.tilt_), + roll_(rhs.roll_), + aspectRatio_(rhs.aspectRatio_), + zoomLevel_(rhs.zoomLevel_), + zoomFactor_(rhs.zoomFactor_), + projection_(rhs.projection_) {} + +CameraDataPrivate& CameraDataPrivate::operator = (const CameraDataPrivate &rhs) +{ + center_ = rhs.center_; + distance_ = rhs.distance_; + bearing_ = rhs.bearing_; + tilt_ = rhs.tilt_; + roll_ = rhs.roll_; + aspectRatio_ = rhs.aspectRatio_; + zoomLevel_ = rhs.zoomLevel_; + zoomFactor_ = rhs.zoomFactor_; + QSharedPointer<Projection> p = rhs.projection_.toStrongRef(); + if (p) + projection_ = p.toWeakRef(); + else + projection_.clear(); + + return *this; +} + +bool CameraDataPrivate::operator == (const CameraDataPrivate &rhs) const +{ + return ((center_ == rhs.center_) + && (distance_ == rhs.distance_) + && (bearing_ == rhs.bearing_) + && (tilt_ == rhs.tilt_) + && (roll_ == rhs.roll_) + && (aspectRatio_ == rhs.aspectRatio_) + && (zoomLevel_ == rhs.zoomLevel_) + && (zoomFactor_ == rhs.zoomFactor_)); +} + +QVariant cameraInterpolator(const CameraData &start, + const CameraData &end, + qreal progress) +{ + CameraData result = start; + + + QSharedPointer<Projection> p = start.projection(); + if (!p) + p = end.projection(); + + if (!p) + result.setCenter(start.center()); + else + result.setCenter(p->interpolate(start.center(), end.center(), progress)); + + double sf = 1.0 - progress; + double ef = progress; + + result.setBearing(sf * start.bearing() + ef * end.bearing()); + result.setTilt(sf * start.tilt() + ef * end.tilt()); + result.setRoll(sf * start.roll() + ef * end.roll()); + result.setZoomFactor(sf * start.zoomFactor() + ef * end.zoomFactor()); + + return QVariant::fromValue(result); +} + +CameraData::CameraData() + : d(new CameraDataPrivate()) +{ + qRegisterMetaType<CameraData>(); + qRegisterAnimationInterpolator<CameraData>(cameraInterpolator); + setZoomFactor(4.0); +} + +CameraData::CameraData(const CameraData &other) + : d(other.d) {} + +CameraData::~CameraData() +{ +} + +CameraData& CameraData::operator = (const CameraData &other) +{ + d = other.d; + return *this; +} + +bool CameraData::operator == (const CameraData &rhs) const +{ + return (*(d.constData()) == *(rhs.d.constData())); +} + +bool CameraData::operator != (const CameraData &other) const +{ + return !(operator==(other)); +} + +void CameraData::setCenter(const QGeoCoordinate ¢er) +{ + d->center_ = center; +} + +QGeoCoordinate CameraData::center() const +{ + return d->center_; +} + +void CameraData::setBearing(double bearing) +{ + d->bearing_ = bearing; +} + +double CameraData::bearing() const +{ + return d->bearing_; +} + +void CameraData::setTilt(double tilt) +{ + d->tilt_ = tilt; +} + +double CameraData::tilt() const +{ + return d->tilt_; +} + +void CameraData::setRoll(double roll) +{ + d->roll_ = roll; +} + +double CameraData::roll() const +{ + return d->roll_; +} + +void CameraData::setAspectRatio(double aspectRatio) +{ + d->aspectRatio_ = aspectRatio; +} + +double CameraData::aspectRatio() const +{ + return d->aspectRatio_; +} + +/* + Distance and zoomLevel are only writeable for debugging purposes. + The setters will eventually go away and then zoomFactor will be + the way to set these. +*/ + +void CameraData::setDistance(double distance) +{ + d->zoomFactor_ = -1.0 * log(distance) / log(2.0); + d->distance_ = distance; +} + +double CameraData::distance() const +{ + return d->distance_; +} + +void CameraData::setZoomLevel(int zoomLevel) +{ + d->zoomLevel_ = zoomLevel; +} + +int CameraData::zoomLevel() const +{ + return d->zoomLevel_; +} + +void CameraData::setZoomFactor(double zoomFactor) +{ + d->zoomLevel_ = floor(zoomFactor); +// qDebug() << __FUNCTION__ << zoomFactor << d->zoomLevel_; + + // FIXME this will need some tuning + + d->distance_ = 1.0 / pow(2.0, zoomFactor); + + d->zoomFactor_ = zoomFactor; +} + +double CameraData::zoomFactor() const +{ + return d->zoomFactor_; +} + +void CameraData::setProjection(QSharedPointer<Projection> projection) +{ + d->projection_ = projection.toWeakRef(); +} + +QSharedPointer<Projection> CameraData::projection() const +{ + return d->projection_.toStrongRef(); +} diff --git a/src/location/maps/qgeomapcustomobject.h b/src/location/mapsgl/cameradata.h index a79e5b89..27bcd550 100644 --- a/src/location/maps/qgeomapcustomobject.h +++ b/src/location/mapsgl/cameradata.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,57 +38,68 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#ifndef CAMERADATA_H +#define CAMERADATA_H -#ifndef QGEOMAPCUSTOMOBJECT_H -#define QGEOMAPCUSTOMOBJECT_H +#include "qmobilityglobal.h" -#include "qgeomapobject.h" #include "qgeocoordinate.h" -#include <QPoint> +#include <QMetaType> -#include <QGraphicsItem> +#include <QSharedPointer> +#include <QSharedDataPointer> QT_BEGIN_NAMESPACE -class QGeoMapCustomObjectPrivate; +class Projection; +class CameraDataPrivate; -class Q_LOCATION_EXPORT QGeoMapCustomObject : public QGeoMapObject +class Q_LOCATION_EXPORT CameraData { - Q_OBJECT - Q_PROPERTY(QGraphicsItem* graphicsItem READ graphicsItem WRITE setGraphicsItem NOTIFY graphicsItemChanged) - Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged) - public: - QGeoMapCustomObject(); - QGeoMapCustomObject(const QGeoCoordinate &coordinate, const QPoint &offset = QPoint(0, 0)); - ~QGeoMapCustomObject(); + CameraData(); + CameraData(const CameraData &other); + ~CameraData(); + + CameraData& operator = (const CameraData &other); + + bool operator == (const CameraData &other) const; + bool operator != (const CameraData &other) const; + + void setCenter(const QGeoCoordinate &coordinate); + QGeoCoordinate center() const; - QGeoMapObject::Type type() const; + void setBearing(double bearing); + double bearing() const; - void update(); + void setTilt(double tilt); + double tilt() const; - QGraphicsItem* graphicsItem() const; - void setGraphicsItem(QGraphicsItem *graphicsItem); + void setRoll(double roll); + double roll() const; - QPoint offset() const; - void setOffset(const QPoint &offset); + void setAspectRatio(double aspectRatio); + double aspectRatio() const; - void setOrigin(const QGeoCoordinate &origin); - void setUnits(const CoordinateUnit &unit); - void setTransformType(const TransformType &type); + void setDistance(double distance); + double distance() const; -Q_SIGNALS: - void triggerUpdate(); - void graphicsItemChanged(QGraphicsItem *graphicsItem); - void offsetChanged(const QPoint &offset); + void setZoomLevel(int zoomLevel); + int zoomLevel() const; + + void setZoomFactor(double zoomFactor); + double zoomFactor() const; + + void setProjection(QSharedPointer<Projection> projection); + QSharedPointer<Projection> projection() const; private: - QGeoMapCustomObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapCustomObject) - Q_DISABLE_COPY(QGeoMapCustomObject) + QSharedDataPointer<CameraDataPrivate> d; }; +Q_DECLARE_METATYPE(CameraData) + QT_END_NAMESPACE -#endif +#endif // CAMERADATA_H diff --git a/src/location/mapsgl/frustum.cpp b/src/location/mapsgl/frustum.cpp new file mode 100644 index 00000000..2b4bd27d --- /dev/null +++ b/src/location/mapsgl/frustum.cpp @@ -0,0 +1,206 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "frustum_p.h" + +#include "viewportcamera_p.h" + +#include <Qt3D/qglcamera.h> + +#include <cmath> + +Frustum::Frustum() {} + +void Frustum::update(const QGLCamera *camera, double aspectRatio, bool updatePlanes) +{ + if (aspectRatio > 1.0) { + double fov = atan2(camera->viewSize().height() , (2 * camera->nearPlane())); + + hn_ = 2 * tan(fov) * camera->nearPlane(); + wn_ = hn_ * aspectRatio; + + hf_ = 2 * tan(fov) * camera->farPlane(); + wf_ = hf_ * aspectRatio; + } else { + double fov = atan2(camera->viewSize().width() , (2 * camera->nearPlane())); + + wn_ = 2 * tan(fov) * camera->nearPlane(); + hn_ = wn_ / aspectRatio; + + wf_ = 2 * tan(fov) * camera->farPlane(); + hf_ = wf_ / aspectRatio; + } + + QVector3D p = camera->eye(); + QVector3D d = camera->center() - camera->eye(); + d.normalize(); + + QVector3D up = camera->upVector(); + up.normalize(); + + QVector3D right = QVector3D::normal(d, up); + + cf_ = p + d * camera->farPlane(); + tlf_ = cf_ + (up * hf_ / 2) - (right * wf_ / 2); + trf_ = cf_ + (up * hf_ / 2) + (right * wf_ / 2); + blf_ = cf_ - (up * hf_ / 2) - (right * wf_ / 2); + brf_ = cf_ - (up * hf_ / 2) + (right * wf_ / 2); + + cn_ = p + d * camera->nearPlane(); + tln_ = cn_ + (up * hn_ / 2) - (right * wn_ / 2); + trn_ = cn_ + (up * hn_ / 2) + (right * wn_ / 2); + bln_ = cn_ - (up * hn_ / 2) - (right * wn_ / 2); + brn_ = cn_ - (up * hn_ / 2) + (right * wn_ / 2); + + if (!updatePlanes) + return; + + QPlane3D pn = QPlane3D(bln_, tln_, brn_); + pn.setNormal(pn.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Near), pn); + + QPlane3D pf = QPlane3D(blf_, brf_, tlf_); + pf.setNormal(pf.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Far), pf); + + QPlane3D pl = QPlane3D(blf_, tlf_, bln_); + pl.setNormal(pl.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Left), pl); + + QPlane3D pr = QPlane3D(brf_, brn_, trf_); + pr.setNormal(pr.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Right), pr); + + QPlane3D pt = QPlane3D(tlf_, trf_, tln_); + pt.setNormal(pt.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Top), pt); + + QPlane3D pb = QPlane3D(blf_, bln_, brf_); + pb.setNormal(pb.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Bottom), pb); +} + +void Frustum::update(const ViewportCamera &camera) +{ + if (camera.aspectRatio() > 1.0) { + double fov = atan2(camera.viewSize().height() , (2 * camera.nearPlane())); + + hn_ = 2 * tan(fov) * camera.nearPlane(); + wn_ = hn_ * camera.aspectRatio(); + + hf_ = 2 * tan(fov) * camera.farPlane(); + wf_ = hf_ * camera.aspectRatio(); + } else { + double fov = atan2(camera.viewSize().width() , (2 * camera.nearPlane())); + + wn_ = 2 * tan(fov) * camera.nearPlane(); + hn_ = wn_ / camera.aspectRatio(); + + wf_ = 2 * tan(fov) * camera.farPlane(); + hf_ = wf_ / camera.aspectRatio(); + } + + QVector3D p = camera.eye(); + QVector3D d = camera.center() - camera.eye(); + d.normalize(); + + QVector3D up = camera.up(); + up.normalize(); + + QVector3D right = QVector3D::normal(d, up); + + cf_ = p + d * camera.farPlane(); + tlf_ = cf_ + (up * hf_ / 2) - (right * wf_ / 2); + trf_ = cf_ + (up * hf_ / 2) + (right * wf_ / 2); + blf_ = cf_ - (up * hf_ / 2) - (right * wf_ / 2); + brf_ = cf_ - (up * hf_ / 2) + (right * wf_ / 2); + + cn_ = p + d * camera.nearPlane(); + tln_ = cn_ + (up * hn_ / 2) - (right * wn_ / 2); + trn_ = cn_ + (up * hn_ / 2) + (right * wn_ / 2); + bln_ = cn_ - (up * hn_ / 2) - (right * wn_ / 2); + brn_ = cn_ - (up * hn_ / 2) + (right * wn_ / 2); + + QPlane3D pn = QPlane3D(bln_, tln_, brn_); + pn.setNormal(pn.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Near), pn); + + QPlane3D pf = QPlane3D(blf_, brf_, tlf_); + pf.setNormal(pf.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Far), pf); + + QPlane3D pl = QPlane3D(blf_, tlf_, bln_); + pl.setNormal(pl.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Left), pl); + + QPlane3D pr = QPlane3D(brf_, brn_, trf_); + pr.setNormal(pr.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Right), pr); + + QPlane3D pt = QPlane3D(tlf_, trf_, tln_); + pt.setNormal(pt.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Top), pt); + + QPlane3D pb = QPlane3D(blf_, bln_, brf_); + pb.setNormal(pb.normal().normalized()); + planeHash_.insert(Frustum::Planes(Frustum::Bottom), pb); +} + +bool Frustum::contains(const QVector3D ¢er, double radius) const +{ + if (planeHash_.isEmpty()) + return false; + + QHash<Frustum::Planes, QPlane3D>::const_iterator i = planeHash_.constBegin(); + QHash<Frustum::Planes, QPlane3D>::const_iterator end = planeHash_.constEnd(); + + while (i != end) { + if (i.value().distanceTo(center) < -1.0 * radius) + return false; + ++i; + } + + return true; +} + +QPlane3D Frustum::plane(Planes planes) const +{ + return planeHash_.value(planes); +} diff --git a/src/location/mapsgl/frustum_p.h b/src/location/mapsgl/frustum_p.h new file mode 100644 index 00000000..5341c360 --- /dev/null +++ b/src/location/mapsgl/frustum_p.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef TILEFRUSTUM_H +#define TILEFRUSTUM_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qmobilityglobal.h" + +#include <QVector3D> +#include <QHash> + +#include <Qt3D/qplane3d.h> + +class ViewportCamera; + +class QGLCamera; + +class Q_AUTOTEST_EXPORT Frustum +{ +public: + enum Plane { + Near = 0x001, + Far = 0x002, + Right = 0x004, + Left = 0x008, + Top = 0x010, + Bottom = 0x020, + TopLeftNear = Top | Left | Near, + TopLeftFar = Top | Left | Far, + TopRightNear = Top | Right | Near, + TopRightFar = Top | Right | Far, + BottomLeftNear = Bottom | Left | Near, + BottomLeftFar = Bottom | Left | Far, + BottomRightNear = Bottom | Right | Near, + BottomRightFar = Bottom | Right | Far + }; + + Q_DECLARE_FLAGS(Planes, Plane) + + Frustum(); + + void update(const ViewportCamera &camera); + + void update(const QGLCamera *camera, double aspectRatio, bool updatePlanes = false); + + bool contains(const QVector3D ¢er, double radius) const; + + QVector3D topLeftNear() const { + return tln_; + } + QVector3D topLeftFar() const { + return tlf_; + } + QVector3D bottomLeftNear() const { + return bln_; + } + QVector3D bottomLeftFar() const { + return blf_; + } + QVector3D topRightNear() const { + return trn_; + } + QVector3D topRightFar() const { + return trf_; + } + QVector3D bottomRightNear() const { + return brn_; + } + QVector3D bottomRightFar() const { + return brf_; + } + + QPlane3D plane(Planes planes) const; + +private: + double hf_; + double wf_; + QVector3D cf_; + QVector3D tlf_; + QVector3D trf_; + QVector3D blf_; + QVector3D brf_; + + double hn_; + double wn_; + QVector3D cn_; + QVector3D tln_; + QVector3D trn_; + QVector3D bln_; + QVector3D brn_; + + QHash<Planes, QPlane3D> planeHash_; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(Frustum::Planes) + +#endif // TILEFRUSTUM_H diff --git a/src/location/mapsgl/map.cpp b/src/location/mapsgl/map.cpp new file mode 100644 index 00000000..a61bcead --- /dev/null +++ b/src/location/mapsgl/map.cpp @@ -0,0 +1,402 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "map.h" +#include "map_p.h" +#include "map2d_p.h" +#include "map3d_p.h" + +#include "tilecache.h" +#include "mapsphere_p.h" +#include "projection_p.h" +#include "tile.h" +#include "mapitem.h" + +#include <QMutex> +#include <QMap> + +#include <qglscenenode.h> +#include <qgeometrydata.h> +#include <qglbuilder.h> +#include <Qt3D/qglpainter.h> +#include <Qt3D/qglcamera.h> + +#include <cmath> + +Map::Map(TileCache *cache, QObject *parent) + : QObject(parent), + autoUpdate_(true) +{ +// d_ptr = new Map3DPrivate(this, cache, 20000.0); + + // edge is 2^max zoom * 4 + d_ptr = new Map2DPrivate(this, cache, 20, 256); +} + +Map::~Map() +{ + delete d_ptr; +} + +void Map::setMappingManager(QGeoMappingManager *manager) +{ + d_ptr->setMappingManager(manager); +} + +void Map::paintGL(QGLPainter *painter) +{ + d_ptr->paintGL(painter); +} + +QGLCamera* Map::glCamera() const +{ + return d_ptr->glCamera(); +} + +void Map::resize(int width, int height) +{ + d_ptr->resize(width, height); +} + +void Map::setAutoUpdate(bool autoUpdate) +{ + autoUpdate_ = autoUpdate; +} + +bool Map::autoUpdate() const +{ + return autoUpdate_; +} + +void Map::clearCache() +{ +// sphere_->clearCache(); +} + +void Map::setCameraData(const CameraData &cameraData) +{ + if (cameraData == d_ptr->cameraData()) + return; + + d_ptr->setCameraData(cameraData); + + if (autoUpdate_) + update(); + + emit cameraDataChanged(d_ptr->cameraData()); +} + +CameraData Map::cameraData() const +{ + return d_ptr->cameraData(); +} + +void Map::update() +{ + d_ptr->update(); + emit updateRequired(); +} + +int Map::numMapItems() const +{ + return d_ptr->numMapItems(); +} + +MapItem* Map::mapItem(int index) const +{ + return d_ptr->mapItem(index); +} + +QList<MapItem*> Map::mapItems() const +{ + return d_ptr->mapItems(); +} + +void Map::addMapItem(MapItem *item) +{ + d_ptr->addMapItem(item); +} + +void Map::removeMapItem(MapItem *item) +{ + d_ptr->removeMapItem(item); +} + +void Map::clearMapItems() +{ + d_ptr->clearMapItems(); +} + +QGeoCoordinate Map::screenPositionToCoordinate(const QPointF &pos) const +{ + return d_ptr->screenPositionToCoordinate(pos); +} + +QPointF Map::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const +{ + return d_ptr->coordinateToScreenPosition(coordinate); +} + +//------------------------------------------------------------// + +MapPrivate::MapPrivate(Map *parent, TileCache *cache) + : manager_(0) +{ + sphere_ = new MapSphere(parent, this, cache); + mapSceneNode_ = new QGLSceneNode(); + mapSceneNode_->addNode(sphere_->sphereSceneNode()); + objectSceneNode_ = new QGLSceneNode(); + glCamera_ = new QGLCamera(); +} + +MapPrivate::~MapPrivate() +{ + delete sphere_; + delete mapSceneNode_; + delete objectSceneNode_; + delete glCamera_; + // TODO map items are not deallocated! + // However: how to ensure this is done in rendering thread? +} + +void MapPrivate::setMappingManager(QGeoMappingManager *manager) +{ + manager_ = manager; + sphere_->setMappingManager(manager_); +} + +QGeoMappingManager* MapPrivate::manager() const +{ + return manager_; +} + +QGLCamera* MapPrivate::glCamera() const +{ + return glCamera_; +} + +void MapPrivate::setProjection(const QSharedPointer<Projection> &projection) +{ + projection_ = projection; +} + +QSharedPointer<Projection> MapPrivate::projection() const +{ + return projection_; +} + +void MapPrivate::setCameraData(const CameraData &cameraData) +{ + cameraData_ = cameraData; + cameraData_.setAspectRatio(aspectRatio_); + cameraData_.setProjection(projection_.toWeakRef()); + updateGlCamera(glCamera_); + updateFrustum(frustum_); + visibleTiles_ = updateVisibleTiles(); + sphere_->update(visibleTiles_); +} + +CameraData MapPrivate::cameraData() const +{ + return cameraData_; +} + +void MapPrivate::update() +{ + sphere_->update(visibleTiles_); +} + +void MapPrivate::resize(int width, int height) +{ + width_ = width; + height_ = height; + aspectRatio_ = 1.0 * width_ / height_; + setCameraData(cameraData_); +} + +Frustum MapPrivate::frustum() const +{ + return frustum_; +} + +void MapPrivate::paintGL(QGLPainter *painter) +{ + if (!sphere_->updateMutex.tryLock()) { + qDebug() << "map will miss a frame, no mutex acquired!------"; + return; + } + + sphere_->GLContextAvailable(); + GLContextAvailable(); + + mapSceneNode_->draw(painter); + + glDisable(GL_DEPTH_TEST); + objectSceneNode_->draw(painter); + glEnable(GL_DEPTH_TEST); + + sphere_->updateMutex.unlock(); +} + +int MapPrivate::numMapItems() const +{ + return mapItems_.length(); +} + +MapItem* MapPrivate::mapItem(int index) const +{ + return mapItems_.at(index); +} + +QList<MapItem*> MapPrivate::mapItems() const +{ + return mapItems_; +} + +void MapPrivate::addMapItem(MapItem *item) +{ + // TODO bit hard block - on declarative side the coordinate may well be invalid time to time + if (!item->coordinate().isValid()) + return; + sphere_->updateMutex.lock(); + updateMapItemSceneNode(item); + if (item->sceneNode()) { + objectSceneNode_->addNode(item->sceneNode()); + } + mapItems_.append(item); + sphere_->updateMutex.unlock(); +} + +// Function is guaranteed to be only called when executing in +// rendering thread with valid GL context. Furthermore it is +// safe to update any geometry/structures - mutex is locked. +void MapPrivate::GLContextAvailable() +{ + // remove obsolete items + QSet<MapItem *>::const_iterator i = obsoleteItems_.constBegin(); + while (i != obsoleteItems_.constEnd()) { + QGLSceneNode *node = (*i)->sceneNode(); + if (node) { + //sceneNode_->removeNode(node); must be removed in GUI thread, not in rendering thread + delete node; + } + mapItems_.removeAll(*i); + ++i; + } + if (!obsoleteItems_.isEmpty()) + obsoleteItems_.clear(); +} + +// Must not be called from rendering thread +void MapPrivate::removeMapItem(MapItem *item) +{ + sphere_->updateMutex.lock(); + // nodes need to be removed from the scene node tree in GUI thread, + // but the deletion needs to occur in rendering thread + if (item->sceneNode()) + objectSceneNode_->removeNode(item->sceneNode()); + if (!obsoleteItems_.contains(item)) + obsoleteItems_.insert(item); + sphere_->updateMutex.unlock(); +} + +void MapPrivate::clearMapItems() +{ + sphere_->updateMutex.lock(); + for (int i = 0; i < mapItems_.size(); ++i) { + if (!obsoleteItems_.contains(mapItems_.at(i))) { + if (mapItems_.at(i)->sceneNode()) + objectSceneNode_->removeNode(mapItems_.at(i)->sceneNode()); + obsoleteItems_.insert(mapItems_.at(i)); + } + } + sphere_->updateMutex.unlock(); +} + +QVector2D MapPrivate::pointToTile(const QVector3D &point, int zoom, bool roundUp) const +{ + QVector2D p = projection_->pointToMercator(point); + + int z = 1 << zoom; + int x = 0; + int y = 0; + + if (p.y() == 1.0) + y = z - 1; + else + y = static_cast<int>(z * p.y()) % z; + + if ((qAbs(p.x()) < 1e-6) || (qAbs(p.x() - 1) < 1e-6)) + if (roundUp) + x = z - 1; + else + x = 0; + else + x = static_cast<int>(z * p.x()) % z; + + return QVector2D(x, y); +} + +QVector3D MapPrivate::tileXIntersectToPoint(int zoomLevel, int x) const +{ + int zpow2 = 1 << zoomLevel; + return projection_->mercatorToPoint(QVector2D(x * 1.0 / zpow2, zpow2 / 2.0)); +} + +QVector3D MapPrivate::tileYIntersectToPoint(int zoomLevel, int y) const +{ + int zpow2 = 1 << zoomLevel; + return projection_->mercatorToPoint(QVector2D(zpow2 / 2.0, y * 1.0 / zpow2)); +} + +int MapPrivate::width() const +{ + return width_; +} + +int MapPrivate::height() const +{ + return height_; +} + +double MapPrivate::aspectRatio() const +{ + return aspectRatio_; +} diff --git a/src/location/maps/qgeomapobjectinfo.h b/src/location/mapsgl/map.h index f9fafa7c..65ad9751 100644 --- a/src/location/maps/qgeomapobjectinfo.h +++ b/src/location/mapsgl/map.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,60 +38,76 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOMAPOBJECTINFO_H -#define QGEOMAPOBJECTINFO_H - -#include "qmobilityglobal.h" -#include "qgeomapobject.h" +#ifndef MAP_H +#define MAP_H #include <QObject> -#include <QSizeF> + +#include "cameradata.h" QT_BEGIN_NAMESPACE class QGeoCoordinate; -class QGeoBoundingBox; -class QGeoMapData; -class QGeoMapObject; -class QGeoMapObjectInfoPrivate; +class QGeoMappingManager; + +class TileCache; +class MapPrivate; +class MapItem; -class Q_LOCATION_EXPORT QGeoMapObjectInfo : public QObject +class QGLCamera; +class QGLPainter; + +class QPointF; + +class Q_LOCATION_EXPORT Map : public QObject { Q_OBJECT + + Q_PROPERTY(CameraData camera READ cameraData WRITE setCameraData NOTIFY cameraDataChanged) + public: - QGeoMapObjectInfo(QGeoMapData *mapData, QGeoMapObject *mapObject); - virtual ~QGeoMapObjectInfo(); + Map(TileCache *cache, QObject *parent = 0); + virtual ~Map(); - virtual void init(); + void setMappingManager(QGeoMappingManager *manager); - virtual QGeoBoundingBox boundingBox() const; - virtual bool contains(const QGeoCoordinate &coordinate) const; + QGLCamera* glCamera() const; + void paintGL(QGLPainter *painter); -public slots: - virtual void windowSizeChanged(const QSizeF &windowSize); - virtual void zoomLevelChanged(qreal zoomLevel); - virtual void centerChanged(const QGeoCoordinate &coordinate); + void resize(int width, int height); - virtual void zValueChanged(int zValue); - virtual void visibleChanged(bool visible); - virtual void selectedChanged(bool selected); + void setAutoUpdate(bool autoUpdate); + bool autoUpdate() const; - virtual void originChanged(const QGeoCoordinate &origin); - virtual void unitsChanged(QGeoMapObject::CoordinateUnit units); - virtual void transformTypeChanged(QGeoMapObject::TransformType transformType); + void setCameraData(const CameraData &cameraData); + CameraData cameraData() const; -protected: - QGeoMapData* mapData(); - QGeoMapObject* mapObject(); - QGeoMapObject* mapObject() const; + int numMapItems() const; + MapItem* mapItem(int index) const; + QList<MapItem*> mapItems() const; + void addMapItem(MapItem *item); + void removeMapItem(MapItem *item); + void clearMapItems(); + + QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const; + QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const; + +public slots: + void clearCache(); + void update(); + +signals: + void updateRequired(); + void updatesFinished(); + void cameraDataChanged(const CameraData &cameraData); private: - QGeoMapObjectInfoPrivate *d_ptr; - Q_DISABLE_COPY(QGeoMapObjectInfo) + MapPrivate *d_ptr; + + bool autoUpdate_; }; QT_END_NAMESPACE -#endif +#endif // MAP_H diff --git a/src/location/mapsgl/map2d/map2d.pri b/src/location/mapsgl/map2d/map2d.pri new file mode 100644 index 00000000..0adaaeb4 --- /dev/null +++ b/src/location/mapsgl/map2d/map2d.pri @@ -0,0 +1,11 @@ + +INCLUDEPATH += mapsgl/map2d + +SOURCES += \ + mapsgl/map2d/projection2d_p.cpp \ + mapsgl/map2d/map2d_p.cpp + +PRIVATE_HEADERS += \ + mapsgl/map2d/projection2d_p.h \ + mapsgl/map2d/map2d_p.h + diff --git a/src/location/mapsgl/map2d/map2d_p.cpp b/src/location/mapsgl/map2d/map2d_p.cpp new file mode 100644 index 00000000..98e7fe0d --- /dev/null +++ b/src/location/mapsgl/map2d/map2d_p.cpp @@ -0,0 +1,660 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "map2d_p.h" +#include "projection2d_p.h" + +#include "tile.h" +#include "mapitem.h" + +#include <Qt3D/qgeometrydata.h> +#include <Qt3D/qglbuilder.h> +#include <Qt3D/qglcamera.h> + +#include <cmath> + +TileMap::TileMap(int minY, int maxY) + : size(0), + minY(minY), + maxY(maxY), + minX(maxY - minY + 1, -1), + maxX(maxY - minY + 1, -1) +{} + +void TileMap::adjust(int tileX, int tileY) +{ + int index = tileY - minY; + int min = minX.at(index); + int max = maxX.at(index); + + if (min == -1) { + min = tileX; + max = tileX; + minX[index] = min; + maxX[index] = max; + size += 1; + } else { + int oldSize = (max - min); + int min2 = qMin(min, tileX); + if (min2 != min) + minX[index] = min2; + int max2 = qMax(max, tileX); + if (max2 != max) + maxX[index] = max2; + int newSize = (max2 - min2); + size += (newSize - oldSize); + } +} + +IntersectGenerator::IntersectGenerator(const MapPrivate *mp, + double p1, + double p2, + int t1, + int t2, + IntersectGenerator::Axis axis, + int zoomLevel) + : mp_(mp), + axis_(axis), + zoomLevel_(zoomLevel) +{ + if (t1 == t2) { + hasNext_ = false; + return; + } + + bool inc = true; + if (axis_ == IntersectGenerator::XAxis) { + inc = (0 < (p2 - p1)); + } else { + inc = (0 < (p1 - p2)); + } + + step_ = 1; + adjust_ = 0; + if (!inc) { + step_ = -1; + adjust_ = -1; + } + + first_ = p1; + denom_ = p2 - p1; + + current_ = t1; + end_ = t2 + step_; + + hasNext_ = true; + + generateValue(); +} + +bool IntersectGenerator::hasNext() const +{ + return hasNext_; +} + +QPair<double, int> IntersectGenerator::value() const +{ + return value_; +} + +void IntersectGenerator::next() +{ + generateValue(); +} + +void IntersectGenerator::generateValue() +{ + while (current_ != end_) { + double alpha = 0.0; + + if (axis_ == IntersectGenerator::XAxis) { + double x = mp_->tileXIntersectToPoint(zoomLevel_, current_).x(); + alpha = (x - first_) / denom_; + } else { + double y = mp_->tileYIntersectToPoint(zoomLevel_, current_).y(); + alpha = (y - first_) / denom_; + } + + if ((0.0 < alpha) && (alpha < 1.0)) { + value_ = QPair<double,int>(alpha, current_ + adjust_); + current_ += step_; + return; + } + current_ += step_; + } + hasNext_ = false; +} + +Map2DPrivate::Map2DPrivate(Map *parent, TileCache *cache, int maxZoom, int tileSize) + : MapPrivate(parent, cache), + maxZoom_(maxZoom), + tileSize_(tileSize), + baseHeight_(100.0) +{ + sideLength_ = pow(2.0, 1.0 * maxZoom_); + + setProjection(QSharedPointer<Projection>(new Projection2D(baseHeight_, sideLength_))); + screenPoly_.resize(4); + screenPoly_[0] = QPointF(0.0, 0.0); + screenPoly_[1] = QPointF(0.0, sideLength_); + screenPoly_[2] = QPointF(sideLength_, sideLength_); + screenPoly_[3] = QPointF(sideLength_, 0.0); + + screenPolyLeft_.resize(4); + screenPolyLeft_[0] = QPointF(0.0, 0.0); + screenPolyLeft_[1] = QPointF(0.0, sideLength_); + screenPolyLeft_[2] = QPointF(sideLength_ / 2.0, sideLength_); + screenPolyLeft_[3] = QPointF(sideLength_ / 2.0, 0.0); + + screenPolyRight_.resize(4); + screenPolyRight_[0] = QPointF(sideLength_ / 2.0, 0.0); + screenPolyRight_[1] = QPointF(sideLength_ / 2.0, sideLength_); + screenPolyRight_[2] = QPointF(sideLength_, sideLength_); + screenPolyRight_[3] = QPointF(sideLength_, 0.0); +} + +Map2DPrivate::~Map2DPrivate() {} + +QGLSceneNode* Map2DPrivate::createTileNode(const Tile &tile) +{ + int geomZoom = tile.tileSpec().zoom(); + int tileZoom = geomZoom; + int x = tile.tileSpec().x(); + int y = tile.tileSpec().y(); + + QGLBuilder builder; + + int z = 1 << geomZoom; + + bool rightEdge = false; + + double x1 = x * 1.0 / z; + double x2 = ((x + 1) % z) * 1.0 / z; + if (x2 == 0.0) { + x2 = 1.0; + rightEdge = true; + } + double y1 = y * 1.0 / z; + double y2 = (y + 1) * 1.0 / z; + + QSharedPointer<Projection> p = projection(); + + QVector3D tl = p->mercatorToPoint(QVector2D(x1, y1)); + QVector3D tr = p->mercatorToPoint(QVector2D(x2, y1)); + QVector3D bl = p->mercatorToPoint(QVector2D(x1, y2)); + QVector3D br = p->mercatorToPoint(QVector2D(x2, y2)); + + if (rightEdge) { + tr.setX(sideLength_); + br.setX(sideLength_); + } + + int dz = 1 << (geomZoom - tileZoom); + + int tx1 = x % dz; + int ty1 = y % dz; + + ty1 = dz - ty1; + + int tx2 = (x + 1) % dz; + if (tx2 == 0) + tx2 = dz; + + int ty2 = (y + 1) % dz; + if (ty2 == 0) + ty2 = dz; + + ty2 = dz - ty2; + + QGeometryData g; + + QVector3D n = QVector3D(0, 0, 1); + + g.appendVertex(tl); + g.appendNormal(n); + g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty1 * 1.0 / dz)); + + g.appendVertex(bl); + g.appendNormal(n); + g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty2 * 1.0 / dz)); + + g.appendVertex(br); + g.appendNormal(n); + g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty2 * 1.0 / dz)); + + g.appendVertex(tr); + g.appendNormal(n); + g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty1 * 1.0 / dz)); + + builder.addQuads(g); + + QGLSceneNode *node = builder.finalizedSceneNode(); + + QGLMaterial *mat = new QGLMaterial(node); +// tile.texture()->bind(); + mat->setTexture(tile.texture()); + node->setEffect(QGL::LitDecalTexture2D); + + node->setMaterial(mat); + + return node; +} + +void Map2DPrivate::updateGlCamera(QGLCamera* glCamera) +{ + bool old = glCamera->blockSignals(true); + + CameraData camera = cameraData(); + + double f = 1.0 * qMin(width(), height()) / tileSize_; + + double altitude = sideLength_ * camera.distance() * f / 2.0; + + QSharedPointer<Projection> p = projection(); + + QGeoCoordinate coord = camera.center(); + coord.setAltitude(0.0); + QVector3D center = p->coordToPoint(coord); + coord.setAltitude(altitude); + QVector3D eye = p->coordToPoint(coord); + + QVector3D view = eye - center; + QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + QVector3D up = QVector3D::normal(side, view); + + QMatrix4x4 mBearing; + mBearing.rotate(-1.0 * camera.bearing(), view); + up = mBearing * up; + + QVector3D side2 = QVector3D::normal(up, view); + QMatrix4x4 mTilt; + mTilt.rotate(camera.tilt(), side2); + eye = (mTilt * view) + center; + + view = eye - center; + side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + up = QVector3D::normal(view, side2); + + QMatrix4x4 mRoll; + mRoll.rotate(camera.roll(), view); + up = mRoll * up; + + double nearPlane = 1.0; + double farPlane = 2.0 * altitude; + + glCamera->setCenter(center); + glCamera->setEye(eye); + glCamera->setUpVector(up); + glCamera->setNearPlane(nearPlane); + glCamera->setFarPlane(farPlane); + + glCamera->blockSignals(old); + + // TODO fold into above code if this works for screen <-> coordinate conversions + viewSize_ = glCamera->viewSize(); + eye_ = eye; + projectionMatrix_ = glCamera->projectionMatrix(aspectRatio()) * glCamera->modelViewMatrix(); +} + +void Map2DPrivate::updateFrustum(Frustum &frustum) +{ + frustum.update(glCamera(), cameraData().aspectRatio()); +} + +QList<TileSpec> Map2DPrivate::updateVisibleTiles() +{ + Frustum f = frustum(); + + QPolygonF poly(4); + + QVector3D tln = f.topLeftNear(); + QVector3D tlf = f.topLeftFar(); + double tl = (tln.z() - baseHeight_) / (tln.z() - tlf.z()); + + poly[0] = ((1 - tl) * tln + tl * tlf).toPointF(); + + QVector3D bln = f.bottomLeftNear(); + QVector3D blf = f.bottomLeftFar(); + double bl = (bln.z() - baseHeight_) / (bln.z() - blf.z()); + + poly[1] = ((1 - bl) * bln + bl * blf).toPointF(); + + QVector3D brn = f.bottomRightNear(); + QVector3D brf = f.bottomRightFar(); + double br = (brn.z() - baseHeight_) / (brn.z() - brf.z()); + + poly[2] = ((1 - br) * brn + br * brf).toPointF(); + + QVector3D trn = f.topRightNear(); + QVector3D trf = f.topRightFar(); + double tr = (trn.z() - baseHeight_) / (trn.z() - trf.z()); + + poly[3] = ((1 - tr) * trn + tr * trf).toPointF(); + + bool widePoly = false; + bool clip = false; + for (int i = 0; i < poly.size(); ++i) { + QPointF p = poly.at(i); + if (p.x() >= sideLength_) { + widePoly = true; + break; + } + if ((p.x() < 0) + || (sideLength_ < p.x()) + || (p.y() < 0) + || (sideLength_ < p.y())) { + clip = true; + } + } + + if (!widePoly) { + if (!clip) { + QVector<QVector3D> points(poly.size()); + + for (int i = 0; i < poly.size(); ++i) + points[i] = QVector3D(poly.at(i)); + + return tilesFromPoints(points, false); + } else { + QPolygonF clipped = intersection(poly, screenPoly_); + + QList<TileSpec> tiles; + + if (!clipped.isEmpty()) { + QVector<QVector3D> points(clipped.size() - 1); + + for (int i = 0; i < clipped.size() - 1; ++i) + points[i] = QVector3D(clipped.at(i)); + + return tilesFromPoints(points, false); + } + + return tiles; + } + + } else { + QPolygonF clippedLeft = intersection(poly, screenPolyLeft_); + QPolygonF clippedRight = intersection(poly, screenPolyRight_); + + QList<TileSpec> tiles; + + if (!clippedLeft.isEmpty()) { + QVector<QVector3D> pointsLeft(clippedLeft.size() - 1); + + for (int i = 0; i < clippedLeft.size() - 1; ++i) + pointsLeft[i] = QVector3D(clippedLeft.at(i)); + + if (clippedRight.isEmpty()) + return tilesFromPoints(pointsLeft, false); + else + tiles.append(tilesFromPoints(pointsLeft, false)); + } + + if (!clippedRight.isEmpty()) { + QVector<QVector3D> pointsRight(clippedRight.size() - 1); + + for (int i = 0; i < clippedRight.size() - 1; ++i) + pointsRight[i] = QVector3D(clippedRight.at(i)); + + if (tiles.isEmpty()) + return tilesFromPoints(pointsRight, true); + else + tiles.append(tilesFromPoints(pointsRight, true)); + } + + return tiles; + } +} + +QPolygonF Map2DPrivate::intersection(const QPolygonF &p1, const QPolygonF &p2) const +{ + QVector<double> x(4); + QVector<double> y(4); + + x[0] = p1.at(0).x(); + x[1] = p1.at(2).x(); + x[2] = p2.at(0).x(); + x[3] = p2.at(2).x(); + + y[0] = p1.at(0).y(); + y[1] = p1.at(2).y(); + y[2] = p2.at(0).y(); + y[3] = p2.at(2).y(); + + qSort(x); + qSort(y); + + QPolygonF result(5); + + result[0] = QPointF(x.at(1), y.at(1)); + result[1] = QPointF(x.at(2), y.at(1)); + result[2] = QPointF(x.at(2), y.at(2)); + result[3] = QPointF(x.at(1), y.at(2)); + result[4] = QPointF(x.at(1), y.at(1)); + + return result; +} + +void Map2DPrivate::tilesFromLine(const QVector3D &p1, + const QVector3D &p2, + const QVector2D &t1, + const QVector2D &t2, + int zoomLevel, + TileMap &map) const +{ + IntersectGenerator xGen = IntersectGenerator(this, p1.x(), p2.x(), t1.x(), t2.x(), + IntersectGenerator::XAxis, zoomLevel); + IntersectGenerator yGen = IntersectGenerator(this, p1.y(), p2.y(), t1.y(), t2.y(), + IntersectGenerator::YAxis, zoomLevel); + + int tileX = t1.x(); + int tileY = t1.y(); + + map.adjust(tileX, tileY); + + while (xGen.hasNext() && yGen.hasNext()) { + QPair<double, int> x = xGen.value(); + QPair<double, int> y = yGen.value(); + if (x.first < y.first) { + tileX = x.second; + map.adjust(tileX, tileY); + xGen.next(); + } else if (x.first > y.first) { + tileY = y.second; + map.adjust(tileX, tileY); + yGen.next(); + } else { + map.adjust(tileX, y.second); + map.adjust(x.second, tileY); + tileX = x.second; + tileY = y.second; + map.adjust(tileX, tileY); + xGen.next(); + yGen.next(); + } + } + + while (xGen.hasNext()) { + tileX = xGen.value().second; + map.adjust(tileX, tileY); + xGen.next(); + } + + while (yGen.hasNext()) { + tileY = yGen.value().second; + map.adjust(tileX, tileY); + yGen.next(); + } +} + +QList<TileSpec> Map2DPrivate::tilesFromPoints(const QVector<QVector3D> &points, bool roundUp) const +{ + int numPoints = points.size(); + + if (numPoints == 0) + return QList<TileSpec>(); + + int zoomLevel = cameraData().zoomLevel(); + + int minY = -1; + int maxY = -1; + + QVector<QVector2D> tiles(points.size()); + for (int i = 0; i < numPoints; ++i) { + QVector2D t = pointToTile(points.at(i), zoomLevel, roundUp); + if (minY == -1) { + minY = t.y(); + maxY = t.y(); + } else { + minY = qMin(minY, static_cast<int>(t.y())); + maxY = qMax(maxY, static_cast<int>(t.y())); + } + tiles[i] = t; + } + + TileMap map(minY, maxY); + + for (int i1 = 0; i1 < numPoints; ++i1) { + int i2 = (i1 + 1) % numPoints; + tilesFromLine(points.at(i1), points.at(i2), tiles.at(i1), tiles.at(i2), zoomLevel, map); + } + + QList<TileSpec> results; + + results.reserve(map.size); + + int size = map.minX.size(); + for (int i = 0; i < size; ++i) { + int y = map.minY + i; + int minX = map.minX[i]; + int maxX = map.maxX[i]; + for (int x = minX; x <= maxX; ++x) + results << TileSpec(zoomLevel, x, y); + } + + return results; +} + +void Map2DPrivate::updateMapItemSceneNode(MapItem *item) +{ + double z = item->zoom(); + + if (z < 0) { + // TODO draw item on camera + return; + } + + double scale = sideLength_ / (tileSize_ * pow(2, z)); + QPointF anchor = item->anchor() * scale; + QSizeF size = item->size() * scale; + double alt = 0.0; + QVector3D point = projection()->coordToPoint(item->coordinate()); + QVector3D tl = QVector3D(point.x() + anchor.x(), point.y() - anchor.y(), alt); + QVector3D tr = QVector3D(tl.x() + size.width(), tl.y(), alt); + QVector3D bl = QVector3D(tl.x(), tl.y() - size.height(), alt); + QVector3D br = QVector3D(tl.x() + size.width(), tl.y() - size.height(), alt); + + QVector3D up(0.0, 0.0, 1.0); + + QGeometryData g; + + g.appendVertex(tl); + g.appendNormal(up); + g.appendTexCoord(QVector2D(0.0, 0.0)); + + g.appendVertex(bl); + g.appendNormal(up); + g.appendTexCoord(QVector2D(0.0, 1.0)); + + g.appendVertex(br); + g.appendNormal(up); + g.appendTexCoord(QVector2D(1.0, 1.0)); + + g.appendVertex(tr); + g.appendNormal(up); + g.appendTexCoord(QVector2D(1.0, 0.0)); + + QGLBuilder builder; + builder.addQuads(g); + QGLSceneNode *node = builder.finalizedSceneNode(); + + QGLMaterial *mat = new QGLMaterial(node); + QColor defaultItemColor(128, 128, 128, 128); + mat->setColor(defaultItemColor); + mat->setSpecularColor(defaultItemColor); + mat->setDiffuseColor(defaultItemColor); + mat->setShininess(1.0); + node->setEffect(QGL::LitMaterial); + + node->setMaterial(mat); + item->setSceneNode(node); +} + +QGeoCoordinate Map2DPrivate::screenPositionToCoordinate(const QPointF &pos) const +{ + double w = width() * 1.0 / viewSize_.width(); + double h = height() * 1.0 / viewSize_.height(); + double x = (pos.x() - w) / w; + double y = (pos.y() - h) / h; + + x = (x + 1.0) / 2.0; + y = (y + 1.0) / 2.0; + + QVector3D tl = frustum().topLeftFar(); + QVector3D tr = frustum().topRightFar(); + QVector3D bl = frustum().bottomLeftFar(); + + QVector3D n = (1 - x - y) * tl + x * tr + y * bl; + + if (eye_.z() == n.z()) + return QGeoCoordinate(); + + double alpha = eye_.z() / (eye_.z() - n.z()); + QVector3D c = (1 - alpha) * eye_ + alpha * n; + + return projection()->pointToCoord(c); +} + +QPointF Map2DPrivate::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const +{ + QVector3D c = projection()->coordToPoint(coordinate); + QVector3D d = projectionMatrix_.map(c); + return QPointF((d.x() + 1.0) * width() / 2.0, (-d.y() + 1.0) * height() / 2.0); +} diff --git a/src/location/mapsgl/map2d/map2d_p.h b/src/location/mapsgl/map2d/map2d_p.h new file mode 100644 index 00000000..bd790e7a --- /dev/null +++ b/src/location/mapsgl/map2d/map2d_p.h @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MAP2D_P_H +#define MAP2D_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "map_p.h" + +#include <QVector> +#include <QPair> +#include <QPolygonF> +#include <QSizeF> +#include <QVector3D> +#include <QMatrix4x4> + +struct TileMap +{ + TileMap(int minY, int maxY); + + int size; + int minY; + int maxY; + QVector<int> minX; + QVector<int> maxX; + + void adjust(int tileX, int tileY); +}; + +class IntersectGenerator +{ +public: + enum Axis { + XAxis, + YAxis + }; + IntersectGenerator(const MapPrivate *mp, + double p1, + double p2, + int t1, + int t2, + Axis axis, + int zoomLevel); + + bool hasNext() const; + QPair<double, int> value() const; + void next(); + +private: + void generateValue(); + +protected: + const MapPrivate *mp_; + Axis axis_; + int zoomLevel_; + + bool hasNext_; + QPair<double, int> value_; + + int current_; + int step_; + int end_; + + int adjust_; + double first_; + double denom_; +}; + +class Map2DPrivate : public MapPrivate +{ +public: + Map2DPrivate(Map *parent, + TileCache *cache, + int maxZoom, + int tileSize); + virtual ~Map2DPrivate(); + + virtual QGLSceneNode* createTileNode(const Tile &tile); + + virtual void updateGlCamera(QGLCamera* glCamera); + virtual void updateFrustum(Frustum &frustum); + virtual QList<TileSpec> updateVisibleTiles(); + virtual void updateMapItemSceneNode(MapItem *item); + + virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const; + virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const; + +private: + void tilesFromLine(const QVector3D &p1, + const QVector3D &p2, + const QVector2D &t1, + const QVector2D &t2, + int zoomLevel, + TileMap &map) const; + + QPolygonF intersection(const QPolygonF &p1, const QPolygonF &p2) const; + + QList<TileSpec> tilesFromPoints(const QVector<QVector3D> &points, bool roundUp) const; + + int maxZoom_; + int tileSize_; + + double baseHeight_; + double sideLength_; + QPolygonF screenPoly_; + QPolygonF screenPolyLeft_; + QPolygonF screenPolyRight_; + + QSizeF viewSize_; + QVector3D eye_; + QMatrix4x4 projectionMatrix_; +}; + +#endif // MAP2D_P_H diff --git a/src/location/mapsgl/map2d/projection2d_p.cpp b/src/location/mapsgl/map2d/projection2d_p.cpp new file mode 100644 index 00000000..98299a7e --- /dev/null +++ b/src/location/mapsgl/map2d/projection2d_p.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "projection2d_p.h" + +#include "qgeocoordinate.h" + +#include <QVector2D> +#include <QVector3D> + +Projection2D::Projection2D(double baseHeight, double sideLength) + : baseHeight_(baseHeight), sideLength_(sideLength) {} + +Projection2D::~Projection2D() {} + +QVector3D Projection2D::coordToPoint(const QGeoCoordinate &coord) const +{ + QVector2D m = coordToMercator(coord); + return QVector3D(m.x() * sideLength_, (1.0 - m.y()) * sideLength_, coord.altitude() + baseHeight_); +} + +QGeoCoordinate Projection2D::pointToCoord(const QVector3D &point) const +{ + QVector2D m = QVector2D(point.x() / sideLength_, 1.0 - point.y() / sideLength_); + QGeoCoordinate coord = mercatorToCoord(m); + coord.setAltitude(point.z() - baseHeight_); + return coord; +} + +QVector3D Projection2D::mercatorToPoint(const QVector2D &mercator) const +{ + return QVector3D(mercator.x() * sideLength_, (1.0 - mercator.y()) * sideLength_, baseHeight_); +} + +QVector2D Projection2D::pointToMercator(const QVector3D &point) const +{ + return QVector2D(point.x() / sideLength_, 1.0 - (point.y() / sideLength_)); +} + +QGeoCoordinate Projection2D::interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress) +{ + if (start == end) { + if (progress < 0.5) { + return start; + } else { + return end; + } + } + + QGeoCoordinate s2 = start; + s2.setAltitude(0.0); + QGeoCoordinate e2 = end; + e2.setAltitude(0.0); + QVector3D s = coordToPoint(s2); + QVector3D e = coordToPoint(e2); + + double x = s.x(); + + if (sideLength_ / 2.0 < qAbs(e.x() - s.x())) { + // handle dateline crossing + } else { + x = (1.0 - progress) * s.x() + progress * e.x(); + } + + double y = (1.0 - progress) * s.y() + progress * e.y(); + + QGeoCoordinate result = pointToCoord(QVector3D(x, y, 0.0)); + result.setAltitude((1.0 - progress) * start.altitude() + progress * end.altitude()); + return result; + + return start; +} diff --git a/src/location/maps/tiled/qgeotiledmappingmanagerengine_p.h b/src/location/mapsgl/map2d/projection2d_p.h index fc0f89b3..c311e204 100644 --- a/src/location/maps/tiled/qgeotiledmappingmanagerengine_p.h +++ b/src/location/mapsgl/map2d/projection2d_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOTILEDMAPPINGMANAGERENGINE_P_H -#define QGEOTILEDMAPPINGMANAGERENGINE_P_H +#ifndef PROJECTION2D_P_H +#define PROJECTION2D_P_H // // W A R N I N G @@ -53,30 +52,29 @@ // We mean it. // -#include "qgeomappingmanagerengine_p.h" -#include "qgeotiledmapreply.h" - -#include <QSize> +#include "projection_p.h" QT_BEGIN_NAMESPACE -class QGeoTiledMappingManagerEngine; -class QGeoTiledMapRequestHandler; -class QGeoTiledMapData; -class QGeoTiledMapRequest; - -class QGeoTiledMappingManagerEnginePrivate : public QGeoMappingManagerEnginePrivate +class Q_AUTOTEST_EXPORT Projection2D : public Projection { public: - QGeoTiledMappingManagerEnginePrivate(); - ~QGeoTiledMappingManagerEnginePrivate(); + Projection2D(double baseHeight, double sideLength); + virtual ~Projection2D(); + + virtual QVector3D coordToPoint(const QGeoCoordinate &coord) const; + virtual QGeoCoordinate pointToCoord(const QVector3D &point) const; + + virtual QVector3D mercatorToPoint(const QVector2D &mercator) const; + virtual QVector2D pointToMercator(const QVector3D &point) const; - QSize tileSize; + virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress); private: - Q_DISABLE_COPY(QGeoTiledMappingManagerEnginePrivate) + double baseHeight_; + double sideLength_; }; QT_END_NAMESPACE -#endif +#endif // PROJECTION2D_P_H diff --git a/src/location/mapsgl/map3d/map3d.pri b/src/location/mapsgl/map3d/map3d.pri new file mode 100644 index 00000000..dd53928e --- /dev/null +++ b/src/location/mapsgl/map3d/map3d.pri @@ -0,0 +1,26 @@ + +INCLUDEPATH += mapsgl/map3d + +SOURCES += \ + mapsgl/map3d/projection3d_p.cpp \ + mapsgl/map3d/map3d_p.cpp \ + mapsgl/map3d/sphere.cpp \ + mapsgl/map3d/spheregeometry.cpp \ + mapsgl/map3d/viewport.cpp \ + mapsgl/map3d/viewportcamera.cpp \ + mapsgl/map3d/viewporttiles.cpp \ + mapsgl/map3d/viewporttilesold.cpp \ + mapsgl/map3d/viewporttilesnew.cpp + +PRIVATE_HEADERS += \ + mapsgl/map3d/projection3d_p.h \ + mapsgl/map3d/map3d_p.h \ + mapsgl/map3d/sphere_p.h \ + mapsgl/map3d/spheregeometry_p.h \ + mapsgl/map3d/viewport_p.h \ + mapsgl/map3d/viewportcamera_p.h \ + mapsgl/map3d/viewporttiles_p.h \ + mapsgl/map3d/viewporttiles_p_p.h \ + mapsgl/map3d/viewporttilesold_p.h \ + mapsgl/map3d/viewporttilesnew_p.h + diff --git a/src/location/mapsgl/map3d/map3d_p.cpp b/src/location/mapsgl/map3d/map3d_p.cpp new file mode 100644 index 00000000..404b94ed --- /dev/null +++ b/src/location/mapsgl/map3d/map3d_p.cpp @@ -0,0 +1,221 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "map3d_p.h" +#include "projection3d_p.h" + +#include "tile.h" + +#include <qgeometrydata.h> +#include <qglbuilder.h> +#include <Qt3D/qglcamera.h> + +#include <cmath> + +Map3DPrivate::Map3DPrivate(Map *parent, TileCache *cache, double radius) + : MapPrivate(parent, cache), + minZoom_(6), + radius_(radius) +{ + Projection3D* p = new Projection3D(radius_); + setProjection(QSharedPointer<Projection>(p)); + viewport_.setProjection(p); +} + +Map3DPrivate::~Map3DPrivate() +{ +} + +QGeometryData Map3DPrivate::generateTileGeometryData(int x, int y, int tileZoom, int geomZoom) const +{ + int z = 1 << geomZoom; + + double x1 = x * 1.0 / z; + double x2 = ((x + 1) % z) * 1.0 / z; + if (x2 == 0.0) + x2 = 1.0; + double y1 = y * 1.0 / z; + double y2 = (y + 1) * 1.0 / z; + + QSharedPointer<Projection> p = projection(); + + QVector3D tl = p->mercatorToPoint(QVector2D(x1, y1)); + QVector3D tr = p->mercatorToPoint(QVector2D(x2, y1)); + QVector3D bl = p->mercatorToPoint(QVector2D(x1, y2)); + QVector3D br = p->mercatorToPoint(QVector2D(x2, y2)); + + int dz = 1 << (geomZoom - tileZoom); + + int tx1 = x % dz; + int ty1 = y % dz; + + ty1 = dz - ty1; + + int tx2 = (x + 1) % dz; + if (tx2 == 0) + tx2 = dz; + + int ty2 = (y + 1) % dz; + if (ty2 == 0) + ty2 = dz; + + ty2 = dz - ty2; + + QGeometryData g; + + g.appendVertex(tl); + g.appendNormal(tl / radius_); + g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty1 * 1.0 / dz)); + + g.appendVertex(bl); + g.appendNormal(bl / radius_); + g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty2 * 1.0 / dz)); + + g.appendVertex(br); + g.appendNormal(br / radius_); + g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty2 * 1.0 / dz)); + + g.appendVertex(tr); + g.appendNormal(tr / radius_); + g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty1 * 1.0 / dz)); + + return g; +} + +QGLSceneNode* Map3DPrivate::createTileNode(const Tile &tile) +{ + int tileZoom = tile.tileSpec().zoom(); + int geomZoom = qMax(minZoom_, tileZoom); + + int dz = 1 << (geomZoom - tileZoom); + + int x1 = tile.tileSpec().x() * dz; + int y1 = tile.tileSpec().y() * dz; + + QGLBuilder builder; + + for (int x = 0; x < dz; ++x) { + for (int y = 0; y < dz; ++y) { + builder.addQuads(generateTileGeometryData(x1 + x, y1 + y, tileZoom, geomZoom)); + } + } + + QGLSceneNode *node = builder.finalizedSceneNode(); + + QGLMaterial *mat = new QGLMaterial(node); + // tile.texture()->bind(); + mat->setTexture(tile.texture()); + node->setEffect(QGL::LitDecalTexture2D); + + node->setMaterial(mat); + + return node; +} + +void Map3DPrivate::updateGlCamera(QGLCamera* glCamera) +{ + CameraData camera = cameraData(); + + double altitude = radius_ * camera.distance(); + + QSharedPointer<Projection> p = projection(); + + QGeoCoordinate coord = camera.center(); + coord.setAltitude(0.0); + QVector3D center = p->coordToPoint(coord); + coord.setAltitude(altitude); + QVector3D eye = p->coordToPoint(coord); + + QVector3D view = eye - center; + QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + QVector3D up = QVector3D::normal(side, view); + + QMatrix4x4 mBearing; + mBearing.rotate(-1.0 * camera.bearing(), view); + up = mBearing * up; + + QVector3D side2 = QVector3D::normal(up, view); + QMatrix4x4 mTilt; + mTilt.rotate(camera.tilt(), side2); + eye = (mTilt * view) + center; + + view = eye - center; + side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + up = QVector3D::normal(view, side2); + + QMatrix4x4 mRoll; + mRoll.rotate(camera.roll(), view); + up = mRoll * up; + + double nearPlane = 1.0; + double farPlane = 2.0 * altitude; + + glCamera->setCenter(center); + glCamera->setEye(eye); + glCamera->setUpVector(up); + glCamera->setNearPlane(nearPlane); + glCamera->setFarPlane(farPlane); +} + +void Map3DPrivate::updateFrustum(Frustum &frustum) +{ + frustum.update(glCamera(), cameraData().aspectRatio()); + viewport_.setCameraData(cameraData()); +} + +QList<TileSpec> Map3DPrivate::updateVisibleTiles() +{ + return viewport_.visibleTiles(); +} + +void Map3DPrivate::updateMapItemSceneNode(MapItem */*item*/) +{ +} + +QGeoCoordinate Map3DPrivate::screenPositionToCoordinate(const QPointF &/*pos*/) const +{ + return QGeoCoordinate(); +} + +QPointF Map3DPrivate::coordinateToScreenPosition(const QGeoCoordinate &/*coordinate*/) const +{ + return QPointF(); +} diff --git a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.h b/src/location/mapsgl/map3d/map3d_p.h index 23e33b76..c5d875f6 100644 --- a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.h +++ b/src/location/mapsgl/map3d/map3d_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOTILEDMAPPOLYLINEOBJECT_INFO_P_H -#define QGEOTILEDMAPPOLYLINEOBJECT_INFO_P_H +#ifndef MAP3D_P_H +#define MAP3D_P_H // // W A R N I N G @@ -53,36 +52,37 @@ // We mean it. // -#include "qgeotiledmapobjectinfo_p.h" - -#include <QPen> -#include <QPolygonF> +#include "map_p.h" +#include "viewport_p.h" QT_BEGIN_NAMESPACE -class QGraphicsPathItem; -class QPointF; - -class QGeoMapPolylineObject; +class QGeometryData; -class QGeoTiledMapPolylineObjectInfo : public QGeoTiledMapObjectInfo +class Map3DPrivate : public MapPrivate { - Q_OBJECT public: - QGeoTiledMapPolylineObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapPolylineObjectInfo(); + Map3DPrivate(Map *parent, TileCache *cache, double radius); + virtual ~Map3DPrivate(); - QGeoMapPolylineObject *polyline; - QGraphicsPathItem *pathItem; + virtual QGLSceneNode* createTileNode(const Tile &tile); -public slots: - void pathChanged(const QList<QGeoCoordinate> &path); - void penChanged(const QPen &pen); + virtual void updateGlCamera(QGLCamera* glCamera); + virtual void updateFrustum(Frustum &frustum); + virtual QList<TileSpec> updateVisibleTiles(); + virtual void updateMapItemSceneNode(MapItem *item); + + virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const; + virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const; private: - void genPath(); + QGeometryData generateTileGeometryData(int x, int y, int tileZoom, int geomZoom) const; + + int minZoom_; + double radius_; + Viewport viewport_; }; QT_END_NAMESPACE -#endif //QGEOTILEDMAPPOLYLINEOBJECT_INFO_P_H +#endif // MAP3D_P_H diff --git a/src/location/mapsgl/map3d/projection3d_p.cpp b/src/location/mapsgl/map3d/projection3d_p.cpp new file mode 100644 index 00000000..8d131ea2 --- /dev/null +++ b/src/location/mapsgl/map3d/projection3d_p.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "projection3d_p.h" + +#include "qgeocoordinate.h" + +#include <QVector2D> +#include <QVector3D> +#include <QMatrix4x4> +#include <qnumeric.h> + +#include <cmath> + +Projection3D::Projection3D(double radius) + : radius_(radius) {} + +Projection3D::~Projection3D() {} + +double Projection3D::radius() const +{ + return radius_; +} + +QVector3D Projection3D::coordToPoint(const QGeoCoordinate &coord) const +{ + double r = radius_ + coord.altitude(); + + const double pi = M_PI; + double lonRad = pi * -1.0 * (coord.longitude() + 90.0) / 180.0; + double latRad = pi * (90.0 - coord.latitude()) / 180.0; + + return QVector3D(r * cos(lonRad) * sin(latRad), + r * cos(latRad), + r * sin(lonRad) * sin(latRad)); +} + +QGeoCoordinate Projection3D::pointToCoord(const QVector3D &point) const +{ + const double pi = M_PI; + + double alt = point.length(); + double lat = 180.0 * acos(point.y() / alt) / pi; + double lon = 270.0 - (180.0 * atan2(point.z(), point.x()) / pi); + + if (lon < -180.0) + lon += 360.0; + if (lon >= 180.0) + lon -= 360.0; + + return QGeoCoordinate(90.0 - lat, lon, alt); +} + +QGeoCoordinate Projection3D::interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress) +{ + if (start == end) { + if (progress < 0.5) { + return start; + } else { + return end; + } + } + + QGeoCoordinate s2 = start; + s2.setAltitude(0.0); + QGeoCoordinate e2 = end; + e2.setAltitude(0.0); + QVector3D s = coordToPoint(s2).normalized(); + QVector3D e = coordToPoint(e2).normalized(); + + double dot = QVector3D::dotProduct(s, e); + const double pi = M_PI; + double angle = 180.0 * acos(dot) / pi; + if (qFuzzyCompare(qAbs(dot), 1.0) || qIsNaN(angle)) { // qIsNan is extra check, fuzzy compare is sometimes too 'loose' + if (progress < 0.5) { + return start; + } else { + return end; + } + } + + QVector3D axis = QVector3D::crossProduct(s, e); + QMatrix4x4 mRot; + mRot.rotate(angle * progress, axis); + QVector3D p = mRot * s; + + QGeoCoordinate result = pointToCoord(p); + result.setAltitude((1.0 - progress) * start.altitude() + progress * end.altitude()); + return result; +} + diff --git a/src/location/maps/qgeomapobjectinfo_p.h b/src/location/mapsgl/map3d/projection3d_p.h index 646f6355..769ae437 100644 --- a/src/location/maps/qgeomapobjectinfo_p.h +++ b/src/location/mapsgl/map3d/projection3d_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOMAPOBJECTINFO_P_H -#define QGEOMAPOBJECTINFO_P_H +#ifndef PROJECTION3D_P_H +#define PROJECTION3D_P_H // // W A R N I N G @@ -53,26 +52,23 @@ // We mean it. // -#include "qmobilityglobal.h" - -QT_BEGIN_NAMESPACE - -class QGeoMapObject; -class QGeoMapData; +#include "projection_p.h" -class QGeoMapObjectInfoPrivate +class Q_AUTOTEST_EXPORT Projection3D : public Projection { public: - QGeoMapObjectInfoPrivate(QGeoMapData *mapData, QGeoMapObject *mapObject); - virtual ~QGeoMapObjectInfoPrivate(); + Projection3D(double radius); + virtual ~Projection3D(); - QGeoMapData* mapData; - QGeoMapObject* mapObject; + double radius() const; + + virtual QVector3D coordToPoint(const QGeoCoordinate &coord) const; + virtual QGeoCoordinate pointToCoord(const QVector3D &point) const; + + virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress); private: - Q_DISABLE_COPY(QGeoMapObjectInfoPrivate) + double radius_; }; -QT_END_NAMESPACE - -#endif +#endif // PROJECTION3D_P_H diff --git a/src/location/mapsgl/map3d/sphere.cpp b/src/location/mapsgl/map3d/sphere.cpp new file mode 100644 index 00000000..7c2e75ae --- /dev/null +++ b/src/location/mapsgl/map3d/sphere.cpp @@ -0,0 +1,1234 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "sphere_p.h" + +#include <cmath> + +Arc::Arc() {} + +Arc::Arc(const QPlane3D &plane, double sphereRadius, const QVector3D &start, const QVector3D &end) + : plane_(plane), + sphereRadius_(sphereRadius), + start_(start), + end_(end) +{ + QVector3D origin; + double dist = plane.distanceTo(origin); + center_ = -1.0 * dist * plane.normal().normalized(); + radius_ = sqrt(sphereRadius_ * sphereRadius_ - dist * dist); +} + +void Arc::setPlane(const QPlane3D &plane) +{ + plane_ = plane; + QVector3D origin; + double dist = plane.distanceTo(origin); + center_ = -1.0 * dist * plane.normal().normalized(); + radius_ = sqrt(sphereRadius_ * sphereRadius_ - dist * dist); +} + +bool Arc::operator ==(const Arc &rhs) +{ + return (qFuzzyCompare(sphereRadius_, rhs.sphereRadius_) + && qFuzzyCompare(radius_, rhs.radius_) + && qFuzzyCompare(plane_, rhs.plane_) + && qFuzzyCompare(center_, rhs.center_) + && qFuzzyCompare(start_, rhs.start_) + && qFuzzyCompare(end_, rhs.end_)); +} + +QPlane3D Arc::plane() const +{ + return plane_; +} + +QVector3D Arc::center() const +{ + return center_; +} + +double Arc::sphereRadius() const +{ + return sphereRadius_; +} + +double Arc::radius() const +{ + return radius_; +} + +void Arc::setStart(const QVector3D &start) +{ + start_ = start; +} + +QVector3D Arc::start() const +{ + return start_; +} + +void Arc::setEnd(const QVector3D &end) +{ + end_ = end; +} + +QVector3D Arc::end() const +{ + return end_; +} + +QVector3D Arc::interpolate(double n) const +{ + QVector3D a = start_ - center_; + QVector3D b = end_ - center_; + + a *= (1 - n); + b *= n; + + a += b; + + a.normalize(); + a *= radius_; + a += center_; + + return a; +} + +QPair<QVector3D, QVector3D> Arc::intersect2(const QPlane3D &plane) const +{ + QVector3D n1 = plane_.normal(); + QVector3D n2 = plane.normal(); + double h1 = QVector3D::dotProduct(n1, plane_.origin()); + double h2 = QVector3D::dotProduct(n2, plane.origin()); + + double dot = QVector3D::dotProduct(n1, n2); + + if (dot == 1.0) + return QPair<QVector3D, QVector3D>(start_, QVector3D()); + if (dot == -1.0) + return QPair<QVector3D, QVector3D>(QVector3D(), QVector3D()); + + QVector3D b = QVector3D::crossProduct(n1, n2); + + double c1 = h1 - h2 * dot; + double c2 = h2 - h1 * dot; + double den = 1 - dot * dot; + + n1 *= c1; + n2 *= c2; + + n1 += n2; + n1 /= den; + + double r2 = sphereRadius_ * sphereRadius_; + + QVector3D a = n1; + +// QPair<double, double> f = quadraticResults(b.lengthSquared(), 2 * QVector3D::dotProduct(a, b), a.lengthSquared() - r2, false); +// qWarning() << "f " << f.first << f.second; + + if (r2 >= a.lengthSquared()) { + double alpha = sqrt(r2 - a.lengthSquared()) / b.length(); + QVector3D v1 = b; + v1 *= alpha; + v1 += a; + QVector3D v2 = b; + v2 *= -1.0 * alpha; + v2 += a; + + + // TODO + // need a more robust method to determine whether v1, v2 are between start and end + // needs to be computationally cheap + double se = QVector3D::dotProduct(start_, end_); + bool hasV1 = ((se <= QVector3D::dotProduct(start_, v1)) && (se <= QVector3D::dotProduct(v1, end_))); + bool hasV2 = ((se <= QVector3D::dotProduct(start_, v2)) && (se <= QVector3D::dotProduct(v2, end_))); + + if (hasV1) { + if (hasV2 && !qFuzzyCompare(v1, v2)) { + if ((v1 - start_).lengthSquared() > (v2 - start_).lengthSquared()) + qSwap(v1, v2); + return QPair<QVector3D, QVector3D>(v1, v2); + } else { + return QPair<QVector3D, QVector3D>(v1, QVector3D()); + } + } else if (hasV2) { + return QPair<QVector3D, QVector3D>(v2, QVector3D()); + } + } + + return QPair<QVector3D, QVector3D>(QVector3D(), QVector3D()); +} + +QPair<QVector3D, QVector3D> Arc::intersects(const QPlane3D &plane) const +{ +// return intersect2(plane); + + QVector3D va = start_ - center_; + QVector3D vb = end_ - center_; + + QVector3D n = plane.normal(); + + double na = QVector3D::dotProduct(n, va); + double nb = QVector3D::dotProduct(n, vb); + double nab = na - nb; + double no = QVector3D::dotProduct(n, plane.origin()); + double nc = QVector3D::dotProduct(n, center_); + double ab = QVector3D::dotProduct(va, vb); + double r2 = radius_ * radius_; + double rab = 1 - (ab / r2); + + double noc = no - nc; + noc *= noc; + + + double a = nab * nab - 2 * noc * rab; + double b = 2 * (noc * rab - na * nab); + double c = na * na - noc; + + QPair<double, double> factors = quadraticResults(a, b, c); + + double f1 = factors.first; + QVector3D v1; + bool hasV1 = false; + + double f2 = factors.second; + QVector3D v2; + bool hasV2 = false; + + if (f1 != -1.0) { + v1 = interpolate(f1); + if (qAbs(plane.distanceTo(v1) / sphereRadius_) < 1e-6) { + hasV1 = true; + } else { + v1 = QVector3D(); + } + } + + if (f2 != -1.0) { + v2 = interpolate(f2); + if (qAbs(plane.distanceTo(v2) / sphereRadius_) < 1e-6) { + hasV2 = true; + if (!hasV1) { + v1 = v2; + v2 = QVector3D(); + } + } else { + v2 = QVector3D(); + } + } + + return QPair<QVector3D, QVector3D>(v1, v2); +} + +QPair<double, double> Arc::xIntersectFactor(double x) const +{ + return intersects(start_.x(), end_.x(), center_.x(), x); +} + +QPair<double, double> Arc::yIntersectFactor(double y) const +{ + return intersects(start_.y(), end_.y(), center_.y(), y); +} + +QPair<double, double> Arc::tIntersectFactor(double x, double z) const +{ + double t; + double ax; + double az; + double bx; + double bz; + double cx; + double cz; + + // TODO deal with x = y = 0 + + if (qAbs(x) <= qAbs(z)) { + t = x / z; + ax = start_.x() - center_.x(); + az = start_.z() - center_.z(); + bx = end_.x() - center_.x(); + bz = end_.z() - center_.z(); + cx = center_.x(); + cz = center_.z(); + } else { + t = z / x; + ax = start_.z() - center_.z(); + az = start_.x() - center_.x(); + bx = end_.z() - center_.z(); + bz = end_.x() - center_.x(); + cx = center_.z(); + cz = center_.x(); + } + + + double r2 = radius_ * radius_; + double dot = QVector3D::dotProduct(start_ - center_, end_ - center_); + double dc = (cx - t * cz); + dc *= dc; + + double ta = t * az - ax; + double tb = t * bz - bx; + double tab = ta - tb; + + double a = r2 * tab * tab + 2 * (dot - r2) * dc; + double b = 2 * (-1 * r2 * ta * tab + (r2 - dot) * dc); + double c = r2 * ta * ta - r2 * dc; + + QPair<double, double> factors = quadraticResults(a, b, c); + + // Need to check that the signs match + + bool xNeg = (x < 0.0); + bool zNeg = (z < 0.0); + + double f1 = factors.first; + bool f1Valid = false; + if (f1 != -1.0) { + QVector3D r = interpolate(f1); + bool rxNeg = (r.x() < 0.0); + bool rzNeg = (r.z() < 0.0); + if ((xNeg == rxNeg) && (zNeg == rzNeg)) { + f1Valid = true; + } else { + f1 = -1.0; + } + } + + double f2 = factors.second; + if (f2 != -1.0) { + QVector3D r = interpolate(f2); + bool rxNeg = (r.x() < 0.0); + bool rzNeg = (r.z() < 0.0); + if ((xNeg == rxNeg) && (zNeg == rzNeg)) { + if (!f1Valid) { + f1 = f2; + f2 = -1.0; + } + } else { + f2 = -1.0; + } + } + + return QPair<double, double>(f1, f2); +} + +QPair<double, double> Arc::intersects(double startValue, double endValue, double centerValue, double target) const +{ + double r2 = radius_ * radius_; + double dc = (target - centerValue) * (target - centerValue); + double dot = QVector3D::dotProduct(start_ - center_, end_ - center_); + + double a = 2 * (r2 - dot) * dc - r2 * (startValue - endValue) * (startValue - endValue); + double b = 2 * (dot - r2) * dc - 2 * r2 * (startValue - centerValue) * (endValue - startValue); + double c = r2 * (dc - (startValue - centerValue) * (startValue - centerValue)); + + return quadraticResults(a, b, c); +} + +QPair<double, double> Arc::quadraticResults(double a, double b, double c, bool clip) +{ + if (a == 0.0) + return QPair<double, double>(-1.0, -1.0); + + double s = b * b - 4 * a * c; + + if (s < 0.0) + return QPair<double, double>(-1.0, -1.0); + + double s2 = sqrt(s); + + double n1 = (-b + s2) / (2 * a); + double n2 = (-b - s2) / (2 * a); + + if (clip) { + if ((n1 < 0.0) || (n1 > 1.0)) + n1 = -1.0; + if ((n2 < 0.0) || (n2 > 1.0)) + n2 = -1.0; + + if (n1 != -1.0) { + if ((n2 != -1.0) && (n1 != n2)) { + if (n2 < n1) + qSwap(n1, n2); + return QPair<double, double>(n1, n2); + } else { + return QPair<double, double>(n1, -1.0); + } + } else if (n2 != -1.0) { + return QPair<double, double>(n2, -1.0); + } else { + return QPair<double, double>(-1.0, -1.0); + } + } else { + if (n2 < n1) + qSwap(n1, n2); + return QPair<double, double>(n1, n2); + } +} + +bool Arc::belowPlane(const QPlane3D &plane) const +{ + double ds = plane.distanceTo(start_) / sphereRadius_; + double de = plane.distanceTo(end_) / sphereRadius_; + + if ((ds > 1e-6) || (de > 1e-6)) + return false; + + return ((ds < -1e-6) || (de < -1e-6)); +} + +bool PatchData::operator == (const PatchData &rhs) +{ + return (qFuzzyCompare(point,rhs.point) && qFuzzyCompare(plane, rhs.plane)); +} + +SpherePatch::SpherePatch(double radius, const QList<Arc> arcs, bool roundUp, bool planar) + : radius_(radius), + roundUp_(roundUp), + planar_(planar), + debug_(true) +{ + data_.reserve(arcs.size()); + for (int i = 0; i < arcs.size(); ++i) { + PatchData d; + d.point = arcs.at(i).start(); + d.plane = arcs.at(i).plane(); + d.intersectIndex = -1; + d.done = false; + data_ << d; + } +} + +SpherePatch::SpherePatch(double radius, const QList<PatchData> &data, bool roundUp, bool planar) + : data_(data), + radius_(radius), + roundUp_(roundUp), + planar_(planar), + debug_(true) +{ + int size = data_.size(); + + for (int i = 0; i < size; ++i) { + data_[i].intersectIndex = -1; + data_[i].done = false; + } +} + +bool SpherePatch::operator ==(const SpherePatch &rhs) +{ + // TODO need to be able to handle rotations of the arc list + // TODO should also handle list in reverse order and with start/end + // in the opposite order + return (qFuzzyCompare(radius_, rhs.radius_) + && (data_ == rhs.data_) + && (roundUp_ == rhs.roundUp_)); +} + +bool SpherePatch::isomorphic(const SpherePatch &rhs) +{ + if (radius_ != rhs.radius_) + return false; + if (roundUp_ != rhs.roundUp_) + return false; + if (data_.size() != rhs.data_.size()) + return false; + if (data_.size() == 0) + return true; + + int index = -1; + int size = data_.size(); + PatchData d1 = data_.at(0); + for (int i = 0; i < size; ++i) { + if (d1 == rhs.data_[i]) { + index = i; + break; + } + } + + if (index == -1) + return false; + + for (int i1 = 0; i1 < size; ++i1) { + int i2 = (i1 + index) % size; + if (!(data_[i1] == rhs.data_[i2])) + return false; + } + + return true; +} + +int SpherePatch::arcCount() const +{ + return data_.size(); +} + +Arc SpherePatch::arc(int index) const +{ + if (index < 0 || index >= data_.size()) + return Arc(); + + int size = data_.size(); + int index2 = (index + 1) % size; + + return Arc(data_.at(index).plane, radius_, data_.at(index).point, data_.at(index2).point); +} + +void SpherePatch::setRoundUpTiles(bool roundUp) +{ + roundUp_ = roundUp; +} + +bool SpherePatch::roundUpTiles() const +{ + return roundUp_; +} + +bool SpherePatch::containsPoint(const QVector3D &point) const +{ + int size = data_.size(); + + for (int i = 0; i < size; ++i) { + if (data_.at(i).plane.distanceTo(point) < 0.0) + return false; + } + + return true; +} + +bool SpherePatch::inFrontOfPlane(const QPlane3D &plane) const +{ + int size = data_.size(); + + for (int i1 = 0; i1 < size; ++i1) { + if (plane.distanceTo(data_.at(i1).point) < 0) + return false; + } + + return true; +} + +bool SpherePatch::behindPlane(const QPlane3D &plane) const +{ + int size = data_.size(); + + for (int i1 = 0; i1 < size; ++i1) { + if (plane.distanceTo(data_.at(i1).point) > 0) + return false; + } + + return true; +} + +QList<SpherePatch> SpherePatch::intersect(const QPlane3D &plane) +{ + QList<SpherePatch> results; + + /* + We need these tests to rule out several cases that would + otherwise leave us with two arcs defining the patch. + + We want to save that case for when the plane / sphere + circle intersects one arc of this patch at two points. + + If it's a small circle we end up with two arcs between + two points (but the arcs are on different planes. + + If it's a bigger circle there may be some additional + points on the intersecting plane to make the interpolation + unambiguous + */ + + QVector3D origin; + double dist = plane.distanceTo(origin); + if (dist > radius_) { + if (debug_) + qWarning() << "keeping (outside radius)"; + results << *this; + return results; + } else if (dist < -1 * radius_) { + if (debug_) + qWarning() << "removing (outside radius)"; + return results; + } + + // co-planar + QPlane3D negPlane = plane; + negPlane.setNormal(negPlane.normal() * -1.0); + int size = data_.size(); + for (int i = 0; i < size; ++i) { + if (data_[i].plane == plane) { + if (debug_) + qWarning() << "keeping (co-planar)"; + results << *this; + return results; + } else if (data_[i].plane == negPlane) { + if (debug_) + qWarning() << "removing (co-planar)"; + return results; + } + } + + Arc intersectArc(plane, radius_); + bool contains = containsPoint(intersectArc.center()); +// if (!contains) { +// if (behindPlane(plane)) { +// if (debug_) +// qWarning() << "removing (intersection in different patch)"; +// return results; +// } else if (inFrontOfPlane(plane)) { +// if (debug_) +// qWarning() << "keeping (intersection in different patch)"; +// results << *this; +// return results; +// } +// } + + /* + for each pair of points + add first point if above or on plane + add intersection points if not start or end point + */ + + SpherePatch newPatch(radius_, QList<PatchData>(), roundUp_); + + int arcIntersectCount = 0; + int doubleIntersectCount = 0; + + QList<int> intersections = split(newPatch, plane, arcIntersectCount, doubleIntersectCount); + + if (debug_) { + qWarning() << newPatch.data_.size() << intersections.size() << arcIntersectCount << doubleIntersectCount << contains; + for (int i = 0; i < newPatch.data_.size(); ++i) + qWarning() << " " << newPatch.data_.at(i).point << newPatch.data_.at(i).plane << newPatch.data_.at(i).intersectIndex; + for (int i = 0; i < intersections.size(); ++i) + qWarning() << " " << intersections.at(i); + } + + + if ((arcIntersectCount == 0) || ((arcIntersectCount == 1) && (newPatch.data_.size() == 1))) { + if (contains) + return noIntersectPatches(plane); + if (debug_) + qWarning() << "keeping (center point in different patch)"; +// results << *this; + + if (behindPlane(plane)) { + if (debug_) + qWarning() << "removing (intersection in different patch)"; + return results; + } else if (inFrontOfPlane(plane)) { + if (debug_) + qWarning() << "keeping (intersection in different patch)"; + results << *this; + return results; + } + + return results; + } + + //qWarning() << newPatch.data_.size() << intersections.size() << arcIntersectCount << doubleIntersectCount << contains; + + if ((intersections.length() == 2) && (doubleIntersectCount == 1)) + handleCircleEdgeIntersection(newPatch, plane, intersections); + + arrangeIntersections(newPatch, plane, intersections); + + if (debug_) { + qWarning() << newPatch.data_.size() << intersections.size() << arcIntersectCount << doubleIntersectCount << contains; + for (int i = 0; i < newPatch.data_.size(); ++i) + qWarning() << " " << newPatch.data_.at(i).point << newPatch.data_.at(i).plane << newPatch.data_.at(i).intersectIndex; + for (int i = 0; i < intersections.size(); ++i) + qWarning() << " " << intersections.at(i); + } + + return divide(newPatch, plane, intersections); +} + +QList<int> SpherePatch::split(SpherePatch &patch, const QPlane3D &plane, int &arcCount, int &doubleCount) +{ + QList<int> intersections; + + arcCount = 0; + doubleCount = 0; + + int size = data_.size(); + + for (int i1 = 0; i1 < size; ++i1) { + int i2 = (i1 + 1) % size; + + PatchData d1 = data_.at(i1); + PatchData d2 = data_.at(i2); + + QVector3D p1 = d1.point; + QVector3D p2 = d2.point; + + Arc a = Arc(d1.plane, radius_, p1, p2); + + QPair<QVector3D, QVector3D> intersectPoints = a.intersects(plane); + QVector3D origin; + + if (intersectPoints.first != origin) + ++arcCount; + + if (intersectPoints.second != origin) + ++doubleCount; + + if (debug_) + qWarning() << "intersects " + << intersectPoints.first + << intersectPoints.second + << "(" << p1 << ", " << p2 << ")"; + + double dist = plane.distanceTo(p1); + + if ((dist / radius_ > -1e-6) && (dist <= 2.0 * radius_)) { + patch.data_ << d1; + + int lastIndex = patch.data_.size() - 1; + + if (intersectPoints.first != origin) { + if (qFuzzyCompare(intersectPoints.first, p1) && (intersections.isEmpty() || !(intersections.last() == lastIndex))) { + intersections << lastIndex; + } + } + + if (intersectPoints.second != origin) { + if (qFuzzyCompare(intersectPoints.second, p1) && (intersections.isEmpty() || !(intersections.last() == lastIndex))) { + intersections << lastIndex; + } + } + + } else { + if (debug_) + qWarning() << "point " << p1 << " below plane"; + } + + if (intersectPoints.first != origin) { + if (!qFuzzyCompare(intersectPoints.first, p1) && !qFuzzyCompare(intersectPoints.first, p2)) { + PatchData d = d1; + d.point = intersectPoints.first; + patch.data_ << d; + intersections << patch.data_.size() - 1; + if (debug_) + qWarning() << "adding " << intersectPoints.first << " as intersect"; + } + } + + if (intersectPoints.second != origin) { + if (!qFuzzyCompare(intersectPoints.second, p1) && !qFuzzyCompare(intersectPoints.second, p2)) { + PatchData d = d1; + d.point = intersectPoints.second; + patch.data_ << d; + intersections << patch.data_.size() - 1; + if (debug_) + qWarning() << "adding " << intersectPoints.second << " as intersect"; + } + } + } + + return intersections; +} + +void SpherePatch::handleCircleEdgeIntersection(SpherePatch &patch, const QPlane3D &plane, QList<int> &intersections) +{ + QList<QVector3D> newPoints; + + Arc a(plane, radius_); + + QVector3D p1 = patch.data_.at(intersections.at(0)).point; + QVector3D p2 = patch.data_.at(intersections.at(1)).point; + + bool rhplane = (plane.distanceTo(QVector3D()) < 0.0); + + if (rhplane) + intersections.removeFirst(); + else + intersections.removeLast(); + + QVector3D up = p1 - p2; + up.normalize(); + up *= a.radius(); + + QVector3D right = QVector3D::crossProduct(plane.normal(), up); + right.normalize(); + right *= a.radius(); + + QVector3D down = -1 * up; + + QVector3D left = -1 * right; + + up += a.center(); + right += a.center(); + down += a.center(); + left += a.center(); + + if (containsPoint(up) && !qFuzzyCompare(up, p1) && !qFuzzyCompare(up, p2)) + newPoints << up; + if (containsPoint(right) && !qFuzzyCompare(right, p1) && !qFuzzyCompare(right, p2)) + newPoints << right; + if (containsPoint(down) && !qFuzzyCompare(down, p1) && !qFuzzyCompare(down, p2)) + newPoints << down; + if (containsPoint(left) && !qFuzzyCompare(left, p1) && !qFuzzyCompare(left, p2)) + newPoints << left; + + int index = intersections.at(0) + 1; + + while (!newPoints.isEmpty()) { + int minIndex = 0; + QVector3D p = patch.data_.at(index - 1).point; + double minDist = (newPoints.at(0) - p).lengthSquared(); + for (int j = 1; j < newPoints.size(); ++j) { + double d = (newPoints.at(j) - p).lengthSquared(); + if (d < minDist) { + minIndex = j; + minDist = d; + } + } + + PatchData d; + d.point = newPoints.takeAt(minIndex); + d.plane = plane; + d.intersectIndex = -1; + d.done = false; + patch.data_.insert(index, d); + + intersections << index; + ++index; + } +} + +void SpherePatch::arrangeIntersections(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections) +{ + bool rhplane = (plane.distanceTo(QVector3D()) < 0.0); + + int modifier = 1; + if (!rhplane) + modifier = -1; + + if (!rhplane) { + int intersectSize = intersections.size(); + int dataSize = patch.data_.size(); + + for (int i1 = 0; i1 < intersectSize; ++i1) { + int i2 = (i1 + modifier) % intersectSize; + if (i2 < 0) + i2 += intersectSize; + int index1 = intersections.at(i1); + int index2 = intersections.at(i2); + if (index1 != index2) { + patch.data_[index1].intersectIndex = index2; + + if (planar_) { + int i3 = (index1 + 1) % dataSize; + if (i3 < 0) + i3 += dataSize; + if (i3 == index2) + patch.data_[index1].plane = plane; + } + } + } + } +} + +void SpherePatch::setupPlanes(QList<PatchData> &data, const QPlane3D &plane) +{ + int ndSize = data.size(); + + if (!planar_) { + for (int i1 = 0; i1 < ndSize; ++i1) { + int i2 = (i1 + 1) % ndSize; +// if (!qFuzzyCompare(data.at(i1).plane, data.at(i2).plane)) { + if (qAbs(data.at(i1).plane.distanceTo(data.at(i2).point) / radius_) > 1e-6) { + data[i1].plane = plane; + } +// } + } + } +} + +QList<SpherePatch> SpherePatch::divide(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections) +{ + QList<SpherePatch> results; + + int size = patch.data_.size(); + + bool rhplane = (plane.distanceTo(QVector3D()) < 0.0); + + if ((patch.data_.size() > 1) && rhplane) { + setupPlanes(patch.data_, plane); + results << SpherePatch(radius_, patch.data_, roundUp_); + } else if (size != intersections.size()) { + int size = patch.data_.size(); + for (int i = 0; i < size; ++i) { + PatchData d1 = patch.data_.at(i); + if ((d1.intersectIndex == -1) && !d1.done) { + + bool followingIntersect = false; + QList<PatchData> newData; + + newData << d1; + + int j = (i + 1) % size; + + int count = 0; + while ((j != i) && (count != size)) { + ++count; + + PatchData d2 = patch.data_.at(j); + newData << d2; + + int next = (j + 1) % size; + + // if ([this point is not an intersection]) + if (d2.intersectIndex == -1) { + patch.data_[j].done = true; + } else { + if (followingIntersect) { + // followingIntersect = [intersect exists and is adjacent] + followingIntersect = (d2.intersectIndex == next); + } else { + next = d2.intersectIndex; + followingIntersect = true; + } + } + + j = next; + } + + if (count == size + 1) { + qWarning() << "GAAAAH!!"; + } + + if (newData.size() > 1) { + setupPlanes(newData, plane); + SpherePatch sp = SpherePatch(radius_, newData, roundUp_); + results << sp; + } + } + } + } + + return results; +} + +QList<SpherePatch> SpherePatch::noIntersectPatches(const QPlane3D &plane) const +{ + QList<SpherePatch> results; + + Arc a(plane, radius_); + + bool allBigger = true; + bool allSmaller = true; + + int size = data_.size(); + + for (int i = 0; i < size; ++i) { + double dist = (data_.at(i).point - a.center()).length(); + double r = (dist - a.radius()) / radius_; + + if (r < -1e-6) + allSmaller = false; + if (r > 1e-6) + allBigger = false; + } + + if (allBigger) { + if (plane.distanceTo(data_.at(0).point) / radius_ > 0.0) + results << *this; + return results; + } + + QList<QVector3D> points; + + const double pi = 3.14159265358; + double angle = asin(a.radius() / radius_) * 180.0 / pi; + QVector3D center = a.center().normalized() * radius_; + + for (int i = 0; i < size; ++i) { + QVector3D axis = QVector3D::crossProduct(center, data_.at(i).point); + QMatrix4x4 r; + r.rotate(angle, axis); + points << r * center; + } + + double dist = plane.distanceTo(QVector3D()); + if (dist > 0.0) { + // circle shaped hole + + for (int i1 = 0; i1 < size; ++i1) { + int i2 = (i1 + 1) % size; + + QVector3D start = data_.at(i1).point; + QVector3D end = data_.at(i2).point; + + QList<PatchData> data; + + PatchData d1; + d1.point = start; + d1.plane = data_.at(i1).plane; + data << d1; + + PatchData d2; + d2.point = end; + d2.plane = QPlane3D(center, QVector3D::normal(center, end)); + data << d2; + + PatchData d3; + d3.point = points.at(i2); + d3.plane = plane; + data << d3; + + PatchData d4; + d4.point = points.at(i1); + d4.plane = QPlane3D(center, QVector3D::normal(center, start)); + data << d4; + + results << SpherePatch(radius_, data, roundUp_); + } + + } else if (dist < 0.0) { + // solo circle + + QList<PatchData> data; + for (int i = 0; i < size; ++i) { + PatchData d; + d.point = points.at(i); + d.plane = plane; + data << d; + } + + results << SpherePatch(radius_, data, roundUp_, true); + } + + return results; +} + +Sphere::Sphere(double radius, const QList<SpherePatch> &patches) + : radius_(radius), + patches_(patches) {} + +Sphere::Sphere(double radius) + : radius_(radius) +{ + QVector3D origin; + + patches_.reserve(8); + + QVector3D pxv = QVector3D(radius_, 0.0, 0.0); + QVector3D nxv = QVector3D(-1.0 * radius_, 0.0, 0.0); + QVector3D pyv = QVector3D(0.0, radius_, 0.0); + QVector3D nyv = QVector3D(0.0, -1.0 * radius_, 0.0); + QVector3D pzv = QVector3D(0.0, 0.0, radius_); + QVector3D nzv = QVector3D(0.0, 0.0, -1.0 * radius_); + + QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); + QPlane3D nxp = QPlane3D(origin, QVector3D(-1.0, 0.0, 0.0)); + QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); + QPlane3D nyp = QPlane3D(origin, QVector3D(0.0, -1.0, 0.0)); + QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); + QPlane3D nzp = QPlane3D(origin, QVector3D(0.0, 0.0, -1.0)); + + PatchData d; + + QList<PatchData> data; + data.reserve(3); + data << d; + data << d; + data << d; + + data[0].point = pxv; + data[0].plane = pzp; + data[1].point = pyv; + data[1].plane = pxp; + data[2].point = pzv; + data[2].plane = pyp; + + SpherePatch patch000(radius, data, false); + patches_ << patch000; + + data[0].point = pxv; + data[0].plane = pyp; + data[1].point = nzv; + data[1].plane = pxp; + data[2].point = pyv; + data[2].plane = nzp; + + SpherePatch patch001(radius_, data, false); + patches_ << patch001; + + data[0].point = pxv; + data[0].plane = nyp; + data[1].point = pzv; + data[1].plane = pxp; + data[2].point = nyv; + data[2].plane = pzp; + + SpherePatch patch010(radius_, data, false); + patches_ << patch010; + + data[0].point = pxv; + data[0].plane = nzp; + data[1].point = nyv; + data[1].plane = pxp; + data[2].point = nzv; + data[2].plane = nyp; + + SpherePatch patch011(radius_, data, false); + patches_ << patch011; + + data[0].point = nxv; + data[0].plane = pyp; + data[1].point = pzv; + data[1].plane = nxp; + data[2].point = pyv; + data[2].plane = nzp; + + SpherePatch patch100(radius_, data, false); + patches_ << patch100; + + data[0].point = nxv; + data[0].plane = nzp; + data[1].point = pyv; + data[1].plane = nxp; + data[2].point = nzv; + data[2].plane = pyp; + + SpherePatch patch101(radius_, data, false); + patches_ << patch101; + + data[0].point = nxv; + data[0].plane = pzp; + data[1].point = nyv; + data[1].plane = nxp; + data[2].point = pzv; + data[2].plane = nyp; + + SpherePatch patch110(radius_, data, true); + patches_ << patch110; + + data[0].point = nxv; + data[0].plane = nyp; + data[1].point = nyv; + data[1].plane = nxp; + data[2].point = nzv; + data[2].plane = nzp; + + SpherePatch patch111(radius_, data, true); + patches_ << patch111; +} + +bool Sphere::operator ==(const Sphere &rhs) +{ + // TODO either make canonical ordering for patches + // or do order-independent comparison of the patches + return (qFuzzyCompare(radius_, rhs.radius_) + && (patches_ == rhs.patches_)); +} + +bool Sphere::isomorphic (const Sphere &rhs) +{ + if (radius_ != rhs.radius_) + return false; + if (patches_.size() != rhs.patches_.size()) + return false; + + int size = patches_.size(); + + if (size == 0) + return true; + + for (int i = 0; i < size; ++i) + if (!patches_[i].isomorphic(rhs.patches_.at(i))) + return false; + + return true; +} + +QList<SpherePatch> Sphere::patches() const +{ + return patches_; +} + +void Sphere::intersect(const QPlane3D &plane) +{ + int size = patches_.size(); + + QList<SpherePatch> newPatches; + + QPlane3D p = plane; + p.setNormal(p.normal().normalized()); + + for (int i = 0; i < size; ++i) + newPatches.append(patches_[i].intersect(p)); + + patches_ = newPatches; +} + +QDebug operator << (QDebug dbg, const Arc &arc) +{ + dbg << " Arc [plane: " << arc.plane() << ", start: " << arc.start() << ", end: " << arc.end() << "]\n"; + return dbg; +} + +QDebug operator << (QDebug dbg, const SpherePatch &patch) +{ + dbg << " Patch [\n"; + + int arcCount = patch.arcCount(); + for (int i = 0; i < arcCount; ++i) + dbg << patch.arc(i); + + dbg << " ]\n"; + return dbg; +} + +QDebug operator << (QDebug dbg, const Sphere &sphere) +{ + dbg << "Sphere [\n"; + + QList<SpherePatch> patches = sphere.patches(); + for (int i = 0; i < patches.size(); ++i) + dbg << patches.at(i); + + dbg << "]\n"; + return dbg; +} diff --git a/src/location/mapsgl/map3d/sphere_p.h b/src/location/mapsgl/map3d/sphere_p.h new file mode 100644 index 00000000..f6ec0d65 --- /dev/null +++ b/src/location/mapsgl/map3d/sphere_p.h @@ -0,0 +1,177 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef SPHERE_P_H +#define SPHERE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QVector3D> +#include <QPair> +#include <qplane3d.h> +#include <QDebug> + +class Q_AUTOTEST_EXPORT Arc { +public: + Arc(); + Arc(const QPlane3D &plane, + double sphereRadius, + const QVector3D &start = QVector3D(), + const QVector3D &end = QVector3D()); + + bool operator == (const Arc &rhs); + + void setPlane(const QPlane3D &plane); + QPlane3D plane() const; + + QVector3D center() const; + double radius() const; + double sphereRadius() const; + + void setStart(const QVector3D &start); + QVector3D start() const; + + void setEnd(const QVector3D &end); + QVector3D end() const; + + QVector3D interpolate(double n) const; + QPair<QVector3D, QVector3D> intersects(const QPlane3D &plane) const; + + QPair<double, double> xIntersectFactor(double x) const; + QPair<double, double> yIntersectFactor(double y) const; + QPair<double, double> tIntersectFactor(double x, double y) const; + + bool belowPlane(const QPlane3D &plane) const; + +private: + QPair<double, double> intersects(double start, double end, double center, double target) const; + static QPair<double, double> quadraticResults(double a, double b, double c, bool clip = true); + + QPair<QVector3D, QVector3D> intersect2(const QPlane3D &plane) const; + + QPlane3D plane_; + double sphereRadius_; + QVector3D center_; + double radius_; + QVector3D start_; + QVector3D end_; +}; + +QDebug operator << (QDebug dbg, const Arc &arc); + +struct PatchData { + QVector3D point; + QPlane3D plane; + int intersectIndex; + bool done; + + bool operator == (const PatchData &rhs); +}; + +class Q_AUTOTEST_EXPORT SpherePatch { +public: + SpherePatch(double radius, const QList<Arc> arcs, bool roundUp = false, bool planar = false); + SpherePatch(double radius, const QList<PatchData> &data, bool roundUp, bool planar = false); + + bool operator == (const SpherePatch &rhs); + bool isomorphic(const SpherePatch &rhs); + + int arcCount() const; + Arc arc(int index) const; + + void setRoundUpTiles(bool roundUp); + bool roundUpTiles() const; + + QList<SpherePatch> intersect(const QPlane3D &plane); + +private: + bool inFrontOfPlane(const QPlane3D &plane) const; + bool behindPlane(const QPlane3D &plane) const; + bool containsPoint(const QVector3D &point) const; + + QList<int> split(SpherePatch &patch, const QPlane3D &plane, int &arcCount, int &doubleCount); + void handleCircleEdgeIntersection(SpherePatch &patch, const QPlane3D &plane, QList<int> &intersections); + QList<SpherePatch> noIntersectPatches(const QPlane3D &plane) const; + void arrangeIntersections(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections); + void setupPlanes(QList<PatchData> &data, const QPlane3D &plane); + QList<SpherePatch> divide(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections); + + QList<PatchData> data_; +// QList<int> intersections_; + + double radius_; + //QList<Arc> arcs_; + bool roundUp_; + bool planar_; + bool debug_; +}; + +QDebug operator << (QDebug dbg, const SpherePatch &patch); + +class Q_AUTOTEST_EXPORT Sphere { +public: + Sphere(double radius = 20000.0); + Sphere(double radius, const QList<SpherePatch> &patches); + + bool operator == (const Sphere &rhs); + bool isomorphic (const Sphere &rhs); + + QList<SpherePatch> patches() const; + + void intersect(const QPlane3D &plane); + +private: + double radius_; + QList<SpherePatch> patches_; +}; + +Q_AUTOTEST_EXPORT QDebug operator << (QDebug dbg, const Sphere &sphere); + + +#endif // SPHERE_P_H diff --git a/src/location/mapsgl/map3d/spheregeometry.cpp b/src/location/mapsgl/map3d/spheregeometry.cpp new file mode 100644 index 00000000..b8389d9a --- /dev/null +++ b/src/location/mapsgl/map3d/spheregeometry.cpp @@ -0,0 +1,208 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "spheregeometry_p.h" + +#include "qgeocoordinate.h" + +#include <QVector2D> +#include <QVector3D> +#include <cmath> + +#include <QDebug> + +SphereGeometry::SphereGeometry() + : radius_(20000.0), + zoomLevel_(4) {} + +SphereGeometry::SphereGeometry(double radius, int zoomLevel) + : radius_(radius), + zoomLevel_(zoomLevel) {} + +void SphereGeometry::setRadius(double radius) +{ + radius_ = radius; +} + +double SphereGeometry::radius() const +{ + return radius_; +} + +//void SphereGeometry::setZoomLevel(int zoomLevel) +//{ +// zoomLevel_ = zoomLevel; +//} + +//int SphereGeometry::zoomLevel() const +//{ +// return zoomLevel_; +//} + +bool SphereGeometry::operator == (const SphereGeometry &rhs) const +{ + return ((radius_ == rhs.radius_) && (zoomLevel_ == rhs.zoomLevel_)); +} + +QVector3D SphereGeometry::coordToPoint(const QGeoCoordinate &coord) const +{ + double r = radius_ + coord.altitude(); + + const double pi = 3.14159265358; + double lonRad = pi * -1.0 * (coord.longitude() + 90.0) / 180.0; + double latRad = pi * (90.0 - coord.latitude()) / 180.0; + + return QVector3D(r * cos(lonRad) * sin(latRad), + r * cos(latRad), + r * sin(lonRad) * sin(latRad)); +} + +QVector3D SphereGeometry::coordToPoint(double lat, double lon, double alt) const +{ + double r = radius_ + alt; + + const double pi = 3.14159265358; + double lonRad = pi * -1.0 * (lon + 90.0) / 180.0; + double latRad = pi * (90.0 - lat) / 180.0; + + return QVector3D(r * cos(lonRad) * sin(latRad), + r * cos(latRad), + r * sin(lonRad) * sin(latRad)); +} + +qreal realmod(const qreal a, const qreal b) +{ + quint64 div = static_cast<quint64>(a / b); + return a - static_cast<qreal>(div) * b; +} + +QVector3D SphereGeometry::mercatorToPoint(double fx, double fy) const +{ + const double pi = 3.14159265358; + + if (fy < 0.0) + fy = 0.0; + else if (fy > 1.0) + fy = 1.0; + + double lat; + + if (fy == 0.0) + lat = 90.0; + else if (fy == 1.0) + lat = -90.0; + else + lat = (180.0 / pi) * (2.0 * atan(exp(pi * (1.0 - 2.0 * fy))) - (pi / 2.0)); + + double lng; + if (fx >= 0) { + lng = realmod(fx, 1.0); + } else { + lng = realmod(1.0 - realmod(-1.0 * fx, 1.0), 1.0); + } + + lng = lng * 360.0 - 180.0; + + return coordToPoint(lat, lng); +} + +QVector3D SphereGeometry::pointToCoord(const QVector3D &point) const +{ + const double pi = 3.14159265358; + + double alt = point.length(); + double lat = 180.0 * acos(point.y() / alt) / pi; + double lon = 270.0 - (180.0 * atan2(point.z(), point.x()) / pi); + + if (lon < -180.0) + lon += 360.0; + if (lon >= 180.0) + lon -= 360.0; + + return QVector3D(90.0 - lat, lon, alt); +} + +QVector2D SphereGeometry::coordToMercator(const QVector2D &coord) const +{ + const double pi = 3.14159265358; + + double lon = coord.y() / 360.0 + 0.5; + + double lat = coord.x(); + lat = 0.5 - (log(tan((pi / 4.0) + (pi / 2.0) * lat / 180.0)) / pi) / 2.0; + lat = qMax(0.0, lat); + lat = qMin(1.0, lat); + + return QVector2D(lon, lat); +} + +QVector2D SphereGeometry::pointToMercator(const QVector3D &point) const +{ + return coordToMercator(pointToCoord(point).toVector2D()); +} + +QVector2D SphereGeometry::coordToTile(const QVector2D &coord, int zoom, bool roundUp) const +{ + QVector2D p = coordToMercator(coord); + + int z = 1 << zoom; + int x = 0; + int y = 0; + + if (p.y() == 1.0) + y = z - 1; + else + y = static_cast<int>(z * p.y()) % z; + + if ((qAbs(p.x()) < 1e-6) || (qAbs(p.x() - 1) < 1e-6)) + if (roundUp) + x = z - 1; + else + x = 0; + else + x = static_cast<int>(z * p.x()) % z; + + return QVector2D(x, y); +} + +QVector2D SphereGeometry::pointToTile(const QVector3D &point, int zoom, bool roundUp) const +{ + return coordToTile(pointToCoord(point).toVector2D(), zoom, roundUp); +} diff --git a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.h b/src/location/mapsgl/map3d/spheregeometry_p.h index 7e4ce9f8..c8e434e0 100644 --- a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.h +++ b/src/location/mapsgl/map3d/spheregeometry_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOTILEDMAPTEXTOBJECT_INFO_P_H -#define QGEOTILEDMAPTEXTOBJECT_INFO_P_H +#ifndef SPHEREGEOMETRY_P_H +#define SPHEREGEOMETRY_P_H // // W A R N I N G @@ -53,42 +52,45 @@ // We mean it. // -#include "qgeotiledmapobjectinfo_p.h" -#include "qgeoboundingbox.h" - -#include <QFont> -#include <QPen> -#include <QBrush> +#include "qglobal.h" QT_BEGIN_NAMESPACE -class QGraphicsSimpleTextItem; - -class QGeoMapTextObject; +class QGeoCoordinate; +class QVector2D; +class QVector3D; -class QGeoTiledMapTextObjectInfo : public QGeoTiledMapObjectInfo +class Q_LOCATION_EXPORT SphereGeometry { - Q_OBJECT public: - QGeoTiledMapTextObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapTextObjectInfo(); + SphereGeometry(); + SphereGeometry(double radius, int zoomLevel); + + void setRadius(double radius); + double radius() const; + +// void setZoomLevel(int zoomLevel); +// int zoomLevel() const; - QGeoMapTextObject* text; - QGraphicsSimpleTextItem *textItem; + bool operator == (const SphereGeometry &rhs) const; -public slots: - void textChanged(const QString &text); - void fontChanged(const QFont &font); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); - void offsetChanged(const QPoint &offset); - void alignmentChanged(Qt::Alignment alignment); + QVector3D coordToPoint(const QGeoCoordinate &coord) const; + QVector3D coordToPoint(double lat, double lon, double alt = 0.0) const; + QVector3D mercatorToPoint(double fx, double fy) const; + + QVector3D pointToCoord(const QVector3D &point) const; + + QVector2D coordToMercator(const QVector2D &coord) const; + QVector2D pointToMercator(const QVector3D &point) const; + + QVector2D coordToTile(const QVector2D &coord, int zoom, bool roundUp = false) const; + QVector2D pointToTile(const QVector3D &point, int zoom, bool roundUp = false) const; private: - void doAlignment(); + double radius_; + int zoomLevel_; }; QT_END_NAMESPACE -#endif //QGEOTILEDMAPTEXTOBJECT_INFO_P_H - +#endif // SPHEREGEOMETRY_P_H diff --git a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp b/src/location/mapsgl/map3d/viewport.cpp index 080df3e7..8acdad4c 100644 --- a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp +++ b/src/location/mapsgl/map3d/viewport.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,64 +38,89 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include "viewport_p.h" -#include "qgeotiledmapcustomobjectinfo_p.h" +#include "sphere_p.h" -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" +#include <QLinkedList> +#include <QPair> +#include <QMutableLinkedListIterator> -#include "qgeomapcustomobject.h" +#include <qglscenenode.h> +#include <qglbuilder.h> +#include <qglmaterial.h> +#include <qglsphere.h> + +#include <cmath> QT_BEGIN_NAMESPACE -QGeoTiledMapCustomObjectInfo::QGeoTiledMapCustomObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) +Viewport::Viewport() + : viewportTiles_(ViewportTiles(1)) { - custom = static_cast<QGeoMapCustomObject*>(mapObject); - - connect(custom, - SIGNAL(triggerUpdate()), - this, - SLOT(updateTriggered())); - connect(custom, - SIGNAL(graphicsItemChanged(QGraphicsItem*)), - this, - SLOT(graphicsItemChanged(QGraphicsItem*))); - connect(custom, - SIGNAL(offsetChanged(QPoint)), - this, - SLOT(offsetChanged(QPoint))); - - graphicsItem = 0; - - graphicsItemChanged(this->custom->graphicsItem()); - offsetChanged(this->custom->offset()); +// viewportTiles_.setSphere(sphere_); } -QGeoTiledMapCustomObjectInfo::~QGeoTiledMapCustomObjectInfo() +Viewport::~Viewport() { - //custom->setGraphicsItem(0); } -void QGeoTiledMapCustomObjectInfo::updateTriggered() +void Viewport::setProjection(Projection3D *projection) { - updateItem(); + viewportCamera_.setProjection(projection); } -void QGeoTiledMapCustomObjectInfo::graphicsItemChanged(QGraphicsItem * /*graphicsItem*/) +void Viewport::setZoomLevel(int zoomLevel) { - graphicsItem = this->custom->graphicsItem(); - updateItem(); + viewportTiles_.setZoomLevel(zoomLevel); } -void QGeoTiledMapCustomObjectInfo::offsetChanged(const QPoint &/*offset*/) +int Viewport::zoomLevel() const { - QPoint offset = custom->offset(); - graphicsItem->translate(offset.x(), offset.y()); - updateItem(); + return viewportTiles_.zoomLevel(); } -#include "moc_qgeotiledmapcustomobjectinfo_p.cpp" +//void Viewport::setSphere(const SphereGeometry& sphere) +//{ +// if (sphere_ == sphere) +// return; -QT_END_NAMESPACE +// sphere_ = sphere; +// viewportTiles_.setSphere(sphere_); + +// calculateVisibleTiles(); +//} + +//SphereGeometry Viewport::sphere() const +//{ +// return sphere_; +//} + +/* + Updates the internal QGLCamera, the frustum, and then updates the + list of visible tiles. +*/ +void Viewport::setCameraData(const CameraData &cameraData) +{ + viewportTiles_.setZoomLevel(cameraData.zoomLevel()); + viewportCamera_.setCameraData(cameraData); + + calculateVisibleTiles(); +} + +QGLCamera* Viewport::camera() const +{ + return viewportCamera_.toGLCamera(); +} + +QList<TileSpec> Viewport::visibleTiles() const +{ + return visibleTiles_; +} +void Viewport::calculateVisibleTiles() +{ + visibleTiles_ = viewportTiles_.visibleTiles(viewportCamera_); +} + +QT_END_NAMESPACE diff --git a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.h b/src/location/mapsgl/map3d/viewport_p.h index b55b8479..882b2248 100644 --- a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.h +++ b/src/location/mapsgl/map3d/viewport_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOTILEDMAPRECTANGLEOBJECT_INFO_P_H -#define QGEOTILEDMAPRECTANGLEOBJECT_INFO_P_H +#ifndef VIEWPORT_P_H +#define VIEWPORT_P_H // // W A R N I N G @@ -53,38 +52,55 @@ // We mean it. // -#include "qgeotiledmapobjectinfo_p.h" +#include "spheregeometry_p.h" +#include "cameradata.h" +#include "tilespec.h" +#include "frustum_p.h" + +#include "viewportcamera_p.h" +#include "viewporttiles_p.h" -#include <QPen> -#include <QBrush> +#include <QList> +#include <QVector2D> +#include <QVector3D> +#include <Qt3D/qplane3d.h> QT_BEGIN_NAMESPACE -class QGraphicsPolygonItem; +class QGLCamera; +class QGLSceneNode; -class QGeoMapRectangleObject; +class Arc; -class QGeoTiledMapRectangleObjectInfo : public QGeoTiledMapObjectInfo +class Projection3D; + +class Q_LOCATION_EXPORT Viewport { - Q_OBJECT public: - QGeoTiledMapRectangleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapRectangleObjectInfo(); + Viewport(); + ~Viewport(); + + void setProjection(Projection3D *projection); - QGeoMapRectangleObject* rectangle; - QGraphicsPolygonItem *polygonItem; + void setZoomLevel(int zoomLevel); + int zoomLevel() const; -public slots: - void topLeftChanged(const QGeoCoordinate &topLeft); - void bottomRightChanged(const QGeoCoordinate &bottomRight); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); + void setCameraData(const CameraData &cameraData); + + QGLCamera* camera() const; + + QList<TileSpec> visibleTiles() const; private: - void regenPolygon(); + void calculateVisibleTiles(); + + ViewportCamera viewportCamera_; + ViewportTiles viewportTiles_; + + QList<TileSpec> visibleTiles_; }; QT_END_NAMESPACE -#endif //QGEOTILEDMAPRECTANGLEOBJECT_INFO_P_H +#endif // VIEWPORT_P_H diff --git a/src/location/mapsgl/map3d/viewportcamera.cpp b/src/location/mapsgl/map3d/viewportcamera.cpp new file mode 100644 index 00000000..6d8abc76 --- /dev/null +++ b/src/location/mapsgl/map3d/viewportcamera.cpp @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "viewportcamera_p.h" + +#include "cameradata.h" + +#include "projection3d_p.h" + +#include <qglcamera.h> + +ViewportCamera::ViewportCamera() + : camera_(new QGLCamera()){} + +ViewportCamera::~ViewportCamera() +{ + delete camera_; +} + +void ViewportCamera::setProjection(Projection3D *projection) +{ + projection_ = projection; +} + +//void ViewportCamera::setSphere(const SphereGeometry &sphere) +//{ +// sphere_ = sphere; +//} + +void ViewportCamera::setCameraData(const CameraData &cameraData) +{ +// sphere_.setZoomLevel(cameraData.zoomLevel()); + double altitude = projection_->radius() * cameraData.distance(); + + QGeoCoordinate coord = cameraData.center(); + coord.setAltitude(0.0); + center_ = projection_->coordToPoint(coord); + coord.setAltitude(altitude); + eye_ = projection_->coordToPoint(coord); + + QVector3D view = eye_ - center_; + QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + up_ = QVector3D::normal(side, view); + + QMatrix4x4 mBearing; + mBearing.rotate(-1.0 * cameraData.bearing(), view); + up_ = mBearing * up_; + + QVector3D side2 = QVector3D::normal(up_, view); + QMatrix4x4 mTilt; + mTilt.rotate(cameraData.tilt(), side2); + eye_ = (mTilt * view) + center_; + + view = eye_ - center_; + side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + up_ = QVector3D::normal(view, side2); + + QMatrix4x4 mRoll; + mRoll.rotate(cameraData.roll(), view); + up_ = mRoll * up_; + + nearPlane_ = 1.0; + farPlane_ = 2.0 * altitude; + + viewSize_ = camera_->viewSize(); + aspectRatio_ = cameraData.aspectRatio(); + + updateGLCamera(); + updateFrustum(); +} + +void ViewportCamera::updateGLCamera() +{ + camera_->setCenter(center_); + camera_->setEye(eye_); + camera_->setUpVector(up_); + camera_->setNearPlane(nearPlane_); + camera_->setFarPlane(farPlane_); +} + +void ViewportCamera::updateFrustum() +{ + frustum_.update(*this); +} + +QVector3D ViewportCamera::center() const +{ + return center_; +} + +QVector3D ViewportCamera::eye() const +{ + return eye_; +} + +QVector3D ViewportCamera::up() const +{ + return up_; +} + +QSizeF ViewportCamera::viewSize() const +{ + return viewSize_; +} + +double ViewportCamera::aspectRatio() const +{ + return aspectRatio_; +} + +double ViewportCamera::nearPlane() const +{ + return nearPlane_; +} + +double ViewportCamera::farPlane() const +{ + return farPlane_; +} + +QGLCamera* ViewportCamera::toGLCamera() const +{ + return camera_; +} + +Frustum ViewportCamera::toFrustum() const +{ + return frustum_; +} diff --git a/src/location/mapsgl/map3d/viewportcamera_p.h b/src/location/mapsgl/map3d/viewportcamera_p.h new file mode 100644 index 00000000..01f0f52a --- /dev/null +++ b/src/location/mapsgl/map3d/viewportcamera_p.h @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef VIEWPORTCAMERA_P_H +#define VIEWPORTCAMERA_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QSizeF> +#include <QVector3D> + +#include "spheregeometry_p.h" +#include "cameradata.h" +#include "frustum_p.h" + +QT_BEGIN_NAMESPACE + +class Projection3D; + +class QGLCamera; + +class Q_AUTOTEST_EXPORT ViewportCamera { +public: + ViewportCamera(); + ~ViewportCamera(); + + void setProjection(Projection3D *projection); + +// void setSphere(const SphereGeometry &sphere); + + void setCameraData(const CameraData &cameraData); + + QVector3D center() const; + QVector3D eye() const; + QVector3D up() const; + QSizeF viewSize() const; + double aspectRatio() const; + double nearPlane() const; + double farPlane() const; + + QGLCamera* toGLCamera() const; + Frustum toFrustum() const; + +private: + void updateGLCamera(); + void updateFrustum(); + +// SphereGeometry sphere_; + Projection3D *projection_; + + QVector3D center_; + QVector3D eye_; + QVector3D up_; + QSizeF viewSize_; + double aspectRatio_; + double nearPlane_; + double farPlane_; + + QGLCamera* camera_; + Frustum frustum_; +}; + +QT_END_NAMESPACE + +#endif // VIEWPORTCAMERA_P_H diff --git a/src/location/mapsgl/map3d/viewporttiles.cpp b/src/location/mapsgl/map3d/viewporttiles.cpp new file mode 100644 index 00000000..8dcc8774 --- /dev/null +++ b/src/location/mapsgl/map3d/viewporttiles.cpp @@ -0,0 +1,424 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "viewporttiles_p.h" +#include "viewporttiles_p_p.h" + +#include "viewporttilesold_p.h" +#include "viewporttilesnew_p.h" + +#include "tilespec.h" +#include "cameradata.h" +#include "spheregeometry_p.h" +#include "sphere_p.h" + +#include <QVector2D> +#include <QVector> + +ViewportTiles::ViewportTiles(int codePath) +{ + if (codePath == 1) { + d_ptr = new ViewportTilesPrivateOld(); + } else { + d_ptr = new ViewportTilesPrivateNew(); + } +} + +ViewportTiles::~ViewportTiles() +{ + delete d_ptr; +} + +void ViewportTiles::setZoomLevel(int zoomLevel) +{ + d_ptr->setZoomLevel(zoomLevel); +} + +int ViewportTiles::zoomLevel() const +{ + return d_ptr->zoomLevel(); +} + +void ViewportTiles::setSphere(const SphereGeometry &sphere) +{ + d_ptr->setSphere(sphere); +} + +QList<TileSpec> ViewportTiles::visibleTiles(const ViewportCamera &viewportCamera) const +{ + return d_ptr->visibleTiles(viewportCamera); +} + +ViewportTilesPrivate::ViewportTilesPrivate() +{ +} + +ViewportTilesPrivate::~ViewportTilesPrivate() +{ +} + +void ViewportTilesPrivate::setZoomLevel(int zoomLevel) +{ + zoomLevel_ = zoomLevel; +} + +int ViewportTilesPrivate::zoomLevel() const +{ + return zoomLevel_; +} + +void ViewportTilesPrivate::setSphere(const SphereGeometry &sphere) +{ + sphere_ = sphere; +} + +SphereGeometry ViewportTilesPrivate::sphere() const +{ + return sphere_; +} + +bool sorter(const QPair<double, int> &v1, const QPair<double, int> &v2) +{ + return v1.first < v2.first; +} + +struct TileMap2 +{ + int minY; + int maxY; + QHash<int, QPair<int, int> > range; + + void adjust(int tileX, int tileY); +}; + +void TileMap2::adjust(int tileX, int tileY) +{ + if (minY == -1) + minY = tileY; + if (maxY == -1) + maxY = tileY; + + minY = qMin(minY, tileY); + maxY = qMax(maxY, tileY); + + if (range.contains(tileY)) { + QPair<int,int> r = range[tileY]; + range[tileY] = QPair<int, int>(qMin(r.first, tileX), qMax(r.second, tileX)); + } else { + range[tileY] = QPair<int, int>(tileX, tileX); + } +} + +/* + This function returns the tiles that are touched by the line + running from start to end at zoom level zoom. + + We first determine the tiles that the start and end points are in, + and from that we determine the minumum and maximum tile x and tile y values. + + Between the minimum and maximum y values we calculate the points at which + the line intersects the tile boundaries. + + The tile y value is entirely determined by the y value of the point, and + we do some algebra to find the the point of intersection for a give tile y value. + + For each intersection we store the fraction of the way along the + line from start-end the intersection occurs and what the new tile y value + should be. These are stored in a QList<<QPair<double, int> > + + There is a slight difference between the case of ascending and + descending y values and which tile value should be stored, which is accounted for. + + We do something similar for the x values, although in this case the ratio of + the x and z values determines where the line of intersection is. + + We have to treat x > z and x < z as special cases to avoid dividing by zero. + + We sort both QList<<QPair<double, int> > by the double value and initialise tileX + and tileY to the tile values of the starting point. + + We then look at the double values at the start of both lists. If one is smaller than + the other we take it from the list, update tileX or tileY appropriately, and add it to + the list of resulting tiles. If both values are equal we need to add (tileX, newTileY), + (newTileX, tileY) and (newTileX, newTileY) to the results. + + If either of the lists is exhausted we can just add anything that remains in the other list. +*/ +void ViewportTilesPrivate::tilesFromArc(const Arc &arc, bool roundUp, TileMap2 &map) const +{ + QVector3D start = arc.start(); + QVector3D end = arc.end(); + + int zpow2 = 1 << zoomLevel_; + + QVector2D t1 = sphere().pointToTile(start, zoomLevel_, roundUp); + QVector2D t2 = sphere().pointToTile(end, zoomLevel_, roundUp); + + QVector<QPair<double, int> > yVals(qAbs(t1.y() - t2.y()) + 2); + int yIndex = -1; + + yVals[++yIndex] = QPair<double, int>(0.0, t1.y()); + yVals[++yIndex] = QPair<double, int>(1.0, t2.y()); + + int yStep = t2.y() - t1.y(); + + if (yStep != 0) { + + yStep /= qAbs(yStep); + + int yAdjust = 0; + + int startY = t1.y(); + int endY = t2.y(); + if (yStep < 0) { + yAdjust = -1; + } else { + ++startY; + ++endY; + } + + for (int y = startY; y != endY; y += yStep) { + QVector3D p = sphere().mercatorToPoint(zpow2 / 2.0, y * 1.0 / zpow2); + QPair<double, double> factors = arc.yIntersectFactor(p.y()); + + bool found = false; + double tf; + + if (factors.first != -1.0) { + found = true; + tf = factors.first; + + if (factors.second != -1.0) { + double e1 = qAbs(p.y() - arc.interpolate(factors.first).y()); + double e2 = qAbs(p.y() - arc.interpolate(factors.second).y()); + if (e2 < e1) + tf = factors.second; + } + } + + if (found) { + yVals[++yIndex] = QPair<double, int>(tf, y + yAdjust); +// qWarning() << "y " << y << " factor " << tf << te; +// } else { +// qWarning() << " no y solution for " << y; + } + } + + } + + yVals.resize(yIndex + 1); + qSort(yVals.begin(), yVals.end(), sorter); + + QVector<QPair<double, int> > xVals(qAbs(t1.x() - t2.x()) + 2); + int xIndex = -1; + + xVals[++xIndex] = QPair<double, int>(0.0, t1.x()); + xVals[++xIndex] = QPair<double, int>(1.0, t2.x()); + + int xStep = t2.x() - t1.x(); + + if (xStep != 0) { + + xStep /= qAbs(xStep); + + int xAdjust = 0; + + int startX = t1.x(); + int endX = t2.x(); + if (xStep < 0) { + xAdjust = -1; + } else { + ++startX; + ++endX; + } + + for (int x = startX; x != endX; x += xStep) { + QVector3D p = sphere().mercatorToPoint(x * 1.0 / zpow2, zpow2 / 2.0); + QPair<double, double> factors = arc.tIntersectFactor(p.x(), p.z()); + + double t; + if (qAbs(p.x()) < qAbs(p.z())) + t = p.x() / p.z(); + else + t = p.z() / p.x(); + + bool found = false; + double tf; + + if (factors.first != -1.0) { + found = true; + tf = factors.first; + + if (factors.second != -1.0) { + QVector3D v = arc.interpolate(factors.first); + double e1 = 0.0; + if (qAbs(v.x()) < qAbs(v.z())) + e1 = qAbs(t - v.x() / v.z()); + else + e1 = qAbs(t - v.z() / v.x()); + + v = arc.interpolate(factors.second); + + double e2 = 0.0; + if (qAbs(v.x()) < qAbs(v.z())) + e2 = qAbs(t - v.x() / v.z()); + else + e2 = qAbs(t - v.z() / v.x()); + + if (e2 < e1) + tf = factors.second; + } + } + + if (found) { + xVals[++xIndex] = QPair<double, int>(tf, x + xAdjust); +// qWarning() << "x " << x << " factor " << tf << te; +// } else { +// qWarning() << " no x solution for " << x; + } + } + } + + xVals.resize(xIndex + 1); + qSort(xVals.begin(), xVals.end(), sorter); + + int tileX = t1.x(); + int tileY = t1.y(); + + int ySize = yVals.size(); + int xSize = xVals.size(); + yIndex = 0; + xIndex = 0; + + map.adjust(tileX, tileY); + + while ((xIndex != xSize) && (yIndex != ySize)) { + QPair<double, int> x = xVals.at(xIndex); + QPair<double, int> y = yVals.at(yIndex); + if (x.first < y.first) { + tileX = xVals.at(xIndex++).second; + map.adjust(tileX, tileY); + } else if (x.first > y.first) { + tileY = yVals.at(yIndex++).second; + map.adjust(tileX, tileY); + } else { + int tileX2 = xVals.at(xIndex++).second; + int tileY2 = yVals.at(yIndex++).second; + map.adjust(tileX, tileY2); + map.adjust(tileX2, tileY); + tileX = tileX2; + tileY = tileY2; + map.adjust(tileX, tileY); + } + } + + for (int x = xIndex; x < xSize; ++x) { + tileX = xVals.at(x).second; + map.adjust(tileX, tileY); + } + + for (int y = yIndex; y < ySize; ++y) { + tileY = yVals.at(y).second; + map.adjust(tileX, tileY); + } +} + +/* + This function takes a list of points at which the view frustum intersects the world sphere, + and returns the list of visible tiles that are bounded by that list of points. + + It is assumed that the polygon described by the list of points doesn't cross the dateline + or contain a pole. The visibleTiles(int zoom) function takes care of that. + + The tiles along the line for each of the points are gathered, and from that we can + determine which tiles are contained in the polygon. + + The minumum and maximum tile y values are found by a linear scan, after which we + determine the minimum and maximum x values for each of the y values. We request all of the + tile with that y value which have an x value between the minimum and maximum x values (inclusive). +*/ +QList<TileSpec> ViewportTilesPrivate::tilesFromSpherePatch(const SpherePatch &patch) const +{ + QList<TileSpec> results; + + int numArcs = patch.arcCount(); + + if (numArcs == 0) + return results; + + TileMap2 map; + map.minY = -1; + map.maxY = -1; + + for (int i = 0; i < numArcs; ++i) { + tilesFromArc(patch.arc(i), patch.roundUpTiles(), map); + } + + int minY = map.minY; + int maxY = map.maxY; + + + for (int y = minY; y <= maxY; ++y) { + if (!map.range.contains(y)) + continue; + int minX = map.range[y].first; + int maxX = map.range[y].second; + for (int x = minX; x <= maxX; ++x) { + results << TileSpec(zoomLevel_, x, y); + } + } + + return results; +} + +QList<TileSpec> ViewportTilesPrivate::tilesFromSphere(const Sphere &sphere) const +{ + QList<TileSpec> tiles; + +// qWarning() << "sphere"; +// qWarning() << sphere; + + int numPatches = sphere.patches().size(); + for (int i = 0; i < numPatches; ++i) { + tiles.append(tilesFromSpherePatch(sphere.patches().at(i))); + } + + return tiles; +} diff --git a/src/location/maps/qgraphicsgeomap_p.h b/src/location/mapsgl/map3d/viewporttiles_p.h index c3818c99..04b1da19 100644 --- a/src/location/maps/qgraphicsgeomap_p.h +++ b/src/location/mapsgl/map3d/viewporttiles_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGRAPHICSGEOMAP_P_H -#define QGRAPHICSGEOMAP_P_H +#ifndef VIEWPORTTILES_P_H +#define VIEWPORTTILES_P_H // // W A R N I N G @@ -53,28 +52,31 @@ // We mean it. // -#include "qmobilityglobal.h" +#include <QList> QT_BEGIN_NAMESPACE -class QGeoServiceProvider; -class QGeoMappingManager; -class QGeoMapData; +class ViewportTilesPrivate; +class SphereGeometry; +class TileSpec; +class ViewportCamera; -class QGraphicsGeoMapPrivate -{ +class ViewportTiles { public: - QGraphicsGeoMapPrivate(); - ~QGraphicsGeoMapPrivate(); + ViewportTiles(int codePath = 1); + ~ViewportTiles(); + + void setZoomLevel(int zoomLevel); + int zoomLevel() const; + + void setSphere(const SphereGeometry &sphere); - QGeoMappingManager *manager; - QGeoMapData *mapData; - bool panActive; + QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const; private: - Q_DISABLE_COPY(QGraphicsGeoMapPrivate) + ViewportTilesPrivate *d_ptr; }; QT_END_NAMESPACE -#endif +#endif // VIEWPORTTILES_P_H diff --git a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.h b/src/location/mapsgl/map3d/viewporttiles_p_p.h index e275ab56..64f6c3fd 100644 --- a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.h +++ b/src/location/mapsgl/map3d/viewporttiles_p_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOTILEDMAPROUTEOBJECT_INFO_P_H -#define QGEOTILEDMAPROUTEOBJECT_INFO_P_H +#ifndef VIEWPORTTILES_P_P_H +#define VIEWPORTTILES_P_P_H // // W A R N I N G @@ -53,36 +52,44 @@ // We mean it. // -#include "qgeotiledmapobjectinfo_p.h" - -#include "qgeoroute.h" +#include <QList> -#include <QPen> +#include "spheregeometry_p.h" +#include "tilespec.h" QT_BEGIN_NAMESPACE -class QGraphicsPathItem; -class QGeoMapRouteObject; -class QGeoTiledMapRouteObjectInfo : public QGeoTiledMapObjectInfo -{ - Q_OBJECT +class ViewportCamera; + +class Sphere; +class SpherePatch; +class Arc; + +struct TileMap2; + +class ViewportTilesPrivate { public: - QGeoTiledMapRouteObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapRouteObjectInfo(); + ViewportTilesPrivate(); + virtual ~ViewportTilesPrivate(); - QGeoMapRouteObject *route; - QGraphicsPathItem *pathItem; + void setZoomLevel(int zoomLevel); + int zoomLevel() const; -public slots: - void routeChanged(const QGeoRoute &route); - void penChanged(const QPen &pen); - void detailLevelChanged(quint32 detailLevel); + void setSphere(const SphereGeometry &sphere); + SphereGeometry sphere() const; + + virtual QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const = 0; + + QList<TileSpec> tilesFromSphere(const Sphere &sphere) const; private: - void regenPath(); + QList<TileSpec> tilesFromSpherePatch(const SpherePatch &patch) const; + void tilesFromArc(const Arc &arc, bool roundUp, TileMap2 &map) const; + + int zoomLevel_; + SphereGeometry sphere_; }; QT_END_NAMESPACE -#endif //QGEOTILEDMAPROUTEOBJECT_INFO_P_H - +#endif // VIEWPORTTILES_P_P_H diff --git a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp b/src/location/mapsgl/map3d/viewporttilesnew.cpp index 405af88e..e2df4680 100644 --- a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp +++ b/src/location/mapsgl/map3d/viewporttilesnew.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,59 +38,66 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include "viewporttilesnew_p.h" -#include "qgeotiledmappixmapobjectinfo_p.h" +#include "viewportcamera_p.h" -#include "qgeotiledmapdata.h" -#include "qgeotiledmapdata_p.h" - -#include "qgeomappixmapobject.h" +#include "sphere_p.h" QT_BEGIN_NAMESPACE -QGeoTiledMapPixmapObjectInfo::QGeoTiledMapPixmapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject) - : QGeoTiledMapObjectInfo(mapData, mapObject) -{ - pixmap = static_cast<QGeoMapPixmapObject*>(mapObject); - - connect(pixmap, - SIGNAL(pixmapChanged(QPixmap)), - this, - SLOT(pixmapChanged(QPixmap))); - connect(pixmap, - SIGNAL(offsetChanged(QPoint)), - this, - SLOT(offsetChanged(QPoint))); - - pixmapItem = new QGraphicsPixmapItem(); - graphicsItem = pixmapItem; - - originChanged(this->pixmap->origin()); - pixmapChanged(this->pixmap->pixmap()); - offsetChanged(this->pixmap->offset()); -} +ViewportTilesPrivateNew::ViewportTilesPrivateNew() + : debug_(false) {} -QGeoTiledMapPixmapObjectInfo::~QGeoTiledMapPixmapObjectInfo() {} +ViewportTilesPrivateNew::~ViewportTilesPrivateNew() {} -void QGeoTiledMapPixmapObjectInfo::pixmapChanged(const QPixmap &/*pixmap*/) +QList<TileSpec> ViewportTilesPrivateNew::visibleTiles(const ViewportCamera &viewportCamera) const { - pixmapItem->setPixmap(this->pixmap->pixmap()); - pixmapItem->setScale(1.0); - updateItem(); -} + Frustum frustum = viewportCamera.toFrustum(); -void QGeoTiledMapPixmapObjectInfo::offsetChanged(const QPoint &/*offset*/) -{ - QPoint offset = pixmap->offset(); + Sphere sphere = Sphere(this->sphere().radius()); - QTransform trans; - trans.translate(offset.x(), offset.y()); - pixmapItem->setTransform(trans); + if (debug_) + qWarning() << "sphere " << sphere; - updateItem(); -} + sphere.intersect(frustum.plane(Frustum::Far)); -#include "moc_qgeotiledmappixmapobjectinfo_p.cpp" + if (debug_) + qWarning() << "sphere (far)" << sphere; -QT_END_NAMESPACE + sphere.intersect(frustum.plane(Frustum::Left)); + + if (debug_) + qWarning() << "sphere (left)" << sphere; + + sphere.intersect(frustum.plane(Frustum::Top)); + + if (debug_) + qWarning() << "sphere (top)" << sphere; + + sphere.intersect(frustum.plane(Frustum::Right)); + if (debug_) + qWarning() << "sphere (right)" << sphere; + + sphere.intersect(frustum.plane(Frustum::Bottom)); + + if (debug_) + qWarning() << "sphere (bottom)" << sphere; + + sphere.intersect(frustum.plane(Frustum::Near)); + + if (debug_) + qWarning() << "sphere (near)" << sphere; + + QList<TileSpec> tiles = tilesFromSphere(sphere); + + if (debug_) { + for (int i = 0; i < tiles.size(); ++i) + qWarning() << " " << tiles.at(i).x() << tiles.at(i).y(); + } + + return tiles; +} + +QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapoverlay_p.h b/src/location/mapsgl/map3d/viewporttilesnew_p.h index 491006b1..33214ab4 100644 --- a/src/location/maps/qgeomapoverlay_p.h +++ b/src/location/mapsgl/map3d/viewporttilesnew_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOMAPOVERLAY_P_H -#define QGEOMAPOVERLAY_P_H +#ifndef VIEWPORTTILESNEW_P_H +#define VIEWPORTTILESNEW_P_H // // W A R N I N G @@ -53,24 +52,17 @@ // We mean it. // -#include "qmobilityglobal.h" - -QT_BEGIN_NAMESPACE +#include "viewporttiles_p_p.h" -class QGeoMapData; - -class QGeoMapOverlayPrivate -{ +class ViewportTilesPrivateNew : public ViewportTilesPrivate { public: - QGeoMapOverlayPrivate(); - virtual ~QGeoMapOverlayPrivate(); + ViewportTilesPrivateNew(); + ~ViewportTilesPrivateNew(); - QGeoMapData *mapData; + QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const; private: - Q_DISABLE_COPY(QGeoMapOverlayPrivate) + bool debug_; }; -QT_END_NAMESPACE - -#endif +#endif // VIEWPORTTILESNEW_P_H diff --git a/src/location/mapsgl/map3d/viewporttilesold.cpp b/src/location/mapsgl/map3d/viewporttilesold.cpp new file mode 100644 index 00000000..e1cb4943 --- /dev/null +++ b/src/location/mapsgl/map3d/viewporttilesold.cpp @@ -0,0 +1,690 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "viewporttilesold_p.h" + +#include "sphere_p.h" +#include "tilespec.h" +#include "viewportcamera_p.h" + +#include <QLinkedList> +#include <QVector2D> + +#include <cmath> + +ViewportTilesPrivateOld::ViewportTilesPrivateOld() {} + +ViewportTilesPrivateOld::~ViewportTilesPrivateOld() {} + +QList<TileSpec> ViewportTilesPrivateOld::visibleTiles(const ViewportCamera &viewportCamera) const +{ + Frustum frustum = viewportCamera.toFrustum(); + + int lineIntersections = 0; + + QList<Arc> points = pointIntersections(frustum, &lineIntersections); + + if (lineIntersections < 3) { + return visibleTilesFromPlanes(viewportCamera); + } + + return tilesFromSphere(sphereFromArcs(points)); +} + +Sphere ViewportTilesPrivateOld::sphereFromArcs(QList<Arc> &arcs) const +{ + QList<int> zeroIndices = addDatelineCrossings(arcs); + + int zeroes = zeroIndices.size(); + + if (zeroes == 0) { + QList<SpherePatch> patches; + patches << SpherePatch(sphere().radius(), arcs, false); + return Sphere(sphere().radius(), patches); + } else if (zeroes == 1) { + return sphereForPole(arcs, zeroIndices.at(0)); + } else if (zeroes == 2) { + return sphereForDateline(arcs, zeroIndices.at(0), zeroIndices.at(1)); + } else { + qWarning() << "zeroes: " << zeroes; + return Sphere(sphere().radius()); + } +} + +/* + We assume we a have a polygon with a pole in the middle, and a point on the dateline. + + We split the polygon into two, and then add copies of each point shifted up into the + tile in the first or last row of tiles (for the north or south pole respectively) in + reverse order. + + This is pretty buggy at present. +*/ +Sphere ViewportTilesPrivateOld::sphereForPole(const QList<Arc> &arcs, int zeroIndex1) const +{ +// QVector3D northPole = QVector3D(0, sphere().radius(), 0); +// QVector3D southPole = QVector3D(0, -1.0 * sphere().radius(), 0); + +// qWarning() << "north"; +// for (int i = 0; i < size; ++i) { +// qWarning() << " " << arcs.at(i).plane().distanceTo(northPole); +// } + +// qWarning() << "south"; +// for (int i = 0; i < size; ++i) { +// qWarning() << " " << arcs.at(i).plane().distanceTo(southPole); +// } + + int size = arcs.size(); + double y = 0.0; + for (int i = 0; i < size; ++i) { + y += arcs.at(i).start().y(); + } + + int z = 1 << zoomLevel(); + double newY = 0.5 / z; + if (y < 0.0) + newY = (z - 0.5) / z; + + QPlane3D datelinePlane(QVector3D(0.0, 0.0, 0.0), + QVector3D(0.0, 0.0, 1.0)); + + double topY = sphere().mercatorToPoint(0, newY).y(); + + QPlane3D topPlane(QVector3D(0.0, topY, 0.0), + QVector3D(0.0, -1.0, 0.0)); + + QList<SpherePatch> patches; + + QList<Arc> patch1; + + for (int i = zeroIndex1; i < zeroIndex1 + size; ++i) { + int index = i % size; + patch1 << arcs.at(index); + } + + QList<Arc> patch2; + + for (int i = zeroIndex1; i < zeroIndex1 + size; ++i) { + int index = size - (i % size) - 1; + + QVector2D start = sphere().pointToMercator(arcs.at(index).end()); + QVector2D end = sphere().pointToMercator(arcs.at(index).start()); + + QVector3D start2 = sphere().mercatorToPoint(start.x(), newY); + QVector3D end2 = sphere().mercatorToPoint(end.x(), newY); + + Arc a = Arc(topPlane, sphere().radius(), start2, end2); + + patch2 << a; + } + + Arc endCap1 = Arc(datelinePlane, sphere().radius(), patch1.last().end(), patch2.first().start()); + Arc endCap2 = Arc(datelinePlane, sphere().radius(), patch2.last().end(), patch1.first().start()); + + QList<Arc> patch; + + patch.append(patch1); + patch.append(endCap1); + patch.append(patch2); + patch.append(endCap2); + + patches << SpherePatch(sphere().radius(), patch, false); + + return Sphere(sphere().radius(), patches); +} + +// This assumes that addDatelineCrossings has already been called, in which +// case the polygon points will have points on the dateline instead of lines +// crossing the dateline. + +// In that case we just need to split the polygon into two - one before the dateline +// and one after the dateline - and add the visible tiles for both polygons. +Sphere ViewportTilesPrivateOld::sphereForDateline(const QList<Arc> &arcs, int zeroIndex1, int zeroIndex2) const +{ + QList<SpherePatch> patches; + + int size = arcs.size(); + + QList<Arc> lines1; + bool roundUp1 = false; + for (int i = zeroIndex1; i < zeroIndex2; ++i) { + Arc v = arcs.at(i); + if ((i != zeroIndex1) && (v.start().x() < 0)) + roundUp1 = true; + lines1.append(v); + } + + QPlane3D datelinePlane(QVector3D(0.0, 0.0, 0.0), + QVector3D(0.0, 0.0, 1.0)); + + lines1 << Arc(datelinePlane, sphere().radius(), lines1.last().end(), lines1.first().start()); + + patches << SpherePatch(sphere().radius(), lines1, roundUp1); + + QList<Arc> lines2; + bool roundUp2 = false; + for (int i = zeroIndex2; i < zeroIndex1 + size; ++i) { + int index = i % size; + Arc v = arcs.at(index); + if ((i != zeroIndex2) && (v.start().x() < 0)) + roundUp2 = true; + lines2.append(v); + } + + lines2 << Arc(datelinePlane, sphere().radius(), lines2.last().end(), lines2.first().start()); + + patches << SpherePatch(sphere().radius(), lines2, roundUp2); + + return Sphere(sphere().radius(), patches); +} + +QList<int> ViewportTilesPrivateOld::addDatelineCrossings(QList<Arc> &points) const +{ + QList<int> results; + + for (int i = 0; i < points.size(); ++i) { + Arc p = points.at(i); + QPair<double, double> factors = p.xIntersectFactor(0.0); + + bool found = false; + double tf; + double te = 0.0; + + if ((factors.first > 0.0) && (factors.first < 1.0)) { + QVector3D v = p.interpolate(factors.first); + if ((qAbs(v.x()) / sphere().radius() < 1e-6) && (v.z() >= 0.0)) { + found = true; + tf = factors.first; + te = qAbs(v.x()); + } + } + + if ((factors.second > 0.0) && (factors.second < 1.0)) { + QVector3D v = p.interpolate(factors.second); + if ((qAbs(v.x()) / sphere().radius() < 1e-6) && (v.z() >= 0.0)) { + if (!found || (qAbs(v.x()) < te)) { + found = true; + tf = factors.second; + } + } + } + +// for (int j = 0; j < factors.size(); ++j) { +// double n = factors.at(j); +// if ((n == 0.0) || (n == 1.0)) +// continue; + +// QVector3D v = p.interpolate(n); + +// double relativeError = qAbs(v.x() / sphere().radius()); + +//// qWarning() << " checked " << i << n << v.x() << v.z() << relativeError; + +// if ((relativeError < 1e-6) && (v.z() >= 0)) { +// double e = qAbs(v.x()); +// if (!found || (e < te)) { +// tf = n; +// te = e; +// found = true; +// } +// } +// } + + if (found) { + QVector3D v = p.interpolate(tf); + + qWarning() << " found " << tf << v.x() << v.z(); + + Arc q = p; + p.setEnd(v); + points[i] = p; + q.setStart(v); + points.insert(i + 1, q); + ++i; + results << i; + } + } + + return results; + +// QVector3D s = points.at(i) +// QVector3D e = points.at((i + 1) % points.size()); +// if ((s.x() != 0.0) && (e.x() != 0) && (s.x() != e.x())) { +// double n = s.x() / (s.x() - e.x()); +// QVector3D v = (1.0 - n) * s + n * e; +// if ((v.z() >= 0.0) && (0.0 <= n) && (n <= 1.0)) +// points.insert(i + 1, v); +// } +} + +bool ViewportTilesPrivateOld::LengthSorter::operator()(const IntersectionPoint &lhs, const IntersectionPoint &rhs) +{ + bool lPlane = (lhs.planes & base.planes); + bool rPlane = (rhs.planes & base.planes); + if (lPlane == rPlane) + return (lhs.point - base.point).lengthSquared() < (rhs.point - base.point).lengthSquared(); + else + return lPlane; +} + +/* + We find all of the points of intersection between the earth sphere and + the lines along the edges of the view frustum. + + We then sort them so that form a polygon. The last point becomes + the first result. We then sort the points by distance^2 from the last + result, and the nearest point becomes the last result. +*/ +QList<Arc> ViewportTilesPrivateOld::pointIntersections(const Frustum &frustum, int *linesIntersected) const +{ + QList<ViewportTilesPrivateOld::IntersectionPoint> points; + + if (linesIntersected) + *linesIntersected = 0; + + double radius = sphere().radius(); + + QList<ViewportTilesPrivateOld::IntersectionPoint> v; + + v = lineIntersectsSphere(radius, + frustum.topLeftNear(), + frustum.topLeftFar(), + Frustum::TopLeftNear, + Frustum::TopLeftFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.topRightNear(), + frustum.topRightFar(), + Frustum::TopRightNear, + Frustum::TopRightFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.bottomRightNear(), + frustum.bottomRightFar(), + Frustum::BottomRightNear, + Frustum::BottomRightFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.bottomLeftNear(), + frustum.bottomLeftFar(), + Frustum::BottomLeftNear, + Frustum::BottomLeftFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.topLeftFar(), + frustum.topRightFar(), + Frustum::TopLeftFar, + Frustum::TopRightFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.topRightFar(), + frustum.bottomRightFar(), + Frustum::TopRightFar, + Frustum::BottomRightFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.bottomRightFar(), + frustum.bottomLeftFar(), + Frustum::BottomRightFar, + Frustum::BottomLeftFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.bottomLeftFar(), + frustum.topLeftFar(), + Frustum::BottomLeftFar, + Frustum::TopLeftFar); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.topLeftNear(), + frustum.topRightNear(), + Frustum::TopLeftNear, + Frustum::TopRightNear); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.topRightNear(), + frustum.bottomRightNear(), + Frustum::TopRightNear, + Frustum::BottomRightNear); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.bottomRightNear(), + frustum.bottomLeftNear(), + Frustum::BottomRightNear, + Frustum::BottomLeftNear); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + v = lineIntersectsSphere(radius, + frustum.bottomLeftNear(), + frustum.topLeftNear(), + Frustum::BottomLeftNear, + Frustum::TopLeftNear); + if (linesIntersected && !v.isEmpty()) + ++(*linesIntersected); + points.append(v); + + QList<Arc> results; + + if (points.isEmpty()) + return results; + + LengthSorter sorter; + sorter.base = points.first(); + qSort(points.begin(), points.end(), sorter); + for (int i = points.size() - 1; i > 0; --i) { + if (points.at(i).point == points.at(i - 1).point) + points.removeAt(i); + } + + QList<ViewportTilesPrivateOld::IntersectionPoint>::iterator i; + for (i = points.begin(); i != points.end(); ++i) { + sorter.base = *i; + if (i + 1 != points.end()) + qSort(i + 1, points.end(), sorter); + } + + QVector3D origin; + + + int size = points.size(); + for (int i = 0; i < size; ++i) { + ViewportTilesPrivateOld::IntersectionPoint a = points.at(i); + ViewportTilesPrivateOld::IntersectionPoint b = points.at((i + 1) % size); + + + QPlane3D plane = frustum.plane(a.planes & b.planes); + if (plane.origin() != origin) + results << Arc(plane, sphere().radius(), a.point, b.point); + +// if (plane.origin() == origin) { +// result.center = origin; +// result.radius = sphere_.radius(); +// } else { +// results << Arc(plane, sphere_.radius(), a.point, b.point); +// result.center = -1.0 * plane.distanceTo(origin) * plane.normal().normalized(); +// result.radius = sqrt(sphere_.radius() * sphere_.radius() - result.center().lengthSquared()); +// } +// result.setStart(a.point); +// result.setEnd(b.point); + +// results << result; + } + + return results; +} + +/* + This returns the points along the line from start to end that intersect a sphere with radius \a radius. + + It returns the intersection in order of proximity to start. +*/ +QList<ViewportTilesPrivateOld::IntersectionPoint> ViewportTilesPrivateOld::lineIntersectsSphere(double radius, + const QVector3D &start, + const QVector3D &end, + Frustum::Planes planesStart, + Frustum::Planes planesEnd) +{ + QVector3D v = end - start; + + double maxN = v.length(); + + v.normalize(); + + double b = 2 * QVector3D::dotProduct(start, v); + double c = start.lengthSquared() - (radius * radius); + + double s = (b * b) - (4 * c); + + if (s < 0) + return QList<ViewportTilesPrivateOld::IntersectionPoint>(); + + double s2 = sqrt(s); + + double n1 = -1.0 * (b - s2) / 2.0; + if (n1 > maxN) + n1 = -1.0; + if (n1 < 0) + n1 = -1.0; + + double n2 = -1.0 * (b + s2) / 2.0; + if (n2 > maxN) + n2 = -1.0; + if (n2 < 0) + n2 = -1.0; + + if (n1 < 0.0) { + if (n2 >= 0) + n1 = n2; + } else if (n2 < 0) { + n2 = n1; + } else { + if (n2 < n1) + qSwap(n1, n2); + } + + QList<ViewportTilesPrivateOld::IntersectionPoint> results; + + if (n1 != -1.0) { + ViewportTilesPrivateOld::IntersectionPoint r1; + + r1.point = interpolate(start, end, n1); + + if (r1.point == start) + r1.planes = planesStart; + else if (r1.point == end) + r1.planes = planesEnd; + else + r1.planes = (planesStart & planesEnd); + results << r1; + + if ((n2 != -1.0) && (n2 != n1)) { + ViewportTilesPrivateOld::IntersectionPoint r2; + + r2.point = interpolate(start, end, n2); + + if (r2.point == start) + r2.planes = planesStart; + else if (r2.point == end) + r2.planes = planesEnd; + else + r2.planes = (planesStart & planesEnd); + results << r2; + } + } + + return results; +} + +QVector3D ViewportTilesPrivateOld::interpolate(const QVector3D &start, const QVector3D &end, double n) +{ + QVector3D v = end - start; + v.normalize(); + return start + n * v; +} + +QPair<QVector3D, double> ViewportTilesPrivateOld::tileInfo(const TileSpec &spec) const +{ + int z = 1 << spec.zoom(); + + double xl = spec.x() * 1.0 / z; + double xc = (spec.x() + 0.5) / z; + double xr = ((spec.x() + 1) % z * 1.0) / z; + double yt = (spec.y() * 1.0) / z; + double yc = (spec.y() + 0.5) / z; + double yb = ((spec.y() + 1) * 1.0) / z; + + QVector3D tl = sphere().mercatorToPoint(xl, yt); + QVector3D br = sphere().mercatorToPoint(xr, yb); + QVector3D c = sphere().mercatorToPoint(xc, yc); + + double r = sqrt(qMax((tl - c).lengthSquared(), (br - c).lengthSquared())); + + return QPair<QVector3D, double>(c, 2 * r); +} + +/* + This is the least good of the functions in here. + + It's used when we don't have enough of a frustum intersect to determine which + tiles to fetch analytically. + + It treats tiles as spheres and then determines if the sphere is inside + the frustum. If it is, it considers the neighbours of the tile. + + There are smarter ways to do this via plane intersection (hence the + function name). I'll revisit this soon. +*/ +QList<TileSpec> ViewportTilesPrivateOld::visibleTilesFromPlanes(const ViewportCamera &viewportCamera) const +{ + QList<TileSpec> results; + + QVector3D center = viewportCamera.center(); + QVector3D eye = viewportCamera.eye(); + + QVector3D v = center - eye; + v.normalize(); + + QVector2D t = sphere().pointToTile(center, zoomLevel()); + + QLinkedList<TileSpec> queue; + QSet<TileSpec> queued; + QSet<TileSpec> done; + + int zoom = zoomLevel(); + + queue << TileSpec(zoom, t.x(), t.y()); + queued << TileSpec(zoom, t.x(), t.y()); + + int z = 1 << zoom; + + Frustum frustum = viewportCamera.toFrustum(); + + while (!queue.isEmpty()) { + TileSpec spec = queue.takeLast(); + QPair<QVector3D, double> info = tileInfo(spec); + if (frustum.contains(info.first, info.second) && (QVector3D::dotProduct(v, info.first - eye) > 0)) { + results << spec; + + QList<TileSpec> tiles; + + int xp = spec.x() - 1; + if (xp < 0) + xp = z - 1; + int xn = (spec.x() + 1) % z; + + tiles << TileSpec(zoom, xp, spec.y()); + tiles << TileSpec(zoom, xn, spec.y()); + + if (spec.y() == 0) { + int x2 = (spec.x() + z / 2) % z; + int xp2 = ((spec.x() + z / 2 - 1) % z); + if (xp2 < 0) + xp2 += z; + int xn2 = ((spec.x() + z / 2 + 1) % z); + tiles << TileSpec(zoom, xp2, spec.y()); + tiles << TileSpec(zoom, x2, spec.y()); + tiles << TileSpec(zoom, xn2, spec.y()); + } else { + tiles << TileSpec(zoom, xp, spec.y() - 1); + tiles << TileSpec(zoom, spec.x(), spec.y() - 1); + tiles << TileSpec(zoom, xn, spec.y() - 1); + } + + if (spec.y() == (z - 1)) { + int x2 = (spec.x() + z / 2) % z; + int xp2 = ((spec.x() + z / 2 - 1) % z); + if (xp2 < 0) + xp2 += z; + int xn2 = ((spec.x() + z / 2 + 1) % z); + tiles << TileSpec(zoom, xp2, spec.y()); + tiles << TileSpec(zoom, x2, spec.y()); + tiles << TileSpec(zoom, xn2, spec.y()); + } else { + tiles << TileSpec(zoom, xp, spec.y() + 1); + tiles << TileSpec(zoom, t.x(), spec.y() + 1); + tiles << TileSpec(zoom, xn, spec.y() + 1); + } + + for (int i = 0; i < tiles.size(); ++i) { + TileSpec ts = tiles.at(i); + if (!done.contains(ts) && !queued.contains(ts)) { + queue << ts; + queued << ts; + } + } + } + done << spec; + queued.remove(spec); + } + + return results; +} diff --git a/src/location/projwrapper_p.h b/src/location/mapsgl/map3d/viewporttilesold_p.h index e0a7040a..8a2a7414 100644 --- a/src/location/projwrapper_p.h +++ b/src/location/mapsgl/map3d/viewporttilesold_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,10 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - - -#ifndef PROJWRAPPER_P_H -#define PROJWRAPPER_P_H +#ifndef VIEWPORTTILESOLD_P_H +#define VIEWPORTTILESOLD_P_H // // W A R N I N G @@ -54,76 +52,57 @@ // We mean it. // -#include "qmobilityglobal.h" -#include <QSharedDataPointer> -#include <QString> -#include <QList> -#include <QPolygonF> - -QT_BEGIN_NAMESPACE - -class ProjCoordinate; -class QGeoCoordinate; - -class ProjCoordinateSystemPrivate; -class ProjCoordinateSystem -{ -public: - ProjCoordinateSystem(const QString &projection = QString::fromLatin1("+proj=latlon +ellps=WGS84"), bool latLon=true); - ProjCoordinateSystem(const ProjCoordinateSystem &other); - ~ProjCoordinateSystem(); +#include "viewporttiles_p_p.h" - bool isLatLon() const; +#include "frustum_p.h" -private: - QSharedDataPointer<ProjCoordinateSystemPrivate> d; +QT_BEGIN_NAMESPACE - friend class ProjCoordinate; -}; +class ViewportCamera; -class ProjPolygon; +class Arc; -class ProjCoordinatePrivate; -class ProjCoordinate -{ +class ViewportTilesPrivateOld : public ViewportTilesPrivate { public: - ProjCoordinate(double x, double y, double z, const ProjCoordinateSystem &system); - ProjCoordinate(const ProjCoordinate &other); - ~ProjCoordinate(); + ViewportTilesPrivateOld(); + ~ViewportTilesPrivateOld(); - double x() const; - double y() const; - double z() const; + QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const; - QGeoCoordinate toGeoCoordinate() const; +private: + void calculateVisibleTiles(); - bool convert(const ProjCoordinateSystem &system); + class IntersectionPoint { + public: + Frustum::Planes planes; + QVector3D point; + bool operator == (const IntersectionPoint &rhs) const { + return ((planes == rhs.planes) && (point == rhs.point)); + } + }; - ProjCoordinate &operator=(const ProjCoordinate &other); + class LengthSorter { + public: + IntersectionPoint base; + bool operator()(const IntersectionPoint &lhs, const IntersectionPoint &rhs); + }; -private: - ProjCoordinatePrivate *d; + QList<Arc> pointIntersections(const Frustum &frustum, int *linesIntersected = 0) const; - friend class ProjPolygon; -}; + Sphere sphereFromArcs(QList<Arc> &arcs) const; -class ProjPolygonPrivate; -class ProjPolygon : public QList<ProjCoordinate> -{ -public: - ProjPolygon(const ProjCoordinateSystem &system); - ProjPolygon(const QPolygonF &poly, const ProjCoordinateSystem &system, double scale=1.0); - ~ProjPolygon(); + Sphere sphereForPole(const QList<Arc> &Arcs, int zeroIndex1) const; + Sphere sphereForDateline(const QList<Arc> &arcs, int zeroIndex1, int zeroIndex2) const; - void scalarMultiply(double sx, double sy, double sz); + static QList<IntersectionPoint> lineIntersectsSphere(double radius, const QVector3D &start, const QVector3D &end, Frustum::Planes planesStart, Frustum::Planes planesEnd); + static QVector3D interpolate(const QVector3D &start, const QVector3D &end, double n); - bool convert(const ProjCoordinateSystem &system); - QPolygonF toPolygonF(double scale=1.0) const; + QList<int> addDatelineCrossings(QList<Arc> &points) const; -private: - ProjPolygonPrivate *d; + QPair<QVector3D, double> tileInfo(const TileSpec &spec) const; + QList<TileSpec> visibleTilesFromPlanes(const ViewportCamera &viewportCamera) const; }; QT_END_NAMESPACE -#endif // PROJWRAPPER_P_H +#endif // VIEWPORTTILESOLD_P_H diff --git a/src/location/mapsgl/map_p.h b/src/location/mapsgl/map_p.h new file mode 100644 index 00000000..37aaeb9c --- /dev/null +++ b/src/location/mapsgl/map_p.h @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MAP_P_H +#define MAP_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QList> +#include <QSet> + +#include "cameradata.h" +#include "frustum_p.h" + +#include <QSharedPointer> + +class QGeoMappingManager; + +class Tile; +class TileCache; +class TileSpec; +class Map; +class MapSphere; +class Projection; +class MapItem; + +class QGLCamera; +class QGLSceneNode; +class QGLPainter; + +class MapPrivate +{ +public: + MapPrivate(Map *parent, TileCache *cache); + virtual ~MapPrivate(); + + void setMappingManager(QGeoMappingManager *manager); + + QGLCamera* glCamera() const; + void paintGL(QGLPainter *painter); + + QSharedPointer<Projection> projection() const; + + void setCameraData(const CameraData &cameraData); + CameraData cameraData() const; + + void resize(int width, int height); + + virtual QGLSceneNode* createTileNode(const Tile &tile) = 0; + + void update(); + + int numMapItems() const; + MapItem* mapItem(int index) const; + QList<MapItem*> mapItems() const; + void addMapItem(MapItem *item); + void removeMapItem(MapItem *item); + void clearMapItems(); + + virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const = 0; + virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const = 0; + + QVector2D pointToTile(const QVector3D &point, int zoom, bool roundUp = false) const; + QVector3D tileXIntersectToPoint(int zoomLevel, int x) const; + QVector3D tileYIntersectToPoint(int zoomLevel, int y) const; + +protected: + Frustum frustum() const; + + void setProjection(const QSharedPointer<Projection> &projection); + + int width() const; + int height() const; + double aspectRatio() const; + + QGeoMappingManager* manager() const; + +private: + virtual void updateGlCamera(QGLCamera* glCamera) = 0; + virtual void updateFrustum(Frustum &frustum) = 0; + virtual QList<TileSpec> updateVisibleTiles() = 0; + virtual void updateMapItemSceneNode(MapItem *item) = 0; + void GLContextAvailable(); + + int width_; + int height_; + double aspectRatio_; + + QGeoMappingManager *manager_; + + QSharedPointer<Projection> projection_; + + QGLCamera *glCamera_; + QGLSceneNode *mapSceneNode_; + QGLSceneNode *objectSceneNode_; + + CameraData cameraData_; + Frustum frustum_; + QList<TileSpec> visibleTiles_; + + MapSphere *sphere_; + + QList<MapItem*> mapItems_; + QSet<MapItem*> obsoleteItems_; + QSet<MapItem*> newItems_; +}; + +#endif // MAP_P_H diff --git a/src/location/mapsgl/mapitem.cpp b/src/location/mapsgl/mapitem.cpp new file mode 100644 index 00000000..7bd98497 --- /dev/null +++ b/src/location/mapsgl/mapitem.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "mapitem.h" + +#include <Qt3D/qglscenenode.h> +#include <Qt3D/qgltexture2d.h> +#include <Qt3D/qglmaterial.h> + +MapItem::MapItem() + : zoom_(8.0), + sceneNode_(0), + textureId_(0), // invalid value according to specs + textureDirty_(false), + texture_(0), + defaultMaterial_(0) +{ + // TODO optimize the defaultMaterial be common for all + defaultMaterial_ = new QGLMaterial(); + defaultMaterial_->setColor(QColor(255, 128, 0)); + defaultMaterial_->setSpecularColor(QColor(255, 128, 0)); + defaultMaterial_->setDiffuseColor(QColor(255, 128, 0)); + defaultMaterial_->setShininess(1.0); +} + +MapItem::~MapItem() +{ + delete defaultMaterial_; +} + +void MapItem::setCoordinate(const QGeoCoordinate &coordinate) +{ + coordinate_ = coordinate; +} + +QGeoCoordinate MapItem::coordinate() const +{ + return coordinate_; +} + +void MapItem::setAnchor(const QPointF &anchor) +{ + anchor_ = anchor; +} + +void MapItem::setTextureId(GLuint textureId) +{ + if (textureId_ == textureId) + return; + textureId_ = textureId; + textureDirty_ = true; +} + +GLuint MapItem::textureId() +{ + return textureId_; +} + +// Note: this function 'must be only' / 'is guaranteed only to be called' +// when running in the thread that has valid GL context (rendering thread). +// TODO refactor this function, poorly written +void MapItem::update() +{ + if (!textureDirty_ || !sceneNode_) + return; + textureDirty_ = false; + if (texture_) { + // todo this will likely crash.. + sceneNode_->material()->setTexture(0); + sceneNode_->material()->setColor(QColor(255, 128, 0)); + sceneNode_->material()->setSpecularColor(QColor(255, 128, 0)); + sceneNode_->material()->setDiffuseColor(QColor(255, 128, 0)); + sceneNode_->material()->setShininess(1.0); + sceneNode_->setEffect(QGL::LitMaterial); + delete texture_; + texture_ = 0; + } + if (textureId_ != 0) { + texture_ = QGLTexture2D::fromTextureId(textureId_, size_.toSize()); // todo optimize out the .toSize() call + sceneNode_->material()->setTexture(texture_); + sceneNode_->setEffect(QGL::LitDecalTexture2D); + } +} + +QGLTexture2D* MapItem::texture() +{ + return texture_; +} + +QPointF MapItem::anchor() const +{ + return anchor_; +} + +void MapItem::setSize(const QSizeF &size) +{ + size_ = size; +} + +QSizeF MapItem::size() const +{ + return size_; +} + +void MapItem::setZoom(double zoom) +{ + zoom_ = zoom; +} + +double MapItem::zoom() const +{ + return zoom_; +} + +void MapItem::setSceneNode(QGLSceneNode *sceneNode) +{ + if (sceneNode_ == sceneNode) + return; + sceneNode_ = sceneNode; + if (sceneNode_ && !sceneNode_->material()) { + // todo figure out default material setting if + // texture for any reason disappears. this crashes: + //sceneNode_->setMaterial(defaultMaterial_); + } +} + +QGLSceneNode* MapItem::sceneNode() const +{ + return sceneNode_; +} diff --git a/src/location/maps/qgeomapobject_p.h b/src/location/mapsgl/mapitem.h index 0d0c160a..906667ca 100644 --- a/src/location/maps/qgeomapobject_p.h +++ b/src/location/mapsgl/mapitem.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,53 +38,58 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#ifndef MAPITEM_H +#define MAPITEM_H -#ifndef QGEOMAPOBJECT_P_H -#define QGEOMAPOBJECT_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qgeomapobject.h" -#include "qgeomapobjectinfo.h" #include "qgeocoordinate.h" - +#include <QPointF> +#include <QSizeF> +#include <QtOpenGL/qgl.h> QT_BEGIN_NAMESPACE -class QGraphicsItem; -class QGeoMapObject; -class QGeoMapData; +class QGLTexture2D; +class QGLMaterial; +class QGLSceneNode; -class QGeoMapObjectPrivate +class Q_LOCATION_EXPORT MapItem { public: - QGeoMapObjectPrivate(); - virtual ~QGeoMapObjectPrivate(); + MapItem(); + ~MapItem(); + + void setCoordinate(const QGeoCoordinate &coordinate); + QGeoCoordinate coordinate() const; + + void setTextureId(GLuint textureId); + GLuint textureId(); + QGLTexture2D* texture(); + void update(); + + void setAnchor(const QPointF &anchor); + QPointF anchor() const; - int zValue; - quint32 serial; - bool isVisible; - bool isSelected; + void setSize(const QSizeF &size); + QSizeF size() const; - QGeoMapData *mapData; - mutable QGeoMapObjectInfo *info; + void setZoom(double zoom); + double zoom() const; - QGeoMapObject::CoordinateUnit units; - QGeoMapObject::TransformType transType; - QGeoCoordinate origin; + void setSceneNode(QGLSceneNode *sceneNode); + QGLSceneNode* sceneNode() const; - Q_DISABLE_COPY(QGeoMapObjectPrivate) +private: + QGeoCoordinate coordinate_; + QPointF anchor_; + QSizeF size_; + double zoom_; + QGLSceneNode* sceneNode_; + GLuint textureId_; + bool textureDirty_; + QGLTexture2D* texture_; + QGLMaterial* defaultMaterial_; }; QT_END_NAMESPACE -#endif +#endif // MAPITEM_H diff --git a/src/location/mapsgl/mapsgl.pri b/src/location/mapsgl/mapsgl.pri new file mode 100644 index 00000000..59f40f08 --- /dev/null +++ b/src/location/mapsgl/mapsgl.pri @@ -0,0 +1,33 @@ + +INCLUDEPATH += mapsgl + +QT += network +CONFIG += qt3d + +include(map2d/map2d.pri) +include(map3d/map3d.pri) + +SOURCES += \ + mapsgl/cameradata.cpp \ + mapsgl/frustum.cpp \ + mapsgl/map.cpp \ + mapsgl/mapitem.cpp \ + mapsgl/mapsphere.cpp \ + mapsgl/projection.cpp \ + mapsgl/tilecache.cpp \ + mapsgl/tile.cpp \ + mapsgl/tilespec.cpp + +PUBLIC_HEADERS += \ + mapsgl/cameradata.h \ + mapsgl/map.h \ + mapsgl/mapitem.h \ + mapsgl/tilecache.h \ + mapsgl/tile.h \ + mapsgl/tilespec.h + +PRIVATE_HEADERS += \ + mapsgl/frustum_p.h \ + mapsgl/map_p.h \ + mapsgl/mapsphere_p.h \ + mapsgl/projection_p.h diff --git a/src/location/mapsgl/mapsphere.cpp b/src/location/mapsgl/mapsphere.cpp new file mode 100644 index 00000000..529d88e6 --- /dev/null +++ b/src/location/mapsgl/mapsphere.cpp @@ -0,0 +1,234 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "mapsphere_p.h" + +#include "tilecache.h" +#include "tilespec.h" +#include "tile.h" +#include "map.h" +#include "map_p.h" + +#include <Qt3D/qglscenenode.h> + +#include <QVector> + +MapSphere::MapSphere(Map* map, MapPrivate *mapPrivate, TileCache *tileCache) + : QObject(0), + tileCache_(tileCache), + mapPrivate_(mapPrivate) +{ + + sphereNode_ = new QGLSceneNode(this); + + connect(tileCache_, + SIGNAL(prefetchingFinished()), + this, + SLOT(prefetchingFinished())); + connect(tileCache_, + SIGNAL(tileFetched(TileSpec)), + this, + SLOT(tileFetched(TileSpec))); + + connect(this, + SIGNAL(tileUpdated()), + map, + SIGNAL(updateRequired())); + + connect(this, + SIGNAL(sphereUpdated()), + map, + SIGNAL(updatesFinished())); +} + +MapSphere::~MapSphere() +{ + QList<QGLSceneNode*> nodes = built_.values(); + for (int i = 0; i < nodes.size(); ++i) { + QGLSceneNode *node = nodes.at(i); + //node->material()->texture()->release(); + node->geometry().clear(); + sphereNode_->removeNode(node); + delete node; + } +} + +void MapSphere::setMappingManager(QGeoMappingManager *manager) +{ + tileCache_->setMappingManager(manager); +} + +QGLSceneNode* MapSphere::sphereSceneNode() const +{ + return sphereNode_; +} + +void MapSphere::clearCache() +{ + // clear cache +} + +// Function to perform housekeeping that require access to GL context +// (access to GL context varies depending on if we are running as +// c++ app or QML app). +void MapSphere::GLContextAvailable() +{ + // need something like this in the cache for + // releasing textures and freeing nodes that + // have been evicted from the GPU + tileCache_->GLContextAvailable(sphereNode_); +// qDeleteAll(obsoleteNodes_); +// obsoleteNodes_.clear(); +} + +void MapSphere::update(const QList<TileSpec> &tiles) +{ + QHash<TileSpec, QGLSceneNode*> stillBuilt; + + QVector<TileSpec> req(tiles.size()); + QVector<TileSpec> draw(tiles.size()); + + int reqSize = 0; + int drawSize = 0; + QList<TileSpec>::const_iterator i = tiles.constBegin(); + QList<TileSpec>::const_iterator tilesEnd = tiles.constEnd(); + while (i != tilesEnd) { + bool use = true; + + /* + If the tile is already built or has been requested then we + shouldn't use it (where "use" means drawing a cached tile or + requested an uncached tile). + */ + + if (built_.contains(*i)) { + stillBuilt.insert(*i, built_.value(*i)); + use = false; + } else if (requested_.contains(*i)){ + use = false; + } + + /* + Otherwise we add it to the correct list + */ + + if (use) { + if (tileCache_->contains(*i)) { + draw[drawSize] = *i; + ++drawSize; + } else { + req[reqSize] = *i; + ++reqSize; + requested_.insert(*i); + } + } + + ++i; + } + + req.resize(reqSize); +// draw.resize(drawSize); + + updateMutex.lock(); + + QHash<TileSpec, QGLSceneNode*>::const_iterator j = built_.constBegin(); + QHash<TileSpec, QGLSceneNode*>::const_iterator end = built_.constEnd(); + while (j != end) { + TileSpec spec = j.key(); + if (!stillBuilt.contains(spec)) { + sphereNode_->removeNode(j.value()); + } + ++j; + } + built_.swap(stillBuilt); + + updateMutex.unlock(); + + for (int i = 0; i < drawSize; ++i) + displayTile(draw.at(i)); + + if (req.isEmpty()) { + emit sphereUpdated(); + } else { + tileCache_->prefetch(req.toList()); + } +} + +void MapSphere::prefetchingFinished() +{ + emit sphereUpdated(); +} + +void MapSphere::tileFetched(const TileSpec &spec) +{ + if (!requested_.contains(spec)) + return; + + displayTile(spec); + + requested_.remove(spec); + + emit tileUpdated(); +} + +void MapSphere::displayTile(const TileSpec &spec) +{ + if (built_.contains(spec)) + return; + + updateMutex.lock(); + Tile tile = tileCache_->get(spec); + QGLSceneNode *node = tile.sceneNode(); + if (!node) { + node = mapPrivate_->createTileNode(tile); + tile.setSceneNode(node); + tile.bind(); + tileCache_->update(spec, tile); + } + if (node) { + sphereNode_->addNode(node); + built_.insert(spec, node); + } + updateMutex.unlock(); + +// qWarning() << tileCache_->diskUsage() << tileCache_->maxDiskUsage() +// << tileCache_->memoryUsage() << tileCache_->maxMemoryUsage() +// << tileCache_->textureUsage() << tileCache_->maxTextureUsage(); +} diff --git a/src/location/maps/qgeomapdata_p.h b/src/location/mapsgl/mapsphere_p.h index 1bd1ccc5..95d015a1 100644 --- a/src/location/maps/qgeomapdata_p.h +++ b/src/location/mapsgl/mapsphere_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOMAPDATA_P_H -#define QGEOMAPDATA_P_H +#ifndef MAPSPHERE_H +#define MAPSPHERE_H // // W A R N I N G @@ -53,58 +52,71 @@ // We mean it. // -#include "qgeomapgroupobject.h" +#include "qglobal.h" -#include <QGraphicsScene> -#include <QGraphicsItem> -#include "qgeocoordinate.h" -#include "qgraphicsgeomap.h" -#include <private/projwrapper_p.h> +#include <QObject> +#include <QSet> +#include <QHash> #include <QList> +#include <QMutex> + QT_BEGIN_NAMESPACE -class QGeoMappingManagerEngine; -class QGeoMapObjectEngine; -class QGeoMapOverlay; +class QGLSceneNode; + +class TileSpec; +class TileCache; + +class Map; +class MapPrivate; + +class QGeoMappingManager; -class QGeoMapDataPrivate : public QObject +class Q_LOCATION_EXPORT MapSphere : public QObject { Q_OBJECT public: - QGeoMapDataPrivate(QGeoMapData *parent, QGeoMappingManagerEngine *engine); - virtual ~QGeoMapDataPrivate(); + MapSphere(Map* map, MapPrivate *mapPrivate, TileCache *tileCache); + ~MapSphere(); - QGeoMappingManagerEngine *engine; - QGeoMapGroupObject* containerObject; + void setMappingManager(QGeoMappingManager *manager); - qreal zoomLevel; - QPointF shiftSinceLastInval; - qreal bearing; - qreal tilt; - QGeoCoordinate center; - QSizeF windowSize; - QGraphicsGeoMap::MapType mapType; - QGraphicsGeoMap::ConnectivityMode connectivityMode; + QGLSceneNode* sphereSceneNode() const; - QList<QGeoMapOverlay*> overlays; + // TODO Quick temporary thread protection. + QMutex updateMutex; + // when running as QML app we can't access GL context anywhere + // but QSG rendering thread. + void GLContextAvailable(); - bool blockPropertyChangeSignals; +public slots: + void clearCache(); + void update(const QList<TileSpec> &tiles); - virtual void addObject(QGeoMapObject *object); - virtual void removeObject(QGeoMapObject *object); - void clearObjects(); +private slots: + void tileFetched(const TileSpec &spec); + void prefetchingFinished(); - virtual QPointF coordinateToScreenPosition(double lon, double lat) const; +signals: + void tileUpdated(); + void sphereUpdated(); - void emitUpdateMapDisplay(const QRectF &target = QRectF()); - - QGeoMapData *q_ptr; - Q_DECLARE_PUBLIC(QGeoMapData) private: - Q_DISABLE_COPY(QGeoMapDataPrivate) + void displayTile(const TileSpec &spec); + + TileCache *tileCache_; + int minZoom_; + + QSet<TileSpec> requested_; + QHash<TileSpec, QGLSceneNode*> built_; + + QGLSceneNode* sphereNode_; + + MapPrivate* mapPrivate_; + QList<QGLSceneNode*> obsoleteNodes_; }; QT_END_NAMESPACE -#endif +#endif // MAPSPHERE_H diff --git a/src/location/mapsgl/projection.cpp b/src/location/mapsgl/projection.cpp new file mode 100644 index 00000000..906fe47f --- /dev/null +++ b/src/location/mapsgl/projection.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "projection_p.h" + +#include "qgeocoordinate.h" + +#include <qvector2d.h> +#include <qvector3d.h> +#include <QMatrix4x4> +#include <qnumeric.h> + +#include <cmath> + +Projection::Projection() {} + +Projection::~Projection() {} + +QVector3D Projection::mercatorToPoint(const QVector2D &mercator) const +{ + return this->coordToPoint(mercatorToCoord(mercator)); +} + +QVector2D Projection::pointToMercator(const QVector3D &point) const +{ + return coordToMercator(this->pointToCoord(point)); +} + +QVector2D Projection::coordToMercator(const QGeoCoordinate &coord) const +{ + const double pi = M_PI; + + double lon = coord.longitude() / 360.0 + 0.5; + + double lat = coord.latitude(); + lat = 0.5 - (log(tan((pi / 4.0) + (pi / 2.0) * lat / 180.0)) / pi) / 2.0; + lat = qMax(0.0, lat); + lat = qMin(1.0, lat); + + return QVector2D(lon, lat); +} + +double Projection::realmod(const double a, const double b) +{ + quint64 div = static_cast<quint64>(a / b); + return a - static_cast<double>(div) * b; +} + +QGeoCoordinate Projection::mercatorToCoord(const QVector2D &mercator) const +{ + const double pi = M_PI; + + double fx = mercator.x(); + double fy = mercator.y(); + + if (fy < 0.0) + fy = 0.0; + else if (fy > 1.0) + fy = 1.0; + + double lat; + + if (fy == 0.0) + lat = 90.0; + else if (fy == 1.0) + lat = -90.0; + else + lat = (180.0 / pi) * (2.0 * atan(exp(pi * (1.0 - 2.0 * fy))) - (pi / 2.0)); + + double lng; + if (fx >= 0) { + lng = realmod(fx, 1.0); + } else { + lng = realmod(1.0 - realmod(-1.0 * fx, 1.0), 1.0); + } + + lng = lng * 360.0 - 180.0; + + return QGeoCoordinate(lat, lng, 0.0); +} diff --git a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.h b/src/location/mapsgl/projection_p.h index 1dec8a55..d3585503 100644 --- a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.h +++ b/src/location/mapsgl/projection_p.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,9 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - -#ifndef QGEOTILEDMAPPOLYGONOBJECT_INFO_P_H -#define QGEOTILEDMAPPOLYGONOBJECT_INFO_P_H +#ifndef PROJECTION_H +#define PROJECTION_H // // W A R N I N G @@ -53,38 +52,34 @@ // We mean it. // -#include "qgeotiledmapobjectinfo_p.h" - -#include <QPen> -#include <QBrush> -#include <QPolygonF> - +#include "qglobal.h" QT_BEGIN_NAMESPACE -class QGraphicsPolygonItem; -class QGeoMapPolygonObject; +class QGeoCoordinate; +class QVector2D; +class QVector3D; -class QGeoTiledMapPolygonObjectInfo : public QGeoTiledMapObjectInfo +class Q_AUTOTEST_EXPORT Projection { - Q_OBJECT public: - QGeoTiledMapPolygonObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject); - ~QGeoTiledMapPolygonObjectInfo(); + Projection(); + virtual ~Projection(); - QGeoMapPolygonObject *polygon; - QGraphicsPolygonItem *polygonItem; + virtual QVector3D coordToPoint(const QGeoCoordinate &coord) const = 0; + virtual QGeoCoordinate pointToCoord(const QVector3D &point) const = 0; -public slots: - void pathChanged(const QList<QGeoCoordinate> &path); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); + QVector2D coordToMercator(const QGeoCoordinate &coord) const; + QGeoCoordinate mercatorToCoord(const QVector2D &mercator) const; + virtual QVector3D mercatorToPoint(const QVector2D &mercator) const; + virtual QVector2D pointToMercator(const QVector3D &point) const; + + virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress) = 0; private: - void genPoly(); + static double realmod(const double a, const double b); }; QT_END_NAMESPACE -#endif //QGEOTILEDMAPPOLYGONOBJECT_INFO_P_H - +#endif // PROJECTION_H diff --git a/src/imports/location/qdeclarativegeomapobjectborder.cpp b/src/location/mapsgl/tile.cpp index d0364410..4e1d24a1 100644 --- a/src/imports/location/qdeclarativegeomapobjectborder.cpp +++ b/src/location/mapsgl/tile.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,49 +38,75 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include "tile.h" -#include "qdeclarativegeomapobjectborder_p.h" - -#include <QColor> -#include <QBrush> +#include <Qt3D/qgltexture2d.h> +#include <Qt3D/qglscenenode.h> QT_BEGIN_NAMESPACE -QDeclarativeGeoMapObjectBorder::QDeclarativeGeoMapObjectBorder(QObject *parent) - : QObject(parent), - m_width(1) {} +Tile::Tile() {} -QDeclarativeGeoMapObjectBorder::~QDeclarativeGeoMapObjectBorder() {} +Tile::Tile(const TileSpec &spec) + : spec_(spec), + texture_(0), + sceneNode_(0), + bound_(false) {} -void QDeclarativeGeoMapObjectBorder::setColor(const QColor &color) +bool Tile::operator == (const Tile &rhs) const { - if (m_color == color) - return; + return (spec_ == rhs.spec_); +} + +void Tile::setTileSpec(const TileSpec &spec) +{ + spec_ = spec; +} + +TileSpec Tile::tileSpec() const +{ + return spec_; +} + +void Tile::setTexture(QGLTexture2D *texture) +{ + texture_ = texture; +} + +QGLTexture2D* Tile::texture() const +{ + return texture_; +} - m_color = color; - emit colorChanged(m_color); +void Tile::setSceneNode(QGLSceneNode *sceneNode) +{ + sceneNode_ = sceneNode; } -QColor QDeclarativeGeoMapObjectBorder::color() const +QGLSceneNode* Tile::sceneNode() const { - return m_color; + return sceneNode_; } -void QDeclarativeGeoMapObjectBorder::setWidth(int width) +void Tile::bind() { - if (m_width == width || width <= 0) + if (bound_) return; - m_width = width; - emit widthChanged(width); + texture_->bind(); +// texture_->clearImage(); + + bound_ = true; } -int QDeclarativeGeoMapObjectBorder::width() const +void Tile::setBound(bool bound) { - return m_width; + bound_ = bound; } -#include "moc_qdeclarativegeomapobjectborder_p.cpp" +bool Tile::isBound() const +{ + return bound_; +} QT_END_NAMESPACE - diff --git a/src/location/maps/qgeomapoverlay.h b/src/location/mapsgl/tile.h index 2e887282..6a83bf78 100644 --- a/src/location/maps/qgeomapoverlay.h +++ b/src/location/mapsgl/tile.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,44 +38,46 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#ifndef TILE_H +#define TILE_H -#ifndef QGEOMAPOVERLAY_H -#define QGEOMAPOVERLAY_H +#include "qglobal.h" -#include "qmobilityglobal.h" - -#include <QList> -#include <QObject> +#include "tilespec.h" QT_BEGIN_NAMESPACE -class QPainter; -class QStyleOptionGraphicsItem; - -class QGeoMapData; -class QGeoMapOverlayPrivate; +class QGLTexture2D; +class QGLSceneNode; -class Q_LOCATION_EXPORT QGeoMapOverlay +class Q_LOCATION_EXPORT Tile { public: - QGeoMapOverlay(); - virtual ~QGeoMapOverlay(); + Tile(); + Tile(const TileSpec &spec); - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option) = 0; + bool operator == (const Tile &rhs) const; -protected: - QGeoMapData const * mapData() const; + void setTileSpec(const TileSpec &spec); + TileSpec tileSpec() const; -private: - void setMapData(QGeoMapData * mapData); + void setTexture(QGLTexture2D *texture); + QGLTexture2D* texture() const; - QGeoMapOverlayPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapOverlay) - Q_DISABLE_COPY(QGeoMapOverlay) + void setSceneNode(QGLSceneNode *sceneNode); + QGLSceneNode *sceneNode() const; - friend class QGeoMapData; + void bind(); + void setBound(bool bound); + bool isBound() const; + +private: + TileSpec spec_; + QGLTexture2D *texture_; + QGLSceneNode *sceneNode_; + bool bound_; }; QT_END_NAMESPACE -#endif +#endif // TILE_H diff --git a/src/location/mapsgl/tilecache.cpp b/src/location/mapsgl/tilecache.cpp new file mode 100644 index 00000000..50111e2e --- /dev/null +++ b/src/location/mapsgl/tilecache.cpp @@ -0,0 +1,455 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "tilecache.h" + +#include "tile.h" +#include "tilespec.h" + +#include "qgeomappingmanager.h" + +#include <QDir> +#include <QRegExp> +#include <QThread> +#include <QMetaType> +#include <QDebug> + +#include <Qt3D/qgltexture2d.h> +#include <Qt3D/qglscenenode.h> + +Q_DECLARE_METATYPE(TileSpec) +Q_DECLARE_METATYPE(QList<TileSpec>) + +struct TileDisk +{ + ~TileDisk() + { +// qWarning() << "evicting (disk) " << spec; + cache->evictFromDiskCache(this); + } + + TileSpec spec; + QString filename; + TileCache *cache; +}; + +struct TileMemory +{ + ~TileMemory() + { +// qWarning() << "evicting (memory) " << spec; + cache->evictFromMemoryCache(this); + } + + TileSpec spec; + QPixmap pixmap; + TileCache *cache; +}; + +struct TileTexture +{ + ~TileTexture() + { +// qWarning() << "evicting (texture) " << spec; + cache->evictFromTextureCache(this); + } + + TileSpec spec; + bool bound; + QGLTexture2D *texture; + QGLSceneNode *node; + TileCache *cache; +}; + +TileCache::TileCache( + const QString &directory, + QObject *parent) + : QObject(parent), + directory_(directory) +{ + qRegisterMetaType<TileSpec>(); + qRegisterMetaType<QList<TileSpec> >(); + + + if (directory_.isEmpty()) { + QString dirname = QLatin1String(".tilecache"); + QDir home = QDir::home(); + if (!home.exists(dirname)) + home.mkdir(dirname); + directory_ = home.filePath(dirname); + } + qDebug() << __FUNCTION__ << directory_; + + diskCache_.setMaxCost(100 * 1024 * 1024); + memoryCache_.setMaxCost(50 * 1024 * 1024); + textureCache_.setMaxCost(100 * 1024 * 1024); + + loadTiles(); +} + +TileCache::~TileCache() +{ + delete manager_; +} + +void TileCache::setMappingManager(QGeoMappingManager *manager) +{ + manager_ = manager; + connect(manager_, + SIGNAL(tileFinished(TileSpec,QByteArray)), + this, + SLOT(insert(TileSpec,QByteArray))); + connect(manager_, + SIGNAL(tileError(TileSpec,QString)), + this, + SLOT(handleError(TileSpec,QString))); + connect(manager_, + SIGNAL(queueFinished()), + this, + SIGNAL(prefetchingFinished())); +} + +void TileCache::setMaxDiskUsage(int diskUsage) +{ + diskCache_.setMaxCost(diskUsage); +} + +int TileCache::maxDiskUsage() const +{ + return diskCache_.maxCost(); +} + +int TileCache::diskUsage() const +{ + return diskCache_.totalCost(); +} + +void TileCache::setMaxMemoryUsage(int memoryUsage) +{ + memoryCache_.setMaxCost(memoryUsage); +} + +int TileCache::maxMemoryUsage() const +{ + return memoryCache_.maxCost(); +} + +int TileCache::memoryUsage() const +{ + return memoryCache_.totalCost(); +} + +void TileCache::setMaxTextureUsage(int textureUsage) +{ + textureCache_.setMaxCost(textureUsage); +} + +int TileCache::maxTextureUsage() const +{ + return textureCache_.maxCost(); +} + +int TileCache::textureUsage() const +{ + return textureCache_.totalCost(); +} + +void TileCache::prefetch(const QList<TileSpec> &tiles) +{ + if (!manager_) + return; + + manager_->requestTiles(tiles); +} + +void TileCache::GLContextAvailable(QGLSceneNode *parentNode) +{ + int size = cleanupList_.size(); + for (int i = 0; i < size; ++i) { + Tile t = cleanupList_.at(i); + QGLSceneNode *node = t.sceneNode(); + if (node) { + parentNode->removeNode(node); + delete node; + } + QGLTexture2D *texture = t.texture(); + if (texture) { + texture->release(); + delete texture; + } + } + cleanupList_.clear(); +} + +bool TileCache::contains(const TileSpec &spec) const +{ + return keys_.contains(spec); +} + +Tile TileCache::get(const TileSpec &spec) +{ + if (textureCache_.contains(spec)) { + TileTexture *tt = textureCache_.object(spec); + + Tile t = Tile(tt->spec); + t.setTexture(tt->texture); + t.setSceneNode(tt->node); + t.setBound(tt->bound); + return t; + } +// if (memoryCache_.contains(spec)) { +// TileMemory *tm = memoryCache_.object(spec); +// TileTexture *tt = addToTextureCache(tm->spec, tm->pixmap); + +// Tile t = Tile(tt->spec); +// t.setTexture(tt->texture); +// t.setSceneNode(tt->node); +// t.setBound(tt->bound); +// return t; +// } + if (diskCache_.contains(spec)) { + TileDisk *td = diskCache_.object(spec); +// TileMemory *tm = addToMemoryCache(td->spec, QPixmap(td->filename)); +// TileTexture *tt = addToTextureCache(tm->spec, tm->pixmap); + TileTexture *tt = addToTextureCache(td->spec, QPixmap(td->filename)); + + Tile t = Tile(tt->spec); + t.setTexture(tt->texture); + t.setSceneNode(tt->node); + t.setBound(tt->bound); + return t; + } + + return Tile(); +} + +// TODO rename so this is less strange +// OR do node creation in here somehow +void TileCache::update(const TileSpec &spec, const Tile &tile) +{ + TileTexture *tt = textureCache_.object(spec); + if (tt) { + tt->node = tile.sceneNode(); + tt->texture = tile.texture(); + tt->bound = tile.isBound(); + } +} + +void TileCache::insert(const TileSpec &spec, const QByteArray &bytes) +{ + keys_.insert(spec); + + QString filename = tileSpecToFilename(spec, directory_); + + QPixmap pixmap; + if (!pixmap.loadFromData(bytes)) { + handleError(spec, QLatin1String("Problem with tile image")); + return; + } + + QFile file(filename); + file.open(QIODevice::WriteOnly); + file.write(bytes); + file.close(); + + addToDiskCache(spec, filename); +// addToMemoryCache(spec, pixmap); + addToTextureCache(spec, pixmap); + + emit tileFetched(spec); +} + +void TileCache::evictFromDiskCache(TileDisk *td) +{ + keys_.remove(td->spec); + QFile::remove(td->filename); +} + +void TileCache::evictFromMemoryCache(TileMemory */*tm*/) +{ +} + +void TileCache::evictFromTextureCache(TileTexture *tt) +{ + Tile t(tt->spec); + t.setTexture(tt->texture); + t.setSceneNode(tt->node); + cleanupList_ << t; +} + +TileDisk* TileCache::addToDiskCache(const TileSpec &spec, const QString &filename) +{ + keys_.insert(spec); + +// qWarning() << "adding (disk) " << spec; + + TileDisk *td = new TileDisk; + td->spec = spec; + td->filename = filename; + td->cache = this; + + QFileInfo fi(filename); + int diskCost = fi.size(); + + diskCache_.insert(spec, + td, + diskCost); + + return td; +} + +TileMemory* TileCache::addToMemoryCache(const TileSpec &spec, const QPixmap &pixmap) +{ + keys_.insert(spec); + +// qWarning() << "adding (memory) " << spec; + + TileMemory *tm = new TileMemory; + tm->spec = spec; + tm->pixmap = pixmap; + tm->cache = this; + + int memoryCost = pixmap.width() * pixmap.height() * pixmap.depth() / 8; + + memoryCache_.insert(spec, + tm, + memoryCost); + + return tm; +} + +TileTexture* TileCache::addToTextureCache(const TileSpec &spec, const QPixmap &pixmap) +{ + keys_.insert(spec); + +// qWarning() << "adding (texture) " << spec; + + TileTexture *tt = new TileTexture; + tt->spec = spec; + tt->texture = new QGLTexture2D(); + tt->texture->setPixmap(pixmap); + tt->texture->setHorizontalWrap(QGL::ClampToEdge); + tt->texture->setVerticalWrap(QGL::ClampToEdge); + +// tt->texture->bind(); +// tt->texture->clearImage(); + + tt->node = 0; + tt->cache = this; + + int textureCost = pixmap.width() * pixmap.height() * pixmap.depth() / 8;; + + textureCache_.insert(spec, + tt, + textureCost); + + return tt; +} + +void TileCache::handleError(const TileSpec &, const QString &error) +{ + qWarning() << "tile request error " << error; +} + +void TileCache::loadTiles() +{ + QStringList formats; + formats << QLatin1String("*.png"); + + QDir dir(directory_); + //QStringList files = dir.entryList(formats, QDir::Files, QDir::Time | QDir::Reversed); + QStringList files = dir.entryList(formats, QDir::Files); + + qDebug() << __FUNCTION__ << "tiles: " << files.size(); + for (int i = 0; i < files.size(); ++i) { + + TileSpec spec = filenameToTileSpec(files.at(i)); + if (spec.zoom() == -1) + continue; + QString filename = dir.filePath(files.at(i)); + qDebug() << __FUNCTION__ << "tile iteration: " << i; + addToDiskCache(spec, filename); + } +} + +QString TileCache::tileSpecToFilename(const TileSpec &spec, const QString &directory) +{ + QString filename = QString::number(spec.zoom()); + filename += QLatin1String("-"); + filename += QString::number(spec.x()); + filename += QLatin1String("-"); + filename += QString::number(spec.y()); + filename += QLatin1String(".png"); + + QDir dir = QDir(directory); + + return dir.filePath(filename); +} + +TileSpec TileCache::filenameToTileSpec(const QString &filename) +{ + TileSpec spec; + QRegExp r(QLatin1String("(\\d+)-(\\d+)-(\\d+).png")); + + int index = r.indexIn(filename); + if (index != -1) { + bool ok = false; + + int zoom = r.cap(1).toInt(&ok); + if (!ok) + return spec; + + ok = false; + int x = r.cap(2).toInt(&ok); + if (!ok) + return spec; + + ok = false; + int y = r.cap(3).toInt(&ok); + if (!ok) + return spec; + + spec.setZoom(zoom); + spec.setX(x); + spec.setY(y); + } + + return spec; +} diff --git a/src/location/mapsgl/tilecache.h b/src/location/mapsgl/tilecache.h new file mode 100644 index 00000000..8dba2221 --- /dev/null +++ b/src/location/mapsgl/tilecache.h @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef TILECACHE_H +#define TILECACHE_H + +#include "qmobilityglobal.h" + +#include <QObject> +#include <QCache> +#include <QSet> + +class QGeoMappingManager; + +class TileSpec; +class Tile; + +class TileDisk; +class TileMemory; +class TileTexture; + +class QGLSceneNode; + +class QPixmap; +class QThread; + +class Q_LOCATION_EXPORT TileCache : public QObject +{ + Q_OBJECT +public: + TileCache(const QString &directory = QString(), QObject *parent = 0); + ~TileCache(); + + void setMappingManager(QGeoMappingManager *manager); + + void setMaxDiskUsage(int diskUsage); + int maxDiskUsage() const; + int diskUsage() const; + + void setMaxMemoryUsage(int memoryUsage); + int maxMemoryUsage() const; + int memoryUsage() const; + + void setMaxTextureUsage(int textureUsage); + int maxTextureUsage() const; + int textureUsage() const; + + void GLContextAvailable(QGLSceneNode *parentNode); + + bool contains(const TileSpec &spec) const; + Tile get(const TileSpec &spec); + + void update(const TileSpec &spec, const Tile &tile); + + void prefetch(const QList<TileSpec> &tiles); + + void evictFromDiskCache(TileDisk *td); + void evictFromMemoryCache(TileMemory *tm); + void evictFromTextureCache(TileTexture *tt); + +private slots: + void insert(const TileSpec &spec, const QByteArray &bytes); + void handleError(const TileSpec &spec, const QString &errorString); + +signals: + void beginPrefetch(const QList<TileSpec> &tiles); + void tileFetched(const TileSpec &spec); + void prefetchingFinished(); + +private: + void loadTiles(); + + TileDisk* addToDiskCache(const TileSpec &spec, const QString &filename); + TileMemory* addToMemoryCache(const TileSpec &spec, const QPixmap &pixmap); + TileTexture* addToTextureCache(const TileSpec &spec, const QPixmap &pixmap); + + static QString tileSpecToFilename(const TileSpec &spec, const QString &directory); + static TileSpec filenameToTileSpec(const QString &filename); + + QString directory_; + + int diskSize_; + int memorySize_; + int textureSize_; + + QSet<TileSpec> keys_; + QCache<TileSpec, TileDisk > diskCache_; + QCache<TileSpec, TileMemory > memoryCache_; + QCache<TileSpec, TileTexture > textureCache_; + + QList<Tile> cleanupList_; + + QGeoMappingManager *manager_; +}; + + +#endif // TILECACHE_H diff --git a/src/location/mapsgl/tilecamera.cpp b/src/location/mapsgl/tilecamera.cpp new file mode 100644 index 00000000..9c10f423 --- /dev/null +++ b/src/location/mapsgl/tilecamera.cpp @@ -0,0 +1,261 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "tilecamera.h" + +#include "spheregeometry.h" + +#include <QVector3D> +#include <qnumeric.h> +#include <qglcamera.h> + +#include <cmath> + +TileCamera::TileCamera() + : latitude_(-27.5), + longitude_(153), + distance_(0.1), + bearing_(0.0), + tilt_(0.0), + aspectRatio_(1.0), + camera_(new QGLCamera()) +{ +} + +TileCamera::~TileCamera() +{ + delete camera_; +} + +// Up and right units are bit obscure still, fixme +void TileCamera::rotateCamera(const SphereGeometry & sphere, double up, double right) +{ + QVector3D view = camera_->eye() - camera_->center(); + QVector3D side = QVector3D::normal(view, camera_->upVector()); + QMatrix4x4 rotationMatrix; + // First determine how big angle and about which axis' to rotate + // and express them with a rotation matrix (spherical rotation around origin) + rotationMatrix.rotate(right / sphere.zoomLevel(), camera_->upVector()); + rotationMatrix.rotate(up / sphere.zoomLevel(), side); + // Then rotate the eye and center of the camera + camera_->setCenter(camera_->center() * rotationMatrix); + camera_->setEye(camera_->eye() * rotationMatrix); +} + +void TileCamera::setCamera(const SphereGeometry &sphere, + double latitude, + double longitude, + double distance, + double bearing, + double tilt, + double aspectRatio) +{ + QVector3D c = sphere.coordToPoint(latitude, longitude); + QVector3D e = sphere.coordToPoint(latitude, longitude, sphere.radius() * distance); + + camera_->setCenter(c); + camera_->setEye(e); + + QVector3D view = camera_->eye() - camera_->center(); + QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0)); + QVector3D up = QVector3D::normal(side, view); + + // define rotation around view vector and apply it to up vector + QMatrix4x4 mBearing; + mBearing.rotate(-1.0 * bearing, view); + camera_->setUpVector(mBearing * up); + + // define rotation around new side vector and apply it to eye + QVector3D side2 = QVector3D::normal(mBearing * up, view); + QMatrix4x4 mTilt; + mTilt.rotate(tilt, side2); + camera_->setEye((mTilt * view) + c); + + // reset the up vector after tilting + view = camera_->eye() - camera_->center(); + up = QVector3D::normal(view, side2); + camera_->setUpVector(up); + + // set near and far planes + camera_->setNearPlane(1); + camera_->setFarPlane(2.0 * sphere.radius() * distance); + zoom_ = sphere.zoomLevel(); +} + +/* TODO improve zoomCamera a lot. Current implementation is very hacky. + + @factor: fractions of a zoom level to zoom in. Doubling a zoom level + roughly doubles the distance from the earth. + + @detailPreference: whether the distance from the earth should be that of the eye from + closest point on earth, or from eye to center (center is where we are looking at). + + */ +void TileCamera::zoomCamera(SphereGeometry& sphere, double factor, DetailPreference detailPreference) +{ + if (!(-1.0 < factor && factor < 1.0)) { + qWarning() << "Zoom factor must be between -1.0 and 1.0, you gave: " << factor; + return; + } + + QVector3D view = camera_->eye() - camera_->center(); + Q_ASSERT(view.length() > 0.0); + double viewVectorLength = view.length(); + double eyeVectorLength = camera_->eye().length(); + double sphereRadius = sphere.radius(); + double zoomDistance; + if (detailPreference == DetailPreferenceNear) { + qDebug() << "Zooming, preferring details/tiles near, factor: " << factor; + double viewEyeDotProduct = QVector3D::dotProduct(view, camera_->eye()); + // Dodgy, fixme + bool zoomOut = false; + if (factor < 0.0) { + factor = -factor; + zoomOut = true; + } + factor += 1.0; + // Look for the multiplication factor so that multiplying the view with the factor + // will result in eye height changing according to given factor. + double sqrtResult = sqrt(pow(viewEyeDotProduct, 2) - 4 * pow(viewVectorLength, 2) * (pow(eyeVectorLength, 2) - pow(sphereRadius + factor * eyeVectorLength - factor * sphereRadius , 2))); + double viewVectorFactor = (-viewEyeDotProduct + sqrtResult) / (2 * pow(viewVectorLength, 2)); + // Dodgy, fixme + if (!zoomOut) + camera_->setEye(camera_->eye() - view * viewVectorFactor); + else + camera_->setEye(view * viewVectorFactor + camera_->eye()); + // Fixme, far too big farplane (no pun intended) + view = camera_->eye() - camera_->center(); + camera_->setFarPlane(sphere.radius() + view.length()); + zoomDistance = camera_->eye().length() - sphere.radius(); + } else if (detailPreference == DetailPreferenceCenter) { + qDebug() << "Zooming, preferring details/tiles at center, factor: " << factor; + factor = -factor; + factor += 1; + camera_->setEye(camera_->center() + view * factor); + view = camera_->eye() - camera_->center(); + camera_->setFarPlane(sphere.radius() + view.length()); + zoomDistance = view.length(); + } else { + qWarning("Unsupported detail preference for zoom."); + return; + } + // Adjust sphere zoom level if necessary + double maxZoomLevel = 18; // TODO this needs to come from the current plugin + double zoomCoefficient = 0.5; // TODO just initial guess + int zoomLevel = int(maxZoomLevel - log(zoomDistance / zoomCoefficient) / log(2.0)); + qDebug() << "Zoom, tilesphere zoom was : " << sphere.zoomLevel(); + qDebug() << "Zoom level (fractional) would be : " << maxZoomLevel - log2(zoomDistance / zoomCoefficient); + if ((int)zoomLevel != sphere.zoomLevel() && zoomLevel < maxZoomLevel && zoomLevel >= 0) { + sphere.setZoomLevel(int(zoomLevel)); +// sphere.update(*this); + } +} + +// Can be done like this if quaternions ease the animation +//void TileCamera::tiltCamera(double tilt, QQuaternion = QQuaternion()) { +// { +// if (!quaternion.isIdentity()) // use quaternion. However, keeping track of 'tilt_' needs to be done +// ... +// else // use tilt angle + +void TileCamera::tiltCamera(const SphereGeometry& sphere, double tilt) +{ + Q_ASSERT(!qIsNaN(tilt)); + camera_->rotateCenter(camera_->tilt(tilt)); + // Don't fall through the sphere surface + if (camera_->eye().length() - sphere.radius() < 0.0) { + qDebug() << "Camera tilt safestop, would go through earth."; + camera_->rotateCenter(camera_->tilt(-tilt)); + } +} + +void TileCamera::rollCamera(const SphereGeometry& sphere, double roll) +{ + Q_UNUSED(sphere); + Q_ASSERT(!qIsNaN(roll)); + camera_->rotateCenter(camera_->roll(roll)); +} + +void TileCamera::panCamera(const SphereGeometry& sphere, double pan) +{ + Q_ASSERT(!qIsNaN(pan)); + camera_->rotateCenter(camera_->pan(pan)); + if (camera_->eye().length() - sphere.radius() < 0.0) { + qDebug() << "Camera pan safety stop, would go through earth."; + camera_->rotateCenter(camera_->pan(-pan)); + } +} + +QGLCamera* TileCamera::camera() const +{ + return camera_; +} + +QVector3D TileCamera::eye() const +{ + return camera_->eye(); +} + +QVector3D TileCamera::view(double x, double y) const +{ + double fov = atan(camera_->viewSize().height() / (2 * camera_->nearPlane())); + + double hf = 2 * tan(fov) * camera_->farPlane(); + double wf = hf * aspectRatio_; + + QVector3D p = camera_->eye(); + QVector3D d = camera_->center() - camera_->eye(); + d.normalize(); + + QVector3D up = camera_->upVector(); + up.normalize(); + + QVector3D right = QVector3D::normal(d, up); + + double x1 = qMin(qMax(x, 0.0), 1.0) - 0.5; + double y1 = qMin(qMax(y, 0.0), 1.0) - 0.5; + + QVector3D c = d * camera_->farPlane(); + c += up * hf * y1; + c += right * wf * x1; + + return c.normalized(); +} + diff --git a/src/location/maps/qgeomapgroupobject.h b/src/location/mapsgl/tilecamera.h index 364e01fd..5fde909b 100644 --- a/src/location/maps/qgeomapgroupobject.h +++ b/src/location/mapsgl/tilecamera.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,50 +38,59 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#ifndef TILECAMERA_H +#define TILECAMERA_H -#ifndef QGEOMAPGROUPOBJECT_H -#define QGEOMAPGROUPOBJECT_H - -#include "qgeomapobject.h" +#include "qglobal.h" QT_BEGIN_NAMESPACE -class QGeoCoordinate; -class QGeoBoundingBox; -class QGeoMapGroupObjectPrivate; +class SphereGeometry; +class QGLCamera; +class QGLSceneNode; +class QVector3D; -class Q_LOCATION_EXPORT QGeoMapGroupObject : public QGeoMapObject +class Q_LOCATION_EXPORT TileCamera { - Q_OBJECT public: - QGeoMapGroupObject(); - ~QGeoMapGroupObject(); - - QGeoMapObject::Type type() const; - - QGeoBoundingBox boundingBox() const; - bool contains(const QGeoCoordinate &coordinate) const; + TileCamera(); + ~TileCamera(); - QList<QGeoMapObject*> childObjects() const; - void addChildObject(QGeoMapObject *childObject); - void removeChildObject(QGeoMapObject *childObject); - void clearChildObjects(); + enum DetailPreference { + DetailPreferenceNear, + DetailPreferenceCenter + }; - void setVisible(bool visible); + // Reset the camera (to look at lon,lat, with given distance, tilt etc.) + void setCamera(const SphereGeometry &sphere, + double latitude, + double longitude, + double distance, + double bearing, + double tilt, + double aspectRatio); + void tiltCamera(const SphereGeometry& sphere, double tilt); + void rollCamera(const SphereGeometry& sphere, double roll); + void panCamera(const SphereGeometry& sphere, double pan); + void rotateCamera(const SphereGeometry& sphere, double up, double right); + void zoomCamera(SphereGeometry& sphere, double factor, DetailPreference detailPreference = DetailPreferenceNear); - void setMapData(QGeoMapData *mapData); + QGLCamera* camera() const; -Q_SIGNALS: - void childAdded(QGeoMapObject *childObject); - void childUpdated(QGeoMapObject *childObject); - void childRemoved(QGeoMapObject *childObject); + QVector3D eye() const; + QVector3D view(double x, double y) const; private: - QGeoMapGroupObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapGroupObject) - Q_DISABLE_COPY(QGeoMapGroupObject) + double latitude_; + double longitude_; + double distance_; + double bearing_; + double tilt_; + double zoom_; + double aspectRatio_; + QGLCamera* camera_; }; QT_END_NAMESPACE -#endif +#endif // TILECAMERA_H diff --git a/src/location/maps/qgeomappolygonobject.h b/src/location/mapsgl/tilespec.cpp index a293f0af..17d51682 100644 --- a/src/location/maps/qgeomappolygonobject.h +++ b/src/location/mapsgl/tilespec.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,53 +38,93 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include "tilespec.h" +#include <QDebug> -#ifndef QGEOMAPPOLYGONOBJECT_H -#define QGEOMAPPOLYGONOBJECT_H +QT_BEGIN_NAMESPACE -#include "qgeomapobject.h" +TileSpec::TileSpec() + : zoom_(-1), + x_(-1), + y_(-1) {} -#include <QList> -#include <QPen> -#include <QBrush> +TileSpec::TileSpec(int zoom, int x, int y) + : zoom_(zoom), + x_(x), + y_(y) {} -QT_BEGIN_NAMESPACE +void TileSpec::setZoom(int zoom) +{ + zoom_ = zoom; +} -class QGeoMapPolygonObjectPrivate; +int TileSpec::zoom() const +{ + return zoom_; +} -class Q_LOCATION_EXPORT QGeoMapPolygonObject : public QGeoMapObject +void TileSpec::setX(int x) { - Q_OBJECT - Q_PROPERTY(QList<QGeoCoordinate> path READ path WRITE setPath NOTIFY pathChanged) - Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged) - Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged) + x_ = x; +} -public: - QGeoMapPolygonObject(); - ~QGeoMapPolygonObject(); +int TileSpec::x() const +{ + return x_; +} - QGeoMapObject::Type type() const; +void TileSpec::setY(int y) +{ + y_ = y; +} - void setPath(const QList<QGeoCoordinate> &path); - QList<QGeoCoordinate> path() const; +int TileSpec::y() const +{ + return y_; +} - void setPen(const QPen &pen); - QPen pen() const; +bool TileSpec::operator == (const TileSpec &rhs) const +{ + if (zoom_ != rhs.zoom_) + return false; - void setBrush(const QBrush &brush); - QBrush brush() const; + if (x_ != rhs.x_) + return false; -Q_SIGNALS: - void pathChanged(const QList<QGeoCoordinate> &path); - void penChanged(const QPen &pen); - void brushChanged(const QBrush &brush); + if (y_ != rhs.y_) + return false; -private: - QGeoMapPolygonObjectPrivate *d_ptr; - Q_DECLARE_PRIVATE(QGeoMapPolygonObject) - Q_DISABLE_COPY(QGeoMapPolygonObject) -}; + return true; +} -QT_END_NAMESPACE +bool TileSpec::operator < (const TileSpec &rhs) const +{ + if (zoom_ < rhs.zoom_) + return true; + if (zoom_ > rhs.zoom_) + return false; + + if (x_ < rhs.x_) + return true; + if (x_ > rhs.x_) + return false; + + return (y_ < rhs.y_); -#endif +} + +unsigned int qHash(const TileSpec &spec) +{ + unsigned int result = (spec.zoom() * 17) % 31; + result += ((spec.x() * 19) % 31) << 5; + result += ((spec.y() * 23) % 31) << 10; + return result; +} + +QDebug operator<< (QDebug dbg, const TileSpec &spec) +{ + dbg << spec.zoom() << spec.x() << spec.y(); + return dbg; +} + +QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapgroupobject_p.h b/src/location/mapsgl/tilespec.h index 9971b533..121ed08e 100644 --- a/src/location/maps/qgeomapgroupobject_p.h +++ b/src/location/mapsgl/tilespec.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Mobility Components. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage @@ -38,36 +38,41 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#ifndef TILESPEC_H +#define TILESPEC_H -#ifndef QGEOMAPGROUPOBJECT_P_H -#define QGEOMAPGROUPOBJECT_P_H - -#include "qgeomapobject.h" - -#include <QObject> -#include <QList> +#include "qglobal.h" QT_BEGIN_NAMESPACE -class QGeoMapGroupObject; - -class QGeoMapGroupObjectPrivate : public QObject +class Q_LOCATION_EXPORT TileSpec { - Q_OBJECT public: - QGeoMapGroupObjectPrivate(QGeoMapGroupObject *p); - ~QGeoMapGroupObjectPrivate(); + TileSpec(); + TileSpec(int zoom, int x, int y); + + void setZoom(int zoom); + int zoom() const; - QList<QGeoMapObject *> children; - quint32 serial; + void setX(int x); + int x() const; -public slots: - void childChangedZValue(int zValue); + void setY(int y); + int y() const; + + bool operator == (const TileSpec &rhs) const; + bool operator < (const TileSpec &rhs) const; private: - QGeoMapGroupObject *q_ptr; + int zoom_; + int x_; + int y_; }; +unsigned int qHash(const TileSpec &spec); + +QDebug operator<<(QDebug, const TileSpec &); + QT_END_NAMESPACE -#endif +#endif // TILESPEC_H diff --git a/src/location/projwrapper_p.cpp b/src/location/projwrapper_p.cpp deleted file mode 100644 index 463cc735..00000000 --- a/src/location/projwrapper_p.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "projwrapper_p.h" -#include <proj_api.h> -#include <QSharedData> -#include <QString> -#include <QPolygonF> -#include <QPointF> -#include "qgeocoordinate.h" - -QT_BEGIN_NAMESPACE - -class ProjCoordinateSystemPrivate : public QSharedData -{ -public: - ProjCoordinateSystemPrivate(const QString &projection, bool latLon); - ProjCoordinateSystemPrivate(const ProjCoordinateSystemPrivate &other); - ~ProjCoordinateSystemPrivate(); - - projPJ projection; - bool latLon; -}; - -ProjCoordinateSystemPrivate::ProjCoordinateSystemPrivate(const QString &projStr, bool isLatLon) -{ - projection = pj_init_plus(projStr.toLatin1().constData()); - Q_ASSERT_X(projection, "pj_init_plus", "invalid projection string"); - latLon = isLatLon; -} - -ProjCoordinateSystemPrivate::ProjCoordinateSystemPrivate(const ProjCoordinateSystemPrivate &other) : - QSharedData(other), - latLon(other.latLon) -{ - char *str = pj_get_def(other.projection, 0); - projection = pj_init_plus(str); - Q_ASSERT_X(projection, "pj_init_plus", "invalid projection string"); - free(str); -} - -ProjCoordinateSystemPrivate::~ProjCoordinateSystemPrivate() -{ - pj_free(projection); -} - -ProjCoordinateSystem::ProjCoordinateSystem(const QString &projection, bool latLon) : - d(new ProjCoordinateSystemPrivate(projection, latLon)) -{} - -ProjCoordinateSystem::ProjCoordinateSystem(const ProjCoordinateSystem &other) : - d(other.d) -{} - -ProjCoordinateSystem::~ProjCoordinateSystem() -{} - -bool ProjCoordinateSystem::isLatLon() const -{ - return d->latLon; -} - -class ProjCoordinatePrivate -{ -public: - ProjCoordinateSystem currentSystem; - double x; - double y; - double z; -}; - -ProjCoordinate::ProjCoordinate(double x, double y, double z, const ProjCoordinateSystem &system) : - d(new ProjCoordinatePrivate) -{ - d->x = x; - d->y = y; - d->z = z; - d->currentSystem = system; -} - -ProjCoordinate::ProjCoordinate(const ProjCoordinate &other) : - d(new ProjCoordinatePrivate) -{ - *this = other; -} - -ProjCoordinate &ProjCoordinate::operator=(const ProjCoordinate &other) -{ - d->x = other.d->x; - d->y = other.d->y; - d->z = other.d->z; - d->currentSystem = other.d->currentSystem; - return *this; -} - -ProjCoordinate::~ProjCoordinate() -{ - delete d; -} - -double ProjCoordinate::x() const -{ - return d->x; -} - -double ProjCoordinate::y() const -{ - return d->y; -} - -double ProjCoordinate::z() const -{ - return d->z; -} - -bool ProjCoordinate::convert(const ProjCoordinateSystem &system) -{ - int result; - double x = d->x, y = d->y, z = d->z; - - if (d->currentSystem.isLatLon()) { - x *= DEG_TO_RAD; - y *= DEG_TO_RAD; - } - - result = pj_transform(d->currentSystem.d->projection, - system.d->projection, - 1, 1, &x, &y, &z); - if (result) { - return false; - } else { - if (system.isLatLon()) { - x *= RAD_TO_DEG; - y *= RAD_TO_DEG; - } - d->x = x; - d->y = y; - d->z = z; - d->currentSystem = system; - return true; - } -} - -QGeoCoordinate ProjCoordinate::toGeoCoordinate() const -{ - double x = d->x; - double y = d->y; - - if (x < -180.0) - x = -180.0; - if (x > 180.0) - x = 180.0; - - if (y < -90.0) - y = -90.0; - if (y > 90.0) - y = 90.0; - - return QGeoCoordinate(y, x, d->z); -} - -class ProjPolygonPrivate -{ -public: - ProjCoordinateSystem currentSystem; -}; - -ProjPolygon::ProjPolygon(const ProjCoordinateSystem &system) : - QList<ProjCoordinate>(), - d(new ProjPolygonPrivate) -{ - d->currentSystem = system; -} - -ProjPolygon::ProjPolygon(const QPolygonF &poly, const ProjCoordinateSystem &system, double scale) : - QList<ProjCoordinate>(), - d(new ProjPolygonPrivate) -{ - d->currentSystem = system; - foreach (QPointF point, poly) { - double x = point.x(); - x /= scale; - double y = point.y(); - y /= scale; - append(ProjCoordinate(x, y, 0.0, system)); - } -} - -ProjPolygon::~ProjPolygon() -{ - delete d; -} - -bool ProjPolygon::convert(const ProjCoordinateSystem &system) -{ - for (int i=0; i<size(); ++i) { - ProjCoordinate coord = at(i); - if (!coord.convert(system)) - return false; - replace(i, coord); - } - - d->currentSystem = system; - return true; -} - -void ProjPolygon::scalarMultiply(double sx, double sy, double sz) -{ - for (int i=0; i<size(); ++i) { - ProjCoordinate &c = operator [](i); - c.d->x *= sx; - c.d->y *= sy; - c.d->z *= sz; - } -} - -QPolygonF ProjPolygon::toPolygonF(double scale) const -{ - QPolygonF poly; - for (int i=0; i<size(); ++i) { - const ProjCoordinate &coord = at(i); - double x = coord.x() * scale; - double y = coord.y() * scale; - poly << QPointF(x, y); - } - return poly; -} - -QT_END_NAMESPACE diff --git a/src/plugins/geoservices/nokia/nokia.pro b/src/plugins/geoservices/nokia/nokia.pro index 807a8249..82080215 100644 --- a/src/plugins/geoservices/nokia/nokia.pro +++ b/src/plugins/geoservices/nokia/nokia.pro @@ -18,8 +18,7 @@ HEADERS += \ qgeoroutexmlparser.h \ qgeoroutingmanagerengine_nokia.h \ qgeoserviceproviderplugin_nokia.h \ - marclanguagecodes.h \ - qgeotiledmapdata_nokia.h + marclanguagecodes.h SOURCES += \ qgeocodereply_nokia.cpp \ @@ -30,8 +29,7 @@ SOURCES += \ qgeoroutereply_nokia.cpp \ qgeoroutexmlparser.cpp \ qgeoroutingmanagerengine_nokia.cpp \ - qgeoserviceproviderplugin_nokia.cpp \ - qgeotiledmapdata_nokia.cpp + qgeoserviceproviderplugin_nokia.cpp include(places/places.pri) diff --git a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp index 3bd6b708..b5cc9c7d 100644 --- a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp +++ b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp @@ -48,9 +48,8 @@ #include "qgeomappingmanagerengine_nokia.h" #include "qgeomapreply_nokia.h" -#include "qgeotiledmapdata_nokia.h" -#include <qgeotiledmaprequest.h> +#include <tilespec.h> #include <QNetworkAccessManager> #include <QNetworkDiskCache> @@ -69,12 +68,15 @@ #define DISK_CACHE_ENABLED 1 #endif -QT_BEGIN_NAMESPACE +#undef DISK_CACHE_ENABLED -#if defined(Q_OS_SYMBIAN) +#ifdef Q_OS_SYMBIAN #include <f32file.h> +#endif +QT_BEGIN_NAMESPACE +#if defined(Q_OS_SYMBIAN) QChar QGeoMappingManagerEngineNokia::findFirstInternalFlashDrive() { QChar flashDrive; @@ -105,7 +107,7 @@ QChar QGeoMappingManagerEngineNokia::findFirstInternalFlashDrive() #endif //Q_OS_SYMBIAN QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, QVariant> ¶meters, QGeoServiceProvider::Error *error, QString *errorString) - : QGeoTiledMappingManagerEngine(parameters), + : QGeoMappingManagerEngine(parameters), m_cache(0), m_host("maptile.maps.svc.ovi.com"), m_token(QGeoServiceProviderFactoryNokia::defaultToken), @@ -113,23 +115,30 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, { Q_UNUSED(error) Q_UNUSED(errorString) +} +QGeoMappingManagerEngineNokia::~QGeoMappingManagerEngineNokia() {} + +void QGeoMappingManagerEngineNokia::init() +{ setTileSize(QSize(256, 256)); setMinimumZoomLevel(0.0); - setMaximumZoomLevel(18.0); + setMaximumZoomLevel(20.0); - QList<QGraphicsGeoMap::MapType> types; - types << QGraphicsGeoMap::StreetMap; - types << QGraphicsGeoMap::SatelliteMapDay; - types << QGraphicsGeoMap::TerrainMap; - setSupportedMapTypes(types); +// QList<QGraphicsGeoMap::MapType> types; +// types << QGraphicsGeoMap::StreetMap; +// types << QGraphicsGeoMap::SatelliteMapDay; +// types << QGraphicsGeoMap::TerrainMap; +// setSupportedMapTypes(types); - QList<QGraphicsGeoMap::ConnectivityMode> modes; - modes << QGraphicsGeoMap::OnlineMode; - setSupportedConnectivityModes(modes); +// QList<QGraphicsGeoMap::ConnectivityMode> modes; +// modes << QGraphicsGeoMap::OnlineMode; +// setSupportedConnectivityModes(modes); m_networkManager = new QNetworkAccessManager(this); + QMap<QString, QVariant> parameters = this->parameters(); + if (parameters.contains("mapping.proxy")) { QString proxy = parameters.value("mapping.proxy").toString(); if (!proxy.isEmpty()) { @@ -199,22 +208,10 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, #endif } -QGeoMappingManagerEngineNokia::~QGeoMappingManagerEngineNokia() {} - -QGeoMapData* QGeoMappingManagerEngineNokia::createMapData() -{ - QGeoMapData *data = new QGeoTiledMapDataNokia(this); - if (!data) - return 0; - - data->setConnectivityMode(QGraphicsGeoMap::OnlineMode); - return data; -} - -QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMapRequest &request) +QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const TileSpec &spec) { // TODO add error detection for if request.connectivityMode() != QGraphicsGeoMap::OnlineMode - QString rawRequest = getRequestString(request); + QString rawRequest = getRequestString(spec); QNetworkRequest netRequest((QUrl(rawRequest))); // The extra pair of parens disambiguates this from a function declaration netRequest.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); @@ -225,7 +222,7 @@ QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMa QNetworkReply* netReply = m_networkManager->get(netRequest); - QGeoTiledMapReply* mapReply = new QGeoMapReplyNokia(netReply, request); + QGeoTiledMapReply* mapReply = new QGeoMapReplyNokia(netReply, spec); // TODO goes badly on linux //qDebug() << "request: " << QString::number(reinterpret_cast<int>(mapReply), 16) << " " << request.row() << "," << request.column(); @@ -234,10 +231,10 @@ QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMa return mapReply; } -QString QGeoMappingManagerEngineNokia::getRequestString(const QGeoTiledMapRequest &request) const +QString QGeoMappingManagerEngineNokia::getRequestString(const TileSpec &spec) const { const int maxDomains = 11; // TODO: hmmm.... - const char subdomain = 'a' + (request.row() + request.column()) % maxDomains; // a...k + const char subdomain = 'a' + (spec.x() + spec.y()) % maxDomains; // a...k static const QString http("http://"); static const QString path("/maptiler/maptile/newest/"); static const QChar dot('.'); @@ -248,13 +245,14 @@ QString QGeoMappingManagerEngineNokia::getRequestString(const QGeoTiledMapReques requestString += dot; requestString += m_host; requestString += path; - requestString += mapTypeToStr(request.mapType()); + //requestString += mapTypeToStr(request.mapType()); + requestString += QLatin1String("normal.day"); requestString += slash; - requestString += QString::number(request.zoomLevel()); + requestString += QString::number(spec.zoom()); requestString += slash; - requestString += QString::number(request.column()); + requestString += QString::number(spec.x()); requestString += slash; - requestString += QString::number(request.row()); + requestString += QString::number(spec.y()); requestString += slash; requestString += sizeToStr(tileSize()); //#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) @@ -291,17 +289,17 @@ QString QGeoMappingManagerEngineNokia::sizeToStr(const QSize &size) return s128; } -QString QGeoMappingManagerEngineNokia::mapTypeToStr(QGraphicsGeoMap::MapType type) -{ - if (type == QGraphicsGeoMap::StreetMap) - return "normal.day"; - else if (type == QGraphicsGeoMap::SatelliteMapDay || - type == QGraphicsGeoMap::SatelliteMapNight) { - return "satellite.day"; - } else if (type == QGraphicsGeoMap::TerrainMap) - return "terrain.day"; - else - return "normal.day"; -} +//QString QGeoMappingManagerEngineNokia::mapTypeToStr(QGraphicsGeoMap::MapType type) +//{ +// if (type == QGraphicsGeoMap::StreetMap) +// return "normal.day"; +// else if (type == QGraphicsGeoMap::SatelliteMapDay || +// type == QGraphicsGeoMap::SatelliteMapNight) { +// return "satellite.day"; +// } else if (type == QGraphicsGeoMap::TerrainMap) +// return "terrain.day"; +// else +// return "normal.day"; +//} QT_END_NAMESPACE diff --git a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h index 70c6cfe1..17e118b0 100644 --- a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h +++ b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h @@ -52,14 +52,17 @@ #include "qgeoserviceproviderplugin_nokia.h" #include <qgeoserviceprovider.h> -#include <qgeotiledmappingmanagerengine.h> +#include <qgeomappingmanagerengine.h> QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkDiskCache; -class QGeoMappingManagerEngineNokia : public QGeoTiledMappingManagerEngine +class QGeoTiledMapReply; +class TileSpec; + +class QGeoMappingManagerEngineNokia : public QGeoMappingManagerEngine { Q_OBJECT public: @@ -68,16 +71,17 @@ public: QString *errorString); ~QGeoMappingManagerEngineNokia(); - QGeoMapData* createMapData(); - QGeoTiledMapReply* getTileImage(const QGeoTiledMapRequest &request); + void init(); + + QGeoTiledMapReply* getTileImage(const TileSpec &spec); private: Q_DISABLE_COPY(QGeoMappingManagerEngineNokia) - QString getRequestString(const QGeoTiledMapRequest &request) const; + QString getRequestString(const TileSpec &spec) const; static QString sizeToStr(const QSize &size); - static QString mapTypeToStr(QGraphicsGeoMap::MapType type); +// static QString mapTypeToStr(QGraphicsGeoMap::MapType type); #if defined(Q_OS_SYMBIAN) QChar findFirstInternalFlashDrive(); #endif //Q_OS_SYMBIAN diff --git a/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp b/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp index 1f11d72a..2440ae46 100644 --- a/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp +++ b/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp @@ -53,8 +53,8 @@ QT_BEGIN_NAMESPACE -QGeoMapReplyNokia::QGeoMapReplyNokia(QNetworkReply *reply, const QGeoTiledMapRequest &request, QObject *parent) - : QGeoTiledMapReply(request, parent), +QGeoMapReplyNokia::QGeoMapReplyNokia(QNetworkReply *reply, const TileSpec &spec, QObject *parent) + : QGeoTiledMapReply(spec, parent), m_reply(reply) { m_reply->setParent(this); @@ -104,19 +104,19 @@ void QGeoMapReplyNokia::networkFinished() if (m_reply->error() != QNetworkReply::NoError) return; - QVariant fromCache = m_reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute); - setCached(fromCache.toBool()); - - if (!isCached()) { - QAbstractNetworkCache *cache = m_reply->manager()->cache(); - if (cache) { - QNetworkCacheMetaData metaData = cache->metaData(m_reply->url()); - QDateTime exp = QDateTime::currentDateTime(); - exp = exp.addDays(14); - metaData.setExpirationDate(exp); - cache->updateMetaData(metaData); - } - } +// QVariant fromCache = m_reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute); +// setCached(fromCache.toBool()); + +// if (!isCached()) { +// QAbstractNetworkCache *cache = m_reply->manager()->cache(); +// if (cache) { +// QNetworkCacheMetaData metaData = cache->metaData(m_reply->url()); +// QDateTime exp = QDateTime::currentDateTime(); +// exp = exp.addDays(14); +// metaData.setExpirationDate(exp); +// cache->updateMetaData(metaData); +// } +// } setMapImageData(m_reply->readAll()); setMapImageFormat("PNG"); diff --git a/src/plugins/geoservices/nokia/qgeomapreply_nokia.h b/src/plugins/geoservices/nokia/qgeomapreply_nokia.h index ee0195bb..40b5aa01 100644 --- a/src/plugins/geoservices/nokia/qgeomapreply_nokia.h +++ b/src/plugins/geoservices/nokia/qgeomapreply_nokia.h @@ -49,6 +49,7 @@ #ifndef QGEOMAPREPLY_NOKIA_H #define QGEOMAPREPLY_NOKIA_H +#include <tilespec.h> #include <qgeotiledmapreply.h> #include <QNetworkReply> @@ -59,7 +60,7 @@ class QGeoMapReplyNokia : public QGeoTiledMapReply Q_OBJECT public: - QGeoMapReplyNokia(QNetworkReply *reply, const QGeoTiledMapRequest &request, QObject *parent = 0); + QGeoMapReplyNokia(QNetworkReply *reply, const TileSpec &spec, QObject *parent = 0); ~QGeoMapReplyNokia(); void abort(); diff --git a/src/src.pro b/src/src.pro index 75e0983e..b321da3d 100644 --- a/src/src.pro +++ b/src/src.pro @@ -1,3 +1,3 @@ TEMPLATE = subdirs CONFIG+=ordered -SUBDIRS += 3rdparty/proj.pro location plugins imports +SUBDIRS += location plugins imports diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 7e1ac347..ad5c6453 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -1,11 +1,5 @@ TEMPLATE = subdirs -#TODO: disable for now since -#declarative testing classes are not yet -#in the main branch of qt declarative -#SUBDIRS += declarative - -CONFIG += ordered SUBDIRS += geotestplugin \ qgeocodingmanagerplugins \ qgeoaddress \ @@ -26,7 +20,8 @@ SUBDIRS += geotestplugin \ qplacereview \ qplacesearchrequest \ qplacesupplier \ - declarative + declarative \ + sphere contains(config_test_jsondb, yes) { SUBDIRS += qplacemanager_jsondb diff --git a/tests/auto/geotestplugin/qplacemanagerengine_test.h b/tests/auto/geotestplugin/qplacemanagerengine_test.h index 120d85c3..ea66b581 100644 --- a/tests/auto/geotestplugin/qplacemanagerengine_test.h +++ b/tests/auto/geotestplugin/qplacemanagerengine_test.h @@ -143,7 +143,7 @@ public: return QPlaceManager::PublicScope; } - QPlaceReply *removePlace(const QGeoPlace &place) + QPlaceIdReply *removePlace(const QGeoPlace &place) { Q_UNUSED(place) diff --git a/tests/auto/sphere/sphere.pro b/tests/auto/sphere/sphere.pro new file mode 100644 index 00000000..936ce57f --- /dev/null +++ b/tests/auto/sphere/sphere.pro @@ -0,0 +1,8 @@ +load(qttest_p4) + +QT += location +CONFIG += qt3d + +INCLUDEPATH = ../../../src/location/mapsgl + +SOURCES += tst_sphere.cpp diff --git a/tests/auto/sphere/tst_sphere.cpp b/tests/auto/sphere/tst_sphere.cpp new file mode 100644 index 00000000..11cfd5c7 --- /dev/null +++ b/tests/auto/sphere/tst_sphere.cpp @@ -0,0 +1,1493 @@ +#include <QObject> +#include <QtTest/QtTest> + +#include "../../../src/location/mapsgl/map3d/sphere_p.h" +#include "../../../src/location/mapsgl/map3d/viewportcamera_p.h" +#include "../../../src/location/mapsgl/frustum_p.h" +#include "../../../src/location/mapsgl/map3d/projection3d_p.h" + +#include <QMetaType> + +#include <cmath> + +Q_DECLARE_METATYPE(Sphere) + +class tst_Sphere : public QObject +{ + Q_OBJECT + +public: + tst_Sphere() { + + } + +private slots: + void x_plane(); + void x_plane_data(); + + void xy_plane_straight(); + void xy_plane_straight_data(); + + void xy_plane_skew(); + void xy_plane_skew_data(); + + void xyz_plane(); + void xyz_plane_data(); + + void camera(); + +private: + Sphere emptySphere(double radius) const; + Sphere basicSphere(double radius) const; + + bool test(const QPlane3D &plane, const Sphere &sphereOut); + + QList<QPlane3D> planes() const; + Sphere planeTest(const QList<QPlane3D> &planes, const QList<int> &planeIndices) const; +}; + + +Sphere tst_Sphere::emptySphere(double radius) const +{ + return Sphere(radius, QList<SpherePatch>()); +} + +Sphere tst_Sphere::basicSphere(double radius) const +{ + QList<Arc> arcs1In; + + QVector3D origin; + + QVector3D pxv = QVector3D(radius, 0.0, 0.0); + QVector3D pyv = QVector3D(0.0, radius, 0.0); + QVector3D pzv = QVector3D(0.0, 0.0, radius); + + QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); + QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); + QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); + + arcs1In << Arc(pzp, radius, pxv, pyv); + arcs1In << Arc(pxp, radius, pyv, pzv); + arcs1In << Arc(pyp, radius, pzv, pxv); + + SpherePatch patch1In(radius, arcs1In); + + QList<SpherePatch> patchesIn; + + patchesIn << patch1In; + + Sphere sphereIn(radius, patchesIn); + + return sphereIn; +} + +bool tst_Sphere::test(const QPlane3D &plane, const Sphere &sphereOut) +{ + Sphere sphereIn = basicSphere(20000.0); + + sphereIn.intersect(plane); + + if (sphereIn == sphereOut) { + return true; + } else { + qWarning() << sphereIn; + qWarning() << sphereOut; + + return false; + } +} + +void tst_Sphere::x_plane() +{ + QFETCH(QPlane3D, plane); + QFETCH(Sphere, sphereOut); + + QVERIFY(test(plane, sphereOut)); +} + +void tst_Sphere::x_plane_data() +{ + QTest::addColumn<QPlane3D>("plane"); + QTest::addColumn<Sphere>("sphereOut"); + + double radius = 20000.0; + + QVector3D origin; + + QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); + QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); + QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); + + Sphere empty = emptySphere(radius); + Sphere basic = basicSphere(radius); + + double factor = radius * 0.0; + double factor2 = sqrt((radius * radius) - (factor * factor)); + + QTest::newRow("positive x forward 0.0") + << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("positive x backward 0.0") + << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << empty; + + QTest::newRow("negative x forward 0.0") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("negative x backward 0.0") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << empty; + + + factor = radius * 0.5; + factor2 = sqrt((radius * radius) - (factor * factor)); + + QPlane3D pxf050_plane = QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)); + + QList<Arc> pxf050_patch0_arcs; + pxf050_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(factor, factor2, 0)); + pxf050_patch0_arcs << Arc(pxf050_plane, radius, + QVector3D(factor, factor2, 0), + QVector3D(factor, 0, factor2)); + pxf050_patch0_arcs << Arc(pyp, radius, + QVector3D(factor, 0, factor2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxf050_patches; + pxf050_patches << SpherePatch(radius, pxf050_patch0_arcs); + + Sphere pxf050 = Sphere(radius, pxf050_patches); + + QTest::newRow("positive x forward 0.5") + << pxf050_plane + << pxf050; + + QPlane3D pxb050_plane = QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)); + + QList<Arc> pxb050_patch0_arcs; + pxb050_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + pxb050_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(factor, 0, factor2)); + pxb050_patch0_arcs << Arc(pxb050_plane, radius, + QVector3D(factor, 0, factor2), + QVector3D(factor, factor2, 0)); + pxb050_patch0_arcs << Arc(pzp, radius, + QVector3D(factor, factor2, 0), + QVector3D(0, radius, 0)); + + + QList<SpherePatch> pxb050_patches; + pxb050_patches << SpherePatch(radius, pxb050_patch0_arcs); + + Sphere pxb050 = Sphere(radius, pxb050_patches); + + QTest::newRow("positive x backward 0.5") + << pxb050_plane + << pxb050; + + QTest::newRow("negative x forward 0.5") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("negative x backward 0.5") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << empty; + + + factor = radius * 1.0; + + + QTest::newRow("positive x forward 1.0") + << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << empty; + + QTest::newRow("positive x backward 1.0") + << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("negative x forward 1.0") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("negative x backward 1.0") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << empty; + + + factor = radius * 1.25; + + QTest::newRow("positive x forward 1.25") + << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << empty; + + QTest::newRow("positive x backward 1.25") + << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("negative x forward 1.25") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) + << basic; + + QTest::newRow("negative x backward 1.25") + << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) + << empty; +} + +void tst_Sphere::xy_plane_straight() +{ + QFETCH(QPlane3D, plane); + QFETCH(Sphere, sphereOut); + + QVERIFY(test(plane, sphereOut)); +} + +void tst_Sphere::xy_plane_straight_data() +{ + QTest::addColumn<QPlane3D>("plane"); + QTest::addColumn<Sphere>("sphereOut"); + + double radius = 20000.0; + + QVector3D origin; + + QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); + QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); + QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); + + Sphere empty = emptySphere(radius); + Sphere basic = basicSphere(radius); + + double factor1 = radius * 0.0; + double factor2 = radius * 0.0; + + QPlane3D pxpyf_000_000_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("positive x positive y forward 0.0 0.0") + << pxpyf_000_000_plane + << basic; + + QPlane3D pxpyb_000_000_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("positive x positive y backward 0.0 0.0") + << pxpyb_000_000_plane + << empty; + + QPlane3D pxnyf_000_000_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + double f1 = radius / sqrt(2); + double f2 = radius / sqrt(2); + + QList<Arc> pxnyf_000_000_patch0_arcs; + pxnyf_000_000_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f1, f2, 0)); + pxnyf_000_000_patch0_arcs << Arc(pxnyf_000_000_plane, radius, + QVector3D(f1, f2, 0), + QVector3D(0, 0, radius)); + pxnyf_000_000_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + + + QList<SpherePatch> pxnyf_000_000_patches; + pxnyf_000_000_patches << SpherePatch(radius, pxnyf_000_000_patch0_arcs); + + Sphere pxnyf_000_000 = Sphere(radius, pxnyf_000_000_patches); + + QTest::newRow("positive x negative y forward 0.0 0.0") + << pxnyf_000_000_plane + << pxnyf_000_000; + + QPlane3D pxnyb_000_000_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QList<Arc> pxnyb_000_000_patch0_arcs; + pxnyb_000_000_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + pxnyb_000_000_patch0_arcs << Arc(pxnyb_000_000_plane, radius, + QVector3D(0, 0, radius), + QVector3D(f1, f2, 0)); + pxnyb_000_000_patch0_arcs << Arc(pzp, radius, + QVector3D(f1, f2, 0), + QVector3D(0, radius, 0)); + + + QList<SpherePatch> pxnyb_000_000_patches; + pxnyb_000_000_patches << SpherePatch(radius, pxnyb_000_000_patch0_arcs); + + Sphere pxnyb_000_000(radius, pxnyb_000_000_patches); + + QTest::newRow("positive x negative y backward 0.0 0.0") + << pxnyb_000_000_plane + << pxnyb_000_000; + + QPlane3D nxpyf_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QList<Arc> nxpyf_000_000_patch0_arcs; + nxpyf_000_000_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f1, f2, 0)); + nxpyf_000_000_patch0_arcs << Arc(nxpyf_000_000_plane, radius, + QVector3D(f1, f2, 0), + QVector3D(0, 0, radius)); + nxpyf_000_000_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> nxpyf_000_000_patches; + nxpyf_000_000_patches << SpherePatch(radius, nxpyf_000_000_patch0_arcs); + + Sphere nxpyf_000_000 = Sphere(radius, nxpyf_000_000_patches); + + QTest::newRow("negative x positive y forward 0.0 0.0") + << nxpyf_000_000_plane + << nxpyf_000_000; + + QPlane3D nxpyb_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QList<Arc> nxpyb_000_000_patch0_arcs; + nxpyb_000_000_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + nxpyb_000_000_patch0_arcs << Arc(nxpyb_000_000_plane, radius, + QVector3D(0, 0, radius), + QVector3D(f1, f2, 0)); + nxpyb_000_000_patch0_arcs << Arc(pzp, radius, + QVector3D(f1, f2, 0), + QVector3D(0, radius, 0)); + + QList<SpherePatch> nxpyb_000_000_patches; + nxpyb_000_000_patches << SpherePatch(radius, nxpyb_000_000_patch0_arcs); + + Sphere nxpyb_000_000(radius, nxpyb_000_000_patches); + + QTest::newRow("negative x positive y backward 0.0 0.0") + << nxpyb_000_000_plane + << nxpyb_000_000; + + QPlane3D nxnyf_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.0 0.0") + << nxnyf_000_000_plane + << basic; + + QPlane3D nxnyb_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.0 0.0") + << nxnyb_000_000_plane + << empty; + + factor1 = radius * 0.25; + factor2 = radius * 0.25; + + QPlane3D pxpyf_025_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + f1 = radius / 2.0; + f2 = radius * sqrt(3) / 2.0; + + QList<Arc> pxpyf_025_025_patch0_arcs; + pxpyf_025_025_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(0, radius, 0)); + pxpyf_025_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, f1, f2)); + pxpyf_025_025_patch0_arcs << Arc(pxpyf_025_025_plane, radius, + QVector3D(0, f1, f2), + QVector3D(f1, 0, f2)); + pxpyf_025_025_patch0_arcs << Arc(pyp, radius, + QVector3D(f1, 0, f2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxpyf_025_025_patches; + pxpyf_025_025_patches << SpherePatch(radius, pxpyf_025_025_patch0_arcs); + + Sphere pxpyf_025_025(radius, pxpyf_025_025_patches); + + QTest::newRow("positive x positive y forward 0.25 0.25") + << pxpyf_025_025_plane + << pxpyf_025_025; + + QPlane3D pxpyb_025_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QList<Arc> pxpyb_025_025_patch0_arcs; + pxpyb_025_025_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(f1, 0, f2)); + pxpyb_025_025_patch0_arcs << Arc(pxpyb_025_025_plane, radius, + QVector3D(f1, 0, f2), + QVector3D(0, f1, f2)); + pxpyb_025_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, f1, f2), + QVector3D(0, 0, radius)); + + QList<SpherePatch> pxpyb_025_025_patches; + pxpyb_025_025_patches << SpherePatch(radius, pxpyb_025_025_patch0_arcs); + + Sphere pxpyb_025_025(radius, pxpyb_025_025_patches); + + QTest::newRow("positive x positive y backward 0.25 0.25") + << pxpyb_025_025_plane + << pxpyb_025_025; + + QPlane3D pxnyf_025_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + /* + f3 = positive intersection of x = y + 0.5 * r and x^2 + y^2 = r^2 + f4 = f3 - 0.5 * r + */ + + double f3 = radius * (1.0 + sqrt(7)) / 4.0; + double f4 = f3 - radius / 2.0; + + QList<Arc> pxnyf_025_025_patch0_arcs; + pxnyf_025_025_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f3, f4, 0)); + pxnyf_025_025_patch0_arcs << Arc(pxnyf_025_025_plane, radius, + QVector3D(f3, f4, 0), + QVector3D(f1, 0, f2)); + pxnyf_025_025_patch0_arcs << Arc(pyp, radius, + QVector3D(f1, 0, f2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxnyf_025_025_patches; + pxnyf_025_025_patches << SpherePatch(radius, pxnyf_025_025_patch0_arcs); + + Sphere pxnyf_025_025(radius, pxnyf_025_025_patches); + + QTest::newRow("positive x negative y forward 0.25 0.25") + << pxnyf_025_025_plane + << pxnyf_025_025; + + QPlane3D pxnyb_025_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QList<Arc> pxnyb_025_025_patch0_arcs; + pxnyb_025_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + pxnyb_025_025_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(f1, 0, f2)); + pxnyb_025_025_patch0_arcs << Arc(pxnyb_025_025_plane, radius, + QVector3D(f1, 0, f2), + QVector3D(f3, f4, 0)); + pxnyb_025_025_patch0_arcs << Arc(pzp, radius, + QVector3D(f3, f4, 0), + QVector3D(0, radius, 0)); + + QList<SpherePatch> pxnyb_025_025_patches; + pxnyb_025_025_patches << SpherePatch(radius, pxnyb_025_025_patch0_arcs); + + Sphere pxnyb_025_025(radius, pxnyb_025_025_patches); + + QTest::newRow("positive x negative y backward 0.25 0.25") + << pxnyb_025_025_plane + << pxnyb_025_025; + + QPlane3D nxpyf_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QList<Arc> nxpyf_025_025_patch0_arcs; + nxpyf_025_025_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f4, f3, 0)); + nxpyf_025_025_patch0_arcs << Arc(nxpyf_025_025_plane, radius, + QVector3D(f4, f3, 0), + QVector3D(0, f1, f2)); + nxpyf_025_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, f1, f2), + QVector3D(0, 0, radius)); + nxpyf_025_025_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> nxpyf_025_025_patches; + nxpyf_025_025_patches << SpherePatch(radius, nxpyf_025_025_patch0_arcs); + + Sphere nxpyf_025_025(radius, nxpyf_025_025_patches); + + QTest::newRow("negative x positive y forward 0.25 0.25") + << nxpyf_025_025_plane + << nxpyf_025_025; + + QPlane3D nxpyb_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QList<Arc> nxpyb_025_025_patch0_arcs; + nxpyb_025_025_patch0_arcs << Arc(pzp, radius, + QVector3D(f4, f3, 0), + QVector3D(0, radius, 0)); + nxpyb_025_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, f1, f2)); + nxpyb_025_025_patch0_arcs << Arc(nxpyb_025_025_plane, radius, + QVector3D(0, f1, f2), + QVector3D(f4, f3, 0)); + + QList<SpherePatch> nxpyb_025_025_patches; + nxpyb_025_025_patches << SpherePatch(radius, nxpyb_025_025_patch0_arcs); + + Sphere nxpyb_025_025(radius, nxpyb_025_025_patches); + + QTest::newRow("negative x positive y backward 0.25 0.25") + << nxpyb_025_025_plane + << nxpyb_025_025; + + QPlane3D nxnyf_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.25 0.25") + << nxnyf_025_025_plane + << basic; + + QPlane3D nxnyb_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.25 0.25") + << nxnyb_025_025_plane + << empty; + + factor1 = radius * 0.5; + factor2 = radius * 0.5; + + f1 = radius * 0.5; + f2 = radius / sqrt(2); + + QPlane3D pxpyf_050_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QList<Arc> pxpyf_050_050_patch0_arcs; + pxpyf_050_050_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(0, radius, 0)); + pxpyf_050_050_patch0_arcs << Arc(pxpyf_050_050_plane, radius, + QVector3D(0, radius, 0), + QVector3D(f1, f1, f2)); + pxpyf_050_050_patch0_arcs << Arc(pxpyf_050_050_plane, radius, + QVector3D(f1, f1, f2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxpyf_050_050_patches; + pxpyf_050_050_patches << SpherePatch(radius, pxpyf_050_050_patch0_arcs); + + Sphere pxpyf_050_050(radius, pxpyf_050_050_patches); + + QTest::newRow("positive x positive y forward 0.5 0.5") + << pxpyf_050_050_plane + << pxpyf_050_050; + + QPlane3D pxpyb_050_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QList<Arc> pxpyb_050_050_patch0_arcs; + pxpyb_050_050_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + pxpyb_050_050_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + pxpyb_050_050_patch0_arcs << Arc(pxpyb_050_050_plane, radius, + QVector3D(radius, 0, 0), + QVector3D(f1, f1, f2)); + pxpyb_050_050_patch0_arcs << Arc(pxpyb_050_050_plane, radius, + QVector3D(f1, f1, f2), + QVector3D(0, radius, 0)); + + QList<SpherePatch> pxpyb_050_050_patches; + pxpyb_050_050_patches << SpherePatch(radius, pxpyb_050_050_patch0_arcs); + + Sphere pxpyb_050_050(radius, pxpyb_050_050_patches); + + QTest::newRow("positive x positive y backward 0.5 0.5") + << pxpyb_050_050_plane + << pxpyb_050_050; + + QPlane3D pxnyf_050_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QTest::newRow("positive x negative y forward 0.5 0.5") + << pxnyf_050_050_plane + << empty; + + QPlane3D pxnyb_050_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QTest::newRow("positive x negative y backward 0.5 0.5") + << pxnyb_050_050_plane + << basic; + + QPlane3D nxpyf_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x positive y forward 0.5 0.5") + << nxpyf_050_050_plane + << basic; + + QPlane3D nxpyb_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x positive y backward 0.5 0.5") + << nxpyb_050_050_plane + << empty; + + QPlane3D nxnyf_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.5 0.5") + << nxnyf_050_050_plane + << basic; + + QPlane3D nxnyb_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.5 0.5") + << nxnyb_050_050_plane + << empty; + + factor1 = radius * 0.6; + factor2 = radius * 0.6; + + f1 = radius * 0.6; + f2 = f1 * sqrt(7.0 / 9.0); + f3 = f1 + f2 / sqrt(2); + f4 = f1 - f2 / sqrt(2); + + QPlane3D pxpyf_060_060_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QList<Arc> pxpyf_060_060_patch0_arcs; + pxpyf_060_060_patch0_arcs << Arc(pzp, radius, + QVector3D(f3, f4, 0), + QVector3D(f4, f3, 0)); + pxpyf_060_060_patch0_arcs << Arc(pxpyf_060_060_plane, radius, + QVector3D(f4, f3, 0), + QVector3D(f1, f1, f2)); + pxpyf_060_060_patch0_arcs << Arc(pxpyf_060_060_plane, radius, + QVector3D(f1, f1, f2), + QVector3D(f3, f4, 0)); + + QList<SpherePatch> pxpyf_060_060_patches; + pxpyf_060_060_patches << SpherePatch(radius, pxpyf_060_060_patch0_arcs); + + Sphere pxpyf_060_060(radius, pxpyf_060_060_patches); + + QTest::newRow("positive x positive y forward 0.6 0.6") + << pxpyf_060_060_plane + << pxpyf_060_060; + + QPlane3D pxpyb_060_060_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QList<Arc> pxpyb_060_060_patch0_arcs; + pxpyb_060_060_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f3, f4, 0)); + pxpyb_060_060_patch0_arcs << Arc(pxpyb_060_060_plane, radius, + QVector3D(f3, f4, 0), + QVector3D(f1, f1, f2)); + pxpyb_060_060_patch0_arcs << Arc(pxpyb_060_060_plane, radius, + QVector3D(f1, f1, f2), + QVector3D(f4, f3, 0)); + pxpyb_060_060_patch0_arcs << Arc(pzp, radius, + QVector3D(f4, f3, 0), + QVector3D(0, radius, 0)); + pxpyb_060_060_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + pxpyb_060_060_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxpyb_060_060_patches; + pxpyb_060_060_patches << SpherePatch(radius, pxpyb_060_060_patch0_arcs); + + Sphere pxpyb_060_060(radius, pxpyb_060_060_patches); + + QTest::newRow("positive x positive y backward 0.6 0.6") + << pxpyb_060_060_plane + << pxpyb_060_060; + + QPlane3D pxnyf_060_060_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QTest::newRow("positive x negative y forward 0.6 0.6") + << pxnyf_060_060_plane + << empty; + + QPlane3D pxnyb_060_060_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QTest::newRow("positive x negative y backward 0.6 0.6") + << pxnyb_060_060_plane + << basic; + + QPlane3D nxpyf_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x positive y forward 0.6 0.6") + << nxpyf_060_060_plane + << basic; + + QPlane3D nxpyb_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x positive y backward 0.6 0.6") + << nxpyb_060_060_plane + << empty; + + QPlane3D nxnyf_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.6 0.6") + << nxnyf_060_060_plane + << basic; + + QPlane3D nxnyb_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.6 0.6") + << nxnyb_060_060_plane + << empty; + + factor1 = radius * 0.75; + factor2 = radius * 0.75; + + QPlane3D pxpyf_075_075_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("positive x positive y forward 0.75 0.75") + << pxpyf_075_075_plane + << empty; + + QPlane3D pxpyb_075_075_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("positive x positive y backward 0.75 0.75") + << pxpyb_075_075_plane + << basic; + + QPlane3D pxnyf_075_075_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QTest::newRow("positive x negative y forward 0.75 0.75") + << pxnyf_075_075_plane + << empty; + + QPlane3D pxnyb_075_075_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QTest::newRow("positive x negative y backward 0.75 0.75") + << pxnyb_075_075_plane + << basic; + + QPlane3D nxpyf_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x positive y forward 0.75 0.75") + << nxpyf_075_075_plane + << basic; + + QPlane3D nxpyb_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x positive y backward 0.75 0.75") + << nxpyb_075_075_plane + << empty; + + QPlane3D nxnyf_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.75 0.75") + << nxnyf_075_075_plane + << basic; + + QPlane3D nxnyb_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.75 0.75") + << nxnyb_075_075_plane + << empty; +} + +void tst_Sphere::xy_plane_skew() +{ + QFETCH(QPlane3D, plane); + QFETCH(Sphere, sphereOut); + + QVERIFY(test(plane, sphereOut)); +} + +void tst_Sphere::xy_plane_skew_data() +{ + QTest::addColumn<QPlane3D>("plane"); + QTest::addColumn<Sphere>("sphereOut"); + + double radius = 20000.0; + + QVector3D origin; + + QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); + QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); + QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); + + Sphere empty = emptySphere(radius); + Sphere basic = basicSphere(radius); + + double factor1 = radius * 0.25; + double factor2 = radius * 0.5; + + double f1 = radius * 0.5; + double f2 = radius * sqrt(3) / 2.0; + double f3 = radius * 0.8; + double f4 = radius * 0.6; + + QPlane3D pxpyf_025_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), + QVector3D(0.5, 0.25, 0.0).normalized()); + + QList<Arc> pxpyf_025_050_patch0_arcs; + pxpyf_025_050_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(0, radius, 0)); + pxpyf_025_050_patch0_arcs << Arc(pxpyf_025_050_plane, radius, + QVector3D(0, radius, 0), + QVector3D(f1, 0, f2)); + pxpyf_025_050_patch0_arcs << Arc(pyp, radius, + QVector3D(f1, 0, f2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxpyf_025_050_patches; + pxpyf_025_050_patches << SpherePatch(radius, pxpyf_025_050_patch0_arcs); + + Sphere pxpyf_025_050(radius, pxpyf_025_050_patches); + + QTest::newRow("positive x positive y forward 0.25 0.5") + << pxpyf_025_050_plane + << pxpyf_025_050; + + QPlane3D pxpyb_025_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), + QVector3D(-0.5, -0.25, 0.0).normalized()); + + QList<Arc> pxpyb_025_050_patch0_arcs; + pxpyb_025_050_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(f1, 0, f2)); + pxpyb_025_050_patch0_arcs << Arc(pxpyb_025_050_plane, radius, + QVector3D(f1, 0, f2), + QVector3D(0, radius, 0)); + pxpyb_025_050_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + + + QList<SpherePatch> pxpyb_025_050_patches; + pxpyb_025_050_patches << SpherePatch(radius, pxpyb_025_050_patch0_arcs); + + Sphere pxpyb_025_050(radius, pxpyb_025_050_patches); + + QTest::newRow("positive x positive y backward 0.25 0.5") + << pxpyb_025_050_plane + << pxpyb_025_050; + + QPlane3D pxnyf_025_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), + QVector3D(-0.5, 0.25, 0.0).normalized()); + + QList<Arc> pxnyf_025_050_patch0_arcs; + pxnyf_025_050_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, 0, radius)); + pxnyf_025_050_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(f1, 0, f2)); + pxnyf_025_050_patch0_arcs << Arc(pxnyf_025_050_plane, radius, + QVector3D(f1, 0, f2), + QVector3D(f3, f4, 0)); + pxnyf_025_050_patch0_arcs << Arc(pzp, radius, + QVector3D(f3, f4, 0), + QVector3D(0, radius, 0)); + + QList<SpherePatch> pxnyf_025_050_patches; + pxnyf_025_050_patches << SpherePatch(radius, pxnyf_025_050_patch0_arcs); + + Sphere pxnyf_025_050(radius, pxnyf_025_050_patches); + + QTest::newRow("positive x negative y forward 0.25 0.5") + << pxnyf_025_050_plane + << pxnyf_025_050; + + QPlane3D pxnyb_025_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), + QVector3D(0.5, -0.25, 0.0).normalized()); + + QList<Arc> pxnyb_025_050_patch0_arcs; + pxnyb_025_050_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f3, f4, 0)); + pxnyb_025_050_patch0_arcs << Arc(pxnyb_025_050_plane, radius, + QVector3D(f3, f4, 0), + QVector3D(f1, 0, f2)); + pxnyb_025_050_patch0_arcs << Arc(pyp, radius, + QVector3D(f1, 0, f2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxnyb_025_050_patches; + pxnyb_025_050_patches << SpherePatch(radius, pxnyb_025_050_patch0_arcs); + + Sphere pxnyb_025_050(radius, pxnyb_025_050_patches); + + QTest::newRow("positive x negative y backward 0.25 0.5") + << pxnyb_025_050_plane + << pxnyb_025_050; + + QPlane3D nxpyf_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), + QVector3D(0.5, -0.25, 0.0).normalized()); + + QTest::newRow("negative x positive y forward 0.25 0.5") + << nxpyf_025_050_plane + << basic; + + QPlane3D nxpyb_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), + QVector3D(-0.5, 0.25, 0.0).normalized()); + + QTest::newRow("negative x positive y backward 0.25 0.5") + << nxpyb_025_050_plane + << empty; + + QPlane3D nxnyf_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), + QVector3D(0.5, 0.25, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.25 0.5") + << nxnyf_025_050_plane + << basic; + + QPlane3D nxnyb_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), + QVector3D(-0.5, -0.25, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.25 0.5") + << nxnyb_025_050_plane + << empty; + + factor1 = radius * 0.5; + factor2 = radius * 0.25; + + QPlane3D pxpyf_050_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), + QVector3D(0.25, 0.5, 0.0).normalized()); + + QList<Arc> pxpyf_050_025_patch0_arcs; + pxpyf_050_025_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(0, radius, 0)); + pxpyf_050_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, f1, f2)); + pxpyf_050_025_patch0_arcs << Arc(pxpyf_050_025_plane, radius, + QVector3D(0, f1, f2), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> pxpyf_050_025_patches; + pxpyf_050_025_patches << SpherePatch(radius, pxpyf_050_025_patch0_arcs); + + Sphere pxpyf_050_025(radius, pxpyf_050_025_patches); + + QTest::newRow("positive x positive y forward 0.5 0.25") + << pxpyf_050_025_plane + << pxpyf_050_025; + + QPlane3D pxpyb_050_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), + QVector3D(-0.25, -0.5, 0.0).normalized()); + + QList<Arc> pxpyb_050_025_patch0_arcs; + pxpyb_050_025_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + pxpyb_050_025_patch0_arcs << Arc(pxpyb_050_025_plane, radius, + QVector3D(radius, 0, 0), + QVector3D(0, f1, f2)); + pxpyb_050_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, f1, f2), + QVector3D(0, 0, radius)); + + QList<SpherePatch> pxpyb_050_025_patches; + pxpyb_050_025_patches << SpherePatch(radius, pxpyb_050_025_patch0_arcs); + + Sphere pxpyb_050_025(radius, pxpyb_050_025_patches); + + QTest::newRow("positive x positive y backward 0.5 0.25") + << pxpyb_050_025_plane + << pxpyb_050_025; + + QPlane3D pxnyf_050_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), + QVector3D(-0.25, 0.5, 0.0).normalized()); + + QTest::newRow("positive x negative y forward 0.5 0.25") + << pxnyf_050_025_plane + << basic; + + QPlane3D pxnyb_050_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), + QVector3D(0.25, -0.5, 0.0).normalized()); + + QTest::newRow("positive x negative y backward 0.5 0.25") + << pxnyb_050_025_plane + << empty; + + QPlane3D nxpyf_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), + QVector3D(0.25, -0.5, 0.0).normalized()); + + QList<Arc> nxpyf_050_025_patch0_arcs; + nxpyf_050_025_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f4, f3, 0)); + nxpyf_050_025_patch0_arcs << Arc(nxpyf_050_025_plane, radius, + QVector3D(f4, f3, 0), + QVector3D(0, f1, f2)); + nxpyf_050_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, f1, f2), + QVector3D(0, 0, radius)); + nxpyf_050_025_patch0_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(radius, 0, 0)); + + QList<SpherePatch> nxpyf_050_025_patches; + nxpyf_050_025_patches << SpherePatch(radius, nxpyf_050_025_patch0_arcs); + + Sphere nxpyf_050_025(radius, nxpyf_050_025_patches); + + QTest::newRow("negative x positive y forward 0.5 0.25") + << nxpyf_050_025_plane + << nxpyf_050_025; + + QPlane3D nxpyb_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), + QVector3D(-0.25, 0.5, 0.0).normalized()); + + QList<Arc> nxpyb_050_025_patch0_arcs; + nxpyb_050_025_patch0_arcs << Arc(pzp, radius, + QVector3D(f4, f3, 0), + QVector3D(0, radius, 0)); + nxpyb_050_025_patch0_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, f1, f2)); + nxpyb_050_025_patch0_arcs << Arc(nxpyb_050_025_plane, radius, + QVector3D(0, f1, f2), + QVector3D(f4, f3, 0)); + + QList<SpherePatch> nxpyb_050_025_patches; + nxpyb_050_025_patches << SpherePatch(radius, nxpyb_050_025_patch0_arcs); + + Sphere nxpyb_050_025(radius, nxpyb_050_025_patches); + + QTest::newRow("negative x positive y backward 0.5 0.25") + << nxpyb_050_025_plane + << nxpyb_050_025; + + QPlane3D nxnyf_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), + QVector3D(0.25, 0.5, 0.0).normalized()); + + QTest::newRow("negative x negative y forward 0.5 0.25") + << nxnyf_050_025_plane + << basic; + + QPlane3D nxnyb_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), + QVector3D(-0.25, -0.5, 0.0).normalized()); + + QTest::newRow("negative x negative y backward 0.5 0.25") + << nxnyb_050_025_plane + << empty; +} + +void tst_Sphere::xyz_plane() +{ + QFETCH(QPlane3D, plane); + QFETCH(Sphere, sphereOut); + + QVERIFY(test(plane, sphereOut)); +} + +void tst_Sphere::xyz_plane_data() +{ + QTest::addColumn<QPlane3D>("plane"); + QTest::addColumn<Sphere>("sphereOut"); + + double radius = 20000.0; + + QVector3D origin; + + QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); + QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); + QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); + + Sphere empty = emptySphere(radius); + Sphere basic = basicSphere(radius); + + double factor1 = radius * 0.0; + double factor2 = radius * 0.0; + double factor3 = radius * 0.0; + + QPlane3D pxpypzf_000 = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + QTest::newRow("positive x positive y positive z forward 0.0") + << pxpypzf_000 + << basic; + + QPlane3D pxpypzb_000 = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + + QTest::newRow("positive x positive y positive z backward 0.0") + << pxpypzb_000 + << empty; + + factor1 = radius * 0.25; + factor2 = radius * 0.25; + factor3 = radius * 0.25; + + QPlane3D pxpypzf_025 = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + QTest::newRow("positive x positive y positive z forward 0.25") + << pxpypzf_025 + << basic; + + QPlane3D pxpypzb_025 = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + + QTest::newRow("positive x positive y positive z backward 0.25") + << pxpypzb_025 + << empty; + + factor1 = radius / 3.0; + factor2 = radius / 3.0; + factor3 = radius / 3.0; + + QPlane3D pxpypzf_033_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + QTest::newRow("positive x positive y positive z forward 0.33") + << pxpypzf_033_plane + << basic; + + QPlane3D pxpypzb_033_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + + QTest::newRow("positive x positive y positive z backward 0.33") + << pxpypzb_033_plane + << empty; + + factor1 = radius * 0.4; + factor2 = radius * 0.4; + factor3 = radius * 0.4; + + QPlane3D pxpypzf_040_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + double f1 = 19483.3; + double f2 = 4516.69; + + QList<Arc> pxpypzf_040_patch0_arcs; + pxpypzf_040_patch0_arcs << Arc(pzp, radius, + QVector3D(f1, f2, 0), + QVector3D(f2, f1, 0)); + pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius, + QVector3D(f2, f1, 0), + QVector3D(0, f1, f2)); + pxpypzf_040_patch0_arcs << Arc(pxp, radius, + QVector3D(0, f1, f2), + QVector3D(0, f2, f1)); + pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius, + QVector3D(0, f2, f1), + QVector3D(f2, 0, f1)); + pxpypzf_040_patch0_arcs << Arc(pyp, radius, + QVector3D(f2, 0, f1), + QVector3D(f1, 0, f2)); + pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius, + QVector3D(f1, 0, f2), + QVector3D(f1, f2, 0)); + + QList<SpherePatch> pxpypzf_040_patches; + pxpypzf_040_patches << SpherePatch(radius, pxpypzf_040_patch0_arcs); + + Sphere pxpypzf_040(radius, pxpypzf_040_patches); + + QTest::newRow("positive x positive y positive z forward 0.4") + << pxpypzf_040_plane + << pxpypzf_040; + + QPlane3D pxpypzb_040_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + + QList<Arc> pxpypzb_040_patch0_arcs; + pxpypzb_040_patch0_arcs << Arc(pzp, radius, + QVector3D(radius, 0, 0), + QVector3D(f1, f2, 0)); + pxpypzb_040_patch0_arcs << Arc(pxpypzb_040_plane, radius, + QVector3D(f1, f2, 0), + QVector3D(f1, 0, f2)); + pxpypzb_040_patch0_arcs << Arc(pyp, radius, + QVector3D(f1, 0, f2), + QVector3D(radius, 0, 0)); + + QList<Arc> pxpypzb_040_patch1_arcs; + pxpypzb_040_patch1_arcs << Arc(pxp, radius, + QVector3D(0, radius, 0), + QVector3D(0, f1, f2)); + pxpypzb_040_patch1_arcs << Arc(pxpypzb_040_plane, radius, + QVector3D(0, f1, f2), + QVector3D(f2, f1, 0)); + pxpypzb_040_patch1_arcs << Arc(pzp, radius, + QVector3D(f2, f1, 0), + QVector3D(0, radius, 0)); + + QList<Arc> pxpypzb_040_patch2_arcs; + pxpypzb_040_patch2_arcs << Arc(pyp, radius, + QVector3D(0, 0, radius), + QVector3D(f2, 0, f1)); + pxpypzb_040_patch2_arcs << Arc(pxpypzb_040_plane, radius, + QVector3D(f2, 0, f1), + QVector3D(0, f2, f1)); + pxpypzb_040_patch2_arcs << Arc(pxp, radius, + QVector3D(0, f2, f1), + QVector3D(0, 0, radius)); + + QList<SpherePatch> pxpypzb_040_patches; + + pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch0_arcs); + pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch1_arcs); + pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch2_arcs); + + Sphere pxpypzb_040(radius, pxpypzb_040_patches); + + QTest::newRow("positive x positive y positive z backward 0.4") + << pxpypzb_040_plane + << pxpypzb_040; + + factor1 = radius * 0.5; + factor2 = radius * 0.5; + factor3 = radius * 0.5; + + f1 = 18165.0; + f2 = 5917.52; + + QPlane3D pxpypzf_050_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + QList<Arc> pxpypzf_050_patch0_arcs; + pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius, + QVector3D(f1, f2, f2), + QVector3D(f2, f1, f2)); + pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius, + QVector3D(f2, f1, f2), + QVector3D(f2, f2, f1)); + pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius, + QVector3D(f2, f2, f1), + QVector3D(f1, f2, f2)); + + QList<SpherePatch> pxpypzf_050_patches; + pxpypzf_050_patches << SpherePatch(radius, pxpypzf_050_patch0_arcs); + + Sphere pxpypzf_050(radius, pxpypzf_050_patches); + + QTest::newRow("positive x positive y positive z forward 0.5") + << pxpypzf_050_plane + << pxpypzf_050; + + QPlane3D pxpypzb_050_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + +// QList<Arc> pxpypzb_050_patch0_arcs; +// pxpypzb_050_patch0_arcs << Arc(pzp, radius, +// QVector3D(radius, 0, 0), +// QVector3D(f1, f2, 0)); +// pxpypzb_050_patch0_arcs << Arc(pxpypzb_050_plane, radius, +// QVector3D(f1, f2, 0), +// QVector3D(f1, 0, f2)); +// pxpypzb_050_patch0_arcs << Arc(pyp, radius, +// QVector3D(f1, 0, f2), +// QVector3D(radius, 0, 0)); + +// QList<Arc> pxpypzb_050_patch1_arcs; +// pxpypzb_050_patch1_arcs << Arc(pxp, radius, +// QVector3D(0, radius, 0), +// QVector3D(0, f1, f2)); +// pxpypzb_050_patch1_arcs << Arc(pxpypzb_050_plane, radius, +// QVector3D(0, f1, f2), +// QVector3D(f2, f1, 0)); +// pxpypzb_050_patch1_arcs << Arc(pzp, radius, +// QVector3D(f2, f1, 0), +// QVector3D(0, radius, 0)); + +// QList<Arc> pxpypzb_050_patch2_arcs; +// pxpypzb_050_patch2_arcs << Arc(pyp, radius, +// QVector3D(0, 0, radius), +// QVector3D(f2, 0, f1)); +// pxpypzb_050_patch2_arcs << Arc(pxpypzb_050_plane, radius, +// QVector3D(f2, 0, 1), +// QVector3D(0, f2, f1)); +// pxpypzb_050_patch2_arcs << Arc(pxp, radius, +// QVector3D(0, f2, f1), +// QVector3D(0, 0, radius)); + + QList<SpherePatch> pxpypzb_050_patches; + +// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch0_arcs); +// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch1_arcs); +// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch2_arcs); + + Sphere pxpypzb_050(radius, pxpypzb_050_patches); + + QTest::newRow("positive x positive y positive z backward 0.5") + << pxpypzb_050_plane + << pxpypzb_050; + + + factor1 = radius / sqrt(3.0); + factor2 = radius / sqrt(3.0); + factor3 = radius / sqrt(3.0); + + QPlane3D pxpypzf_057_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + QTest::newRow("positive x positive y positive z forward 0.57") + << pxpypzf_057_plane + << empty; + + QPlane3D pxpypzb_057_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + + QTest::newRow("positive x positive y positive z backward 0.57") + << pxpypzb_057_plane + << basic; + + factor1 = radius * 0.6; + factor2 = radius * 0.6; + factor3 = radius * 0.6; + + QPlane3D pxpypzf_060_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(1.0, 1.0, 1.0).normalized()); + + QTest::newRow("positive x positive y positive z forward 0.6") + << pxpypzf_060_plane + << empty; + + QPlane3D pxpypzb_060_plane = QPlane3D(QVector3D(factor1, factor2, factor3), + QVector3D(-1.0, -1.0, -1.0).normalized()); + + QTest::newRow("positive x positive y positive z backward 0.6") + << pxpypzb_060_plane + << basic; +} + +QList<QPlane3D> tst_Sphere::planes() const +{ + CameraData cameraData; + + ViewportCamera cam; + cam.setProjection(new Projection3D(20000.0)); + cam.setCameraData(cameraData); + Frustum f = cam.toFrustum(); + + QList<QPlane3D> planes; + planes << f.plane(Frustum::Near); + planes << f.plane(Frustum::Far); + planes << f.plane(Frustum::Top); + planes << f.plane(Frustum::Bottom); + planes << f.plane(Frustum::Left); + planes << f.plane(Frustum::Right); + + return planes; +} + +Sphere tst_Sphere::planeTest(const QList<QPlane3D> &planes, const QList<int> &planeIndices) const +{ + Sphere sphere; + + for (int i = 0; i < planeIndices.size(); ++i) { + sphere.intersect(planes.at(planeIndices.at(i))); + } + + return sphere; +} + +void tst_Sphere::camera() +{ + QList<QPlane3D> p = planes(); + // 2-tuples +// for (int i = 0; i < 5; ++i) { +// for (int j = i + 1; j < 6; ++j) { +// QList<int> i1; +// i1 << i << j; + +// Sphere s1 = planeTest(p, i1); + +// QList<int> i2; +// i2 << j << i; + +// Sphere s2 = planeTest(p, i2); + +// if (!s1.isomorphic(s2)) { +// QList<SpherePatch> p1 = s1.patches(); +// QList<SpherePatch> p2 = s2.patches(); +// if (p1.size() != p2.size()) { +// qWarning() << i << j << "sizes different"; +// } else { +// int s = p1.size(); +// for (int k = 0; k < s; ++k) { +// if (!p1[k].isomorphic(p2[k])) { +// qWarning() << i << j << k; +//// QList<SpherePatch> l1a; +//// l1a << p1[k]; +//// Sphere sphere1a(20000.0, l1a); +//// qWarning() << sphere1a; + +//// QList<SpherePatch> l2a; +//// l2a << p2[k]; +//// Sphere sphere2a(20000.0, l2a); +//// qWarning() << sphere2a; +// } +// //qWarning() << k << (p1[k].isomorphic(p2[k])); +// } +// } +// } +// } +// } + + /* + intersect(...) + 1 2 0 + 1 3 0 + 1 4 0 + 1 5 0 + 3 4 7 + + intersect2(...) + 1 2 0 + 1 3 0 + 1 4 0 + 1 5 0 + +2 4 7 + 3 4 7 + +3 4 8 + */ + + int plane1 = 1; + int plane2 = 2; + int patch = 0; + + qWarning() << " ****** "; + + Sphere sphere1; + sphere1.intersect(p.at(plane1)); + SpherePatch patch1 = sphere1.patches().at(patch); + + qWarning() << " ****** "; + QList<SpherePatch> l1a; + l1a << patch1; + Sphere sphere1a(20000.0, l1a); + qWarning() << sphere1a; + qWarning() << " ****** "; + + l1a = patch1.intersect(p.at(plane2)); + + qWarning() << " ****** "; + Sphere sphere1b(20000.0, l1a); + qWarning() << sphere1b; + qWarning() << " ****** "; + + Sphere sphere2; + sphere2.intersect(p.at(plane2)); + SpherePatch patch2 = sphere2.patches().at(patch); + + qWarning() << " ****** "; + QList<SpherePatch> l2a; + l2a << patch2; + Sphere sphere2a(20000.0, l2a); + qWarning() << sphere2a; + qWarning() << " ****** "; + + l2a = patch2.intersect(p.at(plane1)); + + qWarning() << " ****** "; + Sphere sphere2b(20000.0, l2a); + qWarning() << sphere2b; + qWarning() << " ****** "; +} + +QTEST_MAIN(tst_Sphere) +#include "tst_sphere.moc" + diff --git a/tests/declarativetestplugin/location.pro b/tests/declarativetestplugin/declarativetestplugin.pro index e6c22071..78afd0aa 100644 --- a/tests/declarativetestplugin/location.pro +++ b/tests/declarativetestplugin/declarativetestplugin.pro @@ -1,7 +1,7 @@ TARGET = declarative_location_test TARGETPATH = Qt/location/test -include(../../src/imports/qimportbase.pri) +include(../../src/imports/location/qlocationimport.pri) QT += declarative location diff --git a/tests/declarativetestplugin/locationtest.cpp b/tests/declarativetestplugin/locationtest.cpp index 4dac0664..76cb3570 100644 --- a/tests/declarativetestplugin/locationtest.cpp +++ b/tests/declarativetestplugin/locationtest.cpp @@ -7,29 +7,29 @@ ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. ** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. ** ** ** @@ -65,7 +65,8 @@ public: } }; -QT_END_NAMESPACE #include "locationtest.moc" -Q_EXPORT_PLUGIN2(declarative_location_test, QT_PREPEND_NAMESPACE(QLocationDeclarativeTestModule)); +QT_END_NAMESPACE + +Q_EXPORT_PLUGIN2(declarative_location_test, QT_PREPEND_NAMESPACE(QLocationDeclarativeTestModule)) diff --git a/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp b/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp index 89050516..712a838a 100644 --- a/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp +++ b/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp @@ -1,15 +1,21 @@ #include "qdeclarativelocationtestmodel_p.h" #include <qgeocoordinate.h> #include <QtGui/QApplication> +#include <QtCore/QTime> +#include <QtCore> QDeclarativeLocationTestModel::QDeclarativeLocationTestModel(QObject *parent): QAbstractListModel(parent), delay_(0), datacount_(0), - componentCompleted_(false) + componentCompleted_(false), + crazyLevel_(0), + crazyMode_(false) { + // seed crazy random generator + qsrand(QTime(0,0,0).secsTo(QTime::currentTime()) + QCoreApplication::applicationPid()); timer_.setSingleShot(true); - connect(&timer_, SIGNAL(timeout()), this, SLOT(repopulate())); + connect(&timer_, SIGNAL(timeout()), this, SLOT(timerFired())); // Establish role names so that they can be queried from this model QHash<int, QByteArray> roleNames; roleNames = QAbstractItemModel::roleNames(); @@ -27,6 +33,19 @@ QDeclarativeLocationTestModel::~QDeclarativeLocationTestModel() } } +void QDeclarativeLocationTestModel::timerFired() +{ + //qDebug() << "timer fired" ; + repopulate(); + if (crazyMode_) { + //qDebug() << "raw randomw value: " << qrand(); + int delay = (qAbs(qrand()) % crazyLevel_); // writing software is exact science + delay = qMax(1000, delay); // 3 ms at minimum + qDebug() << "starting timer with : " << delay; + timer_.start(delay); + } +} + void QDeclarativeLocationTestModel::componentComplete() { componentCompleted_ = true; @@ -75,30 +94,71 @@ void QDeclarativeLocationTestModel::setDatatype(QString datatype) scheduleRepopulation(); } +int QDeclarativeLocationTestModel::crazyLevel() const +{ + return crazyLevel_; +} + +void QDeclarativeLocationTestModel::setCrazyLevel(int level) +{ + if (level == crazyLevel_) + return; + crazyLevel_ = level; + reset(); + scheduleRepopulation(); + emit crazyLevelChanged(); +} + +bool QDeclarativeLocationTestModel::crazyMode() const +{ + return crazyMode_; +} + +void QDeclarativeLocationTestModel::setCrazyMode(bool mode) +{ + if (mode == crazyMode_) + return; + crazyMode_ = mode; + //if (!crazyMode_) + //reset(); + //else + if (crazyMode_) + scheduleRepopulation(); + emit crazyModeChanged(); +} + // only coordinate datatype for now to get started with, // refactor if more usecases for the model emerge. void QDeclarativeLocationTestModel::repopulate() { - double latitude = 0.0; - double longitude = 1.0; + double latitude = -30; + double longitude = 153; beginResetModel(); if (!dataobjects_.isEmpty()) { qDeleteAll(dataobjects_); dataobjects_.clear(); } - for (int i = 0; i < datacount_; ++i) { + int datacount = datacount_; + if (crazyMode_) + datacount = (qAbs(qrand()) % datacount_); + + qDebug() << "generating random content: " << datacount; + + for (int i = 0; i < datacount; ++i) { DataObject* dataobject = new DataObject; QDeclarativeCoordinate* coordinate = new QDeclarativeCoordinate(QGeoCoordinate(latitude,longitude)); dataobject->coordinate_ = coordinate; dataobjects_.append(dataobject); - longitude += 1.0; - latitude += 1.0; + longitude -= 0.2; + latitude += 0.2; } endResetModel(); } void QDeclarativeLocationTestModel::reset() { + if (timer_.isActive()) + timer_.stop(); beginResetModel(); if (!dataobjects_.isEmpty()) { qDeleteAll(dataobjects_); @@ -111,12 +171,27 @@ void QDeclarativeLocationTestModel::scheduleRepopulation() { if (!componentCompleted_) return; + if (datacount_ <= 0) { + qDebug() << __FUNCTION__ << "won't schedule model, invalid datacount: " << datacount_; + return; + } + if (timer_.isActive()) timer_.stop(); - if (delay_ > 0) - timer_.start(delay_); - else - repopulate(); + + if (crazyMode_) { + // start generating arbitrary amount of data at arbitrary intervals + int delay = (qAbs(qrand()) % crazyLevel_); // writing software is exact science + delay = qMax(3, delay); // 3 ms at minimum + qDebug() << "starting timer with : " << delay; + timer_.start(delay); + } else { + // just update + if (delay_ > 0) + timer_.start(delay_); + else + repopulate(); + } } int QDeclarativeLocationTestModel::rowCount(const QModelIndex& parent) const diff --git a/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h b/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h index ad0f1170..41388e6e 100644 --- a/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h +++ b/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h @@ -26,6 +26,8 @@ class QDeclarativeLocationTestModel : public QAbstractListModel, public QDeclara Q_OBJECT Q_PROPERTY(int datacount READ datacount WRITE setDatacount NOTIFY datacountChanged) Q_PROPERTY(int delay READ delay WRITE setDelay NOTIFY delayChanged) + Q_PROPERTY(bool crazyMode READ crazyMode WRITE setCrazyMode NOTIFY crazyModeChanged) + Q_PROPERTY(int crazyLevel READ crazyLevel WRITE setCrazyLevel NOTIFY crazyLevelChanged) Q_PROPERTY(QString datatype READ datatype WRITE setDatatype NOTIFY datatypeChanged) Q_INTERFACES(QDeclarativeParserStatus) @@ -51,6 +53,12 @@ public: int delay() const; void setDelay(int delay); + int crazyLevel() const; + void setCrazyLevel(int level); + + bool crazyMode() const; + void setCrazyMode(bool mode); + QString datatype() const; void setDatatype(QString datatype); @@ -64,9 +72,12 @@ signals: void datatypeChanged(); void delayChanged(); void modelChanged(); + void crazyLevelChanged(); + void crazyModeChanged(); private slots: void repopulate(); + void timerFired(); private: void scheduleRepopulation(); @@ -78,6 +89,8 @@ private: QString datatype_; QTimer timer_; QList<DataObject*> dataobjects_; + int crazyLevel_; + bool crazyMode_; }; #endif diff --git a/tests/systemtests/map3d/camerawidget.cpp b/tests/systemtests/map3d/camerawidget.cpp new file mode 100644 index 00000000..6b1e0dd2 --- /dev/null +++ b/tests/systemtests/map3d/camerawidget.cpp @@ -0,0 +1,114 @@ +#include "camerawidget.h" + +#include <QLabel> +#include <QLineEdit> +#include <QPushButton> +#include <QVBoxLayout> +#include <QGridLayout> + +CameraWidget::CameraWidget(QWidget *parent) + : QWidget(parent) +{ + setupUi(); +} + +void CameraWidget::setupUi() +{ + QLabel *latLabel = new QLabel("Latitude"); + lat_ = new QLineEdit(); + + QLabel *lonLabel = new QLabel("Longitude"); + lon_ = new QLineEdit(); + + QLabel *distanceLabel = new QLabel("Distance"); + distance_ = new QLineEdit(); + + QLabel *zoomLevelLabel = new QLabel("Zoom Level"); + zoomLevel_ = new QLineEdit(); + + QLabel *zoomFactorLabel = new QLabel("Zoom Factor"); + zoomFactor_ = new QLineEdit(); + + QLabel *bearingLabel = new QLabel("Bearing"); + bearing_ = new QLineEdit(); + + QLabel *tiltLabel = new QLabel("Tilt"); + tilt_ = new QLineEdit(); + + QLabel *rollLabel = new QLabel("Roll"); + roll_ = new QLineEdit(); + + QGridLayout *grid = new QGridLayout(); + grid->addWidget(latLabel, 0, 0); + grid->addWidget(lat_, 0, 1); + grid->addWidget(lonLabel, 1, 0); + grid->addWidget(lon_, 1, 1); + grid->addWidget(distanceLabel, 2, 0); + grid->addWidget(distance_, 2, 1); + grid->addWidget(zoomLevelLabel, 3, 0); + grid->addWidget(zoomLevel_, 3, 1); + grid->addWidget(zoomFactorLabel, 4, 0); + grid->addWidget(zoomFactor_, 4, 1); + grid->addWidget(bearingLabel, 5, 0); + grid->addWidget(bearing_, 5, 1); + grid->addWidget(tiltLabel, 6, 0); + grid->addWidget(tilt_, 6, 1); + grid->addWidget(rollLabel, 7, 0); + grid->addWidget(roll_, 7, 1); + + update_ = new QPushButton("Update"); + connect(update_, + SIGNAL(clicked()), + this, + SLOT(updateCamera())); + + capture_ = new QPushButton("Capture"); + connect(capture_, + SIGNAL(clicked()), + this, + SIGNAL(capture())); + + QVBoxLayout *layout = new QVBoxLayout(); + layout->addLayout(grid); + layout->addWidget(update_); + layout->addWidget(capture_); + + setLayout(layout); +} + +CameraData CameraWidget::camera() const +{ + return cam_; +} + +void CameraWidget::setCamera(const CameraData& camera) +{ + cam_ = camera; + + lat_->setText(QString::number(cam_.center().latitude(), 'g', 10)); + lon_->setText(QString::number(cam_.center().longitude(), 'g', 10)); + distance_->setText(QString::number(cam_.distance(), 'g', 4)); + zoomLevel_->setText(QString::number(cam_.zoomLevel())); + zoomFactor_->setText(QString::number(cam_.zoomFactor())); + bearing_->setText(QString::number(cam_.bearing(), 'g', 10)); + tilt_->setText(QString::number(cam_.tilt(), 'g', 10)); + roll_->setText(QString::number(cam_.roll(), 'g', 10)); +} + +void CameraWidget::updateCamera() +{ + double lat = lat_->text().toDouble(); + double lon = lon_->text().toDouble(); + cam_.setCenter(QGeoCoordinate(lat, lon)); + if (!zoomFactor_->text().isEmpty()) { + cam_.setZoomFactor(zoomFactor_->text().toDouble()); + } else { + cam_.setZoomLevel(zoomLevel_->text().toInt()); + cam_.setDistance(distance_->text().toDouble()); + } + cam_.setBearing(bearing_->text().toDouble()); + cam_.setTilt(tilt_->text().toDouble()); + cam_.setRoll(roll_->text().toDouble()); + + emit updated(); +} diff --git a/tests/systemtests/map3d/camerawidget.h b/tests/systemtests/map3d/camerawidget.h new file mode 100644 index 00000000..d3e8faa4 --- /dev/null +++ b/tests/systemtests/map3d/camerawidget.h @@ -0,0 +1,46 @@ +#ifndef CAMERAWIDGET_H +#define CAMERAWIDGET_H + +#include <QWidget> + +#include "cameradata.h" + +class QLineEdit; +class QPushButton; + +class CameraWidget : public QWidget +{ + Q_OBJECT +public: + CameraWidget(QWidget *parent = 0); + + CameraData camera() const; + +public slots: + void setCamera(const CameraData& camera); + +private slots: + void updateCamera(); + +signals: + void updated(); + void capture(); + +private: + void setupUi(); + + CameraData cam_; + + QLineEdit *lat_; + QLineEdit *lon_; + QLineEdit *distance_; + QLineEdit *zoomLevel_; + QLineEdit *zoomFactor_; + QLineEdit *bearing_; + QLineEdit *tilt_; + QLineEdit *roll_; + QPushButton *update_; + QPushButton *capture_; +}; + +#endif // CAMERAWIDGET_H diff --git a/tests/systemtests/map3d/main.cpp b/tests/systemtests/map3d/main.cpp new file mode 100644 index 00000000..4c9d0b85 --- /dev/null +++ b/tests/systemtests/map3d/main.cpp @@ -0,0 +1,45 @@ +#include <QApplication> + +#include <QUrl> +#include <QSettings> +#include <QProcessEnvironment> +#include <QNetworkProxyFactory> + +#include "mainwidget.h" + +int main(int argc, char** argv) +{ + QApplication app(argc, argv); + + // not in the tutorial text: set up a proxy server from + // a QSettings file if necessary (useful on Linux) + + QApplication::setOrganizationName("Nokia"); + QApplication::setApplicationName("Maps3D"); + + QSettings settings; + + QVariant value = settings.value("http.proxy"); + if (value.isValid()) { + QUrl url(value.toString(), QUrl::TolerantMode); + QNetworkProxy proxy; + proxy.setType(QNetworkProxy::HttpProxy); + proxy.setHostName(url.host()); + proxy.setPort(url.port(8080)); + QNetworkProxy::setApplicationProxy(proxy); + } + + int bm = 0; + + if (argc == 2) { + bool ok = false; + bm = QString(QLatin1String(argv[1])).toInt(&ok); + if (!ok) + bm = 0; + } + + MainWidget *w = new MainWidget(0, bm); + w->show(); + + return app.exec(); +} diff --git a/tests/systemtests/map3d/mainwidget.cpp b/tests/systemtests/map3d/mainwidget.cpp new file mode 100644 index 00000000..1ad6a6dd --- /dev/null +++ b/tests/systemtests/map3d/mainwidget.cpp @@ -0,0 +1,300 @@ +#include "mainwidget.h" + +#include "tilecache.h" +#include "tileview.h" +#include "camerawidget.h" + +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QGridLayout> +#include <QTextEdit> +#include <QPushButton> +#include <QLabel> +#include <QLineEdit> +#include <QTimer> +#include <QComboBox> + +#include <QApplication> + +#include <QPropertyAnimation> +#include <QSequentialAnimationGroup> + +MainWidget::MainWidget(QWidget *parent, int bm) + : QWidget(parent), + exitWhenDone_(false) +{ + TileCache *cache = new TileCache(); + + tileView_ = new TileView(cache); + tileView_->setMinimumSize(450, 450); + + camera1_ = new CameraWidget(); + + connect(camera1_, + SIGNAL(updated()), + this, + SLOT(camera1Update())); + connect(camera1_, + SIGNAL(capture()), + this, + SLOT(camera1Capture())); + + camera2_ = new CameraWidget(); + + animate1_ = new QPushButton("Go"); + connect(animate1_, + SIGNAL(clicked()), + this, + SLOT(animate1Clicked())); + + animate2_ = new QPushButton("Go"); + connect(animate2_, + SIGNAL(clicked()), + this, + SLOT(animate2Clicked())); + + QLabel *durationLabel = new QLabel("Duration"); + duration_ = new QLineEdit(); + duration_->setText("2000"); + + QLabel *easingLabel = new QLabel("Easing Curve"); + easing_ = new QComboBox(); + easing_->setEditable(false); + + easing_->addItem("Linear", 0); + + easing_->addItem("InQuad", 1); + easing_->addItem("OutQuad", 2); + easing_->addItem("InOutQuad", 3); + easing_->addItem("OutInQuad", 4); + + easing_->addItem("InCubic", 5); + easing_->addItem("OutCubic", 6); + easing_->addItem("InOutCubic", 7); + easing_->addItem("OutInCubic", 8); + + easing_->addItem("InQuart", 9); + easing_->addItem("OutQuart", 10); + easing_->addItem("InOutQuart", 11); + easing_->addItem("OutInQuart", 12); + + easing_->addItem("InQunit", 13); + easing_->addItem("OutQunit", 14); + easing_->addItem("InOutQunit", 15); + easing_->addItem("OutInQunit", 16); + + easing_->addItem("InSine", 17); + easing_->addItem("OutSine", 18); + easing_->addItem("InOutSine", 19); + easing_->addItem("OutInSine", 20); + + easing_->addItem("InExpo", 21); + easing_->addItem("OutExpo", 22); + easing_->addItem("InOutExpo", 23); + easing_->addItem("OutInExpo", 24); + + easing_->addItem("InCirc", 25); + easing_->addItem("OutCirc", 26); + easing_->addItem("InOutCirc", 27); + easing_->addItem("OutInCirc", 28); + + easing_->addItem("InElastic", 29); + easing_->addItem("OutElastic", 30); + easing_->addItem("InOutElastic", 31); + easing_->addItem("OutInElastic", 32); + + easing_->addItem("InBounce", 33); + easing_->addItem("OutBounce", 34); + easing_->addItem("InOutBounce", 35); + easing_->addItem("OutInBounce", 36); + + easing_->addItem("InBack", 37); + easing_->addItem("OutBack", 38); + easing_->addItem("InOutBack", 39); + easing_->addItem("OutInBack", 40); + + connect(camera2_, + SIGNAL(updated()), + this, + SLOT(camera2Update())); + connect(camera2_, + SIGNAL(capture()), + this, + SLOT(camera2Capture())); + + bm1Button_ = new QPushButton("Benchmark 1"); + connect(bm1Button_, + SIGNAL(clicked()), + this, + SLOT(runBenchmark1())); + + QGridLayout *animateLayout = new QGridLayout; + animateLayout->addWidget(durationLabel, 0, 0); + animateLayout->addWidget(duration_, 0, 1); + animateLayout->addWidget(easingLabel, 1, 0); + animateLayout->addWidget(easing_, 1, 1); + + QGridLayout *cameraLayout = new QGridLayout; + cameraLayout->addWidget(camera1_, 0, 0); + cameraLayout->addWidget(camera2_, 0, 1); + cameraLayout->addLayout(animateLayout, 1, 0, 1, 2); + cameraLayout->addWidget(animate1_, 2, 0); + cameraLayout->addWidget(animate2_, 2, 1); + cameraLayout->addWidget(bm1Button_, 3, 0); + cameraLayout->setRowStretch(4, 1); + + QHBoxLayout *layout = new QHBoxLayout; + layout->addLayout(cameraLayout, 0); + layout->addWidget(tileView_, 1); + + CameraData c1; + camera1_->setCamera(c1); + CameraData c2; + c2.setCenter(QGeoCoordinate(-19.2, 146.75)); + c2.setZoomFactor(8.0); + camera2_->setCamera(c2); + + setLayout(layout); + + if (bm == 1) { + exitWhenDone_ = true; + QTimer::singleShot(0, this, SLOT(runBenchmark1())); + } +} + +void MainWidget::runBenchmark1() +{ + oldAutoUpdate_ = tileView_->map()->autoUpdate(); + tileView_->map()->setAutoUpdate(true); + + CameraData newCameraData; + newCameraData.setCenter(QGeoCoordinate(-19.2, 146.75)); + newCameraData.setZoomFactor(8.0); + // hack to get the internal projection set in the cameradata object + tileView_->map()->setCameraData(newCameraData); + CameraData newCamera = tileView_->map()->cameraData(); + + CameraData oldCameraData; + oldCameraData.setCenter(QGeoCoordinate(-27.5, 153)); + oldCameraData.setZoomFactor(4.0); + // hack to get the internal projection set in the cameradata object + tileView_->map()->setCameraData(oldCameraData); + CameraData oldCamera = tileView_->map()->cameraData(); + + QPropertyAnimation *a20f = new QPropertyAnimation(tileView_->map(), "camera", this); + a20f->setStartValue(QVariant::fromValue(oldCamera)); + a20f->setEndValue(QVariant::fromValue(newCamera)); + a20f->setDuration(20000); + + QPropertyAnimation *a20b = new QPropertyAnimation(tileView_->map(), "camera", this); + a20b->setStartValue(QVariant::fromValue(newCamera)); + a20b->setEndValue(QVariant::fromValue(oldCamera)); + a20b->setDuration(20000); + + QPropertyAnimation *a2f = new QPropertyAnimation(tileView_->map(), "camera", this); + a2f->setStartValue(QVariant::fromValue(oldCamera)); + a2f->setEndValue(QVariant::fromValue(newCamera)); + a2f->setDuration(2000); + + QPropertyAnimation *a2b = new QPropertyAnimation(tileView_->map(), "camera", this); + a2b->setStartValue(QVariant::fromValue(newCamera)); + a2b->setEndValue(QVariant::fromValue(oldCamera)); + a2b->setDuration(2000); + + QSequentialAnimationGroup *s2 = new QSequentialAnimationGroup(this); + s2->addAnimation(a2f); + s2->addAnimation(a2b); + s2->setLoopCount(10); + + QSequentialAnimationGroup *s = new QSequentialAnimationGroup(this); + s->addAnimation(a20f); + s->addAnimation(a20b); + s->addAnimation(s2); + + if (exitWhenDone_) { + connect(s, + SIGNAL(finished()), + qApp, + SLOT(quit())); + } + + QTimer::singleShot(0, s, SLOT(start())); + +} + +void MainWidget::camera1Update() +{ + tileView_->map()->setCameraData(camera1_->camera()); + if (!tileView_->map()->autoUpdate()) + tileView_->map()->update(); +} + +void MainWidget::camera2Update() +{ + tileView_->map()->setCameraData(camera2_->camera()); + if (!tileView_->map()->autoUpdate()) + tileView_->map()->update(); +} + +void MainWidget::camera1Capture() +{ + camera1_->setCamera(tileView_->map()->cameraData()); +} + +void MainWidget::camera2Capture() +{ + camera2_->setCamera(tileView_->map()->cameraData()); +} + +void MainWidget::animate1Clicked() +{ + oldAutoUpdate_ = tileView_->map()->autoUpdate(); + tileView_->map()->setAutoUpdate(true); + CameraData oldCamera = tileView_->map()->cameraData(); + CameraData newCamera = camera1_->camera(); + + QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this); + + connect(a, + SIGNAL(finished()), + this, + SLOT(animationFinished())); + + a->setStartValue(QVariant::fromValue(oldCamera)); + a->setEndValue(QVariant::fromValue(newCamera)); + a->setDuration(duration_->text().toInt()); + a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt())); + + QTimer::singleShot(0, a, SLOT(start())); +} + +void MainWidget::animate2Clicked() +{ + oldAutoUpdate_ = tileView_->map()->autoUpdate(); + tileView_->map()->setAutoUpdate(true); + CameraData oldCamera = tileView_->map()->cameraData(); + CameraData newCamera = camera2_->camera(); + + QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this); + + connect(a, + SIGNAL(finished()), + this, + SLOT(animationFinished())); + + a->setStartValue(QVariant::fromValue(oldCamera)); + a->setEndValue(QVariant::fromValue(newCamera)); + a->setDuration(duration_->text().toInt()); + a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt())); + +// TilePlan *tp = new TilePlan(a); +// tileView_->map()->mapCamera()->prepareAnimation(tp); +// delete tp; + + QTimer::singleShot(0, a, SLOT(start())); +} + +void MainWidget::animationFinished() +{ + tileView_->map()->setAutoUpdate(oldAutoUpdate_); +} diff --git a/tests/systemtests/map3d/mainwidget.h b/tests/systemtests/map3d/mainwidget.h new file mode 100644 index 00000000..3a7f072d --- /dev/null +++ b/tests/systemtests/map3d/mainwidget.h @@ -0,0 +1,48 @@ +#ifndef MAINWIDGET_H +#define MAINWIDGET_H + +#include <QWidget> + +class TileView; +class CameraWidget; + +class QTextEdit; +class QPushButton; +class QLineEdit; +class QComboBox; + +class MainWidget : public QWidget +{ + Q_OBJECT +public: + MainWidget(QWidget *parent = 0, int bm = 0); + +public slots: + void camera1Update(); + void camera1Capture(); + void camera2Update(); + void camera2Capture(); + void animate1Clicked(); + void animate2Clicked(); + void animationFinished(); + + void runBenchmark1(); + +private: + TileView *tileView_; + + CameraWidget *camera1_; + CameraWidget *camera2_; + QLineEdit *duration_; + QComboBox *easing_; + QPushButton *animate1_; + QPushButton *animate2_; + + QPushButton *bm1Button_; + + bool exitWhenDone_; + + bool oldAutoUpdate_; +}; + +#endif // MAINWIDGET_H diff --git a/tests/systemtests/map3d/map3d.pro b/tests/systemtests/map3d/map3d.pro new file mode 100644 index 00000000..1430fb92 --- /dev/null +++ b/tests/systemtests/map3d/map3d.pro @@ -0,0 +1,26 @@ + +TEMPLATE = app +TARGET = map3d + +CONFIG += qt warn_on qt3d + +QT += network location + +INCLUDEPATH += ../../../src/location/mapsgl/map3d + +HEADERS += \ + camerawidget.h \ + mainwidget.h \ + tileview.h + +SOURCES += \ + main.cpp \ + camerawidget.cpp \ + mainwidget.cpp \ + tileview.cpp + +#install +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d +sources.files = $$SOURCES $HEADERS $$RESOURCES $$FORMS *.pro +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d +INSTALLS += target sources diff --git a/tests/systemtests/map3d/tileview.cpp b/tests/systemtests/map3d/tileview.cpp new file mode 100644 index 00000000..6b67cb33 --- /dev/null +++ b/tests/systemtests/map3d/tileview.cpp @@ -0,0 +1,252 @@ +#include "tileview.h" + +#include "tilecache.h" +#include "tile.h" +#include "cameradata.h" +#include "mapitem.h" + +#include "qgeocoordinate.h" + +#include "qgeoserviceprovider.h" +#include "qgeomappingmanager.h" + +#include <qglscenenode.h> +#include <qglbuilder.h> +#include <qgeometrydata.h> + +#include <QApplication> +#include <QKeyEvent> +#include <QTimer> + +#include <QColor> + +#include <QPropertyAnimation> + +#include <cmath> + +#include <QDebug> + +TileView::TileView(TileCache *tileCache, QWidget *parent) : + QGLView(parent), + tileCache_(tileCache) +{ + serviceProvider_ = new QGeoServiceProvider("nokia"); + map_ = new Map(tileCache, this); + map_->setMappingManager(serviceProvider_->mappingManager()); + map_->setAutoUpdate(false); + + connect(map_, + SIGNAL(updateRequired()), + this, + SLOT(update())); + + setCamera(map_->glCamera()); + + + MapItem *item1 = new MapItem; + item1->setCoordinate(QGeoCoordinate(-27, 153)); + item1->setSize(QSizeF(128, 128)); + item1->setZoom(5); + map_->addMapItem(item1); + + MapItem *item2 = new MapItem; + item2->setCoordinate(QGeoCoordinate(-27, 153)); + item2->setSize(QSizeF(128, 128)); + item2->setAnchor(QPointF(128, 128)); + item2->setZoom(5); + map_->addMapItem(item2); + + MapItem *item3 = new MapItem; + item3->setCoordinate(QGeoCoordinate(-27, 153)); + item3->setSize(QSizeF(256.0, 256.0)); + item3->setAnchor(QPointF(-256.0, -256.0)); + item3->setZoom(6); + map_->addMapItem(item3); +} + +TileView::~TileView() +{ + delete serviceProvider_; +} + +Map* TileView::map() +{ + return map_; +} + +void TileView::closeEvent(QCloseEvent *) +{ + qApp->quit(); +} + +void TileView::paintGL(QGLPainter *painter) +{ + map_->paintGL(painter); +// QGLSceneNode *node = map_->sceneNodeForRendering(); +// if (node) { +// node->draw(painter); +// map_->sceneNodeRenderingDone(); +// } +} + +void TileView::showEvent(QShowEvent *) +{ + updateAspectRatio(); +} + +void TileView::resizeEvent(QResizeEvent *event) +{ + QGLView::resizeEvent(event); + updateAspectRatio(); +} + +void TileView::updateAspectRatio() +{ + map_->resize(width(), height()); +} + +void TileView::enterEvent(QEvent *) +{ + setFocus(); + grabKeyboard(); +} + +void TileView::leaveEvent(QEvent *) +{ + releaseKeyboard(); +} + +void TileView::keyPressEvent(QKeyEvent *e) +{ + CameraData cameraData = map_->cameraData(); + if (e->key() == Qt::Key_Left) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLongitude(coord.longitude() - 1); + cameraData.setCenter(coord); + } else { + cameraData.setBearing(cameraData.bearing() - 5.0); + } + } else if (e->key() == Qt::Key_Right) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLongitude(coord.longitude() + 1); + cameraData.setCenter(coord); + } else { + cameraData.setBearing(cameraData.bearing() + 5.0); + } + } else if (e->key() == Qt::Key_Up) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() + 1); + cameraData.setCenter(coord); + } else { + cameraData.setTilt(cameraData.tilt() - 5.0); + } + } else if (e->key() == Qt::Key_Down) { + if (e->modifiers() & Qt::ShiftModifier) { + QGeoCoordinate coord = cameraData.center(); + coord.setLatitude(coord.latitude() - 1); + cameraData.setCenter(coord); + } else { + cameraData.setTilt(cameraData.tilt() + 5.0); + } + } else if (e->key() == Qt::Key_Plus) { + if (e->modifiers() & Qt::ShiftModifier) { + cameraData.setDistance(cameraData.distance() / 2.0); + cameraData.setZoomLevel(cameraData.zoomLevel() + 1); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() / 1.1); + } + } else if (e->key() == Qt::Key_Minus) { + if (e->modifiers() & Qt::ShiftModifier) { + if (cameraData.zoomLevel() != 1) + cameraData.setZoomLevel(cameraData.zoomLevel() - 1); + cameraData.setDistance(cameraData.distance() * 2.0); + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } else { + cameraData.setDistance(cameraData.distance() * 1.1); + } + } else if (e->key() == Qt::Key_U) { + map_->setCameraData(cameraData); + if (!map_->autoUpdate()) + map_->update(); + } + map_->setCameraData(cameraData); + update(); +} + +//void TileView::wheelEvent(QWheelEvent *e) +//{ +// CameraData cameraData = map_->cameraData(); +// if (e->delta() > 0) { +// if (e->modifiers() & Qt::ShiftModifier) { +// cameraData.setDistance(cameraData.distance() / 2.0); +// cameraData.setZoomLevel(cameraData.zoomLevel() + 1); +// map_->setCameraData(cameraData); +// if (!map_->autoUpdate()) +// map_->update(); +// } else { +// cameraData.setDistance(cameraData.distance() / 1.1); +// } +// } else { +// if (e->modifiers() & Qt::ShiftModifier) { +// if (cameraData.zoomLevel() != 1) +// cameraData.setZoomLevel(cameraData.zoomLevel() - 1); +// cameraData.setDistance(cameraData.distance() * 2.0); +// map_->setCameraData(cameraData); +// if (!map_->autoUpdate()) +// map_->update(); +// } else { +// cameraData.setDistance(cameraData.distance() * 1.1); +// } +// } +// map_->setCameraData(cameraData); +// update(); + +// e->accept(); +//} +// +//void TileView::mousePressEvent(QMouseEvent *e) +//{ +// switch (e->button()) { +// case Qt::LeftButton: +// mousePos_ = e->pos(); +//// QGeoCoordinate coord = map_->screenPositionToCoordinate(mousePos_); +//// qDebug() << __FUNCTION__ +//// << "mousePos " << mousePos_ +//// << " -> coord " << coord +//// << " -> screen " << map_->coordinateToScreenPosition(coord); +// break; +// } +// e->accept(); +//} + +//void TileView::mouseReleaseEvent(QMouseEvent *e) +//{ +//} + +//void TileView::mouseMoveEvent(QMouseEvent *e) +//{ +// CameraData cameraData = map_->cameraData(); + +// if ((e->buttons() & Qt::LeftButton) == Qt::LeftButton) +// { +// // Pixel pan support?! +// QPoint delta = (mousePos_ - e->pos()) / 50; + +// QGeoCoordinate coord = cameraData.center(); +// coord.setLatitude(coord.latitude() + delta.y()); +// coord.setLongitude(coord.longitude() - delta.x()); +// cameraData.setCenter(coord); + +// map_->setCameraData(cameraData); +// update(); +// } +// e->accept(); +//} diff --git a/tests/systemtests/map3d/tileview.h b/tests/systemtests/map3d/tileview.h new file mode 100644 index 00000000..3545848f --- /dev/null +++ b/tests/systemtests/map3d/tileview.h @@ -0,0 +1,51 @@ +#ifndef TILEVIEW_H +#define TILEVIEW_H + +#include <qglview.h> + +#include "cameradata.h" +#include "map.h" + +class QGLPainter; +class QGLSceneNode; +class TileCache; +class Tile; +class TileSpec; +class MapSphere; +class QGeoServiceProvider; +class ScriptEngine; + +class TileView : public QGLView +{ + Q_OBJECT +public: + explicit TileView(TileCache *tileCache, QWidget *parent = 0); + ~TileView(); + + Map *map(); + + void paintGL(QGLPainter *painter); + +protected: + void showEvent(QShowEvent *); + void resizeEvent(QResizeEvent *); + void enterEvent(QEvent *); + void leaveEvent(QEvent *e); + void keyPressEvent(QKeyEvent *e); + void closeEvent(QCloseEvent *); + +// void wheelEvent(QWheelEvent *e); +// void mousePressEvent(QMouseEvent *e); +// void mouseReleaseEvent(QMouseEvent *e); +// void mouseMoveEvent(QMouseEvent *e); + +private: + void updateAspectRatio(); + + QGeoServiceProvider *serviceProvider_; + TileCache *tileCache_; + Map *map_; + QPoint mousePos_; +}; + +#endif // TILEVIEW_H diff --git a/tests/tests.pro b/tests/tests.pro index 157ef345..622bb344 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -1,2 +1,2 @@ TEMPLATE = subdirs -SUBDIRS += auto +SUBDIRS = auto declarativetestplugin |