summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cmake.conf4
-rw-r--r--CMakeLists.txt1
-rw-r--r--coin/axivion/ci_config_linux.json41
-rw-r--r--conanfile.py34
-rw-r--r--dependencies.yaml6
-rw-r--r--examples/CMakeLists.txt2
-rw-r--r--examples/datavisualization/CMakeLists.txt16
-rw-r--r--examples/datavisualization/bars/CMakeLists.txt44
-rw-r--r--examples/datavisualization/bars/bars.pro17
-rw-r--r--examples/datavisualization/bars/doc/images/bars-example.pngbin238712 -> 0 bytes
-rw-r--r--examples/datavisualization/bars/doc/src/bars.qdoc206
-rw-r--r--examples/datavisualization/customitems/CMakeLists.txt68
-rw-r--r--examples/datavisualization/customitems/customitemgraph.cpp303
-rw-r--r--examples/datavisualization/customitems/customitemgraph.h41
-rw-r--r--examples/datavisualization/customitems/customitems.pro19
-rw-r--r--examples/datavisualization/customitems/customitems.qrc12
-rw-r--r--examples/datavisualization/customitems/doc/images/customitems-example.pngbin109729 -> 0 bytes
-rw-r--r--examples/datavisualization/customitems/doc/src/customitems.qdoc64
-rw-r--r--examples/datavisualization/customitems/main.cpp114
-rw-r--r--examples/datavisualization/customproxy/CMakeLists.txt55
-rw-r--r--examples/datavisualization/customproxy/customproxy.pro25
-rw-r--r--examples/datavisualization/customproxy/customproxy.qrc5
-rw-r--r--examples/datavisualization/customproxy/data/raindata.txt158
-rw-r--r--examples/datavisualization/customproxy/doc/images/customproxy-example.pngbin173744 -> 0 bytes
-rw-r--r--examples/datavisualization/customproxy/doc/src/customproxy.qdoc99
-rw-r--r--examples/datavisualization/customproxy/main.cpp28
-rw-r--r--examples/datavisualization/customproxy/rainfallgraph.cpp141
-rw-r--r--examples/datavisualization/customproxy/rainfallgraph.h34
-rw-r--r--examples/datavisualization/datavisualization.pro12
-rw-r--r--examples/datavisualization/draggableaxes/CMakeLists.txt44
-rw-r--r--examples/datavisualization/draggableaxes/data.cpp147
-rw-r--r--examples/datavisualization/draggableaxes/data.h31
-rw-r--r--examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.pngbin90050 -> 0 bytes
-rw-r--r--examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc111
-rw-r--r--examples/datavisualization/draggableaxes/draggableaxes.pro18
-rw-r--r--examples/datavisualization/draggableaxes/main.cpp52
-rw-r--r--examples/datavisualization/graphgallery/CMakeLists.txt75
-rw-r--r--examples/datavisualization/graphgallery/axesinputhandler.cpp (renamed from examples/datavisualization/draggableaxes/axesinputhandler.cpp)12
-rw-r--r--examples/datavisualization/graphgallery/axesinputhandler.h (renamed from examples/datavisualization/draggableaxes/axesinputhandler.h)22
-rw-r--r--examples/datavisualization/graphgallery/bargraph.cpp (renamed from examples/datavisualization/bars/main.cpp)294
-rw-r--r--examples/datavisualization/graphgallery/bargraph.h26
-rw-r--r--examples/datavisualization/graphgallery/custominputhandler.cpp (renamed from examples/datavisualization/texturesurface/custominputhandler.cpp)30
-rw-r--r--examples/datavisualization/graphgallery/custominputhandler.h (renamed from examples/datavisualization/texturesurface/custominputhandler.h)44
-rw-r--r--examples/datavisualization/graphgallery/data/layer_1.png (renamed from examples/datavisualization/customitems/layer_1.png)bin34540 -> 34540 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/layer_2.png (renamed from examples/datavisualization/customitems/layer_2.png)bin10553 -> 10553 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/layer_3.png (renamed from examples/datavisualization/customitems/layer_3.png)bin7119 -> 7119 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/license.txt (renamed from examples/datavisualization/texturesurface/license.txt)0
-rw-r--r--examples/datavisualization/graphgallery/data/maptexture.jpg (renamed from examples/datavisualization/texturesurface/maptexture.jpg)bin352922 -> 352922 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/oilrig.obj (renamed from examples/datavisualization/customitems/oilrig.obj)0
-rw-r--r--examples/datavisualization/graphgallery/data/pipe.obj (renamed from examples/datavisualization/customitems/pipe.obj)0
-rw-r--r--examples/datavisualization/graphgallery/data/raindata.txt158
-rw-r--r--examples/datavisualization/graphgallery/data/refinery.obj (renamed from examples/datavisualization/customitems/refinery.obj)0
-rw-r--r--examples/datavisualization/graphgallery/data/topography.png (renamed from examples/datavisualization/texturesurface/topography.png)bin395504 -> 395504 bytes
-rw-r--r--examples/datavisualization/graphgallery/doc/images/graphgallery-example.pngbin0 -> 375425 bytes
-rw-r--r--examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc705
-rw-r--r--examples/datavisualization/graphgallery/graphgallery.pro49
-rw-r--r--examples/datavisualization/graphgallery/graphgallery.qrc13
-rw-r--r--examples/datavisualization/graphgallery/graphmodifier.cpp (renamed from examples/datavisualization/bars/graphmodifier.cpp)145
-rw-r--r--examples/datavisualization/graphgallery/graphmodifier.h (renamed from examples/datavisualization/bars/graphmodifier.h)69
-rw-r--r--examples/datavisualization/graphgallery/highlightseries.cpp (renamed from examples/datavisualization/texturesurface/highlightseries.cpp)25
-rw-r--r--examples/datavisualization/graphgallery/highlightseries.h (renamed from examples/datavisualization/texturesurface/highlightseries.h)20
-rw-r--r--examples/datavisualization/graphgallery/main.cpp52
-rw-r--r--examples/datavisualization/graphgallery/rainfalldata.cpp117
-rw-r--r--examples/datavisualization/graphgallery/rainfalldata.h43
-rw-r--r--examples/datavisualization/graphgallery/scatterdatamodifier.cpp (renamed from examples/datavisualization/scatter/scatterdatamodifier.cpp)155
-rw-r--r--examples/datavisualization/graphgallery/scatterdatamodifier.h (renamed from examples/datavisualization/scatter/scatterdatamodifier.h)33
-rw-r--r--examples/datavisualization/graphgallery/scattergraph.cpp142
-rw-r--r--examples/datavisualization/graphgallery/scattergraph.h26
-rw-r--r--examples/datavisualization/graphgallery/surfacegraph.cpp346
-rw-r--r--examples/datavisualization/graphgallery/surfacegraph.h26
-rw-r--r--examples/datavisualization/graphgallery/surfacegraphmodifier.cpp647
-rw-r--r--examples/datavisualization/graphgallery/surfacegraphmodifier.h109
-rw-r--r--examples/datavisualization/graphgallery/topographicseries.cpp (renamed from examples/datavisualization/texturesurface/topographicseries.cpp)29
-rw-r--r--examples/datavisualization/graphgallery/topographicseries.h (renamed from examples/datavisualization/texturesurface/topographicseries.h)14
-rw-r--r--examples/datavisualization/graphgallery/variantbardatamapping.cpp (renamed from examples/datavisualization/customproxy/variantbardatamapping.cpp)41
-rw-r--r--examples/datavisualization/graphgallery/variantbardatamapping.h (renamed from examples/datavisualization/customproxy/variantbardatamapping.h)28
-rw-r--r--examples/datavisualization/graphgallery/variantbardataproxy.cpp (renamed from examples/datavisualization/customproxy/variantbardataproxy.cpp)41
-rw-r--r--examples/datavisualization/graphgallery/variantbardataproxy.h (renamed from examples/datavisualization/customproxy/variantbardataproxy.h)13
-rw-r--r--examples/datavisualization/graphgallery/variantdataset.cpp (renamed from examples/datavisualization/customproxy/variantdataset.cpp)11
-rw-r--r--examples/datavisualization/graphgallery/variantdataset.h (renamed from examples/datavisualization/customproxy/variantdataset.h)19
-rw-r--r--examples/datavisualization/qml3doscilloscope/doc/images/qml3doscilloscope-example.pngbin129028 -> 0 bytes
-rw-r--r--examples/datavisualization/qml3doscilloscope/doc/src/qml3doscilloscope.qdoc124
-rw-r--r--examples/datavisualization/qml3doscilloscope/qml/qml3doscilloscope/main.qml284
-rw-r--r--examples/datavisualization/qml3doscilloscope/qml3doscilloscope.qrc5
-rw-r--r--examples/datavisualization/qmlaxishandling/CMakeLists.txt2
-rw-r--r--examples/datavisualization/qmlaxishandling/customformatter.cpp6
-rw-r--r--examples/datavisualization/qmlaxishandling/customformatter.h6
-rw-r--r--examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc1
-rw-r--r--examples/datavisualization/qmlaxishandling/main.cpp2
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml4
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml2
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml2
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml2
-rw-r--r--examples/datavisualization/qmlbars/CMakeLists.txt2
-rw-r--r--examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc1
-rw-r--r--examples/datavisualization/qmlbars/main.cpp2
-rw-r--r--examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml2
-rw-r--r--examples/datavisualization/qmlbars/qml/qmlbars/Data.qml2
-rw-r--r--examples/datavisualization/qmlbars/qml/qmlbars/main.qml2
-rw-r--r--examples/datavisualization/qmlscatter/CMakeLists.txt2
-rw-r--r--examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc77
-rw-r--r--examples/datavisualization/qmlscatter/main.cpp2
-rw-r--r--examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml2
-rw-r--r--examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml2
-rw-r--r--examples/datavisualization/qmlspectrogram/CMakeLists.txt53
-rw-r--r--examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.pngbin80103 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc78
-rw-r--r--examples/datavisualization/qmlspectrogram/main.cpp28
-rw-r--r--examples/datavisualization/qmlspectrogram/qmlspectrogram.pro12
-rw-r--r--examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc6
-rw-r--r--examples/datavisualization/qmlsurface/CMakeLists.txt55
-rw-r--r--examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.pngbin334593 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc97
-rw-r--r--examples/datavisualization/qmlsurface/heightmap.pngbin38634 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurface/main.cpp33
-rw-r--r--examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml10014
-rw-r--r--examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml276
-rw-r--r--examples/datavisualization/qmlsurface/qmlsurface.pro12
-rw-r--r--examples/datavisualization/qmlsurface/qmlsurface.qrc9
-rw-r--r--examples/datavisualization/qmlsurfacegallery/CMakeLists.txt (renamed from examples/datavisualization/qml3doscilloscope/CMakeLists.txt)26
-rw-r--r--examples/datavisualization/qmlsurfacegallery/datasource.cpp (renamed from examples/datavisualization/qml3doscilloscope/datasource.cpp)64
-rw-r--r--examples/datavisualization/qmlsurfacegallery/datasource.h (renamed from examples/datavisualization/qml3doscilloscope/datasource.h)25
-rw-r--r--examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.pngbin0 -> 172206 bytes
-rw-r--r--examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc238
-rw-r--r--examples/datavisualization/qmlsurfacegallery/main.cpp (renamed from examples/datavisualization/qml3doscilloscope/main.cpp)38
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SpectrogramData.qml (renamed from examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/Data.qml)4
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml227
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml430
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml (renamed from examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml)151
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.pngbin0 -> 638731 bytes
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme25
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml57
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.pro (renamed from examples/datavisualization/qml3doscilloscope/qml3doscilloscope.pro)7
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc10
-rw-r--r--examples/datavisualization/scatter/CMakeLists.txt43
-rw-r--r--examples/datavisualization/scatter/doc/images/scatter-example.pngbin142496 -> 0 bytes
-rw-r--r--examples/datavisualization/scatter/doc/src/scatter.qdoc135
-rw-r--r--examples/datavisualization/scatter/main.cpp170
-rw-r--r--examples/datavisualization/scatter/scatter.pro17
-rw-r--r--examples/datavisualization/surface/CMakeLists.txt57
-rw-r--r--examples/datavisualization/surface/doc/images/surface-example.pngbin149046 -> 0 bytes
-rw-r--r--examples/datavisualization/surface/doc/src/surface.qdoc125
-rw-r--r--examples/datavisualization/surface/main.cpp205
-rw-r--r--examples/datavisualization/surface/mountain.pngbin34540 -> 0 bytes
-rw-r--r--examples/datavisualization/surface/surface.pro20
-rw-r--r--examples/datavisualization/surface/surface.qrc5
-rw-r--r--examples/datavisualization/surface/surfacegraph.cpp251
-rw-r--r--examples/datavisualization/surface/surfacegraph.h71
-rw-r--r--examples/datavisualization/texturesurface/CMakeLists.txt64
-rw-r--r--examples/datavisualization/texturesurface/doc/images/texturesurface-example.pngbin157373 -> 0 bytes
-rw-r--r--examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc115
-rw-r--r--examples/datavisualization/texturesurface/main.cpp95
-rw-r--r--examples/datavisualization/texturesurface/surfacegraph.cpp73
-rw-r--r--examples/datavisualization/texturesurface/surfacegraph.h35
-rw-r--r--examples/datavisualization/texturesurface/texturedsurface.qrc6
-rw-r--r--examples/datavisualization/texturesurface/texturesurface.pro25
-rw-r--r--examples/datavisualization/volumetric/CMakeLists.txt2
-rw-r--r--examples/datavisualization/volumetric/doc/images/volumetric-example.pngbin177203 -> 169556 bytes
-rw-r--r--examples/datavisualization/volumetric/doc/src/volumetric.qdoc97
-rw-r--r--examples/datavisualization/volumetric/main.cpp29
-rw-r--r--examples/datavisualization/volumetric/volumetric.cpp121
-rw-r--r--examples/datavisualization/volumetric/volumetric.h76
-rw-r--r--licenseRule.json89
-rw-r--r--src/datavisualization/CMakeLists.txt28
-rw-r--r--src/datavisualization/data/abstractitemmodelhandler_p.h2
-rw-r--r--src/datavisualization/data/baritemmodelhandler.cpp2
-rw-r--r--src/datavisualization/data/scatteritemmodelhandler.cpp2
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler.cpp2
-rw-r--r--src/datavisualization/doc/qtdatavis3d.qdocconf2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro2
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-overview.qdoc15
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc2
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc2
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc2
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc2
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization.qdoc11
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp10
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp4
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/axisrendercache.cpp2
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp2
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp2
-rw-r--r--src/datavisualization/engine/q3dscatter.cpp2
-rw-r--r--src/datavisualization/engine/q3dsurface.cpp2
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp6
-rw-r--r--src/datavisualization/engine/scatter3dcontroller.cpp2
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp2
-rw-r--r--src/datavisualization/engine/selectionpointer.cpp6
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp2
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp2
-rw-r--r--src/datavisualization/input/q3dinputhandler.cpp2
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler.cpp6
-rw-r--r--src/datavisualization/theme/q3dtheme.cpp24
-rw-r--r--src/datavisualization/theme/q3dtheme.h2
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper.cpp2
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper_p.h1
-rw-r--r--src/datavisualizationqml/CMakeLists.txt5
-rw-r--r--src/datavisualizationqml/abstractdeclarative.cpp15
-rw-r--r--src/datavisualizationqml/declarativetheme.cpp2
-rw-r--r--sync.profile16
-rw-r--r--tests/auto/cpptest/q3daxis-category/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3daxis-value/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dbars-series/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dbars/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dbars/tst_bars.cpp6
-rw-r--r--tests/auto/cpptest/q3dcustom-label/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dcustom/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dinput-touch/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dinput/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscatter-series/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscatter/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscatter/tst_scatter.cpp6
-rw-r--r--tests/auto/cpptest/q3dscene-camera/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscene-light/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dscene/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt4
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dsurface-series/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dsurface/CMakeLists.txt2
-rw-r--r--tests/auto/cpptest/q3dsurface/tst_surface.cpp6
-rw-r--r--tests/auto/cpptest/q3dtheme/CMakeLists.txt2
-rw-r--r--tests/auto/qmltest/CMakeLists.txt4
-rw-r--r--tests/auto/qmltest/bars3d/tst_bars.qml4
-rw-r--r--tests/auto/qmltest/bars3d/tst_basic.qml73
-rw-r--r--tests/auto/qmltest/scatter3d/tst_basic.qml85
-rw-r--r--tests/auto/qmltest/scene3d/tst_scene.qml2
-rw-r--r--tests/auto/qmltest/surface3d/tst_basic.qml81
-rw-r--r--tests/manual/barstest/CMakeLists.txt2
-rw-r--r--tests/manual/barstest/chart.cpp2
-rw-r--r--tests/manual/itemmodeltest/main.cpp6
-rw-r--r--tests/manual/qmlbarsrowcolors/CMakeLists.txt20
-rw-r--r--tests/manual/qmldynamicdata/CMakeLists.txt2
-rw-r--r--tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml11
-rw-r--r--tests/manual/qmlgradient/CMakeLists.txt2
-rw-r--r--tests/manual/qmlheightmap/CMakeLists.txt2
-rw-r--r--tests/manual/qmlmultitest/CMakeLists.txt2
-rw-r--r--tests/manual/qmlperf/CMakeLists.txt2
-rw-r--r--tests/manual/qmlvolume/CMakeLists.txt2
-rw-r--r--tests/manual/qmlvolume/datasource.cpp2
-rw-r--r--tests/manual/qmlvolume/qml/qmlvolume/main.qml24
-rw-r--r--tests/manual/scattertest/CMakeLists.txt2
-rw-r--r--tests/manual/scattertest/scatterchart.cpp2
-rw-r--r--tests/manual/surfacetest/CMakeLists.txt2
-rw-r--r--tests/manual/surfacetest/graphmodifier.cpp2
258 files changed, 4883 insertions, 15700 deletions
diff --git a/.cmake.conf b/.cmake.conf
index 2792a7d5..dc1d7a92 100644
--- a/.cmake.conf
+++ b/.cmake.conf
@@ -1,3 +1,5 @@
-set(QT_REPO_MODULE_VERSION "6.6.0")
+set(QT_REPO_MODULE_VERSION "6.8.0")
set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1")
+list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1")
+list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66ba17dc..f5428101 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,7 @@ project(QtDataVisualization
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals)
find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS
Core OpenGL Quick Qml Gui Widgets QuickTest Test)
+qt_internal_project_setup()
macro(assertTargets)
foreach(qtTarget IN ITEMS ${ARGN})
diff --git a/coin/axivion/ci_config_linux.json b/coin/axivion/ci_config_linux.json
new file mode 100644
index 00000000..7bf3dd7c
--- /dev/null
+++ b/coin/axivion/ci_config_linux.json
@@ -0,0 +1,41 @@
+{
+ "Project": {
+ "BuildSystemIntegration": {
+ "child_order": [
+ "GCCSetup",
+ "CMake",
+ "LinkLibraries"
+ ]
+ },
+ "CMake": {
+ "_active": true,
+ "_copy_from": "CMakeIntegration",
+ "build_environment": {},
+ "build_options": "-j4",
+ "generate_options": "--fresh",
+ "generator": "Ninja"
+ },
+ "GCCSetup": {
+ "_active": true,
+ "_copy_from": "Command",
+ "build_command": "gccsetup --cc gcc --cxx g++ --config ../../../axivion/"
+ },
+ "LinkLibraries": {
+ "_active": true,
+ "_copy_from": "AxivionLinker",
+ "input_files": [
+ "build/lib/lib*.so*.ir",
+ "build/qml/*/lib*.so*.ir"
+ ],
+ "ir": "build/$(env:TESTED_MODULE_COIN).ir"
+ }
+ },
+ "_Format": "1.0",
+ "_Version": "7.6.2",
+ "_VersionNum": [
+ 7,
+ 6,
+ 2,
+ 12725
+ ]
+}
diff --git a/conanfile.py b/conanfile.py
deleted file mode 100644
index 50a21397..00000000
--- a/conanfile.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 2021 The Qt Company Ltd.
-# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-from conans import ConanFile
-import re
-from pathlib import Path
-
-
-def _parse_qt_version_by_key(key: str) -> str:
- with open(Path(__file__).parent.resolve() / ".cmake.conf") as f:
- m = re.search(fr'{key} .*"(.*)"', f.read())
- return m.group(1) if m else ""
-
-
-def _get_qt_minor_version() -> str:
- return ".".join(_parse_qt_version_by_key("QT_REPO_MODULE_VERSION").split(".")[:2])
-
-
-class QtDataVisualization(ConanFile):
- name = "qtdatavis3d"
- license = "GPL-3.0+, Commercial Qt License Agreement"
- author = "The Qt Company <https://www.qt.io/contact-us>"
- url = "https://code.qt.io/cgit/qt/qtdatavis3d.git"
- description = (
- "Qt Data Visualization provides UI Components for displaying 3D graphs, driven by static or "
- "dynamic data models."
- )
- topics = "qt", "qt6", "data visualization", "qtquick"
- settings = "os", "compiler", "arch", "build_type"
- # for referencing the version number and prerelease tag and dependencies info
- exports = ".cmake.conf", "dependencies.yaml"
- exports_sources = "*", "!conan*.*"
- python_requires = f"qt-conan-common/{_get_qt_minor_version()}@qt/everywhere"
- python_requires_extend = "qt-conan-common.QtLeafModule"
diff --git a/dependencies.yaml b/dependencies.yaml
index 62d0fe4c..b9fb2c5e 100644
--- a/dependencies.yaml
+++ b/dependencies.yaml
@@ -1,10 +1,10 @@
dependencies:
../qtbase:
- ref: d7e8d5bb1b5a9c4b21a3d824780c672eaf4e56b1
+ ref: f0633e823796775d2c019363ca4f1cb008851402
required: true
../qtdeclarative:
- ref: a6d9312c99d6f80cbea7538276d2890d0cc4c760
+ ref: 1635ca51f018bbb8d1ea5069a7f2ed8503be8cb9
required: false
../qtmultimedia:
- ref: 060028c7150d86313acd8365ec1d20be09bd88c4
+ ref: 3873ceb52cfc6205ce56a218fd3f772dcb396b91
required: false
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 39981d6f..9a9782af 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_examples_build_begin(EXTERNAL_BUILD)
diff --git a/examples/datavisualization/CMakeLists.txt b/examples/datavisualization/CMakeLists.txt
index b6c45906..4e9514b1 100644
--- a/examples/datavisualization/CMakeLists.txt
+++ b/examples/datavisualization/CMakeLists.txt
@@ -1,21 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
if(TARGET Qt::Quick)
+ qt_internal_add_example(qmlaxishandling)
qt_internal_add_example(qmlbars)
qt_internal_add_example(qmlscatter)
- qt_internal_add_example(qmlsurface)
- qt_internal_add_example(qml3doscilloscope)
- qt_internal_add_example(qmlaxishandling)
- qt_internal_add_example(qmlspectrogram)
+ qt_internal_add_example(qmlsurfacegallery)
endif()
if(NOT ANDROID AND NOT IOS AND NOT WINRT)
- qt_internal_add_example(bars)
- qt_internal_add_example(customproxy)
- qt_internal_add_example(scatter)
- qt_internal_add_example(surface)
- qt_internal_add_example(draggableaxes)
- qt_internal_add_example(customitems)
- qt_internal_add_example(texturesurface)
+ qt_internal_add_example(graphgallery)
qt_internal_add_example(volumetric)
endif()
diff --git a/examples/datavisualization/bars/CMakeLists.txt b/examples/datavisualization/bars/CMakeLists.txt
deleted file mode 100644
index 1b7ddbae..00000000
--- a/examples/datavisualization/bars/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(bars LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(bars
- graphmodifier.cpp graphmodifier.h
- main.cpp
-)
-set_target_properties(bars PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(bars PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
- Qt::DataVisualization
-)
-
-install(TARGETS bars
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/bars/bars.pro b/examples/datavisualization/bars/bars.pro
deleted file mode 100644
index 148fc66e..00000000
--- a/examples/datavisualization/bars/bars.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp graphmodifier.cpp
-HEADERS += graphmodifier.h
-
-QT += widgets
-requires(qtConfig(fontcombobox))
-requires(qtConfig(combobox))
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/bars/doc/images/bars-example.png b/examples/datavisualization/bars/doc/images/bars-example.png
deleted file mode 100644
index c06fe2c1..00000000
--- a/examples/datavisualization/bars/doc/images/bars-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/bars/doc/src/bars.qdoc b/examples/datavisualization/bars/doc/src/bars.qdoc
deleted file mode 100644
index b3cb8df8..00000000
--- a/examples/datavisualization/bars/doc/src/bars.qdoc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example bars
- \meta tags {DataVisualization, Q3DBars}
- \meta category {Graphics}
- \title Bar Graph
- \ingroup qtdatavisualization_examples
- \brief Using Q3DBars in a widget application.
-
- The bars example shows how to make a 3D bar graph using Q3DBars and combining the use of
- widgets for adjusting several adjustable qualities. The example shows how to:
-
- \list
- \li Create an application with Q3DBars and some widgets
- \li Use QBar3DSeries and QBarDataProxy to set data to the graph
- \li Adjust some graph and series properties using widget controls
- \li Select a row or a column by clicking an axis label
- \endlist
-
- It also demonstrates how having negative bar values affects the graph.
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image bars-example.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container
- for it:
-
- \snippet bars/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create horizontal and vertical layouts. We'll add the graph and the vertical
- layout into the horizontal one:
-
- \snippet bars/main.cpp 1
-
- We're not using the vertical layout for anything yet, but we'll get back to it in
- \l {Using widgets to control the graph}
-
- Next, let's create another class to handle the data addition and other interaction with the
- graph. Let's call it \c GraphModifier (See \l {Setting up the graph} and
- \l {Adding data to the graph} for details):
-
- \snippet bars/main.cpp 2
-
- The application main is done and we can show the graph and start the event loop:
-
- \snippet bars/main.cpp 3
-
- \section1 Setting up the Graph
-
- Let's set up the graph in the constructor of the \c GraphModifier class we instantiated in the
- application main:
-
- \snippet bars/graphmodifier.cpp 0
-
- Let's take a closer look at parts of the code.
-
- First we're creating the axes and the series into member variables to support changing them
- easily later on, if we want to:
-
- \snippet bars/graphmodifier.cpp 1
-
- Then we're setting some of the visual qualities for the graph:
-
- \snippet bars/graphmodifier.cpp 2
-
- We're also setting up the axes and setting them to the graph as active axes:
-
- \snippet bars/graphmodifier.cpp 3
-
- We give axis labels a small autorotation angle to make them orient somewhat toward the
- camera. This is done to improve axis label readability at extreme camera angles.
-
- Next we initialize the visual properties of the series.
- Note that the second series is initially not visible:
-
- \snippet bars/graphmodifier.cpp 8
-
- The series need to be added to the graph to show them:
-
- \snippet bars/graphmodifier.cpp 4
-
- Finally, we set the camera angle by calling the same method the camera angle change button
- in the UI uses to cycle through various camera angles:
-
- \snippet bars/graphmodifier.cpp 6
-
- There you can see that the camera is controlled via the scene object of the graph:
-
- \snippet bars/graphmodifier.cpp 10
-
- For more information about using scene and cameras, see Q3DScene and Q3DCamera.
-
- That concludes setting up the graph.
-
- \section1 Adding Data to the Graph
-
- At the end of the constructor there's a call:
-
- \snippet bars/graphmodifier.cpp 9
-
- This method is used to add data to the proxies of the two series:
-
- \snippet bars/graphmodifier.cpp 5
-
- Now the series have data to show.
-
- \section1 Using Widgets to Control the Graph
-
- There isn't much interaction yet, so let's continue by adding some widgets back in the
- application main. Let's just focus on two as an example:
-
- \snippet bars/main.cpp 4
-
- We can use these slider widgets to rotate the graph instead of just using the mouse or
- touch.
-
- Let's add them to the vertical layout we created earlier:
-
- \snippet bars/main.cpp 5
-
- Then we'll connect them to methods in \c GraphModifier:
-
- \snippet bars/main.cpp 6
-
- Here are the methods in \c GraphModifier the signals were connected to. The camera
- is controlled via the scene object. This time we specify the actual camera position
- along the orbit around the center point, instead of specifying a preset camera angle:
-
- \snippet bars/graphmodifier.cpp 7
-
- Now these two sliders can be used to rotate the graph.
-
- And so we have an application in which we can control:
-
- \list
- \li Graph rotation
- \li Label style
- \li Camera preset
- \li Background visibility
- \li Grid visibility
- \li Bar shading smoothness
- \li Visibility of the second bar series
- \li Value axis direction
- \li Axis title visibility and rotation
- \li Data range to be shown
- \li Bar style
- \li Selection mode
- \li Theme
- \li Shadow quality
- \li Font
- \li Font size
- \li Axis label rotation
- \endlist
-
- \section1 Selecting a Row/column by Clicking an Axis Label
-
- Selection by axis label is default functionality for bar graphs. As an example, you can select
- rows by clicking an axis label in the following way:
-
- \list
- \li Change selection mode to \c SelectionRow
- \li Click a year label
- \li The row with the clicked year is selected
- \endlist
-
- You can use the same method with \c SelectionSlice and \c SelectionItem flags, as long as
- you have either \c SelectionRow or \c SelectionColumn set as well.
-
- \section1 Zooming to Selection
-
- As an example of adjusting camera target we have implemented an animation of zooming to
- selection via a button press. Animation initializations are done in the constructor:
-
- \snippet bars/graphmodifier.cpp 12
-
- The function \c{GraphModifier::zoomToSelectedBar()} contains the rest of the functionality:
-
- \snippet bars/graphmodifier.cpp 11
-
- The QPropertyAnimation \c m_animationCameraTarget targets Q3DCamera::target property,
- which takes a value normalized to the range (-1, 1). We figure out where the selected bar
- is relative to axes, and use that as the end value for \c{m_animationCameraTarget}:
-
- \snippet bars/graphmodifier.cpp 13
- \dots
- \snippet bars/graphmodifier.cpp 14
-
- Likewise, we want to angle the camera so that it always points approximately to the center of
- the graph at the end of the animation:
-
- \snippet bars/graphmodifier.cpp 15
-
- \section1 Example Contents
-
-*/
diff --git a/examples/datavisualization/customitems/CMakeLists.txt b/examples/datavisualization/customitems/CMakeLists.txt
deleted file mode 100644
index a3e8a99f..00000000
--- a/examples/datavisualization/customitems/CMakeLists.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(customitems LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(customitems
- customitemgraph.cpp customitemgraph.h
- main.cpp
-)
-set_target_properties(customitems PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(customitems PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
- Qt::DataVisualization
-)
-
-set(customitems_resource_files
- "layer_1.png"
- "layer_2.png"
- "layer_3.png"
-)
-
-qt6_add_resources(customitems "customitems"
- PREFIX
- "/maps"
- FILES
- ${customitems_resource_files}
-)
-set(customitems1_resource_files
- "oilrig.obj"
- "pipe.obj"
- "refinery.obj"
-)
-
-qt6_add_resources(customitems "customitems1"
- PREFIX
- "/items"
- FILES
- ${customitems1_resource_files}
-)
-
-install(TARGETS customitems
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/customitems/customitemgraph.cpp b/examples/datavisualization/customitems/customitemgraph.cpp
deleted file mode 100644
index d35edb38..00000000
--- a/examples/datavisualization/customitems/customitemgraph.cpp
+++ /dev/null
@@ -1,303 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "customitemgraph.h"
-
-#include <QtDataVisualization/Q3DTheme>
-#include <QtDataVisualization/QCustom3DItem>
-#include <QtDataVisualization/QCustom3DLabel>
-#include <QtGui/QImage>
-
-CustomItemGraph::CustomItemGraph(Q3DSurface *surface, QLabel *label)
- : m_graph(surface),
- m_textField(label),
- m_previouslyAnimatedItem(0)
-{
- QImage layerOneHMap(":/maps/layer_1.png");
- QHeightMapSurfaceDataProxy *layerOneProxy = new QHeightMapSurfaceDataProxy(layerOneHMap);
- QSurface3DSeries *layerOneSeries = new QSurface3DSeries(layerOneProxy);
- layerOneSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- layerOneProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- layerOneSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- layerOneSeries->setFlatShadingEnabled(false);
-
- QImage layerTwoHMap(":/maps/layer_2.png");
- QHeightMapSurfaceDataProxy *layerTwoProxy = new QHeightMapSurfaceDataProxy(layerTwoHMap);
- QSurface3DSeries *layerTwoSeries = new QSurface3DSeries(layerTwoProxy);
- layerTwoSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- layerTwoProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- layerTwoSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- layerTwoSeries->setFlatShadingEnabled(false);
-
- QImage layerThreeHMap(":/maps/layer_3.png");
- QHeightMapSurfaceDataProxy *layerThreeProxy = new QHeightMapSurfaceDataProxy(layerThreeHMap);
- QSurface3DSeries *layerThreeSeries = new QSurface3DSeries(layerThreeProxy);
- layerThreeSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- layerThreeProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- layerThreeSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- layerThreeSeries->setFlatShadingEnabled(false);
-
- m_graph->axisX()->setLabelFormat("%.1f N");
- m_graph->axisZ()->setLabelFormat("%.1f E");
- m_graph->axisX()->setRange(34.0f, 40.0f);
- m_graph->axisY()->setRange(0.0f, 200.0f);
- m_graph->axisZ()->setRange(18.0f, 24.0f);
-
- m_graph->axisX()->setTitle(QStringLiteral("Latitude"));
- m_graph->axisY()->setTitle(QStringLiteral("Height"));
- m_graph->axisZ()->setTitle(QStringLiteral("Longitude"));
-
- m_graph->addSeries(layerOneSeries);
- m_graph->addSeries(layerTwoSeries);
- m_graph->addSeries(layerThreeSeries);
-
- QLinearGradient grOne;
- grOne.setColorAt(0.0, Qt::black);
- grOne.setColorAt(0.38, Qt::darkYellow);
- grOne.setColorAt(0.39, Qt::darkGreen);
- grOne.setColorAt(0.5, Qt::darkGray);
- grOne.setColorAt(1.0, Qt::gray);
- m_graph->seriesList().at(0)->setBaseGradient(grOne);
- m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-
- QLinearGradient grTwo;
- grTwo.setColorAt(0.385, Qt::blue);
- grTwo.setColorAt(0.395, Qt::white);
- m_graph->seriesList().at(1)->setBaseGradient(grTwo);
- m_graph->seriesList().at(1)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-
- QLinearGradient grThree;
- grThree.setColorAt(0.0, Qt::white);
- grThree.setColorAt(0.05, Qt::black);
- m_graph->seriesList().at(2)->setBaseGradient(grThree);
- m_graph->seriesList().at(2)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
-
- connect(m_graph, &QAbstract3DGraph::selectedElementChanged,
- this, &CustomItemGraph::handleElementSelected);
-
- m_selectionAnimation = new QPropertyAnimation(this);
- m_selectionAnimation->setPropertyName("scaling");
- m_selectionAnimation->setDuration(500);
- m_selectionAnimation->setLoopCount(-1);
-
- QFont titleFont = QFont("Century Gothic", 30);
- titleFont.setBold(true);
- QCustom3DLabel *titleLabel = new QCustom3DLabel("Oil Rigs on Imaginary Sea", titleFont,
- QVector3D(0.0f, 1.2f, 0.0f),
- QVector3D(1.0f, 1.0f, 0.0f),
- QQuaternion());
- titleLabel->setPositionAbsolute(true);
- titleLabel->setFacingCamera(true);
- titleLabel->setBackgroundColor(QColor(0x66cdaa));
- m_graph->addCustomItem(titleLabel);
-
- toggleItemOne(true);
- toggleItemTwo(true);
-}
-
-CustomItemGraph::~CustomItemGraph()
-{
- delete m_graph;
-}
-
-void CustomItemGraph::toggleItemOne(bool show)
-{
- //! [1]
- QVector3D positionOne = QVector3D(39.0f, 77.0f, 19.2f);
- //! [1]
- QVector3D positionOnePipe = QVector3D(39.0f, 45.0f, 19.2f);
- QVector3D positionOneLabel = QVector3D(39.0f, 107.0f, 19.2f);
- if (show) {
- //! [0]
- QImage color = QImage(2, 2, QImage::Format_RGB32);
- color.fill(Qt::red);
- //! [0]
- //! [2]
- QCustom3DItem *item = new QCustom3DItem(":/items/oilrig.obj", positionOne,
- QVector3D(0.025f, 0.025f, 0.025f),
- QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 45.0f),
- color);
- //! [2]
- //! [3]
- m_graph->addCustomItem(item);
- //! [3]
- item = new QCustom3DItem(":/items/pipe.obj", positionOnePipe,
- QVector3D(0.005f, 0.5f, 0.005f),
- QQuaternion(),
- color);
- item->setShadowCasting(false);
- m_graph->addCustomItem(item);
-
- QCustom3DLabel *label = new QCustom3DLabel();
- label->setText("Oil Rig One");
- label->setPosition(positionOneLabel);
- label->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
- m_graph->addCustomItem(label);
- } else {
- resetSelection();
- //! [4]
- m_graph->removeCustomItemAt(positionOne);
- //! [4]
- m_graph->removeCustomItemAt(positionOnePipe);
- m_graph->removeCustomItemAt(positionOneLabel);
- }
-}
-
-void CustomItemGraph::toggleItemTwo(bool show)
-{
- QVector3D positionTwo = QVector3D(34.5f, 77.0f, 23.4f);
- QVector3D positionTwoPipe = QVector3D(34.5f, 45.0f, 23.4f);
- QVector3D positionTwoLabel = QVector3D(34.5f, 107.0f, 23.4f);
- if (show) {
- QImage color = QImage(2, 2, QImage::Format_RGB32);
- color.fill(Qt::red);
- QCustom3DItem *item = new QCustom3DItem();
- item->setMeshFile(":/items/oilrig.obj");
- item->setPosition(positionTwo);
- item->setScaling(QVector3D(0.025f, 0.025f, 0.025f));
- item->setRotation(QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 25.0f));
- item->setTextureImage(color);
- m_graph->addCustomItem(item);
- item = new QCustom3DItem(":/items/pipe.obj", positionTwoPipe,
- QVector3D(0.005f, 0.5f, 0.005f),
- QQuaternion(),
- color);
- item->setShadowCasting(false);
- m_graph->addCustomItem(item);
-
- QCustom3DLabel *label = new QCustom3DLabel();
- label->setText("Oil Rig Two");
- label->setPosition(positionTwoLabel);
- label->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
- m_graph->addCustomItem(label);
- } else {
- resetSelection();
- m_graph->removeCustomItemAt(positionTwo);
- m_graph->removeCustomItemAt(positionTwoPipe);
- m_graph->removeCustomItemAt(positionTwoLabel);
- }
-}
-
-void CustomItemGraph::toggleItemThree(bool show)
-{
- QVector3D positionThree = QVector3D(34.5f, 86.0f, 19.1f);
- QVector3D positionThreeLabel = QVector3D(34.5f, 116.0f, 19.1f);
- if (show) {
- QImage color = QImage(2, 2, QImage::Format_RGB32);
- color.fill(Qt::darkMagenta);
- QCustom3DItem *item = new QCustom3DItem();
- item->setMeshFile(":/items/refinery.obj");
- item->setPosition(positionThree);
- item->setScaling(QVector3D(0.04f, 0.04f, 0.04f));
- item->setRotation(QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 75.0f));
- item->setTextureImage(color);
- m_graph->addCustomItem(item);
-
- QCustom3DLabel *label = new QCustom3DLabel();
- label->setText("Refinery");
- label->setPosition(positionThreeLabel);
- label->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
- m_graph->addCustomItem(label);
- } else {
- resetSelection();
- m_graph->removeCustomItemAt(positionThree);
- m_graph->removeCustomItemAt(positionThreeLabel);
- }
-}
-
-void CustomItemGraph::toggleSeeThrough(bool seethrough)
-{
- if (seethrough) {
- m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawWireframe);
- m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawWireframe);
- } else {
- m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawSurface);
- m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawSurface);
- }
-}
-
-void CustomItemGraph::toggleOilHighlight(bool highlight)
-{
- if (highlight) {
- QLinearGradient grThree;
- grThree.setColorAt(0.0, Qt::black);
- grThree.setColorAt(0.05, Qt::red);
- m_graph->seriesList().at(2)->setBaseGradient(grThree);
- } else {
- QLinearGradient grThree;
- grThree.setColorAt(0.0, Qt::white);
- grThree.setColorAt(0.05, Qt::black);
- m_graph->seriesList().at(2)->setBaseGradient(grThree);
- }
-}
-
-void CustomItemGraph::toggleShadows(bool shadows)
-{
- if (shadows)
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
- else
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
-}
-
-void CustomItemGraph::handleElementSelected(QAbstract3DGraph::ElementType type)
-{
- resetSelection();
- if (type == QAbstract3DGraph::ElementCustomItem) {
- QCustom3DItem *item = m_graph->selectedCustomItem();
- QString text;
- if (qobject_cast<QCustom3DLabel *>(item) != 0) {
- text.append("Custom label: ");
- } else {
- QStringList split = item->meshFile().split("/");
- text.append(split.last());
- text.append(": ");
- }
- int index = m_graph->selectedCustomItemIndex();
- text.append(QString::number(index));
- m_textField->setText(text);
- m_previouslyAnimatedItem = item;
- m_previousScaling = item->scaling();
- m_selectionAnimation->setTargetObject(item);
- m_selectionAnimation->setStartValue(item->scaling());
- m_selectionAnimation->setEndValue(item->scaling() * 1.5f);
- m_selectionAnimation->start();
- } else if (type == QAbstract3DGraph::ElementSeries) {
- QString text = "Surface (";
- QSurface3DSeries *series = m_graph->selectedSeries();
- if (series) {
- QPoint point = series->selectedPoint();
- QString posStr;
- posStr.setNum(point.x());
- text.append(posStr);
- text.append(", ");
- posStr.setNum(point.y());
- text.append(posStr);
- }
- text.append(")");
- m_textField->setText(text);
- } else if (type > QAbstract3DGraph::ElementSeries
- && type < QAbstract3DGraph::ElementCustomItem) {
- int index = m_graph->selectedLabelIndex();
- QString text;
- if (type == QAbstract3DGraph::ElementAxisXLabel)
- text.append("Axis X label: ");
- else if (type == QAbstract3DGraph::ElementAxisYLabel)
- text.append("Axis Y label: ");
- else
- text.append("Axis Z label: ");
- text.append(QString::number(index));
- m_textField->setText(text);
- } else {
- m_textField->setText("Nothing");
- }
-}
-
-void CustomItemGraph::resetSelection()
-{
- m_selectionAnimation->stop();
- if (m_previouslyAnimatedItem)
- m_previouslyAnimatedItem->setScaling(m_previousScaling);
- m_previouslyAnimatedItem = 0;
-}
diff --git a/examples/datavisualization/customitems/customitemgraph.h b/examples/datavisualization/customitems/customitemgraph.h
deleted file mode 100644
index 4a3585d4..00000000
--- a/examples/datavisualization/customitems/customitemgraph.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#ifndef CUSTOMITEMGRAPH_H
-#define CUSTOMITEMGRAPH_H
-
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QSurfaceDataProxy>
-#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QLabel>
-#include <QtCore/QPropertyAnimation>
-
-class CustomItemGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit CustomItemGraph(Q3DSurface *surface, QLabel *label);
- ~CustomItemGraph();
-
- void toggleItemOne(bool show);
- void toggleItemTwo(bool show);
- void toggleItemThree(bool show);
- void toggleSeeThrough(bool seethrough);
- void toggleOilHighlight(bool highlight);
- void toggleShadows(bool shadows);
-
-private:
- void handleElementSelected(QAbstract3DGraph::ElementType type);
- void resetSelection();
-
-private:
- Q3DSurface *m_graph;
- QLabel *m_textField;
- QPropertyAnimation *m_selectionAnimation;
- QCustom3DItem *m_previouslyAnimatedItem;
- QVector3D m_previousScaling;
-};
-
-#endif
diff --git a/examples/datavisualization/customitems/customitems.pro b/examples/datavisualization/customitems/customitems.pro
deleted file mode 100644
index d366e349..00000000
--- a/examples/datavisualization/customitems/customitems.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- customitemgraph.cpp
-
-HEADERS += customitemgraph.h
-
-QT += widgets
-
-RESOURCES += customitems.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/customitems/customitems.qrc b/examples/datavisualization/customitems/customitems.qrc
deleted file mode 100644
index 1337c9fc..00000000
--- a/examples/datavisualization/customitems/customitems.qrc
+++ /dev/null
@@ -1,12 +0,0 @@
-<RCC>
- <qresource prefix="/maps">
- <file>layer_1.png</file>
- <file>layer_2.png</file>
- <file>layer_3.png</file>
- </qresource>
- <qresource prefix="/items">
- <file>refinery.obj</file>
- <file>oilrig.obj</file>
- <file>pipe.obj</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/customitems/doc/images/customitems-example.png b/examples/datavisualization/customitems/doc/images/customitems-example.png
deleted file mode 100644
index 2732638e..00000000
--- a/examples/datavisualization/customitems/doc/images/customitems-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/customitems/doc/src/customitems.qdoc b/examples/datavisualization/customitems/doc/src/customitems.qdoc
deleted file mode 100644
index 3ff39332..00000000
--- a/examples/datavisualization/customitems/doc/src/customitems.qdoc
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example customitems
- \meta tags {DataVisualization, Q3DSurface, QCustom3DItem, Surface Graph}
- \meta category {Graphics}
- \title Custom Items in Graph
- \ingroup qtdatavisualization_examples
- \brief Adding custom items to a surface graph.
- \since QtDataVisualization 1.1
-
- The custom items example shows how to add your own custom meshes as items to a graph, and how
- to remove them.
-
- \image customitems-example.png
-
- \include examples-run.qdocinc
-
- \section1 Adding Custom Meshes to the Application
-
- We'll add the meshes in a resource file:
-
- \code
- <RCC>
- ...
- <qresource prefix="/items">
- <file>refinery.obj</file>
- <file>oilrig.obj</file>
- </qresource>
- </RCC>
- \endcode
-
- \section1 Adding Custom Item to a Graph
-
- In this example we do not have specific textures for our meshes, so we'll just create a small
- QImage and fill it with a single color:
-
- \snippet customitems/customitemgraph.cpp 0
-
- Then we'll specify the position for the item in a variable. This way we'll be able to use it
- later for removing the correct item:
-
- \snippet customitems/customitemgraph.cpp 1
-
- Then we'll create a new QCustom3DItem with all the parameters:
-
- \snippet customitems/customitemgraph.cpp 2
-
- And finally we'll just add the item:
-
- \snippet customitems/customitemgraph.cpp 3
-
- \section1 Removing Custom Item from a Graph
-
- We'll just call \c removeCustomItemAt() with the position of the item:
-
- \snippet customitems/customitemgraph.cpp 4
-
- \note Removing a custom item from the graph also deletes it. If you want to preserve the item,
- you need to use \c releaseCustomItem() method instead.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/customitems/main.cpp b/examples/datavisualization/customitems/main.cpp
deleted file mode 100644
index c71d093a..00000000
--- a/examples/datavisualization/customitems/main.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "customitemgraph.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-
-int main(int argc, char **argv)
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- QApplication app(argc, argv);
- Q3DSurface *graph = new Q3DSurface();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- container->setMinimumSize(QSize(800, 600));
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayoutLeft = new QVBoxLayout();
- vLayoutLeft->setAlignment(Qt::AlignTop);
- QVBoxLayout *vLayoutRight = new QVBoxLayout();
- vLayoutRight->setAlignment(Qt::AlignTop);
- hLayout->addLayout(vLayoutLeft);
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayoutRight);
-
- QFont font = QFont("Century Gothic", 14);
- QLabel *label = new QLabel("Show:");
- font.setBold(true);
- label->setFont(font);
- vLayoutLeft->addWidget(label);
-
- font.setBold(false);
- QCheckBox *checkboxOne = new QCheckBox("Oil Rig 1");
- checkboxOne->setChecked(true);
- checkboxOne->setFont(font);
- vLayoutLeft->addWidget(checkboxOne);
-
- QCheckBox *checkboxTwo = new QCheckBox("Oil Rig 2");
- checkboxTwo->setChecked(true);
- checkboxTwo->setFont(font);
- vLayoutLeft->addWidget(checkboxTwo);
-
- QCheckBox *checkboxThree = new QCheckBox("Refinery");
- checkboxThree->setFont(font);
- vLayoutLeft->addWidget(checkboxThree);
-
- QLabel *label2 = new QLabel("Visuals:");
- font.setBold(true);
- label2->setFont(font);
- vLayoutRight->addWidget(label2);
-
- QCheckBox *checkboxOneRight = new QCheckBox("See-Through");
- font.setBold(false);
- checkboxOneRight->setFont(font);
- vLayoutRight->addWidget(checkboxOneRight);
-
- QCheckBox *checkboxTwoRight = new QCheckBox("Highlight Oil");
- checkboxTwoRight->setFont(font);
- vLayoutRight->addWidget(checkboxTwoRight);
-
- QCheckBox *checkboxThreeRight = new QCheckBox("Shadows");
- checkboxThreeRight->setFont(font);
- checkboxThreeRight->setChecked(true);
- vLayoutRight->addWidget(checkboxThreeRight);
-
- QLabel *label3 = new QLabel("Selection:");
- font.setBold(true);
- label3->setFont(font);
- vLayoutRight->addWidget(label3);
-
- QLabel *label4 = new QLabel("Nothing");
- font.setBold(false);
- font.setPointSize(11);
- label4->setFont(font);
- vLayoutRight->addWidget(label4);
-
- widget->setWindowTitle(QStringLiteral("Custom Items in Graph"));
-
- widget->show();
-
- CustomItemGraph *modifier = new CustomItemGraph(graph, label4);
-
- QObject::connect(checkboxOne, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleItemOne);
- QObject::connect(checkboxTwo, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleItemTwo);
- QObject::connect(checkboxThree, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleItemThree);
-
- QObject::connect(checkboxOneRight, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleSeeThrough);
- QObject::connect(checkboxTwoRight, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleOilHighlight);
- QObject::connect(checkboxThreeRight, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleShadows);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/customproxy/CMakeLists.txt b/examples/datavisualization/customproxy/CMakeLists.txt
deleted file mode 100644
index a87653c0..00000000
--- a/examples/datavisualization/customproxy/CMakeLists.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(customproxy LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(customproxy
- main.cpp
- rainfallgraph.cpp rainfallgraph.h
- variantbardatamapping.cpp variantbardatamapping.h
- variantbardataproxy.cpp variantbardataproxy.h
- variantdataset.cpp variantdataset.h
-)
-set_target_properties(customproxy PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(customproxy PUBLIC
- Qt::Core
- Qt::Gui
- Qt::DataVisualization
-)
-
-set(customproxy_resource_files
- "data/raindata.txt"
-)
-
-qt6_add_resources(customproxy "customproxy"
- PREFIX
- "/"
- FILES
- ${customproxy_resource_files}
-)
-
-install(TARGETS customproxy
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/customproxy/customproxy.pro b/examples/datavisualization/customproxy/customproxy.pro
deleted file mode 100644
index fd5e0852..00000000
--- a/examples/datavisualization/customproxy/customproxy.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- rainfallgraph.cpp \
- variantdataset.cpp \
- variantbardataproxy.cpp \
- variantbardatamapping.cpp \
-
-HEADERS += \
- rainfallgraph.h \
- variantdataset.h \
- variantbardataproxy.h \
- variantbardatamapping.h
-
-RESOURCES += customproxy.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- data/raindata.txt
diff --git a/examples/datavisualization/customproxy/customproxy.qrc b/examples/datavisualization/customproxy/customproxy.qrc
deleted file mode 100644
index 53cd4915..00000000
--- a/examples/datavisualization/customproxy/customproxy.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>data/raindata.txt</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/customproxy/data/raindata.txt b/examples/datavisualization/customproxy/data/raindata.txt
deleted file mode 100644
index 531d66be..00000000
--- a/examples/datavisualization/customproxy/data/raindata.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-# Rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo)
-# Format: year, month, rainfall
-2000,1, 72,
-2000,2, 47,
-2000,3, 37,
-2000,4, 79,
-2000,5, 42,
-2000,6, 73,
-2000,7, 94,
-2000,8, 37,
-2000,9, 17,
-2000,10,69,
-2000,11,42,
-2000,12,42,
-2001,1, 25,
-2001,2, 47,
-2001,3, 20,
-2001,4, 70,
-2001,5, 27,
-2001,6, 40,
-2001,7, 123,
-2001,8, 39,
-2001,9, 66,
-2001,10,55,
-2001,11,29,
-2001,12,12,
-2002,1, 24,
-2002,2, 45,
-2002,3, 27,
-2002,4, 30,
-2002,5, 16,
-2002,6, 98,
-2002,7, 122,
-2002,8, 20,
-2002,9, 50,
-2002,10,24,
-2002,11,22,
-2002,12,12,
-2003,1, 43,
-2003,2, 17,
-2003,3, 26,
-2003,4, 22,
-2003,5, 60,
-2003,6, 14,
-2003,7, 86,
-2003,8, 77,
-2003,9, 69,
-2003,10,49,
-2003,11,23,
-2003,12,44,
-2004,1, 15,
-2004,2, 19,
-2004,3, 10,
-2004,4, 11,
-2004,5, 41,
-2004,6, 29,
-2004,7, 49,
-2004,8, 72,
-2004,9, 50,
-2004,10,18,
-2004,11,19,
-2004,12,40,
-2005,1, 60,
-2005,2, 24,
-2005,3, 12,
-2005,4, 50,
-2005,5, 88,
-2005,6, 32,
-2005,7, 76,
-2005,8, 55,
-2005,9, 92,
-2005,10,35,
-2005,11,105,
-2005,12,59,
-2006,1, 27,
-2006,2, 18,
-2006,3, 17,
-2006,4, 26,
-2006,5, 24,
-2006,6, 18,
-2006,7, 35,
-2006,8, 28,
-2006,9, 80,
-2006,10,52,
-2006,11,43,
-2006,12,44,
-2007,1, 41,
-2007,2, 21,
-2007,3, 30,
-2007,4, 20,
-2007,5, 53,
-2007,6, 29,
-2007,7, 139,
-2007,8, 52,
-2007,9, 51,
-2007,10,24,
-2007,11,47,
-2007,12,33,
-2008,1, 67,
-2008,2, 19,
-2008,3, 30,
-2008,4, 31,
-2008,5, 29,
-2008,6, 79,
-2008,7, 75,
-2008,8, 99,
-2008,9, 34,
-2008,10,52,
-2008,11,60,
-2008,12,20,
-2009,1, 9,
-2009,2, 22,
-2009,3, 11,
-2009,4, 10,
-2009,5, 69,
-2009,6, 30,
-2009,7, 78,
-2009,8, 93,
-2009,9, 70,
-2009,10,32,
-2009,11,56,
-2009,12,23,
-2010,1, 12,
-2010,2, 28,
-2010,3, 55,
-2010,4, 20,
-2010,5, 65,
-2010,6, 26,
-2010,7, 134,
-2010,8, 57,
-2010,9, 51,
-2010,10,53,
-2010,11,8,
-2010,12,9,
-2011,1, 34,
-2011,2, 20,
-2011,3, 30,
-2011,4, 31,
-2011,5, 42,
-2011,6, 78,
-2011,7, 85,
-2011,8, 33,
-2011,9, 42,
-2011,10,87,
-2011,11,41,
-2011,12,72,
-2012,1, 32,
-2012,2, 42,
-2012,3, 30,
-2012,4, 50,
-2012,5, 30,
-2012,6, 70,
-2012,7, 52,
-2012,8, 20,
-2012,9, 99,
-2012,10,70,
-2012,11,69,
-2012,12,49
diff --git a/examples/datavisualization/customproxy/doc/images/customproxy-example.png b/examples/datavisualization/customproxy/doc/images/customproxy-example.png
deleted file mode 100644
index 4f82943a..00000000
--- a/examples/datavisualization/customproxy/doc/images/customproxy-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/customproxy/doc/src/customproxy.qdoc b/examples/datavisualization/customproxy/doc/src/customproxy.qdoc
deleted file mode 100644
index 42cd2768..00000000
--- a/examples/datavisualization/customproxy/doc/src/customproxy.qdoc
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example customproxy
- \meta tags {DataVisualization, Q3DBars, Bar Graph}
- \meta category {Graphics}
- \title Data from Custom Proxy
- \ingroup qtdatavisualization_examples
- \brief Using Q3DBars with a custom proxy.
-
- The custom proxy example shows how to create a custom proxy to use with Q3DBars.
-
- \image customproxy-example.png
-
- This example describes how to use a custom dataset and the corresponding proxy. For more
- information about basic Q3DBars functionality, see the \l{Bar Graph} example.
-
- This example defines a simple flexible data set \c VariantDataSet where each data item is a
- a variant list. Each item can have multiple different values, identified by their index in
- the list. In this example, the data set is storing monthly rainfall data, where the value in
- index zero is the year, the value in index one is the month, and the value in index two is
- the amount of rainfall in that month.
-
- The custom proxy we provide here is similar to item model based proxies provided by Qt
- Data Visualization in that it requires a mapping to interpret the data.
-
- \include examples-run.qdocinc
-
- \section1 VariantDataSet
-
- \c VariantDataSet class provides a simple API:
-
- \snippet customproxy/variantdataset.h 1
- \dots 0
- \codeline
- \snippet customproxy/variantdataset.h 0
-
- As you can see, the data items are simply QVariantList objects, and the data can be added either
- singly or in lists. The only additional functionality provided is clearing the data set and querying
- for a reference to the data contained in the set. Signals are emitted when data is added or the set
- is cleared.
-
- \section1 VariantBarDataProxy
-
- \c VariantBarDataProxy is a subclass of QBarDataProxy and provides a simple API of just getters
- and setters for the data set and the mapping:
-
- \snippet customproxy/variantbardataproxy.h 0
- \dots 0
- \codeline
- \snippet customproxy/variantbardataproxy.h 1
-
- On the implementation side, the proxy listens for the changes in the data set and the mapping,
- and resolves the data set if any changes are detected. It is not particularly efficient
- implementation in that any change will cause re-resolving of the entire data set, but that is not
- an issue for this example. The interesting part is the \c resolveDataSet() method:
-
- \snippet customproxy/variantbardataproxy.cpp 0
-
- In \c resolveDataSet() method we sort the variant data values into rows and columns based on the
- mapping. This is very similar to how QItemModelBarDataProxy handles mapping, except we use
- list indexes instead of item model roles here. Once the values are sorted, we generate \c QBarDataArray
- out of them, and call \c resetArray() method on the parent class.
-
- \section1 VariantBarDataMapping
-
- \c VariantBarDataMapping stores the mapping information between \c VariantDataSet data item indexes
- and rows, columns, and values of \c QBarDataArray. It also contains the lists of rows and columns to
- be included in the resolved data:
-
- \snippet customproxy/variantbardatamapping.h 0
- \dots 0
- \codeline
- \snippet customproxy/variantbardatamapping.h 1
- \dots 0
- \codeline
- \snippet customproxy/variantbardatamapping.h 2
- \dots 0
- \codeline
- \snippet customproxy/variantbardatamapping.h 3
-
- The primary way to use a \c VariantBarDataMapping object is to give the mappings already at the
- constructor, though they can be set later individually or all together with the \c remap() method.
- A signal is emitted if mapping changes. It is basically a simplified version of the mapping
- functionality of QItemModelBarDataProxy adapted to work with variant lists instead of item models.
-
- \section1 RainfallGraph
-
- \c RainfallGraph class handles the setup of the graph. The interesting part is the \c addDataSet()
- method:
-
- \snippet customproxy/rainfallgraph.cpp 0
-
- The bulk of that method is used for populating the variant data set. Once the set is populated,
- visualizing the data is trivial with the help of our custom proxy:
-
- \snippet customproxy/rainfallgraph.cpp 1
-*/
diff --git a/examples/datavisualization/customproxy/main.cpp b/examples/datavisualization/customproxy/main.cpp
deleted file mode 100644
index 9ca74d3b..00000000
--- a/examples/datavisualization/customproxy/main.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "rainfallgraph.h"
-#include <QtGui/QGuiApplication>
-
-int main(int argc, char **argv)
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- QGuiApplication app(argc, argv);
-
- Q3DBars *rainfall = new Q3DBars;
-
- if (!rainfall->hasContext()) {
- qWarning() << QStringLiteral("Couldn't initialize the OpenGL context.") ;
- return -1;
- }
-
- rainfall->setFlags(rainfall->flags() ^ Qt::FramelessWindowHint);
- rainfall->resize(1000, 800);
- rainfall->setPosition(QPoint(10, 30));
- rainfall->show();
-
- RainfallGraph rainfallgraph(rainfall);
- rainfallgraph.start();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/customproxy/rainfallgraph.cpp b/examples/datavisualization/customproxy/rainfallgraph.cpp
deleted file mode 100644
index da9416fe..00000000
--- a/examples/datavisualization/customproxy/rainfallgraph.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "rainfallgraph.h"
-#include <QtDataVisualization/qcategory3daxis.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qbar3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-#include <QtGui/QGuiApplication>
-#include <QtGui/QFont>
-#include <QtCore/QDebug>
-#include <QtCore/QTextStream>
-#include <QtCore/QFile>
-
-RainfallGraph::RainfallGraph(Q3DBars *rainfall)
- : m_graph(rainfall)
-{
- // In data file the months are in numeric format, so create custom list
- for (int i = 1; i <= 12; i++)
- m_numericMonths << QString::number(i);
-
- m_columnCount = m_numericMonths.size();
-
- m_proxy = new VariantBarDataProxy;
- QBar3DSeries *series = new QBar3DSeries(m_proxy);
- m_graph->addSeries(series);
-
- updateYearsList(2000, 2012);
-
- // Set up bar specifications; make the bars as wide as they are deep,
- // and add a small space between the bars
- m_graph->setBarThickness(1.0f);
- m_graph->setBarSpacing(QSizeF(1.1, 1.1));
-
- // Set axis labels and titles
- QStringList months;
- months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- m_graph->rowAxis()->setTitle("Year");
- m_graph->columnAxis()->setTitle("Month");
- m_graph->valueAxis()->setTitle("rainfall");
- m_graph->valueAxis()->setLabelFormat("%d mm");
- m_graph->valueAxis()->setSegmentCount(5);
- m_graph->rowAxis()->setLabels(m_years);
- m_graph->columnAxis()->setLabels(months);
-
- // Set bar type to cylinder
- series->setMesh(QAbstract3DSeries::MeshCylinder);
-
- // Set shadows to medium
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
-
- // Set selection mode to bar and column
- m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndColumn | QAbstract3DGraph::SelectionSlice);
-
- // Set theme
- m_graph->activeTheme()->setType(Q3DTheme::ThemeArmyBlue);
-
- // Override font in theme
- m_graph->activeTheme()->setFont(QFont("Century Gothic", 30));
-
- // Override label background for theme
- m_graph->activeTheme()->setLabelBackgroundEnabled(false);
-
- // Set camera position and zoom
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricRightHigh);
-
- // Set window title
- m_graph->setTitle(QStringLiteral("Monthly rainfall in Northern Finland"));
-
- // Set reflections on
- m_graph->setReflection(true);
-}
-
-RainfallGraph::~RainfallGraph()
-{
- delete m_mapping;
- delete m_dataSet;
- delete m_graph;
-}
-
-void RainfallGraph::start()
-{
- addDataSet();
-}
-
-void RainfallGraph::updateYearsList(int start, int end)
-{
- m_years.clear();
- for (int i = start; i <= end; i++)
- m_years << QString::number(i);
-
- m_rowCount = m_years.size();
-}
-
-//! [0]
-void RainfallGraph::addDataSet()
-{
- // Create a new variant data set and data item list
- m_dataSet = new VariantDataSet;
- VariantDataItemList *itemList = new VariantDataItemList;
-
- // Read data from a data file into the data item list
- QTextStream stream;
- QFile dataFile(":/data/raindata.txt");
- if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- stream.setDevice(&dataFile);
- while (!stream.atEnd()) {
- QString line = stream.readLine();
- if (line.startsWith("#")) // Ignore comments
- continue;
- QStringList strList = line.split(",", Qt::SkipEmptyParts);
- // Each line has three data items: Year, month, and rainfall value
- if (strList.size() < 3) {
- qWarning() << "Invalid row read from data:" << line;
- continue;
- }
- // Store year and month as strings, and rainfall value as double
- // into a variant data item and add the item to the item list.
- VariantDataItem *newItem = new VariantDataItem;
- for (int i = 0; i < 2; i++)
- newItem->append(strList.at(i).trimmed());
- newItem->append(strList.at(2).trimmed().toDouble());
- itemList->append(newItem);
- }
- } else {
- qWarning() << "Unable to open data file:" << dataFile.fileName();
- }
-
- //! [1]
- // Add items to the data set and set it to the proxy
- m_dataSet->addItems(itemList);
- m_proxy->setDataSet(m_dataSet);
-
- // Create new mapping for the data and set it to the proxy
- m_mapping = new VariantBarDataMapping(0, 1, 2, m_years, m_numericMonths);
- m_proxy->setMapping(m_mapping);
- //! [1]
-}
-//! [0]
diff --git a/examples/datavisualization/customproxy/rainfallgraph.h b/examples/datavisualization/customproxy/rainfallgraph.h
deleted file mode 100644
index 62a1f67c..00000000
--- a/examples/datavisualization/customproxy/rainfallgraph.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#ifndef RAINFALLGRAPH_H
-#define RAINFALLGRAPH_H
-
-#include "variantbardataproxy.h"
-#include <QtDataVisualization/q3dbars.h>
-
-class RainfallGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit RainfallGraph(Q3DBars *rainfall);
- ~RainfallGraph();
-
- void addDataSet();
- void start();
-
-private:
-
- void updateYearsList(int start, int end);
- Q3DBars *m_graph;
- int m_columnCount;
- int m_rowCount;
- QStringList m_years;
- QStringList m_numericMonths;
- VariantBarDataProxy *m_proxy;
- VariantBarDataMapping *m_mapping;
- VariantDataSet *m_dataSet;
-};
-
-
-#endif
diff --git a/examples/datavisualization/datavisualization.pro b/examples/datavisualization/datavisualization.pro
index ef536c49..ff9af2c5 100644
--- a/examples/datavisualization/datavisualization.pro
+++ b/examples/datavisualization/datavisualization.pro
@@ -2,20 +2,12 @@ TEMPLATE = subdirs
qtHaveModule(quick) {
SUBDIRS += qmlbars \
qmlscatter \
- qmlsurface \
- qml3doscilloscope \
qmlaxishandling \
- qmlspectrogram
+ qmlsurfacegallery
}
!android:!ios:!winrt {
- SUBDIRS += bars \
- customproxy \
- scatter \
- surface \
- draggableaxes \
- customitems \
- texturesurface \
+ SUBDIRS += graphgallery \
volumetric
}
diff --git a/examples/datavisualization/draggableaxes/CMakeLists.txt b/examples/datavisualization/draggableaxes/CMakeLists.txt
deleted file mode 100644
index f1c5907f..00000000
--- a/examples/datavisualization/draggableaxes/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(draggableaxes LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(draggableaxes
- axesinputhandler.cpp axesinputhandler.h
- data.cpp data.h
- main.cpp
-)
-set_target_properties(draggableaxes PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(draggableaxes PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
- Qt::DataVisualization
-)
-
-install(TARGETS draggableaxes
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/draggableaxes/data.cpp b/examples/datavisualization/draggableaxes/data.cpp
deleted file mode 100644
index 532a0f7f..00000000
--- a/examples/datavisualization/draggableaxes/data.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "data.h"
-
-#include <QtCore/QRandomGenerator>
-#include <QtDataVisualization/QScatterDataProxy>
-#include <QtDataVisualization/Q3DScene>
-#include <QtDataVisualization/Q3DCamera>
-#include <QtDataVisualization/QScatter3DSeries>
-#include <QtDataVisualization/Q3DTheme>
-
-const int itemCount = 500;
-
-Data::Data(Q3DScatter *scatter)
- : m_graph(scatter),
- //! [1]
- m_inputHandler(new AxesInputHandler(scatter)),
- //! [1]
- m_autoAdjust(false)
-{
- m_graph->activeTheme()->setType(Q3DTheme::ThemeEbony);
- m_graph->activeTheme()->setLabelBorderEnabled(true);
- m_graph->activeTheme()->setLabelBackgroundColor(QColor(QRgb(0x151550)));
- m_graph->activeTheme()->setLabelTextColor(Qt::lightGray);
- m_graph->activeTheme()->setFont(QFont("Arial Black", 30));
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricRight);
-
- m_graph->axisX()->setRange(-20.0f, 20.0f);
- m_graph->axisY()->setRange(-10.0f, 10.0f);
- m_graph->axisZ()->setRange(-20.0f, 20.0f);
-
- //! [0]
- // Give ownership of the handler to the graph and make it the active handler
- m_graph->setActiveInputHandler(m_inputHandler);
- //! [0]
-
- //! [2]
- // Give our axes to the input handler
- m_inputHandler->setAxes(m_graph->axisX(), m_graph->axisZ(), m_graph->axisY());
- //! [2]
-
- addData();
-}
-
-Data::~Data()
-{
- delete m_graph;
-}
-
-void Data::toggleRanges()
-{
- if (!m_autoAdjust) {
- m_graph->axisX()->setAutoAdjustRange(true);
- m_graph->axisZ()->setAutoAdjustRange(true);
- m_graph->axisY()->setAutoAdjustRange(true);
- m_inputHandler->setDragSpeedModifier(1.5f);
- m_autoAdjust = true;
- } else {
- m_graph->axisX()->setRange(-20.0f, 20.0f);
- m_graph->axisY()->setRange(-10.0f, 10.0f);
- m_graph->axisZ()->setRange(-20.0f, 20.0f);
- m_inputHandler->setDragSpeedModifier(15.0f);
- m_autoAdjust = false;
- }
-}
-
-void Data::addData()
-{
- QScatter3DSeries *series = new QScatter3DSeries;
- series->setMesh(QAbstract3DSeries::MeshCube);
- series->setMeshSmooth(true);
- m_graph->addSeries(series);
-
- QScatter3DSeries *series2 = new QScatter3DSeries;
- series2->setMesh(QAbstract3DSeries::MeshMinimal);
- series2->setMeshSmooth(true);
- m_graph->addSeries(series2);
-
- QScatter3DSeries *series3 = new QScatter3DSeries;
- series3->setMesh(QAbstract3DSeries::MeshSphere);
- series3->setMeshSmooth(true);
- m_graph->addSeries(series3);
-
- QScatter3DSeries *series4 = new QScatter3DSeries;
- series4->setMesh(QAbstract3DSeries::MeshBevelCube);
- series4->setMeshSmooth(true);
- m_graph->addSeries(series4);
-
- QScatter3DSeries *series5 = new QScatter3DSeries;
- series5->setMesh(QAbstract3DSeries::MeshSphere);
- m_graph->addSeries(series5);
-
- QScatterDataArray *dataArray = new QScatterDataArray;
- dataArray->resize(itemCount);
- QScatterDataItem *ptrToDataArray = &dataArray->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray2 = new QScatterDataArray;
- dataArray2->resize(itemCount);
- ptrToDataArray = &dataArray2->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray3 = new QScatterDataArray;
- dataArray3->resize(itemCount);
- ptrToDataArray = &dataArray3->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray4 = new QScatterDataArray;
- dataArray4->resize(itemCount);
- ptrToDataArray = &dataArray4->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray5 = new QScatterDataArray;
- dataArray5->resize(itemCount);
- ptrToDataArray = &dataArray5->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
-
- m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray);
- m_graph->seriesList().at(1)->dataProxy()->resetArray(dataArray2);
- m_graph->seriesList().at(2)->dataProxy()->resetArray(dataArray3);
- m_graph->seriesList().at(3)->dataProxy()->resetArray(dataArray4);
- m_graph->seriesList().at(4)->dataProxy()->resetArray(dataArray5);
-}
-
-QVector3D Data::randVector()
-{
- return QVector3D(
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f);
-}
diff --git a/examples/datavisualization/draggableaxes/data.h b/examples/datavisualization/draggableaxes/data.h
deleted file mode 100644
index 84a3164b..00000000
--- a/examples/datavisualization/draggableaxes/data.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#ifndef DATA_H
-#define DATA_H
-
-#include "axesinputhandler.h"
-
-#include <QtDataVisualization/q3dscatter.h>
-#include <QtGui/QVector3D>
-
-class Data : public QObject
-{
- Q_OBJECT
-public:
- explicit Data(Q3DScatter *scatter);
- ~Data();
-
- void toggleRanges();
-
-private:
- void addData();
- QVector3D randVector();
-
-private:
- Q3DScatter *m_graph;
- AxesInputHandler *m_inputHandler;
- bool m_autoAdjust;
-};
-
-#endif
diff --git a/examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.png b/examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.png
deleted file mode 100644
index 018694b5..00000000
--- a/examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc b/examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc
deleted file mode 100644
index 53810bb2..00000000
--- a/examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example draggableaxes
- \meta tags {DataVisualization, Q3DScatter, Custom Input Handler, Scatter Graph}
- \meta category {Graphics}
- \title Input Handling for Axes
- \ingroup qtdatavisualization_examples
- \brief Implementing a custom input handler to support axis dragging.
- \since QtDataVisualization 1.1
-
- The Input Handling for Axes example shows how to customize the 3D graph controls in a widget
- application to allow changing axis ranges by clicking on an axis label and dragging. This is
- done by implementing a custom input handler to react to selection signals emitted from the
- graph.
-
- \image draggableaxes-example.png
-
- \include examples-run.qdocinc
-
- \section1 Replacing Default Input Handling
-
- The default input handling mechanism is replaced by setting the active input handler of
- Q3DScatter to \c AxesInputHandler that implements the custom behavior:
-
- \snippet draggableaxes/data.cpp 0
-
- \c m_inputHandler was initialized in the constructor:
-
- \snippet draggableaxes/data.cpp 1
-
- We will also need the pointers to the axes, so we will pass them to our input handler too:
-
- \snippet draggableaxes/data.cpp 2
-
- \section1 Extending Mouse Event Handling
-
- First of all, we inherited our input handler from Q3DInputHandler instead of
- QAbstract3DInputHandler. The reason for doing this is to keep all the functionality of the
- default input handling, and to add our own functionality on top of it:
-
- \snippet draggableaxes/axesinputhandler.h 0
-
- We start extending the default functionality by re-implementing some of the mouse events.
- Let's start with \c {mousePressEvent}. We'll just add button pressed flag for left mouse button
- into it, and keep the rest of the default functionality:
-
- \snippet draggableaxes/axesinputhandler.cpp 0
-
- We'll need to modify \c mouseReleaseEvent too to clear the flag and reset the internal state:
-
- \snippet draggableaxes/axesinputhandler.cpp 1
-
- Then we'll modify \c {mouseMoveEvent}. Here we check if the \c m_mousePressed is \c true and
- our internal state is something other than \c StateNormal. If so, we'll set the input positions
- for mouse move distance calculations and call the axis dragging function (see
- \l {Implementing axis dragging} for details):
-
- \snippet draggableaxes/axesinputhandler.cpp 2
-
- We don't need to change the functionality of mouse wheel, so we will not re-implement that.
-
- \section1 Implementing Axis Dragging
-
- First we need to start listening to the selection signal from the graph. We do that in the
- constructor, and connect it to \c handleElementSelected method:
-
- \snippet draggableaxes/axesinputhandler.cpp 3
-
- In \c handleElementSelected we check the type of the selection and set our internal state based on
- it:
-
- \snippet draggableaxes/axesinputhandler.cpp 4
-
- The actual dragging logic is implemented in \c handleAxisDragging method, which we call from
- \c mouseMoveEvent in case the required conditions are met:
-
- \snippet draggableaxes/axesinputhandler.cpp 5
-
- In \c handleAxisDragging we first get the scene orientation from our active camera:
-
- \snippet draggableaxes/axesinputhandler.cpp 6
-
- Then we calculate the modifiers to mouse move direction based on the orientation:
-
- \snippet draggableaxes/axesinputhandler.cpp 7
-
- After that, we calculate the mouse movement, and modify it based on the y rotation of the
- camera:
-
- \snippet draggableaxes/axesinputhandler.cpp 8
-
- And finally apply the moved distance to the correct axis:
-
- \snippet draggableaxes/axesinputhandler.cpp 9
-
- We also have a function for setting the dragging speed:
-
- \snippet draggableaxes/axesinputhandler.h 1
-
- This is needed, as the mouse movement distance is absolute (in screen coordinates) and we
- need to adjust it to the axis range. The larger the value, the slower the dragging will be.
- Note that on this example we do not take scene zoom level into account when determining the
- drag speed, so you'll notice changes in the range adjustment as you change the zoom level.
-
- The modifier could be adjusted automatically based on the axis range and camera zoom level, but
- we'll leave implementing that as an excercise for the reader.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/draggableaxes/draggableaxes.pro b/examples/datavisualization/draggableaxes/draggableaxes.pro
deleted file mode 100644
index 2f21aee6..00000000
--- a/examples/datavisualization/draggableaxes/draggableaxes.pro
+++ /dev/null
@@ -1,18 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- data.cpp \
- axesinputhandler.cpp
-HEADERS += data.h \
- axesinputhandler.h
-
-QT += widgets
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/draggableaxes/main.cpp b/examples/datavisualization/draggableaxes/main.cpp
deleted file mode 100644
index 3425d8ef..00000000
--- a/examples/datavisualization/draggableaxes/main.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "data.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QCommandLinkButton>
-#include <QtWidgets/QMessageBox>
-
-int main(int argc, char **argv)
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- QApplication app(argc, argv);
- Q3DScatter *graph = new Q3DScatter();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- container->setMinimumSize(800, 600);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- QCommandLinkButton *rangeButton = new QCommandLinkButton(widget);
- rangeButton->setText(QStringLiteral("Toggle axis ranges"));
- rangeButton->setDescription(QStringLiteral("Switch between automatic axis ranges and preset ranges"));
- rangeButton->setIconSize(QSize(0, 0));
-
- vLayout->addWidget(rangeButton, 1, Qt::AlignTop);
-
- widget->setWindowTitle(QStringLiteral("Input Handling for Axes"));
-
- Data *graphData = new Data(graph);
-
- QObject::connect(rangeButton, &QCommandLinkButton::clicked, graphData, &Data::toggleRanges);
-
- widget->show();
- return app.exec();
-}
diff --git a/examples/datavisualization/graphgallery/CMakeLists.txt b/examples/datavisualization/graphgallery/CMakeLists.txt
new file mode 100644
index 00000000..c66fee25
--- /dev/null
+++ b/examples/datavisualization/graphgallery/CMakeLists.txt
@@ -0,0 +1,75 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(graphgallery LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(graphgallery
+ main.cpp
+ bargraph.cpp bargraph.h
+ graphmodifier.cpp graphmodifier.h
+ rainfalldata.cpp rainfalldata.h
+ variantbardatamapping.cpp variantbardatamapping.h
+ variantbardataproxy.cpp variantbardataproxy.h
+ variantdataset.cpp variantdataset.h
+ scattergraph.cpp scattergraph.h
+ scatterdatamodifier.cpp scatterdatamodifier.h
+ axesinputhandler.cpp axesinputhandler.h
+ surfacegraph.cpp surfacegraph.h
+ surfacegraphmodifier.cpp surfacegraphmodifier.h
+ custominputhandler.cpp custominputhandler.h
+ highlightseries.cpp highlightseries.h
+ topographicseries.cpp topographicseries.h
+)
+set_target_properties(graphgallery PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(graphgallery PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+)
+
+set(graphgallery_resource_files
+ "data/raindata.txt"
+ "data/layer_1.png"
+ "data/layer_2.png"
+ "data/layer_3.png"
+ "data/oilrig.obj"
+ "data/pipe.obj"
+ "data/refinery.obj"
+ "data/maptexture.jpg"
+ "data/topography.png"
+)
+
+qt6_add_resources(graphgallery "graphgallery"
+ PREFIX
+ "/"
+ FILES
+ ${graphgallery_resource_files}
+)
+
+install(TARGETS graphgallery
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/draggableaxes/axesinputhandler.cpp b/examples/datavisualization/graphgallery/axesinputhandler.cpp
index 8b4191a4..3292650e 100644
--- a/examples/datavisualization/draggableaxes/axesinputhandler.cpp
+++ b/examples/datavisualization/graphgallery/axesinputhandler.cpp
@@ -1,17 +1,11 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "axesinputhandler.h"
#include <QtCore/qmath.h>
AxesInputHandler::AxesInputHandler(QAbstract3DGraph *graph, QObject *parent) :
- Q3DInputHandler(parent),
- m_mousePressed(false),
- m_state(StateNormal),
- m_axisX(0),
- m_axisZ(0),
- m_axisY(0),
- m_speedModifier(15.0f)
+ Q3DInputHandler(parent)
{
//! [3]
// Connect to the item selection signal from graph
diff --git a/examples/datavisualization/draggableaxes/axesinputhandler.h b/examples/datavisualization/graphgallery/axesinputhandler.h
index 9dde5190..bb8432ac 100644
--- a/examples/datavisualization/draggableaxes/axesinputhandler.h
+++ b/examples/datavisualization/graphgallery/axesinputhandler.h
@@ -1,12 +1,12 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef AXESINPUTHANDLER_H
#define AXESINPUTHANDLER_H
-#include <QtDataVisualization/Q3DInputHandler>
-#include <QtDataVisualization/QAbstract3DGraph>
-#include <QtDataVisualization/QValue3DAxis>
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtDataVisualization/qabstract3dgraph.h>
+#include <QtDataVisualization/qvalue3daxis.h>
//! [0]
class AxesInputHandler : public Q3DInputHandler
@@ -43,12 +43,12 @@ private:
void handleAxisDragging();
private:
- bool m_mousePressed;
- InputState m_state;
- QValue3DAxis *m_axisX;
- QValue3DAxis *m_axisZ;
- QValue3DAxis *m_axisY;
- float m_speedModifier;
+ bool m_mousePressed = false;
+ InputState m_state = StateNormal;
+ QValue3DAxis *m_axisX = nullptr;
+ QValue3DAxis *m_axisZ = nullptr;
+ QValue3DAxis *m_axisY = nullptr;
+ float m_speedModifier = 15.f;
};
#endif
diff --git a/examples/datavisualization/bars/main.cpp b/examples/datavisualization/graphgallery/bargraph.cpp
index 69e7e8a7..5873c757 100644
--- a/examples/datavisualization/bars/main.cpp
+++ b/examples/datavisualization/graphgallery/bargraph.cpp
@@ -1,211 +1,214 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "bargraph.h"
#include "graphmodifier.h"
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QFontComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QFontDatabase>
-
-int main(int argc, char **argv)
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qpushbutton.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qfontcombobox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qradiobutton.h>
+#include <QtWidgets/qbuttongroup.h>
+#include <QtGui/qfontdatabase.h>
+
+using namespace Qt::StringLiterals;
+
+BarGraph::BarGraph()
{
- qputenv("QSG_RHI_BACKEND", "opengl");
//! [0]
- QApplication app(argc, argv);
- Q3DBars *widgetgraph = new Q3DBars();
- QWidget *container = QWidget::createWindowContainer(widgetgraph);
+ m_barsGraph = new Q3DBars();
//! [0]
+}
- if (!widgetgraph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
+BarGraph::~BarGraph() = default;
- QSize screenSize = widgetgraph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
+bool BarGraph::initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize)
+{
+ if (!m_barsGraph->hasContext())
+ return false;
//! [1]
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
+ m_barsWidget = new QWidget;
+ auto *hLayout = new QHBoxLayout(m_barsWidget);
+ m_container = QWidget::createWindowContainer(m_barsGraph, m_barsWidget);
+ m_barsGraph->resize(minimumGraphSize);
+ m_container->setMinimumSize(minimumGraphSize);
+ m_container->setMaximumSize(maximumGraphSize);
+ m_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_container->setFocusPolicy(Qt::StrongFocus);
+ hLayout->addWidget(m_container, 1);
+
+ auto *vLayout = new QVBoxLayout();
hLayout->addLayout(vLayout);
//! [1]
- widget->setWindowTitle(QStringLiteral("Average temperatures in Oulu and Helsinki, Finland (2015-2022)"));
-
- QComboBox *themeList = new QComboBox(widget);
- themeList->addItem(QStringLiteral("Qt"));
- themeList->addItem(QStringLiteral("Primary Colors"));
- themeList->addItem(QStringLiteral("Digia"));
- themeList->addItem(QStringLiteral("Stone Moss"));
- themeList->addItem(QStringLiteral("Army Blue"));
- themeList->addItem(QStringLiteral("Retro"));
- themeList->addItem(QStringLiteral("Ebony"));
- themeList->addItem(QStringLiteral("Isabelle"));
+ auto *themeList = new QComboBox(m_barsWidget);
+ themeList->addItem(u"Qt"_s);
+ themeList->addItem(u"Primary Colors"_s);
+ themeList->addItem(u"Digia"_s);
+ themeList->addItem(u"Stone Moss"_s);
+ themeList->addItem(u"Army Blue"_s);
+ themeList->addItem(u"Retro"_s);
+ themeList->addItem(u"Ebony"_s);
+ themeList->addItem(u"Isabelle"_s);
themeList->setCurrentIndex(0);
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
+ auto *labelButton = new QPushButton(m_barsWidget);
+ labelButton->setText(u"Change label style"_s);
- QCheckBox *smoothCheckBox = new QCheckBox(widget);
- smoothCheckBox->setText(QStringLiteral("Smooth bars"));
+ auto *smoothCheckBox = new QCheckBox(m_barsWidget);
+ smoothCheckBox->setText(u"Smooth bars"_s);
smoothCheckBox->setChecked(false);
-
- QComboBox *barStyleList = new QComboBox(widget);
- barStyleList->addItem(QStringLiteral("Bar"), int(QAbstract3DSeries::MeshBar));
- barStyleList->addItem(QStringLiteral("Pyramid"), int(QAbstract3DSeries::MeshPyramid));
- barStyleList->addItem(QStringLiteral("Cone"), int(QAbstract3DSeries::MeshCone));
- barStyleList->addItem(QStringLiteral("Cylinder"), int(QAbstract3DSeries::MeshCylinder));
- barStyleList->addItem(QStringLiteral("Bevel bar"), int(QAbstract3DSeries::MeshBevelBar));
- barStyleList->addItem(QStringLiteral("Sphere"), int(QAbstract3DSeries::MeshSphere));
+ auto *barStyleList = new QComboBox(m_barsWidget);
+ barStyleList->addItem(u"Bar"_s, QAbstract3DSeries::MeshBar);
+ barStyleList->addItem(u"Pyramid"_s, QAbstract3DSeries::MeshPyramid);
+ barStyleList->addItem(u"Cone"_s, QAbstract3DSeries::MeshCone);
+ barStyleList->addItem(u"Cylinder"_s, QAbstract3DSeries::MeshCylinder);
+ barStyleList->addItem(u"Bevel bar"_s, QAbstract3DSeries::MeshBevelBar);
+ barStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
barStyleList->setCurrentIndex(4);
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
+ auto *cameraButton = new QPushButton(m_barsWidget);
+ cameraButton->setText(u"Change camera preset"_s);
- QPushButton *zoomToSelectedButton = new QPushButton(widget);
- zoomToSelectedButton->setText(QStringLiteral("Zoom to selected bar"));
+ auto *zoomToSelectedButton = new QPushButton(m_barsWidget);
+ zoomToSelectedButton->setText(u"Zoom to selected bar"_s);
- QComboBox *selectionModeList = new QComboBox(widget);
- selectionModeList->addItem(QStringLiteral("None"),
+ auto *selectionModeList = new QComboBox(m_barsWidget);
+ selectionModeList->addItem(u"None"_s,
int(QAbstract3DGraph::SelectionNone));
- selectionModeList->addItem(QStringLiteral("Bar"),
+ selectionModeList->addItem(u"Bar"_s,
int(QAbstract3DGraph::SelectionItem));
- selectionModeList->addItem(QStringLiteral("Row"),
+ selectionModeList->addItem(u"Row"_s,
int(QAbstract3DGraph::SelectionRow));
- selectionModeList->addItem(QStringLiteral("Bar and Row"),
+ selectionModeList->addItem(u"Bar and Row"_s,
int(QAbstract3DGraph::SelectionItemAndRow));
- selectionModeList->addItem(QStringLiteral("Column"),
+ selectionModeList->addItem(u"Column"_s,
int(QAbstract3DGraph::SelectionColumn));
- selectionModeList->addItem(QStringLiteral("Bar and Column"),
+ selectionModeList->addItem(u"Bar and Column"_s,
int(QAbstract3DGraph::SelectionItemAndColumn));
- selectionModeList->addItem(QStringLiteral("Row and Column"),
+ selectionModeList->addItem(u"Row and Column"_s,
int(QAbstract3DGraph::SelectionRowAndColumn));
- selectionModeList->addItem(QStringLiteral("Bar, Row and Column"),
+ selectionModeList->addItem(u"Bar, Row and Column"_s,
int(QAbstract3DGraph::SelectionItemRowAndColumn));
- selectionModeList->addItem(QStringLiteral("Slice into Row"),
+ selectionModeList->addItem(u"Slice into Row"_s,
int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionRow));
- selectionModeList->addItem(QStringLiteral("Slice into Row and Item"),
+ selectionModeList->addItem(u"Slice into Row and Item"_s,
int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow));
- selectionModeList->addItem(QStringLiteral("Slice into Column"),
+ selectionModeList->addItem(u"Slice into Column"_s,
int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionColumn));
- selectionModeList->addItem(QStringLiteral("Slice into Column and Item"),
+ selectionModeList->addItem(u"Slice into Column and Item"_s,
int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn));
- selectionModeList->addItem(QStringLiteral("Multi: Bar, Row, Col"),
+ selectionModeList->addItem(u"Multi: Bar, Row, Col"_s,
int(QAbstract3DGraph::SelectionItemRowAndColumn
| QAbstract3DGraph::SelectionMultiSeries));
- selectionModeList->addItem(QStringLiteral("Multi, Slice: Row, Item"),
+ selectionModeList->addItem(u"Multi, Slice: Row, Item"_s,
int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow
| QAbstract3DGraph::SelectionMultiSeries));
- selectionModeList->addItem(QStringLiteral("Multi, Slice: Col, Item"),
+ selectionModeList->addItem(u"Multi, Slice: Col, Item"_s,
int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn
| QAbstract3DGraph::SelectionMultiSeries));
selectionModeList->setCurrentIndex(1);
- QCheckBox *backgroundCheckBox = new QCheckBox(widget);
- backgroundCheckBox->setText(QStringLiteral("Show background"));
+ auto *backgroundCheckBox = new QCheckBox(m_barsWidget);
+ backgroundCheckBox->setText(u"Show background"_s);
backgroundCheckBox->setChecked(false);
- QCheckBox *gridCheckBox = new QCheckBox(widget);
- gridCheckBox->setText(QStringLiteral("Show grid"));
+ auto *gridCheckBox = new QCheckBox(m_barsWidget);
+ gridCheckBox->setText(u"Show grid"_s);
gridCheckBox->setChecked(true);
- QCheckBox *seriesCheckBox = new QCheckBox(widget);
- seriesCheckBox->setText(QStringLiteral("Show second series"));
+ auto *seriesCheckBox = new QCheckBox(m_barsWidget);
+ seriesCheckBox->setText(u"Show second series"_s);
seriesCheckBox->setChecked(false);
- QCheckBox *reverseValueAxisCheckBox = new QCheckBox(widget);
- reverseValueAxisCheckBox->setText(QStringLiteral("Reverse value axis"));
+ auto *reverseValueAxisCheckBox = new QCheckBox(m_barsWidget);
+ reverseValueAxisCheckBox->setText(u"Reverse value axis"_s);
reverseValueAxisCheckBox->setChecked(false);
- QCheckBox *reflectionCheckBox = new QCheckBox(widget);
- reflectionCheckBox->setText(QStringLiteral("Show reflections"));
+ auto *reflectionCheckBox = new QCheckBox(m_barsWidget);
+ reflectionCheckBox->setText(u"Show reflections"_s);
reflectionCheckBox->setChecked(false);
- //! [4]
- QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget);
+ //! [3]
+ auto *rotationSliderX = new QSlider(Qt::Horizontal, m_barsWidget);
rotationSliderX->setTickInterval(30);
rotationSliderX->setTickPosition(QSlider::TicksBelow);
rotationSliderX->setMinimum(-180);
rotationSliderX->setValue(0);
rotationSliderX->setMaximum(180);
- QSlider *rotationSliderY = new QSlider(Qt::Horizontal, widget);
+ //! [3]
+ auto *rotationSliderY = new QSlider(Qt::Horizontal, m_barsWidget);
rotationSliderY->setTickInterval(15);
rotationSliderY->setTickPosition(QSlider::TicksAbove);
rotationSliderY->setMinimum(-90);
rotationSliderY->setValue(0);
rotationSliderY->setMaximum(90);
- //! [4]
- QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
+ auto *fontSizeSlider = new QSlider(Qt::Horizontal, m_barsWidget);
fontSizeSlider->setTickInterval(10);
fontSizeSlider->setTickPosition(QSlider::TicksBelow);
fontSizeSlider->setMinimum(1);
fontSizeSlider->setValue(30);
fontSizeSlider->setMaximum(100);
- QFontComboBox *fontList = new QFontComboBox(widget);
+ auto *fontList = new QFontComboBox(m_barsWidget);
fontList->setCurrentFont(QFont("Times New Roman"));
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->addItem(QStringLiteral("Low Soft"));
- shadowQuality->addItem(QStringLiteral("Medium Soft"));
- shadowQuality->addItem(QStringLiteral("High Soft"));
+ auto *shadowQuality = new QComboBox(m_barsWidget);
+ shadowQuality->addItem(u"None"_s);
+ shadowQuality->addItem(u"Low"_s);
+ shadowQuality->addItem(u"Medium"_s);
+ shadowQuality->addItem(u"High"_s);
+ shadowQuality->addItem(u"Low Soft"_s);
+ shadowQuality->addItem(u"Medium Soft"_s);
+ shadowQuality->addItem(u"High Soft"_s);
shadowQuality->setCurrentIndex(5);
- QComboBox *rangeList = new QComboBox(widget);
- rangeList->addItem(QStringLiteral("2015"));
- rangeList->addItem(QStringLiteral("2016"));
- rangeList->addItem(QStringLiteral("2017"));
- rangeList->addItem(QStringLiteral("2018"));
- rangeList->addItem(QStringLiteral("2019"));
- rangeList->addItem(QStringLiteral("2020"));
- rangeList->addItem(QStringLiteral("2021"));
- rangeList->addItem(QStringLiteral("2022"));
- rangeList->addItem(QStringLiteral("All"));
+ auto *rangeList = new QComboBox(m_barsWidget);
+ rangeList->addItem(u"2015"_s);
+ rangeList->addItem(u"2016"_s);
+ rangeList->addItem(u"2017"_s);
+ rangeList->addItem(u"2018"_s);
+ rangeList->addItem(u"2019"_s);
+ rangeList->addItem(u"2020"_s);
+ rangeList->addItem(u"2021"_s);
+ rangeList->addItem(u"2022"_s);
+ rangeList->addItem(u"All"_s);
rangeList->setCurrentIndex(8);
- QCheckBox *axisTitlesVisibleCB = new QCheckBox(widget);
- axisTitlesVisibleCB->setText(QStringLiteral("Axis titles visible"));
+ auto *axisTitlesVisibleCB = new QCheckBox(m_barsWidget);
+ axisTitlesVisibleCB->setText(u"Axis titles visible"_s);
axisTitlesVisibleCB->setChecked(true);
- QCheckBox *axisTitlesFixedCB = new QCheckBox(widget);
- axisTitlesFixedCB->setText(QStringLiteral("Axis titles fixed"));
+ auto *axisTitlesFixedCB = new QCheckBox(m_barsWidget);
+ axisTitlesFixedCB->setText(u"Axis titles fixed"_s);
axisTitlesFixedCB->setChecked(true);
- QSlider *axisLabelRotationSlider = new QSlider(Qt::Horizontal, widget);
+ auto *axisLabelRotationSlider = new QSlider(Qt::Horizontal, m_barsWidget);
axisLabelRotationSlider->setTickInterval(10);
axisLabelRotationSlider->setTickPosition(QSlider::TicksBelow);
axisLabelRotationSlider->setMinimum(0);
axisLabelRotationSlider->setValue(30);
axisLabelRotationSlider->setMaximum(90);
- //! [5]
- vLayout->addWidget(new QLabel(QStringLiteral("Rotate horizontally")));
+ auto *modeGroup = new QButtonGroup(m_barsWidget);
+ auto *modeWeather = new QRadioButton(u"Temperature Data"_s, m_barsWidget);
+ modeWeather->setChecked(true);
+ auto *modeCustomProxy = new QRadioButton(u"Custom Proxy Data"_s, m_barsWidget);
+ modeGroup->addButton(modeWeather);
+ modeGroup->addButton(modeCustomProxy);
+
+ //! [4]
+ vLayout->addWidget(new QLabel(u"Rotate horizontally"_s));
vLayout->addWidget(rotationSliderX, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Rotate vertically")));
+ //! [4]
+ vLayout->addWidget(new QLabel(u"Rotate vertically"_s));
vLayout->addWidget(rotationSliderY, 0, Qt::AlignTop);
- //! [5]
vLayout->addWidget(labelButton, 0, Qt::AlignTop);
vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
vLayout->addWidget(zoomToSelectedButton, 0, Qt::AlignTop);
@@ -217,31 +220,33 @@ int main(int argc, char **argv)
vLayout->addWidget(reverseValueAxisCheckBox);
vLayout->addWidget(axisTitlesVisibleCB);
vLayout->addWidget(axisTitlesFixedCB);
- vLayout->addWidget(new QLabel(QStringLiteral("Show year")));
+ vLayout->addWidget(new QLabel(u"Show year"_s));
vLayout->addWidget(rangeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change bar style")));
+ vLayout->addWidget(new QLabel(u"Change bar style"_s));
vLayout->addWidget(barStyleList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change selection mode")));
+ vLayout->addWidget(new QLabel(u"Change selection mode"_s));
vLayout->addWidget(selectionModeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
+ vLayout->addWidget(new QLabel(u"Change theme"_s));
vLayout->addWidget(themeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
+ vLayout->addWidget(new QLabel(u"Adjust shadow quality"_s));
vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
+ vLayout->addWidget(new QLabel(u"Change font"_s));
vLayout->addWidget(fontList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust font size")));
+ vLayout->addWidget(new QLabel(u"Adjust font size"_s));
vLayout->addWidget(fontSizeSlider);
- vLayout->addWidget(new QLabel(QStringLiteral("Axis label rotation")));
- vLayout->addWidget(axisLabelRotationSlider, 1, Qt::AlignTop);
+ vLayout->addWidget(new QLabel(u"Axis label rotation"_s));
+ vLayout->addWidget(axisLabelRotationSlider, 0, Qt::AlignTop);
+ vLayout->addWidget(modeWeather, 0, Qt::AlignTop);
+ vLayout->addWidget(modeCustomProxy, 1, Qt::AlignTop);
//! [2]
- GraphModifier *modifier = new GraphModifier(widgetgraph);
+ auto *modifier = new GraphModifier(m_barsGraph, this);
//! [2]
- //! [6]
+ //! [5]
QObject::connect(rotationSliderX, &QSlider::valueChanged, modifier, &GraphModifier::rotateX);
+ //! [5]
QObject::connect(rotationSliderY, &QSlider::valueChanged, modifier, &GraphModifier::rotateY);
- //! [6]
QObject::connect(labelButton, &QPushButton::clicked, modifier,
&GraphModifier::changeLabelBackground);
@@ -285,7 +290,7 @@ int main(int argc, char **argv)
QObject::connect(modifier, &GraphModifier::shadowQualityChanged, shadowQuality,
&QComboBox::setCurrentIndex);
- QObject::connect(widgetgraph, &Q3DBars::shadowQualityChanged, modifier,
+ QObject::connect(m_barsGraph, &Q3DBars::shadowQualityChanged, modifier,
&GraphModifier::shadowQualityUpdatedByVisual);
QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
@@ -304,8 +309,21 @@ int main(int argc, char **argv)
&GraphModifier::setAxisTitleFixed);
QObject::connect(axisLabelRotationSlider, &QSlider::valueChanged, modifier,
&GraphModifier::changeLabelRotation);
- //! [3]
- widget->show();
- return app.exec();
- //! [3]
+
+ QObject::connect(modeWeather, &QRadioButton::toggled, modifier,
+ &GraphModifier::setDataModeToWeather);
+ QObject::connect(modeCustomProxy, &QRadioButton::toggled, modifier,
+ &GraphModifier::setDataModeToCustom);
+ QObject::connect(modeWeather, &QRadioButton::toggled, seriesCheckBox,
+ &QCheckBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, rangeList,
+ &QComboBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, axisTitlesVisibleCB,
+ &QCheckBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, axisTitlesFixedCB,
+ &QCheckBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, axisLabelRotationSlider,
+ &QSlider::setEnabled);
+
+ return true;
}
diff --git a/examples/datavisualization/graphgallery/bargraph.h b/examples/datavisualization/graphgallery/bargraph.h
new file mode 100644
index 00000000..004c14eb
--- /dev/null
+++ b/examples/datavisualization/graphgallery/bargraph.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BARGRAPH_H
+#define BARGRAPH_H
+
+#include <QtDataVisualization/q3dbars.h>
+#include <QtCore/qobject.h>
+
+class BarGraph : public QObject
+{
+ Q_OBJECT
+public:
+ BarGraph();
+ ~BarGraph();
+
+ bool initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize);
+ QWidget *barsWidget() { return m_barsWidget; }
+
+private:
+ Q3DBars *m_barsGraph = nullptr;
+ QWidget *m_container = nullptr;
+ QWidget *m_barsWidget = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/texturesurface/custominputhandler.cpp b/examples/datavisualization/graphgallery/custominputhandler.cpp
index 98b14bdc..f9f06871 100644
--- a/examples/datavisualization/texturesurface/custominputhandler.cpp
+++ b/examples/datavisualization/graphgallery/custominputhandler.cpp
@@ -1,19 +1,13 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "custominputhandler.h"
-#include <QtDataVisualization/Q3DCamera>
+#include <QtDataVisualization/q3dcamera.h>
#include <QtCore/qmath.h>
CustomInputHandler::CustomInputHandler(QAbstract3DGraph *graph, QObject *parent) :
- Q3DInputHandler(parent),
- m_highlight(0),
- m_mousePressed(false),
- m_state(StateNormal),
- m_axisX(0),
- m_axisZ(0),
- m_speedModifier(20.0f)
+ Q3DInputHandler(parent)
{
// Connect to the item selection signal from graph
connect(graph, &QAbstract3DGraph::selectedElementChanged, this,
@@ -43,7 +37,7 @@ void CustomInputHandler::wheelEvent(QWheelEvent *event)
float y = (m_axisXMaxValue - m_axisXMinValue) * m_aspectRatio;
m_axisX->setRange(m_axisXMinValue, m_axisXMaxValue);
- m_axisY->setRange(100.0f, y);
+ m_axisY->setRange(100.f, y);
m_axisZ->setRange(m_axisZMinValue, m_axisZMaxValue);
}
//! [1]
@@ -84,7 +78,7 @@ void CustomInputHandler::handleElementSelected(QAbstract3DGraph::ElementType typ
void CustomInputHandler::handleAxisDragging()
{
- float distance = 0.0f;
+ float distance = 0.f;
// Get scene orientation from active camera
float xRotation = scene()->activeCamera()->xRotation();
@@ -100,7 +94,7 @@ void CustomInputHandler::handleAxisDragging()
// Adjust axes
switch (m_state) {
-//! [0]
+ //! [0]
case StateDraggingX:
distance = (move.x() * xMulX - move.y() * xMulY) * m_speedModifier;
m_axisXMinValue -= distance;
@@ -117,7 +111,7 @@ void CustomInputHandler::handleAxisDragging()
}
m_axisX->setRange(m_axisXMinValue, m_axisXMaxValue);
break;
-//! [0]
+ //! [0]
case StateDraggingZ:
distance = (move.x() * zMulX + move.y() * zMulY) * m_speedModifier;
m_axisZMinValue += distance;
@@ -141,18 +135,18 @@ void CustomInputHandler::handleAxisDragging()
void CustomInputHandler::checkConstraints()
{
-//! [2]
+ //! [2]
if (m_axisXMinValue < m_areaMinValue)
m_axisXMinValue = m_areaMinValue;
if (m_axisXMaxValue > m_areaMaxValue)
m_axisXMaxValue = m_areaMaxValue;
// Don't allow too much zoom in
if ((m_axisXMaxValue - m_axisXMinValue) < m_axisXMinRange) {
- float adjust = (m_axisXMinRange - (m_axisXMaxValue - m_axisXMinValue)) / 2.0f;
+ float adjust = (m_axisXMinRange - (m_axisXMaxValue - m_axisXMinValue)) / 2.f;
m_axisXMinValue -= adjust;
m_axisXMaxValue += adjust;
}
-//! [2]
+ //! [2]
if (m_axisZMinValue < m_areaMinValue)
m_axisZMinValue = m_areaMinValue;
@@ -160,7 +154,7 @@ void CustomInputHandler::checkConstraints()
m_axisZMaxValue = m_areaMaxValue;
// Don't allow too much zoom in
if ((m_axisZMaxValue - m_axisZMinValue) < m_axisZMinRange) {
- float adjust = (m_axisZMinRange - (m_axisZMaxValue - m_axisZMinValue)) / 2.0f;
+ float adjust = (m_axisZMinRange - (m_axisZMaxValue - m_axisZMinValue)) / 2.f;
m_axisZMinValue -= adjust;
m_axisZMaxValue += adjust;
}
diff --git a/examples/datavisualization/texturesurface/custominputhandler.h b/examples/datavisualization/graphgallery/custominputhandler.h
index 2231248c..a28b5851 100644
--- a/examples/datavisualization/texturesurface/custominputhandler.h
+++ b/examples/datavisualization/graphgallery/custominputhandler.h
@@ -1,14 +1,15 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CUSTOMINPUTHANDLER_H
#define CUSTOMINPUTHANDLER_H
-#include <QtDataVisualization/Q3DInputHandler>
-#include <QtDataVisualization/QAbstract3DGraph>
-#include <QtDataVisualization/QValue3DAxis>
#include "highlightseries.h"
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtDataVisualization/qabstract3dgraph.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+
class CustomInputHandler : public Q3DInputHandler
{
Q_OBJECT
@@ -42,6 +43,7 @@ public:
inline void setHighlightSeries(HighlightSeries *series) { m_highlight = series; }
inline void setDragSpeedModifier(float modifier) { m_speedModifier = modifier; }
+protected:
virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
@@ -53,22 +55,22 @@ private:
void checkConstraints();
private:
- HighlightSeries *m_highlight;
- bool m_mousePressed;
- InputState m_state;
- QValue3DAxis *m_axisX;
- QValue3DAxis *m_axisY;
- QValue3DAxis *m_axisZ;
- float m_speedModifier;
- float m_aspectRatio;
- float m_axisXMinValue;
- float m_axisXMaxValue;
- float m_axisXMinRange;
- float m_axisZMinValue;
- float m_axisZMaxValue;
- float m_axisZMinRange;
- float m_areaMinValue;
- float m_areaMaxValue;
+ HighlightSeries *m_highlight = nullptr;
+ bool m_mousePressed = false;
+ InputState m_state = StateNormal;
+ QValue3DAxis *m_axisX = nullptr;
+ QValue3DAxis *m_axisY = nullptr;
+ QValue3DAxis *m_axisZ = nullptr;
+ float m_speedModifier = 20.f;
+ float m_aspectRatio = 0.f;
+ float m_axisXMinValue = 0.f;
+ float m_axisXMaxValue = 0.f;
+ float m_axisXMinRange = 0.f;
+ float m_axisZMinValue = 0.f;
+ float m_axisZMaxValue = 0.f;
+ float m_axisZMinRange = 0.f;
+ float m_areaMinValue = 0.f;
+ float m_areaMaxValue = 0.f;
};
#endif
diff --git a/examples/datavisualization/customitems/layer_1.png b/examples/datavisualization/graphgallery/data/layer_1.png
index 9138c710..9138c710 100644
--- a/examples/datavisualization/customitems/layer_1.png
+++ b/examples/datavisualization/graphgallery/data/layer_1.png
Binary files differ
diff --git a/examples/datavisualization/customitems/layer_2.png b/examples/datavisualization/graphgallery/data/layer_2.png
index 61631ae8..61631ae8 100644
--- a/examples/datavisualization/customitems/layer_2.png
+++ b/examples/datavisualization/graphgallery/data/layer_2.png
Binary files differ
diff --git a/examples/datavisualization/customitems/layer_3.png b/examples/datavisualization/graphgallery/data/layer_3.png
index 066ffbe7..066ffbe7 100644
--- a/examples/datavisualization/customitems/layer_3.png
+++ b/examples/datavisualization/graphgallery/data/layer_3.png
Binary files differ
diff --git a/examples/datavisualization/texturesurface/license.txt b/examples/datavisualization/graphgallery/data/license.txt
index 749daf31..749daf31 100644
--- a/examples/datavisualization/texturesurface/license.txt
+++ b/examples/datavisualization/graphgallery/data/license.txt
diff --git a/examples/datavisualization/texturesurface/maptexture.jpg b/examples/datavisualization/graphgallery/data/maptexture.jpg
index ae5d66eb..ae5d66eb 100644
--- a/examples/datavisualization/texturesurface/maptexture.jpg
+++ b/examples/datavisualization/graphgallery/data/maptexture.jpg
Binary files differ
diff --git a/examples/datavisualization/customitems/oilrig.obj b/examples/datavisualization/graphgallery/data/oilrig.obj
index c3b6ea57..c3b6ea57 100644
--- a/examples/datavisualization/customitems/oilrig.obj
+++ b/examples/datavisualization/graphgallery/data/oilrig.obj
diff --git a/examples/datavisualization/customitems/pipe.obj b/examples/datavisualization/graphgallery/data/pipe.obj
index 6ccbb286..6ccbb286 100644
--- a/examples/datavisualization/customitems/pipe.obj
+++ b/examples/datavisualization/graphgallery/data/pipe.obj
diff --git a/examples/datavisualization/graphgallery/data/raindata.txt b/examples/datavisualization/graphgallery/data/raindata.txt
new file mode 100644
index 00000000..d9558921
--- /dev/null
+++ b/examples/datavisualization/graphgallery/data/raindata.txt
@@ -0,0 +1,158 @@
+# Rainfall per month from 2010 to 2022 in Northern Finland (Oulu)
+# Format: year, month, rainfall
+2010,1, 0,
+2010,2, 3.4,
+2010,3, 52,
+2010,4, 33.8,
+2010,5, 45.6,
+2010,6, 43.8,
+2010,7, 104.6,
+2010,8, 105.4,
+2010,9, 107.2,
+2010,10,38.6,
+2010,11,17.8,
+2010,12,0,
+2011,1, 8.2,
+2011,2, 1.6,
+2011,3, 27.4,
+2011,4, 15.8,
+2011,5, 57.6,
+2011,6, 85.2,
+2011,7, 127,
+2011,8, 72.2,
+2011,9, 82.2,
+2011,10,62.4,
+2011,11,31.6,
+2011,12,53.8,
+2012,1, 0,
+2012,2, 5,
+2012,3, 32.4,
+2012,4, 57.6,
+2012,5, 71.4,
+2012,6, 60.8,
+2012,7, 109,
+2012,8, 43.6,
+2012,9, 79.4,
+2012,10,117.2,
+2012,11,59,
+2012,12,0.2,
+2013,1, 28,
+2013,2, 19,
+2013,3, 0,
+2013,4, 37.6,
+2013,5, 44.2,
+2013,6, 104.8,
+2013,7, 84.2,
+2013,8, 57.2,
+2013,9, 37.2,
+2013,10,64.6,
+2013,11,77.8,
+2013,12,92.8,
+2014,1, 23.8,
+2014,2, 23.6,
+2014,3, 15.4,
+2014,4, 13.2,
+2014,5, 36.4,
+2014,6, 26.4,
+2014,7, 95.8,
+2014,8, 81.8,
+2014,9, 13.8,
+2014,10,94.6,
+2014,11,44.6,
+2014,12,31,
+2015,1, 37.4,
+2015,2, 21,
+2015,3, 42,
+2015,4, 8.8,
+2015,5, 82.4,
+2015,6, 150,
+2015,7, 56.8,
+2015,8, 67.2,
+2015,9, 131.2,
+2015,10,38.4,
+2015,11,83.4,
+2015,12,47.8,
+2016,1, 12.4,
+2016,2, 34.8,
+2016,3, 29,
+2016,4, 40.4,
+2016,5, 32.4,
+2016,6, 80.2,
+2016,7, 102.6,
+2016,8, 95.6,
+2016,9, 40.2,
+2016,10,7.8,
+2016,11,39.6,
+2016,12,8.8,
+2017,1, 9.4,
+2017,2, 6.6,
+2017,3, 29,
+2017,4, 46.2,
+2017,5, 43.2,
+2017,6, 25.2,
+2017,7, 72.4,
+2017,8, 58.8,
+2017,9, 68.8,
+2017,10,45.8,
+2017,11,36.8,
+2017,12,29.6,
+2018,1, 19.8,
+2018,2, 0.8,
+2018,3, 4,
+2018,4, 23.2,
+2018,5, 13.2,
+2018,6, 62.8,
+2018,7, 33,
+2018,8, 96.6,
+2018,9, 72.6,
+2018,10,48.8,
+2018,11,31.8,
+2018,12,12.8,
+2019,1, 0.2,
+2019,2, 24.8,
+2019,3, 32,
+2019,4, 8.8,
+2019,5, 71.4,
+2019,6, 65.8,
+2019,7, 17.6,
+2019,8, 90,
+2019,9, 50,
+2019,10,77,
+2019,11,27,
+2019,12,43.2,
+2020,1, 28.8,
+2020,2, 45,
+2020,3, 18.6,
+2020,4, 13,
+2020,5, 30.8,
+2020,6, 21.4,
+2020,7, 163.6,
+2020,8, 12,
+2020,9, 102.4,
+2020,10,133.2,
+2020,11,69.8,
+2020,12,40.6,
+2021,1, 0.4,
+2021,2, 21.6,
+2021,3, 24,
+2021,4, 51.4,
+2021,5, 76.4,
+2021,6, 29.2,
+2021,7, 36.4,
+2021,8, 116,
+2021,9, 72.4,
+2021,10,93.4,
+2021,11,21,
+2021,12,10.2,
+2022,1, 8.6,
+2022,2, 6.6,
+2022,3, 5.2,
+2022,4, 15.2,
+2022,5, 37.6,
+2022,6, 45,
+2022,7, 67.4,
+2022,8, 161.6,
+2022,9, 22.8,
+2022,10,75.2,
+2022,11,21.8,
+2022,12,0.2
diff --git a/examples/datavisualization/customitems/refinery.obj b/examples/datavisualization/graphgallery/data/refinery.obj
index ed90c361..ed90c361 100644
--- a/examples/datavisualization/customitems/refinery.obj
+++ b/examples/datavisualization/graphgallery/data/refinery.obj
diff --git a/examples/datavisualization/texturesurface/topography.png b/examples/datavisualization/graphgallery/data/topography.png
index 9349cdb3..9349cdb3 100644
--- a/examples/datavisualization/texturesurface/topography.png
+++ b/examples/datavisualization/graphgallery/data/topography.png
Binary files differ
diff --git a/examples/datavisualization/graphgallery/doc/images/graphgallery-example.png b/examples/datavisualization/graphgallery/doc/images/graphgallery-example.png
new file mode 100644
index 00000000..f3320c8e
--- /dev/null
+++ b/examples/datavisualization/graphgallery/doc/images/graphgallery-example.png
Binary files differ
diff --git a/examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc b/examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc
new file mode 100644
index 00000000..ff7761d2
--- /dev/null
+++ b/examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc
@@ -0,0 +1,705 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example graphgallery
+ \meta tags {DataVisualization, Q3DBars, Bar Graph, Custom Proxy, Q3DScatter, Scatter Graph, Custom Input Handler, Q3DSurface, Surface Graph, QCustom3DItem, Textured Surface}
+ \title Graph Gallery
+ \ingroup qtdatavisualization_examples
+ \brief Gallery of Bar, Scatter, and Surface graphs.
+
+ \e {Graph Gallery} demonstrates all three graph types and some of their special features.
+ The graphs have their own tabs in the application.
+
+ \image graphgallery-example.png
+
+ \include examples-run.qdocinc
+
+ \section1 Bar Graph
+
+ In the \uicontrol {Bar Graph} tab, create a 3D bar graph using Q3DBars and combine the use of
+ widgets to adjust various bar graph qualities. The example shows how to:
+
+ \list
+ \li Create an application with Q3DBars and some widgets
+ \li Use QBar3DSeries and QBarDataProxy to set data to the graph
+ \li Adjust some graph and series properties using widget controls
+ \li Select a row or a column by clicking an axis label
+ \li Create a custom proxy to use with Q3DBars
+ \endlist
+
+ For information about interacting with the graph, see
+ \l{Qt Data Visualization Interacting with Data}{this page}.
+
+ \section2 Creating the Application
+
+ First, in \c{bargraph.cpp}, instantiate Q3DBars:
+
+ \snippet graphgallery/bargraph.cpp 0
+
+ Then, create the widget, and horizontal and vertical layouts.
+
+ The graph is embedded in a window container using
+ QWidget::createWindowContainer(). This is required because all data
+ visualization graph classes (Q3DBars, Q3DScatter, Q3DSurface) inherit
+ QWindow. This is the only way to use a class inheriting QWindow as a widget.
+
+ Add the graph and the vertical layout to the
+ horizontal one:
+
+ \snippet graphgallery/bargraph.cpp 1
+
+ Next, create another class to handle the data addition and other interaction with the
+ graph:
+
+ \snippet graphgallery/bargraph.cpp 2
+
+ \section2 Setting up the Bar Graph
+
+ Set up the graph in the constructor of the \c GraphModifier class:
+
+ \snippet graphgallery/graphmodifier.cpp 0
+
+ First, create the axes and the series into member variables to support changing them easily:
+
+ \snippet graphgallery/graphmodifier.cpp 1
+
+ Then, set some visual qualities for the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 2
+
+ Set up the axes and make them the active axes of the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 3
+
+ Give axis labels a small autorotation angle with setLabelAutoRotation() to make them orient
+ slightly toward the camera. This improves axis label readability at extreme camera angles.
+
+ Next, initialize the visual properties of the series. Note that the second series is initially
+ not visible:
+
+ \snippet graphgallery/graphmodifier.cpp 4
+
+ Add the series to the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 5
+
+ Finally, set the camera angle by calling the same method the camera angle change button
+ in the UI uses to cycle through various camera angles:
+
+ \snippet graphgallery/graphmodifier.cpp 6
+
+ The camera is controlled via the scene object of the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 7
+
+ For more information about using scene and cameras, see Q3DScene and Q3DCamera.
+
+ \section2 Adding Data to the Graph
+
+ At the end of the constructor, call a method that sets up the data:
+
+ \snippet graphgallery/graphmodifier.cpp 8
+
+ This method adds data to the proxies of the two series:
+
+ \snippet graphgallery/graphmodifier.cpp 9a
+ \dots 0
+ \snippet graphgallery/graphmodifier.cpp 9b
+
+ \section2 Using Widgets to Control the Graph
+
+ Continue by adding some widgets in \c{bargraph.cpp}. Add a slider:
+
+ \snippet graphgallery/bargraph.cpp 3
+
+ Use the slider to rotate the graph instead of just using a mouse or touch. Add it to the
+ vertical layout:
+
+ \snippet graphgallery/bargraph.cpp 4
+
+ Then, connect it to a method in \c GraphModifier:
+
+ \snippet graphgallery/bargraph.cpp 5
+
+ Create a slot in \c GraphModifier for the signal connection. The camera is controlled via the
+ scene object. This time, specify the actual camera position along the orbit around the center
+ point, instead of specifying a preset camera angle:
+
+ \snippet graphgallery/graphmodifier.cpp 10
+
+ You can now use the slider to rotate the graph.
+
+ Add more widgets to the vertical layout to control:
+
+ \list
+ \li Graph rotation
+ \li Label style
+ \li Camera preset
+ \li Background visibility
+ \li Grid visibility
+ \li Bar shading smoothness
+ \li Visibility of the second bar series
+ \li Value axis direction
+ \li Axis title visibility and rotation
+ \li Data range to be shown
+ \li Bar style
+ \li Selection mode
+ \li Theme
+ \li Shadow quality
+ \li Font
+ \li Font size
+ \li Axis label rotation
+ \li Data mode
+ \endlist
+
+ Some widget controls are intentionally disabled when in the \uicontrol {Custom Proxy Data}
+ data mode.
+
+ \section2 Selecting a Row or Column by Clicking an Axis Label
+
+ Selection by axis label is default functionality for bar graphs. As an example, you can select
+ rows by clicking an axis label in the following way:
+
+ \list 1
+ \li Change selection mode to \c SelectionRow
+ \li Click a year label
+ \li The row with the clicked year is selected
+ \endlist
+
+ The same method works with \c SelectionSlice and \c SelectionItem flags, as long as
+ either \c SelectionRow or \c SelectionColumn is set as well.
+
+ \section2 Zooming to Selection
+
+ As an example of adjusting the camera target, implement an animation of zooming to
+ selection via a button press. Animation initializations are done in the constructor:
+
+ \snippet graphgallery/graphmodifier.cpp 11
+
+ Function \c{GraphModifier::zoomToSelectedBar()} contains the zooming functionality.
+ QPropertyAnimation \c m_animationCameraTarget targets Q3DCamera::target property,
+ which takes a value normalized to the range (-1, 1).
+
+ Figure out where the selected bar is relative to axes, and use that as the end value for
+ \c{m_animationCameraTarget}:
+
+ \snippet graphgallery/graphmodifier.cpp 12
+ \dots 0
+ \snippet graphgallery/graphmodifier.cpp 13
+
+ Then, rotate the camera so that it always points approximately to the center of
+ the graph at the end of the animation:
+
+ \snippet graphgallery/graphmodifier.cpp 14
+
+ \section2 Custom Proxy for Data
+
+ By toggling \uicontrol {Custom Proxy Data} data mode on, a custom dataset and the corresponding
+ proxy are taken into use.
+
+ Define a simple flexible data set, \c{VariantDataSet}, where each data item is
+ a variant list. Each item can have multiple values, identified by their index in
+ the list. In this case, the data set is storing monthly rainfall data, where the value in
+ index zero is the year, the value in index one is the month, and the value in index two is
+ the amount of rainfall in that month.
+
+ The custom proxy is similar to itemmodel-based proxies provided by Qt Data Visualization, and
+ it requires mapping to interpret the data.
+
+ \section3 VariantDataSet
+
+ Define the data items as QVariantList objects. Add functionality for clearing the data set and
+ querying for a reference to the data contained in the set. Also, add signals to be emitted when
+ data is added or the set is cleared:
+
+ \snippet graphgallery/variantdataset.h 0
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantdataset.h 1
+
+ \section3 VariantBarDataProxy
+
+ Subclass \c VariantBarDataProxy from QBarDataProxy and provide a simple API of getters and
+ setters for the data set and the mapping:
+
+ \snippet graphgallery/variantbardataproxy.h 0
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardataproxy.h 1
+
+ The proxy listens for the changes in the data set and the mapping, and resolves the data set
+ if any changes are detected. This is not a particularly efficient implementation, as any change
+ will cause re-resolving of the entire data set, but that is not an issue for this example.
+
+ In \c resolveDataSet() method, sort the variant data values into rows and columns based on the
+ mapping. This is very similar to how QItemModelBarDataProxy handles mapping, except you use
+ list indexes instead of item model roles here. Once the values are sorted, generate
+ \c QBarDataArray out of them, and call the \c resetArray() method in the parent class:
+
+ \snippet graphgallery/variantbardataproxy.cpp 0
+
+ \section3 VariantBarDataMapping
+
+ Store the mapping information between \c VariantDataSet data item indexes and rows, columns,
+ and values of \c QBarDataArray in \c VariantBarDataMapping. It contains the lists of rows and
+ columns to be included in the resolved data:
+
+ \snippet graphgallery/variantbardatamapping.h 0
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardatamapping.h 1
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardatamapping.h 2
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardatamapping.h 3
+
+ The primary way to use a \c VariantBarDataMapping object is to give the mappings in the
+ constructor, though you can use the \c remap() method to set them later, either individually or
+ all together. Emit a signal if mapping changes. The outcome is a simplified version of the
+ mapping functionality of QItemModelBarDataProxy, adapted to work with variant lists instead of
+ item models.
+
+ \section3 RainfallData
+
+ Handle the setup of QBar3DSeries with the custom proxy in the \c RainfallData class:
+
+ \snippet graphgallery/rainfalldata.cpp 0
+
+ Populate the variant data set in the \c addDataSet() method:
+
+ \snippet graphgallery/rainfalldata.cpp 1
+ \dots
+
+ Add the data set to the custom proxy and set the mapping:
+
+ \snippet graphgallery/rainfalldata.cpp 2
+
+ Finally, add a function for getting the created series for displaying:
+
+ \snippet graphgallery/rainfalldata.h 0
+
+ \section1 Scatter Graph
+
+ In the \uicontrol {Scatter Graph} tab, create a 3D scatter graph using Q3DScatter.
+ The example shows how to:
+
+ \list
+ \li Set up Q3DScatter graph
+ \li Use QScatterDataProxy to set data to the graph
+ \li Create a custom input handler by extending Q3DInputHandler
+ \endlist
+
+ For basic application creation, see \l {Bar Graph}.
+
+ \section2 Setting up the Scatter Graph
+
+ First, set up some visual qualities for the graph in the constructor of the
+ \c ScatterDataModifier:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 0
+
+ None of these are mandatory, but are used to override graph defaults. You can try how it looks
+ with the preset defaults by commenting out the block above.
+
+ Next, create a QScatterDataProxy and the associated QScatter3DSeries. Set a custom label format
+ and mesh smoothing for the series and add it to the graph:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 1
+
+ \section2 Adding Scatter Data
+
+ The last thing to do in the \c ScatterDataModifier constructor is to add data to the graph:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 2
+
+ The actual data addition is done in \c addData() method. First, configure the axes:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 3
+
+ You could do this also in the constructor of \c {ScatterDataModifier}. Doing it here
+ keeps the constructor simpler and the axes' configuration near the data.
+
+ Next, create a data array and populate it:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 4
+ \dots
+ \snippet graphgallery/scatterdatamodifier.cpp 5
+
+ Finally, tell the proxy to start using the data we gave it:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 6
+
+ Now, the graph has the data and is ready for use. For information about adding widgets
+ to control the graph, see \l {Using Widgets to Control the Graph}.
+
+ \section2 Replacing Default Input Handling
+
+ Initialize \c m_inputHandler in the constructor with a pointer to the scatter graph instance:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 7
+
+ Replace the default input handling mechanism by setting the active input handler of
+ Q3DScatter to \c {AxesInputHandler}, which implements the custom behavior:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 8
+
+ The input handler needs access to the axes of the graph, so pass them to it:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 9
+
+ \section2 Extending Mouse Event Handling
+
+ First, inherit the custom input handler from Q3DInputHandler instead of QAbstract3DInputHandler
+ to keep all the functionality of the default input handling, and to add the custom
+ functionality on top of it:
+
+ \snippet graphgallery/axesinputhandler.h 0
+
+ Start extending the default functionality by re-implementing some of the mouse events.
+ First, extend \c {mousePressEvent}. Add a \c{m_mousePressed} flag for the left mouse button
+ to it, and keep the rest of the default functionality:
+
+ \snippet graphgallery/axesinputhandler.cpp 0
+
+ Next, modify \c mouseReleaseEvent to clear the flag, and reset the internal state:
+
+ \snippet graphgallery/axesinputhandler.cpp 1
+
+ Then, modify \c {mouseMoveEvent}. Check if \c m_mousePressed flag is \c {true} and
+ the internal state is something other than \c StateNormal. If so, set the input positions
+ for mouse movement distance calculations, and call the axis dragging function (see
+ \l {Implementing Axis Dragging} for details):
+
+ \snippet graphgallery/axesinputhandler.cpp 2
+
+ \section2 Implementing Axis Dragging
+
+ First, start listening to the selection signal from the graph. Do that in the
+ constructor, and connect it to the \c handleElementSelected method:
+
+ \snippet graphgallery/axesinputhandler.cpp 3
+
+ In \c {handleElementSelected}, check the type of the selection, and set the internal state
+ based on it:
+
+ \snippet graphgallery/axesinputhandler.cpp 4
+
+ The actual dragging logic is implemented in the \c handleAxisDragging method, which is called
+ from \c {mouseMoveEvent}, if the required conditions are met:
+
+ \snippet graphgallery/axesinputhandler.cpp 5
+
+ In \c {handleAxisDragging}, first get the scene orientation from the active camera:
+
+ \snippet graphgallery/axesinputhandler.cpp 6
+
+ Then, calculate the modifiers for mouse movement direction based on the orientation:
+
+ \snippet graphgallery/axesinputhandler.cpp 7
+
+ After that, calculate the mouse movement, and modify it based on the y rotation of the
+ camera:
+
+ \snippet graphgallery/axesinputhandler.cpp 8
+
+ Then, apply the moved distance to the correct axis:
+
+ \snippet graphgallery/axesinputhandler.cpp 9
+
+ Finally, add a function for setting the dragging speed:
+
+ \snippet graphgallery/axesinputhandler.h 1
+
+ This is needed, as the mouse movement distance is absolute in screen coordinates, and you
+ need to adjust it to the axis range. The larger the value, the slower the dragging will be.
+ Note that in this example, the scene zoom level is not taken into account when determining the
+ drag speed, so you'll notice changes in the range adjustment as you change the zoom level.
+
+ You could also adjust the modifier automatically based on the axis range and camera zoom level.
+
+ \section1 Surface Graph
+
+ In the \uicontrol {Surface Graph} tab, create a 3D surface graph using Q3DSurface.
+ The example shows how to:
+
+ \list
+ \li Set up a basic QSurfaceDataProxy and set data for it.
+ \li Use QHeightMapSurfaceDataProxy for showing 3D height maps.
+ \li Use topographic data to create 3D height maps.
+ \li Use three different selection modes for studying the graph.
+ \li Use axis ranges to display selected portions of the graph.
+ \li Set a custom surface gradient.
+ \li Add custom items and labels with QCustom3DItem and QCustom3DLabel.
+ \li Use custom input handler to enable zooming and panning.
+ \li Highlight an area of the surface.
+ \endlist
+
+ For basic application creation, see \l {Bar Graph}.
+
+ \section2 Simple Surface with Generated Data
+
+ First, instantiate a new QSurfaceDataProxy and attach it to a new QSurface3DSeries:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 0
+
+ Then, fill the proxy with a simple square root and sine wave data. Create a new
+ \c QSurfaceDataArray instance, and add \c QSurfaceDataRow elements to it.
+ Set the created \c QSurfaceDataArray as the data array for the QSurfaceDataProxy by calling
+ \c{resetArray()}.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 1
+
+ \section2 Multiseries Height Map Data
+
+ Create the height map by instantiating a QHeightMapSurfaceDataProxy with a QImage containing
+ the height data. Use QHeightMapSurfaceDataProxy::setValueRanges() to define the
+ value range of the map. In the example, the map is from an imaginary position of
+ 34.0\unicode 0x00B0 N - 40.0\unicode 0x00B0 N and 18.0\unicode 0x00B0 E - 24.0\unicode 0x00B0 E.
+ These values are used to position the map on the axes.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 2
+
+ Add the other surface layers the same way, by creating a proxy and a series for them using
+ height map images.
+
+ \section2 Topographic Map Data
+
+ The topographic data is obtained from the National Land Survey of Finland. It provides a product
+ called \c{Elevation Model 2 m}, which is suitable for this example.
+ The topography data is from Levi fell. The accuracy of the data is well beyond the need, and
+ therefore it is compressed and encoded into a PNG file. The height value of the original
+ ASCII data is encoded into RGB format using a multiplier, which you will see later in
+ a code extract. The multiplier is calculated by dividing the largest 24-bit value with the
+ highest point in Finland.
+
+ QHeightMapSurfaceDataProxy converts only one-byte values. To utilize the higher accuracy of
+ the data from the National Land Survey of Finland, read the data from the PNG file and decode
+ it into QSurface3DSeries.
+
+ First, define the encoding multiplier:
+
+ \snippet graphgallery/topographicseries.cpp 0
+
+ Then, perform the actual decoding:
+
+ \snippet graphgallery/topographicseries.cpp 1
+
+ Now, the data is usable by the proxy.
+
+ \section2 Selecting the Data Set
+
+ To demonstrate different proxies, \uicontrol {Surface Graph} has three radio buttons to
+ switch between the series.
+
+ With \uicontrol {Sqrt & Sin}, the simple generated series is activated. First, set
+ the decorative features, such as enabling the grid for the surface, and selecting the flat
+ shading mode. Next, define the axis label format and value ranges. Set automatic label rotation
+ to improve label readability at low camera angles. Finally, make sure the correct series is
+ added to the graph and the others are not:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 3
+
+ With \uicontrol {Multiseries Height Map}, the height map series are activated and others
+ disabled. Auto-adjusting Y-axis range works well for the height map surface, so ensure it is
+ set.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 4
+
+ With \uicontrol {Textured Topography}, the topographic series is activated and others disabled.
+ Activate a custom input handler for this series, to be able to highlight areas on it:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 5
+
+ See \l {Use Custom Input Handler to Enable Zooming and Panning} for information about the
+ custom input handler for this data set.
+
+ \section2 Selection Modes
+
+ The three selection modes supported by Q3DSurface can be used with radio buttons.
+ To activate the selected mode or to clear it, add the following inline methods:
+
+ \snippet graphgallery/surfacegraphmodifier.h 0
+
+ Add \c{QAbstract3DGraph::SelectionSlice} and \c{QAbstract3DGraph::SelectionMultiSeries} flags
+ for the row and column selection modes to support doing a slice selection to all visible series
+ in the graph simultaneously.
+
+ \section2 Axis Ranges for Studying the Graph
+
+ The example has four slider controls for adjusting the min and max values for X and Z
+ axes. When selecting the proxy, these sliders are adjusted to match the axis ranges of the
+ current data set:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 6
+
+ Add support for setting the X range from the widget controls to the graph:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 7
+
+ Add the support for Z range the same way.
+
+ \section2 Custom Surface Gradients
+
+ With the \uicontrol {Sqrt & Sin} data set, custom surface gradients can be taken into use
+ with two push buttons. Define the gradient with QLinearGradient, where the desired colors are
+ set. Also, change the color style to Q3DTheme::ColorStyleRangeGradient to use the gradient.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 8
+
+ \section2 Adding Custom Meshes to the Application
+
+ Add the mesh files to \c{CMakeLists.txt} for cmake build:
+
+ \badcode
+ set(graphgallery_resource_files
+ ...
+ "data/oilrig.obj"
+ "data/pipe.obj"
+ "data/refinery.obj"
+ ...
+ )
+
+ qt6_add_resources(graphgallery "graphgallery"
+ PREFIX
+ "/"
+ FILES
+ ${graphgallery_resource_files}
+ )
+ \endcode
+
+ Also, add them in the qrc resource file for use with qmake:
+
+ \badcode
+ <RCC>
+ <qresource prefix="/">
+ ...
+ <file>data/refinery.obj</file>
+ <file>data/oilrig.obj</file>
+ <file>data/pipe.obj</file>
+ ...
+ </qresource>
+ </RCC>
+ \endcode
+
+ \section2 Adding Custom Item to a Graph
+
+ With the \uicontrol {Multiseries Height Map} data set, custom items are inserted into the
+ graph and can be toggled on or off using checkboxes. Other visual qualities can also be
+ controlled with another set of checkboxes, including see-through for the two top layers, and
+ a highlight for the bottom layer.
+
+ Begin by creating a small QImage. Fill it with a single color to use as the color for the
+ custom object:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 9
+
+ Then, specify the position of the item in a variable. The position can then be used for
+ removing the correct item from the graph:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 10
+
+ Then, create a new QCustom3DItem with all the parameters:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 11
+
+ Finally, add the item to the graph:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 12
+
+ \section2 Adding Custom Label to a Graph
+
+ Adding a custom label is very similar to adding a custom item. For the label, a custom mesh is
+ not needed, but just a QCustom3DLabel instance:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 13
+
+ \section2 Removing Custom Item from a Graph
+
+ To remove a specific item from the graph, call \c removeCustomItemAt() with the position of
+ the item:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 14
+
+ \note Removing a custom item from the graph also deletes the object. If you want to preserve
+ the item, use the \c releaseCustomItem() method instead.
+
+ \section2 Texture to a Surface Series
+
+ With the \uicontrol {Textured Topography} data set, create a map texture to be used with the
+ topographic height map.
+
+ Set an image to be used as the texture on a surface with QSurface3DSeries::setTextureFile().
+ Add a check box to control if the texture is set or not, and a handler to react to the checkbox
+ state:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 15
+
+ The image in this example is read from a JPG file. Setting an empty file with the method clears
+ the texture, and the surface uses the gradients or colors from the theme.
+
+ \section2 Use Custom Input Handler to Enable Zooming and Panning
+
+ With the \uicontrol {Textured Topography} data set, create a custom input handler to
+ highlight the selection on the graph and allow panning the graph.
+
+ The panning implementation is similar to the one shown in \l{Implementing Axis Dragging}.
+ The difference is that, in this example, you follow only the X and Z axes and don't allow
+ dragging the surface outside the graph. To limit the dragging, follow the limits of the axes
+ and do nothing if going outside the graph:
+
+ \snippet graphgallery/custominputhandler.cpp 0
+
+ For zooming, catch the \c wheelEvent and adjust the X and Y axis ranges according to the delta
+ value on QWheelEvent. Adjust the Y axis so that the aspect ratio between the Y axis and the XZ
+ plane stays the same. This prevents getting a graph in which the height is exaggerated:
+
+ \snippet graphgallery/custominputhandler.cpp 1
+
+ Next, add some limits to the zoom level, so that it won't get too near to or far from the
+ surface. For instance, if the value for the X axis gets below the allowed limit, i.e. zooming
+ gets too far, the value is set to the minimum allowed value. If the range is going to below
+ the range minimum, both ends of the axis are adjusted so that the range stays at the limit:
+
+ \snippet graphgallery/custominputhandler.cpp 2
+
+ \section2 Highlight an Area of the Surface
+
+ To implement a highlight to be displayed on the surface, create a copy of the series and add
+ some offset to the y value. In this example, the class \c HighlightSeries implements the
+ creation of the copy in its \c handlePositionChange method.
+
+ First, give \c HighlightSeries the pointer to the original series, and then start listening to
+ the QSurface3DSeries::selectedPointChanged signal:
+
+ \snippet graphgallery/highlightseries.cpp 0
+
+ When the signal triggers, check that the position is valid. Then, calculate the ranges
+ for the copied area, and check that they stay within the bounds. Finally, fill the data array
+ of the highlight series with the range from the data array of the topography series:
+
+ \snippet graphgallery/highlightseries.cpp 1
+
+ \section2 A Gradient to the Highlight Series
+
+ Since the \c HighlightSeries is QSurface3DSeries, all the decoration methods a series can
+ have are available. In this example, add a gradient to emphasize the elevation. Because the
+ suitable gradient style depends on the range of the Y axis and we change the range when
+ zooming, the gradient color positions need to be adjusted as the range changes. Do this by
+ defining proportional values for the gradient color positions:
+
+ \snippet graphgallery/highlightseries.cpp 2
+
+ The gradient modification is done in the \c handleGradientChange method, so connect it to
+ react to changes on the Y axis:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 16
+
+ When a change in the Y axis max value happens, calculate the new gradient color positions:
+
+ \snippet graphgallery/highlightseries.cpp 3
+
+ \section1 Example Contents
+*/
diff --git a/examples/datavisualization/graphgallery/graphgallery.pro b/examples/datavisualization/graphgallery/graphgallery.pro
new file mode 100644
index 00000000..c9bd96f6
--- /dev/null
+++ b/examples/datavisualization/graphgallery/graphgallery.pro
@@ -0,0 +1,49 @@
+android|ios|winrt {
+ error( "This example is not supported for android, ios, or winrt." )
+}
+
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+QT += widgets
+requires(qtConfig(fontcombobox))
+requires(qtConfig(combobox))
+
+SOURCES += main.cpp \
+ bargraph.cpp \
+ graphmodifier.cpp \
+ rainfalldata.cpp \
+ variantdataset.cpp \
+ variantbardataproxy.cpp \
+ variantbardatamapping.cpp \
+ scattergraph.cpp \
+ scatterdatamodifier.cpp \
+ axesinputhandler.cpp \
+ surfacegraph.cpp \
+ surfacegraphmodifier.cpp \
+ custominputhandler.cpp \
+ highlightseries.cpp \
+ topographicseries.cpp
+
+HEADERS += \
+ bargraph.h \
+ graphmodifier.h \
+ rainfalldata.h \
+ variantdataset.h \
+ variantbardataproxy.h \
+ variantbardatamapping.h \
+ scattergraph.h \
+ scatterdatamodifier.h \
+ axesinputhandler.h \
+ surfacegraph.h \
+ surfacegraphmodifier.h \
+ custominputhandler.h \
+ highlightseries.h \
+ topographicseries.h
+
+RESOURCES += graphgallery.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/* \
+ data/*
diff --git a/examples/datavisualization/graphgallery/graphgallery.qrc b/examples/datavisualization/graphgallery/graphgallery.qrc
new file mode 100644
index 00000000..6df5703d
--- /dev/null
+++ b/examples/datavisualization/graphgallery/graphgallery.qrc
@@ -0,0 +1,13 @@
+<RCC>
+ <qresource prefix="/">
+ <file>data/raindata.txt</file>
+ <file>data/layer_1.png</file>
+ <file>data/layer_2.png</file>
+ <file>data/layer_3.png</file>
+ <file>data/refinery.obj</file>
+ <file>data/oilrig.obj</file>
+ <file>data/pipe.obj</file>
+ <file>data/maptexture.jpg</file>
+ <file>data/topography.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/datavisualization/bars/graphmodifier.cpp b/examples/datavisualization/graphgallery/graphmodifier.cpp
index 8dcf78e6..b0cb6f48 100644
--- a/examples/datavisualization/bars/graphmodifier.cpp
+++ b/examples/datavisualization/graphgallery/graphmodifier.cpp
@@ -1,7 +1,9 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "graphmodifier.h"
+#include "rainfalldata.h"
+
#include <QtDataVisualization/qcategory3daxis.h>
#include <QtDataVisualization/qvalue3daxis.h>
#include <QtDataVisualization/qbardataproxy.h>
@@ -9,29 +11,26 @@
#include <QtDataVisualization/q3dcamera.h>
#include <QtDataVisualization/qbar3dseries.h>
#include <QtDataVisualization/q3dtheme.h>
-#include <QtCore/QTime>
-#include <QtWidgets/QComboBox>
#include <QtCore/qmath.h>
+#include <QtWidgets/qcombobox.h>
+
+using namespace Qt::StringLiterals;
+
+// TODO: Many of the values do not affect custom proxy series now - should be fixed
//! [0]
-GraphModifier::GraphModifier(Q3DBars *bargraph)
- : m_graph(bargraph),
- m_xRotation(0.0f),
- m_yRotation(0.0f),
- m_fontSize(30),
- m_segments(4),
- m_subSegments(3),
- m_minval(-20.0f),
- m_maxval(20.0f),
+GraphModifier::GraphModifier(Q3DBars *bargraph, QObject *parent) :
+ QObject(parent),
+ m_graph(bargraph),
+ //! [0]
//! [1]
m_temperatureAxis(new QValue3DAxis),
m_yearAxis(new QCategory3DAxis),
m_monthAxis(new QCategory3DAxis),
m_primarySeries(new QBar3DSeries),
m_secondarySeries(new QBar3DSeries),
- //! [1]
- m_barMesh(QAbstract3DSeries::MeshBevelBar),
- m_smooth(false)
+ m_celsiusString(u"°C"_s)
+ //! [1]
{
//! [2]
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftMedium);
@@ -41,15 +40,16 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_graph->setMultiSeriesUniform(true);
//! [2]
- m_months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- m_years << "2015" << "2016" << "2017" << "2018" << "2019" << "2020" << "2021" << "2022";
+ m_months = {"January", "February", "March", "April", "May", "June" , "July",
+ "August", "September", "October" , "November", "December"};
+ m_years = {"2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022"};
//! [3]
m_temperatureAxis->setTitle("Average temperature");
m_temperatureAxis->setSegmentCount(m_segments);
m_temperatureAxis->setSubSegmentCount(m_subSegments);
m_temperatureAxis->setRange(m_minval, m_maxval);
- m_temperatureAxis->setLabelFormat(QString(QStringLiteral("%.1f ") + m_celsiusString));
+ m_temperatureAxis->setLabelFormat(u"%.1f "_s + m_celsiusString);
m_temperatureAxis->setLabelAutoRotation(30.0f);
m_temperatureAxis->setTitleVisible(true);
@@ -65,32 +65,32 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_graph->setColumnAxis(m_monthAxis);
//! [3]
- //! [8]
- m_primarySeries->setItemLabelFormat(QStringLiteral("Oulu - @colLabel @rowLabel: @valueLabel"));
+ //! [4]
+ m_primarySeries->setItemLabelFormat(u"Oulu - @colLabel @rowLabel: @valueLabel"_s);
m_primarySeries->setMesh(QAbstract3DSeries::MeshBevelBar);
m_primarySeries->setMeshSmooth(false);
- m_secondarySeries->setItemLabelFormat(QStringLiteral("Helsinki - @colLabel @rowLabel: @valueLabel"));
+ m_secondarySeries->setItemLabelFormat(u"Helsinki - @colLabel @rowLabel: @valueLabel"_s);
m_secondarySeries->setMesh(QAbstract3DSeries::MeshBevelBar);
m_secondarySeries->setMeshSmooth(false);
m_secondarySeries->setVisible(false);
- //! [8]
-
//! [4]
+
+ //! [5]
m_graph->addSeries(m_primarySeries);
m_graph->addSeries(m_secondarySeries);
- //! [4]
+ //! [5]
//! [6]
changePresetCamera();
//! [6]
- //! [9]
+ //! [8]
resetTemperatureData();
- //! [9]
+ //! [8]
// Set up property animations for zooming to the selected bar
- //! [12]
+ //! [11]
Q3DCamera *camera = m_graph->scene()->activeCamera();
m_defaultAngleX = camera->xRotation();
m_defaultAngleY = camera->yRotation();
@@ -120,22 +120,24 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_animationCameraZoom.setKeyValueAt(zoomOutFraction, QVariant::fromValue(50.0f));
m_animationCameraTarget.setKeyValueAt(zoomOutFraction,
QVariant::fromValue(QVector3D(0.0f, 0.0f, 0.0f)));
- //! [12]
+ //! [11]
+
+ m_customData = new RainfallData();
}
-//! [0]
GraphModifier::~GraphModifier()
{
- delete m_graph;
+ delete m_customData;
}
void GraphModifier::resetTemperatureData()
{
- //! [5]
+ //! [9a]
// Set up data
static const float tempOulu[8][12] = {
{-7.4f, -2.4f, 0.0f, 3.0f, 8.2f, 11.6f, 14.7f, 15.4f, 11.4f, 4.2f, 2.1f, -2.3f}, // 2015
{-13.4f, -3.9f, -1.8f, 3.1f, 10.6f, 13.7f, 17.8f, 13.6f, 10.7f, 3.5f, -3.1f, -4.2f}, // 2016
+ //! [9a]
{-5.7f, -6.7f, -3.0f, -0.1f, 4.7f, 12.4f, 16.1f, 14.1f, 9.4f, 3.0f, -0.3f, -3.2f}, // 2017
{-6.4f, -11.9f, -7.4f, 1.9f, 11.4f, 12.4f, 21.5f, 16.1f, 11.0f, 4.4f, 2.1f, -4.1f}, // 2018
{-11.7f, -6.1f, -2.4f, 3.9f, 7.2f, 14.5f, 15.6f, 14.4f, 8.5f, 2.0f, -3.0f, -1.5f}, // 2019
@@ -156,17 +158,16 @@ void GraphModifier::resetTemperatureData()
};
// Create data arrays
- QBarDataArray *dataSet = new QBarDataArray;
- QBarDataArray *dataSet2 = new QBarDataArray;
- QBarDataRow *dataRow;
- QBarDataRow *dataRow2;
+ //! [9b]
+ auto *dataSet = new QBarDataArray;
+ auto *dataSet2 = new QBarDataArray;
dataSet->reserve(m_years.size());
- for (int year = 0; year < m_years.size(); year++) {
+ for (qsizetype year = 0; year < m_years.size(); ++year) {
// Create a data row
- dataRow = new QBarDataRow(m_months.size());
- dataRow2 = new QBarDataRow(m_months.size());
- for (int month = 0; month < m_months.size(); month++) {
+ auto *dataRow = new QBarDataRow(m_months.size());
+ auto *dataRow2 = new QBarDataRow(m_months.size());
+ for (qsizetype month = 0; month < m_months.size(); ++month) {
// Add data to the row
(*dataRow)[month].setValue(tempOulu[year][month]);
(*dataRow2)[month].setValue(tempHelsinki[year][month]);
@@ -179,7 +180,7 @@ void GraphModifier::resetTemperatureData()
// Add data to the data proxy (the data proxy assumes ownership of it)
m_primarySeries->dataProxy()->resetArray(dataSet, m_years, m_months);
m_secondarySeries->dataProxy()->resetArray(dataSet2, m_years, m_months);
- //! [5]
+ //! [9b]
}
void GraphModifier::changeRange(int range)
@@ -192,11 +193,12 @@ void GraphModifier::changeRange(int range)
void GraphModifier::changeStyle(int style)
{
- QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
+ auto *comboBox = qobject_cast<QComboBox *>(sender());
if (comboBox) {
- m_barMesh = QAbstract3DSeries::Mesh(comboBox->itemData(style).toInt());
+ m_barMesh = comboBox->itemData(style).value<QAbstract3DSeries::Mesh>();
m_primarySeries->setMesh(m_barMesh);
m_secondarySeries->setMesh(m_barMesh);
+ m_customData->customSeries()->setMesh(m_barMesh);
}
}
@@ -210,14 +212,14 @@ void GraphModifier::changePresetCamera()
// Restore camera target in case animation has changed it
m_graph->scene()->activeCamera()->setTarget(QVector3D(0.0f, 0.0f, 0.0f));
- //! [10]
+ //! [7]
static int preset = Q3DCamera::CameraPresetFront;
m_graph->scene()->activeCamera()->setCameraPreset((Q3DCamera::CameraPreset)preset);
if (++preset > Q3DCamera::CameraPresetDirectlyBelow)
preset = Q3DCamera::CameraPresetFrontLow;
- //! [10]
+ //! [7]
}
void GraphModifier::changeTheme(int theme)
@@ -237,7 +239,7 @@ void GraphModifier::changeLabelBackground()
void GraphModifier::changeSelectionMode(int selectionMode)
{
- QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
+ auto *comboBox = qobject_cast<QComboBox *>(sender());
if (comboBox) {
int flags = comboBox->itemData(selectionMode).toInt();
m_graph->setSelectionMode(QAbstract3DGraph::SelectionFlags(flags));
@@ -286,7 +288,6 @@ void GraphModifier::setAxisTitleFixed(bool enabled)
m_yearAxis->setTitleFixed(enabled);
}
-//! [11]
void GraphModifier::zoomToSelectedBar()
{
m_animationCameraX.stop();
@@ -311,7 +312,7 @@ void GraphModifier::zoomToSelectedBar()
if (selectedBar != QBar3DSeries::invalidSelectionPosition()) {
// Normalize selected bar position within axis range to determine target coordinates
- //! [13]
+ //! [12]
QVector3D endTarget;
float xMin = m_graph->columnAxis()->min();
float xRange = m_graph->columnAxis()->max() - xMin;
@@ -319,10 +320,10 @@ void GraphModifier::zoomToSelectedBar()
float zRange = m_graph->rowAxis()->max() - zMin;
endTarget.setX((selectedBar.y() - xMin) / xRange * 2.0f - 1.0f);
endTarget.setZ((selectedBar.x() - zMin) / zRange * 2.0f - 1.0f);
- //! [13]
+ //! [12]
// Rotate the camera so that it always points approximately to the graph center
- //! [15]
+ //! [14]
qreal endAngleX = 90.0 - qRadiansToDegrees(qAtan(qreal(endTarget.z() / endTarget.x())));
if (endTarget.x() > 0.0f)
endAngleX -= 180.0f;
@@ -331,14 +332,14 @@ void GraphModifier::zoomToSelectedBar()
float endAngleY = barValue >= 0.0f ? 30.0f : -30.0f;
if (m_graph->valueAxis()->reversed())
endAngleY *= -1.0f;
- //! [15]
+ //! [14]
m_animationCameraX.setEndValue(QVariant::fromValue(float(endAngleX)));
m_animationCameraY.setEndValue(QVariant::fromValue(endAngleY));
m_animationCameraZoom.setEndValue(QVariant::fromValue(250));
- //! [14]
+ //! [13]
m_animationCameraTarget.setEndValue(QVariant::fromValue(endTarget));
- //! [14]
+ //! [13]
} else {
// No selected bar, so return to the default view
m_animationCameraX.setEndValue(QVariant::fromValue(m_defaultAngleX));
@@ -352,7 +353,18 @@ void GraphModifier::zoomToSelectedBar()
m_animationCameraZoom.start();
m_animationCameraTarget.start();
}
-//! [11]
+
+void GraphModifier::setDataModeToWeather(bool enabled)
+{
+ if (enabled)
+ changeDataMode(false);
+}
+
+void GraphModifier::setDataModeToCustom(bool enabled)
+{
+ if (enabled)
+ changeDataMode(true);
+}
void GraphModifier::changeShadowQuality(int quality)
{
@@ -361,19 +373,19 @@ void GraphModifier::changeShadowQuality(int quality)
emit shadowQualityChanged(quality);
}
-//! [7]
+//! [10]
void GraphModifier::rotateX(int rotation)
{
m_xRotation = rotation;
m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
}
+//! [10]
void GraphModifier::rotateY(int rotation)
{
m_yRotation = rotation;
m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
}
-//! [7]
void GraphModifier::setBackgroundEnabled(int enabled)
{
@@ -390,6 +402,7 @@ void GraphModifier::setSmoothBars(int smooth)
m_smooth = bool(smooth);
m_primarySeries->setMeshSmooth(m_smooth);
m_secondarySeries->setMeshSmooth(m_smooth);
+ m_customData->customSeries()->setMeshSmooth(m_smooth);
}
void GraphModifier::setSeriesVisibility(int enabled)
@@ -406,3 +419,23 @@ void GraphModifier::setReflection(bool enabled)
{
m_graph->setReflection(enabled);
}
+
+void GraphModifier::changeDataMode(bool customData)
+{
+ // Change between weather data and data from custom proxy
+ if (customData) {
+ m_graph->removeSeries(m_primarySeries);
+ m_graph->removeSeries(m_secondarySeries);
+ m_graph->addSeries(m_customData->customSeries());
+ m_graph->setValueAxis(m_customData->valueAxis());
+ m_graph->setRowAxis(m_customData->rowAxis());
+ m_graph->setColumnAxis(m_customData->colAxis());
+ } else {
+ m_graph->removeSeries(m_customData->customSeries());
+ m_graph->addSeries(m_primarySeries);
+ m_graph->addSeries(m_secondarySeries);
+ m_graph->setValueAxis(m_temperatureAxis);
+ m_graph->setRowAxis(m_yearAxis);
+ m_graph->setColumnAxis(m_monthAxis);
+ }
+}
diff --git a/examples/datavisualization/bars/graphmodifier.h b/examples/datavisualization/graphgallery/graphmodifier.h
index c1a6476e..0d112c0d 100644
--- a/examples/datavisualization/bars/graphmodifier.h
+++ b/examples/datavisualization/graphgallery/graphmodifier.h
@@ -1,5 +1,5 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef GRAPHMODIFIER_H
#define GRAPHMODIFIER_H
@@ -7,18 +7,15 @@
#include <QtDataVisualization/q3dbars.h>
#include <QtDataVisualization/qbardataproxy.h>
#include <QtDataVisualization/qabstract3dseries.h>
+#include <QtCore/qpropertyanimation.h>
-#include <QtGui/QFont>
-#include <QtCore/QDebug>
-#include <QtCore/QStringList>
-#include <QtCore/QPointer>
-#include <QtCore/QPropertyAnimation>
+class RainfallData;
class GraphModifier : public QObject
{
Q_OBJECT
public:
- explicit GraphModifier(Q3DBars *bargraph);
+ explicit GraphModifier(Q3DBars *bargraph, QObject *parent);
~GraphModifier();
void resetTemperatureData();
@@ -34,6 +31,7 @@ public:
void setSeriesVisibility(int enabled);
void setReverseValueAxis(int enabled);
void setReflection(bool enabled);
+ void changeDataMode(bool customData);
public Q_SLOTS:
void changeRange(int range);
@@ -46,6 +44,8 @@ public Q_SLOTS:
void setAxisTitleVisibility(bool enabled);
void setAxisTitleFixed(bool enabled);
void zoomToSelectedBar();
+ void setDataModeToWeather(bool enabled);
+ void setDataModeToCustom(bool enabled);
Q_SIGNALS:
void shadowQualityChanged(int quality);
@@ -55,32 +55,33 @@ Q_SIGNALS:
void fontSizeChanged(int size);
private:
- Q3DBars *m_graph;
- float m_xRotation;
- float m_yRotation;
- int m_fontSize;
- int m_segments;
- int m_subSegments;
- float m_minval;
- float m_maxval;
- QStringList m_months;
- QStringList m_years;
- QValue3DAxis *m_temperatureAxis;
- QCategory3DAxis *m_yearAxis;
- QCategory3DAxis *m_monthAxis;
- QBar3DSeries *m_primarySeries;
- QBar3DSeries *m_secondarySeries;
- QAbstract3DSeries::Mesh m_barMesh;
- bool m_smooth;
- QPropertyAnimation m_animationCameraX;
- QPropertyAnimation m_animationCameraY;
- QPropertyAnimation m_animationCameraZoom;
- QPropertyAnimation m_animationCameraTarget;
- float m_defaultAngleX;
- float m_defaultAngleY;
- float m_defaultZoom;
- QVector3D m_defaultTarget;
- const QString m_celsiusString = QString(QChar(0xB0)) + QLatin1String("C");
+ Q3DBars *m_graph = nullptr;
+ float m_xRotation = 0.f;
+ float m_yRotation = 0.f;
+ int m_fontSize = 30;
+ int m_segments = 4;
+ int m_subSegments = 3;
+ float m_minval = -20.f;
+ float m_maxval = 20.f;
+ QStringList m_months = {};
+ QStringList m_years = {};
+ QValue3DAxis *m_temperatureAxis = nullptr;
+ QCategory3DAxis *m_yearAxis = nullptr;
+ QCategory3DAxis *m_monthAxis = nullptr;
+ QBar3DSeries *m_primarySeries = nullptr;
+ QBar3DSeries *m_secondarySeries = nullptr;
+ QAbstract3DSeries::Mesh m_barMesh = QAbstract3DSeries::MeshBevelBar;
+ bool m_smooth = false;
+ QPropertyAnimation m_animationCameraX = {};
+ QPropertyAnimation m_animationCameraY = {};
+ QPropertyAnimation m_animationCameraZoom = {};
+ QPropertyAnimation m_animationCameraTarget = {};
+ float m_defaultAngleX = 0.f;
+ float m_defaultAngleY = 0.f;
+ float m_defaultZoom = 0.f;
+ QVector3D m_defaultTarget = {};
+ const QString m_celsiusString;
+ RainfallData *m_customData = nullptr;
};
#endif
diff --git a/examples/datavisualization/texturesurface/highlightseries.cpp b/examples/datavisualization/graphgallery/highlightseries.cpp
index fb567d5c..3f10b421 100644
--- a/examples/datavisualization/texturesurface/highlightseries.cpp
+++ b/examples/datavisualization/graphgallery/highlightseries.cpp
@@ -1,10 +1,10 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "highlightseries.h"
//! [2]
-const float darkRedPos = 1.0f;
+const float darkRedPos = 1.f;
const float redPos = 0.8f;
const float yellowPos = 0.6f;
const float greenPos = 0.4f;
@@ -12,8 +12,6 @@ const float darkGreenPos = 0.2f;
//! [2]
HighlightSeries::HighlightSeries()
- : m_width(100),
- m_height(100)
{
setDrawMode(QSurface3DSeries::DrawSurface);
setFlatShadingEnabled(true);
@@ -43,7 +41,6 @@ void HighlightSeries::handlePositionChange(const QPoint &position)
if (position == invalidSelectionPosition()) {
setVisible(false);
-
return;
}
@@ -66,16 +63,18 @@ void HighlightSeries::handlePositionChange(const QPoint &position)
QSurfaceDataProxy *srcProxy = m_topographicSeries->dataProxy();
const QSurfaceDataArray &srcArray = *srcProxy->array();
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ auto *dataArray = new QSurfaceDataArray;
dataArray->reserve(endZ - startZ);
- for (int i = startZ; i < endZ; i++) {
- QSurfaceDataRow *newRow = new QSurfaceDataRow(endX - startX);
+ for (int i = startZ; i < endZ; ++i) {
+ auto *newRow = new QSurfaceDataRow;
+ newRow->reserve(endX - startX);
QSurfaceDataRow *srcRow = srcArray.at(i);
- for (int j = startX, p = 0; j < endX; j++, p++) {
+ for (int j = startX; j < endX; ++j) {
QVector3D pos = srcRow->at(j).position();
- (*newRow)[p].setPosition(QVector3D(pos.x(), pos.y() + 0.1f, pos.z()));
+ pos.setY(pos.y() + 0.1f);
+ newRow->append(QSurfaceDataItem(pos));
}
- *dataArray << newRow;
+ dataArray->append(newRow);
}
dataProxy()->resetArray(dataArray);
@@ -89,7 +88,7 @@ void HighlightSeries::handleGradientChange(float value)
float ratio = m_minHeight / value;
QLinearGradient gr;
- gr.setColorAt(0.0f, Qt::black);
+ gr.setColorAt(0.f, Qt::black);
gr.setColorAt(darkGreenPos * ratio, Qt::darkGreen);
gr.setColorAt(greenPos * ratio, Qt::green);
gr.setColorAt(yellowPos * ratio, Qt::yellow);
diff --git a/examples/datavisualization/texturesurface/highlightseries.h b/examples/datavisualization/graphgallery/highlightseries.h
index 10d53530..c74a6b84 100644
--- a/examples/datavisualization/texturesurface/highlightseries.h
+++ b/examples/datavisualization/graphgallery/highlightseries.h
@@ -1,10 +1,10 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef HIGHLIGHTSERIES_H
#define HIGHLIGHTSERIES_H
-#include <QtDataVisualization/QSurface3DSeries>
+#include <QtDataVisualization/qsurface3dseries.h>
#include "topographicseries.h"
@@ -23,13 +23,13 @@ public Q_SLOTS:
void handleGradientChange(float value);
private:
- int m_width;
- int m_height;
- int m_srcWidth;
- int m_srcHeight;
- QPoint m_position;
- TopographicSeries *m_topographicSeries;
- float m_minHeight;
+ int m_width = 100;
+ int m_height = 100;
+ int m_srcWidth = 0;
+ int m_srcHeight = 0;
+ QPoint m_position = {};
+ TopographicSeries *m_topographicSeries = nullptr;
+ float m_minHeight = 0.f;
};
#endif // HIGHLIGHTSERIES_H
diff --git a/examples/datavisualization/graphgallery/main.cpp b/examples/datavisualization/graphgallery/main.cpp
new file mode 100644
index 00000000..4bffa1c1
--- /dev/null
+++ b/examples/datavisualization/graphgallery/main.cpp
@@ -0,0 +1,52 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "bargraph.h"
+#include "scattergraph.h"
+#include "surfacegraph.h"
+
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qmessagebox.h>
+#include <QtWidgets/qwidget.h>
+#include <QtWidgets/qtabwidget.h>
+#include <QtGui/qscreen.h>
+
+using namespace Qt::StringLiterals;
+
+int main(int argc, char **argv)
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+
+ QApplication app(argc, argv);
+
+ // Create a tab widget for creating own tabs for Q3DBars, Q3DScatter, and Q3DSurface
+ QTabWidget tabWidget;
+ tabWidget.setWindowTitle(u"Graph Gallery"_s);
+
+ const QSize screenSize = tabWidget.screen()->size();
+ const QSize minimumGraphSize{screenSize.width() / 2, qRound(screenSize.height() / 1.75)};
+
+ // Create bar graph
+ BarGraph bars;
+ // Create scatter graph
+ ScatterGraph scatter;
+ // Create surface graph
+ SurfaceGraph surface;
+
+ if (!bars.initialize(minimumGraphSize, screenSize)
+ || !scatter.initialize(minimumGraphSize, screenSize)
+ || !surface.initialize(minimumGraphSize, screenSize)) {
+ QMessageBox::warning(nullptr, u"Graph Gallery"_s, u"Couldn't initialize the OpenGL context."_s);
+ return -1;
+ }
+
+ // Add bars widget
+ tabWidget.addTab(bars.barsWidget(), u"Bar Graph"_s);
+ // Add scatter widget
+ tabWidget.addTab(scatter.scatterWidget(), u"Scatter Graph"_s);
+ // Add surface widget
+ tabWidget.addTab(surface.surfaceWidget(), u"Surface Graph"_s);
+
+ tabWidget.show();
+ return app.exec();
+}
diff --git a/examples/datavisualization/graphgallery/rainfalldata.cpp b/examples/datavisualization/graphgallery/rainfalldata.cpp
new file mode 100644
index 00000000..66a2553a
--- /dev/null
+++ b/examples/datavisualization/graphgallery/rainfalldata.cpp
@@ -0,0 +1,117 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "rainfalldata.h"
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+#include <QtDataVisualization/qbar3dseries.h>
+#include <QtDataVisualization/q3dtheme.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qfile.h>
+
+using namespace Qt::StringLiterals;
+
+RainfallData::RainfallData()
+{
+ // In data file the months are in numeric format, so create custom list
+ for (int i = 1; i <= 12; ++i)
+ m_numericMonths << QString::number(i);
+
+ m_columnCount = m_numericMonths.size();
+
+ updateYearsList(2010, 2022);
+
+ // Create proxy and series
+ //! [0]
+ m_proxy = new VariantBarDataProxy;
+ m_series = new QBar3DSeries(m_proxy);
+ //! [0]
+
+ m_series->setItemLabelFormat(u"%.1f mm"_s);
+
+ // Create the axes
+ m_rowAxis = new QCategory3DAxis(this);
+ m_colAxis = new QCategory3DAxis(this);
+ m_valueAxis = new QValue3DAxis(this);
+ m_rowAxis->setAutoAdjustRange(true);
+ m_colAxis->setAutoAdjustRange(true);
+ m_valueAxis->setAutoAdjustRange(true);
+
+ // Set axis labels and titles
+ QStringList months{"January", "February", "March", "April",
+ "May", "June", "July", "August", "September", "October",
+ "November","December"};
+ m_rowAxis->setTitle("Year");
+ m_colAxis->setTitle("Month");
+ m_valueAxis->setTitle("rainfall (mm)");
+ m_valueAxis->setSegmentCount(5);
+ m_rowAxis->setLabels(m_years);
+ m_colAxis->setLabels(months);
+ m_rowAxis->setTitleVisible(true);
+ m_colAxis->setTitleVisible(true);
+ m_valueAxis->setTitleVisible(true);
+
+ addDataSet();
+}
+
+RainfallData::~RainfallData()
+{
+ delete m_mapping;
+ delete m_dataSet;
+ delete m_proxy;
+}
+
+void RainfallData::updateYearsList(int start, int end)
+{
+ m_years.clear();
+
+ for (int i = start; i <= end; ++i)
+ m_years << QString::number(i);
+
+ m_rowCount = m_years.size();
+}
+
+//! [1]
+void RainfallData::addDataSet()
+{
+ // Create a new variant data set and data item list
+ m_dataSet = new VariantDataSet;
+ auto *itemList = new VariantDataItemList;
+
+ // Read data from a data file into the data item list
+ QFile dataFile(":/data/raindata.txt");
+ if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ QTextStream stream(&dataFile);
+ while (!stream.atEnd()) {
+ QString line = stream.readLine();
+ if (line.startsWith('#')) // Ignore comments
+ continue;
+ const auto strList = QStringView{line}.split(',', Qt::SkipEmptyParts);
+ // Each line has three data items: Year, month, and rainfall value
+ if (strList.size() < 3) {
+ qWarning() << "Invalid row read from data:" << line;
+ continue;
+ }
+ // Store year and month as strings, and rainfall value as double
+ // into a variant data item and add the item to the item list.
+ auto *newItem = new VariantDataItem;
+ for (int i = 0; i < 2; ++i)
+ newItem->append(strList.at(i).trimmed().toString());
+ newItem->append(strList.at(2).trimmed().toDouble());
+ itemList->append(newItem);
+ }
+ } else {
+ qWarning() << "Unable to open data file:" << dataFile.fileName();
+ }
+ //! [1]
+
+ //! [2]
+ // Add items to the data set and set it to the proxy
+ m_dataSet->addItems(itemList);
+ m_proxy->setDataSet(m_dataSet);
+
+ // Create new mapping for the data and set it to the proxy
+ m_mapping = new VariantBarDataMapping(0, 1, 2, m_years, m_numericMonths);
+ m_proxy->setMapping(m_mapping);
+ //! [2]
+}
diff --git a/examples/datavisualization/graphgallery/rainfalldata.h b/examples/datavisualization/graphgallery/rainfalldata.h
new file mode 100644
index 00000000..c71f072b
--- /dev/null
+++ b/examples/datavisualization/graphgallery/rainfalldata.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef RAINFALLDATA_H
+#define RAINFALLDATA_H
+
+#include "variantbardataproxy.h"
+#include <QtDataVisualization/qcategory3daxis.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+
+class RainfallData : public QObject
+{
+ Q_OBJECT
+public:
+ explicit RainfallData();
+ ~RainfallData();
+
+ void addDataSet();
+
+ //! [0]
+ QBar3DSeries *customSeries() { return m_series; }
+ //! [0]
+
+ QValue3DAxis *valueAxis() { return m_valueAxis; }
+ QCategory3DAxis *rowAxis() { return m_rowAxis; }
+ QCategory3DAxis *colAxis() { return m_colAxis; }
+
+private:
+ void updateYearsList(int start, int end);
+ int m_columnCount;
+ int m_rowCount;
+ QStringList m_years;
+ QStringList m_numericMonths;
+ VariantBarDataProxy *m_proxy;
+ VariantBarDataMapping *m_mapping;
+ VariantDataSet *m_dataSet;
+ QBar3DSeries *m_series;
+ QValue3DAxis *m_valueAxis;
+ QCategory3DAxis *m_rowAxis;
+ QCategory3DAxis *m_colAxis;
+};
+
+#endif
diff --git a/examples/datavisualization/scatter/scatterdatamodifier.cpp b/examples/datavisualization/graphgallery/scatterdatamodifier.cpp
index f2428d32..1f3ec7ed 100644
--- a/examples/datavisualization/scatter/scatterdatamodifier.cpp
+++ b/examples/datavisualization/graphgallery/scatterdatamodifier.cpp
@@ -1,5 +1,5 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "scatterdatamodifier.h"
#include <QtDataVisualization/qscatterdataproxy.h>
@@ -10,96 +10,98 @@
#include <QtDataVisualization/q3dtheme.h>
#include <QtCore/qmath.h>
#include <QtCore/qrandom.h>
-#include <QtWidgets/QComboBox>
+#include <QtWidgets/qcombobox.h>
+
+using namespace Qt::StringLiterals;
//#define RANDOM_SCATTER // Uncomment this to switch to random scatter
-const int numberOfItems = 3600;
-const float curveDivider = 3.0f;
+const int numberOfItems = 10000;
+const float curveDivider = 7.5f;
const int lowerNumberOfItems = 900;
const float lowerCurveDivider = 0.75f;
-ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
- : m_graph(scatter),
- m_fontSize(40.0f),
- m_style(QAbstract3DSeries::MeshSphere),
- m_smooth(true),
+ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter, QObject *parent) :
+ QObject(parent),
+ m_graph(scatter),
m_itemCount(lowerNumberOfItems),
- m_curveDivider(lowerCurveDivider)
+ m_curveDivider(lowerCurveDivider),
+ //! [7]
+ m_inputHandler(new AxesInputHandler(scatter))
+ //! [7]
{
//! [0]
- m_graph->activeTheme()->setType(Q3DTheme::ThemeEbony);
- QFont font = m_graph->activeTheme()->font();
- font.setPointSize(m_fontSize);
- m_graph->activeTheme()->setFont(font);
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow);
+ m_graph->activeTheme()->setType(Q3DTheme::ThemeStoneMoss);
+ m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftHigh);
m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
+ m_graph->scene()->activeCamera()->setZoomLevel(80.f);
//! [0]
- //! [2]
- QScatterDataProxy *proxy = new QScatterDataProxy;
- QScatter3DSeries *series = new QScatter3DSeries(proxy);
- series->setItemLabelFormat(QStringLiteral("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"));
+ //! [1]
+ auto *proxy = new QScatterDataProxy;
+ auto *series = new QScatter3DSeries(proxy);
+ series->setItemLabelFormat(u"@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"_s);
series->setMeshSmooth(m_smooth);
m_graph->addSeries(series);
- //! [2]
+ //! [1]
- //! [3]
- addData();
- //! [3]
-}
+ //! [8]
+ // Give ownership of the handler to the graph and make it the active handler
+ m_graph->setActiveInputHandler(m_inputHandler);
+ //! [8]
-ScatterDataModifier::~ScatterDataModifier()
-{
- delete m_graph;
+ //! [9]
+ // Give our axes to the input handler
+ m_inputHandler->setAxes(m_graph->axisX(), m_graph->axisZ(), m_graph->axisY());
+ //! [9]
+
+ //! [2]
+ addData();
+ //! [2]
}
void ScatterDataModifier::addData()
{
// Configure the axes according to the data
- //! [4]
+ //! [3]
m_graph->axisX()->setTitle("X");
m_graph->axisY()->setTitle("Y");
m_graph->axisZ()->setTitle("Z");
- //! [4]
+ //! [3]
- //! [5]
- QScatterDataArray *dataArray = new QScatterDataArray;
- dataArray->resize(m_itemCount);
- QScatterDataItem *ptrToDataArray = &dataArray->first();
- //! [5]
+ //! [4]
+ auto *dataArray = new QScatterDataArray;
+ dataArray->reserve(m_itemCount);
+ //! [4]
#ifdef RANDOM_SCATTER
- for (int i = 0; i < m_itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
+ for (int i = 0; i < m_itemCount; ++i)
+ dataArray->append(QScatterDataItem(randVector()));
#else
- //! [6]
- float limit = qSqrt(m_itemCount) / 2.0f;
- for (int i = -limit; i < limit; i++) {
- for (int j = -limit; j < limit; j++) {
- ptrToDataArray->setPosition(QVector3D(float(i) + 0.5f,
- qCos(qDegreesToRadians(float(i * j) / m_curveDivider)),
- float(j) + 0.5f));
- ptrToDataArray++;
+ //! [5]
+ const float limit = qSqrt(m_itemCount) / 2.0f;
+ for (int i = -limit; i < limit; ++i) {
+ for (int j = -limit; j < limit; ++j) {
+ const float x = float(i) + 0.5f;
+ const float y = qCos(qDegreesToRadians(float(i * j) / m_curveDivider));
+ const float z = float(j) + 0.5f;
+ dataArray->append(QScatterDataItem({x, y, z}));
}
}
- //! [6]
+ //! [5]
#endif
- //! [7]
+ //! [6]
m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray);
- //! [7]
+ //! [6]
}
-//! [8]
void ScatterDataModifier::changeStyle(int style)
{
QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
if (comboBox) {
- m_style = QAbstract3DSeries::Mesh(comboBox->itemData(style).toInt());
- if (m_graph->seriesList().size())
+ m_style = comboBox->itemData(style).value<QAbstract3DSeries::Mesh>();
+ if (!m_graph->seriesList().isEmpty())
m_graph->seriesList().at(0)->setMesh(m_style);
}
}
@@ -117,7 +119,6 @@ void ScatterDataModifier::changeTheme(int theme)
currentTheme->setType(Q3DTheme::Theme(theme));
emit backgroundEnabledChanged(currentTheme->isBackgroundEnabled());
emit gridEnabledChanged(currentTheme->isGridEnabled());
- emit fontChanged(currentTheme->font());
}
void ScatterDataModifier::changePresetCamera()
@@ -130,22 +131,10 @@ void ScatterDataModifier::changePresetCamera()
preset = Q3DCamera::CameraPresetFrontLow;
}
-void ScatterDataModifier::changeLabelStyle()
-{
- m_graph->activeTheme()->setLabelBackgroundEnabled(!m_graph->activeTheme()->isLabelBackgroundEnabled());
-}
-
-void ScatterDataModifier::changeFont(const QFont &font)
-{
- QFont newFont = font;
- newFont.setPointSizeF(m_fontSize);
- m_graph->activeTheme()->setFont(newFont);
-}
-
void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq)
{
int quality = int(sq);
- emit shadowQualityChanged(quality); // connected to a checkbox in main.cpp
+ emit shadowQualityChanged(quality); // connected to a checkbox in scattergraph.cpp
}
void ScatterDataModifier::changeShadowQuality(int quality)
@@ -156,14 +145,13 @@ void ScatterDataModifier::changeShadowQuality(int quality)
void ScatterDataModifier::setBackgroundEnabled(int enabled)
{
- m_graph->activeTheme()->setBackgroundEnabled((bool)enabled);
+ m_graph->activeTheme()->setBackgroundEnabled(enabled == Qt::Checked);
}
void ScatterDataModifier::setGridEnabled(int enabled)
{
- m_graph->activeTheme()->setGridEnabled((bool)enabled);
+ m_graph->activeTheme()->setGridEnabled(enabled == Qt::Checked);
}
-//! [8]
void ScatterDataModifier::toggleItemCount()
{
@@ -178,13 +166,26 @@ void ScatterDataModifier::toggleItemCount()
addData();
}
+void ScatterDataModifier::toggleRanges()
+{
+ if (!m_autoAdjust) {
+ m_graph->axisX()->setAutoAdjustRange(true);
+ m_graph->axisZ()->setAutoAdjustRange(true);
+ m_inputHandler->setDragSpeedModifier(1.5f);
+ m_autoAdjust = true;
+ } else {
+ m_graph->axisX()->setRange(-10.0f, 10.0f);
+ m_graph->axisZ()->setRange(-10.0f, 10.0f);
+ m_inputHandler->setDragSpeedModifier(15.0f);
+ m_autoAdjust = false;
+ }
+}
+
QVector3D ScatterDataModifier::randVector()
{
- return QVector3D(
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 100.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 100.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f);
+ auto *generator = QRandomGenerator::global();
+ const auto x = float(generator->bounded(100)) / 2.0f - float(generator->bounded(100)) / 2.0f;
+ const auto y = float(generator->bounded(100)) / 100.0f - float(generator->bounded(100)) / 100.0f;
+ const auto z = float(generator->bounded(100)) / 2.0f - float(generator->bounded(100)) / 2.0f;
+ return {x, y, z};
}
diff --git a/examples/datavisualization/scatter/scatterdatamodifier.h b/examples/datavisualization/graphgallery/scatterdatamodifier.h
index 2726c70f..53f557e6 100644
--- a/examples/datavisualization/scatter/scatterdatamodifier.h
+++ b/examples/datavisualization/graphgallery/scatterdatamodifier.h
@@ -1,33 +1,29 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SCATTERDATAMODIFIER_H
#define SCATTERDATAMODIFIER_H
+#include "axesinputhandler.h"
+
#include <QtDataVisualization/q3dscatter.h>
#include <QtDataVisualization/qabstract3dseries.h>
-#include <QtGui/QFont>
class ScatterDataModifier : public QObject
{
Q_OBJECT
public:
- explicit ScatterDataModifier(Q3DScatter *scatter);
- ~ScatterDataModifier();
+ explicit ScatterDataModifier(Q3DScatter *scatter, QObject *parent);
void addData();
- void changeStyle();
- void changePresetCamera();
- void changeLabelStyle();
- void changeFont(const QFont &font);
- void changeFontSize(int fontsize);
+
+public Q_SLOTS:
void setBackgroundEnabled(int enabled);
void setGridEnabled(int enabled);
void setSmoothDots(int smooth);
+ void changePresetCamera();
void toggleItemCount();
- void start();
-
-public Q_SLOTS:
+ void toggleRanges();
void changeStyle(int style);
void changeTheme(int theme);
void changeShadowQuality(int quality);
@@ -37,16 +33,17 @@ Q_SIGNALS:
void backgroundEnabledChanged(bool enabled);
void gridEnabledChanged(bool enabled);
void shadowQualityChanged(int quality);
- void fontChanged(const QFont &font);
private:
QVector3D randVector();
- Q3DScatter *m_graph;
- int m_fontSize;
- QAbstract3DSeries::Mesh m_style;
- bool m_smooth;
+ Q3DScatter *m_graph = nullptr;
+ QAbstract3DSeries::Mesh m_style = QAbstract3DSeries::MeshSphere;
+ bool m_smooth = true;
int m_itemCount;
float m_curveDivider;
+
+ AxesInputHandler *m_inputHandler;
+ bool m_autoAdjust = true;
};
#endif
diff --git a/examples/datavisualization/graphgallery/scattergraph.cpp b/examples/datavisualization/graphgallery/scattergraph.cpp
new file mode 100644
index 00000000..a426c10a
--- /dev/null
+++ b/examples/datavisualization/graphgallery/scattergraph.cpp
@@ -0,0 +1,142 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "scattergraph.h"
+#include "scatterdatamodifier.h"
+
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qcombobox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qcommandlinkbutton.h>
+
+using namespace Qt::StringLiterals;
+
+ScatterGraph::ScatterGraph()
+{
+ m_scatterGraph = new Q3DScatter();
+}
+
+ScatterGraph::~ScatterGraph() = default;
+
+bool ScatterGraph::initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize)
+{
+ if (!m_scatterGraph->hasContext())
+ return false;
+
+ m_scatterWidget = new QWidget;
+ auto *hLayout = new QHBoxLayout(m_scatterWidget);
+ m_container = QWidget::createWindowContainer(m_scatterGraph, m_scatterWidget);
+ m_container->setMinimumSize(minimumGraphSize);
+ m_container->setMaximumSize(maximumGraphSize);
+ m_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_container->setFocusPolicy(Qt::StrongFocus);
+ hLayout->addWidget(m_container, 1);
+
+ auto *vLayout = new QVBoxLayout();
+ hLayout->addLayout(vLayout);
+
+ auto *cameraButton = new QCommandLinkButton(m_scatterWidget);
+ cameraButton->setText(u"Change camera preset"_s);
+ cameraButton->setDescription(u"Switch between a number of preset camera positions"_s);
+ cameraButton->setIconSize(QSize(0, 0));
+
+ auto *itemCountButton = new QCommandLinkButton(m_scatterWidget);
+ itemCountButton->setText(u"Toggle item count"_s);
+ itemCountButton->setDescription(u"Switch between 900 and 10000 data points"_s);
+ itemCountButton->setIconSize(QSize(0, 0));
+
+ auto *rangeButton = new QCommandLinkButton(m_scatterWidget);
+ rangeButton->setText(u"Toggle axis ranges"_s);
+ rangeButton->setDescription(u"Switch between automatic axis ranges and preset ranges"_s);
+ rangeButton->setIconSize(QSize(0, 0));
+
+ auto *backgroundCheckBox = new QCheckBox(m_scatterWidget);
+ backgroundCheckBox->setText(u"Show background"_s);
+ backgroundCheckBox->setChecked(true);
+
+ auto *gridCheckBox = new QCheckBox(m_scatterWidget);
+ gridCheckBox->setText(u"Show grid"_s);
+ gridCheckBox->setChecked(true);
+
+ auto *smoothCheckBox = new QCheckBox(m_scatterWidget);
+ smoothCheckBox->setText(u"Smooth dots"_s);
+ smoothCheckBox->setChecked(true);
+
+ auto *itemStyleList = new QComboBox(m_scatterWidget);
+ itemStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
+ itemStyleList->addItem(u"Cube"_s, QAbstract3DSeries::MeshCube);
+ itemStyleList->addItem(u"Minimal"_s, QAbstract3DSeries::MeshMinimal);
+ itemStyleList->addItem(u"Point"_s, QAbstract3DSeries::MeshPoint);
+ itemStyleList->setCurrentIndex(0);
+
+ auto *themeList = new QComboBox(m_scatterWidget);
+ themeList->addItem(u"Qt"_s);
+ themeList->addItem(u"Primary Colors"_s);
+ themeList->addItem(u"Digia"_s);
+ themeList->addItem(u"Stone Moss"_s);
+ themeList->addItem(u"Army Blue"_s);
+ themeList->addItem(u"Retro"_s);
+ themeList->addItem(u"Ebony"_s);
+ themeList->addItem(u"Isabelle"_s);
+ themeList->setCurrentIndex(3);
+
+ auto *shadowQuality = new QComboBox(m_scatterWidget);
+ shadowQuality->addItem(u"None"_s);
+ shadowQuality->addItem(u"Low"_s);
+ shadowQuality->addItem(u"Medium"_s);
+ shadowQuality->addItem(u"High"_s);
+ shadowQuality->addItem(u"Low Soft"_s);
+ shadowQuality->addItem(u"Medium Soft"_s);
+ shadowQuality->addItem(u"High Soft"_s);
+ shadowQuality->setCurrentIndex(6);
+
+ vLayout->addWidget(cameraButton);
+ vLayout->addWidget(itemCountButton);
+ vLayout->addWidget(rangeButton);
+ vLayout->addWidget(backgroundCheckBox);
+ vLayout->addWidget(gridCheckBox);
+ vLayout->addWidget(smoothCheckBox);
+ vLayout->addWidget(new QLabel(u"Change dot style"_s));
+ vLayout->addWidget(itemStyleList);
+ vLayout->addWidget(new QLabel(u"Change theme"_s));
+ vLayout->addWidget(themeList);
+ vLayout->addWidget(new QLabel(u"Adjust shadow quality"_s));
+ vLayout->addWidget(shadowQuality, 1, Qt::AlignTop);
+
+ auto *modifier = new ScatterDataModifier(m_scatterGraph, this);
+
+ QObject::connect(cameraButton, &QCommandLinkButton::clicked, modifier,
+ &ScatterDataModifier::changePresetCamera);
+ QObject::connect(itemCountButton, &QCommandLinkButton::clicked, modifier,
+ &ScatterDataModifier::toggleItemCount);
+ QObject::connect(rangeButton, &QCommandLinkButton::clicked, modifier,
+ &ScatterDataModifier::toggleRanges);
+
+ QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setBackgroundEnabled);
+ QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setGridEnabled);
+ QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setSmoothDots);
+
+ QObject::connect(modifier, &ScatterDataModifier::backgroundEnabledChanged,
+ backgroundCheckBox, &QCheckBox::setChecked);
+ QObject::connect(modifier, &ScatterDataModifier::gridEnabledChanged,
+ gridCheckBox, &QCheckBox::setChecked);
+ QObject::connect(itemStyleList, &QComboBox::currentIndexChanged, modifier,
+ &ScatterDataModifier::changeStyle);
+
+ QObject::connect(themeList, &QComboBox::currentIndexChanged, modifier,
+ &ScatterDataModifier::changeTheme);
+
+ QObject::connect(shadowQuality, &QComboBox::currentIndexChanged, modifier,
+ &ScatterDataModifier::changeShadowQuality);
+
+ QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
+ &QComboBox::setCurrentIndex);
+ QObject::connect(m_scatterGraph, &Q3DScatter::shadowQualityChanged, modifier,
+ &ScatterDataModifier::shadowQualityUpdatedByVisual);
+
+ return true;
+}
diff --git a/examples/datavisualization/graphgallery/scattergraph.h b/examples/datavisualization/graphgallery/scattergraph.h
new file mode 100644
index 00000000..eb8c7c52
--- /dev/null
+++ b/examples/datavisualization/graphgallery/scattergraph.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SCATTERGRAPH_H
+#define SCATTERGRAPH_H
+
+#include <QtCore/qobject.h>
+#include <QtDataVisualization/q3dscatter.h>
+
+class ScatterGraph : public QObject
+{
+ Q_OBJECT
+public:
+ ScatterGraph();
+ ~ScatterGraph();
+
+ bool initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize);
+ QWidget *scatterWidget() { return m_scatterWidget; }
+
+private:
+ Q3DScatter *m_scatterGraph = nullptr;
+ QWidget *m_container = nullptr;
+ QWidget *m_scatterWidget = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/surfacegraph.cpp b/examples/datavisualization/graphgallery/surfacegraph.cpp
new file mode 100644
index 00000000..88cbc72f
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraph.cpp
@@ -0,0 +1,346 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "surfacegraph.h"
+#include "surfacegraphmodifier.h"
+
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qcombobox.h>
+#include <QtWidgets/qradiobutton.h>
+#include <QtWidgets/qgroupbox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qcommandlinkbutton.h>
+#include <QtGui/qpainter.h>
+
+using namespace Qt::StringLiterals;
+
+static QPixmap gradientBtoYPB_Pixmap()
+{
+ QLinearGradient grBtoY(0, 0, 1, 100);
+ grBtoY.setColorAt(1.f, Qt::black);
+ grBtoY.setColorAt(0.67f, Qt::blue);
+ grBtoY.setColorAt(0.33f, Qt::red);
+ grBtoY.setColorAt(0.f, Qt::yellow);
+ QPixmap pm(24, 100);
+ QPainter pmp(&pm);
+ pmp.setBrush(QBrush(grBtoY));
+ pmp.setPen(Qt::NoPen);
+ pmp.drawRect(0, 0, 24, 100);
+ return pm;
+}
+
+static QPixmap gradientGtoRPB_Pixmap()
+{
+ QLinearGradient grGtoR(0, 0, 1, 100);
+ grGtoR.setColorAt(1.f, Qt::darkGreen);
+ grGtoR.setColorAt(0.5f, Qt::yellow);
+ grGtoR.setColorAt(0.2f, Qt::red);
+ grGtoR.setColorAt(0.f, Qt::darkRed);
+ QPixmap pm(24, 100);
+ QPainter pmp(&pm);
+ pmp.setBrush(QBrush(grGtoR));
+ pmp.drawRect(0, 0, 24, 100);
+ return pm;
+}
+
+static QPixmap highlightPixmap()
+{
+ constexpr int height = 400;
+ constexpr int width = 110;
+ constexpr int border = 10;
+ QLinearGradient gr(0, 0, 1, height - 2 * border);
+ gr.setColorAt(1.f, Qt::black);
+ gr.setColorAt(0.8f, Qt::darkGreen);
+ gr.setColorAt(0.6f, Qt::green);
+ gr.setColorAt(0.4f, Qt::yellow);
+ gr.setColorAt(0.2f, Qt::red);
+ gr.setColorAt(0.f, Qt::darkRed);
+
+ QPixmap pmHighlight(width, height);
+ pmHighlight.fill(Qt::transparent);
+ QPainter pmpHighlight(&pmHighlight);
+ pmpHighlight.setBrush(QBrush(gr));
+ pmpHighlight.setPen(Qt::NoPen);
+ pmpHighlight.drawRect(border, border, 35, height - 2 * border);
+ pmpHighlight.setPen(Qt::black);
+ int step = (height - 2 * border) / 5;
+ for (int i = 0; i < 6; ++i) {
+ int yPos = i * step + border;
+ pmpHighlight.drawLine(border, yPos, 55, yPos);
+ const int height = 550 - (i * 110);
+ pmpHighlight.drawText(60, yPos + 2, QString::number(height) + u" m"_s);
+ }
+ return pmHighlight;
+}
+
+SurfaceGraph::SurfaceGraph()
+{
+ m_surfaceGraph = new Q3DSurface();
+}
+
+SurfaceGraph::~SurfaceGraph() = default;
+
+bool SurfaceGraph::initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize)
+{
+ if (!m_surfaceGraph->hasContext())
+ return false;
+
+ m_surfaceWidget = new QWidget;
+ auto *hLayout = new QHBoxLayout(m_surfaceWidget);
+ m_container = QWidget::createWindowContainer(m_surfaceGraph, m_surfaceWidget);
+ m_container->setMinimumSize(minimumGraphSize);
+ m_container->setMaximumSize(maximumGraphSize);
+ m_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_container->setFocusPolicy(Qt::StrongFocus);
+ hLayout->addWidget(m_container, 1);
+
+ auto *vLayout = new QVBoxLayout();
+ hLayout->addLayout(vLayout);
+ vLayout->setAlignment(Qt::AlignTop);
+
+ // Create control widgets
+ auto *modelGroupBox = new QGroupBox(u"Model"_s);
+
+ auto *sqrtSinModelRB = new QRadioButton(m_surfaceWidget);
+ sqrtSinModelRB->setText(u"Sqrt && Sin"_s);
+ sqrtSinModelRB->setChecked(false);
+
+ auto *heightMapModelRB = new QRadioButton(m_surfaceWidget);
+ heightMapModelRB->setText(u"Multiseries\nHeight Map"_s);
+ heightMapModelRB->setChecked(false);
+
+ auto *texturedModelRB = new QRadioButton(m_surfaceWidget);
+ texturedModelRB->setText(u"Textured\nTopography"_s);
+ texturedModelRB->setChecked(false);
+
+ auto *modelVBox = new QVBoxLayout;
+ modelVBox->addWidget(sqrtSinModelRB);
+ modelVBox->addWidget(heightMapModelRB);
+ modelVBox->addWidget(texturedModelRB);
+ modelGroupBox->setLayout(modelVBox);
+
+ auto *selectionGroupBox = new QGroupBox(u"Graph Selection Mode"_s);
+
+ auto *modeNoneRB = new QRadioButton(m_surfaceWidget);
+ modeNoneRB->setText(u"No selection"_s);
+ modeNoneRB->setChecked(false);
+
+ auto *modeItemRB = new QRadioButton(m_surfaceWidget);
+ modeItemRB->setText(u"Item"_s);
+ modeItemRB->setChecked(false);
+
+ auto *modeSliceRowRB = new QRadioButton(m_surfaceWidget);
+ modeSliceRowRB->setText(u"Row Slice"_s);
+ modeSliceRowRB->setChecked(false);
+
+ auto *modeSliceColumnRB = new QRadioButton(m_surfaceWidget);
+ modeSliceColumnRB->setText(u"Column Slice"_s);
+ modeSliceColumnRB->setChecked(false);
+
+ auto *selectionVBox = new QVBoxLayout;
+ selectionVBox->addWidget(modeNoneRB);
+ selectionVBox->addWidget(modeItemRB);
+ selectionVBox->addWidget(modeSliceRowRB);
+ selectionVBox->addWidget(modeSliceColumnRB);
+ selectionGroupBox->setLayout(selectionVBox);
+
+ auto *axisGroupBox = new QGroupBox(u"Axis ranges"_s);
+
+ auto *axisMinSliderX = new QSlider(Qt::Horizontal);
+ axisMinSliderX->setMinimum(0);
+ axisMinSliderX->setTickInterval(1);
+ axisMinSliderX->setEnabled(true);
+ auto *axisMaxSliderX = new QSlider(Qt::Horizontal);
+ axisMaxSliderX->setMinimum(1);
+ axisMaxSliderX->setTickInterval(1);
+ axisMaxSliderX->setEnabled(true);
+ auto *axisMinSliderZ = new QSlider(Qt::Horizontal);
+ axisMinSliderZ->setMinimum(0);
+ axisMinSliderZ->setTickInterval(1);
+ axisMinSliderZ->setEnabled(true);
+ auto *axisMaxSliderZ = new QSlider(Qt::Horizontal);
+ axisMaxSliderZ->setMinimum(1);
+ axisMaxSliderZ->setTickInterval(1);
+ axisMaxSliderZ->setEnabled(true);
+
+ auto *axisVBox = new QVBoxLayout;
+ axisVBox->addWidget(new QLabel(u"Column range"_s));
+ axisVBox->addWidget(axisMinSliderX);
+ axisVBox->addWidget(axisMaxSliderX);
+ axisVBox->addWidget(new QLabel(u"Row range"_s));
+ axisVBox->addWidget(axisMinSliderZ);
+ axisVBox->addWidget(axisMaxSliderZ);
+ axisGroupBox->setLayout(axisVBox);
+
+ // Mode-dependent controls
+ // sqrt-sin
+ auto *colorGroupBox = new QGroupBox(u"Custom gradient"_s);
+
+ QPixmap pixmap = gradientBtoYPB_Pixmap();
+ auto *gradientBtoYPB = new QPushButton(m_surfaceWidget);
+ gradientBtoYPB->setIcon(QIcon(pixmap));
+ gradientBtoYPB->setIconSize(pixmap.size());
+
+ pixmap = gradientGtoRPB_Pixmap();
+ auto *gradientGtoRPB = new QPushButton(m_surfaceWidget);
+ gradientGtoRPB->setIcon(QIcon(pixmap));
+ gradientGtoRPB->setIconSize(pixmap.size());
+ auto *colorHBox = new QHBoxLayout;
+ colorHBox->addWidget(gradientBtoYPB);
+ colorHBox->addWidget(gradientGtoRPB);
+ colorGroupBox->setLayout(colorHBox);
+
+ // Multiseries heightmap
+ auto *showGroupBox = new QGroupBox(u"_show Object"_s);
+ showGroupBox->setVisible(false);
+
+ auto *checkboxShowOilRigOne = new QCheckBox(u"Oil Rig 1"_s);
+ checkboxShowOilRigOne->setChecked(true);
+
+ auto *checkboxShowOilRigTwo = new QCheckBox(u"Oil Rig 2"_s);
+ checkboxShowOilRigTwo->setChecked(true);
+
+ auto *checkboxShowRefinery = new QCheckBox(u"Refinery"_s);
+
+ auto *showVBox = new QVBoxLayout;
+ showVBox->addWidget(checkboxShowOilRigOne);
+ showVBox->addWidget(checkboxShowOilRigTwo);
+ showVBox->addWidget(checkboxShowRefinery);
+ showGroupBox->setLayout(showVBox);
+
+ auto *visualsGroupBox = new QGroupBox(u"Visuals"_s);
+ visualsGroupBox->setVisible(false);
+
+ auto *checkboxVisualsSeeThrough = new QCheckBox(u"See-Through"_s);
+
+ auto *checkboxHighlightOil = new QCheckBox(u"Highlight Oil"_s);
+
+ auto *checkboxShowShadows = new QCheckBox(u"Shadows"_s);
+ checkboxShowShadows->setChecked(true);
+
+ auto *visualVBox = new QVBoxLayout;
+ visualVBox->addWidget(checkboxVisualsSeeThrough);
+ visualVBox->addWidget(checkboxHighlightOil);
+ visualVBox->addWidget(checkboxShowShadows);
+ visualsGroupBox->setLayout(visualVBox);
+
+ auto *labelSelection = new QLabel(u"Selection:"_s);
+ labelSelection->setVisible(false);
+
+ auto *labelSelectedItem = new QLabel(u"Nothing"_s);
+ labelSelectedItem->setVisible(false);
+
+ // Textured topography heightmap
+ auto *enableTexture = new QCheckBox(u"Surface texture"_s);
+ enableTexture->setVisible(false);
+
+ auto *label = new QLabel(m_surfaceWidget);
+ label->setPixmap(highlightPixmap());
+
+ auto *heightMapGroupBox = new QGroupBox(u"Highlight color map"_s);
+ auto *colorMapVBox = new QVBoxLayout;
+ colorMapVBox->addWidget(label);
+ heightMapGroupBox->setLayout(colorMapVBox);
+ heightMapGroupBox->setVisible(false);
+
+ // Populate vertical layout
+ // Common
+ vLayout->addWidget(modelGroupBox);
+ vLayout->addWidget(selectionGroupBox);
+ vLayout->addWidget(axisGroupBox);
+
+ // Sqrt Sin
+ vLayout->addWidget(colorGroupBox);
+
+ // Multiseries heightmap
+ vLayout->addWidget(showGroupBox);
+ vLayout->addWidget(visualsGroupBox);
+ vLayout->addWidget(labelSelection);
+ vLayout->addWidget(labelSelectedItem);
+
+ // Textured topography
+ vLayout->addWidget(heightMapGroupBox);
+ vLayout->addWidget(enableTexture);
+
+ // Create the controller
+ auto *modifier = new SurfaceGraphModifier(m_surfaceGraph, labelSelectedItem, this);
+
+ // Connect widget controls to controller
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::enableHeightMapModel);
+ QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::enableSqrtSinModel);
+ QObject::connect(texturedModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::enableTopographyModel);
+
+ QObject::connect(modeNoneRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeNone);
+ QObject::connect(modeItemRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeItem);
+ QObject::connect(modeSliceRowRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeSliceRow);
+ QObject::connect(modeSliceColumnRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeSliceColumn);
+
+ QObject::connect(axisMinSliderX, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustXMin);
+ QObject::connect(axisMaxSliderX, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustXMax);
+ QObject::connect(axisMinSliderZ, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustZMin);
+ QObject::connect(axisMaxSliderZ, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustZMax);
+
+ // Mode dependent connections
+ QObject::connect(gradientBtoYPB, &QPushButton::pressed,
+ modifier, &SurfaceGraphModifier::setBlackToYellowGradient);
+ QObject::connect(gradientGtoRPB, &QPushButton::pressed,
+ modifier, &SurfaceGraphModifier::setGreenToRedGradient);
+
+ QObject::connect(checkboxShowOilRigOne, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleItemOne);
+ QObject::connect(checkboxShowOilRigTwo, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleItemTwo);
+ QObject::connect(checkboxShowRefinery, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleItemThree);
+
+ QObject::connect(checkboxVisualsSeeThrough, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleSeeThrough);
+ QObject::connect(checkboxHighlightOil, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleOilHighlight);
+ QObject::connect(checkboxShowShadows, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleShadows);
+
+ QObject::connect(enableTexture, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleSurfaceTexture);
+
+ // Connections to disable features depending on mode
+ QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
+ colorGroupBox, &QGroupBox::setVisible);
+
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ showGroupBox, &QGroupBox::setVisible);
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ visualsGroupBox, &QGroupBox::setVisible);
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ labelSelection, &QLabel::setVisible);
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ labelSelectedItem, &QLabel::setVisible);
+
+ QObject::connect(texturedModelRB, &QRadioButton::toggled,
+ enableTexture, &QLabel::setVisible);
+ QObject::connect(texturedModelRB, &QRadioButton::toggled,
+ heightMapGroupBox, &QGroupBox::setVisible);
+
+ modifier->setAxisMinSliderX(axisMinSliderX);
+ modifier->setAxisMaxSliderX(axisMaxSliderX);
+ modifier->setAxisMinSliderZ(axisMinSliderZ);
+ modifier->setAxisMaxSliderZ(axisMaxSliderZ);
+
+ sqrtSinModelRB->setChecked(true);
+ modeItemRB->setChecked(true);
+ enableTexture->setChecked(true);
+
+ return true;
+}
diff --git a/examples/datavisualization/graphgallery/surfacegraph.h b/examples/datavisualization/graphgallery/surfacegraph.h
new file mode 100644
index 00000000..5ec29930
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraph.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SURFACEGRAPH_H
+#define SURFACEGRAPH_H
+
+#include <QtCore/qobject.h>
+#include <QtDataVisualization/q3dsurface.h>
+
+class SurfaceGraph : public QObject
+{
+ Q_OBJECT
+public:
+ SurfaceGraph();
+ ~SurfaceGraph();
+
+ bool initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize);
+ QWidget *surfaceWidget() { return m_surfaceWidget; }
+
+private:
+ Q3DSurface *m_surfaceGraph = nullptr;
+ QWidget *m_container = nullptr;
+ QWidget *m_surfaceWidget = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp b/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp
new file mode 100644
index 00000000..190a96b9
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp
@@ -0,0 +1,647 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "surfacegraphmodifier.h"
+#include "highlightseries.h"
+#include "topographicseries.h"
+#include "custominputhandler.h"
+
+#include <QtDataVisualization/qvalue3daxis.h>
+#include <QtDataVisualization/q3dtheme.h>
+#include <QtGui/qimage.h>
+#include <QtCore/qmath.h>
+
+using namespace Qt::StringLiterals;
+
+const int sampleCountX = 150;
+const int sampleCountZ = 150;
+const int heightMapGridStepX = 6;
+const int heightMapGridStepZ = 6;
+const float sampleMin = -8.f;
+const float sampleMax = 8.f;
+
+const float areaWidth = 8000.f;
+const float areaHeight = 8000.f;
+const float aspectRatio = 0.1389f;
+const float minRange = areaWidth * 0.49f;
+
+SurfaceGraphModifier::SurfaceGraphModifier(Q3DSurface *surface, QLabel *label, QObject *parent) :
+ QObject(parent),
+ m_graph(surface),
+ m_textField(label)
+{
+ m_graph->scene()->activeCamera()->setZoomLevel(85.f);
+ m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricRight);
+ m_graph->activeTheme()->setType(Q3DTheme::ThemeRetro);
+
+ m_graph->setAxisX(new QValue3DAxis);
+ m_graph->setAxisY(new QValue3DAxis);
+ m_graph->setAxisZ(new QValue3DAxis);
+
+ //
+ // Sqrt Sin
+ //
+ //! [0]
+ m_sqrtSinProxy = new QSurfaceDataProxy();
+ m_sqrtSinSeries = new QSurface3DSeries(m_sqrtSinProxy);
+ //! [0]
+ fillSqrtSinProxy();
+
+ //
+ // Multisurface heightmap
+ //
+ //! [2]
+ // Create the first surface layer
+ QImage heightMapImageOne(":/data/layer_1.png");
+ m_heightMapProxyOne = new QHeightMapSurfaceDataProxy(heightMapImageOne);
+ m_heightMapSeriesOne = new QSurface3DSeries(m_heightMapProxyOne);
+ m_heightMapSeriesOne->setItemLabelFormat(u"(@xLabel, @zLabel): @yLabel"_s);
+ m_heightMapProxyOne->setValueRanges(34.f, 40.f, 18.f, 24.f);
+ //! [2]
+
+ // Create the other 2 surface layers
+ QImage heightMapImageTwo(":/data/layer_2.png");
+ m_heightMapProxyTwo = new QHeightMapSurfaceDataProxy(heightMapImageTwo);
+ m_heightMapSeriesTwo = new QSurface3DSeries(m_heightMapProxyTwo);
+ m_heightMapSeriesTwo->setItemLabelFormat(u"(@xLabel, @zLabel): @yLabel"_s);
+ m_heightMapProxyTwo->setValueRanges(34.f, 40.f, 18.f, 24.f);
+
+ QImage heightMapImageThree(":/data/layer_3.png");
+ m_heightMapProxyThree = new QHeightMapSurfaceDataProxy(heightMapImageThree);
+ m_heightMapSeriesThree = new QSurface3DSeries(m_heightMapProxyThree);
+ m_heightMapSeriesThree->setItemLabelFormat(u"(@xLabel, @zLabel): @yLabel"_s);
+ m_heightMapProxyThree->setValueRanges(34.f, 40.f, 18.f, 24.f);
+
+ // The images are the same size, so it's enough to get the dimensions from one
+ m_heightMapWidth = heightMapImageOne.width();
+ m_heightMapHeight = heightMapImageOne.height();
+
+ // Set the gradients for multi-surface layers
+ QLinearGradient grOne;
+ grOne.setColorAt(0.f, Qt::black);
+ grOne.setColorAt(0.38f, Qt::darkYellow);
+ grOne.setColorAt(0.39f, Qt::darkGreen);
+ grOne.setColorAt(0.5f, Qt::darkGray);
+ grOne.setColorAt(1.f, Qt::gray);
+ m_heightMapSeriesOne->setBaseGradient(grOne);
+ m_heightMapSeriesOne->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+
+ QLinearGradient grTwo;
+ grTwo.setColorAt(0.39f, Qt::blue);
+ grTwo.setColorAt(0.4f, Qt::white);
+ m_heightMapSeriesTwo->setBaseGradient(grTwo);
+ m_heightMapSeriesTwo->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+
+ QLinearGradient grThree;
+ grThree.setColorAt(0.f, Qt::white);
+ grThree.setColorAt(0.05f, Qt::black);
+ m_heightMapSeriesThree->setBaseGradient(grThree);
+ m_heightMapSeriesThree->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+
+ // Custom items and label
+ connect(m_graph, &QAbstract3DGraph::selectedElementChanged,
+ this, &SurfaceGraphModifier::handleElementSelected);
+
+ m_selectionAnimation = new QPropertyAnimation(this);
+ m_selectionAnimation->setPropertyName("scaling");
+ m_selectionAnimation->setDuration(500);
+ m_selectionAnimation->setLoopCount(-1);
+
+ QFont titleFont = QFont("Century Gothic", 30);
+ titleFont.setBold(true);
+ m_titleLabel = new QCustom3DLabel("Oil Rigs on Imaginary Sea", titleFont,
+ QVector3D(0.f, 1.2f, 0.f),
+ QVector3D(1.f, 1.f, 0.f),
+ QQuaternion());
+ m_titleLabel->setPositionAbsolute(true);
+ m_titleLabel->setFacingCamera(true);
+ m_titleLabel->setBackgroundColor(QColor(0x66cdaa));
+ m_graph->addCustomItem(m_titleLabel);
+ m_titleLabel->setVisible(false);
+
+ // Make two of the custom object visible
+ toggleItemOne(true);
+ toggleItemTwo(true);
+
+ //
+ // Topographic map
+ //
+ m_topography = new TopographicSeries();
+ m_topography->setTopographyFile(":/data/topography.png", areaWidth, areaHeight);
+ m_topography->setItemLabelFormat(u"@yLabel m"_s);
+
+ m_highlight = new HighlightSeries();
+ m_highlight->setTopographicSeries(m_topography);
+ m_highlight->setMinHeight(minRange * aspectRatio);
+ m_highlight->handleGradientChange(areaWidth * aspectRatio);
+ //! [16]
+ QObject::connect(m_graph->axisY(), &QValue3DAxis::maxChanged,
+ m_highlight, &HighlightSeries::handleGradientChange);
+ //! [16]
+
+ m_customInputHandler = new CustomInputHandler(m_graph);
+ m_customInputHandler->setHighlightSeries(m_highlight);
+ m_customInputHandler->setAxes(m_graph->axisX(), m_graph->axisY(), m_graph->axisZ());
+ m_customInputHandler->setLimits(0.f, areaWidth, minRange);
+ m_customInputHandler->setAspectRatio(aspectRatio);
+}
+
+void SurfaceGraphModifier::fillSqrtSinProxy()
+{
+ float stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
+ float stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
+
+ //! [1]
+ auto *dataArray = new QSurfaceDataArray;
+ dataArray->reserve(sampleCountZ);
+ for (int i = 0 ; i < sampleCountZ ; ++i) {
+ auto *newRow = new QSurfaceDataRow;
+ newRow->reserve(sampleCountX);
+ // Keep values within range bounds, since just adding step can cause minor drift due
+ // to the rounding errors.
+ float z = qMin(sampleMax, (i * stepZ + sampleMin));
+ for (int j = 0; j < sampleCountX; ++j) {
+ float x = qMin(sampleMax, (j * stepX + sampleMin));
+ float R = qSqrt(z * z + x * x) + 0.01f;
+ float y = (qSin(R) / R + 0.24f) * 1.61f;
+ newRow->append(QSurfaceDataItem({x, y, z}));
+ }
+ dataArray->append(newRow);
+ }
+
+ m_sqrtSinProxy->resetArray(dataArray);
+ //! [1]
+}
+
+void SurfaceGraphModifier::enableSqrtSinModel(bool enable)
+{
+ if (enable) {
+ //! [3]
+ m_sqrtSinSeries->setDrawMode(QSurface3DSeries::DrawSurfaceAndWireframe);
+ m_sqrtSinSeries->setFlatShadingEnabled(true);
+
+ m_graph->axisX()->setLabelFormat("%.2f");
+ m_graph->axisZ()->setLabelFormat("%.2f");
+ m_graph->axisX()->setRange(sampleMin, sampleMax);
+ m_graph->axisY()->setRange(0.f, 2.f);
+ m_graph->axisZ()->setRange(sampleMin, sampleMax);
+ m_graph->axisX()->setLabelAutoRotation(30.f);
+ m_graph->axisY()->setLabelAutoRotation(90.f);
+ m_graph->axisZ()->setLabelAutoRotation(30.f);
+
+ m_graph->removeSeries(m_heightMapSeriesOne);
+ m_graph->removeSeries(m_heightMapSeriesTwo);
+ m_graph->removeSeries(m_heightMapSeriesThree);
+ m_graph->removeSeries(m_topography);
+ m_graph->removeSeries(m_highlight);
+
+ m_graph->addSeries(m_sqrtSinSeries);
+ //! [3]
+
+ m_titleLabel->setVisible(false);
+ m_graph->axisX()->setTitleVisible(false);
+ m_graph->axisY()->setTitleVisible(false);
+ m_graph->axisZ()->setTitleVisible(false);
+
+ m_graph->axisX()->setTitle({});
+ m_graph->axisY()->setTitle({});
+ m_graph->axisZ()->setTitle({});
+
+ m_graph->setActiveInputHandler(m_defaultInputHandler);
+
+ //! [6]
+ // Reset range sliders for Sqrt & Sin
+ m_rangeMinX = sampleMin;
+ m_rangeMinZ = sampleMin;
+ m_stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
+ m_stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
+ m_axisMinSliderX->setMinimum(0);
+ m_axisMinSliderX->setMaximum(sampleCountX - 2);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMinimum(1);
+ m_axisMaxSliderX->setMaximum(sampleCountX - 1);
+ m_axisMaxSliderX->setValue(sampleCountX - 1);
+ m_axisMinSliderZ->setMinimum(0);
+ m_axisMinSliderZ->setMaximum(sampleCountZ - 2);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMinimum(1);
+ m_axisMaxSliderZ->setMaximum(sampleCountZ - 1);
+ m_axisMaxSliderZ->setValue(sampleCountZ - 1);
+ //! [6]
+ }
+}
+
+void SurfaceGraphModifier::enableHeightMapModel(bool enable)
+{
+ if (enable) {
+ m_heightMapSeriesOne->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_heightMapSeriesOne->setFlatShadingEnabled(false);
+ m_heightMapSeriesTwo->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_heightMapSeriesTwo->setFlatShadingEnabled(false);
+ m_heightMapSeriesThree->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_heightMapSeriesThree->setFlatShadingEnabled(false);
+
+ m_graph->axisX()->setLabelFormat("%.1f N");
+ m_graph->axisZ()->setLabelFormat("%.1f E");
+ m_graph->axisX()->setRange(34.f, 40.f);
+ //! [4]
+ m_graph->axisY()->setAutoAdjustRange(true);
+ //! [4]
+ m_graph->axisZ()->setRange(18.f, 24.f);
+
+ m_graph->axisX()->setTitle(u"Latitude"_s);
+ m_graph->axisY()->setTitle(u"Height"_s);
+ m_graph->axisZ()->setTitle(u"Longitude"_s);
+
+ m_graph->removeSeries(m_sqrtSinSeries);
+ m_graph->removeSeries(m_topography);
+ m_graph->removeSeries(m_highlight);
+ m_graph->addSeries(m_heightMapSeriesOne);
+ m_graph->addSeries(m_heightMapSeriesTwo);
+ m_graph->addSeries(m_heightMapSeriesThree);
+
+ m_graph->setActiveInputHandler(m_defaultInputHandler);
+
+ m_titleLabel->setVisible(true);
+ m_graph->axisX()->setTitleVisible(true);
+ m_graph->axisY()->setTitleVisible(true);
+ m_graph->axisZ()->setTitleVisible(true);
+
+ // Reset range sliders for height map
+ int mapGridCountX = m_heightMapWidth / heightMapGridStepX;
+ int mapGridCountZ = m_heightMapHeight / heightMapGridStepZ;
+ m_rangeMinX = 34.f;
+ m_rangeMinZ = 18.f;
+ m_stepX = 6.f / float(mapGridCountX - 1);
+ m_stepZ = 6.f / float(mapGridCountZ - 1);
+ m_axisMinSliderX->setMinimum(0);
+ m_axisMinSliderX->setMaximum(mapGridCountX - 2);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMinimum(1);
+ m_axisMaxSliderX->setMaximum(mapGridCountX - 1);
+ m_axisMaxSliderX->setValue(mapGridCountX - 1);
+ m_axisMinSliderZ->setMinimum(0);
+ m_axisMinSliderZ->setMaximum(mapGridCountZ - 2);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMinimum(1);
+ m_axisMaxSliderZ->setMaximum(mapGridCountZ - 1);
+ m_axisMaxSliderZ->setValue(mapGridCountZ - 1);
+ }
+}
+
+void SurfaceGraphModifier::enableTopographyModel(bool enable)
+{
+ if (enable) {
+ m_graph->axisX()->setLabelFormat("%i");
+ m_graph->axisZ()->setLabelFormat("%i");
+ m_graph->axisX()->setRange(0.f, areaWidth);
+ m_graph->axisY()->setRange(100.f, areaWidth * aspectRatio);
+ m_graph->axisZ()->setRange(0.f, areaHeight);
+ m_graph->axisX()->setLabelAutoRotation(30.f);
+ m_graph->axisY()->setLabelAutoRotation(90.f);
+ m_graph->axisZ()->setLabelAutoRotation(30.f);
+
+ m_graph->removeSeries(m_heightMapSeriesOne);
+ m_graph->removeSeries(m_heightMapSeriesTwo);
+ m_graph->removeSeries(m_heightMapSeriesThree);
+ m_graph->addSeries(m_topography);
+ m_graph->addSeries(m_highlight);
+
+ m_titleLabel->setVisible(false);
+ m_graph->axisX()->setTitleVisible(false);
+ m_graph->axisY()->setTitleVisible(false);
+ m_graph->axisZ()->setTitleVisible(false);
+
+ m_graph->axisX()->setTitle({});
+ m_graph->axisY()->setTitle({});
+ m_graph->axisZ()->setTitle({});
+
+ //! [5]
+ m_graph->setActiveInputHandler(m_customInputHandler);
+ //! [5]
+
+ // Reset range sliders for topography map
+ m_rangeMinX = 0.f;
+ m_rangeMinZ = 0.f;
+ m_stepX = 1.f;
+ m_stepZ = 1.f;
+ m_axisMinSliderX->setMinimum(0);
+ m_axisMinSliderX->setMaximum(areaWidth - 200);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMinimum(200);
+ m_axisMaxSliderX->setMaximum(areaWidth);
+ m_axisMaxSliderX->setValue(areaWidth);
+ m_axisMinSliderZ->setMinimum(0);
+ m_axisMinSliderZ->setMaximum(areaHeight - 200);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMinimum(200);
+ m_axisMaxSliderZ->setMaximum(areaHeight);
+ m_axisMaxSliderZ->setValue(areaHeight);
+ }
+}
+
+void SurfaceGraphModifier::adjustXMin(int min)
+{
+ float minX = m_stepX * float(min) + m_rangeMinX;
+
+ int max = m_axisMaxSliderX->value();
+ if (min >= max) {
+ max = min + 1;
+ m_axisMaxSliderX->setValue(max);
+ }
+ float maxX = m_stepX * max + m_rangeMinX;
+
+ setAxisXRange(minX, maxX);
+}
+
+void SurfaceGraphModifier::adjustXMax(int max)
+{
+ float maxX = m_stepX * float(max) + m_rangeMinX;
+
+ int min = m_axisMinSliderX->value();
+ if (max <= min) {
+ min = max - 1;
+ m_axisMinSliderX->setValue(min);
+ }
+ float minX = m_stepX * min + m_rangeMinX;
+
+ setAxisXRange(minX, maxX);
+}
+
+void SurfaceGraphModifier::adjustZMin(int min)
+{
+ float minZ = m_stepZ * float(min) + m_rangeMinZ;
+
+ int max = m_axisMaxSliderZ->value();
+ if (min >= max) {
+ max = min + 1;
+ m_axisMaxSliderZ->setValue(max);
+ }
+ float maxZ = m_stepZ * max + m_rangeMinZ;
+
+ setAxisZRange(minZ, maxZ);
+}
+
+void SurfaceGraphModifier::adjustZMax(int max)
+{
+ float maxX = m_stepZ * float(max) + m_rangeMinZ;
+
+ int min = m_axisMinSliderZ->value();
+ if (max <= min) {
+ min = max - 1;
+ m_axisMinSliderZ->setValue(min);
+ }
+ float minX = m_stepZ * min + m_rangeMinZ;
+
+ setAxisZRange(minX, maxX);
+}
+
+//! [7]
+void SurfaceGraphModifier::setAxisXRange(float min, float max)
+{
+ m_graph->axisX()->setRange(min, max);
+}
+//! [7]
+
+void SurfaceGraphModifier::setAxisZRange(float min, float max)
+{
+ m_graph->axisZ()->setRange(min, max);
+}
+
+void SurfaceGraphModifier::setBlackToYellowGradient()
+{
+ //! [8]
+ QLinearGradient gr;
+ gr.setColorAt(0.f, Qt::black);
+ gr.setColorAt(0.33f, Qt::blue);
+ gr.setColorAt(0.67f, Qt::red);
+ gr.setColorAt(1.f, Qt::yellow);
+
+ m_sqrtSinSeries->setBaseGradient(gr);
+ m_sqrtSinSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+ //! [8]
+}
+
+void SurfaceGraphModifier::setGreenToRedGradient()
+{
+ QLinearGradient gr;
+ gr.setColorAt(0.f, Qt::darkGreen);
+ gr.setColorAt(0.5f, Qt::yellow);
+ gr.setColorAt(0.8f, Qt::red);
+ gr.setColorAt(1.f, Qt::darkRed);
+
+ m_sqrtSinSeries->setBaseGradient(gr);
+ m_sqrtSinSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+}
+
+void SurfaceGraphModifier::toggleItemOne(bool show)
+{
+ //! [10]
+ QVector3D positionOne = QVector3D(39.f, 77.f, 19.2f);
+ //! [10]
+ QVector3D positionOnePipe = QVector3D(39.f, 45.f, 19.2f);
+ QVector3D positionOneLabel = QVector3D(39.f, 107.f, 19.2f);
+ if (show) {
+ //! [9]
+ QImage color = QImage(2, 2, QImage::Format_RGB32);
+ color.fill(Qt::red);
+ //! [9]
+ //! [11]
+ auto *item = new QCustom3DItem(":/data/oilrig.obj", positionOne,
+ QVector3D(0.025f, 0.025f, 0.025f),
+ QQuaternion::fromAxisAndAngle(0.f, 1.f, 0.f, 45.f),
+ color);
+ //! [11]
+ //! [12]
+ m_graph->addCustomItem(item);
+ //! [12]
+ item = new QCustom3DItem(":/data/pipe.obj", positionOnePipe,
+ QVector3D(0.005f, 0.5f, 0.005f),
+ QQuaternion(),
+ color);
+ item->setShadowCasting(false);
+ m_graph->addCustomItem(item);
+
+ //! [13]
+ auto *label = new QCustom3DLabel();
+ label->setText("Oil Rig One");
+ label->setPosition(positionOneLabel);
+ label->setScaling(QVector3D(1.f, 1.f, 1.f));
+ m_graph->addCustomItem(label);
+ //! [13]
+ } else {
+ resetSelection();
+ //! [14]
+ m_graph->removeCustomItemAt(positionOne);
+ //! [14]
+ m_graph->removeCustomItemAt(positionOnePipe);
+ m_graph->removeCustomItemAt(positionOneLabel);
+ }
+}
+
+void SurfaceGraphModifier::toggleItemTwo(bool show)
+{
+ QVector3D positionTwo = QVector3D(34.5f, 77.f, 23.4f);
+ QVector3D positionTwoPipe = QVector3D(34.5f, 45.f, 23.4f);
+ QVector3D positionTwoLabel = QVector3D(34.5f, 107.f, 23.4f);
+ if (show) {
+ QImage color = QImage(2, 2, QImage::Format_RGB32);
+ color.fill(Qt::red);
+ auto *item = new QCustom3DItem();
+ item->setMeshFile(":/data/oilrig.obj");
+ item->setPosition(positionTwo);
+ item->setScaling(QVector3D(0.025f, 0.025f, 0.025f));
+ item->setRotation(QQuaternion::fromAxisAndAngle(0.f, 1.f, 0.f, 25.f));
+ item->setTextureImage(color);
+ m_graph->addCustomItem(item);
+ item = new QCustom3DItem(":/data/pipe.obj", positionTwoPipe,
+ QVector3D(0.005f, 0.5f, 0.005f),
+ QQuaternion(),
+ color);
+ item->setShadowCasting(false);
+ m_graph->addCustomItem(item);
+
+ auto *label = new QCustom3DLabel();
+ label->setText("Oil Rig Two");
+ label->setPosition(positionTwoLabel);
+ label->setScaling(QVector3D(1.f, 1.f, 1.f));
+ m_graph->addCustomItem(label);
+ } else {
+ resetSelection();
+ m_graph->removeCustomItemAt(positionTwo);
+ m_graph->removeCustomItemAt(positionTwoPipe);
+ m_graph->removeCustomItemAt(positionTwoLabel);
+ }
+}
+
+void SurfaceGraphModifier::toggleItemThree(bool show)
+{
+ QVector3D positionThree = QVector3D(34.5f, 86.f, 19.1f);
+ QVector3D positionThreeLabel = QVector3D(34.5f, 116.f, 19.1f);
+ if (show) {
+ QImage color = QImage(2, 2, QImage::Format_RGB32);
+ color.fill(Qt::darkMagenta);
+ auto *item = new QCustom3DItem();
+ item->setMeshFile(":/data/refinery.obj");
+ item->setPosition(positionThree);
+ item->setScaling(QVector3D(0.04f, 0.04f, 0.04f));
+ item->setRotation(QQuaternion::fromAxisAndAngle(0.f, 1.f, 0.f, 75.f));
+ item->setTextureImage(color);
+ m_graph->addCustomItem(item);
+
+ auto *label = new QCustom3DLabel();
+ label->setText("Refinery");
+ label->setPosition(positionThreeLabel);
+ label->setScaling(QVector3D(1.f, 1.f, 1.f));
+ m_graph->addCustomItem(label);
+ } else {
+ resetSelection();
+ m_graph->removeCustomItemAt(positionThree);
+ m_graph->removeCustomItemAt(positionThreeLabel);
+ }
+}
+
+void SurfaceGraphModifier::toggleSeeThrough(bool seethrough)
+{
+ if (seethrough) {
+ m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawWireframe);
+ m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawWireframe);
+ } else {
+ m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawSurface);
+ }
+}
+
+void SurfaceGraphModifier::toggleOilHighlight(bool highlight)
+{
+ if (highlight) {
+ QLinearGradient grThree;
+ grThree.setColorAt(0.0, Qt::black);
+ grThree.setColorAt(0.05, Qt::red);
+ m_graph->seriesList().at(2)->setBaseGradient(grThree);
+ } else {
+ QLinearGradient grThree;
+ grThree.setColorAt(0.0, Qt::white);
+ grThree.setColorAt(0.05, Qt::black);
+ m_graph->seriesList().at(2)->setBaseGradient(grThree);
+ }
+}
+
+void SurfaceGraphModifier::toggleShadows(bool shadows)
+{
+ if (shadows)
+ m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
+ else
+ m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
+}
+
+//! [15]
+void SurfaceGraphModifier::toggleSurfaceTexture(bool enable)
+{
+ if (enable)
+ m_topography->setTextureFile(":/data/maptexture.jpg");
+ else
+ m_topography->setTextureFile("");
+}
+//! [15]
+
+void SurfaceGraphModifier::handleElementSelected(QAbstract3DGraph::ElementType type)
+{
+ resetSelection();
+ if (type == QAbstract3DGraph::ElementCustomItem) {
+ QCustom3DItem *item = m_graph->selectedCustomItem();
+ QString text;
+ if (qobject_cast<QCustom3DLabel *>(item) != 0) {
+ text.append("Custom label: ");
+ } else {
+ QStringList split = item->meshFile().split("/");
+ text.append(split.last());
+ text.append(": ");
+ }
+ int index = m_graph->selectedCustomItemIndex();
+ text.append(QString::number(index));
+ m_textField->setText(text);
+ m_previouslyAnimatedItem = item;
+ m_previousScaling = item->scaling();
+ m_selectionAnimation->setTargetObject(item);
+ m_selectionAnimation->setStartValue(item->scaling());
+ m_selectionAnimation->setEndValue(item->scaling() * 1.5f);
+ m_selectionAnimation->start();
+ } else if (type == QAbstract3DGraph::ElementSeries) {
+ QString text = "Surface (";
+ QSurface3DSeries *series = m_graph->selectedSeries();
+ if (series) {
+ QPoint point = series->selectedPoint();
+ QString posStr;
+ posStr.setNum(point.x());
+ text.append(posStr);
+ text.append(", ");
+ posStr.setNum(point.y());
+ text.append(posStr);
+ }
+ text.append(")");
+ m_textField->setText(text);
+ } else if (type > QAbstract3DGraph::ElementSeries
+ && type < QAbstract3DGraph::ElementCustomItem) {
+ int index = m_graph->selectedLabelIndex();
+ QString text;
+ if (type == QAbstract3DGraph::ElementAxisXLabel)
+ text.append("Axis X label: ");
+ else if (type == QAbstract3DGraph::ElementAxisYLabel)
+ text.append("Axis Y label: ");
+ else
+ text.append("Axis Z label: ");
+ text.append(QString::number(index));
+ m_textField->setText(text);
+ } else {
+ m_textField->setText("Nothing");
+ }
+}
+
+void SurfaceGraphModifier::resetSelection()
+{
+ m_selectionAnimation->stop();
+ if (m_previouslyAnimatedItem)
+ m_previouslyAnimatedItem->setScaling(m_previousScaling);
+ m_previouslyAnimatedItem = nullptr;
+}
diff --git a/examples/datavisualization/graphgallery/surfacegraphmodifier.h b/examples/datavisualization/graphgallery/surfacegraphmodifier.h
new file mode 100644
index 00000000..1a54958e
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraphmodifier.h
@@ -0,0 +1,109 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SURFACEGRAPHMODIFIER_H
+#define SURFACEGRAPHMODIFIER_H
+
+#include <QtDataVisualization/q3dsurface.h>
+#include <QtDataVisualization/qsurfacedataproxy.h>
+#include <QtDataVisualization/qheightmapsurfacedataproxy.h>
+#include <QtDataVisualization/qsurface3dseries.h>
+#include <QtDataVisualization/qcustom3ditem.h>
+#include <QtDataVisualization/qcustom3dlabel.h>
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qlabel.h>
+#include <QtCore/qpropertyanimation.h>
+
+class TopographicSeries;
+class HighlightSeries;
+class CustomInputHandler;
+
+class SurfaceGraphModifier : public QObject
+{
+ Q_OBJECT
+public:
+ explicit SurfaceGraphModifier(Q3DSurface *surface, QLabel *label, QObject *parent);
+
+ //! [0]
+ void toggleModeNone() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionNone); }
+ void toggleModeItem() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItem); }
+ void toggleModeSliceRow() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow
+ | QAbstract3DGraph::SelectionSlice
+ | QAbstract3DGraph::SelectionMultiSeries); }
+ void toggleModeSliceColumn() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndColumn
+ | QAbstract3DGraph::SelectionSlice
+ | QAbstract3DGraph::SelectionMultiSeries); }
+ //! [0]
+
+ void setBlackToYellowGradient();
+ void setGreenToRedGradient();
+
+ void setAxisMinSliderX(QSlider *slider) { m_axisMinSliderX = slider; }
+ void setAxisMaxSliderX(QSlider *slider) { m_axisMaxSliderX = slider; }
+ void setAxisMinSliderZ(QSlider *slider) { m_axisMinSliderZ = slider; }
+ void setAxisMaxSliderZ(QSlider *slider) { m_axisMaxSliderZ = slider; }
+
+ void adjustXMin(int min);
+ void adjustXMax(int max);
+ void adjustZMin(int min);
+ void adjustZMax(int max);
+
+public Q_SLOTS:
+ void enableSqrtSinModel(bool enable);
+ void enableHeightMapModel(bool enable);
+ void enableTopographyModel(bool enable);
+
+ void toggleItemOne(bool show);
+ void toggleItemTwo(bool show);
+ void toggleItemThree(bool show);
+ void toggleSeeThrough(bool seethrough);
+ void toggleOilHighlight(bool highlight);
+ void toggleShadows(bool shadows);
+ void toggleSurfaceTexture(bool enable);
+
+private:
+ void setAxisXRange(float min, float max);
+ void setAxisZRange(float min, float max);
+ void fillSqrtSinProxy();
+ void handleElementSelected(QAbstract3DGraph::ElementType type);
+ void resetSelection();
+
+private:
+ Q3DSurface *m_graph = nullptr;
+ QSurfaceDataProxy *m_sqrtSinProxy = nullptr;
+ QSurface3DSeries *m_sqrtSinSeries = nullptr;
+ QHeightMapSurfaceDataProxy *m_heightMapProxyOne = nullptr;
+ QHeightMapSurfaceDataProxy *m_heightMapProxyTwo = nullptr;
+ QHeightMapSurfaceDataProxy *m_heightMapProxyThree = nullptr;
+ QSurface3DSeries *m_heightMapSeriesOne = nullptr;
+ QSurface3DSeries *m_heightMapSeriesTwo = nullptr;
+ QSurface3DSeries *m_heightMapSeriesThree = nullptr;
+
+ QSlider *m_axisMinSliderX = nullptr;
+ QSlider *m_axisMaxSliderX = nullptr;
+ QSlider *m_axisMinSliderZ = nullptr;
+ QSlider *m_axisMaxSliderZ = nullptr;
+ float m_rangeMinX = 0.f;
+ float m_rangeMinZ = 0.f;
+ float m_stepX = 0.f;
+ float m_stepZ = 0.f;
+ int m_heightMapWidth = 0;
+ int m_heightMapHeight = 0;
+
+ QLabel *m_textField = nullptr;
+ QPropertyAnimation *m_selectionAnimation = nullptr;
+ QCustom3DLabel *m_titleLabel = nullptr;
+ QCustom3DItem *m_previouslyAnimatedItem = nullptr;
+ QVector3D m_previousScaling = {};
+
+ TopographicSeries *m_topography = nullptr;
+ HighlightSeries *m_highlight = nullptr;
+ int m_highlightWidth = 0;
+ int m_highlightHeight = 0;
+
+ CustomInputHandler *m_customInputHandler = nullptr;
+ Q3DInputHandler *m_defaultInputHandler = new Q3DInputHandler();
+};
+
+#endif // SURFACEGRAPHMODIFIER_H
diff --git a/examples/datavisualization/texturesurface/topographicseries.cpp b/examples/datavisualization/graphgallery/topographicseries.cpp
index 01110388..201a275e 100644
--- a/examples/datavisualization/texturesurface/topographicseries.cpp
+++ b/examples/datavisualization/graphgallery/topographicseries.cpp
@@ -1,11 +1,11 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "topographicseries.h"
//! [0]
// Value used to encode height data as RGB value on PNG file
-const float packingFactor = 11983.0f;
+const float packingFactor = 11983.f;
//! [0]
TopographicSeries::TopographicSeries()
@@ -15,13 +15,11 @@ TopographicSeries::TopographicSeries()
setBaseColor(Qt::white);
}
-TopographicSeries::~TopographicSeries()
-{
-}
+TopographicSeries::~TopographicSeries() = default;
void TopographicSeries::setTopographyFile(const QString file, float width, float height)
{
-//! [1]
+ //! [1]
QImage heightMapImage(file);
uchar *bits = heightMapImage.bits();
int imageHeight = heightMapImage.height();
@@ -30,26 +28,27 @@ void TopographicSeries::setTopographyFile(const QString file, float width, float
float stepX = width / float(imageWidth);
float stepZ = height / float(imageHeight);
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ auto *dataArray = new QSurfaceDataArray;
dataArray->reserve(imageHeight);
- for (int i = 0; i < imageHeight; i++) {
+ for (int i = 0; i < imageHeight; ++i) {
int p = i * widthBits;
float z = height - float(i) * stepZ;
- QSurfaceDataRow *newRow = new QSurfaceDataRow(imageWidth);
- for (int j = 0; j < imageWidth; j++) {
+ auto *newRow = new QSurfaceDataRow;
+ newRow->reserve(imageWidth);
+ for (int j = 0; j < imageWidth; ++j) {
uchar aa = bits[p + 0];
uchar rr = bits[p + 1];
uchar gg = bits[p + 2];
uint color = uint((gg << 16) + (rr << 8) + aa);
float y = float(color) / packingFactor;
- (*newRow)[j].setPosition(QVector3D(float(j) * stepX, y, z));
- p = p + 4;
+ newRow->append(QSurfaceDataItem({float(j) * stepX, y, z}));
+ p += 4;
}
- *dataArray << newRow;
+ dataArray->append(newRow);
}
dataProxy()->resetArray(dataArray);
-//! [1]
+ //! [1]
m_sampleCountX = float(imageWidth);
m_sampleCountZ = float(imageHeight);
diff --git a/examples/datavisualization/texturesurface/topographicseries.h b/examples/datavisualization/graphgallery/topographicseries.h
index 1280e03a..41e03b1e 100644
--- a/examples/datavisualization/texturesurface/topographicseries.h
+++ b/examples/datavisualization/graphgallery/topographicseries.h
@@ -1,16 +1,16 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TOPOGRAPHICSERIES_H
#define TOPOGRAPHICSERIES_H
-#include <QtDataVisualization/QSurface3DSeries>
+#include <QtDataVisualization/qsurface3dseries.h>
class TopographicSeries : public QSurface3DSeries
{
Q_OBJECT
public:
- explicit TopographicSeries();
+ TopographicSeries();
~TopographicSeries();
void setTopographyFile(const QString file, float width, float height);
@@ -18,11 +18,9 @@ public:
float sampleCountX() { return m_sampleCountX; }
float sampleCountZ() { return m_sampleCountZ; }
-public Q_SLOTS:
-
private:
- float m_sampleCountX;
- float m_sampleCountZ;
+ float m_sampleCountX = 0.f;
+ float m_sampleCountZ = 0.f;
};
#endif // TOPOGRAPHICSERIES_H
diff --git a/examples/datavisualization/customproxy/variantbardatamapping.cpp b/examples/datavisualization/graphgallery/variantbardatamapping.cpp
index 3a4396f7..7a2a6cc7 100644
--- a/examples/datavisualization/customproxy/variantbardatamapping.cpp
+++ b/examples/datavisualization/graphgallery/variantbardatamapping.cpp
@@ -1,32 +1,12 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "variantbardatamapping.h"
-VariantBarDataMapping::VariantBarDataMapping()
- : QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
-{
-}
-
-VariantBarDataMapping::VariantBarDataMapping(const VariantBarDataMapping &other)
- : QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
-{
- operator=(other);
-}
-
VariantBarDataMapping::VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
const QStringList &rowCategories,
const QStringList &columnCategories)
- : QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
+ : QObject(nullptr)
{
m_rowIndex = rowIndex;
m_columnIndex = columnIndex;
@@ -35,20 +15,7 @@ VariantBarDataMapping::VariantBarDataMapping(int rowIndex, int columnIndex, int
m_columnCategories = columnCategories;
}
-VariantBarDataMapping::~VariantBarDataMapping()
-{
-}
-
-VariantBarDataMapping &VariantBarDataMapping::operator=(const VariantBarDataMapping &other)
-{
- m_rowIndex = other.m_rowIndex;
- m_columnIndex = other.m_columnIndex;
- m_valueIndex = other.m_valueIndex;
- m_rowCategories = other.m_rowCategories;
- m_columnCategories = other.m_columnCategories;
-
- return *this;
-}
+VariantBarDataMapping::~VariantBarDataMapping() = default;
void VariantBarDataMapping::setRowIndex(int index)
{
diff --git a/examples/datavisualization/customproxy/variantbardatamapping.h b/examples/datavisualization/graphgallery/variantbardatamapping.h
index 6a33cee4..25bacebd 100644
--- a/examples/datavisualization/customproxy/variantbardatamapping.h
+++ b/examples/datavisualization/graphgallery/variantbardatamapping.h
@@ -1,11 +1,11 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VARIANTBARDATAMAPPING_H
#define VARIANTBARDATAMAPPING_H
-#include <QtCore/QObject>
-#include <QtCore/QStringList>
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
class VariantBarDataMapping : public QObject
{
@@ -18,17 +18,13 @@ class VariantBarDataMapping : public QObject
Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories NOTIFY columnCategoriesChanged)
//! [0]
public:
- explicit VariantBarDataMapping();
- VariantBarDataMapping(const VariantBarDataMapping &other);
//! [1]
- VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories);
+ explicit VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories);
//! [1]
virtual ~VariantBarDataMapping();
- VariantBarDataMapping &operator=(const VariantBarDataMapping &other);
-
void setRowIndex(int index);
int rowIndex() const;
void setColumnIndex(int index);
@@ -58,13 +54,13 @@ Q_SIGNALS:
private:
// Indexes of the mapped items in the VariantDataItem
- int m_rowIndex;
- int m_columnIndex;
- int m_valueIndex;
+ int m_rowIndex = 0;
+ int m_columnIndex = 1;
+ int m_valueIndex = 2;
// For row/column items, sort items into these categories. Other categories are ignored.
- QStringList m_rowCategories;
- QStringList m_columnCategories;
+ QStringList m_rowCategories = {};
+ QStringList m_columnCategories = {};
};
#endif
diff --git a/examples/datavisualization/customproxy/variantbardataproxy.cpp b/examples/datavisualization/graphgallery/variantbardataproxy.cpp
index f94f37b5..8fe73abc 100644
--- a/examples/datavisualization/customproxy/variantbardataproxy.cpp
+++ b/examples/datavisualization/graphgallery/variantbardataproxy.cpp
@@ -1,20 +1,9 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "variantbardataproxy.h"
-VariantBarDataProxy::VariantBarDataProxy() :
- QBarDataProxy()
-{
-}
-
-VariantBarDataProxy::VariantBarDataProxy(VariantDataSet *newSet,
- VariantBarDataMapping *mapping) :
- QBarDataProxy()
-{
- setDataSet(newSet);
- setMapping(mapping);
-}
+VariantBarDataProxy::VariantBarDataProxy() = default;
VariantBarDataProxy::~VariantBarDataProxy()
{
@@ -24,7 +13,7 @@ VariantBarDataProxy::~VariantBarDataProxy()
void VariantBarDataProxy::setDataSet(VariantDataSet *newSet)
{
if (!m_dataSet.isNull())
- QObject::disconnect(m_dataSet.data(), 0, this, 0);
+ QObject::disconnect(m_dataSet.data(), nullptr, this, nullptr);
m_dataSet = newSet;
@@ -44,15 +33,17 @@ VariantDataSet *VariantBarDataProxy::dataSet()
void VariantBarDataProxy::setMapping(VariantBarDataMapping *mapping)
{
- if (!m_mapping.isNull())
+ if (!m_mapping.isNull()) {
QObject::disconnect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this,
&VariantBarDataProxy::handleMappingChanged);
+ }
m_mapping = mapping;
- if (!m_mapping.isNull())
+ if (!m_mapping.isNull()) {
QObject::connect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this,
&VariantBarDataProxy::handleMappingChanged);
+ }
resolveDataSet();
}
@@ -74,7 +65,7 @@ void VariantBarDataProxy::handleItemsAdded(int index, int count)
void VariantBarDataProxy::handleDataCleared()
{
// Data cleared, reset array
- resetArray(0);
+ resetArray(nullptr);
}
void VariantBarDataProxy::handleMappingChanged()
@@ -89,7 +80,7 @@ void VariantBarDataProxy::resolveDataSet()
// If we have no data or mapping, or the categories are not defined, simply clear the array
if (m_dataSet.isNull() || m_mapping.isNull() || !m_mapping->rowCategories().size()
|| !m_mapping->columnCategories().size()) {
- resetArray(0);
+ resetArray(nullptr);
return;
}
const VariantDataItemList &itemList = m_dataSet->itemList();
@@ -101,18 +92,18 @@ void VariantBarDataProxy::resolveDataSet()
const QStringList &columnList = m_mapping->columnCategories();
// Sort values into rows and columns
- typedef QHash<QString, float> ColumnValueMap;
+ using ColumnValueMap = QHash<QString, float>;
QHash <QString, ColumnValueMap> itemValueMap;
- foreach (const VariantDataItem *item, itemList) {
+ for (const VariantDataItem *item : itemList) {
itemValueMap[item->at(rowIndex).toString()][item->at(columnIndex).toString()]
= item->at(valueIndex).toReal();
}
// Create a new data array in format the parent class understands
- QBarDataArray *newProxyArray = new QBarDataArray;
- foreach (QString rowKey, rowList) {
- QBarDataRow *newProxyRow = new QBarDataRow(columnList.size());
- for (int i = 0; i < columnList.size(); i++)
+ auto *newProxyArray = new QBarDataArray;
+ for (const QString &rowKey : rowList) {
+ auto *newProxyRow = new QBarDataRow(columnList.size());
+ for (qsizetype i = 0; i < columnList.size(); ++i)
(*newProxyRow)[i].setValue(itemValueMap[rowKey][columnList.at(i)]);
newProxyArray->append(newProxyRow);
}
diff --git a/examples/datavisualization/customproxy/variantbardataproxy.h b/examples/datavisualization/graphgallery/variantbardataproxy.h
index 9fec86a0..6a4d2f31 100644
--- a/examples/datavisualization/customproxy/variantbardataproxy.h
+++ b/examples/datavisualization/graphgallery/variantbardataproxy.h
@@ -1,15 +1,13 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VARIANTBARDATAPROXY_H
#define VARIANTBARDATAPROXY_H
-#include <QtDataVisualization/qbardataproxy.h>
#include "variantdataset.h"
#include "variantbardatamapping.h"
-#include <QtCore/QStringList>
-#include <QtCore/QMap>
-#include <QtCore/QPointer>
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QtCore/qpointer.h>
//! [0]
class VariantBarDataProxy : public QBarDataProxy
@@ -18,8 +16,7 @@ class VariantBarDataProxy : public QBarDataProxy
Q_OBJECT
public:
- explicit VariantBarDataProxy();
- explicit VariantBarDataProxy(VariantDataSet *newSet, VariantBarDataMapping *mapping);
+ VariantBarDataProxy();
virtual ~VariantBarDataProxy();
//! [1]
diff --git a/examples/datavisualization/customproxy/variantdataset.cpp b/examples/datavisualization/graphgallery/variantdataset.cpp
index 63a81b98..3892f02b 100644
--- a/examples/datavisualization/customproxy/variantdataset.cpp
+++ b/examples/datavisualization/graphgallery/variantdataset.cpp
@@ -1,12 +1,9 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "variantdataset.h"
-VariantDataSet::VariantDataSet()
- : QObject(0)
-{
-}
+VariantDataSet::VariantDataSet() = default;
VariantDataSet::~VariantDataSet()
{
@@ -15,7 +12,7 @@ VariantDataSet::~VariantDataSet()
void VariantDataSet::clear()
{
- foreach (VariantDataItem *item, m_variantData) {
+ for (VariantDataItem *item : m_variantData) {
item->clear();
delete item;
}
diff --git a/examples/datavisualization/customproxy/variantdataset.h b/examples/datavisualization/graphgallery/variantdataset.h
index 55d31606..ca0d7ffd 100644
--- a/examples/datavisualization/customproxy/variantdataset.h
+++ b/examples/datavisualization/graphgallery/variantdataset.h
@@ -1,16 +1,15 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VARIANTDATASET_H
#define VARIANTDATASET_H
-#include <QtCore/QScopedPointer>
-#include <QtCore/QVariantList>
+#include <QtCore/qvariantlist.h>
-//! [1]
-typedef QVariantList VariantDataItem;
-typedef QList<VariantDataItem *> VariantDataItemList;
-//! [1]
+//! [0]
+using VariantDataItem = QVariantList;
+using VariantDataItemList = QList<VariantDataItem *>;
+//! [0]
class VariantDataSet : public QObject
{
@@ -20,7 +19,7 @@ public:
explicit VariantDataSet();
~VariantDataSet();
- //! [0]
+ //! [1]
void clear();
int addItem(VariantDataItem *item);
@@ -31,7 +30,7 @@ public:
Q_SIGNALS:
void itemsAdded(int index, int count);
void dataCleared();
- //! [0]
+ //! [1]
private:
VariantDataItemList m_variantData;
diff --git a/examples/datavisualization/qml3doscilloscope/doc/images/qml3doscilloscope-example.png b/examples/datavisualization/qml3doscilloscope/doc/images/qml3doscilloscope-example.png
deleted file mode 100644
index d8a79a36..00000000
--- a/examples/datavisualization/qml3doscilloscope/doc/images/qml3doscilloscope-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qml3doscilloscope/doc/src/qml3doscilloscope.qdoc b/examples/datavisualization/qml3doscilloscope/doc/src/qml3doscilloscope.qdoc
deleted file mode 100644
index 4abafce1..00000000
--- a/examples/datavisualization/qml3doscilloscope/doc/src/qml3doscilloscope.qdoc
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example qml3doscilloscope
- \meta tags {DataVisualization, Surface3D, Dynamic Data, Surface Graph}
- \meta category {Graphics}
- \title Surface Oscilloscope
- \ingroup qtdatavisualization_qmlexamples
- \brief Example of a hybrid C++ and QML application.
-
- The oscilloscope example shows how to combine C++ and QML in an application,
- as well as showing data that changes realtime.
-
- \image qml3doscilloscope-example.png
-
- The interesting thing about this example is combining C++ and QML, so we'll concentrate on
- that and skip explaining the basic functionality - for more detailed QML example documentation,
- see \l{Simple Scatter Graph}.
-
- \include examples-run.qdocinc
-
- \section1 Data Source in C++
-
- The item model based proxies are good for simple and/or static graphs, but to achieve
- best performance when displaying data changing in realtime, the basic proxies should be used.
- Those are not supported in QML, as the data items they store are not \l{QObject}s and
- cannot therefore be directly manipulated from QML code.
- To overcome this limitation, we implement a simple \c DataSource class in C++ to populate the
- data proxy of the series.
-
- The \c DataSource class provides two methods that can be called from QML:
-
- \snippet qml3doscilloscope/datasource.h 0
-
- The first method, \c generateData(), creates a cache of simulated oscilloscope data for us
- to display. The data is cached in a format accepted by QSurfaceDataProxy:
-
- \snippet qml3doscilloscope/datasource.cpp 0
-
- The second method, \c update(), copies one set of the cached data into another array, which we
- set to the data proxy of the series by calling QSurfaceDataProxy::resetArray().
- We reuse the same array if the array dimensions have not changed to minimize overhead:
-
- \snippet qml3doscilloscope/datasource.cpp 1
-
- \note Even though we are operating on the array pointer we have previously set to the proxy
- we still need to call QSurfaceDataProxy::resetArray() after changing the data in it to prompt
- the graph to render the data.
-
- To be able to access the \c DataSource methods from QML, we need to expose it. We do this by
- making the DataSource a QML_ELEMENT:
-
- \snippet qml3doscilloscope/datasource.h 1
-
- In addition to that, it needs to be declared as a QML module in the CMakeLists.txt:
-
- \badcode
- qt6_add_qml_module(qml3doscilloscope
- URI DataSource
- VERSION 1.0
- NO_RESOURCE_TARGET_PATH
- SOURCES
- datasource.cpp datasource.h
- QML_FILES
- qml/qml3doscilloscope/main.qml
- )
- \endcode
-
- To make it possible to use QSurface3DSeries pointers as parameters on the
- \c DataSource class methods on all environments and builds, we need to make sure the meta
- type is registered:
-
- \snippet qml3doscilloscope/datasource.cpp 3
- \dots 0
- \snippet qml3doscilloscope/datasource.cpp 4
-
- \section1 QML
-
- To be able to use the \c{DataSource}, we need to import the QML module, and create an
- instance of it to be used:
-
- \snippet qml3doscilloscope/qml/qml3doscilloscope/main.qml 0
- \dots 0
- \snippet qml3doscilloscope/qml/qml3doscilloscope/main.qml 5
-
- We define a Surface3D graph normally and give it a Surface3DSeries:
-
- \snippet qml3doscilloscope/qml/qml3doscilloscope/main.qml 0
-
- One interesting detail is that we don't specify a proxy for the Surface3DSeries we attach
- to the graph. This makes the series to utilize the default QSurfaceDataProxy.
-
- We also hide the item label with \l{Abstract3DSeries::itemLabelVisible}{itemLabelVisible}, since
- we want to display the selected item information in a \c Text element instead of a floating
- label above the selection pointer.
- This is done because the selection pointer moves around a lot as the data changes, which makes
- the regular selection label difficult to read.
-
- We initialize the \c DataSource cache when the graph is complete by calling a helper function
- \c generateData(), which calls the method with the same name on the \c DataSource:
-
- \snippet qml3doscilloscope/qml/qml3doscilloscope/main.qml 2
- \dots 4
- \snippet qml3doscilloscope/qml/qml3doscilloscope/main.qml 4
-
- To trigger the updates in data, we define a \c Timer item which calls the \c update() method on the \c
- DataSource at requested intervals. The label update is also triggered on each cycle:
-
- \snippet qml3doscilloscope/qml/qml3doscilloscope/main.qml 3
-
- \section1 Enabling Direct Rendering
-
- Since this application potentially deals with a lot of rapidly changing data, we use direct
- rendering mode for performance. To enable antialiasing in this mode the surface format of the application
- window needs to be changed, as the default format used by QQuickView doesn't support antialiasing.
- We use the utility function provided by Qt Data Visualization to change the surface format
- in \c main.cpp:
-
- \snippet qml3doscilloscope/main.cpp 1
- \dots 0
- \snippet qml3doscilloscope/main.cpp 2
-
-*/
diff --git a/examples/datavisualization/qml3doscilloscope/qml/qml3doscilloscope/main.qml b/examples/datavisualization/qml3doscilloscope/qml/qml3doscilloscope/main.qml
deleted file mode 100644
index b0457656..00000000
--- a/examples/datavisualization/qml3doscilloscope/qml/qml3doscilloscope/main.qml
+++ /dev/null
@@ -1,284 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-import QtQuick
-import QtQuick.Controls
-import QtDataVisualization
-//! [1]
-import DataSource
-//! [1]
-
-Item {
- id: mainView
- width: 1280
- height: 1024
-
- property int sampleColumns: sampleSlider.value
- property int sampleRows: sampleColumns / 2
- property int sampleCache: 24
-
- property bool portraitMode: width < height
-
- onSampleRowsChanged: {
- surfaceSeries.selectedPoint = surfaceSeries.invalidSelectionPosition
- generateData()
- }
-
- //![5]
- DataSource {
- id: dataSource
- }
- //![5]
-
- Item {
- id: dataView
- anchors.bottom: parent.bottom
- width: parent.width
- height: parent.height - controlArea.height
-
- Surface3D {
- id: surfaceGraph
-
- width: dataView.width
- height: dataView.height
- shadowQuality: AbstractGraph3D.ShadowQualityNone
- selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
-
- axisX.labelFormat: "%d ms"
- axisY.labelFormat: "%d W"
- axisZ.labelFormat: "%d mV"
- axisX.min: 0
- axisY.min: 0
- axisZ.min: 0
- axisX.max: 1000
- axisY.max: 100
- axisZ.max: 800
- axisX.segmentCount: 4
- axisY.segmentCount: 4
- axisZ.segmentCount: 4
- measureFps: true
- renderingMode: AbstractGraph3D.RenderDirectToBackground
-
- onCurrentFpsChanged: (fps)=> {
- if (fps > 10)
- fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps)
- else
- fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0
- }
-
- //! [0]
- Surface3DSeries {
- id: surfaceSeries
- drawMode: Surface3DSeries.DrawSurfaceAndWireframe
- flatShadingEnabled: false
- meshSmooth: true
- itemLabelFormat: "@xLabel, @zLabel: @yLabel"
- itemLabelVisible: false
-
- onItemLabelChanged: {
- if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
- selectionText.text = "No selection"
- else
- selectionText.text = surfaceSeries.itemLabel
- }
- }
- //! [0]
-
- //! [2]
- Component.onCompleted: mainView.generateData()
- //! [2]
- }
- }
-
- //! [3]
- Timer {
- id: refreshTimer
- interval: 1000 / frequencySlider.value
- running: true
- repeat: true
- onTriggered: dataSource.update(surfaceSeries)
- }
- //! [3]
-
- Rectangle {
- id: controlArea
- height: mainView.portraitMode ? flatShadingToggle.implicitHeight * 7
- : flatShadingToggle.implicitHeight * 2
- anchors.left: parent.left
- anchors.top: parent.top
- anchors.right: parent.right
- color: surfaceGraph.theme.backgroundColor
-
- // Samples
- Rectangle {
- id: samples
- width: mainView.portraitMode ? mainView.width : mainView.width / 4
- height: flatShadingToggle.implicitHeight
- anchors.left: parent.left
- anchors.top: parent.top
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- Row {
- anchors.centerIn: parent
- spacing: 10
- padding: 5
-
- Slider {
- id: sampleSlider
- from: mainView.sampleCache * 2
- to: from * 10
- stepSize: mainView.sampleCache
- Component.onCompleted: value = from * 2
- }
-
- Text {
- id: samplesText
- text: "Samples: " + (mainView.sampleRows * mainView.sampleColumns)
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
- }
-
- // Frequency
- Rectangle {
- id: frequency
- width: mainView.portraitMode ? mainView.width : mainView.width / 4
- height: flatShadingToggle.implicitHeight
- anchors.left: mainView.portraitMode ? parent.left : samples.right
- anchors.top: mainView.portraitMode ? samples.bottom : parent.top
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- Row {
- anchors.centerIn: parent
- spacing: 10
- padding: 5
-
- Slider {
- id: frequencySlider
- from: 2
- to: 60
- stepSize: 2
- value: 30
- }
-
- Text {
- id: frequencyText
- text: "Freq: " + frequencySlider.value + " Hz"
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
- }
-
- // FPS
- Rectangle {
- id: fpsindicator
- width: mainView.portraitMode ? mainView.width : mainView.width / 4
- height: flatShadingToggle.implicitHeight
- anchors.left: mainView.portraitMode ? parent.left : frequency.right
- anchors.top: mainView.portraitMode ? frequency.bottom : parent.top
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- Text {
- id: fpsText
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
-
- // Selection
- Rectangle {
- id: selection
- width: mainView.portraitMode ? mainView.width : mainView.width / 4
- height: flatShadingToggle.implicitHeight
- anchors.left: mainView.portraitMode ? parent.left : fpsindicator.right
- anchors.top: mainView.portraitMode ? fpsindicator.bottom : parent.top
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- Text {
- id: selectionText
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- text: "No selection"
- }
- }
-
- // Flat shading
- Button {
- id: flatShadingToggle
- width: mainView.portraitMode ? mainView.width : mainView.width / 3
- anchors.left: parent.left
- anchors.top: selection.bottom
-
- text: surfaceSeries.flatShadingSupported ? "Show Flat" : "Flat not supported"
- enabled: surfaceSeries.flatShadingSupported
-
- onClicked: {
- if (surfaceSeries.flatShadingEnabled === true) {
- surfaceSeries.flatShadingEnabled = false;
- text = "Show Flat"
- } else {
- surfaceSeries.flatShadingEnabled = true;
- text = "Show Smooth"
- }
- }
- }
-
- // Surface grid
- Button {
- id: surfaceGridToggle
- width: mainView.portraitMode ? mainView.width : mainView.width / 3
- anchors.left: mainView.portraitMode ? parent.left : flatShadingToggle.right
- anchors.top: mainView.portraitMode ? flatShadingToggle.bottom : selection.bottom
-
- text: "Hide Surface Grid"
-
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- text = "Show Surface Grid"
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
- text = "Hide Surface Grid"
- }
- }
- }
-
- // Exit
- Button {
- id: exitButton
- width: mainView.portraitMode ? mainView.width : mainView.width / 3
- anchors.left: mainView.portraitMode ? parent.left : surfaceGridToggle.right
- anchors.top: mainView.portraitMode ? surfaceGridToggle.bottom : selection.bottom
-
- text: "Quit"
-
- onClicked: Qt.quit();
- }
- }
-
- //! [4]
- function generateData() {
- dataSource.generateData(mainView.sampleCache, mainView.sampleRows,
- mainView.sampleColumns, surfaceGraph.axisX.min,
- surfaceGraph.axisX.max, surfaceGraph.axisY.min,
- surfaceGraph.axisY.max, surfaceGraph.axisZ.min,
- surfaceGraph.axisZ.max)
- }
- //! [4]
-}
diff --git a/examples/datavisualization/qml3doscilloscope/qml3doscilloscope.qrc b/examples/datavisualization/qml3doscilloscope/qml3doscilloscope.qrc
deleted file mode 100644
index 64650c35..00000000
--- a/examples/datavisualization/qml3doscilloscope/qml3doscilloscope.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qml3doscilloscope/main.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlaxishandling/CMakeLists.txt b/examples/datavisualization/qmlaxishandling/CMakeLists.txt
index 062e0cb7..41ce410c 100644
--- a/examples/datavisualization/qmlaxishandling/CMakeLists.txt
+++ b/examples/datavisualization/qmlaxishandling/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qmlaxishandling LANGUAGES CXX)
diff --git a/examples/datavisualization/qmlaxishandling/customformatter.cpp b/examples/datavisualization/qmlaxishandling/customformatter.cpp
index 79425477..b0473159 100644
--- a/examples/datavisualization/qmlaxishandling/customformatter.cpp
+++ b/examples/datavisualization/qmlaxishandling/customformatter.cpp
@@ -1,12 +1,10 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "customformatter.h"
#include <QtDataVisualization/qvalue3daxis.h>
#include <QtQml/qqmlextensionplugin.h>
-Q_DECLARE_METATYPE(QValue3DAxisFormatter *)
-
static const qreal oneDayMs = 60.0 * 60.0 * 24.0 * 1000.0;
CustomFormatter::CustomFormatter(QObject *parent) :
@@ -114,7 +112,7 @@ QString CustomFormatter::selectionFormat() const
return m_selectionFormat;
}
-void CustomFormatter::setOriginDate(const QDate &date)
+void CustomFormatter::setOriginDate(QDate date)
{
if (m_originDate != date) {
m_originDate = date;
diff --git a/examples/datavisualization/qmlaxishandling/customformatter.h b/examples/datavisualization/qmlaxishandling/customformatter.h
index 8708d466..2c821b49 100644
--- a/examples/datavisualization/qmlaxishandling/customformatter.h
+++ b/examples/datavisualization/qmlaxishandling/customformatter.h
@@ -1,5 +1,5 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CUSTOMFORMATTER_H
#define CUSTOMFORMATTER_H
@@ -36,11 +36,11 @@ public:
QString selectionFormat() const;
public Q_SLOTS:
- void setOriginDate(const QDate &date);
+ void setOriginDate(QDate date);
void setSelectionFormat(const QString &format);
Q_SIGNALS:
- void originDateChanged(const QDate &date);
+ void originDateChanged(QDate date);
void selectionFormatChanged(const QString &format);
private:
diff --git a/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc b/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc
index ae2470cf..087630c6 100644
--- a/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc
+++ b/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc
@@ -4,7 +4,6 @@
/*!
\example qmlaxishandling
\meta tags {DataVisualization, Scatter3D, Custom Input Handler, Dynamic Data, Custom Axis Formatter, Scatter Graph}
- \meta category {Graphics}
\title Axis Handling
\ingroup qtdatavisualization_qmlexamples
\brief Implementing axis dragging with a custom input handler in QML, and creating a custom axis formatter.
diff --git a/examples/datavisualization/qmlaxishandling/main.cpp b/examples/datavisualization/qmlaxishandling/main.cpp
index aa128bf4..2a145633 100644
--- a/examples/datavisualization/qmlaxishandling/main.cpp
+++ b/examples/datavisualization/qmlaxishandling/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtGui/qguiapplication.h>
#include <QtQuick/qquickview.h>
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml
index eeb4bba5..81d2e0a1 100644
--- a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -158,7 +158,7 @@ Item {
//! [3]
//! [6]
if (pressed && selectedAxisLabel != -1)
- axisGradView.dragAxis();
+ axisDragView.dragAxis();
//! [6]
//! [4]
previousMouseX = currentMouseX;
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml
index bf7624ca..5ceae315 100644
--- a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml
index 5db8e855..b74337fd 100644
--- a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml
index 52312359..d4d830a4 100644
--- a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
diff --git a/examples/datavisualization/qmlbars/CMakeLists.txt b/examples/datavisualization/qmlbars/CMakeLists.txt
index 507fab60..2f627b49 100644
--- a/examples/datavisualization/qmlbars/CMakeLists.txt
+++ b/examples/datavisualization/qmlbars/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qmlbars LANGUAGES CXX)
diff --git a/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc b/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc
index bac85045..2b0a1c4b 100644
--- a/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc
+++ b/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc
@@ -4,7 +4,6 @@
/*!
\example qmlbars
\meta tags {DataVisualization, Barsr3D, Multiple Series}
- \meta category {Graphics}
\title Simple Bar Graph
\ingroup qtdatavisualization_qmlexamples
\brief Using Bars3D in a QML application.
diff --git a/examples/datavisualization/qmlbars/main.cpp b/examples/datavisualization/qmlbars/main.cpp
index 0ebe3505..1c479ba2 100644
--- a/examples/datavisualization/qmlbars/main.cpp
+++ b/examples/datavisualization/qmlbars/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtGui/qguiapplication.h>
#include <QtQuick/qquickview.h>
diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml b/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml
index 0e614760..042294ad 100644
--- a/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml
+++ b/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtDataVisualization
diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml b/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml
index f56774c3..4121f26b 100644
--- a/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml
+++ b/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQml.Models
diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml
index c86e3dac..0b40e957 100644
--- a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml
+++ b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
diff --git a/examples/datavisualization/qmlscatter/CMakeLists.txt b/examples/datavisualization/qmlscatter/CMakeLists.txt
index ef3c349c..381ffd79 100644
--- a/examples/datavisualization/qmlscatter/CMakeLists.txt
+++ b/examples/datavisualization/qmlscatter/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qmlscatter LANGUAGES CXX)
diff --git a/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc b/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc
index aa2029d2..980fc60d 100644
--- a/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc
+++ b/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc
@@ -4,17 +4,17 @@
/*!
\example qmlscatter
\meta tags {DataVisualization, Scatter3D, Multiple Series}
- \meta category {Graphics}
\title Simple Scatter Graph
\ingroup qtdatavisualization_qmlexamples
\brief Using Scatter3D in a QML application.
- The scatter graph example shows how to make a simple scatter graph visualization using
+ \e {Simple Scatter Graph} shows how to make a simple scatter graph visualization using
Scatter3D and QML.
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
+ For instructions about how to interact with the graph, see
+ \l{Qt Data Visualization Interacting with Data}{this page}.
- For instructions how to create a new Qt Quick application of your own, see Qt Creator help.
+ For instructions on how to create a new Qt Quick application of your own, see Qt Creator help.
\image qmlscatter-example.png
@@ -22,14 +22,14 @@
\section1 Application Basics
- Before diving into the QML code, let's take a look at the application \c main.cpp.
+ Before diving into the QML code, take a look at the application \c main.cpp.
- This application implements a 'Quit' button in the UI, so we want to connect the QQmlEngine::quit()
- signal to our application's QWindow::close() slot:
+ This application implements a 'Quit' button in the UI, so you want to connect the QQmlEngine::quit()
+ signal to the application's QWindow::close() slot:
\snippet qmlscatter/main.cpp 4
- To make deployment little simpler, we gather all of the application's \c .qml files to a resource
+ To make deployment a little simpler, gather all of the application's \c .qml files to a resource
file (\c qmlscatter.qrc):
\badcode
@@ -41,7 +41,7 @@
</RCC>
\endcode
- This also requires us to set the \c main.qml to be read from the resource (\c{qrc:}):
+ This also requires setting the \c main.qml to be read from the resource (\c{qrc:}):
\snippet qmlscatter/main.cpp 3
@@ -59,106 +59,105 @@
)
\endcode
- Lastly, we want the application to run in a maximized window:
+ Finally, make the application run in a maximized window:
\snippet qmlscatter/main.cpp 2
\section1 Setting up the Graph
- First we'll import all the QML modules we need:
+ First, import all the needed QML modules:
\snippet qmlscatter/qml/qmlscatter/main.qml 0
- Then we create our main \c Item and call it \c mainView:
+ Then, create the main \c Item and call it \c mainView:
\snippet qmlscatter/qml/qmlscatter/main.qml 1
- Then we'll add another \c Item inside the main \c Item, and call it \c dataView.
- This will be the item to hold the Scatter3D graph. We'll anchor it to the parent bottom:
+ Then, add another \c Item inside the main \c Item, and call it \c {dataView}.
+ This will be the item to hold the Scatter3D graph. Anchor it to the parent bottom:
\snippet qmlscatter/qml/qmlscatter/main.qml 9
- Next we're ready to add the Scatter3D graph itself. We'll add it inside the \c dataView and
- name it \c {scatterGraph}. Let's make it fill the \c {dataView}:
+ Next, add the Scatter3D graph itself. Add it inside the \c dataView and
+ name it \c {scatterGraph}. Make it fill the \c {dataView}:
\snippet qmlscatter/qml/qmlscatter/main.qml 2
Now the graph is ready for use, but has no data. It also has the default axes and visual
properties.
- Let's modify some visual properties first by adding the following inside \c {scatterGraph}:
+ Next, modify some visual properties first by adding the following inside \c {scatterGraph}:
\snippet qmlscatter/qml/qmlscatter/main.qml 3
- We added a customized theme, changed the shadow quality, and adjusted the camera position.
- We're happy with the other visual properties, so we won't change them.
+ A customized theme was added, the shadow quality changed, and the camera position adjusted.
+ The other visual properties are fine, so there is no need to change them.
- The custom theme is based on a predefined theme \c {Theme3D.ThemeQt}, but we change the font
- in it:
+ The custom theme is based on a predefined theme, \c {Theme3D.ThemeQt}, but the font in it
+ is changed:
\snippet qmlscatter/qml/qmlscatter/main.qml 13
- Then it's time to start feeding the graph some data.
+ Then, start feeding the graph some data.
\section1 Adding Data to the Graph
- Let's create a \c Data item inside the \c mainView and name it \c seriesData:
+ Create a \c Data item inside the \c mainView and name it \c seriesData:
\snippet qmlscatter/qml/qmlscatter/main.qml 4
- The \c seriesData item contains the data models for all three series we use in this example.
+ The \c seriesData item contains the data models for all three series used in this example.
- This is the component that holds our data in \c {Data.qml}. It has an \c Item as the main
+ This is the component that holds the data in \c {Data.qml}. It has an \c Item as the main
component.
- In the main component we'll add the data itself in a \c ListModel and name it
- \c {dataModel}:
+ In the main component, add the data itself to a \c ListModel and name it \c {dataModel}:
\snippet qmlscatter/qml/qmlscatter/Data.qml 0
\dots
- We'll add two more of these for the other two series, and name them \c dataModelTwo and
+ Add two more of these to the other two series, and name them \c dataModelTwo and
\c {dataModelThree}.
- Then we need to expose the data models to be usable from \c {main.qml}. We do this by defining
+ Then, expose the data models to be usable from \c {main.qml}. Do this by defining
them as aliases in the main data component:
\snippet qmlscatter/qml/qmlscatter/Data.qml 1
- Now we can use the data from \c Data.qml with \c scatterGraph in \c {main.qml}. First we'll add
+ Now you can use the data from \c Data.qml with \c scatterGraph in \c {main.qml}. First, add
a Scatter3DSeries and call it \c {scatterSeries}:
\snippet qmlscatter/qml/qmlscatter/main.qml 5
- Then we'll set up selection label format for the series:
+ Then, set up selection label format for the series:
\snippet qmlscatter/qml/qmlscatter/main.qml 10
- And finally the data for series one in a ItemModelScatterDataProxy. We set the data itself as
- \c itemModel for the proxy:
+ And finally, add the data for series one in a ItemModelScatterDataProxy. Set the data itself as
+ the \c itemModel for the proxy:
\snippet qmlscatter/qml/qmlscatter/main.qml 11
- We'll add the other two series in the same way, but modify some series-specific details a bit:
+ Add the other two series in the same way, but modify some series-specific details a bit:
\snippet qmlscatter/qml/qmlscatter/main.qml 12
\dots
- Then we'll modify the properties of the default axes in \c scatterGraph a bit:
+ Then, modify the properties of the default axes in \c scatterGraph a bit:
\snippet qmlscatter/qml/qmlscatter/main.qml 6
- After that we'll just add a few buttons to the \c mainView to control the graph. We'll only
- show one as an example:
+ After that, add a few buttons to the \c mainView to control the graph, one of which is shown as
+ an example:
\snippet qmlscatter/qml/qmlscatter/main.qml 7
- Then we'll modify \c dataView to make room for the buttons at the top:
+ Then, modify \c dataView to make some room for the buttons at the top:
\snippet qmlscatter/qml/qmlscatter/main.qml 8
\dots
- And we're done!
+ And you're done!
\section1 Example Contents
*/
diff --git a/examples/datavisualization/qmlscatter/main.cpp b/examples/datavisualization/qmlscatter/main.cpp
index d64847c1..e9332869 100644
--- a/examples/datavisualization/qmlscatter/main.cpp
+++ b/examples/datavisualization/qmlscatter/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtGui/QGuiApplication>
#include <QtCore/QDir>
diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml
index 2cdc068a..e38bba91 100644
--- a/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml
+++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml
index 7702156c..f1ccabde 100644
--- a/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml
+++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
import QtQuick
diff --git a/examples/datavisualization/qmlspectrogram/CMakeLists.txt b/examples/datavisualization/qmlspectrogram/CMakeLists.txt
deleted file mode 100644
index 898316bb..00000000
--- a/examples/datavisualization/qmlspectrogram/CMakeLists.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(qmlspectrogram LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(qmlspectrogram
- main.cpp
-)
-set_target_properties(qmlspectrogram PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(qmlspectrogram PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::DataVisualization
-)
-
-qt6_add_qml_module(qmlspectrogram
- URI Spectrogram
- VERSION 1.0
- NO_RESOURCE_TARGET_PATH
- QML_FILES
- qml/qmlspectrogram/Data.qml
- qml/qmlspectrogram/main.qml
-)
-
-install(TARGETS qmlspectrogram
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.png b/examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.png
deleted file mode 100644
index de376cd9..00000000
--- a/examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc b/examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc
deleted file mode 100644
index b56e784c..00000000
--- a/examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example qmlspectrogram
- \meta tags {DataVisualization, Surface3D, Polar Graph, Surface Graph}
- \meta category {Graphics}
- \title Surface Spectrogram
- \ingroup qtdatavisualization_qmlexamples
- \brief Showing spectrogram graph in a QML application.
-
- The Surface Spectrogram example demonstrates how to show a polar and cartesian
- spectrograms and how to utilize orthographic projection to show them in 2D.
-
- \image qmlspectrogram-example.png
-
- Spectrogram is simply a surface graph with a range gradient used to emphasize the different
- values. Typically spectrograms are shown with two dimensional surfaces, which we simulate
- with a top down orthographic view of the graph. To enforce the 2D effect, we disable the
- graph rotation via mouse or touch when in the orthographic mode.
-
- The focus in this example is on showing how to display spectrograms, so the basic
- functionality is not explained. For more detailed QML example documentation,
- see \l{Simple Scatter Graph}.
-
- \include examples-run.qdocinc
-
- \section1 Creating a Spectrogram
-
- To create a 2D spectrogram, we define a Surface3D item:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 0
-
- The key properties for enabling the 2D effect are
- \l{AbstractGraph3D::orthoProjection}{orthoProjection} and
- \l{Camera3D::cameraPreset}{scene.activeCamera.cameraPreset}. We remove the perspective by
- enabling orthographic projection for the graph, and then we eliminate the Y-dimension by
- viewing the graph directly from above:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 1
-
- Since this viewpoint causes the horizontal axis grid to be mostly obscured by the surface,
- we also specify that the horizontal grid should be drawn on top of the graph:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 2
-
- \section1 Polar Spectrogram
-
- Depending on the data, it is sometimes more natural to use a polar graph instead of a cartesian
- one. Qt Data Visualization supports this via \l{AbstractGraph3D::polar}{polar} property.
- In this example we provide a button to switch between polar and cartesian modes:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 3
-
- In the polar mode, the X-axis is converted into the angular polar axis, and the Z-axis is
- converted into the radial polar axis. The surface points are recalculated according to new axes.
-
- The radial axis labels are drawn outside the graph by default, but in this example we want to
- draw them right next to the 0 degree angular axis inside the graph, so we define only a tiny
- offset for them:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 4
-
- To enforce the 2D effect, graph rotation via user input is disabled when in orthographic mode.
- We do this by specifying a new input handler:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 5
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 7
- \dots 0
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 6
- \dots 0
-
- When the projection mode changes, we adjust the value of the
- \l{InputHandler3D::rotationEnabled}{rotationEnabled} property of the \c{customInputHandler}
- to control the rotation.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/qmlspectrogram/main.cpp b/examples/datavisualization/qmlspectrogram/main.cpp
deleted file mode 100644
index 67430620..00000000
--- a/examples/datavisualization/qmlspectrogram/main.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlApplicationEngine>
-
-int main(int argc, char *argv[])
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- QGuiApplication app(argc, argv);
-
- QQmlApplicationEngine engine;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- engine.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- engine.load(QUrl(QStringLiteral("qrc:/qml/qmlspectrogram/main.qml")));
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlspectrogram/qmlspectrogram.pro b/examples/datavisualization/qmlspectrogram/qmlspectrogram.pro
deleted file mode 100644
index 655fb0b8..00000000
--- a/examples/datavisualization/qmlspectrogram/qmlspectrogram.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlspectrogram.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlspectrogram/*
diff --git a/examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc b/examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc
deleted file mode 100644
index 8c323f37..00000000
--- a/examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/qml">
- <file>qml/qmlspectrogram/Data.qml</file>
- <file>qml/qmlspectrogram/main.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlsurface/CMakeLists.txt b/examples/datavisualization/qmlsurface/CMakeLists.txt
deleted file mode 100644
index adac2122..00000000
--- a/examples/datavisualization/qmlsurface/CMakeLists.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(qmlsurface LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(qmlsurface
- main.cpp
-)
-set_target_properties(qmlsurface PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(qmlsurface PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::DataVisualization
-)
-
-qt6_add_qml_module(qmlsurface
- URI Surface
- VERSION 1.0
- NO_RESOURCE_TARGET_PATH
- QML_FILES
- qml/qmlsurface/Data.qml
- qml/qmlsurface/main.qml
- RESOURCES
- heightmap.png
-)
-
-install(TARGETS qmlsurface
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png b/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png
deleted file mode 100644
index 5e37b42c..00000000
--- a/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc b/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc
deleted file mode 100644
index 1f338536..00000000
--- a/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example qmlsurface
- \meta tags {DataVisualization, Surface3D, Height Map}
- \meta category {Graphics}
- \title Surface Graph from Height Data
- \ingroup qtdatavisualization_qmlexamples
- \brief Using Surface3D in a QML application.
-
- The surface graph example shows how to make a simple 3D surface plot using Surface3D
- with QML.
-
- \image qmlsurface-example.png
-
- The focus in this example is on generating a surface graph from height data, so in this section
- we skip explaining the application creation. For more detailed QML example documentation,
- see \l{Simple Scatter Graph}.
-
- \include examples-run.qdocinc
-
- \section1 Adding Data to the Graph
-
- This example shows two methods to set data to surface graph, using the HeightMapSurfaceDataProxy
- and ItemModelSurfaceDataProxy. First we go through setting the data using the height map specific
- data proxy. It is done with the code snippet below. The proxy itself is contained in a
- Surface3DSeries. Inside the HeightMapSurfaceDataProxy the \c heightMapFile specifies the
- image file containing the height data. The value properties in the proxy define the minimum
- and maximum values for surface area width and depth. This example shows the terrain around Tycho
- crater at imaginary position from 67 to 97 and from 30 to 60. Note that on the graph the scale
- on the Y dimension exaggerates the height.
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 4
-
- The other method to set surface data used in this example is with model mapping. We do that by
- first defining a \c ListModel containing the data for the surface:
-
- \snippet qmlsurface/qml/qmlsurface/Data.qml 0
- \dots 4
-
- Then we set up a Surface3DSeries with a ItemModelSurfaceDataProxy:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 5
- \dots
-
- We add the actual data to the \c itemModel of the ItemModelSurfaceDataProxy. We also define the
- roles for columns, rows and values. In this example the row holds values for longitude, column
- for latitude and the value is for height.
-
- \dots 0
- \snippet qmlsurface/qml/qmlsurface/main.qml 6
-
- \section1 Showing Data
-
- In the \c main.qml, we set up the Surface3D element to show the data and various UI elements
- to illustrate few interesting features.
-
- First is the gradient to be used for the surface, which can be defined as seen in the following
- snippet. With the ColorGradient we set example colors from position 0.0 to 1.0.
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 0
-
- This element is set into the \c baseGradients property in the \c theme used in Surface3D:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 7
-
- Other interesting features can be controlled with buttons.
-
- The first button is to toggle on and off the surface grid, for which we use the following code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 1
-
- Second button is for surface shading mode, which is controlled with this code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 2
-
- Third button is for series visibility, which is controlled with this code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 8
-
- Notice that the \c drawMode and \c flatShadingEnable properties are set for both series.
-
- Fourth and fifth buttons are for controlling background features.
-
- The last button is for switching between the two series, one of which uses
- HeightMapSurfaceDataProxy and the other one ItemModelSurfaceDataProxy. For this we use the
- following code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 3
-
- We also set the maximum value to 500 in model proxy to make the surface flatter and
- 250 on height map proxy to show exaggerated height. At the same time the middle color position
- on the gradient is modified to match the value range change.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/qmlsurface/heightmap.png b/examples/datavisualization/qmlsurface/heightmap.png
deleted file mode 100644
index 051a0125..00000000
--- a/examples/datavisualization/qmlsurface/heightmap.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurface/main.cpp b/examples/datavisualization/qmlsurface/main.cpp
deleted file mode 100644
index 1446eb0a..00000000
--- a/examples/datavisualization/qmlsurface/main.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
-
- viewer.setSource(QUrl("qrc:/qml/qmlsurface/main.qml"));
-
- viewer.setTitle(QStringLiteral("Tycho crater on the Moon (height exaggerated)"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml b/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml
deleted file mode 100644
index 24151c06..00000000
--- a/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml
+++ /dev/null
@@ -1,10014 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-import QtQuick
-
-Item {
- property alias model: dataModel
-
- //! [0]
- ListModel {
- id: dataModel
- ListElement{ longitude: "0"; latitude: "0"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "2"; height: "124"; }
- //! [0]
- ListElement{ longitude: "0"; latitude: "3"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "5"; height: "111"; }
- ListElement{ longitude: "0"; latitude: "6"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "7"; height: "102"; }
- ListElement{ longitude: "0"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "0"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "0"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "0"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "0"; latitude: "14"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "15"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "16"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "18"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "19"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "20"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "21"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "22"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "28"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "29"; height: "109"; }
- ListElement{ longitude: "0"; latitude: "30"; height: "108"; }
- ListElement{ longitude: "0"; latitude: "31"; height: "105"; }
- ListElement{ longitude: "0"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "0"; latitude: "33"; height: "104"; }
- ListElement{ longitude: "0"; latitude: "34"; height: "105"; }
- ListElement{ longitude: "0"; latitude: "35"; height: "107"; }
- ListElement{ longitude: "0"; latitude: "36"; height: "110"; }
- ListElement{ longitude: "0"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "0"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "45"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "46"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "48"; height: "131"; }
- ListElement{ longitude: "0"; latitude: "49"; height: "130"; }
- ListElement{ longitude: "0"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "0"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "0"; latitude: "54"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "55"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "56"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "57"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "59"; height: "110"; }
- ListElement{ longitude: "0"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "0"; latitude: "61"; height: "107"; }
- ListElement{ longitude: "0"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "0"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "0"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "0"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "0"; latitude: "66"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "68"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "70"; height: "122"; }
- ListElement{ longitude: "0"; latitude: "71"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "73"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "74"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "77"; height: "122"; }
- ListElement{ longitude: "0"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "79"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "0"; latitude: "81"; height: "138"; }
- ListElement{ longitude: "0"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "0"; latitude: "83"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "84"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "87"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "88"; height: "122"; }
- ListElement{ longitude: "0"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "0"; latitude: "90"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "91"; height: "130"; }
- ListElement{ longitude: "0"; latitude: "92"; height: "130"; }
- ListElement{ longitude: "0"; latitude: "93"; height: "128"; }
- ListElement{ longitude: "0"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "0"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "0"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "0"; latitude: "98"; height: "139"; }
- ListElement{ longitude: "0"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "2"; height: "118"; }
- ListElement{ longitude: "1"; latitude: "3"; height: "110"; }
- ListElement{ longitude: "1"; latitude: "4"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "5"; height: "110"; }
- ListElement{ longitude: "1"; latitude: "6"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "7"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "8"; height: "123"; }
- ListElement{ longitude: "1"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "10"; height: "131"; }
- ListElement{ longitude: "1"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "14"; height: "119"; }
- ListElement{ longitude: "1"; latitude: "15"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "16"; height: "113"; }
- ListElement{ longitude: "1"; latitude: "17"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "20"; height: "107"; }
- ListElement{ longitude: "1"; latitude: "21"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "22"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "23"; height: "114"; }
- ListElement{ longitude: "1"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "1"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "1"; latitude: "28"; height: "115"; }
- ListElement{ longitude: "1"; latitude: "29"; height: "112"; }
- ListElement{ longitude: "1"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "1"; latitude: "31"; height: "104"; }
- ListElement{ longitude: "1"; latitude: "32"; height: "104"; }
- ListElement{ longitude: "1"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "1"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "1"; latitude: "35"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "1"; latitude: "37"; height: "113"; }
- ListElement{ longitude: "1"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "39"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "1"; latitude: "42"; height: "121"; }
- ListElement{ longitude: "1"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "1"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "1"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "1"; latitude: "53"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "54"; height: "118"; }
- ListElement{ longitude: "1"; latitude: "55"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "56"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "58"; height: "114"; }
- ListElement{ longitude: "1"; latitude: "59"; height: "113"; }
- ListElement{ longitude: "1"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "61"; height: "106"; }
- ListElement{ longitude: "1"; latitude: "62"; height: "103"; }
- ListElement{ longitude: "1"; latitude: "63"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "64"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "1"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "1"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "1"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "69"; height: "119"; }
- ListElement{ longitude: "1"; latitude: "70"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "1"; latitude: "73"; height: "125"; }
- ListElement{ longitude: "1"; latitude: "74"; height: "124"; }
- ListElement{ longitude: "1"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "1"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "77"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "78"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "1"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "1"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "1"; latitude: "83"; height: "132"; }
- ListElement{ longitude: "1"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "1"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "1"; latitude: "87"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "88"; height: "125"; }
- ListElement{ longitude: "1"; latitude: "89"; height: "131"; }
- ListElement{ longitude: "1"; latitude: "90"; height: "134"; }
- ListElement{ longitude: "1"; latitude: "91"; height: "136"; }
- ListElement{ longitude: "1"; latitude: "92"; height: "134"; }
- ListElement{ longitude: "1"; latitude: "93"; height: "131"; }
- ListElement{ longitude: "1"; latitude: "94"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "95"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "1"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "1"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "2"; latitude: "0"; height: "116"; }
- ListElement{ longitude: "2"; latitude: "1"; height: "116"; }
- ListElement{ longitude: "2"; latitude: "2"; height: "111"; }
- ListElement{ longitude: "2"; latitude: "3"; height: "105"; }
- ListElement{ longitude: "2"; latitude: "4"; height: "108"; }
- ListElement{ longitude: "2"; latitude: "5"; height: "110"; }
- ListElement{ longitude: "2"; latitude: "6"; height: "114"; }
- ListElement{ longitude: "2"; latitude: "7"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "2"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "2"; latitude: "10"; height: "131"; }
- ListElement{ longitude: "2"; latitude: "11"; height: "134"; }
- ListElement{ longitude: "2"; latitude: "12"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "13"; height: "128"; }
- ListElement{ longitude: "2"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "2"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "16"; height: "115"; }
- ListElement{ longitude: "2"; latitude: "17"; height: "111"; }
- ListElement{ longitude: "2"; latitude: "18"; height: "105"; }
- ListElement{ longitude: "2"; latitude: "19"; height: "102"; }
- ListElement{ longitude: "2"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "2"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "2"; latitude: "22"; height: "106"; }
- ListElement{ longitude: "2"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "2"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "2"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "26"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "29"; height: "115"; }
- ListElement{ longitude: "2"; latitude: "30"; height: "111"; }
- ListElement{ longitude: "2"; latitude: "31"; height: "79"; }
- ListElement{ longitude: "2"; latitude: "32"; height: "94"; }
- ListElement{ longitude: "2"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "34"; height: "102"; }
- ListElement{ longitude: "2"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "36"; height: "107"; }
- ListElement{ longitude: "2"; latitude: "37"; height: "113"; }
- ListElement{ longitude: "2"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "2"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "40"; height: "117"; }
- ListElement{ longitude: "2"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "42"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "2"; latitude: "46"; height: "131"; }
- ListElement{ longitude: "2"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "2"; latitude: "48"; height: "132"; }
- ListElement{ longitude: "2"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "2"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "2"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "2"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "2"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "2"; latitude: "55"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "56"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "2"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "2"; latitude: "61"; height: "107"; }
- ListElement{ longitude: "2"; latitude: "62"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "63"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "64"; height: "106"; }
- ListElement{ longitude: "2"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "2"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "2"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "2"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "2"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "70"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "73"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "2"; latitude: "77"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "78"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "79"; height: "125"; }
- ListElement{ longitude: "2"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "2"; latitude: "81"; height: "138"; }
- ListElement{ longitude: "2"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "2"; latitude: "83"; height: "131"; }
- ListElement{ longitude: "2"; latitude: "84"; height: "125"; }
- ListElement{ longitude: "2"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "87"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "2"; latitude: "89"; height: "135"; }
- ListElement{ longitude: "2"; latitude: "90"; height: "138"; }
- ListElement{ longitude: "2"; latitude: "91"; height: "137"; }
- ListElement{ longitude: "2"; latitude: "92"; height: "137"; }
- ListElement{ longitude: "2"; latitude: "93"; height: "134"; }
- ListElement{ longitude: "2"; latitude: "94"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "95"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "97"; height: "140"; }
- ListElement{ longitude: "2"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "2"; latitude: "99"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "0"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "1"; height: "111"; }
- ListElement{ longitude: "3"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "3"; height: "107"; }
- ListElement{ longitude: "3"; latitude: "4"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "5"; height: "111"; }
- ListElement{ longitude: "3"; latitude: "6"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "3"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "3"; latitude: "11"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "12"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "13"; height: "132"; }
- ListElement{ longitude: "3"; latitude: "14"; height: "129"; }
- ListElement{ longitude: "3"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "3"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "17"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "19"; height: "101"; }
- ListElement{ longitude: "3"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "3"; latitude: "21"; height: "98"; }
- ListElement{ longitude: "3"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "3"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "3"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "3"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "3"; latitude: "29"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "3"; latitude: "31"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "3"; latitude: "33"; height: "100"; }
- ListElement{ longitude: "3"; latitude: "34"; height: "99"; }
- ListElement{ longitude: "3"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "3"; latitude: "36"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "3"; latitude: "38"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "40"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "41"; height: "116"; }
- ListElement{ longitude: "3"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "43"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "3"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "3"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "3"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "3"; latitude: "49"; height: "139"; }
- ListElement{ longitude: "3"; latitude: "50"; height: "139"; }
- ListElement{ longitude: "3"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "3"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "3"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "57"; height: "128"; }
- ListElement{ longitude: "3"; latitude: "58"; height: "98"; }
- ListElement{ longitude: "3"; latitude: "59"; height: "78"; }
- ListElement{ longitude: "3"; latitude: "60"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "61"; height: "112"; }
- ListElement{ longitude: "3"; latitude: "62"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "63"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "64"; height: "105"; }
- ListElement{ longitude: "3"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "3"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "3"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "70"; height: "123"; }
- ListElement{ longitude: "3"; latitude: "71"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "72"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "3"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "77"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "78"; height: "113"; }
- ListElement{ longitude: "3"; latitude: "79"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "80"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "81"; height: "130"; }
- ListElement{ longitude: "3"; latitude: "82"; height: "133"; }
- ListElement{ longitude: "3"; latitude: "83"; height: "131"; }
- ListElement{ longitude: "3"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "3"; latitude: "86"; height: "66"; }
- ListElement{ longitude: "3"; latitude: "87"; height: "109"; }
- ListElement{ longitude: "3"; latitude: "88"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "89"; height: "142"; }
- ListElement{ longitude: "3"; latitude: "90"; height: "144"; }
- ListElement{ longitude: "3"; latitude: "91"; height: "144"; }
- ListElement{ longitude: "3"; latitude: "92"; height: "141"; }
- ListElement{ longitude: "3"; latitude: "93"; height: "137"; }
- ListElement{ longitude: "3"; latitude: "94"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "95"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "96"; height: "139"; }
- ListElement{ longitude: "3"; latitude: "97"; height: "142"; }
- ListElement{ longitude: "3"; latitude: "98"; height: "142"; }
- ListElement{ longitude: "3"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "4"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "4"; latitude: "1"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "2"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "3"; height: "106"; }
- ListElement{ longitude: "4"; latitude: "4"; height: "110"; }
- ListElement{ longitude: "4"; latitude: "5"; height: "113"; }
- ListElement{ longitude: "4"; latitude: "6"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "4"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "4"; latitude: "10"; height: "134"; }
- ListElement{ longitude: "4"; latitude: "11"; height: "135"; }
- ListElement{ longitude: "4"; latitude: "12"; height: "135"; }
- ListElement{ longitude: "4"; latitude: "13"; height: "135"; }
- ListElement{ longitude: "4"; latitude: "14"; height: "133"; }
- ListElement{ longitude: "4"; latitude: "15"; height: "131"; }
- ListElement{ longitude: "4"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "4"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "4"; latitude: "18"; height: "111"; }
- ListElement{ longitude: "4"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "20"; height: "100"; }
- ListElement{ longitude: "4"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "4"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "4"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "4"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "4"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "4"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "27"; height: "131"; }
- ListElement{ longitude: "4"; latitude: "28"; height: "108"; }
- ListElement{ longitude: "4"; latitude: "29"; height: "103"; }
- ListElement{ longitude: "4"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "31"; height: "114"; }
- ListElement{ longitude: "4"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "4"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "4"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "4"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "4"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "4"; latitude: "37"; height: "112"; }
- ListElement{ longitude: "4"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "4"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "40"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "41"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "4"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "4"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "4"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "4"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "4"; latitude: "48"; height: "137"; }
- ListElement{ longitude: "4"; latitude: "49"; height: "147"; }
- ListElement{ longitude: "4"; latitude: "50"; height: "143"; }
- ListElement{ longitude: "4"; latitude: "51"; height: "143"; }
- ListElement{ longitude: "4"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "4"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "4"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "4"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "57"; height: "132"; }
- ListElement{ longitude: "4"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "4"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "4"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "61"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "62"; height: "111"; }
- ListElement{ longitude: "4"; latitude: "63"; height: "109"; }
- ListElement{ longitude: "4"; latitude: "64"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "4"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "4"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "68"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "70"; height: "127"; }
- ListElement{ longitude: "4"; latitude: "71"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "72"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "73"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "74"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "75"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "4"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "78"; height: "112"; }
- ListElement{ longitude: "4"; latitude: "79"; height: "115"; }
- ListElement{ longitude: "4"; latitude: "80"; height: "120"; }
- ListElement{ longitude: "4"; latitude: "81"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "82"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "83"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "4"; latitude: "85"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "4"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "4"; latitude: "88"; height: "141"; }
- ListElement{ longitude: "4"; latitude: "89"; height: "147"; }
- ListElement{ longitude: "4"; latitude: "90"; height: "148"; }
- ListElement{ longitude: "4"; latitude: "91"; height: "147"; }
- ListElement{ longitude: "4"; latitude: "92"; height: "144"; }
- ListElement{ longitude: "4"; latitude: "93"; height: "141"; }
- ListElement{ longitude: "4"; latitude: "94"; height: "138"; }
- ListElement{ longitude: "4"; latitude: "95"; height: "138"; }
- ListElement{ longitude: "4"; latitude: "96"; height: "141"; }
- ListElement{ longitude: "4"; latitude: "97"; height: "145"; }
- ListElement{ longitude: "4"; latitude: "98"; height: "143"; }
- ListElement{ longitude: "4"; latitude: "99"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "5"; latitude: "1"; height: "109"; }
- ListElement{ longitude: "5"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "5"; latitude: "3"; height: "107"; }
- ListElement{ longitude: "5"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "5"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "6"; height: "122"; }
- ListElement{ longitude: "5"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "5"; latitude: "8"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "9"; height: "133"; }
- ListElement{ longitude: "5"; latitude: "10"; height: "135"; }
- ListElement{ longitude: "5"; latitude: "11"; height: "136"; }
- ListElement{ longitude: "5"; latitude: "12"; height: "137"; }
- ListElement{ longitude: "5"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "5"; latitude: "15"; height: "134"; }
- ListElement{ longitude: "5"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "17"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "5"; latitude: "20"; height: "102"; }
- ListElement{ longitude: "5"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "5"; latitude: "22"; height: "105"; }
- ListElement{ longitude: "5"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "5"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "26"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "27"; height: "133"; }
- ListElement{ longitude: "5"; latitude: "28"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "30"; height: "66"; }
- ListElement{ longitude: "5"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "5"; latitude: "32"; height: "106"; }
- ListElement{ longitude: "5"; latitude: "33"; height: "100"; }
- ListElement{ longitude: "5"; latitude: "34"; height: "100"; }
- ListElement{ longitude: "5"; latitude: "35"; height: "104"; }
- ListElement{ longitude: "5"; latitude: "36"; height: "107"; }
- ListElement{ longitude: "5"; latitude: "37"; height: "110"; }
- ListElement{ longitude: "5"; latitude: "38"; height: "112"; }
- ListElement{ longitude: "5"; latitude: "39"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "40"; height: "114"; }
- ListElement{ longitude: "5"; latitude: "41"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "5"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "48"; height: "137"; }
- ListElement{ longitude: "5"; latitude: "49"; height: "139"; }
- ListElement{ longitude: "5"; latitude: "50"; height: "77"; }
- ListElement{ longitude: "5"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "5"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "5"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "5"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "58"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "5"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "5"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "68"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "71"; height: "131"; }
- ListElement{ longitude: "5"; latitude: "72"; height: "133"; }
- ListElement{ longitude: "5"; latitude: "73"; height: "128"; }
- ListElement{ longitude: "5"; latitude: "74"; height: "107"; }
- ListElement{ longitude: "5"; latitude: "75"; height: "74"; }
- ListElement{ longitude: "5"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "78"; height: "109"; }
- ListElement{ longitude: "5"; latitude: "79"; height: "110"; }
- ListElement{ longitude: "5"; latitude: "80"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "81"; height: "118"; }
- ListElement{ longitude: "5"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "5"; latitude: "83"; height: "124"; }
- ListElement{ longitude: "5"; latitude: "84"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "5"; latitude: "86"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "87"; height: "135"; }
- ListElement{ longitude: "5"; latitude: "88"; height: "140"; }
- ListElement{ longitude: "5"; latitude: "89"; height: "146"; }
- ListElement{ longitude: "5"; latitude: "90"; height: "150"; }
- ListElement{ longitude: "5"; latitude: "91"; height: "148"; }
- ListElement{ longitude: "5"; latitude: "92"; height: "146"; }
- ListElement{ longitude: "5"; latitude: "93"; height: "142"; }
- ListElement{ longitude: "5"; latitude: "94"; height: "140"; }
- ListElement{ longitude: "5"; latitude: "95"; height: "140"; }
- ListElement{ longitude: "5"; latitude: "96"; height: "142"; }
- ListElement{ longitude: "5"; latitude: "97"; height: "144"; }
- ListElement{ longitude: "5"; latitude: "98"; height: "145"; }
- ListElement{ longitude: "5"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "6"; latitude: "0"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "1"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "2"; height: "110"; }
- ListElement{ longitude: "6"; latitude: "3"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "4"; height: "116"; }
- ListElement{ longitude: "6"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "6"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "7"; height: "129"; }
- ListElement{ longitude: "6"; latitude: "8"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "9"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "10"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "11"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "12"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "6"; latitude: "14"; height: "137"; }
- ListElement{ longitude: "6"; latitude: "15"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "16"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "17"; height: "128"; }
- ListElement{ longitude: "6"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "6"; latitude: "19"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "20"; height: "105"; }
- ListElement{ longitude: "6"; latitude: "21"; height: "106"; }
- ListElement{ longitude: "6"; latitude: "22"; height: "107"; }
- ListElement{ longitude: "6"; latitude: "23"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "6"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "26"; height: "78"; }
- ListElement{ longitude: "6"; latitude: "27"; height: "131"; }
- ListElement{ longitude: "6"; latitude: "28"; height: "130"; }
- ListElement{ longitude: "6"; latitude: "29"; height: "129"; }
- ListElement{ longitude: "6"; latitude: "30"; height: "103"; }
- ListElement{ longitude: "6"; latitude: "31"; height: "113"; }
- ListElement{ longitude: "6"; latitude: "32"; height: "108"; }
- ListElement{ longitude: "6"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "6"; latitude: "34"; height: "103"; }
- ListElement{ longitude: "6"; latitude: "35"; height: "107"; }
- ListElement{ longitude: "6"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "6"; latitude: "37"; height: "113"; }
- ListElement{ longitude: "6"; latitude: "38"; height: "112"; }
- ListElement{ longitude: "6"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "40"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "6"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "6"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "6"; latitude: "47"; height: "131"; }
- ListElement{ longitude: "6"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "6"; latitude: "49"; height: "141"; }
- ListElement{ longitude: "6"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "51"; height: "137"; }
- ListElement{ longitude: "6"; latitude: "52"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "6"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "6"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "6"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "6"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "6"; latitude: "63"; height: "118"; }
- ListElement{ longitude: "6"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "6"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "6"; latitude: "66"; height: "119"; }
- ListElement{ longitude: "6"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "6"; latitude: "70"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "71"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "72"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "73"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "74"; height: "131"; }
- ListElement{ longitude: "6"; latitude: "75"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "6"; latitude: "77"; height: "112"; }
- ListElement{ longitude: "6"; latitude: "78"; height: "106"; }
- ListElement{ longitude: "6"; latitude: "79"; height: "106"; }
- ListElement{ longitude: "6"; latitude: "80"; height: "107"; }
- ListElement{ longitude: "6"; latitude: "81"; height: "110"; }
- ListElement{ longitude: "6"; latitude: "82"; height: "114"; }
- ListElement{ longitude: "6"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "6"; latitude: "84"; height: "92"; }
- ListElement{ longitude: "6"; latitude: "85"; height: "105"; }
- ListElement{ longitude: "6"; latitude: "86"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "87"; height: "130"; }
- ListElement{ longitude: "6"; latitude: "88"; height: "138"; }
- ListElement{ longitude: "6"; latitude: "89"; height: "142"; }
- ListElement{ longitude: "6"; latitude: "90"; height: "147"; }
- ListElement{ longitude: "6"; latitude: "91"; height: "147"; }
- ListElement{ longitude: "6"; latitude: "92"; height: "142"; }
- ListElement{ longitude: "6"; latitude: "93"; height: "139"; }
- ListElement{ longitude: "6"; latitude: "94"; height: "138"; }
- ListElement{ longitude: "6"; latitude: "95"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "96"; height: "141"; }
- ListElement{ longitude: "6"; latitude: "97"; height: "142"; }
- ListElement{ longitude: "6"; latitude: "98"; height: "146"; }
- ListElement{ longitude: "6"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "7"; latitude: "0"; height: "117"; }
- ListElement{ longitude: "7"; latitude: "1"; height: "111"; }
- ListElement{ longitude: "7"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "7"; latitude: "3"; height: "112"; }
- ListElement{ longitude: "7"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "7"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "6"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "7"; height: "131"; }
- ListElement{ longitude: "7"; latitude: "8"; height: "133"; }
- ListElement{ longitude: "7"; latitude: "9"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "7"; latitude: "11"; height: "134"; }
- ListElement{ longitude: "7"; latitude: "12"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "13"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "14"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "15"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "16"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "17"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "7"; latitude: "19"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "20"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "21"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "22"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "7"; latitude: "24"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "7"; latitude: "26"; height: "105"; }
- ListElement{ longitude: "7"; latitude: "27"; height: "131"; }
- ListElement{ longitude: "7"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "7"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "32"; height: "110"; }
- ListElement{ longitude: "7"; latitude: "33"; height: "108"; }
- ListElement{ longitude: "7"; latitude: "34"; height: "107"; }
- ListElement{ longitude: "7"; latitude: "35"; height: "113"; }
- ListElement{ longitude: "7"; latitude: "36"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "37"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "7"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "7"; latitude: "40"; height: "116"; }
- ListElement{ longitude: "7"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "7"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "7"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "46"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "7"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "50"; height: "137"; }
- ListElement{ longitude: "7"; latitude: "51"; height: "133"; }
- ListElement{ longitude: "7"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "7"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "7"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "7"; latitude: "65"; height: "122"; }
- ListElement{ longitude: "7"; latitude: "66"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "68"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "69"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "71"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "72"; height: "135"; }
- ListElement{ longitude: "7"; latitude: "73"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "76"; height: "118"; }
- ListElement{ longitude: "7"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "7"; latitude: "78"; height: "103"; }
- ListElement{ longitude: "7"; latitude: "79"; height: "101"; }
- ListElement{ longitude: "7"; latitude: "80"; height: "103"; }
- ListElement{ longitude: "7"; latitude: "81"; height: "105"; }
- ListElement{ longitude: "7"; latitude: "82"; height: "107"; }
- ListElement{ longitude: "7"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "7"; latitude: "84"; height: "104"; }
- ListElement{ longitude: "7"; latitude: "85"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "7"; latitude: "87"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "89"; height: "139"; }
- ListElement{ longitude: "7"; latitude: "90"; height: "143"; }
- ListElement{ longitude: "7"; latitude: "91"; height: "146"; }
- ListElement{ longitude: "7"; latitude: "92"; height: "143"; }
- ListElement{ longitude: "7"; latitude: "93"; height: "139"; }
- ListElement{ longitude: "7"; latitude: "94"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "95"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "96"; height: "141"; }
- ListElement{ longitude: "7"; latitude: "97"; height: "143"; }
- ListElement{ longitude: "7"; latitude: "98"; height: "147"; }
- ListElement{ longitude: "7"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "8"; latitude: "1"; height: "113"; }
- ListElement{ longitude: "8"; latitude: "2"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "3"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "8"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "7"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "8"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "9"; height: "135"; }
- ListElement{ longitude: "8"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "11"; height: "135"; }
- ListElement{ longitude: "8"; latitude: "12"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "13"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "14"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "15"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "16"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "17"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "19"; height: "118"; }
- ListElement{ longitude: "8"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "21"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "22"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "8"; latitude: "24"; height: "123"; }
- ListElement{ longitude: "8"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "26"; height: "129"; }
- ListElement{ longitude: "8"; latitude: "27"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "8"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "8"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "8"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "33"; height: "113"; }
- ListElement{ longitude: "8"; latitude: "34"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "35"; height: "119"; }
- ListElement{ longitude: "8"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "8"; latitude: "37"; height: "117"; }
- ListElement{ longitude: "8"; latitude: "38"; height: "118"; }
- ListElement{ longitude: "8"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "8"; latitude: "40"; height: "118"; }
- ListElement{ longitude: "8"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "8"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "8"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "45"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "46"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "52"; height: "129"; }
- ListElement{ longitude: "8"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "8"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "8"; latitude: "63"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "8"; latitude: "65"; height: "129"; }
- ListElement{ longitude: "8"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "8"; latitude: "67"; height: "107"; }
- ListElement{ longitude: "8"; latitude: "68"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "69"; height: "131"; }
- ListElement{ longitude: "8"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "72"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "73"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "75"; height: "117"; }
- ListElement{ longitude: "8"; latitude: "76"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "8"; latitude: "78"; height: "100"; }
- ListElement{ longitude: "8"; latitude: "79"; height: "99"; }
- ListElement{ longitude: "8"; latitude: "80"; height: "99"; }
- ListElement{ longitude: "8"; latitude: "81"; height: "102"; }
- ListElement{ longitude: "8"; latitude: "82"; height: "101"; }
- ListElement{ longitude: "8"; latitude: "83"; height: "105"; }
- ListElement{ longitude: "8"; latitude: "84"; height: "107"; }
- ListElement{ longitude: "8"; latitude: "85"; height: "103"; }
- ListElement{ longitude: "8"; latitude: "86"; height: "110"; }
- ListElement{ longitude: "8"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "8"; latitude: "88"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "89"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "90"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "91"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "92"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "93"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "94"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "95"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "96"; height: "135"; }
- ListElement{ longitude: "8"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "98"; height: "143"; }
- ListElement{ longitude: "8"; latitude: "99"; height: "137"; }
- ListElement{ longitude: "9"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "9"; latitude: "2"; height: "118"; }
- ListElement{ longitude: "9"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "5"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "6"; height: "133"; }
- ListElement{ longitude: "9"; latitude: "7"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "8"; height: "133"; }
- ListElement{ longitude: "9"; latitude: "9"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "10"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "11"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "13"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "14"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "15"; height: "137"; }
- ListElement{ longitude: "9"; latitude: "16"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "21"; height: "117"; }
- ListElement{ longitude: "9"; latitude: "22"; height: "116"; }
- ListElement{ longitude: "9"; latitude: "23"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "9"; latitude: "32"; height: "116"; }
- ListElement{ longitude: "9"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "9"; latitude: "34"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "9"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "38"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "9"; latitude: "43"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "45"; height: "135"; }
- ListElement{ longitude: "9"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "9"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "9"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "9"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "9"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "9"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "9"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "9"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "9"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "9"; latitude: "64"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "65"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "66"; height: "107"; }
- ListElement{ longitude: "9"; latitude: "67"; height: "103"; }
- ListElement{ longitude: "9"; latitude: "68"; height: "105"; }
- ListElement{ longitude: "9"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "9"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "9"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "72"; height: "140"; }
- ListElement{ longitude: "9"; latitude: "73"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "74"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "9"; latitude: "77"; height: "113"; }
- ListElement{ longitude: "9"; latitude: "78"; height: "102"; }
- ListElement{ longitude: "9"; latitude: "79"; height: "99"; }
- ListElement{ longitude: "9"; latitude: "80"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "81"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "82"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "83"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "84"; height: "96"; }
- ListElement{ longitude: "9"; latitude: "85"; height: "98"; }
- ListElement{ longitude: "9"; latitude: "86"; height: "106"; }
- ListElement{ longitude: "9"; latitude: "87"; height: "112"; }
- ListElement{ longitude: "9"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "89"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "90"; height: "128"; }
- ListElement{ longitude: "9"; latitude: "91"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "92"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "93"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "94"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "95"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "9"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "9"; latitude: "99"; height: "139"; }
- ListElement{ longitude: "10"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "10"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "4"; height: "129"; }
- ListElement{ longitude: "10"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "10"; latitude: "7"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "8"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "10"; latitude: "11"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "13"; height: "134"; }
- ListElement{ longitude: "10"; latitude: "14"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "15"; height: "133"; }
- ListElement{ longitude: "10"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "10"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "10"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "10"; latitude: "19"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "10"; latitude: "21"; height: "101"; }
- ListElement{ longitude: "10"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "10"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "10"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "10"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "10"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "10"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "10"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "10"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "10"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "10"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "43"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "44"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "45"; height: "138"; }
- ListElement{ longitude: "10"; latitude: "46"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "47"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "10"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "10"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "59"; height: "126"; }
- ListElement{ longitude: "10"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "10"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "63"; height: "115"; }
- ListElement{ longitude: "10"; latitude: "64"; height: "133"; }
- ListElement{ longitude: "10"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "10"; latitude: "66"; height: "115"; }
- ListElement{ longitude: "10"; latitude: "67"; height: "105"; }
- ListElement{ longitude: "10"; latitude: "68"; height: "98"; }
- ListElement{ longitude: "10"; latitude: "69"; height: "106"; }
- ListElement{ longitude: "10"; latitude: "70"; height: "132"; }
- ListElement{ longitude: "10"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "10"; latitude: "72"; height: "139"; }
- ListElement{ longitude: "10"; latitude: "73"; height: "137"; }
- ListElement{ longitude: "10"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "76"; height: "116"; }
- ListElement{ longitude: "10"; latitude: "77"; height: "107"; }
- ListElement{ longitude: "10"; latitude: "78"; height: "104"; }
- ListElement{ longitude: "10"; latitude: "79"; height: "104"; }
- ListElement{ longitude: "10"; latitude: "80"; height: "104"; }
- ListElement{ longitude: "10"; latitude: "81"; height: "105"; }
- ListElement{ longitude: "10"; latitude: "82"; height: "102"; }
- ListElement{ longitude: "10"; latitude: "83"; height: "100"; }
- ListElement{ longitude: "10"; latitude: "84"; height: "99"; }
- ListElement{ longitude: "10"; latitude: "85"; height: "102"; }
- ListElement{ longitude: "10"; latitude: "86"; height: "101"; }
- ListElement{ longitude: "10"; latitude: "87"; height: "110"; }
- ListElement{ longitude: "10"; latitude: "88"; height: "114"; }
- ListElement{ longitude: "10"; latitude: "89"; height: "121"; }
- ListElement{ longitude: "10"; latitude: "90"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "91"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "92"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "93"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "10"; latitude: "95"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "10"; latitude: "98"; height: "139"; }
- ListElement{ longitude: "10"; latitude: "99"; height: "140"; }
- ListElement{ longitude: "11"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "3"; height: "129"; }
- ListElement{ longitude: "11"; latitude: "4"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "5"; height: "132"; }
- ListElement{ longitude: "11"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "11"; latitude: "7"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "11"; height: "133"; }
- ListElement{ longitude: "11"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "13"; height: "134"; }
- ListElement{ longitude: "11"; latitude: "14"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "15"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "16"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "17"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "19"; height: "124"; }
- ListElement{ longitude: "11"; latitude: "20"; height: "100"; }
- ListElement{ longitude: "11"; latitude: "21"; height: "86"; }
- ListElement{ longitude: "11"; latitude: "22"; height: "90"; }
- ListElement{ longitude: "11"; latitude: "23"; height: "104"; }
- ListElement{ longitude: "11"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "11"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "11"; latitude: "26"; height: "115"; }
- ListElement{ longitude: "11"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "11"; latitude: "28"; height: "117"; }
- ListElement{ longitude: "11"; latitude: "29"; height: "118"; }
- ListElement{ longitude: "11"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "11"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "11"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "11"; latitude: "33"; height: "120"; }
- ListElement{ longitude: "11"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "11"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "43"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "44"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "45"; height: "138"; }
- ListElement{ longitude: "11"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "47"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "11"; latitude: "52"; height: "132"; }
- ListElement{ longitude: "11"; latitude: "53"; height: "129"; }
- ListElement{ longitude: "11"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "11"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "11"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "11"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "11"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "64"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "65"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "66"; height: "103"; }
- ListElement{ longitude: "11"; latitude: "67"; height: "110"; }
- ListElement{ longitude: "11"; latitude: "68"; height: "102"; }
- ListElement{ longitude: "11"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "11"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "11"; latitude: "72"; height: "137"; }
- ListElement{ longitude: "11"; latitude: "73"; height: "133"; }
- ListElement{ longitude: "11"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "11"; latitude: "76"; height: "114"; }
- ListElement{ longitude: "11"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "11"; latitude: "78"; height: "109"; }
- ListElement{ longitude: "11"; latitude: "79"; height: "111"; }
- ListElement{ longitude: "11"; latitude: "80"; height: "111"; }
- ListElement{ longitude: "11"; latitude: "81"; height: "111"; }
- ListElement{ longitude: "11"; latitude: "82"; height: "103"; }
- ListElement{ longitude: "11"; latitude: "83"; height: "102"; }
- ListElement{ longitude: "11"; latitude: "84"; height: "98"; }
- ListElement{ longitude: "11"; latitude: "85"; height: "100"; }
- ListElement{ longitude: "11"; latitude: "86"; height: "102"; }
- ListElement{ longitude: "11"; latitude: "87"; height: "104"; }
- ListElement{ longitude: "11"; latitude: "88"; height: "110"; }
- ListElement{ longitude: "11"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "11"; latitude: "90"; height: "119"; }
- ListElement{ longitude: "11"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "92"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "93"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "95"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "96"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "11"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "11"; latitude: "99"; height: "142"; }
- ListElement{ longitude: "12"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "12"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "12"; latitude: "2"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "3"; height: "134"; }
- ListElement{ longitude: "12"; latitude: "4"; height: "136"; }
- ListElement{ longitude: "12"; latitude: "5"; height: "134"; }
- ListElement{ longitude: "12"; latitude: "6"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "7"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "12"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "13"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "14"; height: "132"; }
- ListElement{ longitude: "12"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "12"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "20"; height: "98"; }
- ListElement{ longitude: "12"; latitude: "21"; height: "84"; }
- ListElement{ longitude: "12"; latitude: "22"; height: "87"; }
- ListElement{ longitude: "12"; latitude: "23"; height: "103"; }
- ListElement{ longitude: "12"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "12"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "12"; latitude: "28"; height: "113"; }
- ListElement{ longitude: "12"; latitude: "29"; height: "114"; }
- ListElement{ longitude: "12"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "12"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "12"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "12"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "12"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "43"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "12"; latitude: "45"; height: "137"; }
- ListElement{ longitude: "12"; latitude: "46"; height: "136"; }
- ListElement{ longitude: "12"; latitude: "47"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "51"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "54"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "12"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "12"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "12"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "12"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "65"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "66"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "67"; height: "118"; }
- ListElement{ longitude: "12"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "69"; height: "123"; }
- ListElement{ longitude: "12"; latitude: "70"; height: "128"; }
- ListElement{ longitude: "12"; latitude: "71"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "72"; height: "132"; }
- ListElement{ longitude: "12"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "74"; height: "111"; }
- ListElement{ longitude: "12"; latitude: "75"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "76"; height: "113"; }
- ListElement{ longitude: "12"; latitude: "77"; height: "112"; }
- ListElement{ longitude: "12"; latitude: "78"; height: "114"; }
- ListElement{ longitude: "12"; latitude: "79"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "80"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "12"; latitude: "82"; height: "110"; }
- ListElement{ longitude: "12"; latitude: "83"; height: "105"; }
- ListElement{ longitude: "12"; latitude: "84"; height: "102"; }
- ListElement{ longitude: "12"; latitude: "85"; height: "101"; }
- ListElement{ longitude: "12"; latitude: "86"; height: "102"; }
- ListElement{ longitude: "12"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "12"; latitude: "88"; height: "108"; }
- ListElement{ longitude: "12"; latitude: "89"; height: "111"; }
- ListElement{ longitude: "12"; latitude: "90"; height: "116"; }
- ListElement{ longitude: "12"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "12"; latitude: "93"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "12"; latitude: "99"; height: "142"; }
- ListElement{ longitude: "13"; latitude: "0"; height: "108"; }
- ListElement{ longitude: "13"; latitude: "1"; height: "113"; }
- ListElement{ longitude: "13"; latitude: "2"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "3"; height: "136"; }
- ListElement{ longitude: "13"; latitude: "4"; height: "137"; }
- ListElement{ longitude: "13"; latitude: "5"; height: "136"; }
- ListElement{ longitude: "13"; latitude: "6"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "7"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "12"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "13"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "14"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "20"; height: "106"; }
- ListElement{ longitude: "13"; latitude: "21"; height: "95"; }
- ListElement{ longitude: "13"; latitude: "22"; height: "98"; }
- ListElement{ longitude: "13"; latitude: "23"; height: "111"; }
- ListElement{ longitude: "13"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "13"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "13"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "13"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "13"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "13"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "38"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "45"; height: "133"; }
- ListElement{ longitude: "13"; latitude: "46"; height: "134"; }
- ListElement{ longitude: "13"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "13"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "13"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "13"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "13"; latitude: "52"; height: "135"; }
- ListElement{ longitude: "13"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "54"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "13"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "13"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "13"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "13"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "63"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "66"; height: "121"; }
- ListElement{ longitude: "13"; latitude: "67"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "13"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "13"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "71"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "74"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "75"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "76"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "77"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "78"; height: "117"; }
- ListElement{ longitude: "13"; latitude: "79"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "80"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "82"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "83"; height: "110"; }
- ListElement{ longitude: "13"; latitude: "84"; height: "103"; }
- ListElement{ longitude: "13"; latitude: "85"; height: "103"; }
- ListElement{ longitude: "13"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "13"; latitude: "87"; height: "104"; }
- ListElement{ longitude: "13"; latitude: "88"; height: "106"; }
- ListElement{ longitude: "13"; latitude: "89"; height: "109"; }
- ListElement{ longitude: "13"; latitude: "90"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "93"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "13"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "13"; latitude: "99"; height: "140"; }
- ListElement{ longitude: "14"; latitude: "0"; height: "103"; }
- ListElement{ longitude: "14"; latitude: "1"; height: "99"; }
- ListElement{ longitude: "14"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "3"; height: "137"; }
- ListElement{ longitude: "14"; latitude: "4"; height: "134"; }
- ListElement{ longitude: "14"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "6"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "7"; height: "128"; }
- ListElement{ longitude: "14"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "13"; height: "132"; }
- ListElement{ longitude: "14"; latitude: "14"; height: "132"; }
- ListElement{ longitude: "14"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "20"; height: "116"; }
- ListElement{ longitude: "14"; latitude: "21"; height: "115"; }
- ListElement{ longitude: "14"; latitude: "22"; height: "116"; }
- ListElement{ longitude: "14"; latitude: "23"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "25"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "26"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "14"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "14"; latitude: "29"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "30"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "14"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "33"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "34"; height: "116"; }
- ListElement{ longitude: "14"; latitude: "35"; height: "119"; }
- ListElement{ longitude: "14"; latitude: "36"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "14"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "47"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "14"; latitude: "53"; height: "132"; }
- ListElement{ longitude: "14"; latitude: "54"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "55"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "59"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "60"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "65"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "66"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "69"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "70"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "73"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "14"; latitude: "76"; height: "113"; }
- ListElement{ longitude: "14"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "14"; latitude: "78"; height: "113"; }
- ListElement{ longitude: "14"; latitude: "79"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "80"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "81"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "14"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "14"; latitude: "84"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "14"; latitude: "86"; height: "104"; }
- ListElement{ longitude: "14"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "14"; latitude: "88"; height: "105"; }
- ListElement{ longitude: "14"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "90"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "91"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "92"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "93"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "96"; height: "128"; }
- ListElement{ longitude: "14"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "14"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "14"; latitude: "99"; height: "136"; }
- ListElement{ longitude: "15"; latitude: "0"; height: "96"; }
- ListElement{ longitude: "15"; latitude: "1"; height: "98"; }
- ListElement{ longitude: "15"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "3"; height: "138"; }
- ListElement{ longitude: "15"; latitude: "4"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "15"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "7"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "15"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "15"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "15"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "13"; height: "131"; }
- ListElement{ longitude: "15"; latitude: "14"; height: "133"; }
- ListElement{ longitude: "15"; latitude: "15"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "15"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "15"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "15"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "15"; latitude: "28"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "15"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "33"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "34"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "35"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "15"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "15"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "48"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "15"; latitude: "53"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "54"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "55"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "15"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "15"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "60"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "64"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "68"; height: "115"; }
- ListElement{ longitude: "15"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "15"; latitude: "70"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "73"; height: "115"; }
- ListElement{ longitude: "15"; latitude: "74"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "75"; height: "111"; }
- ListElement{ longitude: "15"; latitude: "76"; height: "110"; }
- ListElement{ longitude: "15"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "15"; latitude: "78"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "79"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "80"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "81"; height: "123"; }
- ListElement{ longitude: "15"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "83"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "84"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "15"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "15"; latitude: "87"; height: "104"; }
- ListElement{ longitude: "15"; latitude: "88"; height: "101"; }
- ListElement{ longitude: "15"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "15"; latitude: "90"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "15"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "15"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "98"; height: "133"; }
- ListElement{ longitude: "15"; latitude: "99"; height: "132"; }
- ListElement{ longitude: "16"; latitude: "0"; height: "99"; }
- ListElement{ longitude: "16"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "16"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "3"; height: "135"; }
- ListElement{ longitude: "16"; latitude: "4"; height: "139"; }
- ListElement{ longitude: "16"; latitude: "5"; height: "138"; }
- ListElement{ longitude: "16"; latitude: "6"; height: "133"; }
- ListElement{ longitude: "16"; latitude: "7"; height: "129"; }
- ListElement{ longitude: "16"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "16"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "16"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "13"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "14"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "16"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "16"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "16"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "32"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "33"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "34"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "35"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "36"; height: "118"; }
- ListElement{ longitude: "16"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "16"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "16"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "16"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "16"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "50"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "16"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "16"; latitude: "55"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "56"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "16"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "60"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "61"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "16"; latitude: "64"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "66"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "16"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "16"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "72"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "75"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "16"; latitude: "78"; height: "98"; }
- ListElement{ longitude: "16"; latitude: "79"; height: "91"; }
- ListElement{ longitude: "16"; latitude: "80"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "81"; height: "122"; }
- ListElement{ longitude: "16"; latitude: "82"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "84"; height: "118"; }
- ListElement{ longitude: "16"; latitude: "85"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "16"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "16"; latitude: "88"; height: "90"; }
- ListElement{ longitude: "16"; latitude: "89"; height: "106"; }
- ListElement{ longitude: "16"; latitude: "90"; height: "110"; }
- ListElement{ longitude: "16"; latitude: "91"; height: "113"; }
- ListElement{ longitude: "16"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "16"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "96"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "97"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "98"; height: "132"; }
- ListElement{ longitude: "16"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "0"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "1"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "2"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "3"; height: "136"; }
- ListElement{ longitude: "17"; latitude: "4"; height: "138"; }
- ListElement{ longitude: "17"; latitude: "5"; height: "132"; }
- ListElement{ longitude: "17"; latitude: "6"; height: "134"; }
- ListElement{ longitude: "17"; latitude: "7"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "17"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "17"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "17"; latitude: "17"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "17"; latitude: "20"; height: "116"; }
- ListElement{ longitude: "17"; latitude: "21"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "25"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "26"; height: "115"; }
- ListElement{ longitude: "17"; latitude: "27"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "29"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "34"; height: "115"; }
- ListElement{ longitude: "17"; latitude: "35"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "17"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "17"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "17"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "17"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "54"; height: "134"; }
- ListElement{ longitude: "17"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "17"; latitude: "56"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "60"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "61"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "17"; latitude: "63"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "64"; height: "113"; }
- ListElement{ longitude: "17"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "17"; latitude: "67"; height: "111"; }
- ListElement{ longitude: "17"; latitude: "68"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "70"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "72"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "73"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "74"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "75"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "76"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "17"; latitude: "78"; height: "106"; }
- ListElement{ longitude: "17"; latitude: "79"; height: "101"; }
- ListElement{ longitude: "17"; latitude: "80"; height: "115"; }
- ListElement{ longitude: "17"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "82"; height: "108"; }
- ListElement{ longitude: "17"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "17"; latitude: "84"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "85"; height: "112"; }
- ListElement{ longitude: "17"; latitude: "86"; height: "108"; }
- ListElement{ longitude: "17"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "17"; latitude: "88"; height: "104"; }
- ListElement{ longitude: "17"; latitude: "89"; height: "105"; }
- ListElement{ longitude: "17"; latitude: "90"; height: "106"; }
- ListElement{ longitude: "17"; latitude: "91"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "92"; height: "111"; }
- ListElement{ longitude: "17"; latitude: "93"; height: "113"; }
- ListElement{ longitude: "17"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "17"; latitude: "95"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "96"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "17"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "0"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "2"; height: "131"; }
- ListElement{ longitude: "18"; latitude: "3"; height: "133"; }
- ListElement{ longitude: "18"; latitude: "4"; height: "135"; }
- ListElement{ longitude: "18"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "6"; height: "133"; }
- ListElement{ longitude: "18"; latitude: "7"; height: "130"; }
- ListElement{ longitude: "18"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "18"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "18"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "18"; latitude: "12"; height: "125"; }
- ListElement{ longitude: "18"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "16"; height: "112"; }
- ListElement{ longitude: "18"; latitude: "17"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "18"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "21"; height: "117"; }
- ListElement{ longitude: "18"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "18"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "18"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "29"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "18"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "18"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "35"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "18"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "40"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "18"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "18"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "51"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "52"; height: "126"; }
- ListElement{ longitude: "18"; latitude: "53"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "18"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "18"; latitude: "56"; height: "130"; }
- ListElement{ longitude: "18"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "18"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "66"; height: "114"; }
- ListElement{ longitude: "18"; latitude: "67"; height: "107"; }
- ListElement{ longitude: "18"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "18"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "70"; height: "108"; }
- ListElement{ longitude: "18"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "72"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "73"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "74"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "75"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "78"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "79"; height: "91"; }
- ListElement{ longitude: "18"; latitude: "80"; height: "106"; }
- ListElement{ longitude: "18"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "18"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "83"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "18"; latitude: "85"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "86"; height: "104"; }
- ListElement{ longitude: "18"; latitude: "87"; height: "101"; }
- ListElement{ longitude: "18"; latitude: "88"; height: "102"; }
- ListElement{ longitude: "18"; latitude: "89"; height: "103"; }
- ListElement{ longitude: "18"; latitude: "90"; height: "104"; }
- ListElement{ longitude: "18"; latitude: "91"; height: "107"; }
- ListElement{ longitude: "18"; latitude: "92"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "93"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "94"; height: "113"; }
- ListElement{ longitude: "18"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "97"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "18"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "0"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "4"; height: "134"; }
- ListElement{ longitude: "19"; latitude: "5"; height: "134"; }
- ListElement{ longitude: "19"; latitude: "6"; height: "131"; }
- ListElement{ longitude: "19"; latitude: "7"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "19"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "12"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "13"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "14"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "15"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "16"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "17"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "18"; height: "115"; }
- ListElement{ longitude: "19"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "19"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "19"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "19"; latitude: "23"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "24"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "27"; height: "117"; }
- ListElement{ longitude: "19"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "37"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "39"; height: "130"; }
- ListElement{ longitude: "19"; latitude: "40"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "19"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "19"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "52"; height: "123"; }
- ListElement{ longitude: "19"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "19"; latitude: "54"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "19"; latitude: "56"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "19"; latitude: "58"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "59"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "19"; latitude: "61"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "62"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "19"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "19"; latitude: "65"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "19"; latitude: "67"; height: "108"; }
- ListElement{ longitude: "19"; latitude: "68"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "19"; latitude: "70"; height: "107"; }
- ListElement{ longitude: "19"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "72"; height: "112"; }
- ListElement{ longitude: "19"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "19"; latitude: "74"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "75"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "78"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "79"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "80"; height: "109"; }
- ListElement{ longitude: "19"; latitude: "81"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "82"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "84"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "85"; height: "112"; }
- ListElement{ longitude: "19"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "87"; height: "102"; }
- ListElement{ longitude: "19"; latitude: "88"; height: "101"; }
- ListElement{ longitude: "19"; latitude: "89"; height: "102"; }
- ListElement{ longitude: "19"; latitude: "90"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "91"; height: "99"; }
- ListElement{ longitude: "19"; latitude: "92"; height: "103"; }
- ListElement{ longitude: "19"; latitude: "93"; height: "104"; }
- ListElement{ longitude: "19"; latitude: "94"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "19"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "97"; height: "123"; }
- ListElement{ longitude: "19"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "19"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "20"; latitude: "0"; height: "117"; }
- ListElement{ longitude: "20"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "15"; height: "114"; }
- ListElement{ longitude: "20"; latitude: "16"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "17"; height: "113"; }
- ListElement{ longitude: "20"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "20"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "24"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "20"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "30"; height: "119"; }
- ListElement{ longitude: "20"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "20"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "20"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "20"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "54"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "55"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "57"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "58"; height: "108"; }
- ListElement{ longitude: "20"; latitude: "59"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "67"; height: "108"; }
- ListElement{ longitude: "20"; latitude: "68"; height: "105"; }
- ListElement{ longitude: "20"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "70"; height: "106"; }
- ListElement{ longitude: "20"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "20"; latitude: "72"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "75"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "78"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "79"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "80"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "81"; height: "109"; }
- ListElement{ longitude: "20"; latitude: "82"; height: "113"; }
- ListElement{ longitude: "20"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "84"; height: "109"; }
- ListElement{ longitude: "20"; latitude: "85"; height: "102"; }
- ListElement{ longitude: "20"; latitude: "86"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "20"; latitude: "88"; height: "102"; }
- ListElement{ longitude: "20"; latitude: "89"; height: "102"; }
- ListElement{ longitude: "20"; latitude: "90"; height: "104"; }
- ListElement{ longitude: "20"; latitude: "91"; height: "101"; }
- ListElement{ longitude: "20"; latitude: "92"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "93"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "95"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "20"; latitude: "97"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "99"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "0"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "9"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "15"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "17"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "18"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "21"; latitude: "24"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "21"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "30"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "21"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "21"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "21"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "21"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "53"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "55"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "57"; height: "114"; }
- ListElement{ longitude: "21"; latitude: "58"; height: "111"; }
- ListElement{ longitude: "21"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "21"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "21"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "67"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "21"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "72"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "73"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "21"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "78"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "79"; height: "106"; }
- ListElement{ longitude: "21"; latitude: "80"; height: "106"; }
- ListElement{ longitude: "21"; latitude: "81"; height: "107"; }
- ListElement{ longitude: "21"; latitude: "82"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "83"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "84"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "21"; latitude: "86"; height: "113"; }
- ListElement{ longitude: "21"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "21"; latitude: "88"; height: "103"; }
- ListElement{ longitude: "21"; latitude: "89"; height: "105"; }
- ListElement{ longitude: "21"; latitude: "90"; height: "104"; }
- ListElement{ longitude: "21"; latitude: "91"; height: "102"; }
- ListElement{ longitude: "21"; latitude: "92"; height: "102"; }
- ListElement{ longitude: "21"; latitude: "93"; height: "104"; }
- ListElement{ longitude: "21"; latitude: "94"; height: "105"; }
- ListElement{ longitude: "21"; latitude: "95"; height: "113"; }
- ListElement{ longitude: "21"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "21"; latitude: "97"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "98"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "22"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "7"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "8"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "22"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "20"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "23"; height: "116"; }
- ListElement{ longitude: "22"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "28"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "29"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "30"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "22"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "50"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "53"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "22"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "22"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "64"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "22"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "22"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "22"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "22"; latitude: "70"; height: "113"; }
- ListElement{ longitude: "22"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "22"; latitude: "72"; height: "113"; }
- ListElement{ longitude: "22"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "22"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "22"; latitude: "75"; height: "110"; }
- ListElement{ longitude: "22"; latitude: "76"; height: "110"; }
- ListElement{ longitude: "22"; latitude: "77"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "78"; height: "105"; }
- ListElement{ longitude: "22"; latitude: "79"; height: "102"; }
- ListElement{ longitude: "22"; latitude: "80"; height: "104"; }
- ListElement{ longitude: "22"; latitude: "81"; height: "108"; }
- ListElement{ longitude: "22"; latitude: "82"; height: "110"; }
- ListElement{ longitude: "22"; latitude: "83"; height: "114"; }
- ListElement{ longitude: "22"; latitude: "84"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "85"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "86"; height: "111"; }
- ListElement{ longitude: "22"; latitude: "87"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "88"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "89"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "90"; height: "103"; }
- ListElement{ longitude: "22"; latitude: "91"; height: "102"; }
- ListElement{ longitude: "22"; latitude: "92"; height: "101"; }
- ListElement{ longitude: "22"; latitude: "93"; height: "108"; }
- ListElement{ longitude: "22"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "22"; latitude: "95"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "23"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "8"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "13"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "20"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "26"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "28"; height: "116"; }
- ListElement{ longitude: "23"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "23"; latitude: "30"; height: "118"; }
- ListElement{ longitude: "23"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "23"; latitude: "37"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "23"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "23"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "23"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "23"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "23"; latitude: "61"; height: "133"; }
- ListElement{ longitude: "23"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "23"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "65"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "66"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "67"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "68"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "70"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "71"; height: "115"; }
- ListElement{ longitude: "23"; latitude: "72"; height: "114"; }
- ListElement{ longitude: "23"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "23"; latitude: "74"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "75"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "76"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "77"; height: "107"; }
- ListElement{ longitude: "23"; latitude: "78"; height: "103"; }
- ListElement{ longitude: "23"; latitude: "79"; height: "102"; }
- ListElement{ longitude: "23"; latitude: "80"; height: "101"; }
- ListElement{ longitude: "23"; latitude: "81"; height: "106"; }
- ListElement{ longitude: "23"; latitude: "82"; height: "113"; }
- ListElement{ longitude: "23"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "23"; latitude: "84"; height: "115"; }
- ListElement{ longitude: "23"; latitude: "85"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "86"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "87"; height: "109"; }
- ListElement{ longitude: "23"; latitude: "88"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "90"; height: "106"; }
- ListElement{ longitude: "23"; latitude: "91"; height: "103"; }
- ListElement{ longitude: "23"; latitude: "92"; height: "102"; }
- ListElement{ longitude: "23"; latitude: "93"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "23"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "96"; height: "125"; }
- ListElement{ longitude: "23"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "23"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "4"; height: "118"; }
- ListElement{ longitude: "24"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "9"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "16"; height: "118"; }
- ListElement{ longitude: "24"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "18"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "24"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "24"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "25"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "26"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "31"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "24"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "24"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "24"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "24"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "59"; height: "131"; }
- ListElement{ longitude: "24"; latitude: "60"; height: "133"; }
- ListElement{ longitude: "24"; latitude: "61"; height: "134"; }
- ListElement{ longitude: "24"; latitude: "62"; height: "132"; }
- ListElement{ longitude: "24"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "24"; latitude: "64"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "65"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "66"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "24"; latitude: "68"; height: "128"; }
- ListElement{ longitude: "24"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "72"; height: "117"; }
- ListElement{ longitude: "24"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "24"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "24"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "24"; latitude: "76"; height: "106"; }
- ListElement{ longitude: "24"; latitude: "77"; height: "105"; }
- ListElement{ longitude: "24"; latitude: "78"; height: "100"; }
- ListElement{ longitude: "24"; latitude: "79"; height: "99"; }
- ListElement{ longitude: "24"; latitude: "80"; height: "101"; }
- ListElement{ longitude: "24"; latitude: "81"; height: "104"; }
- ListElement{ longitude: "24"; latitude: "82"; height: "111"; }
- ListElement{ longitude: "24"; latitude: "83"; height: "114"; }
- ListElement{ longitude: "24"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "24"; latitude: "85"; height: "114"; }
- ListElement{ longitude: "24"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "24"; latitude: "87"; height: "112"; }
- ListElement{ longitude: "24"; latitude: "88"; height: "110"; }
- ListElement{ longitude: "24"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "24"; latitude: "90"; height: "107"; }
- ListElement{ longitude: "24"; latitude: "91"; height: "104"; }
- ListElement{ longitude: "24"; latitude: "92"; height: "106"; }
- ListElement{ longitude: "24"; latitude: "93"; height: "110"; }
- ListElement{ longitude: "24"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "24"; latitude: "95"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "96"; height: "130"; }
- ListElement{ longitude: "24"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "24"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "24"; latitude: "99"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "2"; height: "116"; }
- ListElement{ longitude: "25"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "4"; height: "115"; }
- ListElement{ longitude: "25"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "25"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "13"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "15"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "23"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "27"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "34"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "35"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "25"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "25"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "25"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "25"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "25"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "46"; height: "131"; }
- ListElement{ longitude: "25"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "25"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "25"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "25"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "25"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "25"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "61"; height: "132"; }
- ListElement{ longitude: "25"; latitude: "62"; height: "132"; }
- ListElement{ longitude: "25"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "25"; latitude: "64"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "25"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "25"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "25"; latitude: "69"; height: "133"; }
- ListElement{ longitude: "25"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "25"; latitude: "71"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "74"; height: "116"; }
- ListElement{ longitude: "25"; latitude: "75"; height: "114"; }
- ListElement{ longitude: "25"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "25"; latitude: "77"; height: "106"; }
- ListElement{ longitude: "25"; latitude: "78"; height: "102"; }
- ListElement{ longitude: "25"; latitude: "79"; height: "101"; }
- ListElement{ longitude: "25"; latitude: "80"; height: "102"; }
- ListElement{ longitude: "25"; latitude: "81"; height: "107"; }
- ListElement{ longitude: "25"; latitude: "82"; height: "111"; }
- ListElement{ longitude: "25"; latitude: "83"; height: "113"; }
- ListElement{ longitude: "25"; latitude: "84"; height: "115"; }
- ListElement{ longitude: "25"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "25"; latitude: "86"; height: "118"; }
- ListElement{ longitude: "25"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "89"; height: "113"; }
- ListElement{ longitude: "25"; latitude: "90"; height: "103"; }
- ListElement{ longitude: "25"; latitude: "91"; height: "104"; }
- ListElement{ longitude: "25"; latitude: "92"; height: "106"; }
- ListElement{ longitude: "25"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "25"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "25"; latitude: "95"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "96"; height: "134"; }
- ListElement{ longitude: "25"; latitude: "97"; height: "135"; }
- ListElement{ longitude: "25"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "25"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "9"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "12"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "17"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "27"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "28"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "32"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "34"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "35"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "26"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "26"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "26"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "26"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "26"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "61"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "64"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "66"; height: "131"; }
- ListElement{ longitude: "26"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "26"; latitude: "68"; height: "136"; }
- ListElement{ longitude: "26"; latitude: "69"; height: "134"; }
- ListElement{ longitude: "26"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "26"; latitude: "71"; height: "132"; }
- ListElement{ longitude: "26"; latitude: "72"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "74"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "75"; height: "116"; }
- ListElement{ longitude: "26"; latitude: "76"; height: "112"; }
- ListElement{ longitude: "26"; latitude: "77"; height: "109"; }
- ListElement{ longitude: "26"; latitude: "78"; height: "105"; }
- ListElement{ longitude: "26"; latitude: "79"; height: "106"; }
- ListElement{ longitude: "26"; latitude: "80"; height: "107"; }
- ListElement{ longitude: "26"; latitude: "81"; height: "114"; }
- ListElement{ longitude: "26"; latitude: "82"; height: "117"; }
- ListElement{ longitude: "26"; latitude: "83"; height: "117"; }
- ListElement{ longitude: "26"; latitude: "84"; height: "118"; }
- ListElement{ longitude: "26"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "86"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "89"; height: "113"; }
- ListElement{ longitude: "26"; latitude: "90"; height: "100"; }
- ListElement{ longitude: "26"; latitude: "91"; height: "103"; }
- ListElement{ longitude: "26"; latitude: "92"; height: "105"; }
- ListElement{ longitude: "26"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "95"; height: "134"; }
- ListElement{ longitude: "26"; latitude: "96"; height: "137"; }
- ListElement{ longitude: "26"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "26"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "26"; latitude: "99"; height: "116"; }
- ListElement{ longitude: "27"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "2"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "3"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "20"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "21"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "22"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "23"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "24"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "29"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "34"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "35"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "27"; latitude: "50"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "51"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "27"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "64"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "65"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "67"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "27"; latitude: "69"; height: "135"; }
- ListElement{ longitude: "27"; latitude: "70"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "71"; height: "137"; }
- ListElement{ longitude: "27"; latitude: "72"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "73"; height: "133"; }
- ListElement{ longitude: "27"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "27"; latitude: "77"; height: "113"; }
- ListElement{ longitude: "27"; latitude: "78"; height: "111"; }
- ListElement{ longitude: "27"; latitude: "79"; height: "109"; }
- ListElement{ longitude: "27"; latitude: "80"; height: "110"; }
- ListElement{ longitude: "27"; latitude: "81"; height: "113"; }
- ListElement{ longitude: "27"; latitude: "82"; height: "117"; }
- ListElement{ longitude: "27"; latitude: "83"; height: "115"; }
- ListElement{ longitude: "27"; latitude: "84"; height: "120"; }
- ListElement{ longitude: "27"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "87"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "27"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "27"; latitude: "90"; height: "107"; }
- ListElement{ longitude: "27"; latitude: "91"; height: "106"; }
- ListElement{ longitude: "27"; latitude: "92"; height: "109"; }
- ListElement{ longitude: "27"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "95"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "96"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "27"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "99"; height: "111"; }
- ListElement{ longitude: "28"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "2"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "3"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "4"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "17"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "19"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "20"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "27"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "28"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "28"; latitude: "30"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "28"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "35"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "38"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "28"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "49"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "28"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "28"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "66"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "28"; latitude: "69"; height: "136"; }
- ListElement{ longitude: "28"; latitude: "70"; height: "137"; }
- ListElement{ longitude: "28"; latitude: "71"; height: "141"; }
- ListElement{ longitude: "28"; latitude: "72"; height: "143"; }
- ListElement{ longitude: "28"; latitude: "73"; height: "139"; }
- ListElement{ longitude: "28"; latitude: "74"; height: "136"; }
- ListElement{ longitude: "28"; latitude: "75"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "76"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "77"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "78"; height: "117"; }
- ListElement{ longitude: "28"; latitude: "79"; height: "111"; }
- ListElement{ longitude: "28"; latitude: "80"; height: "114"; }
- ListElement{ longitude: "28"; latitude: "81"; height: "117"; }
- ListElement{ longitude: "28"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "83"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "84"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "87"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "28"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "28"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "91"; height: "111"; }
- ListElement{ longitude: "28"; latitude: "92"; height: "113"; }
- ListElement{ longitude: "28"; latitude: "93"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "28"; latitude: "95"; height: "133"; }
- ListElement{ longitude: "28"; latitude: "96"; height: "134"; }
- ListElement{ longitude: "28"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "28"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "99"; height: "109"; }
- ListElement{ longitude: "29"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "4"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "32"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "34"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "29"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "44"; height: "116"; }
- ListElement{ longitude: "29"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "49"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "64"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "66"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "67"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "29"; latitude: "69"; height: "134"; }
- ListElement{ longitude: "29"; latitude: "70"; height: "140"; }
- ListElement{ longitude: "29"; latitude: "71"; height: "146"; }
- ListElement{ longitude: "29"; latitude: "72"; height: "147"; }
- ListElement{ longitude: "29"; latitude: "73"; height: "144"; }
- ListElement{ longitude: "29"; latitude: "74"; height: "140"; }
- ListElement{ longitude: "29"; latitude: "75"; height: "134"; }
- ListElement{ longitude: "29"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "77"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "78"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "79"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "80"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "83"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "84"; height: "116"; }
- ListElement{ longitude: "29"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "29"; latitude: "90"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "91"; height: "111"; }
- ListElement{ longitude: "29"; latitude: "92"; height: "112"; }
- ListElement{ longitude: "29"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "94"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "29"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "29"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "29"; latitude: "98"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "99"; height: "109"; }
- ListElement{ longitude: "30"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "2"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "33"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "43"; height: "114"; }
- ListElement{ longitude: "30"; latitude: "44"; height: "105"; }
- ListElement{ longitude: "30"; latitude: "45"; height: "114"; }
- ListElement{ longitude: "30"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "30"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "53"; height: "116"; }
- ListElement{ longitude: "30"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "65"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "66"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "67"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "30"; latitude: "69"; height: "135"; }
- ListElement{ longitude: "30"; latitude: "70"; height: "142"; }
- ListElement{ longitude: "30"; latitude: "71"; height: "146"; }
- ListElement{ longitude: "30"; latitude: "72"; height: "150"; }
- ListElement{ longitude: "30"; latitude: "73"; height: "149"; }
- ListElement{ longitude: "30"; latitude: "74"; height: "147"; }
- ListElement{ longitude: "30"; latitude: "75"; height: "137"; }
- ListElement{ longitude: "30"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "30"; latitude: "77"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "78"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "79"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "80"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "81"; height: "117"; }
- ListElement{ longitude: "30"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "83"; height: "115"; }
- ListElement{ longitude: "30"; latitude: "84"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "88"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "89"; height: "117"; }
- ListElement{ longitude: "30"; latitude: "90"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "91"; height: "118"; }
- ListElement{ longitude: "30"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "93"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "96"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "30"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "99"; height: "111"; }
- ListElement{ longitude: "31"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "3"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "19"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "20"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "31"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "43"; height: "118"; }
- ListElement{ longitude: "31"; latitude: "44"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "47"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "31"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "65"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "66"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "31"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "31"; latitude: "69"; height: "137"; }
- ListElement{ longitude: "31"; latitude: "70"; height: "143"; }
- ListElement{ longitude: "31"; latitude: "71"; height: "147"; }
- ListElement{ longitude: "31"; latitude: "72"; height: "149"; }
- ListElement{ longitude: "31"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "31"; latitude: "74"; height: "146"; }
- ListElement{ longitude: "31"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "31"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "31"; latitude: "77"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "78"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "80"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "31"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "83"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "89"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "91"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "95"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "96"; height: "114"; }
- ListElement{ longitude: "31"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "99"; height: "115"; }
- ListElement{ longitude: "32"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "19"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "32"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "32"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "32"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "49"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "32"; latitude: "53"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "56"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "61"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "66"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "67"; height: "131"; }
- ListElement{ longitude: "32"; latitude: "68"; height: "137"; }
- ListElement{ longitude: "32"; latitude: "69"; height: "141"; }
- ListElement{ longitude: "32"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "32"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "32"; latitude: "72"; height: "151"; }
- ListElement{ longitude: "32"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "32"; latitude: "74"; height: "144"; }
- ListElement{ longitude: "32"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "32"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "32"; latitude: "77"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "79"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "80"; height: "120"; }
- ListElement{ longitude: "32"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "32"; latitude: "83"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "32"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "86"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "88"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "89"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "90"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "91"; height: "129"; }
- ListElement{ longitude: "32"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "93"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "97"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "33"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "3"; height: "116"; }
- ListElement{ longitude: "33"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "33"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "33"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "19"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "33"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "33"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "34"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "37"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "45"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "53"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "59"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "65"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "33"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "33"; latitude: "68"; height: "141"; }
- ListElement{ longitude: "33"; latitude: "69"; height: "144"; }
- ListElement{ longitude: "33"; latitude: "70"; height: "147"; }
- ListElement{ longitude: "33"; latitude: "71"; height: "149"; }
- ListElement{ longitude: "33"; latitude: "72"; height: "149"; }
- ListElement{ longitude: "33"; latitude: "73"; height: "147"; }
- ListElement{ longitude: "33"; latitude: "74"; height: "144"; }
- ListElement{ longitude: "33"; latitude: "75"; height: "137"; }
- ListElement{ longitude: "33"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "77"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "78"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "81"; height: "121"; }
- ListElement{ longitude: "33"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "83"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "84"; height: "113"; }
- ListElement{ longitude: "33"; latitude: "85"; height: "117"; }
- ListElement{ longitude: "33"; latitude: "86"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "33"; latitude: "88"; height: "120"; }
- ListElement{ longitude: "33"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "33"; latitude: "92"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "96"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "97"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "98"; height: "132"; }
- ListElement{ longitude: "33"; latitude: "99"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "10"; height: "131"; }
- ListElement{ longitude: "34"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "13"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "18"; height: "128"; }
- ListElement{ longitude: "34"; latitude: "19"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "20"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "33"; height: "128"; }
- ListElement{ longitude: "34"; latitude: "34"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "34"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "34"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "34"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "34"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "34"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "34"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "34"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "63"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "67"; height: "135"; }
- ListElement{ longitude: "34"; latitude: "68"; height: "142"; }
- ListElement{ longitude: "34"; latitude: "69"; height: "145"; }
- ListElement{ longitude: "34"; latitude: "70"; height: "149"; }
- ListElement{ longitude: "34"; latitude: "71"; height: "149"; }
- ListElement{ longitude: "34"; latitude: "72"; height: "150"; }
- ListElement{ longitude: "34"; latitude: "73"; height: "145"; }
- ListElement{ longitude: "34"; latitude: "74"; height: "144"; }
- ListElement{ longitude: "34"; latitude: "75"; height: "144"; }
- ListElement{ longitude: "34"; latitude: "76"; height: "138"; }
- ListElement{ longitude: "34"; latitude: "77"; height: "141"; }
- ListElement{ longitude: "34"; latitude: "78"; height: "140"; }
- ListElement{ longitude: "34"; latitude: "79"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "80"; height: "131"; }
- ListElement{ longitude: "34"; latitude: "81"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "83"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "34"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "34"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "88"; height: "115"; }
- ListElement{ longitude: "34"; latitude: "89"; height: "118"; }
- ListElement{ longitude: "34"; latitude: "90"; height: "121"; }
- ListElement{ longitude: "34"; latitude: "91"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "34"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "35"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "35"; latitude: "3"; height: "118"; }
- ListElement{ longitude: "35"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "35"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "15"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "18"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "19"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "20"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "23"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "26"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "27"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "31"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "35"; latitude: "45"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "35"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "35"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "35"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "61"; height: "120"; }
- ListElement{ longitude: "35"; latitude: "62"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "67"; height: "135"; }
- ListElement{ longitude: "35"; latitude: "68"; height: "140"; }
- ListElement{ longitude: "35"; latitude: "69"; height: "146"; }
- ListElement{ longitude: "35"; latitude: "70"; height: "147"; }
- ListElement{ longitude: "35"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "35"; latitude: "72"; height: "148"; }
- ListElement{ longitude: "35"; latitude: "73"; height: "144"; }
- ListElement{ longitude: "35"; latitude: "74"; height: "143"; }
- ListElement{ longitude: "35"; latitude: "75"; height: "145"; }
- ListElement{ longitude: "35"; latitude: "76"; height: "146"; }
- ListElement{ longitude: "35"; latitude: "77"; height: "151"; }
- ListElement{ longitude: "35"; latitude: "78"; height: "146"; }
- ListElement{ longitude: "35"; latitude: "79"; height: "136"; }
- ListElement{ longitude: "35"; latitude: "80"; height: "119"; }
- ListElement{ longitude: "35"; latitude: "81"; height: "122"; }
- ListElement{ longitude: "35"; latitude: "82"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "35"; latitude: "84"; height: "101"; }
- ListElement{ longitude: "35"; latitude: "85"; height: "111"; }
- ListElement{ longitude: "35"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "35"; latitude: "87"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "88"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "89"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "90"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "93"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "35"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "97"; height: "135"; }
- ListElement{ longitude: "35"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "35"; latitude: "99"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "1"; height: "119"; }
- ListElement{ longitude: "36"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "36"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "36"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "36"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "36"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "36"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "19"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "20"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "21"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "23"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "24"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "26"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "27"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "28"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "45"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "36"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "36"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "36"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "36"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "36"; latitude: "56"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "65"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "68"; height: "137"; }
- ListElement{ longitude: "36"; latitude: "69"; height: "142"; }
- ListElement{ longitude: "36"; latitude: "70"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "36"; latitude: "72"; height: "148"; }
- ListElement{ longitude: "36"; latitude: "73"; height: "145"; }
- ListElement{ longitude: "36"; latitude: "74"; height: "141"; }
- ListElement{ longitude: "36"; latitude: "75"; height: "148"; }
- ListElement{ longitude: "36"; latitude: "76"; height: "152"; }
- ListElement{ longitude: "36"; latitude: "77"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "78"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "79"; height: "154"; }
- ListElement{ longitude: "36"; latitude: "80"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "81"; height: "131"; }
- ListElement{ longitude: "36"; latitude: "82"; height: "103"; }
- ListElement{ longitude: "36"; latitude: "83"; height: "94"; }
- ListElement{ longitude: "36"; latitude: "84"; height: "78"; }
- ListElement{ longitude: "36"; latitude: "85"; height: "73"; }
- ListElement{ longitude: "36"; latitude: "86"; height: "87"; }
- ListElement{ longitude: "36"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "36"; latitude: "88"; height: "98"; }
- ListElement{ longitude: "36"; latitude: "89"; height: "110"; }
- ListElement{ longitude: "36"; latitude: "90"; height: "113"; }
- ListElement{ longitude: "36"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "92"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "93"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "95"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "36"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "37"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "9"; height: "132"; }
- ListElement{ longitude: "37"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "37"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "37"; latitude: "13"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "17"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "20"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "37"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "23"; height: "130"; }
- ListElement{ longitude: "37"; latitude: "24"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "25"; height: "110"; }
- ListElement{ longitude: "37"; latitude: "26"; height: "98"; }
- ListElement{ longitude: "37"; latitude: "27"; height: "97"; }
- ListElement{ longitude: "37"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "37"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "37"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "37"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "37"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "37"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "37"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "37"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "63"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "65"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "66"; height: "126"; }
- ListElement{ longitude: "37"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "37"; latitude: "69"; height: "138"; }
- ListElement{ longitude: "37"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "37"; latitude: "71"; height: "146"; }
- ListElement{ longitude: "37"; latitude: "72"; height: "146"; }
- ListElement{ longitude: "37"; latitude: "73"; height: "149"; }
- ListElement{ longitude: "37"; latitude: "74"; height: "145"; }
- ListElement{ longitude: "37"; latitude: "75"; height: "154"; }
- ListElement{ longitude: "37"; latitude: "76"; height: "153"; }
- ListElement{ longitude: "37"; latitude: "77"; height: "152"; }
- ListElement{ longitude: "37"; latitude: "78"; height: "149"; }
- ListElement{ longitude: "37"; latitude: "79"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "80"; height: "97"; }
- ListElement{ longitude: "37"; latitude: "81"; height: "70"; }
- ListElement{ longitude: "37"; latitude: "82"; height: "66"; }
- ListElement{ longitude: "37"; latitude: "83"; height: "71"; }
- ListElement{ longitude: "37"; latitude: "84"; height: "59"; }
- ListElement{ longitude: "37"; latitude: "85"; height: "48"; }
- ListElement{ longitude: "37"; latitude: "86"; height: "66"; }
- ListElement{ longitude: "37"; latitude: "87"; height: "74"; }
- ListElement{ longitude: "37"; latitude: "88"; height: "78"; }
- ListElement{ longitude: "37"; latitude: "89"; height: "86"; }
- ListElement{ longitude: "37"; latitude: "90"; height: "94"; }
- ListElement{ longitude: "37"; latitude: "91"; height: "107"; }
- ListElement{ longitude: "37"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "93"; height: "131"; }
- ListElement{ longitude: "37"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "37"; latitude: "97"; height: "135"; }
- ListElement{ longitude: "37"; latitude: "98"; height: "134"; }
- ListElement{ longitude: "37"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "38"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "38"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "38"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "38"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "38"; latitude: "11"; height: "131"; }
- ListElement{ longitude: "38"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "20"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "23"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "25"; height: "103"; }
- ListElement{ longitude: "38"; latitude: "26"; height: "86"; }
- ListElement{ longitude: "38"; latitude: "27"; height: "90"; }
- ListElement{ longitude: "38"; latitude: "28"; height: "116"; }
- ListElement{ longitude: "38"; latitude: "29"; height: "129"; }
- ListElement{ longitude: "38"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "37"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "38"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "38"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "38"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "38"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "38"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "38"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "38"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "55"; height: "119"; }
- ListElement{ longitude: "38"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "66"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "67"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "68"; height: "132"; }
- ListElement{ longitude: "38"; latitude: "69"; height: "137"; }
- ListElement{ longitude: "38"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "38"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "38"; latitude: "72"; height: "155"; }
- ListElement{ longitude: "38"; latitude: "73"; height: "161"; }
- ListElement{ longitude: "38"; latitude: "74"; height: "147"; }
- ListElement{ longitude: "38"; latitude: "75"; height: "146"; }
- ListElement{ longitude: "38"; latitude: "76"; height: "139"; }
- ListElement{ longitude: "38"; latitude: "77"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "78"; height: "108"; }
- ListElement{ longitude: "38"; latitude: "79"; height: "93"; }
- ListElement{ longitude: "38"; latitude: "80"; height: "76"; }
- ListElement{ longitude: "38"; latitude: "81"; height: "59"; }
- ListElement{ longitude: "38"; latitude: "82"; height: "54"; }
- ListElement{ longitude: "38"; latitude: "83"; height: "61"; }
- ListElement{ longitude: "38"; latitude: "84"; height: "24"; }
- ListElement{ longitude: "38"; latitude: "85"; height: "13"; }
- ListElement{ longitude: "38"; latitude: "86"; height: "42"; }
- ListElement{ longitude: "38"; latitude: "87"; height: "58"; }
- ListElement{ longitude: "38"; latitude: "88"; height: "73"; }
- ListElement{ longitude: "38"; latitude: "89"; height: "75"; }
- ListElement{ longitude: "38"; latitude: "90"; height: "74"; }
- ListElement{ longitude: "38"; latitude: "91"; height: "77"; }
- ListElement{ longitude: "38"; latitude: "92"; height: "96"; }
- ListElement{ longitude: "38"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "38"; latitude: "94"; height: "133"; }
- ListElement{ longitude: "38"; latitude: "95"; height: "131"; }
- ListElement{ longitude: "38"; latitude: "96"; height: "137"; }
- ListElement{ longitude: "38"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "38"; latitude: "98"; height: "134"; }
- ListElement{ longitude: "38"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "39"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "39"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "39"; latitude: "11"; height: "132"; }
- ListElement{ longitude: "39"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "19"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "20"; height: "123"; }
- ListElement{ longitude: "39"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "23"; height: "130"; }
- ListElement{ longitude: "39"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "25"; height: "108"; }
- ListElement{ longitude: "39"; latitude: "26"; height: "88"; }
- ListElement{ longitude: "39"; latitude: "27"; height: "80"; }
- ListElement{ longitude: "39"; latitude: "28"; height: "108"; }
- ListElement{ longitude: "39"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "39"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "37"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "39"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "53"; height: "116"; }
- ListElement{ longitude: "39"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "55"; height: "117"; }
- ListElement{ longitude: "39"; latitude: "56"; height: "119"; }
- ListElement{ longitude: "39"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "64"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "65"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "68"; height: "132"; }
- ListElement{ longitude: "39"; latitude: "69"; height: "136"; }
- ListElement{ longitude: "39"; latitude: "70"; height: "146"; }
- ListElement{ longitude: "39"; latitude: "71"; height: "153"; }
- ListElement{ longitude: "39"; latitude: "72"; height: "161"; }
- ListElement{ longitude: "39"; latitude: "73"; height: "157"; }
- ListElement{ longitude: "39"; latitude: "74"; height: "152"; }
- ListElement{ longitude: "39"; latitude: "75"; height: "139"; }
- ListElement{ longitude: "39"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "39"; latitude: "78"; height: "97"; }
- ListElement{ longitude: "39"; latitude: "79"; height: "49"; }
- ListElement{ longitude: "39"; latitude: "80"; height: "16"; }
- ListElement{ longitude: "39"; latitude: "81"; height: "11"; }
- ListElement{ longitude: "39"; latitude: "82"; height: "24"; }
- ListElement{ longitude: "39"; latitude: "83"; height: "58"; }
- ListElement{ longitude: "39"; latitude: "84"; height: "13"; }
- ListElement{ longitude: "39"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "39"; latitude: "86"; height: "31"; }
- ListElement{ longitude: "39"; latitude: "87"; height: "58"; }
- ListElement{ longitude: "39"; latitude: "88"; height: "43"; }
- ListElement{ longitude: "39"; latitude: "89"; height: "48"; }
- ListElement{ longitude: "39"; latitude: "90"; height: "67"; }
- ListElement{ longitude: "39"; latitude: "91"; height: "71"; }
- ListElement{ longitude: "39"; latitude: "92"; height: "81"; }
- ListElement{ longitude: "39"; latitude: "93"; height: "92"; }
- ListElement{ longitude: "39"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "39"; latitude: "95"; height: "143"; }
- ListElement{ longitude: "39"; latitude: "96"; height: "135"; }
- ListElement{ longitude: "39"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "39"; latitude: "98"; height: "136"; }
- ListElement{ longitude: "39"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "40"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "40"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "40"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "40"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "40"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "20"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "23"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "24"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "26"; height: "103"; }
- ListElement{ longitude: "40"; latitude: "27"; height: "110"; }
- ListElement{ longitude: "40"; latitude: "28"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "29"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "40"; latitude: "31"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "32"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "33"; height: "124"; }
- ListElement{ longitude: "40"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "46"; height: "123"; }
- ListElement{ longitude: "40"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "55"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "40"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "40"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "40"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "64"; height: "133"; }
- ListElement{ longitude: "40"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "40"; latitude: "67"; height: "131"; }
- ListElement{ longitude: "40"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "40"; latitude: "69"; height: "139"; }
- ListElement{ longitude: "40"; latitude: "70"; height: "146"; }
- ListElement{ longitude: "40"; latitude: "71"; height: "157"; }
- ListElement{ longitude: "40"; latitude: "72"; height: "166"; }
- ListElement{ longitude: "40"; latitude: "73"; height: "159"; }
- ListElement{ longitude: "40"; latitude: "74"; height: "151"; }
- ListElement{ longitude: "40"; latitude: "75"; height: "130"; }
- ListElement{ longitude: "40"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "77"; height: "98"; }
- ListElement{ longitude: "40"; latitude: "78"; height: "82"; }
- ListElement{ longitude: "40"; latitude: "79"; height: "73"; }
- ListElement{ longitude: "40"; latitude: "80"; height: "49"; }
- ListElement{ longitude: "40"; latitude: "81"; height: "1"; }
- ListElement{ longitude: "40"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "40"; latitude: "83"; height: "1"; }
- ListElement{ longitude: "40"; latitude: "84"; height: "27"; }
- ListElement{ longitude: "40"; latitude: "85"; height: "10"; }
- ListElement{ longitude: "40"; latitude: "86"; height: "17"; }
- ListElement{ longitude: "40"; latitude: "87"; height: "24"; }
- ListElement{ longitude: "40"; latitude: "88"; height: "16"; }
- ListElement{ longitude: "40"; latitude: "89"; height: "35"; }
- ListElement{ longitude: "40"; latitude: "90"; height: "58"; }
- ListElement{ longitude: "40"; latitude: "91"; height: "66"; }
- ListElement{ longitude: "40"; latitude: "92"; height: "78"; }
- ListElement{ longitude: "40"; latitude: "93"; height: "88"; }
- ListElement{ longitude: "40"; latitude: "94"; height: "107"; }
- ListElement{ longitude: "40"; latitude: "95"; height: "139"; }
- ListElement{ longitude: "40"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "40"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "40"; latitude: "98"; height: "133"; }
- ListElement{ longitude: "40"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "41"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "41"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "41"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "14"; height: "112"; }
- ListElement{ longitude: "41"; latitude: "15"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "25"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "26"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "27"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "28"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "36"; height: "118"; }
- ListElement{ longitude: "41"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "41"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "41"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "41"; latitude: "49"; height: "116"; }
- ListElement{ longitude: "41"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "41"; latitude: "51"; height: "118"; }
- ListElement{ longitude: "41"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "41"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "55"; height: "118"; }
- ListElement{ longitude: "41"; latitude: "56"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "41"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "41"; latitude: "64"; height: "135"; }
- ListElement{ longitude: "41"; latitude: "65"; height: "135"; }
- ListElement{ longitude: "41"; latitude: "66"; height: "137"; }
- ListElement{ longitude: "41"; latitude: "67"; height: "136"; }
- ListElement{ longitude: "41"; latitude: "68"; height: "135"; }
- ListElement{ longitude: "41"; latitude: "69"; height: "141"; }
- ListElement{ longitude: "41"; latitude: "70"; height: "148"; }
- ListElement{ longitude: "41"; latitude: "71"; height: "159"; }
- ListElement{ longitude: "41"; latitude: "72"; height: "160"; }
- ListElement{ longitude: "41"; latitude: "73"; height: "160"; }
- ListElement{ longitude: "41"; latitude: "74"; height: "148"; }
- ListElement{ longitude: "41"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "76"; height: "75"; }
- ListElement{ longitude: "41"; latitude: "77"; height: "4"; }
- ListElement{ longitude: "41"; latitude: "78"; height: "50"; }
- ListElement{ longitude: "41"; latitude: "79"; height: "50"; }
- ListElement{ longitude: "41"; latitude: "80"; height: "46"; }
- ListElement{ longitude: "41"; latitude: "81"; height: "3"; }
- ListElement{ longitude: "41"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "41"; latitude: "83"; height: "1"; }
- ListElement{ longitude: "41"; latitude: "84"; height: "19"; }
- ListElement{ longitude: "41"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "41"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "41"; latitude: "87"; height: "4"; }
- ListElement{ longitude: "41"; latitude: "88"; height: "30"; }
- ListElement{ longitude: "41"; latitude: "89"; height: "18"; }
- ListElement{ longitude: "41"; latitude: "90"; height: "19"; }
- ListElement{ longitude: "41"; latitude: "91"; height: "40"; }
- ListElement{ longitude: "41"; latitude: "92"; height: "64"; }
- ListElement{ longitude: "41"; latitude: "93"; height: "80"; }
- ListElement{ longitude: "41"; latitude: "94"; height: "102"; }
- ListElement{ longitude: "41"; latitude: "95"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "96"; height: "143"; }
- ListElement{ longitude: "41"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "41"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "42"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "42"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "42"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "42"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "42"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "42"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "42"; latitude: "15"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "16"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "42"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "42"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "42"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "42"; latitude: "49"; height: "116"; }
- ListElement{ longitude: "42"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "42"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "42"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "42"; latitude: "63"; height: "132"; }
- ListElement{ longitude: "42"; latitude: "64"; height: "137"; }
- ListElement{ longitude: "42"; latitude: "65"; height: "137"; }
- ListElement{ longitude: "42"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "42"; latitude: "67"; height: "135"; }
- ListElement{ longitude: "42"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "42"; latitude: "69"; height: "132"; }
- ListElement{ longitude: "42"; latitude: "70"; height: "141"; }
- ListElement{ longitude: "42"; latitude: "71"; height: "160"; }
- ListElement{ longitude: "42"; latitude: "72"; height: "156"; }
- ListElement{ longitude: "42"; latitude: "73"; height: "159"; }
- ListElement{ longitude: "42"; latitude: "74"; height: "143"; }
- ListElement{ longitude: "42"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "76"; height: "72"; }
- ListElement{ longitude: "42"; latitude: "77"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "80"; height: "17"; }
- ListElement{ longitude: "42"; latitude: "81"; height: "12"; }
- ListElement{ longitude: "42"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "83"; height: "2"; }
- ListElement{ longitude: "42"; latitude: "84"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "86"; height: "20"; }
- ListElement{ longitude: "42"; latitude: "87"; height: "7"; }
- ListElement{ longitude: "42"; latitude: "88"; height: "20"; }
- ListElement{ longitude: "42"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "91"; height: "34"; }
- ListElement{ longitude: "42"; latitude: "92"; height: "55"; }
- ListElement{ longitude: "42"; latitude: "93"; height: "74"; }
- ListElement{ longitude: "42"; latitude: "94"; height: "91"; }
- ListElement{ longitude: "42"; latitude: "95"; height: "133"; }
- ListElement{ longitude: "42"; latitude: "96"; height: "145"; }
- ListElement{ longitude: "42"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "42"; latitude: "98"; height: "133"; }
- ListElement{ longitude: "42"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "43"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "43"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "11"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "43"; latitude: "13"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "43"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "43"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "43"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "43"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "43"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "43"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "43"; latitude: "52"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "43"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "43"; latitude: "64"; height: "135"; }
- ListElement{ longitude: "43"; latitude: "65"; height: "139"; }
- ListElement{ longitude: "43"; latitude: "66"; height: "140"; }
- ListElement{ longitude: "43"; latitude: "67"; height: "137"; }
- ListElement{ longitude: "43"; latitude: "68"; height: "139"; }
- ListElement{ longitude: "43"; latitude: "69"; height: "138"; }
- ListElement{ longitude: "43"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "43"; latitude: "71"; height: "162"; }
- ListElement{ longitude: "43"; latitude: "72"; height: "154"; }
- ListElement{ longitude: "43"; latitude: "73"; height: "153"; }
- ListElement{ longitude: "43"; latitude: "74"; height: "136"; }
- ListElement{ longitude: "43"; latitude: "75"; height: "132"; }
- ListElement{ longitude: "43"; latitude: "76"; height: "101"; }
- ListElement{ longitude: "43"; latitude: "77"; height: "32"; }
- ListElement{ longitude: "43"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "80"; height: "23"; }
- ListElement{ longitude: "43"; latitude: "81"; height: "51"; }
- ListElement{ longitude: "43"; latitude: "82"; height: "50"; }
- ListElement{ longitude: "43"; latitude: "83"; height: "65"; }
- ListElement{ longitude: "43"; latitude: "84"; height: "30"; }
- ListElement{ longitude: "43"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "43"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "88"; height: "8"; }
- ListElement{ longitude: "43"; latitude: "89"; height: "2"; }
- ListElement{ longitude: "43"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "91"; height: "22"; }
- ListElement{ longitude: "43"; latitude: "92"; height: "42"; }
- ListElement{ longitude: "43"; latitude: "93"; height: "71"; }
- ListElement{ longitude: "43"; latitude: "94"; height: "86"; }
- ListElement{ longitude: "43"; latitude: "95"; height: "109"; }
- ListElement{ longitude: "43"; latitude: "96"; height: "139"; }
- ListElement{ longitude: "43"; latitude: "97"; height: "140"; }
- ListElement{ longitude: "43"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "43"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "2"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "44"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "44"; latitude: "11"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "14"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "44"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "44"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "44"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "44"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "58"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "44"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "64"; height: "134"; }
- ListElement{ longitude: "44"; latitude: "65"; height: "139"; }
- ListElement{ longitude: "44"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "44"; latitude: "67"; height: "138"; }
- ListElement{ longitude: "44"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "44"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "44"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "44"; latitude: "71"; height: "157"; }
- ListElement{ longitude: "44"; latitude: "72"; height: "153"; }
- ListElement{ longitude: "44"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "44"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "75"; height: "108"; }
- ListElement{ longitude: "44"; latitude: "76"; height: "85"; }
- ListElement{ longitude: "44"; latitude: "77"; height: "19"; }
- ListElement{ longitude: "44"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "44"; latitude: "79"; height: "48"; }
- ListElement{ longitude: "44"; latitude: "80"; height: "102"; }
- ListElement{ longitude: "44"; latitude: "81"; height: "112"; }
- ListElement{ longitude: "44"; latitude: "82"; height: "99"; }
- ListElement{ longitude: "44"; latitude: "83"; height: "90"; }
- ListElement{ longitude: "44"; latitude: "84"; height: "71"; }
- ListElement{ longitude: "44"; latitude: "85"; height: "26"; }
- ListElement{ longitude: "44"; latitude: "86"; height: "14"; }
- ListElement{ longitude: "44"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "44"; latitude: "88"; height: "2"; }
- ListElement{ longitude: "44"; latitude: "89"; height: "5"; }
- ListElement{ longitude: "44"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "44"; latitude: "91"; height: "8"; }
- ListElement{ longitude: "44"; latitude: "92"; height: "51"; }
- ListElement{ longitude: "44"; latitude: "93"; height: "67"; }
- ListElement{ longitude: "44"; latitude: "94"; height: "90"; }
- ListElement{ longitude: "44"; latitude: "95"; height: "102"; }
- ListElement{ longitude: "44"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "44"; latitude: "97"; height: "149"; }
- ListElement{ longitude: "44"; latitude: "98"; height: "145"; }
- ListElement{ longitude: "44"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "45"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "45"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "45"; latitude: "11"; height: "129"; }
- ListElement{ longitude: "45"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "45"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "14"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "45"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "45"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "60"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "61"; height: "119"; }
- ListElement{ longitude: "45"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "65"; height: "132"; }
- ListElement{ longitude: "45"; latitude: "66"; height: "133"; }
- ListElement{ longitude: "45"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "45"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "45"; latitude: "69"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "70"; height: "131"; }
- ListElement{ longitude: "45"; latitude: "71"; height: "156"; }
- ListElement{ longitude: "45"; latitude: "72"; height: "148"; }
- ListElement{ longitude: "45"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "45"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "45"; latitude: "75"; height: "86"; }
- ListElement{ longitude: "45"; latitude: "76"; height: "72"; }
- ListElement{ longitude: "45"; latitude: "77"; height: "42"; }
- ListElement{ longitude: "45"; latitude: "78"; height: "42"; }
- ListElement{ longitude: "45"; latitude: "79"; height: "84"; }
- ListElement{ longitude: "45"; latitude: "80"; height: "116"; }
- ListElement{ longitude: "45"; latitude: "81"; height: "95"; }
- ListElement{ longitude: "45"; latitude: "82"; height: "94"; }
- ListElement{ longitude: "45"; latitude: "83"; height: "84"; }
- ListElement{ longitude: "45"; latitude: "84"; height: "63"; }
- ListElement{ longitude: "45"; latitude: "85"; height: "21"; }
- ListElement{ longitude: "45"; latitude: "86"; height: "18"; }
- ListElement{ longitude: "45"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "89"; height: "2"; }
- ListElement{ longitude: "45"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "92"; height: "39"; }
- ListElement{ longitude: "45"; latitude: "93"; height: "58"; }
- ListElement{ longitude: "45"; latitude: "94"; height: "90"; }
- ListElement{ longitude: "45"; latitude: "95"; height: "103"; }
- ListElement{ longitude: "45"; latitude: "96"; height: "136"; }
- ListElement{ longitude: "45"; latitude: "97"; height: "149"; }
- ListElement{ longitude: "45"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "45"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "46"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "46"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "13"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "23"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "38"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "46"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "59"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "60"; height: "118"; }
- ListElement{ longitude: "46"; latitude: "61"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "46"; latitude: "63"; height: "118"; }
- ListElement{ longitude: "46"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "46"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "46"; latitude: "68"; height: "130"; }
- ListElement{ longitude: "46"; latitude: "69"; height: "131"; }
- ListElement{ longitude: "46"; latitude: "70"; height: "137"; }
- ListElement{ longitude: "46"; latitude: "71"; height: "156"; }
- ListElement{ longitude: "46"; latitude: "72"; height: "151"; }
- ListElement{ longitude: "46"; latitude: "73"; height: "152"; }
- ListElement{ longitude: "46"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "46"; latitude: "75"; height: "85"; }
- ListElement{ longitude: "46"; latitude: "76"; height: "46"; }
- ListElement{ longitude: "46"; latitude: "77"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "79"; height: "67"; }
- ListElement{ longitude: "46"; latitude: "80"; height: "98"; }
- ListElement{ longitude: "46"; latitude: "81"; height: "68"; }
- ListElement{ longitude: "46"; latitude: "82"; height: "62"; }
- ListElement{ longitude: "46"; latitude: "83"; height: "62"; }
- ListElement{ longitude: "46"; latitude: "84"; height: "77"; }
- ListElement{ longitude: "46"; latitude: "85"; height: "33"; }
- ListElement{ longitude: "46"; latitude: "86"; height: "20"; }
- ListElement{ longitude: "46"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "92"; height: "41"; }
- ListElement{ longitude: "46"; latitude: "93"; height: "70"; }
- ListElement{ longitude: "46"; latitude: "94"; height: "89"; }
- ListElement{ longitude: "46"; latitude: "95"; height: "108"; }
- ListElement{ longitude: "46"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "46"; latitude: "97"; height: "153"; }
- ListElement{ longitude: "46"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "46"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "47"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "47"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "47"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "13"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "22"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "35"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "47"; latitude: "47"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "47"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "51"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "55"; height: "118"; }
- ListElement{ longitude: "47"; latitude: "56"; height: "117"; }
- ListElement{ longitude: "47"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "47"; latitude: "58"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "60"; height: "117"; }
- ListElement{ longitude: "47"; latitude: "61"; height: "114"; }
- ListElement{ longitude: "47"; latitude: "62"; height: "111"; }
- ListElement{ longitude: "47"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "47"; latitude: "64"; height: "115"; }
- ListElement{ longitude: "47"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "47"; latitude: "66"; height: "121"; }
- ListElement{ longitude: "47"; latitude: "67"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "69"; height: "128"; }
- ListElement{ longitude: "47"; latitude: "70"; height: "138"; }
- ListElement{ longitude: "47"; latitude: "71"; height: "161"; }
- ListElement{ longitude: "47"; latitude: "72"; height: "157"; }
- ListElement{ longitude: "47"; latitude: "73"; height: "158"; }
- ListElement{ longitude: "47"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "75"; height: "98"; }
- ListElement{ longitude: "47"; latitude: "76"; height: "38"; }
- ListElement{ longitude: "47"; latitude: "77"; height: "4"; }
- ListElement{ longitude: "47"; latitude: "78"; height: "16"; }
- ListElement{ longitude: "47"; latitude: "79"; height: "36"; }
- ListElement{ longitude: "47"; latitude: "80"; height: "103"; }
- ListElement{ longitude: "47"; latitude: "81"; height: "83"; }
- ListElement{ longitude: "47"; latitude: "82"; height: "47"; }
- ListElement{ longitude: "47"; latitude: "83"; height: "72"; }
- ListElement{ longitude: "47"; latitude: "84"; height: "97"; }
- ListElement{ longitude: "47"; latitude: "85"; height: "22"; }
- ListElement{ longitude: "47"; latitude: "86"; height: "18"; }
- ListElement{ longitude: "47"; latitude: "87"; height: "2"; }
- ListElement{ longitude: "47"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "92"; height: "43"; }
- ListElement{ longitude: "47"; latitude: "93"; height: "76"; }
- ListElement{ longitude: "47"; latitude: "94"; height: "91"; }
- ListElement{ longitude: "47"; latitude: "95"; height: "106"; }
- ListElement{ longitude: "47"; latitude: "96"; height: "143"; }
- ListElement{ longitude: "47"; latitude: "97"; height: "155"; }
- ListElement{ longitude: "47"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "47"; latitude: "99"; height: "131"; }
- ListElement{ longitude: "48"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "48"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "48"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "19"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "28"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "48"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "48"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "48"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "48"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "48"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "48"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "48"; latitude: "54"; height: "118"; }
- ListElement{ longitude: "48"; latitude: "55"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "56"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "57"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "58"; height: "116"; }
- ListElement{ longitude: "48"; latitude: "59"; height: "116"; }
- ListElement{ longitude: "48"; latitude: "60"; height: "113"; }
- ListElement{ longitude: "48"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "48"; latitude: "62"; height: "110"; }
- ListElement{ longitude: "48"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "48"; latitude: "64"; height: "109"; }
- ListElement{ longitude: "48"; latitude: "65"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "48"; latitude: "67"; height: "118"; }
- ListElement{ longitude: "48"; latitude: "68"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "69"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "70"; height: "120"; }
- ListElement{ longitude: "48"; latitude: "71"; height: "145"; }
- ListElement{ longitude: "48"; latitude: "72"; height: "154"; }
- ListElement{ longitude: "48"; latitude: "73"; height: "153"; }
- ListElement{ longitude: "48"; latitude: "74"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "75"; height: "106"; }
- ListElement{ longitude: "48"; latitude: "76"; height: "52"; }
- ListElement{ longitude: "48"; latitude: "77"; height: "6"; }
- ListElement{ longitude: "48"; latitude: "78"; height: "6"; }
- ListElement{ longitude: "48"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "80"; height: "67"; }
- ListElement{ longitude: "48"; latitude: "81"; height: "81"; }
- ListElement{ longitude: "48"; latitude: "82"; height: "57"; }
- ListElement{ longitude: "48"; latitude: "83"; height: "93"; }
- ListElement{ longitude: "48"; latitude: "84"; height: "58"; }
- ListElement{ longitude: "48"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "48"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "88"; height: "2"; }
- ListElement{ longitude: "48"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "92"; height: "45"; }
- ListElement{ longitude: "48"; latitude: "93"; height: "80"; }
- ListElement{ longitude: "48"; latitude: "94"; height: "91"; }
- ListElement{ longitude: "48"; latitude: "95"; height: "97"; }
- ListElement{ longitude: "48"; latitude: "96"; height: "136"; }
- ListElement{ longitude: "48"; latitude: "97"; height: "148"; }
- ListElement{ longitude: "48"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "48"; latitude: "99"; height: "131"; }
- ListElement{ longitude: "49"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "49"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "49"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "49"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "20"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "21"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "22"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "49"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "49"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "28"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "49"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "49"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "49"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "49"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "49"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "49"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "49"; latitude: "50"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "51"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "49"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "49"; latitude: "54"; height: "116"; }
- ListElement{ longitude: "49"; latitude: "55"; height: "111"; }
- ListElement{ longitude: "49"; latitude: "56"; height: "110"; }
- ListElement{ longitude: "49"; latitude: "57"; height: "108"; }
- ListElement{ longitude: "49"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "49"; latitude: "59"; height: "113"; }
- ListElement{ longitude: "49"; latitude: "60"; height: "113"; }
- ListElement{ longitude: "49"; latitude: "61"; height: "110"; }
- ListElement{ longitude: "49"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "49"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "49"; latitude: "64"; height: "107"; }
- ListElement{ longitude: "49"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "49"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "49"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "49"; latitude: "68"; height: "118"; }
- ListElement{ longitude: "49"; latitude: "69"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "49"; latitude: "71"; height: "138"; }
- ListElement{ longitude: "49"; latitude: "72"; height: "153"; }
- ListElement{ longitude: "49"; latitude: "73"; height: "156"; }
- ListElement{ longitude: "49"; latitude: "74"; height: "148"; }
- ListElement{ longitude: "49"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "49"; latitude: "76"; height: "83"; }
- ListElement{ longitude: "49"; latitude: "77"; height: "31"; }
- ListElement{ longitude: "49"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "79"; height: "9"; }
- ListElement{ longitude: "49"; latitude: "80"; height: "36"; }
- ListElement{ longitude: "49"; latitude: "81"; height: "12"; }
- ListElement{ longitude: "49"; latitude: "82"; height: "15"; }
- ListElement{ longitude: "49"; latitude: "83"; height: "23"; }
- ListElement{ longitude: "49"; latitude: "84"; height: "22"; }
- ListElement{ longitude: "49"; latitude: "85"; height: "9"; }
- ListElement{ longitude: "49"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "91"; height: "5"; }
- ListElement{ longitude: "49"; latitude: "92"; height: "22"; }
- ListElement{ longitude: "49"; latitude: "93"; height: "64"; }
- ListElement{ longitude: "49"; latitude: "94"; height: "87"; }
- ListElement{ longitude: "49"; latitude: "95"; height: "89"; }
- ListElement{ longitude: "49"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "49"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "49"; latitude: "98"; height: "136"; }
- ListElement{ longitude: "49"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "50"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "13"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "50"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "18"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "50"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "23"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "27"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "50"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "35"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "46"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "50"; latitude: "54"; height: "112"; }
- ListElement{ longitude: "50"; latitude: "55"; height: "107"; }
- ListElement{ longitude: "50"; latitude: "56"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "57"; height: "106"; }
- ListElement{ longitude: "50"; latitude: "58"; height: "107"; }
- ListElement{ longitude: "50"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "50"; latitude: "61"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "62"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "50"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "50"; latitude: "69"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "71"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "72"; height: "141"; }
- ListElement{ longitude: "50"; latitude: "73"; height: "150"; }
- ListElement{ longitude: "50"; latitude: "74"; height: "153"; }
- ListElement{ longitude: "50"; latitude: "75"; height: "118"; }
- ListElement{ longitude: "50"; latitude: "76"; height: "85"; }
- ListElement{ longitude: "50"; latitude: "77"; height: "65"; }
- ListElement{ longitude: "50"; latitude: "78"; height: "19"; }
- ListElement{ longitude: "50"; latitude: "79"; height: "18"; }
- ListElement{ longitude: "50"; latitude: "80"; height: "28"; }
- ListElement{ longitude: "50"; latitude: "81"; height: "3"; }
- ListElement{ longitude: "50"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "83"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "84"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "91"; height: "19"; }
- ListElement{ longitude: "50"; latitude: "92"; height: "10"; }
- ListElement{ longitude: "50"; latitude: "93"; height: "59"; }
- ListElement{ longitude: "50"; latitude: "94"; height: "72"; }
- ListElement{ longitude: "50"; latitude: "95"; height: "95"; }
- ListElement{ longitude: "50"; latitude: "96"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "97"; height: "129"; }
- ListElement{ longitude: "50"; latitude: "98"; height: "132"; }
- ListElement{ longitude: "50"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "12"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "14"; height: "119"; }
- ListElement{ longitude: "51"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "51"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "17"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "18"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "20"; height: "118"; }
- ListElement{ longitude: "51"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "27"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "42"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "51"; latitude: "49"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "51"; latitude: "54"; height: "111"; }
- ListElement{ longitude: "51"; latitude: "55"; height: "105"; }
- ListElement{ longitude: "51"; latitude: "56"; height: "102"; }
- ListElement{ longitude: "51"; latitude: "57"; height: "102"; }
- ListElement{ longitude: "51"; latitude: "58"; height: "105"; }
- ListElement{ longitude: "51"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "51"; latitude: "60"; height: "111"; }
- ListElement{ longitude: "51"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "51"; latitude: "62"; height: "109"; }
- ListElement{ longitude: "51"; latitude: "63"; height: "109"; }
- ListElement{ longitude: "51"; latitude: "64"; height: "109"; }
- ListElement{ longitude: "51"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "51"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "51"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "51"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "51"; latitude: "69"; height: "118"; }
- ListElement{ longitude: "51"; latitude: "70"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "71"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "72"; height: "133"; }
- ListElement{ longitude: "51"; latitude: "73"; height: "151"; }
- ListElement{ longitude: "51"; latitude: "74"; height: "153"; }
- ListElement{ longitude: "51"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "51"; latitude: "76"; height: "98"; }
- ListElement{ longitude: "51"; latitude: "77"; height: "64"; }
- ListElement{ longitude: "51"; latitude: "78"; height: "32"; }
- ListElement{ longitude: "51"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "80"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "81"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "83"; height: "6"; }
- ListElement{ longitude: "51"; latitude: "84"; height: "8"; }
- ListElement{ longitude: "51"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "89"; height: "13"; }
- ListElement{ longitude: "51"; latitude: "90"; height: "15"; }
- ListElement{ longitude: "51"; latitude: "91"; height: "22"; }
- ListElement{ longitude: "51"; latitude: "92"; height: "33"; }
- ListElement{ longitude: "51"; latitude: "93"; height: "67"; }
- ListElement{ longitude: "51"; latitude: "94"; height: "69"; }
- ListElement{ longitude: "51"; latitude: "95"; height: "110"; }
- ListElement{ longitude: "51"; latitude: "96"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "97"; height: "127"; }
- ListElement{ longitude: "51"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "51"; latitude: "99"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "0"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "1"; height: "119"; }
- ListElement{ longitude: "52"; latitude: "2"; height: "117"; }
- ListElement{ longitude: "52"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "41"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "52"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "52"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "52"; latitude: "53"; height: "116"; }
- ListElement{ longitude: "52"; latitude: "54"; height: "110"; }
- ListElement{ longitude: "52"; latitude: "55"; height: "106"; }
- ListElement{ longitude: "52"; latitude: "56"; height: "101"; }
- ListElement{ longitude: "52"; latitude: "57"; height: "101"; }
- ListElement{ longitude: "52"; latitude: "58"; height: "104"; }
- ListElement{ longitude: "52"; latitude: "59"; height: "107"; }
- ListElement{ longitude: "52"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "52"; latitude: "61"; height: "112"; }
- ListElement{ longitude: "52"; latitude: "62"; height: "112"; }
- ListElement{ longitude: "52"; latitude: "63"; height: "110"; }
- ListElement{ longitude: "52"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "52"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "52"; latitude: "66"; height: "114"; }
- ListElement{ longitude: "52"; latitude: "67"; height: "116"; }
- ListElement{ longitude: "52"; latitude: "68"; height: "115"; }
- ListElement{ longitude: "52"; latitude: "69"; height: "116"; }
- ListElement{ longitude: "52"; latitude: "70"; height: "117"; }
- ListElement{ longitude: "52"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "72"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "73"; height: "146"; }
- ListElement{ longitude: "52"; latitude: "74"; height: "152"; }
- ListElement{ longitude: "52"; latitude: "75"; height: "148"; }
- ListElement{ longitude: "52"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "52"; latitude: "77"; height: "93"; }
- ListElement{ longitude: "52"; latitude: "78"; height: "72"; }
- ListElement{ longitude: "52"; latitude: "79"; height: "50"; }
- ListElement{ longitude: "52"; latitude: "80"; height: "16"; }
- ListElement{ longitude: "52"; latitude: "81"; height: "1"; }
- ListElement{ longitude: "52"; latitude: "82"; height: "3"; }
- ListElement{ longitude: "52"; latitude: "83"; height: "6"; }
- ListElement{ longitude: "52"; latitude: "84"; height: "24"; }
- ListElement{ longitude: "52"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "52"; latitude: "86"; height: "4"; }
- ListElement{ longitude: "52"; latitude: "87"; height: "4"; }
- ListElement{ longitude: "52"; latitude: "88"; height: "7"; }
- ListElement{ longitude: "52"; latitude: "89"; height: "42"; }
- ListElement{ longitude: "52"; latitude: "90"; height: "52"; }
- ListElement{ longitude: "52"; latitude: "91"; height: "47"; }
- ListElement{ longitude: "52"; latitude: "92"; height: "46"; }
- ListElement{ longitude: "52"; latitude: "93"; height: "61"; }
- ListElement{ longitude: "52"; latitude: "94"; height: "73"; }
- ListElement{ longitude: "52"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "52"; latitude: "96"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "97"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "98"; height: "129"; }
- ListElement{ longitude: "52"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "1"; height: "117"; }
- ListElement{ longitude: "53"; latitude: "2"; height: "116"; }
- ListElement{ longitude: "53"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "11"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "15"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "24"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "27"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "53"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "53"; latitude: "30"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "53"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "48"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "49"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "53"; latitude: "53"; height: "114"; }
- ListElement{ longitude: "53"; latitude: "54"; height: "106"; }
- ListElement{ longitude: "53"; latitude: "55"; height: "108"; }
- ListElement{ longitude: "53"; latitude: "56"; height: "105"; }
- ListElement{ longitude: "53"; latitude: "57"; height: "104"; }
- ListElement{ longitude: "53"; latitude: "58"; height: "103"; }
- ListElement{ longitude: "53"; latitude: "59"; height: "107"; }
- ListElement{ longitude: "53"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "53"; latitude: "61"; height: "112"; }
- ListElement{ longitude: "53"; latitude: "62"; height: "111"; }
- ListElement{ longitude: "53"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "53"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "53"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "53"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "53"; latitude: "67"; height: "116"; }
- ListElement{ longitude: "53"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "53"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "53"; latitude: "70"; height: "114"; }
- ListElement{ longitude: "53"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "53"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "53"; latitude: "73"; height: "133"; }
- ListElement{ longitude: "53"; latitude: "74"; height: "150"; }
- ListElement{ longitude: "53"; latitude: "75"; height: "154"; }
- ListElement{ longitude: "53"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "53"; latitude: "77"; height: "103"; }
- ListElement{ longitude: "53"; latitude: "78"; height: "97"; }
- ListElement{ longitude: "53"; latitude: "79"; height: "94"; }
- ListElement{ longitude: "53"; latitude: "80"; height: "54"; }
- ListElement{ longitude: "53"; latitude: "81"; height: "17"; }
- ListElement{ longitude: "53"; latitude: "82"; height: "5"; }
- ListElement{ longitude: "53"; latitude: "83"; height: "4"; }
- ListElement{ longitude: "53"; latitude: "84"; height: "1"; }
- ListElement{ longitude: "53"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "53"; latitude: "86"; height: "19"; }
- ListElement{ longitude: "53"; latitude: "87"; height: "9"; }
- ListElement{ longitude: "53"; latitude: "88"; height: "25"; }
- ListElement{ longitude: "53"; latitude: "89"; height: "40"; }
- ListElement{ longitude: "53"; latitude: "90"; height: "55"; }
- ListElement{ longitude: "53"; latitude: "91"; height: "54"; }
- ListElement{ longitude: "53"; latitude: "92"; height: "53"; }
- ListElement{ longitude: "53"; latitude: "93"; height: "69"; }
- ListElement{ longitude: "53"; latitude: "94"; height: "100"; }
- ListElement{ longitude: "53"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "53"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "54"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "2"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "54"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "54"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "17"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "18"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "26"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "31"; height: "123"; }
- ListElement{ longitude: "54"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "54"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "54"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "54"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "54"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "50"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "53"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "54"; height: "96"; }
- ListElement{ longitude: "54"; latitude: "55"; height: "107"; }
- ListElement{ longitude: "54"; latitude: "56"; height: "108"; }
- ListElement{ longitude: "54"; latitude: "57"; height: "105"; }
- ListElement{ longitude: "54"; latitude: "58"; height: "105"; }
- ListElement{ longitude: "54"; latitude: "59"; height: "108"; }
- ListElement{ longitude: "54"; latitude: "60"; height: "111"; }
- ListElement{ longitude: "54"; latitude: "61"; height: "111"; }
- ListElement{ longitude: "54"; latitude: "62"; height: "115"; }
- ListElement{ longitude: "54"; latitude: "63"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "64"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "65"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "54"; latitude: "67"; height: "113"; }
- ListElement{ longitude: "54"; latitude: "68"; height: "115"; }
- ListElement{ longitude: "54"; latitude: "69"; height: "115"; }
- ListElement{ longitude: "54"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "54"; latitude: "72"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "54"; latitude: "74"; height: "140"; }
- ListElement{ longitude: "54"; latitude: "75"; height: "151"; }
- ListElement{ longitude: "54"; latitude: "76"; height: "150"; }
- ListElement{ longitude: "54"; latitude: "77"; height: "140"; }
- ListElement{ longitude: "54"; latitude: "78"; height: "104"; }
- ListElement{ longitude: "54"; latitude: "79"; height: "102"; }
- ListElement{ longitude: "54"; latitude: "80"; height: "90"; }
- ListElement{ longitude: "54"; latitude: "81"; height: "46"; }
- ListElement{ longitude: "54"; latitude: "82"; height: "37"; }
- ListElement{ longitude: "54"; latitude: "83"; height: "30"; }
- ListElement{ longitude: "54"; latitude: "84"; height: "24"; }
- ListElement{ longitude: "54"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "54"; latitude: "86"; height: "18"; }
- ListElement{ longitude: "54"; latitude: "87"; height: "46"; }
- ListElement{ longitude: "54"; latitude: "88"; height: "26"; }
- ListElement{ longitude: "54"; latitude: "89"; height: "28"; }
- ListElement{ longitude: "54"; latitude: "90"; height: "60"; }
- ListElement{ longitude: "54"; latitude: "91"; height: "51"; }
- ListElement{ longitude: "54"; latitude: "92"; height: "54"; }
- ListElement{ longitude: "54"; latitude: "93"; height: "108"; }
- ListElement{ longitude: "54"; latitude: "94"; height: "131"; }
- ListElement{ longitude: "54"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "54"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "55"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "55"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "55"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "55"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "18"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "32"; height: "116"; }
- ListElement{ longitude: "55"; latitude: "33"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "55"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "55"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "48"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "49"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "55"; latitude: "53"; height: "114"; }
- ListElement{ longitude: "55"; latitude: "54"; height: "112"; }
- ListElement{ longitude: "55"; latitude: "55"; height: "115"; }
- ListElement{ longitude: "55"; latitude: "56"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "57"; height: "112"; }
- ListElement{ longitude: "55"; latitude: "58"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "59"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "60"; height: "111"; }
- ListElement{ longitude: "55"; latitude: "61"; height: "111"; }
- ListElement{ longitude: "55"; latitude: "62"; height: "114"; }
- ListElement{ longitude: "55"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "64"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "55"; latitude: "68"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "55"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "72"; height: "109"; }
- ListElement{ longitude: "55"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "75"; height: "145"; }
- ListElement{ longitude: "55"; latitude: "76"; height: "156"; }
- ListElement{ longitude: "55"; latitude: "77"; height: "161"; }
- ListElement{ longitude: "55"; latitude: "78"; height: "148"; }
- ListElement{ longitude: "55"; latitude: "79"; height: "109"; }
- ListElement{ longitude: "55"; latitude: "80"; height: "99"; }
- ListElement{ longitude: "55"; latitude: "81"; height: "90"; }
- ListElement{ longitude: "55"; latitude: "82"; height: "59"; }
- ListElement{ longitude: "55"; latitude: "83"; height: "48"; }
- ListElement{ longitude: "55"; latitude: "84"; height: "35"; }
- ListElement{ longitude: "55"; latitude: "85"; height: "9"; }
- ListElement{ longitude: "55"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "55"; latitude: "87"; height: "32"; }
- ListElement{ longitude: "55"; latitude: "88"; height: "55"; }
- ListElement{ longitude: "55"; latitude: "89"; height: "52"; }
- ListElement{ longitude: "55"; latitude: "90"; height: "55"; }
- ListElement{ longitude: "55"; latitude: "91"; height: "70"; }
- ListElement{ longitude: "55"; latitude: "92"; height: "90"; }
- ListElement{ longitude: "55"; latitude: "93"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "95"; height: "118"; }
- ListElement{ longitude: "55"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "1"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "56"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "56"; latitude: "12"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "56"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "56"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "56"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "41"; height: "130"; }
- ListElement{ longitude: "56"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "48"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "56"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "52"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "56"; latitude: "54"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "55"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "56"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "57"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "56"; latitude: "59"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "56"; latitude: "62"; height: "115"; }
- ListElement{ longitude: "56"; latitude: "63"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "64"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "68"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "56"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "56"; latitude: "71"; height: "107"; }
- ListElement{ longitude: "56"; latitude: "72"; height: "106"; }
- ListElement{ longitude: "56"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "56"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "75"; height: "129"; }
- ListElement{ longitude: "56"; latitude: "76"; height: "142"; }
- ListElement{ longitude: "56"; latitude: "77"; height: "164"; }
- ListElement{ longitude: "56"; latitude: "78"; height: "167"; }
- ListElement{ longitude: "56"; latitude: "79"; height: "152"; }
- ListElement{ longitude: "56"; latitude: "80"; height: "134"; }
- ListElement{ longitude: "56"; latitude: "81"; height: "118"; }
- ListElement{ longitude: "56"; latitude: "82"; height: "99"; }
- ListElement{ longitude: "56"; latitude: "83"; height: "102"; }
- ListElement{ longitude: "56"; latitude: "84"; height: "102"; }
- ListElement{ longitude: "56"; latitude: "85"; height: "88"; }
- ListElement{ longitude: "56"; latitude: "86"; height: "73"; }
- ListElement{ longitude: "56"; latitude: "87"; height: "66"; }
- ListElement{ longitude: "56"; latitude: "88"; height: "56"; }
- ListElement{ longitude: "56"; latitude: "89"; height: "51"; }
- ListElement{ longitude: "56"; latitude: "90"; height: "73"; }
- ListElement{ longitude: "56"; latitude: "91"; height: "104"; }
- ListElement{ longitude: "56"; latitude: "92"; height: "110"; }
- ListElement{ longitude: "56"; latitude: "93"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "95"; height: "122"; }
- ListElement{ longitude: "56"; latitude: "96"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "57"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "6"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "57"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "11"; height: "124"; }
- ListElement{ longitude: "57"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "13"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "14"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "26"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "29"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "31"; height: "123"; }
- ListElement{ longitude: "57"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "57"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "57"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "57"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "57"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "57"; latitude: "49"; height: "130"; }
- ListElement{ longitude: "57"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "53"; height: "111"; }
- ListElement{ longitude: "57"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "56"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "58"; height: "117"; }
- ListElement{ longitude: "57"; latitude: "59"; height: "115"; }
- ListElement{ longitude: "57"; latitude: "60"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "61"; height: "114"; }
- ListElement{ longitude: "57"; latitude: "62"; height: "114"; }
- ListElement{ longitude: "57"; latitude: "63"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "64"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "57"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "57"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "57"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "57"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "57"; latitude: "72"; height: "110"; }
- ListElement{ longitude: "57"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "57"; latitude: "74"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "76"; height: "133"; }
- ListElement{ longitude: "57"; latitude: "77"; height: "139"; }
- ListElement{ longitude: "57"; latitude: "78"; height: "148"; }
- ListElement{ longitude: "57"; latitude: "79"; height: "161"; }
- ListElement{ longitude: "57"; latitude: "80"; height: "167"; }
- ListElement{ longitude: "57"; latitude: "81"; height: "167"; }
- ListElement{ longitude: "57"; latitude: "82"; height: "164"; }
- ListElement{ longitude: "57"; latitude: "83"; height: "152"; }
- ListElement{ longitude: "57"; latitude: "84"; height: "143"; }
- ListElement{ longitude: "57"; latitude: "85"; height: "138"; }
- ListElement{ longitude: "57"; latitude: "86"; height: "102"; }
- ListElement{ longitude: "57"; latitude: "87"; height: "94"; }
- ListElement{ longitude: "57"; latitude: "88"; height: "81"; }
- ListElement{ longitude: "57"; latitude: "89"; height: "81"; }
- ListElement{ longitude: "57"; latitude: "90"; height: "91"; }
- ListElement{ longitude: "57"; latitude: "91"; height: "99"; }
- ListElement{ longitude: "57"; latitude: "92"; height: "107"; }
- ListElement{ longitude: "57"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "57"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "57"; latitude: "96"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "97"; height: "130"; }
- ListElement{ longitude: "57"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "57"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "0"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "58"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "58"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "58"; latitude: "9"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "10"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "11"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "19"; height: "118"; }
- ListElement{ longitude: "58"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "26"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "28"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "32"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "58"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "58"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "58"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "40"; height: "130"; }
- ListElement{ longitude: "58"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "46"; height: "123"; }
- ListElement{ longitude: "58"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "58"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "58"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "58"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "58"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "58"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "58"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "58"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "60"; height: "118"; }
- ListElement{ longitude: "58"; latitude: "61"; height: "116"; }
- ListElement{ longitude: "58"; latitude: "62"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "63"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "64"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "65"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "66"; height: "117"; }
- ListElement{ longitude: "58"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "58"; latitude: "68"; height: "114"; }
- ListElement{ longitude: "58"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "58"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "58"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "58"; latitude: "72"; height: "109"; }
- ListElement{ longitude: "58"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "58"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "58"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "78"; height: "136"; }
- ListElement{ longitude: "58"; latitude: "79"; height: "139"; }
- ListElement{ longitude: "58"; latitude: "80"; height: "142"; }
- ListElement{ longitude: "58"; latitude: "81"; height: "149"; }
- ListElement{ longitude: "58"; latitude: "82"; height: "153"; }
- ListElement{ longitude: "58"; latitude: "83"; height: "149"; }
- ListElement{ longitude: "58"; latitude: "84"; height: "141"; }
- ListElement{ longitude: "58"; latitude: "85"; height: "134"; }
- ListElement{ longitude: "58"; latitude: "86"; height: "113"; }
- ListElement{ longitude: "58"; latitude: "87"; height: "94"; }
- ListElement{ longitude: "58"; latitude: "88"; height: "83"; }
- ListElement{ longitude: "58"; latitude: "89"; height: "89"; }
- ListElement{ longitude: "58"; latitude: "90"; height: "98"; }
- ListElement{ longitude: "58"; latitude: "91"; height: "109"; }
- ListElement{ longitude: "58"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "93"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "58"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "58"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "58"; latitude: "99"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "13"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "19"; height: "118"; }
- ListElement{ longitude: "59"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "23"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "59"; latitude: "30"; height: "105"; }
- ListElement{ longitude: "59"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "34"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "59"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "39"; height: "130"; }
- ListElement{ longitude: "59"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "59"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "59"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "59"; latitude: "47"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "59"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "59"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "59"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "59"; latitude: "52"; height: "132"; }
- ListElement{ longitude: "59"; latitude: "53"; height: "129"; }
- ListElement{ longitude: "59"; latitude: "54"; height: "128"; }
- ListElement{ longitude: "59"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "58"; height: "116"; }
- ListElement{ longitude: "59"; latitude: "59"; height: "115"; }
- ListElement{ longitude: "59"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "59"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "59"; latitude: "62"; height: "112"; }
- ListElement{ longitude: "59"; latitude: "63"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "59"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "59"; latitude: "68"; height: "113"; }
- ListElement{ longitude: "59"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "59"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "59"; latitude: "72"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "73"; height: "116"; }
- ListElement{ longitude: "59"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "59"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "76"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "77"; height: "118"; }
- ListElement{ longitude: "59"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "80"; height: "132"; }
- ListElement{ longitude: "59"; latitude: "81"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "82"; height: "132"; }
- ListElement{ longitude: "59"; latitude: "83"; height: "139"; }
- ListElement{ longitude: "59"; latitude: "84"; height: "133"; }
- ListElement{ longitude: "59"; latitude: "85"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "86"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "59"; latitude: "88"; height: "92"; }
- ListElement{ longitude: "59"; latitude: "89"; height: "95"; }
- ListElement{ longitude: "59"; latitude: "90"; height: "100"; }
- ListElement{ longitude: "59"; latitude: "91"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "95"; height: "130"; }
- ListElement{ longitude: "59"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "59"; latitude: "98"; height: "138"; }
- ListElement{ longitude: "59"; latitude: "99"; height: "135"; }
- ListElement{ longitude: "60"; latitude: "0"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "4"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "60"; latitude: "6"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "60"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "60"; latitude: "9"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "13"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "15"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "17"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "25"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "30"; height: "111"; }
- ListElement{ longitude: "60"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "33"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "60"; latitude: "35"; height: "129"; }
- ListElement{ longitude: "60"; latitude: "36"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "37"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "38"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "60"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "44"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "60"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "60"; latitude: "50"; height: "139"; }
- ListElement{ longitude: "60"; latitude: "51"; height: "135"; }
- ListElement{ longitude: "60"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "60"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "55"; height: "117"; }
- ListElement{ longitude: "60"; latitude: "56"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "60"; latitude: "58"; height: "116"; }
- ListElement{ longitude: "60"; latitude: "59"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "60"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "62"; height: "114"; }
- ListElement{ longitude: "60"; latitude: "63"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "60"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "60"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "60"; latitude: "67"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "71"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "72"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "75"; height: "117"; }
- ListElement{ longitude: "60"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "60"; latitude: "77"; height: "123"; }
- ListElement{ longitude: "60"; latitude: "78"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "79"; height: "125"; }
- ListElement{ longitude: "60"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "81"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "82"; height: "132"; }
- ListElement{ longitude: "60"; latitude: "83"; height: "132"; }
- ListElement{ longitude: "60"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "86"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "87"; height: "102"; }
- ListElement{ longitude: "60"; latitude: "88"; height: "98"; }
- ListElement{ longitude: "60"; latitude: "89"; height: "103"; }
- ListElement{ longitude: "60"; latitude: "90"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "91"; height: "114"; }
- ListElement{ longitude: "60"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "60"; latitude: "96"; height: "137"; }
- ListElement{ longitude: "60"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "60"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "60"; latitude: "99"; height: "138"; }
- ListElement{ longitude: "61"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "6"; height: "129"; }
- ListElement{ longitude: "61"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "9"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "12"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "15"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "17"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "20"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "29"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "31"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "32"; height: "126"; }
- ListElement{ longitude: "61"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "35"; height: "130"; }
- ListElement{ longitude: "61"; latitude: "36"; height: "129"; }
- ListElement{ longitude: "61"; latitude: "37"; height: "130"; }
- ListElement{ longitude: "61"; latitude: "38"; height: "129"; }
- ListElement{ longitude: "61"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "61"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "61"; latitude: "41"; height: "107"; }
- ListElement{ longitude: "61"; latitude: "42"; height: "98"; }
- ListElement{ longitude: "61"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "44"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "61"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "61"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "61"; latitude: "50"; height: "138"; }
- ListElement{ longitude: "61"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "61"; latitude: "52"; height: "134"; }
- ListElement{ longitude: "61"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "61"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "61"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "61"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "61"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "62"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "63"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "67"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "68"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "61"; latitude: "72"; height: "116"; }
- ListElement{ longitude: "61"; latitude: "73"; height: "116"; }
- ListElement{ longitude: "61"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "77"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "80"; height: "124"; }
- ListElement{ longitude: "61"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "82"; height: "128"; }
- ListElement{ longitude: "61"; latitude: "83"; height: "128"; }
- ListElement{ longitude: "61"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "61"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "86"; height: "116"; }
- ListElement{ longitude: "61"; latitude: "87"; height: "112"; }
- ListElement{ longitude: "61"; latitude: "88"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "89"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "90"; height: "113"; }
- ListElement{ longitude: "61"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "61"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "61"; latitude: "97"; height: "144"; }
- ListElement{ longitude: "61"; latitude: "98"; height: "143"; }
- ListElement{ longitude: "61"; latitude: "99"; height: "137"; }
- ListElement{ longitude: "62"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "4"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "5"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "6"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "9"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "10"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "14"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "17"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "19"; height: "117"; }
- ListElement{ longitude: "62"; latitude: "20"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "22"; height: "110"; }
- ListElement{ longitude: "62"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "62"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "27"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "29"; height: "117"; }
- ListElement{ longitude: "62"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "35"; height: "130"; }
- ListElement{ longitude: "62"; latitude: "36"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "41"; height: "106"; }
- ListElement{ longitude: "62"; latitude: "42"; height: "94"; }
- ListElement{ longitude: "62"; latitude: "43"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "48"; height: "132"; }
- ListElement{ longitude: "62"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "62"; latitude: "50"; height: "137"; }
- ListElement{ longitude: "62"; latitude: "51"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "62"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "54"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "56"; height: "110"; }
- ListElement{ longitude: "62"; latitude: "57"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "62"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "62"; latitude: "60"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "61"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "63"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "67"; height: "106"; }
- ListElement{ longitude: "62"; latitude: "68"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "70"; height: "109"; }
- ListElement{ longitude: "62"; latitude: "71"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "72"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "73"; height: "118"; }
- ListElement{ longitude: "62"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "79"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "80"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "81"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "83"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "86"; height: "118"; }
- ListElement{ longitude: "62"; latitude: "87"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "62"; latitude: "89"; height: "113"; }
- ListElement{ longitude: "62"; latitude: "90"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "91"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "95"; height: "118"; }
- ListElement{ longitude: "62"; latitude: "96"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "63"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "8"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "9"; height: "118"; }
- ListElement{ longitude: "63"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "11"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "13"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "15"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "63"; latitude: "18"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "19"; height: "116"; }
- ListElement{ longitude: "63"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "21"; height: "116"; }
- ListElement{ longitude: "63"; latitude: "22"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "63"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "63"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "63"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "63"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "63"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "63"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "63"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "63"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "63"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "63"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "63"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "56"; height: "110"; }
- ListElement{ longitude: "63"; latitude: "57"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "60"; height: "107"; }
- ListElement{ longitude: "63"; latitude: "61"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "62"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "63"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "64"; height: "104"; }
- ListElement{ longitude: "63"; latitude: "65"; height: "104"; }
- ListElement{ longitude: "63"; latitude: "66"; height: "104"; }
- ListElement{ longitude: "63"; latitude: "67"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "68"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "63"; latitude: "70"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "71"; height: "114"; }
- ListElement{ longitude: "63"; latitude: "72"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "73"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "63"; latitude: "78"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "79"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "80"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "81"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "83"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "84"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "87"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "89"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "90"; height: "118"; }
- ListElement{ longitude: "63"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "93"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "63"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "63"; latitude: "96"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "97"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "98"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "5"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "7"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "8"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "9"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "10"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "11"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "12"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "13"; height: "115"; }
- ListElement{ longitude: "64"; latitude: "14"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "15"; height: "117"; }
- ListElement{ longitude: "64"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "19"; height: "115"; }
- ListElement{ longitude: "64"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "21"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "23"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "64"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "64"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "64"; latitude: "27"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "30"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "31"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "34"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "35"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "64"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "40"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "64"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "64"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "64"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "64"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "64"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "64"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "64"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "64"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "64"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "64"; latitude: "53"; height: "122"; }
- ListElement{ longitude: "64"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "64"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "64"; latitude: "60"; height: "107"; }
- ListElement{ longitude: "64"; latitude: "61"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "62"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "63"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "67"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "68"; height: "107"; }
- ListElement{ longitude: "64"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "71"; height: "113"; }
- ListElement{ longitude: "64"; latitude: "72"; height: "115"; }
- ListElement{ longitude: "64"; latitude: "73"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "64"; latitude: "75"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "76"; height: "129"; }
- ListElement{ longitude: "64"; latitude: "77"; height: "130"; }
- ListElement{ longitude: "64"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "64"; latitude: "79"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "80"; height: "123"; }
- ListElement{ longitude: "64"; latitude: "81"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "83"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "84"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "86"; height: "117"; }
- ListElement{ longitude: "64"; latitude: "87"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "89"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "64"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "93"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "64"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "97"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "98"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "99"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "65"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "65"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "65"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "65"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "65"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "7"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "8"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "9"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "10"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "11"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "12"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "13"; height: "111"; }
- ListElement{ longitude: "65"; latitude: "14"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "16"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "17"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "19"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "21"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "26"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "27"; height: "104"; }
- ListElement{ longitude: "65"; latitude: "28"; height: "104"; }
- ListElement{ longitude: "65"; latitude: "29"; height: "108"; }
- ListElement{ longitude: "65"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "31"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "65"; latitude: "33"; height: "115"; }
- ListElement{ longitude: "65"; latitude: "34"; height: "115"; }
- ListElement{ longitude: "65"; latitude: "35"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "37"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "40"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "65"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "65"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "65"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "65"; latitude: "45"; height: "132"; }
- ListElement{ longitude: "65"; latitude: "46"; height: "133"; }
- ListElement{ longitude: "65"; latitude: "47"; height: "134"; }
- ListElement{ longitude: "65"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "65"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "65"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "65"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "65"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "65"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "55"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "56"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "59"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "61"; height: "108"; }
- ListElement{ longitude: "65"; latitude: "62"; height: "109"; }
- ListElement{ longitude: "65"; latitude: "63"; height: "109"; }
- ListElement{ longitude: "65"; latitude: "64"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "65"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "66"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "67"; height: "109"; }
- ListElement{ longitude: "65"; latitude: "68"; height: "104"; }
- ListElement{ longitude: "65"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "71"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "65"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "65"; latitude: "76"; height: "132"; }
- ListElement{ longitude: "65"; latitude: "77"; height: "129"; }
- ListElement{ longitude: "65"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "65"; latitude: "79"; height: "129"; }
- ListElement{ longitude: "65"; latitude: "80"; height: "124"; }
- ListElement{ longitude: "65"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "83"; height: "121"; }
- ListElement{ longitude: "65"; latitude: "84"; height: "121"; }
- ListElement{ longitude: "65"; latitude: "85"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "87"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "89"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "65"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "93"; height: "111"; }
- ListElement{ longitude: "65"; latitude: "94"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "95"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "98"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "99"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "66"; latitude: "1"; height: "130"; }
- ListElement{ longitude: "66"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "66"; latitude: "3"; height: "125"; }
- ListElement{ longitude: "66"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "66"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "9"; height: "113"; }
- ListElement{ longitude: "66"; latitude: "10"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "11"; height: "107"; }
- ListElement{ longitude: "66"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "66"; latitude: "13"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "14"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "15"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "16"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "18"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "19"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "26"; height: "107"; }
- ListElement{ longitude: "66"; latitude: "27"; height: "102"; }
- ListElement{ longitude: "66"; latitude: "28"; height: "102"; }
- ListElement{ longitude: "66"; latitude: "29"; height: "107"; }
- ListElement{ longitude: "66"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "31"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "32"; height: "113"; }
- ListElement{ longitude: "66"; latitude: "33"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "34"; height: "113"; }
- ListElement{ longitude: "66"; latitude: "35"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "36"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "37"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "40"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "66"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "66"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "66"; latitude: "44"; height: "133"; }
- ListElement{ longitude: "66"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "66"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "66"; latitude: "47"; height: "134"; }
- ListElement{ longitude: "66"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "66"; latitude: "49"; height: "128"; }
- ListElement{ longitude: "66"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "66"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "52"; height: "124"; }
- ListElement{ longitude: "66"; latitude: "53"; height: "125"; }
- ListElement{ longitude: "66"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "56"; height: "118"; }
- ListElement{ longitude: "66"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "66"; latitude: "58"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "66"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "61"; height: "109"; }
- ListElement{ longitude: "66"; latitude: "62"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "63"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "66"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "66"; latitude: "67"; height: "109"; }
- ListElement{ longitude: "66"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "70"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "72"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "73"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "66"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "66"; latitude: "76"; height: "131"; }
- ListElement{ longitude: "66"; latitude: "77"; height: "134"; }
- ListElement{ longitude: "66"; latitude: "78"; height: "136"; }
- ListElement{ longitude: "66"; latitude: "79"; height: "130"; }
- ListElement{ longitude: "66"; latitude: "80"; height: "126"; }
- ListElement{ longitude: "66"; latitude: "81"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "83"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "84"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "86"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "87"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "90"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "93"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "96"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "98"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "67"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "67"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "67"; latitude: "3"; height: "126"; }
- ListElement{ longitude: "67"; latitude: "4"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "67"; latitude: "8"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "9"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "10"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "11"; height: "108"; }
- ListElement{ longitude: "67"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "67"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "67"; latitude: "14"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "16"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "18"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "19"; height: "110"; }
- ListElement{ longitude: "67"; latitude: "20"; height: "97"; }
- ListElement{ longitude: "67"; latitude: "21"; height: "113"; }
- ListElement{ longitude: "67"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "24"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "27"; height: "105"; }
- ListElement{ longitude: "67"; latitude: "28"; height: "104"; }
- ListElement{ longitude: "67"; latitude: "29"; height: "102"; }
- ListElement{ longitude: "67"; latitude: "30"; height: "107"; }
- ListElement{ longitude: "67"; latitude: "31"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "32"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "33"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "34"; height: "113"; }
- ListElement{ longitude: "67"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "36"; height: "110"; }
- ListElement{ longitude: "67"; latitude: "37"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "39"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "67"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "67"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "67"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "67"; latitude: "46"; height: "134"; }
- ListElement{ longitude: "67"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "67"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "67"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "67"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "67"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "67"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "67"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "58"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "59"; height: "104"; }
- ListElement{ longitude: "67"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "61"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "63"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "67"; latitude: "65"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "67"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "69"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "70"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "67"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "73"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "74"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "75"; height: "127"; }
- ListElement{ longitude: "67"; latitude: "76"; height: "132"; }
- ListElement{ longitude: "67"; latitude: "77"; height: "132"; }
- ListElement{ longitude: "67"; latitude: "78"; height: "132"; }
- ListElement{ longitude: "67"; latitude: "79"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "67"; latitude: "81"; height: "123"; }
- ListElement{ longitude: "67"; latitude: "82"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "83"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "84"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "86"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "87"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "67"; latitude: "90"; height: "115"; }
- ListElement{ longitude: "67"; latitude: "91"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "94"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "95"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "96"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "3"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "7"; height: "118"; }
- ListElement{ longitude: "68"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "9"; height: "110"; }
- ListElement{ longitude: "68"; latitude: "10"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "11"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "12"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "13"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "16"; height: "104"; }
- ListElement{ longitude: "68"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "18"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "19"; height: "113"; }
- ListElement{ longitude: "68"; latitude: "20"; height: "105"; }
- ListElement{ longitude: "68"; latitude: "21"; height: "114"; }
- ListElement{ longitude: "68"; latitude: "22"; height: "114"; }
- ListElement{ longitude: "68"; latitude: "23"; height: "114"; }
- ListElement{ longitude: "68"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "68"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "27"; height: "107"; }
- ListElement{ longitude: "68"; latitude: "28"; height: "105"; }
- ListElement{ longitude: "68"; latitude: "29"; height: "104"; }
- ListElement{ longitude: "68"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "68"; latitude: "31"; height: "105"; }
- ListElement{ longitude: "68"; latitude: "32"; height: "107"; }
- ListElement{ longitude: "68"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "34"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "35"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "37"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "68"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "68"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "68"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "46"; height: "131"; }
- ListElement{ longitude: "68"; latitude: "47"; height: "129"; }
- ListElement{ longitude: "68"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "49"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "52"; height: "129"; }
- ListElement{ longitude: "68"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "68"; latitude: "54"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "57"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "60"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "63"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "64"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "67"; height: "112"; }
- ListElement{ longitude: "68"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "69"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "70"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "72"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "74"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "68"; latitude: "77"; height: "129"; }
- ListElement{ longitude: "68"; latitude: "78"; height: "133"; }
- ListElement{ longitude: "68"; latitude: "79"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "80"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "83"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "84"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "85"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "86"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "87"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "68"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "90"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "91"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "68"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "94"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "96"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "68"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "5"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "6"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "7"; height: "116"; }
- ListElement{ longitude: "69"; latitude: "8"; height: "113"; }
- ListElement{ longitude: "69"; latitude: "9"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "10"; height: "107"; }
- ListElement{ longitude: "69"; latitude: "11"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "69"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "69"; latitude: "14"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "16"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "69"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "19"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "69"; latitude: "21"; height: "114"; }
- ListElement{ longitude: "69"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "69"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "69"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "25"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "27"; height: "107"; }
- ListElement{ longitude: "69"; latitude: "28"; height: "105"; }
- ListElement{ longitude: "69"; latitude: "29"; height: "101"; }
- ListElement{ longitude: "69"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "69"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "69"; latitude: "32"; height: "99"; }
- ListElement{ longitude: "69"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "69"; latitude: "34"; height: "104"; }
- ListElement{ longitude: "69"; latitude: "35"; height: "105"; }
- ListElement{ longitude: "69"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "37"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "69"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "41"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "69"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "48"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "69"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "69"; latitude: "55"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "69"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "69"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "69"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "69"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "67"; height: "116"; }
- ListElement{ longitude: "69"; latitude: "68"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "70"; height: "123"; }
- ListElement{ longitude: "69"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "72"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "73"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "69"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "77"; height: "129"; }
- ListElement{ longitude: "69"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "79"; height: "133"; }
- ListElement{ longitude: "69"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "81"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "82"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "83"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "84"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "85"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "86"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "87"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "88"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "69"; latitude: "90"; height: "115"; }
- ListElement{ longitude: "69"; latitude: "91"; height: "114"; }
- ListElement{ longitude: "69"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "95"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "69"; latitude: "97"; height: "136"; }
- ListElement{ longitude: "69"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "69"; latitude: "99"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "70"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "70"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "70"; latitude: "6"; height: "115"; }
- ListElement{ longitude: "70"; latitude: "7"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "8"; height: "112"; }
- ListElement{ longitude: "70"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "70"; latitude: "11"; height: "105"; }
- ListElement{ longitude: "70"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "70"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "70"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "70"; latitude: "17"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "19"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "20"; height: "112"; }
- ListElement{ longitude: "70"; latitude: "21"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "22"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "24"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "25"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "26"; height: "107"; }
- ListElement{ longitude: "70"; latitude: "27"; height: "106"; }
- ListElement{ longitude: "70"; latitude: "28"; height: "104"; }
- ListElement{ longitude: "70"; latitude: "29"; height: "101"; }
- ListElement{ longitude: "70"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "70"; latitude: "31"; height: "97"; }
- ListElement{ longitude: "70"; latitude: "32"; height: "98"; }
- ListElement{ longitude: "70"; latitude: "33"; height: "99"; }
- ListElement{ longitude: "70"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "70"; latitude: "35"; height: "104"; }
- ListElement{ longitude: "70"; latitude: "36"; height: "106"; }
- ListElement{ longitude: "70"; latitude: "37"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "70"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "70"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "41"; height: "131"; }
- ListElement{ longitude: "70"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "70"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "46"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "70"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "70"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "70"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "70"; latitude: "54"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "55"; height: "128"; }
- ListElement{ longitude: "70"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "70"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "70"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "70"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "70"; latitude: "65"; height: "115"; }
- ListElement{ longitude: "70"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "70"; latitude: "68"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "69"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "70"; height: "102"; }
- ListElement{ longitude: "70"; latitude: "71"; height: "98"; }
- ListElement{ longitude: "70"; latitude: "72"; height: "98"; }
- ListElement{ longitude: "70"; latitude: "73"; height: "115"; }
- ListElement{ longitude: "70"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "70"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "70"; latitude: "76"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "77"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "78"; height: "121"; }
- ListElement{ longitude: "70"; latitude: "79"; height: "135"; }
- ListElement{ longitude: "70"; latitude: "80"; height: "131"; }
- ListElement{ longitude: "70"; latitude: "81"; height: "134"; }
- ListElement{ longitude: "70"; latitude: "82"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "83"; height: "128"; }
- ListElement{ longitude: "70"; latitude: "84"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "85"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "86"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "87"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "88"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "89"; height: "119"; }
- ListElement{ longitude: "70"; latitude: "90"; height: "117"; }
- ListElement{ longitude: "70"; latitude: "91"; height: "117"; }
- ListElement{ longitude: "70"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "70"; latitude: "93"; height: "121"; }
- ListElement{ longitude: "70"; latitude: "94"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "70"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "70"; latitude: "98"; height: "134"; }
- ListElement{ longitude: "70"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "71"; latitude: "4"; height: "116"; }
- ListElement{ longitude: "71"; latitude: "5"; height: "114"; }
- ListElement{ longitude: "71"; latitude: "6"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "7"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "71"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "71"; latitude: "11"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "12"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "14"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "15"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "71"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "71"; latitude: "18"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "19"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "20"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "21"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "23"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "24"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "71"; latitude: "27"; height: "109"; }
- ListElement{ longitude: "71"; latitude: "28"; height: "105"; }
- ListElement{ longitude: "71"; latitude: "29"; height: "101"; }
- ListElement{ longitude: "71"; latitude: "30"; height: "102"; }
- ListElement{ longitude: "71"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "71"; latitude: "32"; height: "102"; }
- ListElement{ longitude: "71"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "71"; latitude: "34"; height: "106"; }
- ListElement{ longitude: "71"; latitude: "35"; height: "105"; }
- ListElement{ longitude: "71"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "71"; latitude: "37"; height: "109"; }
- ListElement{ longitude: "71"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "71"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "71"; latitude: "41"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "46"; height: "123"; }
- ListElement{ longitude: "71"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "71"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "71"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "50"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "56"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "57"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "71"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "71"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "71"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "71"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "71"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "71"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "66"; height: "118"; }
- ListElement{ longitude: "71"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "71"; latitude: "68"; height: "118"; }
- ListElement{ longitude: "71"; latitude: "69"; height: "93"; }
- ListElement{ longitude: "71"; latitude: "70"; height: "94"; }
- ListElement{ longitude: "71"; latitude: "71"; height: "95"; }
- ListElement{ longitude: "71"; latitude: "72"; height: "92"; }
- ListElement{ longitude: "71"; latitude: "73"; height: "100"; }
- ListElement{ longitude: "71"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "71"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "71"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "77"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "79"; height: "135"; }
- ListElement{ longitude: "71"; latitude: "80"; height: "138"; }
- ListElement{ longitude: "71"; latitude: "81"; height: "134"; }
- ListElement{ longitude: "71"; latitude: "82"; height: "135"; }
- ListElement{ longitude: "71"; latitude: "83"; height: "133"; }
- ListElement{ longitude: "71"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "85"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "86"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "88"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "89"; height: "124"; }
- ListElement{ longitude: "71"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "71"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "71"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "71"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "71"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "71"; latitude: "98"; height: "136"; }
- ListElement{ longitude: "71"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "72"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "72"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "72"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "72"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "72"; latitude: "6"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "7"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "10"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "11"; height: "104"; }
- ListElement{ longitude: "72"; latitude: "12"; height: "103"; }
- ListElement{ longitude: "72"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "14"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "15"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "16"; height: "102"; }
- ListElement{ longitude: "72"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "20"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "24"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "25"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "26"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "27"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "72"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "30"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "31"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "32"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "33"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "35"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "37"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "38"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "72"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "72"; latitude: "43"; height: "132"; }
- ListElement{ longitude: "72"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "72"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "72"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "72"; latitude: "49"; height: "128"; }
- ListElement{ longitude: "72"; latitude: "50"; height: "132"; }
- ListElement{ longitude: "72"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "72"; latitude: "52"; height: "134"; }
- ListElement{ longitude: "72"; latitude: "53"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "55"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "56"; height: "136"; }
- ListElement{ longitude: "72"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "58"; height: "115"; }
- ListElement{ longitude: "72"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "72"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "72"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "72"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "72"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "72"; latitude: "66"; height: "117"; }
- ListElement{ longitude: "72"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "68"; height: "109"; }
- ListElement{ longitude: "72"; latitude: "69"; height: "101"; }
- ListElement{ longitude: "72"; latitude: "70"; height: "106"; }
- ListElement{ longitude: "72"; latitude: "71"; height: "100"; }
- ListElement{ longitude: "72"; latitude: "72"; height: "91"; }
- ListElement{ longitude: "72"; latitude: "73"; height: "101"; }
- ListElement{ longitude: "72"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "72"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "76"; height: "129"; }
- ListElement{ longitude: "72"; latitude: "77"; height: "131"; }
- ListElement{ longitude: "72"; latitude: "78"; height: "135"; }
- ListElement{ longitude: "72"; latitude: "79"; height: "138"; }
- ListElement{ longitude: "72"; latitude: "80"; height: "141"; }
- ListElement{ longitude: "72"; latitude: "81"; height: "139"; }
- ListElement{ longitude: "72"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "72"; latitude: "83"; height: "136"; }
- ListElement{ longitude: "72"; latitude: "84"; height: "134"; }
- ListElement{ longitude: "72"; latitude: "85"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "86"; height: "132"; }
- ListElement{ longitude: "72"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "72"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "72"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "72"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "72"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "72"; latitude: "96"; height: "130"; }
- ListElement{ longitude: "72"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "72"; latitude: "98"; height: "138"; }
- ListElement{ longitude: "72"; latitude: "99"; height: "125"; }
- ListElement{ longitude: "73"; latitude: "0"; height: "129"; }
- ListElement{ longitude: "73"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "73"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "73"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "73"; latitude: "6"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "7"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "10"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "11"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "73"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "73"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "73"; latitude: "15"; height: "103"; }
- ListElement{ longitude: "73"; latitude: "16"; height: "101"; }
- ListElement{ longitude: "73"; latitude: "17"; height: "104"; }
- ListElement{ longitude: "73"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "73"; latitude: "20"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "22"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "27"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "28"; height: "113"; }
- ListElement{ longitude: "73"; latitude: "29"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "31"; height: "107"; }
- ListElement{ longitude: "73"; latitude: "32"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "73"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "35"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "36"; height: "107"; }
- ListElement{ longitude: "73"; latitude: "37"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "38"; height: "107"; }
- ListElement{ longitude: "73"; latitude: "39"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "40"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "73"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "73"; latitude: "48"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "49"; height: "132"; }
- ListElement{ longitude: "73"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "51"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "52"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "53"; height: "133"; }
- ListElement{ longitude: "73"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "73"; latitude: "55"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "56"; height: "138"; }
- ListElement{ longitude: "73"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "58"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "73"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "73"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "73"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "73"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "73"; latitude: "66"; height: "118"; }
- ListElement{ longitude: "73"; latitude: "67"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "69"; height: "97"; }
- ListElement{ longitude: "73"; latitude: "70"; height: "104"; }
- ListElement{ longitude: "73"; latitude: "71"; height: "102"; }
- ListElement{ longitude: "73"; latitude: "72"; height: "92"; }
- ListElement{ longitude: "73"; latitude: "73"; height: "109"; }
- ListElement{ longitude: "73"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "73"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "73"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "77"; height: "132"; }
- ListElement{ longitude: "73"; latitude: "78"; height: "137"; }
- ListElement{ longitude: "73"; latitude: "79"; height: "140"; }
- ListElement{ longitude: "73"; latitude: "80"; height: "143"; }
- ListElement{ longitude: "73"; latitude: "81"; height: "141"; }
- ListElement{ longitude: "73"; latitude: "82"; height: "140"; }
- ListElement{ longitude: "73"; latitude: "83"; height: "136"; }
- ListElement{ longitude: "73"; latitude: "84"; height: "134"; }
- ListElement{ longitude: "73"; latitude: "85"; height: "134"; }
- ListElement{ longitude: "73"; latitude: "86"; height: "133"; }
- ListElement{ longitude: "73"; latitude: "87"; height: "130"; }
- ListElement{ longitude: "73"; latitude: "88"; height: "130"; }
- ListElement{ longitude: "73"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "73"; latitude: "90"; height: "125"; }
- ListElement{ longitude: "73"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "73"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "95"; height: "120"; }
- ListElement{ longitude: "73"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "73"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "73"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "74"; latitude: "4"; height: "124"; }
- ListElement{ longitude: "74"; latitude: "5"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "6"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "7"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "74"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "11"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "74"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "14"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "15"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "16"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "74"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "74"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "74"; latitude: "20"; height: "110"; }
- ListElement{ longitude: "74"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "22"; height: "112"; }
- ListElement{ longitude: "74"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "74"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "74"; latitude: "30"; height: "112"; }
- ListElement{ longitude: "74"; latitude: "31"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "32"; height: "108"; }
- ListElement{ longitude: "74"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "74"; latitude: "34"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "74"; latitude: "36"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "37"; height: "105"; }
- ListElement{ longitude: "74"; latitude: "38"; height: "109"; }
- ListElement{ longitude: "74"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "74"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "42"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "74"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "74"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "74"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "74"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "74"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "74"; latitude: "53"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "54"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "74"; latitude: "56"; height: "138"; }
- ListElement{ longitude: "74"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "74"; latitude: "58"; height: "135"; }
- ListElement{ longitude: "74"; latitude: "59"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "74"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "74"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "64"; height: "120"; }
- ListElement{ longitude: "74"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "74"; latitude: "66"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "67"; height: "119"; }
- ListElement{ longitude: "74"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "74"; latitude: "69"; height: "103"; }
- ListElement{ longitude: "74"; latitude: "70"; height: "100"; }
- ListElement{ longitude: "74"; latitude: "71"; height: "97"; }
- ListElement{ longitude: "74"; latitude: "72"; height: "96"; }
- ListElement{ longitude: "74"; latitude: "73"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "77"; height: "133"; }
- ListElement{ longitude: "74"; latitude: "78"; height: "138"; }
- ListElement{ longitude: "74"; latitude: "79"; height: "142"; }
- ListElement{ longitude: "74"; latitude: "80"; height: "143"; }
- ListElement{ longitude: "74"; latitude: "81"; height: "143"; }
- ListElement{ longitude: "74"; latitude: "82"; height: "141"; }
- ListElement{ longitude: "74"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "74"; latitude: "84"; height: "135"; }
- ListElement{ longitude: "74"; latitude: "85"; height: "135"; }
- ListElement{ longitude: "74"; latitude: "86"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "74"; latitude: "88"; height: "130"; }
- ListElement{ longitude: "74"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "74"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "74"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "74"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "74"; latitude: "96"; height: "119"; }
- ListElement{ longitude: "74"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "74"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "74"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "6"; height: "116"; }
- ListElement{ longitude: "75"; latitude: "7"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "8"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "10"; height: "107"; }
- ListElement{ longitude: "75"; latitude: "11"; height: "105"; }
- ListElement{ longitude: "75"; latitude: "12"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "13"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "14"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "15"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "16"; height: "103"; }
- ListElement{ longitude: "75"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "75"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "20"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "75"; latitude: "22"; height: "112"; }
- ListElement{ longitude: "75"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "75"; latitude: "29"; height: "111"; }
- ListElement{ longitude: "75"; latitude: "30"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "31"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "75"; latitude: "33"; height: "104"; }
- ListElement{ longitude: "75"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "37"; height: "104"; }
- ListElement{ longitude: "75"; latitude: "38"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "75"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "75"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "75"; latitude: "43"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "75"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "75"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "75"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "75"; latitude: "48"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "49"; height: "130"; }
- ListElement{ longitude: "75"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "75"; latitude: "51"; height: "138"; }
- ListElement{ longitude: "75"; latitude: "52"; height: "139"; }
- ListElement{ longitude: "75"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "75"; latitude: "58"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "59"; height: "133"; }
- ListElement{ longitude: "75"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "75"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "75"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "75"; latitude: "65"; height: "114"; }
- ListElement{ longitude: "75"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "75"; latitude: "68"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "75"; latitude: "70"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "75"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "75"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "75"; latitude: "77"; height: "135"; }
- ListElement{ longitude: "75"; latitude: "78"; height: "140"; }
- ListElement{ longitude: "75"; latitude: "79"; height: "144"; }
- ListElement{ longitude: "75"; latitude: "80"; height: "146"; }
- ListElement{ longitude: "75"; latitude: "81"; height: "147"; }
- ListElement{ longitude: "75"; latitude: "82"; height: "140"; }
- ListElement{ longitude: "75"; latitude: "83"; height: "141"; }
- ListElement{ longitude: "75"; latitude: "84"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "85"; height: "134"; }
- ListElement{ longitude: "75"; latitude: "86"; height: "134"; }
- ListElement{ longitude: "75"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "75"; latitude: "88"; height: "130"; }
- ListElement{ longitude: "75"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "75"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "75"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "75"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "75"; latitude: "96"; height: "114"; }
- ListElement{ longitude: "75"; latitude: "97"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "75"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "76"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "76"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "76"; latitude: "4"; height: "130"; }
- ListElement{ longitude: "76"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "76"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "76"; latitude: "7"; height: "115"; }
- ListElement{ longitude: "76"; latitude: "8"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "76"; latitude: "10"; height: "105"; }
- ListElement{ longitude: "76"; latitude: "11"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "12"; height: "99"; }
- ListElement{ longitude: "76"; latitude: "13"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "14"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "16"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "18"; height: "103"; }
- ListElement{ longitude: "76"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "76"; latitude: "20"; height: "109"; }
- ListElement{ longitude: "76"; latitude: "21"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "76"; latitude: "23"; height: "114"; }
- ListElement{ longitude: "76"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "76"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "30"; height: "106"; }
- ListElement{ longitude: "76"; latitude: "31"; height: "104"; }
- ListElement{ longitude: "76"; latitude: "32"; height: "103"; }
- ListElement{ longitude: "76"; latitude: "33"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "34"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "37"; height: "104"; }
- ListElement{ longitude: "76"; latitude: "38"; height: "107"; }
- ListElement{ longitude: "76"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "76"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "76"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "76"; latitude: "43"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "76"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "76"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "76"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "76"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "52"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "56"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "58"; height: "134"; }
- ListElement{ longitude: "76"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "76"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "76"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "76"; latitude: "65"; height: "112"; }
- ListElement{ longitude: "76"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "67"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "68"; height: "111"; }
- ListElement{ longitude: "76"; latitude: "69"; height: "115"; }
- ListElement{ longitude: "76"; latitude: "70"; height: "121"; }
- ListElement{ longitude: "76"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "76"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "76"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "75"; height: "131"; }
- ListElement{ longitude: "76"; latitude: "76"; height: "134"; }
- ListElement{ longitude: "76"; latitude: "77"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "78"; height: "140"; }
- ListElement{ longitude: "76"; latitude: "79"; height: "143"; }
- ListElement{ longitude: "76"; latitude: "80"; height: "143"; }
- ListElement{ longitude: "76"; latitude: "81"; height: "144"; }
- ListElement{ longitude: "76"; latitude: "82"; height: "141"; }
- ListElement{ longitude: "76"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "86"; height: "133"; }
- ListElement{ longitude: "76"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "76"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "76"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "76"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "92"; height: "117"; }
- ListElement{ longitude: "76"; latitude: "93"; height: "115"; }
- ListElement{ longitude: "76"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "76"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "76"; latitude: "96"; height: "116"; }
- ListElement{ longitude: "76"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "76"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "76"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "77"; latitude: "0"; height: "124"; }
- ListElement{ longitude: "77"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "77"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "77"; latitude: "4"; height: "130"; }
- ListElement{ longitude: "77"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "77"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "77"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "77"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "77"; latitude: "9"; height: "110"; }
- ListElement{ longitude: "77"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "11"; height: "103"; }
- ListElement{ longitude: "77"; latitude: "12"; height: "99"; }
- ListElement{ longitude: "77"; latitude: "13"; height: "98"; }
- ListElement{ longitude: "77"; latitude: "14"; height: "98"; }
- ListElement{ longitude: "77"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "77"; latitude: "16"; height: "99"; }
- ListElement{ longitude: "77"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "18"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "19"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "20"; height: "108"; }
- ListElement{ longitude: "77"; latitude: "21"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "22"; height: "107"; }
- ListElement{ longitude: "77"; latitude: "23"; height: "112"; }
- ListElement{ longitude: "77"; latitude: "24"; height: "111"; }
- ListElement{ longitude: "77"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "77"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "77"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "77"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "77"; latitude: "29"; height: "108"; }
- ListElement{ longitude: "77"; latitude: "30"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "32"; height: "101"; }
- ListElement{ longitude: "77"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "77"; latitude: "34"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "37"; height: "105"; }
- ListElement{ longitude: "77"; latitude: "38"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "39"; height: "112"; }
- ListElement{ longitude: "77"; latitude: "40"; height: "117"; }
- ListElement{ longitude: "77"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "77"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "77"; latitude: "46"; height: "118"; }
- ListElement{ longitude: "77"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "77"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "77"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "77"; latitude: "50"; height: "131"; }
- ListElement{ longitude: "77"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "77"; latitude: "54"; height: "135"; }
- ListElement{ longitude: "77"; latitude: "55"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "77"; latitude: "57"; height: "134"; }
- ListElement{ longitude: "77"; latitude: "58"; height: "133"; }
- ListElement{ longitude: "77"; latitude: "59"; height: "130"; }
- ListElement{ longitude: "77"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "77"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "77"; latitude: "63"; height: "117"; }
- ListElement{ longitude: "77"; latitude: "64"; height: "114"; }
- ListElement{ longitude: "77"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "77"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "77"; latitude: "67"; height: "107"; }
- ListElement{ longitude: "77"; latitude: "68"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "77"; latitude: "70"; height: "116"; }
- ListElement{ longitude: "77"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "77"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "77"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "77"; latitude: "75"; height: "133"; }
- ListElement{ longitude: "77"; latitude: "76"; height: "135"; }
- ListElement{ longitude: "77"; latitude: "77"; height: "137"; }
- ListElement{ longitude: "77"; latitude: "78"; height: "142"; }
- ListElement{ longitude: "77"; latitude: "79"; height: "143"; }
- ListElement{ longitude: "77"; latitude: "80"; height: "141"; }
- ListElement{ longitude: "77"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "77"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "77"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "77"; latitude: "84"; height: "137"; }
- ListElement{ longitude: "77"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "86"; height: "135"; }
- ListElement{ longitude: "77"; latitude: "87"; height: "133"; }
- ListElement{ longitude: "77"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "77"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "77"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "77"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "77"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "77"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "77"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "77"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "77"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "77"; latitude: "97"; height: "120"; }
- ListElement{ longitude: "77"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "99"; height: "117"; }
- ListElement{ longitude: "78"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "78"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "3"; height: "125"; }
- ListElement{ longitude: "78"; latitude: "4"; height: "129"; }
- ListElement{ longitude: "78"; latitude: "5"; height: "129"; }
- ListElement{ longitude: "78"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "78"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "78"; latitude: "9"; height: "112"; }
- ListElement{ longitude: "78"; latitude: "10"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "11"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "12"; height: "100"; }
- ListElement{ longitude: "78"; latitude: "13"; height: "101"; }
- ListElement{ longitude: "78"; latitude: "14"; height: "102"; }
- ListElement{ longitude: "78"; latitude: "15"; height: "104"; }
- ListElement{ longitude: "78"; latitude: "16"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "17"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "19"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "78"; latitude: "21"; height: "92"; }
- ListElement{ longitude: "78"; latitude: "22"; height: "96"; }
- ListElement{ longitude: "78"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "78"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "78"; latitude: "26"; height: "114"; }
- ListElement{ longitude: "78"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "78"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "29"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "78"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "78"; latitude: "32"; height: "99"; }
- ListElement{ longitude: "78"; latitude: "33"; height: "102"; }
- ListElement{ longitude: "78"; latitude: "34"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "35"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "36"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "37"; height: "103"; }
- ListElement{ longitude: "78"; latitude: "38"; height: "104"; }
- ListElement{ longitude: "78"; latitude: "39"; height: "108"; }
- ListElement{ longitude: "78"; latitude: "40"; height: "114"; }
- ListElement{ longitude: "78"; latitude: "41"; height: "118"; }
- ListElement{ longitude: "78"; latitude: "42"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "44"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "45"; height: "116"; }
- ListElement{ longitude: "78"; latitude: "46"; height: "115"; }
- ListElement{ longitude: "78"; latitude: "47"; height: "116"; }
- ListElement{ longitude: "78"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "50"; height: "127"; }
- ListElement{ longitude: "78"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "78"; latitude: "52"; height: "134"; }
- ListElement{ longitude: "78"; latitude: "53"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "78"; latitude: "55"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "56"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "58"; height: "130"; }
- ListElement{ longitude: "78"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "78"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "63"; height: "117"; }
- ListElement{ longitude: "78"; latitude: "64"; height: "114"; }
- ListElement{ longitude: "78"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "78"; latitude: "67"; height: "103"; }
- ListElement{ longitude: "78"; latitude: "68"; height: "104"; }
- ListElement{ longitude: "78"; latitude: "69"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "78"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "78"; latitude: "74"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "75"; height: "139"; }
- ListElement{ longitude: "78"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "78"; latitude: "77"; height: "140"; }
- ListElement{ longitude: "78"; latitude: "78"; height: "139"; }
- ListElement{ longitude: "78"; latitude: "79"; height: "138"; }
- ListElement{ longitude: "78"; latitude: "80"; height: "137"; }
- ListElement{ longitude: "78"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "82"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "83"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "86"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "87"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "78"; latitude: "89"; height: "129"; }
- ListElement{ longitude: "78"; latitude: "90"; height: "126"; }
- ListElement{ longitude: "78"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "78"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "78"; latitude: "95"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "96"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "78"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "78"; latitude: "99"; height: "121"; }
- ListElement{ longitude: "79"; latitude: "0"; height: "115"; }
- ListElement{ longitude: "79"; latitude: "1"; height: "114"; }
- ListElement{ longitude: "79"; latitude: "2"; height: "116"; }
- ListElement{ longitude: "79"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "79"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "79"; latitude: "7"; height: "121"; }
- ListElement{ longitude: "79"; latitude: "8"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "9"; height: "115"; }
- ListElement{ longitude: "79"; latitude: "10"; height: "113"; }
- ListElement{ longitude: "79"; latitude: "11"; height: "108"; }
- ListElement{ longitude: "79"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "79"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "79"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "79"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "79"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "17"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "20"; height: "100"; }
- ListElement{ longitude: "79"; latitude: "21"; height: "94"; }
- ListElement{ longitude: "79"; latitude: "22"; height: "96"; }
- ListElement{ longitude: "79"; latitude: "23"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "24"; height: "111"; }
- ListElement{ longitude: "79"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "79"; latitude: "26"; height: "114"; }
- ListElement{ longitude: "79"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "79"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "79"; latitude: "29"; height: "104"; }
- ListElement{ longitude: "79"; latitude: "30"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "79"; latitude: "32"; height: "98"; }
- ListElement{ longitude: "79"; latitude: "33"; height: "99"; }
- ListElement{ longitude: "79"; latitude: "34"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "79"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "37"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "79"; latitude: "39"; height: "104"; }
- ListElement{ longitude: "79"; latitude: "40"; height: "110"; }
- ListElement{ longitude: "79"; latitude: "41"; height: "115"; }
- ListElement{ longitude: "79"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "43"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "44"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "45"; height: "117"; }
- ListElement{ longitude: "79"; latitude: "46"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "47"; height: "117"; }
- ListElement{ longitude: "79"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "50"; height: "127"; }
- ListElement{ longitude: "79"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "79"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "79"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "79"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "79"; latitude: "55"; height: "134"; }
- ListElement{ longitude: "79"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "79"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "79"; latitude: "58"; height: "129"; }
- ListElement{ longitude: "79"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "79"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "79"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "65"; height: "114"; }
- ListElement{ longitude: "79"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "79"; latitude: "67"; height: "106"; }
- ListElement{ longitude: "79"; latitude: "68"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "69"; height: "106"; }
- ListElement{ longitude: "79"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "79"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "73"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "74"; height: "137"; }
- ListElement{ longitude: "79"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "79"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "79"; latitude: "77"; height: "140"; }
- ListElement{ longitude: "79"; latitude: "78"; height: "137"; }
- ListElement{ longitude: "79"; latitude: "79"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "79"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "82"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "83"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "79"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "79"; latitude: "86"; height: "136"; }
- ListElement{ longitude: "79"; latitude: "87"; height: "134"; }
- ListElement{ longitude: "79"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "89"; height: "129"; }
- ListElement{ longitude: "79"; latitude: "90"; height: "127"; }
- ListElement{ longitude: "79"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "92"; height: "122"; }
- ListElement{ longitude: "79"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "95"; height: "123"; }
- ListElement{ longitude: "79"; latitude: "96"; height: "123"; }
- ListElement{ longitude: "79"; latitude: "97"; height: "122"; }
- ListElement{ longitude: "79"; latitude: "98"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "80"; latitude: "0"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "2"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "3"; height: "114"; }
- ListElement{ longitude: "80"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "80"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "7"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "80"; latitude: "9"; height: "118"; }
- ListElement{ longitude: "80"; latitude: "10"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "11"; height: "113"; }
- ListElement{ longitude: "80"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "13"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "16"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "80"; latitude: "19"; height: "105"; }
- ListElement{ longitude: "80"; latitude: "20"; height: "103"; }
- ListElement{ longitude: "80"; latitude: "21"; height: "100"; }
- ListElement{ longitude: "80"; latitude: "22"; height: "101"; }
- ListElement{ longitude: "80"; latitude: "23"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "24"; height: "110"; }
- ListElement{ longitude: "80"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "80"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "80"; latitude: "29"; height: "102"; }
- ListElement{ longitude: "80"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "80"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "80"; latitude: "32"; height: "95"; }
- ListElement{ longitude: "80"; latitude: "33"; height: "97"; }
- ListElement{ longitude: "80"; latitude: "34"; height: "100"; }
- ListElement{ longitude: "80"; latitude: "35"; height: "101"; }
- ListElement{ longitude: "80"; latitude: "36"; height: "103"; }
- ListElement{ longitude: "80"; latitude: "37"; height: "101"; }
- ListElement{ longitude: "80"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "80"; latitude: "39"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "40"; height: "109"; }
- ListElement{ longitude: "80"; latitude: "41"; height: "112"; }
- ListElement{ longitude: "80"; latitude: "42"; height: "115"; }
- ListElement{ longitude: "80"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "46"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "47"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "80"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "80"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "80"; latitude: "52"; height: "127"; }
- ListElement{ longitude: "80"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "80"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "80"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "80"; latitude: "58"; height: "130"; }
- ListElement{ longitude: "80"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "61"; height: "123"; }
- ListElement{ longitude: "80"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "80"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "80"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "80"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "67"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "80"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "80"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "73"; height: "132"; }
- ListElement{ longitude: "80"; latitude: "74"; height: "139"; }
- ListElement{ longitude: "80"; latitude: "75"; height: "144"; }
- ListElement{ longitude: "80"; latitude: "76"; height: "144"; }
- ListElement{ longitude: "80"; latitude: "77"; height: "141"; }
- ListElement{ longitude: "80"; latitude: "78"; height: "136"; }
- ListElement{ longitude: "80"; latitude: "79"; height: "127"; }
- ListElement{ longitude: "80"; latitude: "80"; height: "128"; }
- ListElement{ longitude: "80"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "82"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "83"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "84"; height: "135"; }
- ListElement{ longitude: "80"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "80"; latitude: "86"; height: "135"; }
- ListElement{ longitude: "80"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "89"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "90"; height: "127"; }
- ListElement{ longitude: "80"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "80"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "97"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "98"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "99"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "0"; height: "107"; }
- ListElement{ longitude: "81"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "81"; latitude: "2"; height: "106"; }
- ListElement{ longitude: "81"; latitude: "3"; height: "109"; }
- ListElement{ longitude: "81"; latitude: "4"; height: "114"; }
- ListElement{ longitude: "81"; latitude: "5"; height: "117"; }
- ListElement{ longitude: "81"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "81"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "81"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "81"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "81"; latitude: "10"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "12"; height: "113"; }
- ListElement{ longitude: "81"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "14"; height: "107"; }
- ListElement{ longitude: "81"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "16"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "17"; height: "109"; }
- ListElement{ longitude: "81"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "81"; latitude: "19"; height: "104"; }
- ListElement{ longitude: "81"; latitude: "20"; height: "101"; }
- ListElement{ longitude: "81"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "81"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "23"; height: "106"; }
- ListElement{ longitude: "81"; latitude: "24"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "25"; height: "114"; }
- ListElement{ longitude: "81"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "81"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "29"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "30"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "31"; height: "99"; }
- ListElement{ longitude: "81"; latitude: "32"; height: "97"; }
- ListElement{ longitude: "81"; latitude: "33"; height: "93"; }
- ListElement{ longitude: "81"; latitude: "34"; height: "95"; }
- ListElement{ longitude: "81"; latitude: "35"; height: "94"; }
- ListElement{ longitude: "81"; latitude: "36"; height: "95"; }
- ListElement{ longitude: "81"; latitude: "37"; height: "99"; }
- ListElement{ longitude: "81"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "39"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "40"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "41"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "42"; height: "116"; }
- ListElement{ longitude: "81"; latitude: "43"; height: "118"; }
- ListElement{ longitude: "81"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "81"; latitude: "45"; height: "118"; }
- ListElement{ longitude: "81"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "81"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "81"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "81"; latitude: "50"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "51"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "53"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "54"; height: "128"; }
- ListElement{ longitude: "81"; latitude: "55"; height: "132"; }
- ListElement{ longitude: "81"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "81"; latitude: "57"; height: "134"; }
- ListElement{ longitude: "81"; latitude: "58"; height: "133"; }
- ListElement{ longitude: "81"; latitude: "59"; height: "131"; }
- ListElement{ longitude: "81"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "81"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "81"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "81"; latitude: "63"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "64"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "65"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "81"; latitude: "67"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "68"; height: "113"; }
- ListElement{ longitude: "81"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "70"; height: "113"; }
- ListElement{ longitude: "81"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "81"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "81"; latitude: "73"; height: "130"; }
- ListElement{ longitude: "81"; latitude: "74"; height: "141"; }
- ListElement{ longitude: "81"; latitude: "75"; height: "140"; }
- ListElement{ longitude: "81"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "81"; latitude: "77"; height: "138"; }
- ListElement{ longitude: "81"; latitude: "78"; height: "115"; }
- ListElement{ longitude: "81"; latitude: "79"; height: "118"; }
- ListElement{ longitude: "81"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "81"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "82"; height: "131"; }
- ListElement{ longitude: "81"; latitude: "83"; height: "133"; }
- ListElement{ longitude: "81"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "81"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "81"; latitude: "86"; height: "134"; }
- ListElement{ longitude: "81"; latitude: "87"; height: "129"; }
- ListElement{ longitude: "81"; latitude: "88"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "90"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "81"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "95"; height: "115"; }
- ListElement{ longitude: "81"; latitude: "96"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "97"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "98"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "99"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "0"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "3"; height: "109"; }
- ListElement{ longitude: "82"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "82"; latitude: "5"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "82"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "82"; latitude: "10"; height: "88"; }
- ListElement{ longitude: "82"; latitude: "11"; height: "118"; }
- ListElement{ longitude: "82"; latitude: "12"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "13"; height: "111"; }
- ListElement{ longitude: "82"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "15"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "16"; height: "106"; }
- ListElement{ longitude: "82"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "18"; height: "104"; }
- ListElement{ longitude: "82"; latitude: "19"; height: "102"; }
- ListElement{ longitude: "82"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "21"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "22"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "23"; height: "104"; }
- ListElement{ longitude: "82"; latitude: "24"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "25"; height: "114"; }
- ListElement{ longitude: "82"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "82"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "28"; height: "112"; }
- ListElement{ longitude: "82"; latitude: "29"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "30"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "82"; latitude: "32"; height: "97"; }
- ListElement{ longitude: "82"; latitude: "33"; height: "95"; }
- ListElement{ longitude: "82"; latitude: "34"; height: "92"; }
- ListElement{ longitude: "82"; latitude: "35"; height: "94"; }
- ListElement{ longitude: "82"; latitude: "36"; height: "96"; }
- ListElement{ longitude: "82"; latitude: "37"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "82"; latitude: "39"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "40"; height: "113"; }
- ListElement{ longitude: "82"; latitude: "41"; height: "116"; }
- ListElement{ longitude: "82"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "43"; height: "116"; }
- ListElement{ longitude: "82"; latitude: "44"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "82"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "82"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "49"; height: "125"; }
- ListElement{ longitude: "82"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "82"; latitude: "51"; height: "125"; }
- ListElement{ longitude: "82"; latitude: "52"; height: "126"; }
- ListElement{ longitude: "82"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "82"; latitude: "54"; height: "130"; }
- ListElement{ longitude: "82"; latitude: "55"; height: "130"; }
- ListElement{ longitude: "82"; latitude: "56"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "57"; height: "134"; }
- ListElement{ longitude: "82"; latitude: "58"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "82"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "82"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "82"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "82"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "68"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "69"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "70"; height: "113"; }
- ListElement{ longitude: "82"; latitude: "71"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "82"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "75"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "76"; height: "114"; }
- ListElement{ longitude: "82"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "82"; latitude: "78"; height: "100"; }
- ListElement{ longitude: "82"; latitude: "79"; height: "109"; }
- ListElement{ longitude: "82"; latitude: "80"; height: "133"; }
- ListElement{ longitude: "82"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "82"; height: "135"; }
- ListElement{ longitude: "82"; latitude: "83"; height: "139"; }
- ListElement{ longitude: "82"; latitude: "84"; height: "139"; }
- ListElement{ longitude: "82"; latitude: "85"; height: "135"; }
- ListElement{ longitude: "82"; latitude: "86"; height: "131"; }
- ListElement{ longitude: "82"; latitude: "87"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "88"; height: "123"; }
- ListElement{ longitude: "82"; latitude: "89"; height: "121"; }
- ListElement{ longitude: "82"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "92"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "82"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "82"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "82"; latitude: "96"; height: "106"; }
- ListElement{ longitude: "82"; latitude: "97"; height: "102"; }
- ListElement{ longitude: "82"; latitude: "98"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "99"; height: "106"; }
- ListElement{ longitude: "83"; latitude: "0"; height: "110"; }
- ListElement{ longitude: "83"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "83"; latitude: "2"; height: "110"; }
- ListElement{ longitude: "83"; latitude: "3"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "4"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "83"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "12"; height: "114"; }
- ListElement{ longitude: "83"; latitude: "13"; height: "109"; }
- ListElement{ longitude: "83"; latitude: "14"; height: "105"; }
- ListElement{ longitude: "83"; latitude: "15"; height: "102"; }
- ListElement{ longitude: "83"; latitude: "16"; height: "101"; }
- ListElement{ longitude: "83"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "83"; latitude: "18"; height: "100"; }
- ListElement{ longitude: "83"; latitude: "19"; height: "97"; }
- ListElement{ longitude: "83"; latitude: "20"; height: "98"; }
- ListElement{ longitude: "83"; latitude: "21"; height: "97"; }
- ListElement{ longitude: "83"; latitude: "22"; height: "99"; }
- ListElement{ longitude: "83"; latitude: "23"; height: "105"; }
- ListElement{ longitude: "83"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "83"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "83"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "27"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "83"; latitude: "29"; height: "109"; }
- ListElement{ longitude: "83"; latitude: "30"; height: "107"; }
- ListElement{ longitude: "83"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "83"; latitude: "32"; height: "98"; }
- ListElement{ longitude: "83"; latitude: "33"; height: "96"; }
- ListElement{ longitude: "83"; latitude: "34"; height: "93"; }
- ListElement{ longitude: "83"; latitude: "35"; height: "93"; }
- ListElement{ longitude: "83"; latitude: "36"; height: "95"; }
- ListElement{ longitude: "83"; latitude: "37"; height: "100"; }
- ListElement{ longitude: "83"; latitude: "38"; height: "105"; }
- ListElement{ longitude: "83"; latitude: "39"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "40"; height: "115"; }
- ListElement{ longitude: "83"; latitude: "41"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "44"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "83"; latitude: "48"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "83"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "52"; height: "127"; }
- ListElement{ longitude: "83"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "83"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "83"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "83"; latitude: "58"; height: "136"; }
- ListElement{ longitude: "83"; latitude: "59"; height: "133"; }
- ListElement{ longitude: "83"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "83"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "83"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "83"; latitude: "64"; height: "116"; }
- ListElement{ longitude: "83"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "66"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "83"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "69"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "70"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "71"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "72"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "83"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "83"; latitude: "75"; height: "94"; }
- ListElement{ longitude: "83"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "77"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "78"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "83"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "83"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "83"; latitude: "82"; height: "142"; }
- ListElement{ longitude: "83"; latitude: "83"; height: "143"; }
- ListElement{ longitude: "83"; latitude: "84"; height: "140"; }
- ListElement{ longitude: "83"; latitude: "85"; height: "137"; }
- ListElement{ longitude: "83"; latitude: "86"; height: "133"; }
- ListElement{ longitude: "83"; latitude: "87"; height: "127"; }
- ListElement{ longitude: "83"; latitude: "88"; height: "125"; }
- ListElement{ longitude: "83"; latitude: "89"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "90"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "92"; height: "123"; }
- ListElement{ longitude: "83"; latitude: "93"; height: "124"; }
- ListElement{ longitude: "83"; latitude: "94"; height: "122"; }
- ListElement{ longitude: "83"; latitude: "95"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "96"; height: "104"; }
- ListElement{ longitude: "83"; latitude: "97"; height: "97"; }
- ListElement{ longitude: "83"; latitude: "98"; height: "103"; }
- ListElement{ longitude: "83"; latitude: "99"; height: "104"; }
- ListElement{ longitude: "84"; latitude: "0"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "84"; latitude: "2"; height: "110"; }
- ListElement{ longitude: "84"; latitude: "3"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "4"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "84"; latitude: "6"; height: "118"; }
- ListElement{ longitude: "84"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "84"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "9"; height: "99"; }
- ListElement{ longitude: "84"; latitude: "10"; height: "115"; }
- ListElement{ longitude: "84"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "12"; height: "116"; }
- ListElement{ longitude: "84"; latitude: "13"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "14"; height: "104"; }
- ListElement{ longitude: "84"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "16"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "17"; height: "98"; }
- ListElement{ longitude: "84"; latitude: "18"; height: "99"; }
- ListElement{ longitude: "84"; latitude: "19"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "20"; height: "98"; }
- ListElement{ longitude: "84"; latitude: "21"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "84"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "24"; height: "114"; }
- ListElement{ longitude: "84"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "28"; height: "116"; }
- ListElement{ longitude: "84"; latitude: "29"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "30"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "31"; height: "104"; }
- ListElement{ longitude: "84"; latitude: "32"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "33"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "34"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "35"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "36"; height: "99"; }
- ListElement{ longitude: "84"; latitude: "37"; height: "103"; }
- ListElement{ longitude: "84"; latitude: "38"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "84"; latitude: "40"; height: "118"; }
- ListElement{ longitude: "84"; latitude: "41"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "42"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "44"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "84"; latitude: "46"; height: "124"; }
- ListElement{ longitude: "84"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "84"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "51"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "84"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "84"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "84"; latitude: "55"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "56"; height: "135"; }
- ListElement{ longitude: "84"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "84"; latitude: "58"; height: "135"; }
- ListElement{ longitude: "84"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "60"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "84"; latitude: "67"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "68"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "69"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "70"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "84"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "75"; height: "114"; }
- ListElement{ longitude: "84"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "78"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "79"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "80"; height: "136"; }
- ListElement{ longitude: "84"; latitude: "81"; height: "142"; }
- ListElement{ longitude: "84"; latitude: "82"; height: "148"; }
- ListElement{ longitude: "84"; latitude: "83"; height: "149"; }
- ListElement{ longitude: "84"; latitude: "84"; height: "145"; }
- ListElement{ longitude: "84"; latitude: "85"; height: "142"; }
- ListElement{ longitude: "84"; latitude: "86"; height: "138"; }
- ListElement{ longitude: "84"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "88"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "89"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "84"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "93"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "95"; height: "115"; }
- ListElement{ longitude: "84"; latitude: "96"; height: "110"; }
- ListElement{ longitude: "84"; latitude: "97"; height: "107"; }
- ListElement{ longitude: "84"; latitude: "98"; height: "113"; }
- ListElement{ longitude: "84"; latitude: "99"; height: "111"; }
- ListElement{ longitude: "85"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "85"; latitude: "1"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "85"; latitude: "3"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "85"; latitude: "5"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "85"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "85"; latitude: "9"; height: "117"; }
- ListElement{ longitude: "85"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "85"; latitude: "11"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "12"; height: "116"; }
- ListElement{ longitude: "85"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "85"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "85"; latitude: "15"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "16"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "17"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "18"; height: "99"; }
- ListElement{ longitude: "85"; latitude: "19"; height: "101"; }
- ListElement{ longitude: "85"; latitude: "20"; height: "101"; }
- ListElement{ longitude: "85"; latitude: "21"; height: "107"; }
- ListElement{ longitude: "85"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "85"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "85"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "85"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "26"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "85"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "85"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "85"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "31"; height: "106"; }
- ListElement{ longitude: "85"; latitude: "32"; height: "103"; }
- ListElement{ longitude: "85"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "85"; latitude: "34"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "35"; height: "100"; }
- ListElement{ longitude: "85"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "85"; latitude: "37"; height: "106"; }
- ListElement{ longitude: "85"; latitude: "38"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "85"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "85"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "85"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "51"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "54"; height: "134"; }
- ListElement{ longitude: "85"; latitude: "55"; height: "134"; }
- ListElement{ longitude: "85"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "57"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "58"; height: "134"; }
- ListElement{ longitude: "85"; latitude: "59"; height: "133"; }
- ListElement{ longitude: "85"; latitude: "60"; height: "133"; }
- ListElement{ longitude: "85"; latitude: "61"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "64"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "68"; height: "128"; }
- ListElement{ longitude: "85"; latitude: "69"; height: "125"; }
- ListElement{ longitude: "85"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "71"; height: "123"; }
- ListElement{ longitude: "85"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "85"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "85"; latitude: "76"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "77"; height: "113"; }
- ListElement{ longitude: "85"; latitude: "78"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "79"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "80"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "81"; height: "146"; }
- ListElement{ longitude: "85"; latitude: "82"; height: "152"; }
- ListElement{ longitude: "85"; latitude: "83"; height: "154"; }
- ListElement{ longitude: "85"; latitude: "84"; height: "149"; }
- ListElement{ longitude: "85"; latitude: "85"; height: "148"; }
- ListElement{ longitude: "85"; latitude: "86"; height: "141"; }
- ListElement{ longitude: "85"; latitude: "87"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "88"; height: "133"; }
- ListElement{ longitude: "85"; latitude: "89"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "90"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "85"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "85"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "85"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "85"; latitude: "96"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "85"; latitude: "98"; height: "123"; }
- ListElement{ longitude: "85"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "86"; latitude: "1"; height: "110"; }
- ListElement{ longitude: "86"; latitude: "2"; height: "106"; }
- ListElement{ longitude: "86"; latitude: "3"; height: "108"; }
- ListElement{ longitude: "86"; latitude: "4"; height: "110"; }
- ListElement{ longitude: "86"; latitude: "5"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "6"; height: "116"; }
- ListElement{ longitude: "86"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "86"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "86"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "86"; latitude: "11"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "12"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "13"; height: "107"; }
- ListElement{ longitude: "86"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "86"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "86"; latitude: "16"; height: "98"; }
- ListElement{ longitude: "86"; latitude: "17"; height: "99"; }
- ListElement{ longitude: "86"; latitude: "18"; height: "101"; }
- ListElement{ longitude: "86"; latitude: "19"; height: "103"; }
- ListElement{ longitude: "86"; latitude: "20"; height: "108"; }
- ListElement{ longitude: "86"; latitude: "21"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "86"; latitude: "23"; height: "124"; }
- ListElement{ longitude: "86"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "27"; height: "122"; }
- ListElement{ longitude: "86"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "86"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "86"; latitude: "30"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "31"; height: "110"; }
- ListElement{ longitude: "86"; latitude: "32"; height: "107"; }
- ListElement{ longitude: "86"; latitude: "33"; height: "104"; }
- ListElement{ longitude: "86"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "86"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "86"; latitude: "36"; height: "105"; }
- ListElement{ longitude: "86"; latitude: "37"; height: "111"; }
- ListElement{ longitude: "86"; latitude: "38"; height: "115"; }
- ListElement{ longitude: "86"; latitude: "39"; height: "120"; }
- ListElement{ longitude: "86"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "86"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "86"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "86"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "86"; latitude: "53"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "86"; latitude: "55"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "56"; height: "138"; }
- ListElement{ longitude: "86"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "86"; latitude: "58"; height: "137"; }
- ListElement{ longitude: "86"; latitude: "59"; height: "134"; }
- ListElement{ longitude: "86"; latitude: "60"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "61"; height: "134"; }
- ListElement{ longitude: "86"; latitude: "62"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "63"; height: "134"; }
- ListElement{ longitude: "86"; latitude: "64"; height: "131"; }
- ListElement{ longitude: "86"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "86"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "68"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "71"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "72"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "80"; height: "137"; }
- ListElement{ longitude: "86"; latitude: "81"; height: "143"; }
- ListElement{ longitude: "86"; latitude: "82"; height: "150"; }
- ListElement{ longitude: "86"; latitude: "83"; height: "151"; }
- ListElement{ longitude: "86"; latitude: "84"; height: "153"; }
- ListElement{ longitude: "86"; latitude: "85"; height: "151"; }
- ListElement{ longitude: "86"; latitude: "86"; height: "147"; }
- ListElement{ longitude: "86"; latitude: "87"; height: "144"; }
- ListElement{ longitude: "86"; latitude: "88"; height: "141"; }
- ListElement{ longitude: "86"; latitude: "89"; height: "137"; }
- ListElement{ longitude: "86"; latitude: "90"; height: "132"; }
- ListElement{ longitude: "86"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "86"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "86"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "86"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "86"; latitude: "97"; height: "117"; }
- ListElement{ longitude: "86"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "87"; latitude: "0"; height: "110"; }
- ListElement{ longitude: "87"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "87"; latitude: "2"; height: "102"; }
- ListElement{ longitude: "87"; latitude: "3"; height: "102"; }
- ListElement{ longitude: "87"; latitude: "4"; height: "107"; }
- ListElement{ longitude: "87"; latitude: "5"; height: "106"; }
- ListElement{ longitude: "87"; latitude: "6"; height: "110"; }
- ListElement{ longitude: "87"; latitude: "7"; height: "116"; }
- ListElement{ longitude: "87"; latitude: "8"; height: "114"; }
- ListElement{ longitude: "87"; latitude: "9"; height: "116"; }
- ListElement{ longitude: "87"; latitude: "10"; height: "115"; }
- ListElement{ longitude: "87"; latitude: "11"; height: "111"; }
- ListElement{ longitude: "87"; latitude: "12"; height: "109"; }
- ListElement{ longitude: "87"; latitude: "13"; height: "106"; }
- ListElement{ longitude: "87"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "87"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "87"; latitude: "16"; height: "98"; }
- ListElement{ longitude: "87"; latitude: "17"; height: "101"; }
- ListElement{ longitude: "87"; latitude: "18"; height: "103"; }
- ListElement{ longitude: "87"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "87"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "87"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "87"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "87"; latitude: "23"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "24"; height: "131"; }
- ListElement{ longitude: "87"; latitude: "25"; height: "130"; }
- ListElement{ longitude: "87"; latitude: "26"; height: "128"; }
- ListElement{ longitude: "87"; latitude: "27"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "87"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "87"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "87"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "87"; latitude: "32"; height: "112"; }
- ListElement{ longitude: "87"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "87"; latitude: "34"; height: "106"; }
- ListElement{ longitude: "87"; latitude: "35"; height: "108"; }
- ListElement{ longitude: "87"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "87"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "87"; latitude: "38"; height: "118"; }
- ListElement{ longitude: "87"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "87"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "87"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "87"; latitude: "45"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "47"; height: "137"; }
- ListElement{ longitude: "87"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "49"; height: "132"; }
- ListElement{ longitude: "87"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "53"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "87"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "87"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "87"; latitude: "57"; height: "137"; }
- ListElement{ longitude: "87"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "87"; latitude: "59"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "60"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "61"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "62"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "63"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "87"; latitude: "66"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "69"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "71"; height: "132"; }
- ListElement{ longitude: "87"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "87"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "87"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "87"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "87"; latitude: "80"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "87"; latitude: "82"; height: "147"; }
- ListElement{ longitude: "87"; latitude: "83"; height: "151"; }
- ListElement{ longitude: "87"; latitude: "84"; height: "153"; }
- ListElement{ longitude: "87"; latitude: "85"; height: "152"; }
- ListElement{ longitude: "87"; latitude: "86"; height: "151"; }
- ListElement{ longitude: "87"; latitude: "87"; height: "149"; }
- ListElement{ longitude: "87"; latitude: "88"; height: "147"; }
- ListElement{ longitude: "87"; latitude: "89"; height: "143"; }
- ListElement{ longitude: "87"; latitude: "90"; height: "136"; }
- ListElement{ longitude: "87"; latitude: "91"; height: "128"; }
- ListElement{ longitude: "87"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "87"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "87"; latitude: "94"; height: "113"; }
- ListElement{ longitude: "87"; latitude: "95"; height: "113"; }
- ListElement{ longitude: "87"; latitude: "96"; height: "116"; }
- ListElement{ longitude: "87"; latitude: "97"; height: "118"; }
- ListElement{ longitude: "87"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "87"; latitude: "99"; height: "117"; }
- ListElement{ longitude: "88"; latitude: "0"; height: "108"; }
- ListElement{ longitude: "88"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "88"; latitude: "2"; height: "101"; }
- ListElement{ longitude: "88"; latitude: "3"; height: "101"; }
- ListElement{ longitude: "88"; latitude: "4"; height: "103"; }
- ListElement{ longitude: "88"; latitude: "5"; height: "107"; }
- ListElement{ longitude: "88"; latitude: "6"; height: "107"; }
- ListElement{ longitude: "88"; latitude: "7"; height: "112"; }
- ListElement{ longitude: "88"; latitude: "8"; height: "105"; }
- ListElement{ longitude: "88"; latitude: "9"; height: "113"; }
- ListElement{ longitude: "88"; latitude: "10"; height: "109"; }
- ListElement{ longitude: "88"; latitude: "11"; height: "106"; }
- ListElement{ longitude: "88"; latitude: "12"; height: "110"; }
- ListElement{ longitude: "88"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "88"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "88"; latitude: "15"; height: "102"; }
- ListElement{ longitude: "88"; latitude: "16"; height: "101"; }
- ListElement{ longitude: "88"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "88"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "88"; latitude: "19"; height: "112"; }
- ListElement{ longitude: "88"; latitude: "20"; height: "117"; }
- ListElement{ longitude: "88"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "22"; height: "134"; }
- ListElement{ longitude: "88"; latitude: "23"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "24"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "25"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "26"; height: "129"; }
- ListElement{ longitude: "88"; latitude: "27"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "88"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "88"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "88"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "88"; latitude: "32"; height: "114"; }
- ListElement{ longitude: "88"; latitude: "33"; height: "110"; }
- ListElement{ longitude: "88"; latitude: "34"; height: "108"; }
- ListElement{ longitude: "88"; latitude: "35"; height: "109"; }
- ListElement{ longitude: "88"; latitude: "36"; height: "111"; }
- ListElement{ longitude: "88"; latitude: "37"; height: "116"; }
- ListElement{ longitude: "88"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "88"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "88"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "88"; latitude: "44"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "45"; height: "135"; }
- ListElement{ longitude: "88"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "47"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "88"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "51"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "54"; height: "140"; }
- ListElement{ longitude: "88"; latitude: "55"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "57"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "88"; latitude: "59"; height: "135"; }
- ListElement{ longitude: "88"; latitude: "60"; height: "134"; }
- ListElement{ longitude: "88"; latitude: "61"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "62"; height: "138"; }
- ListElement{ longitude: "88"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "88"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "66"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "67"; height: "132"; }
- ListElement{ longitude: "88"; latitude: "68"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "69"; height: "135"; }
- ListElement{ longitude: "88"; latitude: "70"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "71"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "73"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "77"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "80"; height: "131"; }
- ListElement{ longitude: "88"; latitude: "81"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "82"; height: "142"; }
- ListElement{ longitude: "88"; latitude: "83"; height: "146"; }
- ListElement{ longitude: "88"; latitude: "84"; height: "150"; }
- ListElement{ longitude: "88"; latitude: "85"; height: "149"; }
- ListElement{ longitude: "88"; latitude: "86"; height: "149"; }
- ListElement{ longitude: "88"; latitude: "87"; height: "150"; }
- ListElement{ longitude: "88"; latitude: "88"; height: "148"; }
- ListElement{ longitude: "88"; latitude: "89"; height: "147"; }
- ListElement{ longitude: "88"; latitude: "90"; height: "140"; }
- ListElement{ longitude: "88"; latitude: "91"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "88"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "88"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "88"; latitude: "95"; height: "117"; }
- ListElement{ longitude: "88"; latitude: "96"; height: "119"; }
- ListElement{ longitude: "88"; latitude: "97"; height: "119"; }
- ListElement{ longitude: "88"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "99"; height: "113"; }
- ListElement{ longitude: "89"; latitude: "0"; height: "106"; }
- ListElement{ longitude: "89"; latitude: "1"; height: "101"; }
- ListElement{ longitude: "89"; latitude: "2"; height: "97"; }
- ListElement{ longitude: "89"; latitude: "3"; height: "99"; }
- ListElement{ longitude: "89"; latitude: "4"; height: "101"; }
- ListElement{ longitude: "89"; latitude: "5"; height: "104"; }
- ListElement{ longitude: "89"; latitude: "6"; height: "104"; }
- ListElement{ longitude: "89"; latitude: "7"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "8"; height: "101"; }
- ListElement{ longitude: "89"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "10"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "11"; height: "107"; }
- ListElement{ longitude: "89"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "89"; latitude: "13"; height: "106"; }
- ListElement{ longitude: "89"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "89"; latitude: "15"; height: "103"; }
- ListElement{ longitude: "89"; latitude: "16"; height: "103"; }
- ListElement{ longitude: "89"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "89"; latitude: "18"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "19"; height: "113"; }
- ListElement{ longitude: "89"; latitude: "20"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "21"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "22"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "23"; height: "140"; }
- ListElement{ longitude: "89"; latitude: "24"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "25"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "26"; height: "131"; }
- ListElement{ longitude: "89"; latitude: "27"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "89"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "89"; latitude: "33"; height: "112"; }
- ListElement{ longitude: "89"; latitude: "34"; height: "111"; }
- ListElement{ longitude: "89"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "89"; latitude: "36"; height: "114"; }
- ListElement{ longitude: "89"; latitude: "37"; height: "117"; }
- ListElement{ longitude: "89"; latitude: "38"; height: "119"; }
- ListElement{ longitude: "89"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "89"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "89"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "47"; height: "138"; }
- ListElement{ longitude: "89"; latitude: "48"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "89"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "52"; height: "135"; }
- ListElement{ longitude: "89"; latitude: "53"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "89"; latitude: "55"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "57"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "89"; latitude: "59"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "60"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "61"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "62"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "89"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "89"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "66"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "67"; height: "132"; }
- ListElement{ longitude: "89"; latitude: "68"; height: "135"; }
- ListElement{ longitude: "89"; latitude: "69"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "70"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "71"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "72"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "89"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "89"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "77"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "89"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "89"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "83"; height: "140"; }
- ListElement{ longitude: "89"; latitude: "84"; height: "143"; }
- ListElement{ longitude: "89"; latitude: "85"; height: "146"; }
- ListElement{ longitude: "89"; latitude: "86"; height: "146"; }
- ListElement{ longitude: "89"; latitude: "87"; height: "146"; }
- ListElement{ longitude: "89"; latitude: "88"; height: "147"; }
- ListElement{ longitude: "89"; latitude: "89"; height: "145"; }
- ListElement{ longitude: "89"; latitude: "90"; height: "140"; }
- ListElement{ longitude: "89"; latitude: "91"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "92"; height: "128"; }
- ListElement{ longitude: "89"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "89"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "89"; latitude: "97"; height: "117"; }
- ListElement{ longitude: "89"; latitude: "98"; height: "119"; }
- ListElement{ longitude: "89"; latitude: "99"; height: "107"; }
- ListElement{ longitude: "90"; latitude: "0"; height: "102"; }
- ListElement{ longitude: "90"; latitude: "1"; height: "99"; }
- ListElement{ longitude: "90"; latitude: "2"; height: "98"; }
- ListElement{ longitude: "90"; latitude: "3"; height: "99"; }
- ListElement{ longitude: "90"; latitude: "4"; height: "102"; }
- ListElement{ longitude: "90"; latitude: "5"; height: "101"; }
- ListElement{ longitude: "90"; latitude: "6"; height: "101"; }
- ListElement{ longitude: "90"; latitude: "7"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "8"; height: "106"; }
- ListElement{ longitude: "90"; latitude: "9"; height: "105"; }
- ListElement{ longitude: "90"; latitude: "10"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "11"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "12"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "90"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "90"; latitude: "15"; height: "107"; }
- ListElement{ longitude: "90"; latitude: "16"; height: "108"; }
- ListElement{ longitude: "90"; latitude: "17"; height: "109"; }
- ListElement{ longitude: "90"; latitude: "18"; height: "112"; }
- ListElement{ longitude: "90"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "90"; latitude: "20"; height: "122"; }
- ListElement{ longitude: "90"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "22"; height: "133"; }
- ListElement{ longitude: "90"; latitude: "23"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "24"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "25"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "26"; height: "134"; }
- ListElement{ longitude: "90"; latitude: "27"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "28"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "90"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "90"; latitude: "32"; height: "113"; }
- ListElement{ longitude: "90"; latitude: "33"; height: "110"; }
- ListElement{ longitude: "90"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "90"; latitude: "35"; height: "111"; }
- ListElement{ longitude: "90"; latitude: "36"; height: "113"; }
- ListElement{ longitude: "90"; latitude: "37"; height: "116"; }
- ListElement{ longitude: "90"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "90"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "90"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "90"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "90"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "44"; height: "133"; }
- ListElement{ longitude: "90"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "47"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "48"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "49"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "51"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "52"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "54"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "55"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "57"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "59"; height: "134"; }
- ListElement{ longitude: "90"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "65"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "68"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "69"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "90"; latitude: "71"; height: "135"; }
- ListElement{ longitude: "90"; latitude: "72"; height: "135"; }
- ListElement{ longitude: "90"; latitude: "73"; height: "132"; }
- ListElement{ longitude: "90"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "90"; latitude: "77"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "90"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "90"; latitude: "82"; height: "135"; }
- ListElement{ longitude: "90"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "84"; height: "140"; }
- ListElement{ longitude: "90"; latitude: "85"; height: "141"; }
- ListElement{ longitude: "90"; latitude: "86"; height: "143"; }
- ListElement{ longitude: "90"; latitude: "87"; height: "143"; }
- ListElement{ longitude: "90"; latitude: "88"; height: "142"; }
- ListElement{ longitude: "90"; latitude: "89"; height: "140"; }
- ListElement{ longitude: "90"; latitude: "90"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "91"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "93"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "90"; latitude: "95"; height: "86"; }
- ListElement{ longitude: "90"; latitude: "96"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "97"; height: "110"; }
- ListElement{ longitude: "90"; latitude: "98"; height: "108"; }
- ListElement{ longitude: "90"; latitude: "99"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "0"; height: "97"; }
- ListElement{ longitude: "91"; latitude: "1"; height: "97"; }
- ListElement{ longitude: "91"; latitude: "2"; height: "100"; }
- ListElement{ longitude: "91"; latitude: "3"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "4"; height: "102"; }
- ListElement{ longitude: "91"; latitude: "5"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "6"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "7"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "8"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "9"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "10"; height: "100"; }
- ListElement{ longitude: "91"; latitude: "11"; height: "102"; }
- ListElement{ longitude: "91"; latitude: "12"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "91"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "91"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "91"; latitude: "16"; height: "109"; }
- ListElement{ longitude: "91"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "91"; latitude: "18"; height: "111"; }
- ListElement{ longitude: "91"; latitude: "19"; height: "116"; }
- ListElement{ longitude: "91"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "91"; latitude: "21"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "91"; latitude: "23"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "24"; height: "133"; }
- ListElement{ longitude: "91"; latitude: "25"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "26"; height: "134"; }
- ListElement{ longitude: "91"; latitude: "27"; height: "133"; }
- ListElement{ longitude: "91"; latitude: "28"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "29"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "30"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "91"; latitude: "32"; height: "112"; }
- ListElement{ longitude: "91"; latitude: "33"; height: "110"; }
- ListElement{ longitude: "91"; latitude: "34"; height: "109"; }
- ListElement{ longitude: "91"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "91"; latitude: "36"; height: "113"; }
- ListElement{ longitude: "91"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "91"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "91"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "91"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "91"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "91"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "45"; height: "134"; }
- ListElement{ longitude: "91"; latitude: "46"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "47"; height: "140"; }
- ListElement{ longitude: "91"; latitude: "48"; height: "141"; }
- ListElement{ longitude: "91"; latitude: "49"; height: "141"; }
- ListElement{ longitude: "91"; latitude: "50"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "51"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "91"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "56"; height: "133"; }
- ListElement{ longitude: "91"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "91"; latitude: "58"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "62"; height: "127"; }
- ListElement{ longitude: "91"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "91"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "65"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "66"; height: "123"; }
- ListElement{ longitude: "91"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "91"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "91"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "91"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "71"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "72"; height: "131"; }
- ListElement{ longitude: "91"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "91"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "91"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "78"; height: "127"; }
- ListElement{ longitude: "91"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "91"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "84"; height: "139"; }
- ListElement{ longitude: "91"; latitude: "85"; height: "140"; }
- ListElement{ longitude: "91"; latitude: "86"; height: "141"; }
- ListElement{ longitude: "91"; latitude: "87"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "88"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "89"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "90"; height: "134"; }
- ListElement{ longitude: "91"; latitude: "91"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "92"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "93"; height: "131"; }
- ListElement{ longitude: "91"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "91"; latitude: "95"; height: "95"; }
- ListElement{ longitude: "91"; latitude: "96"; height: "105"; }
- ListElement{ longitude: "91"; latitude: "97"; height: "106"; }
- ListElement{ longitude: "91"; latitude: "98"; height: "97"; }
- ListElement{ longitude: "91"; latitude: "99"; height: "91"; }
- ListElement{ longitude: "92"; latitude: "0"; height: "96"; }
- ListElement{ longitude: "92"; latitude: "1"; height: "97"; }
- ListElement{ longitude: "92"; latitude: "2"; height: "101"; }
- ListElement{ longitude: "92"; latitude: "3"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "4"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "5"; height: "99"; }
- ListElement{ longitude: "92"; latitude: "6"; height: "95"; }
- ListElement{ longitude: "92"; latitude: "7"; height: "98"; }
- ListElement{ longitude: "92"; latitude: "8"; height: "96"; }
- ListElement{ longitude: "92"; latitude: "9"; height: "98"; }
- ListElement{ longitude: "92"; latitude: "10"; height: "97"; }
- ListElement{ longitude: "92"; latitude: "11"; height: "99"; }
- ListElement{ longitude: "92"; latitude: "12"; height: "99"; }
- ListElement{ longitude: "92"; latitude: "13"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "14"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "15"; height: "105"; }
- ListElement{ longitude: "92"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "92"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "92"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "92"; latitude: "19"; height: "112"; }
- ListElement{ longitude: "92"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "92"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "92"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "92"; latitude: "24"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "25"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "26"; height: "133"; }
- ListElement{ longitude: "92"; latitude: "27"; height: "134"; }
- ListElement{ longitude: "92"; latitude: "28"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "92"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "31"; height: "113"; }
- ListElement{ longitude: "92"; latitude: "32"; height: "110"; }
- ListElement{ longitude: "92"; latitude: "33"; height: "113"; }
- ListElement{ longitude: "92"; latitude: "34"; height: "112"; }
- ListElement{ longitude: "92"; latitude: "35"; height: "115"; }
- ListElement{ longitude: "92"; latitude: "36"; height: "116"; }
- ListElement{ longitude: "92"; latitude: "37"; height: "115"; }
- ListElement{ longitude: "92"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "92"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "92"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "92"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "92"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "45"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "92"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "49"; height: "141"; }
- ListElement{ longitude: "92"; latitude: "50"; height: "140"; }
- ListElement{ longitude: "92"; latitude: "51"; height: "139"; }
- ListElement{ longitude: "92"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "53"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "54"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "55"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "56"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "59"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "92"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "92"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "92"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "92"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "92"; latitude: "66"; height: "118"; }
- ListElement{ longitude: "92"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "68"; height: "122"; }
- ListElement{ longitude: "92"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "92"; latitude: "71"; height: "125"; }
- ListElement{ longitude: "92"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "92"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "92"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "78"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "79"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "92"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "83"; height: "134"; }
- ListElement{ longitude: "92"; latitude: "84"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "85"; height: "137"; }
- ListElement{ longitude: "92"; latitude: "86"; height: "142"; }
- ListElement{ longitude: "92"; latitude: "87"; height: "137"; }
- ListElement{ longitude: "92"; latitude: "88"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "89"; height: "133"; }
- ListElement{ longitude: "92"; latitude: "90"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "91"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "92"; height: "132"; }
- ListElement{ longitude: "92"; latitude: "93"; height: "124"; }
- ListElement{ longitude: "92"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "92"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "92"; latitude: "96"; height: "109"; }
- ListElement{ longitude: "92"; latitude: "97"; height: "109"; }
- ListElement{ longitude: "92"; latitude: "98"; height: "96"; }
- ListElement{ longitude: "92"; latitude: "99"; height: "87"; }
- ListElement{ longitude: "93"; latitude: "0"; height: "96"; }
- ListElement{ longitude: "93"; latitude: "1"; height: "100"; }
- ListElement{ longitude: "93"; latitude: "2"; height: "103"; }
- ListElement{ longitude: "93"; latitude: "3"; height: "105"; }
- ListElement{ longitude: "93"; latitude: "4"; height: "105"; }
- ListElement{ longitude: "93"; latitude: "5"; height: "96"; }
- ListElement{ longitude: "93"; latitude: "6"; height: "97"; }
- ListElement{ longitude: "93"; latitude: "7"; height: "97"; }
- ListElement{ longitude: "93"; latitude: "8"; height: "93"; }
- ListElement{ longitude: "93"; latitude: "9"; height: "94"; }
- ListElement{ longitude: "93"; latitude: "10"; height: "94"; }
- ListElement{ longitude: "93"; latitude: "11"; height: "95"; }
- ListElement{ longitude: "93"; latitude: "12"; height: "98"; }
- ListElement{ longitude: "93"; latitude: "13"; height: "99"; }
- ListElement{ longitude: "93"; latitude: "14"; height: "99"; }
- ListElement{ longitude: "93"; latitude: "15"; height: "102"; }
- ListElement{ longitude: "93"; latitude: "16"; height: "100"; }
- ListElement{ longitude: "93"; latitude: "17"; height: "104"; }
- ListElement{ longitude: "93"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "93"; latitude: "19"; height: "110"; }
- ListElement{ longitude: "93"; latitude: "20"; height: "113"; }
- ListElement{ longitude: "93"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "93"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "93"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "93"; latitude: "24"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "25"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "26"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "27"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "28"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "93"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "93"; latitude: "31"; height: "113"; }
- ListElement{ longitude: "93"; latitude: "32"; height: "111"; }
- ListElement{ longitude: "93"; latitude: "33"; height: "114"; }
- ListElement{ longitude: "93"; latitude: "34"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "35"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "36"; height: "118"; }
- ListElement{ longitude: "93"; latitude: "37"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "93"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "93"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "93"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "46"; height: "134"; }
- ListElement{ longitude: "93"; latitude: "47"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "48"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "49"; height: "142"; }
- ListElement{ longitude: "93"; latitude: "50"; height: "140"; }
- ListElement{ longitude: "93"; latitude: "51"; height: "137"; }
- ListElement{ longitude: "93"; latitude: "52"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "93"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "55"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "93"; latitude: "57"; height: "131"; }
- ListElement{ longitude: "93"; latitude: "58"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "93"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "93"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "93"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "66"; height: "120"; }
- ListElement{ longitude: "93"; latitude: "67"; height: "123"; }
- ListElement{ longitude: "93"; latitude: "68"; height: "122"; }
- ListElement{ longitude: "93"; latitude: "69"; height: "122"; }
- ListElement{ longitude: "93"; latitude: "70"; height: "122"; }
- ListElement{ longitude: "93"; latitude: "71"; height: "123"; }
- ListElement{ longitude: "93"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "73"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "78"; height: "130"; }
- ListElement{ longitude: "93"; latitude: "79"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "80"; height: "133"; }
- ListElement{ longitude: "93"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "93"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "83"; height: "135"; }
- ListElement{ longitude: "93"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "93"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "93"; latitude: "86"; height: "144"; }
- ListElement{ longitude: "93"; latitude: "87"; height: "139"; }
- ListElement{ longitude: "93"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "89"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "90"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "91"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "92"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "93"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "93"; latitude: "95"; height: "111"; }
- ListElement{ longitude: "93"; latitude: "96"; height: "110"; }
- ListElement{ longitude: "93"; latitude: "97"; height: "109"; }
- ListElement{ longitude: "93"; latitude: "98"; height: "98"; }
- ListElement{ longitude: "93"; latitude: "99"; height: "85"; }
- ListElement{ longitude: "94"; latitude: "0"; height: "91"; }
- ListElement{ longitude: "94"; latitude: "1"; height: "93"; }
- ListElement{ longitude: "94"; latitude: "2"; height: "98"; }
- ListElement{ longitude: "94"; latitude: "3"; height: "101"; }
- ListElement{ longitude: "94"; latitude: "4"; height: "106"; }
- ListElement{ longitude: "94"; latitude: "5"; height: "106"; }
- ListElement{ longitude: "94"; latitude: "6"; height: "89"; }
- ListElement{ longitude: "94"; latitude: "7"; height: "98"; }
- ListElement{ longitude: "94"; latitude: "8"; height: "95"; }
- ListElement{ longitude: "94"; latitude: "9"; height: "91"; }
- ListElement{ longitude: "94"; latitude: "10"; height: "90"; }
- ListElement{ longitude: "94"; latitude: "11"; height: "92"; }
- ListElement{ longitude: "94"; latitude: "12"; height: "94"; }
- ListElement{ longitude: "94"; latitude: "13"; height: "95"; }
- ListElement{ longitude: "94"; latitude: "14"; height: "98"; }
- ListElement{ longitude: "94"; latitude: "15"; height: "99"; }
- ListElement{ longitude: "94"; latitude: "16"; height: "97"; }
- ListElement{ longitude: "94"; latitude: "17"; height: "101"; }
- ListElement{ longitude: "94"; latitude: "18"; height: "105"; }
- ListElement{ longitude: "94"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "94"; latitude: "20"; height: "113"; }
- ListElement{ longitude: "94"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "94"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "26"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "27"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "28"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "30"; height: "119"; }
- ListElement{ longitude: "94"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "94"; latitude: "32"; height: "114"; }
- ListElement{ longitude: "94"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "94"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "94"; latitude: "35"; height: "113"; }
- ListElement{ longitude: "94"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "38"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "94"; latitude: "46"; height: "136"; }
- ListElement{ longitude: "94"; latitude: "47"; height: "141"; }
- ListElement{ longitude: "94"; latitude: "48"; height: "145"; }
- ListElement{ longitude: "94"; latitude: "49"; height: "145"; }
- ListElement{ longitude: "94"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "94"; latitude: "51"; height: "129"; }
- ListElement{ longitude: "94"; latitude: "52"; height: "138"; }
- ListElement{ longitude: "94"; latitude: "53"; height: "140"; }
- ListElement{ longitude: "94"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "94"; latitude: "55"; height: "139"; }
- ListElement{ longitude: "94"; latitude: "56"; height: "131"; }
- ListElement{ longitude: "94"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "58"; height: "129"; }
- ListElement{ longitude: "94"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "94"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "94"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "94"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "65"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "66"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "94"; latitude: "69"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "70"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "71"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "73"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "78"; height: "129"; }
- ListElement{ longitude: "94"; latitude: "79"; height: "133"; }
- ListElement{ longitude: "94"; latitude: "80"; height: "134"; }
- ListElement{ longitude: "94"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "94"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "94"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "94"; latitude: "84"; height: "142"; }
- ListElement{ longitude: "94"; latitude: "85"; height: "148"; }
- ListElement{ longitude: "94"; latitude: "86"; height: "146"; }
- ListElement{ longitude: "94"; latitude: "87"; height: "137"; }
- ListElement{ longitude: "94"; latitude: "88"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "89"; height: "117"; }
- ListElement{ longitude: "94"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "92"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "93"; height: "115"; }
- ListElement{ longitude: "94"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "94"; latitude: "95"; height: "115"; }
- ListElement{ longitude: "94"; latitude: "96"; height: "111"; }
- ListElement{ longitude: "94"; latitude: "97"; height: "106"; }
- ListElement{ longitude: "94"; latitude: "98"; height: "94"; }
- ListElement{ longitude: "94"; latitude: "99"; height: "84"; }
- ListElement{ longitude: "95"; latitude: "0"; height: "87"; }
- ListElement{ longitude: "95"; latitude: "1"; height: "89"; }
- ListElement{ longitude: "95"; latitude: "2"; height: "92"; }
- ListElement{ longitude: "95"; latitude: "3"; height: "96"; }
- ListElement{ longitude: "95"; latitude: "4"; height: "100"; }
- ListElement{ longitude: "95"; latitude: "5"; height: "107"; }
- ListElement{ longitude: "95"; latitude: "6"; height: "101"; }
- ListElement{ longitude: "95"; latitude: "7"; height: "102"; }
- ListElement{ longitude: "95"; latitude: "8"; height: "96"; }
- ListElement{ longitude: "95"; latitude: "9"; height: "93"; }
- ListElement{ longitude: "95"; latitude: "10"; height: "91"; }
- ListElement{ longitude: "95"; latitude: "11"; height: "91"; }
- ListElement{ longitude: "95"; latitude: "12"; height: "92"; }
- ListElement{ longitude: "95"; latitude: "13"; height: "93"; }
- ListElement{ longitude: "95"; latitude: "14"; height: "94"; }
- ListElement{ longitude: "95"; latitude: "15"; height: "95"; }
- ListElement{ longitude: "95"; latitude: "16"; height: "99"; }
- ListElement{ longitude: "95"; latitude: "17"; height: "99"; }
- ListElement{ longitude: "95"; latitude: "18"; height: "103"; }
- ListElement{ longitude: "95"; latitude: "19"; height: "111"; }
- ListElement{ longitude: "95"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "95"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "95"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "95"; latitude: "27"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "28"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "95"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "95"; latitude: "31"; height: "111"; }
- ListElement{ longitude: "95"; latitude: "32"; height: "113"; }
- ListElement{ longitude: "95"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "95"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "95"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "95"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "95"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "95"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "95"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "95"; latitude: "42"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "43"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "46"; height: "132"; }
- ListElement{ longitude: "95"; latitude: "47"; height: "141"; }
- ListElement{ longitude: "95"; latitude: "48"; height: "139"; }
- ListElement{ longitude: "95"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "95"; latitude: "50"; height: "143"; }
- ListElement{ longitude: "95"; latitude: "51"; height: "138"; }
- ListElement{ longitude: "95"; latitude: "52"; height: "145"; }
- ListElement{ longitude: "95"; latitude: "53"; height: "143"; }
- ListElement{ longitude: "95"; latitude: "54"; height: "140"; }
- ListElement{ longitude: "95"; latitude: "55"; height: "140"; }
- ListElement{ longitude: "95"; latitude: "56"; height: "125"; }
- ListElement{ longitude: "95"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "64"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "95"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "95"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "95"; latitude: "68"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "71"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "72"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "73"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "76"; height: "124"; }
- ListElement{ longitude: "95"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "78"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "79"; height: "133"; }
- ListElement{ longitude: "95"; latitude: "80"; height: "134"; }
- ListElement{ longitude: "95"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "95"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "95"; latitude: "83"; height: "139"; }
- ListElement{ longitude: "95"; latitude: "84"; height: "146"; }
- ListElement{ longitude: "95"; latitude: "85"; height: "146"; }
- ListElement{ longitude: "95"; latitude: "86"; height: "139"; }
- ListElement{ longitude: "95"; latitude: "87"; height: "124"; }
- ListElement{ longitude: "95"; latitude: "88"; height: "112"; }
- ListElement{ longitude: "95"; latitude: "89"; height: "105"; }
- ListElement{ longitude: "95"; latitude: "90"; height: "110"; }
- ListElement{ longitude: "95"; latitude: "91"; height: "116"; }
- ListElement{ longitude: "95"; latitude: "92"; height: "116"; }
- ListElement{ longitude: "95"; latitude: "93"; height: "114"; }
- ListElement{ longitude: "95"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "95"; latitude: "95"; height: "107"; }
- ListElement{ longitude: "95"; latitude: "96"; height: "103"; }
- ListElement{ longitude: "95"; latitude: "97"; height: "101"; }
- ListElement{ longitude: "95"; latitude: "98"; height: "91"; }
- ListElement{ longitude: "95"; latitude: "99"; height: "83"; }
- ListElement{ longitude: "96"; latitude: "0"; height: "87"; }
- ListElement{ longitude: "96"; latitude: "1"; height: "84"; }
- ListElement{ longitude: "96"; latitude: "2"; height: "87"; }
- ListElement{ longitude: "96"; latitude: "3"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "4"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "5"; height: "102"; }
- ListElement{ longitude: "96"; latitude: "6"; height: "107"; }
- ListElement{ longitude: "96"; latitude: "7"; height: "107"; }
- ListElement{ longitude: "96"; latitude: "8"; height: "101"; }
- ListElement{ longitude: "96"; latitude: "9"; height: "95"; }
- ListElement{ longitude: "96"; latitude: "10"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "11"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "12"; height: "92"; }
- ListElement{ longitude: "96"; latitude: "13"; height: "92"; }
- ListElement{ longitude: "96"; latitude: "14"; height: "93"; }
- ListElement{ longitude: "96"; latitude: "15"; height: "96"; }
- ListElement{ longitude: "96"; latitude: "16"; height: "97"; }
- ListElement{ longitude: "96"; latitude: "17"; height: "97"; }
- ListElement{ longitude: "96"; latitude: "18"; height: "93"; }
- ListElement{ longitude: "96"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "96"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "96"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "96"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "96"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "96"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "96"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "96"; latitude: "28"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "96"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "96"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "96"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "96"; latitude: "35"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "36"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "96"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "96"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "44"; height: "120"; }
- ListElement{ longitude: "96"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "96"; latitude: "46"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "47"; height: "139"; }
- ListElement{ longitude: "96"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "96"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "96"; latitude: "50"; height: "147"; }
- ListElement{ longitude: "96"; latitude: "51"; height: "149"; }
- ListElement{ longitude: "96"; latitude: "52"; height: "148"; }
- ListElement{ longitude: "96"; latitude: "53"; height: "149"; }
- ListElement{ longitude: "96"; latitude: "54"; height: "146"; }
- ListElement{ longitude: "96"; latitude: "55"; height: "144"; }
- ListElement{ longitude: "96"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "96"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "58"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "61"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "62"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "63"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "64"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "65"; height: "134"; }
- ListElement{ longitude: "96"; latitude: "66"; height: "136"; }
- ListElement{ longitude: "96"; latitude: "67"; height: "131"; }
- ListElement{ longitude: "96"; latitude: "68"; height: "129"; }
- ListElement{ longitude: "96"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "71"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "96"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "96"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "96"; latitude: "77"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "78"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "79"; height: "135"; }
- ListElement{ longitude: "96"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "96"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "96"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "96"; latitude: "84"; height: "144"; }
- ListElement{ longitude: "96"; latitude: "85"; height: "143"; }
- ListElement{ longitude: "96"; latitude: "86"; height: "135"; }
- ListElement{ longitude: "96"; latitude: "87"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "88"; height: "113"; }
- ListElement{ longitude: "96"; latitude: "89"; height: "107"; }
- ListElement{ longitude: "96"; latitude: "90"; height: "106"; }
- ListElement{ longitude: "96"; latitude: "91"; height: "112"; }
- ListElement{ longitude: "96"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "96"; latitude: "94"; height: "106"; }
- ListElement{ longitude: "96"; latitude: "95"; height: "95"; }
- ListElement{ longitude: "96"; latitude: "96"; height: "87"; }
- ListElement{ longitude: "96"; latitude: "97"; height: "85"; }
- ListElement{ longitude: "96"; latitude: "98"; height: "81"; }
- ListElement{ longitude: "96"; latitude: "99"; height: "75"; }
- ListElement{ longitude: "97"; latitude: "0"; height: "92"; }
- ListElement{ longitude: "97"; latitude: "1"; height: "92"; }
- ListElement{ longitude: "97"; latitude: "2"; height: "90"; }
- ListElement{ longitude: "97"; latitude: "3"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "4"; height: "78"; }
- ListElement{ longitude: "97"; latitude: "5"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "6"; height: "94"; }
- ListElement{ longitude: "97"; latitude: "7"; height: "93"; }
- ListElement{ longitude: "97"; latitude: "8"; height: "92"; }
- ListElement{ longitude: "97"; latitude: "9"; height: "90"; }
- ListElement{ longitude: "97"; latitude: "10"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "11"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "12"; height: "90"; }
- ListElement{ longitude: "97"; latitude: "13"; height: "94"; }
- ListElement{ longitude: "97"; latitude: "14"; height: "95"; }
- ListElement{ longitude: "97"; latitude: "15"; height: "94"; }
- ListElement{ longitude: "97"; latitude: "16"; height: "95"; }
- ListElement{ longitude: "97"; latitude: "17"; height: "99"; }
- ListElement{ longitude: "97"; latitude: "18"; height: "104"; }
- ListElement{ longitude: "97"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "97"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "97"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "28"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "97"; latitude: "33"; height: "124"; }
- ListElement{ longitude: "97"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "97"; latitude: "36"; height: "119"; }
- ListElement{ longitude: "97"; latitude: "37"; height: "115"; }
- ListElement{ longitude: "97"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "40"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "41"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "42"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "43"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "44"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "97"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "97"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "97"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "50"; height: "141"; }
- ListElement{ longitude: "97"; latitude: "51"; height: "143"; }
- ListElement{ longitude: "97"; latitude: "52"; height: "143"; }
- ListElement{ longitude: "97"; latitude: "53"; height: "143"; }
- ListElement{ longitude: "97"; latitude: "54"; height: "139"; }
- ListElement{ longitude: "97"; latitude: "55"; height: "136"; }
- ListElement{ longitude: "97"; latitude: "56"; height: "132"; }
- ListElement{ longitude: "97"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "97"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "97"; latitude: "59"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "60"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "97"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "97"; latitude: "63"; height: "134"; }
- ListElement{ longitude: "97"; latitude: "64"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "65"; height: "139"; }
- ListElement{ longitude: "97"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "97"; latitude: "67"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "97"; latitude: "69"; height: "136"; }
- ListElement{ longitude: "97"; latitude: "70"; height: "131"; }
- ListElement{ longitude: "97"; latitude: "71"; height: "130"; }
- ListElement{ longitude: "97"; latitude: "72"; height: "129"; }
- ListElement{ longitude: "97"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "97"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "97"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "77"; height: "127"; }
- ListElement{ longitude: "97"; latitude: "78"; height: "128"; }
- ListElement{ longitude: "97"; latitude: "79"; height: "123"; }
- ListElement{ longitude: "97"; latitude: "80"; height: "123"; }
- ListElement{ longitude: "97"; latitude: "81"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "82"; height: "129"; }
- ListElement{ longitude: "97"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "84"; height: "140"; }
- ListElement{ longitude: "97"; latitude: "85"; height: "138"; }
- ListElement{ longitude: "97"; latitude: "86"; height: "132"; }
- ListElement{ longitude: "97"; latitude: "87"; height: "124"; }
- ListElement{ longitude: "97"; latitude: "88"; height: "111"; }
- ListElement{ longitude: "97"; latitude: "89"; height: "102"; }
- ListElement{ longitude: "97"; latitude: "90"; height: "99"; }
- ListElement{ longitude: "97"; latitude: "91"; height: "109"; }
- ListElement{ longitude: "97"; latitude: "92"; height: "110"; }
- ListElement{ longitude: "97"; latitude: "93"; height: "96"; }
- ListElement{ longitude: "97"; latitude: "94"; height: "76"; }
- ListElement{ longitude: "97"; latitude: "95"; height: "68"; }
- ListElement{ longitude: "97"; latitude: "96"; height: "68"; }
- ListElement{ longitude: "97"; latitude: "97"; height: "72"; }
- ListElement{ longitude: "97"; latitude: "98"; height: "70"; }
- ListElement{ longitude: "97"; latitude: "99"; height: "65"; }
- ListElement{ longitude: "98"; latitude: "0"; height: "93"; }
- ListElement{ longitude: "98"; latitude: "1"; height: "90"; }
- ListElement{ longitude: "98"; latitude: "2"; height: "85"; }
- ListElement{ longitude: "98"; latitude: "3"; height: "78"; }
- ListElement{ longitude: "98"; latitude: "4"; height: "74"; }
- ListElement{ longitude: "98"; latitude: "5"; height: "71"; }
- ListElement{ longitude: "98"; latitude: "6"; height: "80"; }
- ListElement{ longitude: "98"; latitude: "7"; height: "78"; }
- ListElement{ longitude: "98"; latitude: "8"; height: "83"; }
- ListElement{ longitude: "98"; latitude: "9"; height: "85"; }
- ListElement{ longitude: "98"; latitude: "10"; height: "81"; }
- ListElement{ longitude: "98"; latitude: "11"; height: "82"; }
- ListElement{ longitude: "98"; latitude: "12"; height: "87"; }
- ListElement{ longitude: "98"; latitude: "13"; height: "90"; }
- ListElement{ longitude: "98"; latitude: "14"; height: "91"; }
- ListElement{ longitude: "98"; latitude: "15"; height: "86"; }
- ListElement{ longitude: "98"; latitude: "16"; height: "88"; }
- ListElement{ longitude: "98"; latitude: "17"; height: "91"; }
- ListElement{ longitude: "98"; latitude: "18"; height: "94"; }
- ListElement{ longitude: "98"; latitude: "19"; height: "97"; }
- ListElement{ longitude: "98"; latitude: "20"; height: "108"; }
- ListElement{ longitude: "98"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "22"; height: "108"; }
- ListElement{ longitude: "98"; latitude: "23"; height: "108"; }
- ListElement{ longitude: "98"; latitude: "24"; height: "107"; }
- ListElement{ longitude: "98"; latitude: "25"; height: "104"; }
- ListElement{ longitude: "98"; latitude: "26"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "98"; latitude: "29"; height: "106"; }
- ListElement{ longitude: "98"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "33"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "34"; height: "117"; }
- ListElement{ longitude: "98"; latitude: "35"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "98"; latitude: "37"; height: "105"; }
- ListElement{ longitude: "98"; latitude: "38"; height: "106"; }
- ListElement{ longitude: "98"; latitude: "39"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "40"; height: "112"; }
- ListElement{ longitude: "98"; latitude: "41"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "42"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "43"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "44"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "45"; height: "112"; }
- ListElement{ longitude: "98"; latitude: "46"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "98"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "98"; latitude: "49"; height: "125"; }
- ListElement{ longitude: "98"; latitude: "50"; height: "125"; }
- ListElement{ longitude: "98"; latitude: "51"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "52"; height: "126"; }
- ListElement{ longitude: "98"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "54"; height: "126"; }
- ListElement{ longitude: "98"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "98"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "98"; latitude: "57"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "58"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "61"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "98"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "98"; latitude: "64"; height: "138"; }
- ListElement{ longitude: "98"; latitude: "65"; height: "140"; }
- ListElement{ longitude: "98"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "98"; latitude: "67"; height: "136"; }
- ListElement{ longitude: "98"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "98"; latitude: "69"; height: "133"; }
- ListElement{ longitude: "98"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "98"; latitude: "71"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "98"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "74"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "75"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "76"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "78"; height: "117"; }
- ListElement{ longitude: "98"; latitude: "79"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "80"; height: "113"; }
- ListElement{ longitude: "98"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "83"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "98"; latitude: "85"; height: "125"; }
- ListElement{ longitude: "98"; latitude: "86"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "98"; latitude: "88"; height: "89"; }
- ListElement{ longitude: "98"; latitude: "89"; height: "81"; }
- ListElement{ longitude: "98"; latitude: "90"; height: "79"; }
- ListElement{ longitude: "98"; latitude: "91"; height: "84"; }
- ListElement{ longitude: "98"; latitude: "92"; height: "86"; }
- ListElement{ longitude: "98"; latitude: "93"; height: "79"; }
- ListElement{ longitude: "98"; latitude: "94"; height: "69"; }
- ListElement{ longitude: "98"; latitude: "95"; height: "66"; }
- ListElement{ longitude: "98"; latitude: "96"; height: "73"; }
- ListElement{ longitude: "98"; latitude: "97"; height: "80"; }
- ListElement{ longitude: "98"; latitude: "98"; height: "71"; }
- ListElement{ longitude: "98"; latitude: "99"; height: "64"; }
- ListElement{ longitude: "99"; latitude: "0"; height: "93"; }
- ListElement{ longitude: "99"; latitude: "1"; height: "90"; }
- ListElement{ longitude: "99"; latitude: "2"; height: "86"; }
- ListElement{ longitude: "99"; latitude: "3"; height: "80"; }
- ListElement{ longitude: "99"; latitude: "4"; height: "74"; }
- ListElement{ longitude: "99"; latitude: "5"; height: "74"; }
- ListElement{ longitude: "99"; latitude: "6"; height: "80"; }
- ListElement{ longitude: "99"; latitude: "7"; height: "85"; }
- ListElement{ longitude: "99"; latitude: "8"; height: "85"; }
- ListElement{ longitude: "99"; latitude: "9"; height: "84"; }
- ListElement{ longitude: "99"; latitude: "10"; height: "83"; }
- ListElement{ longitude: "99"; latitude: "11"; height: "79"; }
- ListElement{ longitude: "99"; latitude: "12"; height: "77"; }
- ListElement{ longitude: "99"; latitude: "13"; height: "80"; }
- ListElement{ longitude: "99"; latitude: "14"; height: "86"; }
- ListElement{ longitude: "99"; latitude: "15"; height: "86"; }
- ListElement{ longitude: "99"; latitude: "16"; height: "84"; }
- ListElement{ longitude: "99"; latitude: "17"; height: "85"; }
- ListElement{ longitude: "99"; latitude: "18"; height: "90"; }
- ListElement{ longitude: "99"; latitude: "19"; height: "95"; }
- ListElement{ longitude: "99"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "99"; latitude: "21"; height: "101"; }
- ListElement{ longitude: "99"; latitude: "22"; height: "102"; }
- ListElement{ longitude: "99"; latitude: "23"; height: "103"; }
- ListElement{ longitude: "99"; latitude: "24"; height: "106"; }
- ListElement{ longitude: "99"; latitude: "25"; height: "110"; }
- ListElement{ longitude: "99"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "28"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "30"; height: "112"; }
- ListElement{ longitude: "99"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "32"; height: "117"; }
- ListElement{ longitude: "99"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "99"; latitude: "34"; height: "117"; }
- ListElement{ longitude: "99"; latitude: "35"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "36"; height: "112"; }
- ListElement{ longitude: "99"; latitude: "37"; height: "110"; }
- ListElement{ longitude: "99"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "99"; latitude: "39"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "99"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "44"; height: "118"; }
- ListElement{ longitude: "99"; latitude: "45"; height: "117"; }
- ListElement{ longitude: "99"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "99"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "99"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "99"; latitude: "49"; height: "125"; }
- ListElement{ longitude: "99"; latitude: "50"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "52"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "59"; height: "116"; }
- ListElement{ longitude: "99"; latitude: "60"; height: "112"; }
- ListElement{ longitude: "99"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "99"; latitude: "64"; height: "132"; }
- ListElement{ longitude: "99"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "99"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "99"; latitude: "67"; height: "128"; }
- ListElement{ longitude: "99"; latitude: "68"; height: "126"; }
- ListElement{ longitude: "99"; latitude: "69"; height: "127"; }
- ListElement{ longitude: "99"; latitude: "70"; height: "126"; }
- ListElement{ longitude: "99"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "72"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "73"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "74"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "77"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "78"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "79"; height: "119"; }
- ListElement{ longitude: "99"; latitude: "80"; height: "116"; }
- ListElement{ longitude: "99"; latitude: "81"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "82"; height: "111"; }
- ListElement{ longitude: "99"; latitude: "83"; height: "107"; }
- ListElement{ longitude: "99"; latitude: "84"; height: "109"; }
- ListElement{ longitude: "99"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "99"; latitude: "86"; height: "98"; }
- ListElement{ longitude: "99"; latitude: "87"; height: "87"; }
- ListElement{ longitude: "99"; latitude: "88"; height: "75"; }
- ListElement{ longitude: "99"; latitude: "89"; height: "68"; }
- ListElement{ longitude: "99"; latitude: "90"; height: "70"; }
- ListElement{ longitude: "99"; latitude: "91"; height: "81"; }
- ListElement{ longitude: "99"; latitude: "92"; height: "88"; }
- ListElement{ longitude: "99"; latitude: "93"; height: "89"; }
- ListElement{ longitude: "99"; latitude: "94"; height: "87"; }
- ListElement{ longitude: "99"; latitude: "95"; height: "87"; }
- ListElement{ longitude: "99"; latitude: "96"; height: "88"; }
- ListElement{ longitude: "99"; latitude: "97"; height: "84"; }
- ListElement{ longitude: "99"; latitude: "98"; height: "75"; }
- ListElement{ longitude: "99"; latitude: "99"; height: "67"; }
- }
-}
diff --git a/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml b/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml
deleted file mode 100644
index 15994568..00000000
--- a/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-import QtQuick
-import QtQuick.Controls
-import QtDataVisualization
-
-Rectangle {
- id: mainview
- width: 1024
- height: 768
- color: surfacePlot.theme.windowColor
-
- property bool portraitMode: width < height
-
- Data {
- id: surfaceData
- }
-
- Item {
- id: surfaceView
- anchors.top: buttons.bottom
- anchors.bottom: mainview.bottom
- anchors.left: mainview.left
- anchors.right: mainview.right
-
- //! [0]
- ColorGradient {
- id: surfaceGradient
- ColorGradientStop { position: 0.0; color: "darkslategray" }
- ColorGradientStop { id: middleGradient; position: 0.25; color: "peru" }
- ColorGradientStop { position: 1.0; color: "red" }
- }
- //! [0]
-
- Surface3D {
- id: surfacePlot
- width: surfaceView.width
- height: surfaceView.height
- //! [7]
- theme: Theme3D {
- type: Theme3D.ThemeStoneMoss
- font.family: "STCaiyun"
- font.pointSize: 35
- colorStyle: Theme3D.ColorStyleRangeGradient
- baseGradients: [surfaceGradient]
- }
- //! [7]
- shadowQuality: AbstractGraph3D.ShadowQualityMedium
- selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
- scene.activeCamera.zoomLevel: 75
- axisY.min: 0.0
- axisY.max: 500.0
- axisX.segmentCount: 10
- axisX.subSegmentCount: 2
- axisX.labelFormat: "%i"
- axisZ.segmentCount: 10
- axisZ.subSegmentCount: 2
- axisZ.labelFormat: "%i"
- axisY.segmentCount: 5
- axisY.subSegmentCount: 2
- axisY.labelFormat: "%i"
- axisY.title: "Height"
- axisX.title: "Latitude"
- axisZ.title: "Longitude"
-
- //! [5]
- Surface3DSeries {
- id: surfaceSeries
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
-
- ItemModelSurfaceDataProxy {
- //! [5]
- //! [6]
- itemModel: surfaceData.model
- rowRole: "longitude"
- columnRole: "latitude"
- yPosRole: "height"
- }
- //! [6]
- onDrawModeChanged: mainview.checkState()
- }
- //! [4]
- Surface3DSeries {
- id: heightSeries
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- visible: false
-
- HeightMapSurfaceDataProxy {
- heightMapFile: ":/heightmap.png"
- // We don't want the default data values set by heightmap proxy.
- minZValue: 30
- maxZValue: 60
- minXValue: 67
- maxXValue: 97
- }
-
- onDrawModeChanged: mainview.checkState()
- }
- //! [4]
- }
- }
-
- Item {
- id: buttons
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.margins: 10
- height: mainview.portraitMode ? surfaceGridToggle.implicitHeight * 4 + 15
- : surfaceGridToggle.implicitHeight * 3 + 10
- opacity: 0.5
-
- Button {
- id: surfaceGridToggle
- anchors.margins: 5
- anchors.left: parent.left
- anchors.top: parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 40) / 3
- text: "Show Surface\nGrid"
- //! [1]
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
- heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
- }
- }
- //! [1]
- }
-
- Button {
- id: surfaceGridColor
- anchors.margins: 5
- anchors.left: surfaceGridToggle.right
- anchors.top: parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 40) / 3
- text: "Red surface\ngrid color"
- onClicked: {
- if (Qt.colorEqual(surfaceSeries.wireframeColor, "#000000")
- && Qt.colorEqual(heightSeries.wireframeColor, "#000000")) {
- surfaceSeries.wireframeColor = "red";
- heightSeries.wireframeColor = "red";
- text = "Black surface\ngrid color";
- }
- else {
- surfaceSeries.wireframeColor = "black";
- heightSeries.wireframeColor = "black";
- text = "Red surface\ngrid color";
- }
- }
- }
-
- Button {
- id: surfaceToggle
- anchors.margins: 5
- anchors.left: mainview.portraitMode ? parent.left : surfaceGridColor.right
- anchors.top: mainview.portraitMode ? surfaceGridColor.bottom : parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 40) / 3
- text: "Hide\nSurface"
- //! [8]
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawSurface;
- heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawSurface;
- heightSeries.drawMode |= Surface3DSeries.DrawSurface;
- }
- }
- //! [8]
- }
-
- Button {
- id: flatShadingToggle
- anchors.margins: 5
- anchors.left: mainview.portraitMode ? surfaceToggle.right : parent.left
- anchors.top: mainview.portraitMode ? surfaceGridColor.bottom : surfaceToggle.bottom
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 40) / 3
- text: surfaceSeries.flatShadingSupported ? "Show\nFlat" : "Flat not\nsupported"
- enabled: surfaceSeries.flatShadingSupported
- //! [2]
- onClicked: {
- if (surfaceSeries.flatShadingEnabled === true) {
- surfaceSeries.flatShadingEnabled = false;
- heightSeries.flatShadingEnabled = false;
- text = "Show\nFlat"
- } else {
- surfaceSeries.flatShadingEnabled = true;
- heightSeries.flatShadingEnabled = true;
- text = "Show\nSmooth"
- }
- }
- //! [2]
- }
-
- Button {
- id: backgroundToggle
- anchors.margins: 5
- anchors.left: mainview.portraitMode ? parent.left : flatShadingToggle.right
- anchors.top: mainview.portraitMode ? flatShadingToggle.bottom : surfaceToggle.bottom
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 40) / 3
- text: "Hide\nBackground"
- onClicked: {
- if (surfacePlot.theme.backgroundEnabled === true) {
- surfacePlot.theme.backgroundEnabled = false;
- text = "Show\nBackground";
- } else {
- surfacePlot.theme.backgroundEnabled = true;
- text = "Hide\nBackground";
- }
- }
- }
-
- Button {
- id: gridToggle
- anchors.margins: 5
- anchors.left: backgroundToggle.right
- anchors.top: mainview.portraitMode ? flatShadingToggle.bottom : surfaceToggle.bottom
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 40) / 3
- text: "Hide\nGrid"
- onClicked: {
- if (surfacePlot.theme.gridEnabled === true) {
- surfacePlot.theme.gridEnabled = false;
- text = "Show\nGrid";
- } else {
- surfacePlot.theme.gridEnabled = true;
- text = "Hide\nGrid";
- }
- }
- }
-
- Button {
- id: seriesToggle
- anchors.margins: 5
- anchors.left: parent.left
- anchors.top: gridToggle.bottom
- width: mainview.width - 30
- text: "Switch to Height Map Series"
- //! [3]
- onClicked: {
- if (surfaceSeries.visible === false) {
- surfacePlot.axisY.max = 500.0;
- surfaceSeries.visible = true;
- heightSeries.visible = false;
- middleGradient.position = 0.25;
- text = "Switch to Height Map Series";
- } else {
- surfacePlot.axisY.max = 250.0;
- surfaceSeries.visible = false;
- heightSeries.visible = true;
- middleGradient.position = 0.50;
- text = "Switch to Item Model Series";
- }
- }
- //! [3]
- }
- }
-
- function checkState() {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface)
- surfaceToggle.text = "Hide\nSurface";
- else
- surfaceToggle.text = "Show\nSurface";
-
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe)
- surfaceGridToggle.text = "Hide Surface\nGrid";
- else
- surfaceGridToggle.text = "Show Surface\nGrid";
- }
-}
diff --git a/examples/datavisualization/qmlsurface/qmlsurface.pro b/examples/datavisualization/qmlsurface/qmlsurface.pro
deleted file mode 100644
index 401d59a7..00000000
--- a/examples/datavisualization/qmlsurface/qmlsurface.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlsurface.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlsurface/*
diff --git a/examples/datavisualization/qmlsurface/qmlsurface.qrc b/examples/datavisualization/qmlsurface/qmlsurface.qrc
deleted file mode 100644
index e32f1534..00000000
--- a/examples/datavisualization/qmlsurface/qmlsurface.qrc
+++ /dev/null
@@ -1,9 +0,0 @@
-<RCC>
- <qresource prefix="/qml">
- <file>qml/qmlsurface/main.qml</file>
- <file>qml/qmlsurface/Data.qml</file>
- </qresource>
- <qresource prefix="/heightmaps">
- <file alias="image">heightmap.png</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qml3doscilloscope/CMakeLists.txt b/examples/datavisualization/qmlsurfacegallery/CMakeLists.txt
index 3db581f6..ab4dd77d 100644
--- a/examples/datavisualization/qml3doscilloscope/CMakeLists.txt
+++ b/examples/datavisualization/qmlsurfacegallery/CMakeLists.txt
@@ -1,8 +1,8 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
-project(qml3doscilloscope LANGUAGES CXX)
+project(qmlsurfacegallery LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -22,14 +22,14 @@ find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
find_package(Qt6 COMPONENTS DataVisualization)
-qt_add_executable(qml3doscilloscope
+qt_add_executable(qmlsurfacegallery
main.cpp
)
-set_target_properties(qml3doscilloscope PROPERTIES
+set_target_properties(qmlsurfacegallery PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(qml3doscilloscope PUBLIC
+target_link_libraries(qmlsurfacegallery PUBLIC
Qt::Core
Qt::Gui
Qt::Qml
@@ -37,17 +37,23 @@ target_link_libraries(qml3doscilloscope PUBLIC
Qt::DataVisualization
)
-qt6_add_qml_module(qml3doscilloscope
- URI DataSource
+qt6_add_qml_module(qmlsurfacegallery
+ URI SurfaceGallery
VERSION 1.0
NO_RESOURCE_TARGET_PATH
SOURCES
datasource.cpp datasource.h
QML_FILES
- qml/qml3doscilloscope/main.qml
+ qml/qmlsurfacegallery/main.qml
+ qml/qmlsurfacegallery/SpectrogramData.qml
+ qml/qmlsurfacegallery/SurfaceHeightMap.qml
+ qml/qmlsurfacegallery/SurfaceOscilloscope.qml
+ qml/qmlsurfacegallery/SurfaceSpectrogram.qml
+ RESOURCES
+ qml/qmlsurfacegallery/heightmap.png
)
-install(TARGETS qml3doscilloscope
+install(TARGETS qmlsurfacegallery
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
diff --git a/examples/datavisualization/qml3doscilloscope/datasource.cpp b/examples/datavisualization/qmlsurfacegallery/datasource.cpp
index db6b7785..7aeea178 100644
--- a/examples/datavisualization/qml3doscilloscope/datasource.cpp
+++ b/examples/datavisualization/qmlsurfacegallery/datasource.cpp
@@ -1,22 +1,18 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "datasource.h"
#include <QtCore/qmath.h>
#include <QtCore/qrandom.h>
-//! [3]
-Q_DECLARE_METATYPE(QSurface3DSeries *)
-//! [3]
+#include <algorithm>
DataSource::DataSource(QObject *parent) :
- QObject(parent),
- m_index(-1),
- m_resetArray(nullptr)
+ QObject(parent)
{
- //! [4]
+ //! [3]
qRegisterMetaType<QSurface3DSeries *>();
- //! [4]
+ //! [3]
}
DataSource::~DataSource()
@@ -24,21 +20,22 @@ DataSource::~DataSource()
clearData();
}
-//! [0]
void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
- float xMin, float xMax, float yMin, float yMax,
+ float xMin, float xMax,
+ float yMin, float yMax,
float zMin, float zMax)
{
if (!cacheCount || !rowCount || !columnCount)
return;
clearData();
+
// Re-create the cache array
m_data.resize(cacheCount);
- for (int i(0); i < cacheCount; i++) {
+ for (int i = 0; i < cacheCount; ++i) {
QSurfaceDataArray &array = m_data[i];
array.reserve(rowCount);
- for (int j(0); j < rowCount; j++)
+ for (int j = 0; j < rowCount; ++j)
array.append(new QSurfaceDataRow(columnCount));
}
@@ -48,12 +45,14 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
int cacheIndexStep = columnCount / cacheCount;
float cacheStep = float(cacheIndexStep) * xRange / float(columnCount);
+ //! [0]
// Populate caches
- for (int i(0); i < cacheCount; i++) {
+ auto *generator = QRandomGenerator::global();
+ for (int i = 0; i < cacheCount; ++i) {
QSurfaceDataArray &cache = m_data[i];
float cacheXAdjustment = cacheStep * i;
float cacheIndexAdjustment = cacheIndexStep * i;
- for (int j(0); j < rowCount; j++) {
+ for (int j = 0; j < rowCount; ++j) {
QSurfaceDataRow &row = *(cache[j]);
float rowMod = (float(j)) / float(rowCount);
float yRangeMod = yRange * rowMod;
@@ -61,14 +60,14 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
float z = zRangeMod + zMin;
qreal rowColWaveAngleMul = M_PI * M_PI * rowMod;
float rowColWaveMul = yRangeMod * 0.2f;
- for (int k(0); k < columnCount; k++) {
+ for (int k = 0; k < columnCount; k++) {
float colMod = (float(k)) / float(columnCount);
float xRangeMod = xRange * colMod;
float x = xRangeMod + xMin + cacheXAdjustment;
float colWave = float(qSin((2.0 * M_PI * colMod) - (1.0 / 2.0 * M_PI)) + 1.0);
float y = (colWave * ((float(qSin(rowColWaveAngleMul * colMod) + 1.0))))
* rowColWaveMul
- + QRandomGenerator::global()->bounded(0.15f) * yRangeMod;
+ + generator->bounded(0.15f) * yRangeMod;
int index = k + cacheIndexAdjustment;
if (index >= columnCount) {
@@ -80,19 +79,18 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
}
}
}
+ //! [0]
}
-//! [0]
-//! [1]
void DataSource::update(QSurface3DSeries *series)
{
- if (series && m_data.size()) {
+ if (series && !m_data.isEmpty()) {
+ //! [1]
// Each iteration uses data from a different cached array
- m_index++;
- if (m_index > m_data.count() - 1)
+ if (++m_index >= m_data.size())
m_index = 0;
- QSurfaceDataArray array = m_data.at(m_index);
+ const QSurfaceDataArray &array = m_data.at(m_index);
int newRowCount = array.size();
int newColumnCount = array.at(0)->size();
@@ -102,30 +100,26 @@ void DataSource::update(QSurface3DSeries *series)
|| series->dataProxy()->columnCount() != newColumnCount) {
m_resetArray = new QSurfaceDataArray();
m_resetArray->reserve(newRowCount);
- for (int i(0); i < newRowCount; i++)
+ for (int i = 0; i < newRowCount; ++i)
m_resetArray->append(new QSurfaceDataRow(newColumnCount));
}
// Copy items from our cache to the reset array
- for (int i(0); i < newRowCount; i++) {
+ for (int i = 0; i < newRowCount; ++i) {
const QSurfaceDataRow &sourceRow = *(array.at(i));
QSurfaceDataRow &row = *(*m_resetArray)[i];
- for (int j(0); j < newColumnCount; j++)
- row[j].setPosition(sourceRow.at(j).position());
+ std::copy(sourceRow.cbegin(), sourceRow.cend(), row.begin());
}
// Notify the proxy that data has changed
series->dataProxy()->resetArray(m_resetArray);
+ //! [1]
}
}
-//! [1]
void DataSource::clearData()
{
- for (int i(0); i < m_data.size(); i++) {
- QSurfaceDataArray &array = m_data[i];
- for (int j(0); j < array.size(); j++)
- delete array[j];
- array.clear();
- }
+ for (auto &array : std::as_const(m_data))
+ qDeleteAll(array);
+ m_data.clear();
}
diff --git a/examples/datavisualization/qml3doscilloscope/datasource.h b/examples/datavisualization/qmlsurfacegallery/datasource.h
index 1544b66b..bac5eeb2 100644
--- a/examples/datavisualization/qml3doscilloscope/datasource.h
+++ b/examples/datavisualization/qmlsurfacegallery/datasource.h
@@ -1,35 +1,38 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef DATASOURCE_H
#define DATASOURCE_H
-#include <QtDataVisualization/QSurface3DSeries>
+#include <QtDataVisualization/qsurface3dseries.h>
#include <QtQml/qqmlregistration.h>
-//! [1]
+//! [0]
+//! [2]
class DataSource : public QObject
{
Q_OBJECT
+ //! [0]
QML_ELEMENT
-//! [1]
+ //! [2]
public:
- explicit DataSource(QObject *parent = 0);
+ explicit DataSource(QObject *parent = nullptr);
virtual ~DataSource();
- //! [0]
+ //! [1]
Q_INVOKABLE void generateData(int cacheCount, int rowCount, int columnCount,
- float xMin, float xMax, float yMin, float yMax,
+ float xMin, float xMax,
+ float yMin, float yMax,
float zMin, float zMax);
Q_INVOKABLE void update(QSurface3DSeries *series);
- //! [0]
+ //! [1]
private:
void clearData();
QList<QSurfaceDataArray> m_data;
- int m_index;
- QSurfaceDataArray *m_resetArray;
+ int m_index = -1;
+ QSurfaceDataArray *m_resetArray = nullptr;
};
#endif
diff --git a/examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.png b/examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.png
new file mode 100644
index 00000000..c7023160
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.png
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc b/examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc
new file mode 100644
index 00000000..3b33177c
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc
@@ -0,0 +1,238 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example qmlsurfacegallery
+ \meta tags {DataVisualization, Surface3D, Dynamic Data, Surface Graph, Height Map, Polar Graph}
+ \title Surface Graph Gallery
+ \ingroup qtdatavisualization_qmlexamples
+ \brief Gallery with three different ways to use a Surface3D graph.
+
+ \e {Surface Graph Gallery} demonstrates three different custom features with Surface3D graphs.
+ The features have their own tabs in the application.
+
+ The following sections concentrate on those features only and skip explaining the basic
+ functionality - for more detailed QML example documentation, see \l{Simple Scatter Graph}.
+
+ \image qmlsurfacegallery-example.png
+
+ \include examples-run.qdocinc
+
+ \section1 Height Map
+
+ In the \uicontrol {Height Map} tab, generate a surface graph from height data. The data used is
+ a height map of Mount Ruapehu and Mount Ngauruhoe in New Zealand.
+
+ \section2 Adding Data to the Graph
+
+ The data is set using HeightMapSurfaceDataProxy, which reads height information from a height
+ map image. The proxy itself is contained in a Surface3DSeries. Inside the
+ HeightMapSurfaceDataProxy the \c heightMapFile property specifies the image file containing the
+ height data. The value properties in the proxy define the minimum and maximum values for surface
+ area width, depth, and height. The \c z and \c x values are in latitude and longitude,
+ approximately at the real-world position, and the \c y is in meters.
+ \note The aspect ratio of the graph is not set to real-life scale, but the height is exaggerated
+ instead.
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 0
+
+ \section2 Displaying the Data
+
+ In \c main.qml, set up the Surface3D element to display the data.
+
+ First, define the custom gradient to be used for the surface. Set the colors from position
+ 0.0 to 1.0 with ColorGradient, with two extra stops to make the graph more vivid:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 1
+
+ Set this element into the \c baseGradients property in the \c theme used in Surface3D:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 2
+
+ Use the buttons to control other Surface3D features.
+
+ The first button toggles on and off the surface grid. The draw mode cannot
+ be cleared completely, so unless the surface itself is visible, the surface grid cannot be
+ hidden:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 3
+
+ The second one sets the surface grid color:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 4
+
+ The third one toggles the surface on or off in the surface draw mode. The draw mode cannot
+ be cleared completely, so unless the surface grid is visible, the surface itself cannot be
+ hidden:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 5
+
+ The fourth sets the for shading mode. If you are running the example on OpenGL ES system, flat
+ shading is not available:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 6
+
+ The remaining buttons control the graph background features.
+
+ \section1 Spectrogram
+
+ In the \uicontrol {Spectrogram} tab, display polar and cartesian spectrograms and use
+ orthographic projection to show them in 2D.
+
+ A spectrogram is a surface graph with a range gradient used to emphasize the different
+ values. Typically, spectrograms are shown with two-dimensional surfaces, which is simulated
+ with a top-down orthographic view of the graph. To enforce the 2D effect, disable the
+ graph rotation via mouse or touch when in the orthographic mode.
+
+ \section2 Creating a Spectrogram
+
+ To create a 2D spectrogram, define a Surface3D item with the data given in the Surface3DSeries
+ with an ItemModelSurfaceDataProxy:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 0
+
+ The key properties for enabling the 2D effect are
+ \l{AbstractGraph3D::orthoProjection}{orthoProjection} and
+ \l{Camera3D::cameraPreset}{scene.activeCamera.cameraPreset}. Remove the perspective by
+ enabling orthographic projection for the graph, and the Y-dimension by viewing the graph
+ directly from above:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 1
+
+ Since this viewpoint causes the horizontal axis grid to be mostly obscured by the surface,
+ flip the horizontal grid to be drawn on top of the graph:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 2
+
+ \section2 Polar Spectrogram
+
+ Depending on the data, it is sometimes more natural to use a polar graph instead of a cartesian
+ one. This is supported via the \l{AbstractGraph3D::polar}{polar} property.
+
+ Add a button to switch between polar and cartesian modes:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 3
+
+ In the polar mode, X-axis is converted into the angular polar axis, and Z-axis is converted into
+ a radial polar axis. The surface points are recalculated according to the new axes.
+
+ The radial axis labels are drawn outside the graph by default. To draw them right next to the 0
+ degree angular axis inside the graph, define only a small offset for them:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 4
+
+ To enforce the 2D effect, disable graph rotation in orthographic mode by overriding the default
+ input handler with a custom one, which automatically toggles the
+ \l{InputHandler3D::rotationEnabled}{rotationEnabled} property based on the projection mode:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 5
+
+ \section1 Oscilloscope
+
+ In the \uicontrol {Oscilloscope} tab, combine C++ and QML in an application, and show data that
+ dynamically changes.
+
+ \section2 Data Source in C++
+
+ The item model based proxies are good for simple or static graphs, but use basic proxies to
+ achieve the best performance when displaying data changing in realtime.
+ These are not supported in QML, as the data items they store do not inherit \l{QObject} and
+ cannot therefore be directly manipulated from QML code.
+ To overcome this limitation, implement a simple \c DataSource class in C++ to populate the
+ data proxy of the series.
+
+ Create a \c DataSource class to provide two methods that can be invoked from QML:
+
+ \snippet qmlsurfacegallery/datasource.h 0
+ \dots 4
+ \snippet qmlsurfacegallery/datasource.h 1
+
+ The first method, \c generateData(), creates a cache of simulated oscilloscope data to display.
+ The data is cached in a format that QSurfaceDataProxy accepts:
+
+ \snippet qmlsurfacegallery/datasource.cpp 0
+
+ The second method, \c update(), copies one set of the cached data into another array, which is
+ set to the data proxy of the series by calling QSurfaceDataProxy::resetArray().
+ To minimize overhead, reuse the same array if the array dimensions have not changed:
+
+ \snippet qmlsurfacegallery/datasource.cpp 1
+
+ Even though we are operating on the array pointer previously set to the proxy,
+ QSurfaceDataProxy::resetArray() still needs to be called after changing the data in it to prompt
+ the graph to render the data.
+
+ To be able to access the \c DataSource methods from QML, expose the data source by
+ making the DataSource a QML_ELEMENT:
+
+ \snippet qmlsurfacegallery/datasource.h 2
+
+ Further, declare it as a QML module in the CMakeLists.txt:
+
+ \badcode
+ qt6_add_qml_module(qmlsurfacegallery
+ URI SurfaceGallery
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ SOURCES
+ datasource.cpp datasource.h
+ ...
+ )
+ \endcode
+
+ To use QSurface3DSeries pointers as parameters for the \c DataSource class methods on all
+ environments and builds, make sure the meta type is registered:
+
+ \snippet qmlsurfacegallery/datasource.cpp 3
+
+ \section2 QML Application
+
+ To use the \c{DataSource}, import the QML module and create an instance of \c DataSource to be
+ used:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 0
+ \dots 0
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 1
+
+ Define a Surface3D graph and give it a Surface3DSeries:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 2
+
+ Don't specify a proxy for the Surface3DSeries that you attach to the graph. This makes the
+ series utilize the default QSurfaceDataProxy.
+
+ Hide the item label with \l{Abstract3DSeries::itemLabelVisible}{itemLabelVisible}. With dynamic,
+ fast-changing data, a floating selection label would be distracting and difficult to read.
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 3
+
+ You can display the selected item information in a \c Text element instead of the default
+ floating label above the selection pointer:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 4
+
+ Initialize the \c DataSource cache when the graph is complete by calling a helper function
+ \c generateData(), which calls the method with the same name in \c DataSource:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 5
+ \dots 0
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 6
+
+ To trigger the updates in data, define a \c{Timer}, which calls the \c update() method in
+ \c DataSource at requested intervals:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 7
+
+ \section2 Enabling Direct Rendering
+
+ Since this application potentially deals with a lot of rapidly changing data, it uses direct
+ rendering mode for performance. To enable antialiasing in this mode, change the surface format
+ of the application window. The default format used by QQuickView doesn't support antialiasing.
+ Use the utility function provided to change the surface format in \c main.cpp:
+
+ \snippet qmlsurfacegallery/main.cpp 0
+ \dots 0
+ \snippet qmlsurfacegallery/main.cpp 1
+
+ \section1 Example Contents
+*/
diff --git a/examples/datavisualization/qml3doscilloscope/main.cpp b/examples/datavisualization/qmlsurfacegallery/main.cpp
index a6bd20f3..cbd831b6 100644
--- a/examples/datavisualization/qml3doscilloscope/main.cpp
+++ b/examples/datavisualization/qmlsurfacegallery/main.cpp
@@ -1,42 +1,50 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-//! [2]
+//! [0]
#include <QtDataVisualization/qutils.h>
-//! [2]
+//! [0]
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQml/QQmlContext>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
+#include <QtGui/qguiapplication.h>
+#include <QtQuick/qquickview.h>
+#include <QtQml/qqmlengine.h>
+
+#ifdef QMAKE_BUILD
+#include "datasource.h"
+#endif
+
+using namespace Qt::StringLiterals;
int main(int argc, char *argv[])
{
qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
+#ifdef QMAKE_BUILD
+ qmlRegisterType<DataSource>("SurfaceGallery", 1, 0, "DataSource");
+#endif
+
QQuickView viewer;
- // Enable antialiasing in direct rendering mode
//! [1]
+ // Enable antialiasing in direct rendering mode
viewer.setFormat(qDefaultSurfaceFormat(true));
//! [1]
// The following are needed to make examples run without having to install the module
// in desktop environments.
#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
+ QString extraImportPath(u"%1/../../../../%2"_s);
#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
+ QString extraImportPath(u"%1/../../../%2"_s);
#endif
viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
+ u"qml"_s));
QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
- viewer.setTitle(QStringLiteral("Oscilloscope example"));
+ viewer.setTitle(u"Surface Graph Gallery"_s);
- viewer.setSource(QUrl("qrc:/qml/qml3doscilloscope/main.qml"));
+ viewer.setSource(QUrl(u"qrc:/qml/qmlsurfacegallery/main.qml"_s));
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
viewer.show();
diff --git a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/Data.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SpectrogramData.qml
index d6464e38..6e1b5722 100644
--- a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/Data.qml
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SpectrogramData.qml
@@ -1,5 +1,5 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml
new file mode 100644
index 00000000..6f65e17c
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml
@@ -0,0 +1,227 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+
+Rectangle {
+ id: heightMapView
+ color: surfacePlot.theme.windowColor
+
+ required property bool portraitMode
+
+ property real buttonWidth: heightMapView.portraitMode ? (heightMapView.width - 35) / 2
+ : (heightMapView.width - 40) / 3
+
+ Item {
+ id: surfaceView
+ anchors.top: buttons.bottom
+ anchors.bottom: heightMapView.bottom
+ anchors.left: heightMapView.left
+ anchors.right: heightMapView.right
+
+ //! [1]
+ ColorGradient {
+ id: surfaceGradient
+ ColorGradientStop { position: 0.0; color: "darkgreen"}
+ ColorGradientStop { position: 0.15; color: "darkslategray" }
+ ColorGradientStop { position: 0.7; color: "peru" }
+ ColorGradientStop { position: 1.0; color: "white" }
+ }
+ //! [1]
+
+ Surface3D {
+ id: surfacePlot
+ width: surfaceView.width
+ height: surfaceView.height
+ aspectRatio: 3.0
+ //! [2]
+ theme: Theme3D {
+ type: Theme3D.ThemeStoneMoss
+ font.family: "STCaiyun"
+ font.pointSize: 35
+ colorStyle: Theme3D.ColorStyleRangeGradient
+ baseGradients: [surfaceGradient] // Use the custom gradient
+ }
+ //! [2]
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
+ axisX.segmentCount: 3
+ axisX.subSegmentCount: 3
+ axisX.labelFormat: "%i"
+ axisZ.segmentCount: 3
+ axisZ.subSegmentCount: 3
+ axisZ.labelFormat: "%i"
+ axisY.segmentCount: 2
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%i"
+ axisY.title: "Height (m)"
+ axisX.title: "Longitude 175.x\"E"
+ axisZ.title: "Latitude -39.x\"N"
+ axisY.titleVisible: true
+ axisX.titleVisible: true
+ axisZ.titleVisible: true
+
+ //! [0]
+ Surface3DSeries {
+ id: heightSeries
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: "://qml/qmlsurfacegallery/heightmap.png"
+ // We don't want the default data values set by heightmap proxy, but use
+ // actual coordinate and height values instead
+ autoScaleY: true
+ minYValue: 740
+ maxYValue: 2787
+ minZValue: -374 // ~ -39.374411"N
+ maxZValue: -116 // ~ -39.115971"N
+ minXValue: 472 // ~ 175.471767"E
+ maxXValue: 781 // ~ 175.780758"E
+ }
+
+ onDrawModeChanged: heightMapView.checkState()
+ }
+ //! [0]
+ }
+ }
+
+ Item {
+ id: buttons
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: 10
+ height: heightMapView.portraitMode ? surfaceGridToggle.implicitHeight * 3 + 20
+ : surfaceGridToggle.implicitHeight * 2 + 15
+ opacity: 0.5
+
+ Button {
+ id: surfaceGridToggle
+ anchors.margins: 5
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: heightMapView.buttonWidth // Calculated elsewhere based on screen orientation
+ text: "Show Surface\nGrid"
+ //! [3]
+ onClicked: {
+ if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
+ heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ else
+ heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ }
+ //! [3]
+ }
+
+ Button {
+ id: surfaceGridColor
+ anchors.margins: 5
+ anchors.left: surfaceGridToggle.right
+ anchors.top: parent.top
+ width: heightMapView.buttonWidth
+ text: "Red surface\ngrid color"
+ //! [4]
+ onClicked: {
+ if (Qt.colorEqual(heightSeries.wireframeColor, "#000000")) {
+ heightSeries.wireframeColor = "red";
+ text = "Black surface\ngrid color";
+ } else {
+ heightSeries.wireframeColor = "black";
+ text = "Red surface\ngrid color";
+ }
+ }
+ //! [4]
+ }
+
+ Button {
+ id: surfaceToggle
+ anchors.margins: 5
+ anchors.left: heightMapView.portraitMode ? parent.left : surfaceGridColor.right
+ anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : parent.top
+ width: heightMapView.buttonWidth
+ text: "Hide\nSurface"
+ //! [5]
+ onClicked: {
+ if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
+ heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
+ else
+ heightSeries.drawMode |= Surface3DSeries.DrawSurface;
+ }
+ //! [5]
+ }
+
+ Button {
+ id: flatShadingToggle
+ anchors.margins: 5
+ anchors.left: heightMapView.portraitMode ? surfaceToggle.right : parent.left
+ anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : surfaceToggle.bottom
+ width: heightMapView.buttonWidth
+ text: heightSeries.flatShadingSupported ? "Show\nFlat" : "Flat not\nsupported"
+ enabled: heightSeries.flatShadingSupported
+ //! [6]
+ onClicked: {
+ if (heightSeries.flatShadingEnabled) {
+ heightSeries.flatShadingEnabled = false;
+ text = "Show\nFlat"
+ } else {
+ heightSeries.flatShadingEnabled = true;
+ text = "Show\nSmooth"
+ }
+ }
+ //! [6]
+ }
+
+ Button {
+ id: backgroundToggle
+ anchors.margins: 5
+ anchors.left: heightMapView.portraitMode ? parent.left : flatShadingToggle.right
+ anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
+ : surfaceToggle.bottom
+ width: heightMapView.buttonWidth
+ text: "Hide\nBackground"
+ onClicked: {
+ if (surfacePlot.theme.backgroundEnabled) {
+ surfacePlot.theme.backgroundEnabled = false;
+ text = "Show\nBackground";
+ } else {
+ surfacePlot.theme.backgroundEnabled = true;
+ text = "Hide\nBackground";
+ }
+ }
+ }
+
+ Button {
+ id: gridToggle
+ anchors.margins: 5
+ anchors.left: backgroundToggle.right
+ anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
+ : surfaceToggle.bottom
+ width: heightMapView.buttonWidth
+ text: "Hide\nGrid"
+ onClicked: {
+ if (surfacePlot.theme.gridEnabled) {
+ surfacePlot.theme.gridEnabled = false;
+ text = "Show\nGrid";
+ } else {
+ surfacePlot.theme.gridEnabled = true;
+ text = "Hide\nGrid";
+ }
+ }
+ }
+ }
+
+ function checkState() {
+ if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
+ surfaceToggle.text = "Hide\nSurface";
+ else
+ surfaceToggle.text = "Show\nSurface";
+
+ if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
+ surfaceGridToggle.text = "Hide Surface\nGrid";
+ else
+ surfaceGridToggle.text = "Show Surface\nGrid";
+ }
+}
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml
new file mode 100644
index 00000000..a5ff8acd
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml
@@ -0,0 +1,430 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+//! [0]
+import SurfaceGallery
+//! [0]
+
+Item {
+ id: oscilloscopeView
+
+ property int sampleColumns: sampleSlider.value
+ property int sampleRows: sampleColumns / 2
+ property int sampleCache: 24
+
+ required property bool portraitMode
+
+ property real controlWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
+ : oscilloscopeView.width / 4 - 6.66
+
+ property real buttonWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
+ : oscilloscopeView.width / 3 - 7.5
+
+ onSampleRowsChanged: {
+ surfaceSeries.selectedPoint = surfaceSeries.invalidSelectionPosition
+ generateData()
+ }
+
+ //![1]
+ DataSource {
+ id: dataSource
+ }
+ //![1]
+
+ Item {
+ id: dataView
+ anchors.bottom: parent.bottom
+ width: parent.width
+ height: parent.height - controlArea.height
+
+ //! [2]
+ Surface3D {
+ id: surfaceGraph
+ anchors.fill: parent
+
+ Surface3DSeries {
+ id: surfaceSeries
+ drawMode: Surface3DSeries.DrawSurfaceAndWireframe
+ itemLabelFormat: "@xLabel, @zLabel: @yLabel"
+ //! [2]
+ //! [3]
+ itemLabelVisible: false
+ //! [3]
+
+ //! [4]
+ onItemLabelChanged: {
+ if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
+ selectionText.text = "No selection";
+ else
+ selectionText.text = surfaceSeries.itemLabel;
+ }
+ //! [4]
+ }
+
+ shadowQuality: AbstractGraph3D.ShadowQualityNone
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
+ theme: Theme3D {
+ type: Theme3D.ThemeIsabelle
+ backgroundEnabled: false
+ }
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetFrontHigh
+
+ axisX.labelFormat: "%d ms"
+ axisY.labelFormat: "%d W"
+ axisZ.labelFormat: "%d mV"
+ axisX.min: 0
+ axisY.min: 0
+ axisZ.min: 0
+ axisX.max: 1000
+ axisY.max: 100
+ axisZ.max: 800
+ axisX.segmentCount: 4
+ axisY.segmentCount: 4
+ axisZ.segmentCount: 4
+ measureFps: true
+ renderingMode: AbstractGraph3D.RenderDirectToBackground
+
+ onCurrentFpsChanged: (fps)=> {
+ if (fps > 10)
+ fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps);
+ else
+ fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0;
+ }
+
+ //! [5]
+ Component.onCompleted: oscilloscopeView.generateData();
+ //! [5]
+ }
+ }
+
+ //! [7]
+ Timer {
+ id: refreshTimer
+ interval: 1000 / frequencySlider.value
+ running: true
+ repeat: true
+ onTriggered: dataSource.update(surfaceSeries);
+ }
+ //! [7]
+
+ Rectangle {
+ id: controlArea
+ height: oscilloscopeView.portraitMode ? flatShadingToggle.implicitHeight * 7
+ : flatShadingToggle.implicitHeight * 2
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.right: parent.right
+ color: surfaceGraph.theme.backgroundColor
+
+ // Samples
+ Rectangle {
+ id: samples
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Row {
+ anchors.centerIn: parent
+ spacing: 10
+ padding: 5
+
+ Slider {
+ id: sampleSlider
+ from: oscilloscopeView.sampleCache * 2
+ to: from * 10
+ stepSize: oscilloscopeView.sampleCache
+
+ background: Rectangle {
+ x: sampleSlider.leftPadding
+ y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 200
+ implicitHeight: 4
+ width: sampleSlider.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: surfaceGraph.theme.gridLineColor
+
+ Rectangle {
+ width: sampleSlider.visualPosition * parent.width
+ height: parent.height
+ color: surfaceGraph.theme.labelTextColor
+ radius: 2
+ }
+ }
+
+ handle: Rectangle {
+ x: sampleSlider.leftPadding + sampleSlider.visualPosition
+ * (sampleSlider.availableWidth - width)
+ y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 20
+ implicitHeight: 20
+ radius: 10
+ color: sampleSlider.pressed ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: sampleSlider.pressed ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ }
+
+ Component.onCompleted: value = from;
+ }
+
+ Text {
+ id: samplesText
+ text: "Samples: " + (oscilloscopeView.sampleRows * oscilloscopeView.sampleColumns)
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+ }
+
+ // Frequency
+ Rectangle {
+ id: frequency
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : samples.right
+ anchors.top: oscilloscopeView.portraitMode ? samples.bottom : parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Row {
+ anchors.centerIn: parent
+ spacing: 10
+ padding: 5
+
+ Slider {
+ id: frequencySlider
+ from: 2
+ to: 60
+ stepSize: 2
+ value: 30
+
+ background: Rectangle {
+ x: frequencySlider.leftPadding
+ y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 200
+ implicitHeight: 4
+ width: frequencySlider.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: surfaceGraph.theme.gridLineColor
+
+ Rectangle {
+ width: frequencySlider.visualPosition * parent.width
+ height: parent.height
+ color: surfaceGraph.theme.labelTextColor
+ radius: 2
+ }
+ }
+
+ handle: Rectangle {
+ x: frequencySlider.leftPadding + frequencySlider.visualPosition
+ * (frequencySlider.availableWidth - width)
+ y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 20
+ implicitHeight: 20
+ radius: 10
+ color: frequencySlider.pressed ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: frequencySlider.pressed ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ }
+ }
+
+ Text {
+ id: frequencyText
+ text: "Freq: " + frequencySlider.value + " Hz"
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+ }
+
+ // FPS
+ Rectangle {
+ id: fpsindicator
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : frequency.right
+ anchors.top: oscilloscopeView.portraitMode ? frequency.bottom : parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Text {
+ id: fpsText
+ anchors.fill: parent
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+
+ // Selection
+ Rectangle {
+ id: selection
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : fpsindicator.right
+ anchors.top: oscilloscopeView.portraitMode ? fpsindicator.bottom : parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Text {
+ id: selectionText
+ anchors.fill: parent
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: "No selection"
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+
+ // Flat shading
+ Button {
+ id: flatShadingToggle
+ width: oscilloscopeView.buttonWidth
+ anchors.left: parent.left
+ anchors.top: selection.bottom
+ anchors.margins: 5
+
+ text: surfaceSeries.flatShadingSupported ? "Show\nSmooth" : "Flat\nnot supported"
+ enabled: surfaceSeries.flatShadingSupported
+
+ onClicked: {
+ if (surfaceSeries.flatShadingEnabled) {
+ surfaceSeries.flatShadingEnabled = false;
+ text = "Show\nFlat"
+ } else {
+ surfaceSeries.flatShadingEnabled = true;
+ text = "Show\nSmooth"
+ }
+ }
+
+ contentItem: Text {
+ text: flatShadingToggle.text
+ opacity: flatShadingToggle.enabled ? 1.0 : 0.3
+ color: surfaceGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ opacity: flatShadingToggle.enabled ? 1 : 0.3
+ color: flatShadingToggle.down ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: flatShadingToggle.down ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+
+ // Surface grid
+ Button {
+ id: surfaceGridToggle
+ width: oscilloscopeView.buttonWidth
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : flatShadingToggle.right
+ anchors.top: oscilloscopeView.portraitMode ? flatShadingToggle.bottom : selection.bottom
+ anchors.margins: 5
+
+ text: "Hide\nSurface Grid"
+
+ onClicked: {
+ if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
+ surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ text = "Show\nSurface Grid";
+ } else {
+ surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ text = "Hid\nSurface Grid";
+ }
+ }
+
+ contentItem: Text {
+ text: surfaceGridToggle.text
+ color: surfaceGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ color: surfaceGridToggle.down ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: surfaceGridToggle.down ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+
+ // Exit
+ Button {
+ id: exitButton
+ width: oscilloscopeView.buttonWidth
+ height: surfaceGridToggle.height
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : surfaceGridToggle.right
+ anchors.top: oscilloscopeView.portraitMode ? surfaceGridToggle.bottom : selection.bottom
+ anchors.margins: 5
+
+ text: "Quit"
+
+ onClicked: Qt.quit();
+
+ contentItem: Text {
+ text: exitButton.text
+ color: surfaceGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ color: exitButton.down ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: exitButton.down ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+ }
+
+ //! [6]
+ function generateData() {
+ dataSource.generateData(oscilloscopeView.sampleCache, oscilloscopeView.sampleRows,
+ oscilloscopeView.sampleColumns,
+ surfaceGraph.axisX.min, surfaceGraph.axisX.max,
+ surfaceGraph.axisY.min, surfaceGraph.axisY.max,
+ surfaceGraph.axisZ.min, surfaceGraph.axisZ.max);
+ }
+ //! [6]
+}
diff --git a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml
index cc0c3a83..cedb9850 100644
--- a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml
@@ -1,22 +1,20 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
-import QtQuick.Window
import QtDataVisualization
-Window {
- id: mainview
- title: "Qt Quick 2 Surface Spectrogram"
- visible: true
- width: 1024
- height: 768
+Rectangle {
+ id: spectrogramView
color: surfaceGraph.theme.windowColor
- property bool portraitMode: width < height
+ required property bool portraitMode
- Data {
+ property real buttonWidth: spectrogramView.portraitMode ? (spectrogramView.width - 35) / 2
+ : (spectrogramView.width - 50) / 5
+
+ SpectrogramData {
id: surfaceData
}
@@ -75,34 +73,30 @@ Window {
windowColor: "#EEEEEE"
}
-
- //! [5]
- TouchInputHandler3D {
- id: customInputHandler
- rotationEnabled: false
- }
- //! [5]
-
//! [0]
- //! [7]
Surface3D {
- //! [7]
id: surfaceGraph
anchors.fill: parent
- shadowQuality: AbstractGraph3D.ShadowQualityNone
- selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
- axisX: xAxis
- axisY: yAxis
- axisZ: zAxis
+ Surface3DSeries {
+ id: surfaceSeries
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+ baseGradient: surfaceGradient
+ colorStyle: Theme3D.ColorStyleRangeGradient
+ itemLabelFormat: "(@xLabel, @zLabel): @yLabel"
- theme: customTheme
- //! [6]
- inputHandler: customInputHandler
- //! [6]
+ ItemModelSurfaceDataProxy {
+ itemModel: surfaceData.model
+ rowRole: "radius"
+ columnRole: "angle"
+ yPosRole: "value"
+ }
+ }
+ //! [0]
- // Remove the perspective and view the graph from top down to achieve 2D effect
//! [1]
+ // Remove the perspective and view the graph from top down to achieve 2D effect
orthoProjection: true
scene.activeCamera.cameraPreset: Camera3D.CameraPresetDirectlyAbove
//! [1]
@@ -115,26 +109,23 @@ Window {
radialLabelOffset: 0.01
//! [4]
- horizontalAspectRatio: 1
- scene.activeCamera.zoomLevel: 85
+ //! [5]
+ inputHandler: TouchInputHandler3D {
+ rotationEnabled: !surfaceGraph.orthoProjection
+ }
+ //! [5]
- Surface3DSeries {
- id: surfaceSeries
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- baseGradient: surfaceGradient
- colorStyle: Theme3D.ColorStyleRangeGradient
- itemLabelFormat: "(@xLabel, @zLabel): @yLabel"
+ theme: customTheme
+ shadowQuality: AbstractGraph3D.ShadowQualityNone
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
+ axisX: xAxis
+ axisY: yAxis
+ axisZ: zAxis
- ItemModelSurfaceDataProxy {
- itemModel: surfaceData.model
- rowRole: "radius"
- columnRole: "angle"
- yPosRole: "value"
- }
- }
+ aspectRatio: 1.0
+ horizontalAspectRatio: 1.0
+ scene.activeCamera.zoomLevel: 140
}
- //! [0]
}
Item {
@@ -142,7 +133,8 @@ Window {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
- height: mainview.portraitMode ? (polarToggle.height + 10) * 3 : polarToggle.height + 30
+ height: spectrogramView.portraitMode ? (polarToggle.height + 10) * 3
+ : polarToggle.height + 30
anchors.margins: 10
//! [3]
@@ -151,17 +143,9 @@ Window {
anchors.margins: 5
anchors.left: parent.left
anchors.top: parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 50) / 5
- text: "Switch to\npolar"
- onClicked: {
- if (!surfaceGraph.polar) {
- surfaceGraph.polar = true;
- text = "Switch to\ncartesian";
- } else {
- surfaceGraph.polar = false;
- text = "Switch to\npolar";
- }
- }
+ width: spectrogramView.buttonWidth // Calculated elsewhere based on screen orientation
+ text: "Switch to\n" + (surfaceGraph.polar ? "cartesian" : "polar")
+ onClicked: surfaceGraph.polar = !surfaceGraph.polar;
}
//! [3]
@@ -170,26 +154,22 @@ Window {
anchors.margins: 5
anchors.left: polarToggle.right
anchors.top: parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 50) / 5
- text: "Switch to\nperspective"
+ width: spectrogramView.buttonWidth
+ text: "Switch to\n" + (surfaceGraph.orthoProjection ? "perspective" : "orthographic")
onClicked: {
if (surfaceGraph.orthoProjection) {
surfaceGraph.orthoProjection = false;
xAxis.labelAutoRotation = 30;
yAxis.labelAutoRotation = 30;
zAxis.labelAutoRotation = 30;
- customInputHandler.rotationEnabled = true;
- text = "Switch to\northographic";
} else {
surfaceGraph.orthoProjection = true;
surfaceGraph.scene.activeCamera.cameraPreset
- = Camera3D.CameraPresetDirectlyAbove;
+ = Camera3D.CameraPresetDirectlyAbove;
surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
xAxis.labelAutoRotation = 0;
yAxis.labelAutoRotation = 0;
zAxis.labelAutoRotation = 0;
- customInputHandler.rotationEnabled = false;
- text = "Switch to\nperspective";
}
}
}
@@ -197,24 +177,19 @@ Window {
Button {
id: flipGridToggle
anchors.margins: 5
- anchors.left: mainview.portraitMode ? parent.left : orthoToggle.right
- anchors.top: mainview.portraitMode ? orthoToggle.bottom : parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 50) / 5
+ anchors.left: spectrogramView.portraitMode ? parent.left : orthoToggle.right
+ anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
+ width: spectrogramView.buttonWidth
text: "Toggle axis\ngrid on top"
- onClicked: {
- if (surfaceGraph.flipHorizontalGrid)
- surfaceGraph.flipHorizontalGrid = false;
- else
- surfaceGraph.flipHorizontalGrid = true;
- }
+ onClicked: surfaceGraph.flipHorizontalGrid = !surfaceGraph.flipHorizontalGrid;
}
Button {
id: labelOffsetToggle
anchors.margins: 5
anchors.left: flipGridToggle.right
- anchors.top: mainview.portraitMode ? orthoToggle.bottom : parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 50) / 5
+ anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
+ width: spectrogramView.buttonWidth
text: "Toggle radial\nlabel position"
visible: surfaceGraph.polar
onClicked: {
@@ -228,14 +203,14 @@ Window {
Button {
id: surfaceGridToggle
anchors.margins: 5
- anchors.left: mainview.portraitMode ? (labelOffsetToggle.visible ? parent.left
- : flipGridToggle.right)
- : (labelOffsetToggle.visible ? labelOffsetToggle.right
- : flipGridToggle.right)
- anchors.top: mainview.portraitMode ? (labelOffsetToggle.visible ? labelOffsetToggle.bottom
- : orthoToggle.bottom)
- : parent.top
- width: mainview.portraitMode ? (mainview.width - 35) / 2 : (mainview.width - 50) / 5
+ anchors.left: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? parent.left
+ : flipGridToggle.right)
+ : (labelOffsetToggle.visible ? labelOffsetToggle.right
+ : flipGridToggle.right)
+ anchors.top: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? labelOffsetToggle.bottom
+ : orthoToggle.bottom)
+ : parent.top
+ width: spectrogramView.buttonWidth
text: "Toggle\nsurface grid"
visible: !surfaceGraph.orthoProjection
onClicked: {
@@ -252,7 +227,7 @@ Window {
anchors.bottom: parent.bottom
anchors.top: buttons.bottom
anchors.right: parent.right
- width: mainview.portraitMode ? 100 : 125
+ width: spectrogramView.portraitMode ? 100 : 125
Rectangle {
id: gradient
@@ -262,7 +237,7 @@ Window {
anchors.right: legend.right
border.color: "black"
border.width: 1
- width: mainview.portraitMode ? 25 : 50
+ width: spectrogramView.portraitMode ? 25 : 50
rotation: 180
gradient: Gradient {
GradientStop { position: 0.0; color: "black" }
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.png b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.png
new file mode 100644
index 00000000..02f41230
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.png
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme
new file mode 100644
index 00000000..505fee85
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme
@@ -0,0 +1,25 @@
+Heightmap of Mt Ruapehu & Mt Ngauruhoe
+
+Authored on: 22 July 2018
+Source: University of Otago (https://koordinates.com/layer/3736-09-taumarunui-15m-dem-nzsosdem-v10/)
+
+Creative Commons Attribution - CC BY-SA 4.0
+https://creativecommons.org/licenses/by-sa/4.0/
+
+You are free to:
+
+ Share — copy and redistribute the material in any medium or format
+ Adapt — remix, transform, and build upon the material for any purpose, even commercially.
+
+This license is acceptable for Free Cultural Works.
+
+ The licensor cannot revoke these freedoms as long as you follow the license terms.
+
+Under the following terms:
+
+ Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
+
+ ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
+
+ No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
+
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml
new file mode 100644
index 00000000..2d0b82db
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Item {
+ id: mainView
+ width: 1280
+ height: 1024
+ visible: true
+
+ property bool portraitMode: width < height
+
+ TabBar {
+ id: tabBar
+ width: parent.width
+
+ TabButton {
+ text: "Height Map"
+ }
+
+ TabButton {
+ text: "Spectrogram"
+ }
+
+ TabButton {
+ text: "Oscilloscope"
+ }
+ }
+
+ StackLayout {
+ anchors.top: tabBar.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+ currentIndex: tabBar.currentIndex
+
+ SurfaceHeightMap {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+
+ SurfaceSpectrogram {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+
+ SurfaceOscilloscope {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+ }
+}
diff --git a/examples/datavisualization/qml3doscilloscope/qml3doscilloscope.pro b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.pro
index 07ee9838..c79366ba 100644
--- a/examples/datavisualization/qml3doscilloscope/qml3doscilloscope.pro
+++ b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.pro
@@ -2,15 +2,16 @@
error( "Couldn't find the examples.pri file!" )
}
+DEFINES += QMAKE_BUILD
+
QT += datavisualization
-# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp \
datasource.cpp
HEADERS += datasource.h
-RESOURCES += qml3doscilloscope.qrc
+RESOURCES += qmlsurfacegallery.qrc
OTHER_FILES += doc/src/* \
doc/images/* \
- qml/qml3doscilloscope/*
+ qml/qmlsurfacegallery/*
diff --git a/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc
new file mode 100644
index 00000000..191c5cc4
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/qmlsurfacegallery/heightmap.png</file>
+ <file>qml/qmlsurfacegallery/main.qml</file>
+ <file>qml/qmlsurfacegallery/SpectrogramData.qml</file>
+ <file>qml/qmlsurfacegallery/SurfaceHeightMap.qml</file>
+ <file>qml/qmlsurfacegallery/SurfaceOscilloscope.qml</file>
+ <file>qml/qmlsurfacegallery/SurfaceSpectrogram.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/datavisualization/scatter/CMakeLists.txt b/examples/datavisualization/scatter/CMakeLists.txt
deleted file mode 100644
index 9bcdaacf..00000000
--- a/examples/datavisualization/scatter/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(scatter LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(scatter
- main.cpp
- scatterdatamodifier.cpp scatterdatamodifier.h
-)
-set_target_properties(scatter PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(scatter PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
- Qt::DataVisualization
-)
-
-install(TARGETS scatter
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/scatter/doc/images/scatter-example.png b/examples/datavisualization/scatter/doc/images/scatter-example.png
deleted file mode 100644
index 82c13855..00000000
--- a/examples/datavisualization/scatter/doc/images/scatter-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/scatter/doc/src/scatter.qdoc b/examples/datavisualization/scatter/doc/src/scatter.qdoc
deleted file mode 100644
index 6322e9cb..00000000
--- a/examples/datavisualization/scatter/doc/src/scatter.qdoc
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example scatter
- \meta tags {DataVisualization, Q3DScatter}
- \meta category {Graphics}
- \title Scatter Graph
- \ingroup qtdatavisualization_examples
- \brief Using Q3DScatter in a widget application.
-
- The scatter graph example shows how to make a simple 3D scatter graph using Q3DScatter and
- combining the use of widgets for adjusting several adjustable qualities. The example shows
- how to:
-
- \list
- \li Create an application with Q3DScatter and some widgets
- \li Use QScatterDataProxy to set data to the graph
- \li Adjust some graph properties using widget controls
- \endlist
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image scatter-example.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in main.cpp, we create a QApplication, instantiate Q3DScatter, and a window container
- for it:
-
- \snippet scatter/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, and Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create horizontal and vertical layouts. We'll add the graph and the vertical
- layout into the horizontal one:
-
- \snippet scatter/main.cpp 1
-
- We're not using the vertical layout for anything yet, but we'll get back to it in
- \l {Using widgets to control the graph}
-
- Next, let's create another class to handle the data addition and other interaction with the
- graph. Let's call it \c ScatterDataModifier (See \l {Setting up the graph} and
- \l {Adding data to the graph} for details):
-
- \snippet scatter/main.cpp 2
-
- The application main is done. We can show the graph and start the event loop:
-
- \snippet scatter/main.cpp 3
-
- \section1 Setting up the Graph
-
- Let's set up some visual qualities for the graph in the constructor of the \c ScatterDataModifier
- class we instantiated in the application main:
-
- \snippet scatter/scatterdatamodifier.cpp 0
-
- None of these are required, but are used to override graph defaults. You can try how it looks
- with the preset defaults by commenting the block above out.
-
- Finally we create a QScatterDataProxy and the associated QScatter3DSeries. We set custom label format
- and mesh smoothing for the series and add it to the graph:
-
- \snippet scatter/scatterdatamodifier.cpp 2
-
- That concludes setting up the graph.
-
- \section1 Adding Data to the Graph
-
- The last thing we do in the \c ScatterDataModifier constructor is to add data to the graph:
-
- \snippet scatter/scatterdatamodifier.cpp 3
-
- The actual data addition is done in \c addData() method. First we configure the axes:
-
- \snippet scatter/scatterdatamodifier.cpp 4
-
- This could have been done in the constructor of \c {ScatterDataModifier}, but we added it here
- to keep the constructor simpler and the axes configuration near the data.
-
- Next we create a data array:
-
- \snippet scatter/scatterdatamodifier.cpp 5
-
- and populate it:
-
- \snippet scatter/scatterdatamodifier.cpp 6
-
- Finally we tell the proxy to start using the data we gave it:
-
- \snippet scatter/scatterdatamodifier.cpp 7
-
- Now our graph has the data and is ready to be used. There isn't much interaction yet, though,
- so let's continue by adding some widgets to play with.
-
- \section1 Using Widgets to Control the Graph
-
- First, back in the application main, we'll create some widgets:
-
- \snippet scatter/main.cpp 4
-
- And add them to the vertical layout we created earlier:
-
- \snippet scatter/main.cpp 5
-
- Now, let's connect them to methods in ScatterDataModifier:
-
- \snippet scatter/main.cpp 6
-
- Here are the methods in ScatterDataModifier the signals were connected to:
-
- \snippet scatter/scatterdatamodifier.cpp 8
-
- And so we have an application in which we can control:
-
- \list
- \li Label style
- \li Camera preset
- \li Background visibility
- \li Grid visibility
- \li Dot shading smoothness
- \li Dot style
- \li Theme
- \li Shadow quality
- \li Label font
- \endlist
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/scatter/main.cpp b/examples/datavisualization/scatter/main.cpp
deleted file mode 100644
index 73f412f5..00000000
--- a/examples/datavisualization/scatter/main.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "scatterdatamodifier.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QFontComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QFontDatabase>
-
-int main(int argc, char **argv)
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- //! [0]
- QApplication app(argc, argv);
- Q3DScatter *graph = new Q3DScatter();
- QWidget *container = QWidget::createWindowContainer(graph);
- //! [0]
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- //! [1]
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- //! [1]
-
- widget->setWindowTitle(QStringLiteral("A Cosine Wave"));
-
- //! [4]
- QComboBox *themeList = new QComboBox(widget);
- themeList->addItem(QStringLiteral("Qt"));
- themeList->addItem(QStringLiteral("Primary Colors"));
- themeList->addItem(QStringLiteral("Digia"));
- themeList->addItem(QStringLiteral("Stone Moss"));
- themeList->addItem(QStringLiteral("Army Blue"));
- themeList->addItem(QStringLiteral("Retro"));
- themeList->addItem(QStringLiteral("Ebony"));
- themeList->addItem(QStringLiteral("Isabelle"));
- themeList->setCurrentIndex(6);
-
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
-
- QCheckBox *smoothCheckBox = new QCheckBox(widget);
- smoothCheckBox->setText(QStringLiteral("Smooth dots"));
- smoothCheckBox->setChecked(true);
-
- QComboBox *itemStyleList = new QComboBox(widget);
- itemStyleList->addItem(QStringLiteral("Sphere"), int(QAbstract3DSeries::MeshSphere));
- itemStyleList->addItem(QStringLiteral("Cube"), int(QAbstract3DSeries::MeshCube));
- itemStyleList->addItem(QStringLiteral("Minimal"), int(QAbstract3DSeries::MeshMinimal));
- itemStyleList->addItem(QStringLiteral("Point"), int(QAbstract3DSeries::MeshPoint));
- itemStyleList->setCurrentIndex(0);
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
-
- QPushButton *itemCountButton = new QPushButton(widget);
- itemCountButton->setText(QStringLiteral("Toggle item count"));
-
- QCheckBox *backgroundCheckBox = new QCheckBox(widget);
- backgroundCheckBox->setText(QStringLiteral("Show background"));
- backgroundCheckBox->setChecked(true);
-
- QCheckBox *gridCheckBox = new QCheckBox(widget);
- gridCheckBox->setText(QStringLiteral("Show grid"));
- gridCheckBox->setChecked(true);
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->addItem(QStringLiteral("Low Soft"));
- shadowQuality->addItem(QStringLiteral("Medium Soft"));
- shadowQuality->addItem(QStringLiteral("High Soft"));
- shadowQuality->setCurrentIndex(4);
-
- QFontComboBox *fontList = new QFontComboBox(widget);
- fontList->setCurrentFont(QFont("Arial"));
- //! [4]
-
- //! [5]
- vLayout->addWidget(labelButton, 0, Qt::AlignTop);
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(itemCountButton, 0, Qt::AlignTop);
- vLayout->addWidget(backgroundCheckBox);
- vLayout->addWidget(gridCheckBox);
- vLayout->addWidget(smoothCheckBox, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Change dot style")));
- vLayout->addWidget(itemStyleList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
- vLayout->addWidget(themeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
- vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
- vLayout->addWidget(fontList, 1, Qt::AlignTop);
- //! [5]
-
- //! [2]
- ScatterDataModifier *modifier = new ScatterDataModifier(graph);
- //! [2]
-
- //! [6]
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changePresetCamera);
- QObject::connect(labelButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeLabelStyle);
- QObject::connect(itemCountButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::toggleItemCount);
-
- QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setBackgroundEnabled);
- QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setGridEnabled);
- QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setSmoothDots);
-
- QObject::connect(modifier, &ScatterDataModifier::backgroundEnabledChanged,
- backgroundCheckBox, &QCheckBox::setChecked);
- QObject::connect(modifier, &ScatterDataModifier::gridEnabledChanged,
- gridCheckBox, &QCheckBox::setChecked);
- QObject::connect(itemStyleList, &QComboBox::currentIndexChanged, modifier,
- qOverload<int>(&ScatterDataModifier::changeStyle));
-
- QObject::connect(themeList, &QComboBox::currentIndexChanged, modifier,
- qOverload<int>(&ScatterDataModifier::changeTheme));
-
- QObject::connect(shadowQuality, &QComboBox::currentIndexChanged, modifier,
- qOverload<int>(&ScatterDataModifier::changeShadowQuality));
-
- QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
- &QComboBox::setCurrentIndex);
- QObject::connect(graph, &Q3DScatter::shadowQualityChanged, modifier,
- &ScatterDataModifier::shadowQualityUpdatedByVisual);
-
- QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
- &ScatterDataModifier::changeFont);
-
- QObject::connect(modifier, &ScatterDataModifier::fontChanged, fontList,
- &QFontComboBox::setCurrentFont);
- //! [6]
-
- //! [3]
- widget->show();
- return app.exec();
- //! [3]
-}
diff --git a/examples/datavisualization/scatter/scatter.pro b/examples/datavisualization/scatter/scatter.pro
deleted file mode 100644
index b9f29f9c..00000000
--- a/examples/datavisualization/scatter/scatter.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp scatterdatamodifier.cpp
-HEADERS += scatterdatamodifier.h
-
-QT += widgets
-requires(qtConfig(combobox))
-requires(qtConfig(fontcombobox))
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/surface/CMakeLists.txt b/examples/datavisualization/surface/CMakeLists.txt
deleted file mode 100644
index 54e0c5ec..00000000
--- a/examples/datavisualization/surface/CMakeLists.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(surface LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(surface
- main.cpp
- surfacegraph.cpp surfacegraph.h
-)
-set_target_properties(surface PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(surface PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
- Qt::DataVisualization
-)
-
-set_source_files_properties("mountain.png"
- PROPERTIES QT_RESOURCE_ALIAS "mountain"
-)
-set(surface_resource_files
- "mountain.png"
-)
-
-qt6_add_resources(surface "surface"
- PREFIX
- "/maps"
- FILES
- ${surface_resource_files}
-)
-
-install(TARGETS surface
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/surface/doc/images/surface-example.png b/examples/datavisualization/surface/doc/images/surface-example.png
deleted file mode 100644
index c323df78..00000000
--- a/examples/datavisualization/surface/doc/images/surface-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/surface/doc/src/surface.qdoc b/examples/datavisualization/surface/doc/src/surface.qdoc
deleted file mode 100644
index 7ee17fa1..00000000
--- a/examples/datavisualization/surface/doc/src/surface.qdoc
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example surface
- \meta tags {DataVisualization, Q3DSurface}
- \meta category {Graphics}
- \title Surface Graph
- \ingroup qtdatavisualization_examples
- \brief Using Q3DSurface in a widget application.
-
- The surface example shows how to make a simple 3D surface graph using Q3DSurface and
- combining the use of widgets for adjusting several adjustable qualities. This example
- demonstrates the following features:
-
- \list
- \li How to set up a basic QSurfaceDataProxy and set data for it.
- \li How to use QHeightMapSurfaceDataProxy for showing 3D height maps.
- \li Three different selection modes for studying the graph.
- \li Axis range usage for displaying selected portions of the graph.
- \li Changing theme.
- \li How to set a custom surface gradient.
- \endlist
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image surface-example.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in \c main.cpp, we create a QApplication, instantiate Q3DSurface, and a window container
- for it:
-
- \snippet surface/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, and Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create horizontal and vertical layouts. We'll add the graph with the container and
- the vertical layout into the horizontal one:
-
- \snippet surface/main.cpp 1
-
- The rest of the code in \c main.cpp is creating control widgets for features in Q3DSurface. We
- have separated code for changing these features into \c surfacegraph.cpp and only connect
- signals from widgets into methods in \c surfacegraph.cpp. Next chapter explains more
- about using Q3DSurface.
-
- \section1 Setting up Proxies and Data
-
- First we instantiate a new QSurfaceDataProxy and attach it to a new QSurface3DSeries:
-
- \snippet surface/surfacegraph.cpp 0
-
- Then we fill the proxy with a simple square root and sine wave data. This is done by
- creating a new \c QSurfaceDataArray instance and adding \c QSurfaceDataRow elements to it.
- The created \c QSurfaceDataArray is set to be the data array for the QSurfaceDataProxy.
-
- \snippet surface/surfacegraph.cpp 1
-
- The height map is created by instantiating a QHeightMapSurfaceDataProxy with
- a QImage containing the height data. The method QHeightMapSurfaceDataProxy::setValueRanges() is
- used to define the value range of the map. In our example the map is from imaginary position of
- 34.0\unicode 0x00B0 N - 40.0\unicode 0x00B0 N and 18.0\unicode 0x00B0 E - 24.0\unicode 0x00B0 E.
- These values are used to show and position the map to the axis.
-
- \snippet surface/surfacegraph.cpp 2
-
- For demonstrating different proxies this example has two radio buttons which
- the user can use to switch between the series. When the user selects the
- \c {Sqrt & Sin} radio button, the selected series is activated with the following
- code. First we set the decorative issues like enable the grid for the surface and
- select the flat shading mode. Next lines define the axis label format and value
- ranges. Automatic label rotation is set to improve label readability at low camera angles.
- Finally we make sure the correct series is added to the graph:
-
- \snippet surface/surfacegraph.cpp 3
-
- When the \c{Height Map} radio button is activated, the following code sets the correct series active.
- The axis label format is set to show N and E letters and ranges are set to the imaginary coordinates.
- Auto adjusting Y-axis range is fine for our height map surface, so we ensure it is set.
-
- \snippet surface/surfacegraph.cpp 4
-
- \section1 Selection Modes
-
- Q3Dsurface supports three different selection modes. These are demonstrated in the
- example with radio buttons, which the user can use to activate a suitable selection mode.
- The following inline methods are connected to radio buttons to activate the selected mode.
-
- \snippet surface/surfacegraph.h 0
-
- \section1 Axis Ranges for Studying the Graph
-
- The example has four slider controls for adjusting the min and max values for X and Z
- axis. When selecting the proxy these sliders are adjusted so that one step on the slider
- moves the range by one segment step:
-
- \snippet surface/surfacegraph.cpp 8
-
- The ranges are set for the axes like this:
-
- \snippet surface/surfacegraph.cpp 5
-
- \section1 Themes
-
- Q3DSurface supports all the themes Qt Data Visualization has. The example has a pull
- down menu for selecting the theme. The following method is connected to the
- menu to activate the selected theme. The theme type is changed to another predefined theme,
- which overwrites all theme properties to predefined values:
-
- \snippet surface/surfacegraph.cpp 6
-
- \section1 Custom Surface Gradients
-
- The example demonstrates the custom surface gradients with two push buttons. The gradient
- can be defined with QLinearGradient where the desired colors are set to positions. The following
- code shows how to create an example gradient and set it to the series. Note that you also need
- to change the color style to Q3DTheme::ColorStyleRangeGradient to actually use the gradient.
-
- \snippet surface/surfacegraph.cpp 7
-*/
diff --git a/examples/datavisualization/surface/main.cpp b/examples/datavisualization/surface/main.cpp
deleted file mode 100644
index e017b039..00000000
--- a/examples/datavisualization/surface/main.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "surfacegraph.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QPainter>
-#include <QtGui/QScreen>
-
-int main(int argc, char **argv)
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- //! [0]
- QApplication app(argc, argv);
- Q3DSurface *graph = new Q3DSurface();
- QWidget *container = QWidget::createWindowContainer(graph);
- //! [0]
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.6));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- //! [1]
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- vLayout->setAlignment(Qt::AlignTop);
- //! [1]
-
- widget->setWindowTitle(QStringLiteral("Surface example"));
-
- QGroupBox *modelGroupBox = new QGroupBox(QStringLiteral("Model"));
-
- QRadioButton *sqrtSinModelRB = new QRadioButton(widget);
- sqrtSinModelRB->setText(QStringLiteral("Sqrt && Sin"));
- sqrtSinModelRB->setChecked(false);
-
- QRadioButton *heightMapModelRB = new QRadioButton(widget);
- heightMapModelRB->setText(QStringLiteral("Height Map"));
- heightMapModelRB->setChecked(false);
-
- QVBoxLayout *modelVBox = new QVBoxLayout;
- modelVBox->addWidget(sqrtSinModelRB);
- modelVBox->addWidget(heightMapModelRB);
- modelGroupBox->setLayout(modelVBox);
-
- QGroupBox *selectionGroupBox = new QGroupBox(QStringLiteral("Selection Mode"));
-
- QRadioButton *modeNoneRB = new QRadioButton(widget);
- modeNoneRB->setText(QStringLiteral("No selection"));
- modeNoneRB->setChecked(false);
-
- QRadioButton *modeItemRB = new QRadioButton(widget);
- modeItemRB->setText(QStringLiteral("Item"));
- modeItemRB->setChecked(false);
-
- QRadioButton *modeSliceRowRB = new QRadioButton(widget);
- modeSliceRowRB->setText(QStringLiteral("Row Slice"));
- modeSliceRowRB->setChecked(false);
-
- QRadioButton *modeSliceColumnRB = new QRadioButton(widget);
- modeSliceColumnRB->setText(QStringLiteral("Column Slice"));
- modeSliceColumnRB->setChecked(false);
-
- QVBoxLayout *selectionVBox = new QVBoxLayout;
- selectionVBox->addWidget(modeNoneRB);
- selectionVBox->addWidget(modeItemRB);
- selectionVBox->addWidget(modeSliceRowRB);
- selectionVBox->addWidget(modeSliceColumnRB);
- selectionGroupBox->setLayout(selectionVBox);
-
- QSlider *axisMinSliderX = new QSlider(Qt::Horizontal, widget);
- axisMinSliderX->setMinimum(0);
- axisMinSliderX->setTickInterval(1);
- axisMinSliderX->setEnabled(true);
- QSlider *axisMaxSliderX = new QSlider(Qt::Horizontal, widget);
- axisMaxSliderX->setMinimum(1);
- axisMaxSliderX->setTickInterval(1);
- axisMaxSliderX->setEnabled(true);
- QSlider *axisMinSliderZ = new QSlider(Qt::Horizontal, widget);
- axisMinSliderZ->setMinimum(0);
- axisMinSliderZ->setTickInterval(1);
- axisMinSliderZ->setEnabled(true);
- QSlider *axisMaxSliderZ = new QSlider(Qt::Horizontal, widget);
- axisMaxSliderZ->setMinimum(1);
- axisMaxSliderZ->setTickInterval(1);
- axisMaxSliderZ->setEnabled(true);
-
- QComboBox *themeList = new QComboBox(widget);
- themeList->addItem(QStringLiteral("Qt"));
- themeList->addItem(QStringLiteral("Primary Colors"));
- themeList->addItem(QStringLiteral("Digia"));
- themeList->addItem(QStringLiteral("Stone Moss"));
- themeList->addItem(QStringLiteral("Army Blue"));
- themeList->addItem(QStringLiteral("Retro"));
- themeList->addItem(QStringLiteral("Ebony"));
- themeList->addItem(QStringLiteral("Isabelle"));
-
- QGroupBox *colorGroupBox = new QGroupBox(QStringLiteral("Custom gradient"));
-
- QLinearGradient grBtoY(0, 0, 1, 100);
- grBtoY.setColorAt(1.0, Qt::black);
- grBtoY.setColorAt(0.67, Qt::blue);
- grBtoY.setColorAt(0.33, Qt::red);
- grBtoY.setColorAt(0.0, Qt::yellow);
- QPixmap pm(24, 100);
- QPainter pmp(&pm);
- pmp.setBrush(QBrush(grBtoY));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(0, 0, 24, 100);
- QPushButton *gradientBtoYPB = new QPushButton(widget);
- gradientBtoYPB->setIcon(QIcon(pm));
- gradientBtoYPB->setIconSize(QSize(24, 100));
-
- QLinearGradient grGtoR(0, 0, 1, 100);
- grGtoR.setColorAt(1.0, Qt::darkGreen);
- grGtoR.setColorAt(0.5, Qt::yellow);
- grGtoR.setColorAt(0.2, Qt::red);
- grGtoR.setColorAt(0.0, Qt::darkRed);
- pmp.setBrush(QBrush(grGtoR));
- pmp.drawRect(0, 0, 24, 100);
- QPushButton *gradientGtoRPB = new QPushButton(widget);
- gradientGtoRPB->setIcon(QIcon(pm));
- gradientGtoRPB->setIconSize(QSize(24, 100));
-
- QHBoxLayout *colorHBox = new QHBoxLayout;
- colorHBox->addWidget(gradientBtoYPB);
- colorHBox->addWidget(gradientGtoRPB);
- colorGroupBox->setLayout(colorHBox);
-
- vLayout->addWidget(modelGroupBox);
- vLayout->addWidget(selectionGroupBox);
- vLayout->addWidget(new QLabel(QStringLiteral("Column range")));
- vLayout->addWidget(axisMinSliderX);
- vLayout->addWidget(axisMaxSliderX);
- vLayout->addWidget(new QLabel(QStringLiteral("Row range")));
- vLayout->addWidget(axisMinSliderZ);
- vLayout->addWidget(axisMaxSliderZ);
- vLayout->addWidget(new QLabel(QStringLiteral("Theme")));
- vLayout->addWidget(themeList);
- vLayout->addWidget(colorGroupBox);
-
- widget->show();
-
- SurfaceGraph *modifier = new SurfaceGraph(graph);
-
- QObject::connect(heightMapModelRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::enableHeightMapModel);
- QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::enableSqrtSinModel);
- QObject::connect(modeNoneRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeNone);
- QObject::connect(modeItemRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeItem);
- QObject::connect(modeSliceRowRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeSliceRow);
- QObject::connect(modeSliceColumnRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeSliceColumn);
- QObject::connect(axisMinSliderX, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustXMin);
- QObject::connect(axisMaxSliderX, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustXMax);
- QObject::connect(axisMinSliderZ, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustZMin);
- QObject::connect(axisMaxSliderZ, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustZMax);
- QObject::connect(themeList, &QComboBox::currentIndexChanged,
- modifier, &SurfaceGraph::changeTheme);
- QObject::connect(gradientBtoYPB, &QPushButton::pressed,
- modifier, &SurfaceGraph::setBlackToYellowGradient);
- QObject::connect(gradientGtoRPB, &QPushButton::pressed,
- modifier, &SurfaceGraph::setGreenToRedGradient);
-
- modifier->setAxisMinSliderX(axisMinSliderX);
- modifier->setAxisMaxSliderX(axisMaxSliderX);
- modifier->setAxisMinSliderZ(axisMinSliderZ);
- modifier->setAxisMaxSliderZ(axisMaxSliderZ);
-
- sqrtSinModelRB->setChecked(true);
- modeItemRB->setChecked(true);
- themeList->setCurrentIndex(2);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/surface/mountain.png b/examples/datavisualization/surface/mountain.png
deleted file mode 100644
index 9138c710..00000000
--- a/examples/datavisualization/surface/mountain.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/surface/surface.pro b/examples/datavisualization/surface/surface.pro
deleted file mode 100644
index a49fa468..00000000
--- a/examples/datavisualization/surface/surface.pro
+++ /dev/null
@@ -1,20 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- surfacegraph.cpp
-
-HEADERS += surfacegraph.h
-
-QT += widgets
-requires(qtConfig(combobox))
-
-RESOURCES += surface.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/surface/surface.qrc b/examples/datavisualization/surface/surface.qrc
deleted file mode 100644
index e4a7c38b..00000000
--- a/examples/datavisualization/surface/surface.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/maps">
- <file alias="mountain">mountain.png</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/surface/surfacegraph.cpp b/examples/datavisualization/surface/surfacegraph.cpp
deleted file mode 100644
index 9ef395c9..00000000
--- a/examples/datavisualization/surface/surfacegraph.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "surfacegraph.h"
-
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtDataVisualization/Q3DTheme>
-#include <QtGui/QImage>
-#include <QtCore/qmath.h>
-
-const int sampleCountX = 50;
-const int sampleCountZ = 50;
-const int heightMapGridStepX = 6;
-const int heightMapGridStepZ = 6;
-const float sampleMin = -8.0f;
-const float sampleMax = 8.0f;
-
-SurfaceGraph::SurfaceGraph(Q3DSurface *surface)
- : m_graph(surface)
-{
- m_graph->setAxisX(new QValue3DAxis);
- m_graph->setAxisY(new QValue3DAxis);
- m_graph->setAxisZ(new QValue3DAxis);
-
- //! [0]
- m_sqrtSinProxy = new QSurfaceDataProxy();
- m_sqrtSinSeries = new QSurface3DSeries(m_sqrtSinProxy);
- //! [0]
- fillSqrtSinProxy();
-
- //! [2]
- QImage heightMapImage(":/maps/mountain");
- m_heightMapProxy = new QHeightMapSurfaceDataProxy(heightMapImage);
- m_heightMapSeries = new QSurface3DSeries(m_heightMapProxy);
- m_heightMapSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- m_heightMapProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- //! [2]
- m_heightMapWidth = heightMapImage.width();
- m_heightMapHeight = heightMapImage.height();
-}
-
-SurfaceGraph::~SurfaceGraph()
-{
- delete m_graph;
-}
-
-//! [1]
-void SurfaceGraph::fillSqrtSinProxy()
-{
- float stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
- float stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
-
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
- dataArray->reserve(sampleCountZ);
- for (int i = 0 ; i < sampleCountZ ; i++) {
- QSurfaceDataRow *newRow = new QSurfaceDataRow(sampleCountX);
- // Keep values within range bounds, since just adding step can cause minor drift due
- // to the rounding errors.
- float z = qMin(sampleMax, (i * stepZ + sampleMin));
- int index = 0;
- for (int j = 0; j < sampleCountX; j++) {
- float x = qMin(sampleMax, (j * stepX + sampleMin));
- float R = qSqrt(z * z + x * x) + 0.01f;
- float y = (qSin(R) / R + 0.24f) * 1.61f;
- (*newRow)[index++].setPosition(QVector3D(x, y, z));
- }
- *dataArray << newRow;
- }
-
- m_sqrtSinProxy->resetArray(dataArray);
-}
-//! [1]
-
-void SurfaceGraph::enableSqrtSinModel(bool enable)
-{
- if (enable) {
- //! [3]
- m_sqrtSinSeries->setDrawMode(QSurface3DSeries::DrawSurfaceAndWireframe);
- m_sqrtSinSeries->setFlatShadingEnabled(true);
-
- m_graph->axisX()->setLabelFormat("%.2f");
- m_graph->axisZ()->setLabelFormat("%.2f");
- m_graph->axisX()->setRange(sampleMin, sampleMax);
- m_graph->axisY()->setRange(0.0f, 2.0f);
- m_graph->axisZ()->setRange(sampleMin, sampleMax);
- m_graph->axisX()->setLabelAutoRotation(30);
- m_graph->axisY()->setLabelAutoRotation(90);
- m_graph->axisZ()->setLabelAutoRotation(30);
-
- m_graph->removeSeries(m_heightMapSeries);
- m_graph->addSeries(m_sqrtSinSeries);
- //! [3]
-
- //! [8]
- // Reset range sliders for Sqrt&Sin
- m_rangeMinX = sampleMin;
- m_rangeMinZ = sampleMin;
- m_stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
- m_stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
- m_axisMinSliderX->setMaximum(sampleCountX - 2);
- m_axisMinSliderX->setValue(0);
- m_axisMaxSliderX->setMaximum(sampleCountX - 1);
- m_axisMaxSliderX->setValue(sampleCountX - 1);
- m_axisMinSliderZ->setMaximum(sampleCountZ - 2);
- m_axisMinSliderZ->setValue(0);
- m_axisMaxSliderZ->setMaximum(sampleCountZ - 1);
- m_axisMaxSliderZ->setValue(sampleCountZ - 1);
- //! [8]
- }
-}
-
-void SurfaceGraph::enableHeightMapModel(bool enable)
-{
- if (enable) {
- //! [4]
- m_heightMapSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- m_heightMapSeries->setFlatShadingEnabled(false);
-
- m_graph->axisX()->setLabelFormat("%.1f N");
- m_graph->axisZ()->setLabelFormat("%.1f E");
- m_graph->axisX()->setRange(34.0f, 40.0f);
- m_graph->axisY()->setAutoAdjustRange(true);
- m_graph->axisZ()->setRange(18.0f, 24.0f);
-
- m_graph->axisX()->setTitle(QStringLiteral("Latitude"));
- m_graph->axisY()->setTitle(QStringLiteral("Height"));
- m_graph->axisZ()->setTitle(QStringLiteral("Longitude"));
-
- m_graph->removeSeries(m_sqrtSinSeries);
- m_graph->addSeries(m_heightMapSeries);
- //! [4]
-
- // Reset range sliders for height map
- int mapGridCountX = m_heightMapWidth / heightMapGridStepX;
- int mapGridCountZ = m_heightMapHeight / heightMapGridStepZ;
- m_rangeMinX = 34.0f;
- m_rangeMinZ = 18.0f;
- m_stepX = 6.0f / float(mapGridCountX - 1);
- m_stepZ = 6.0f / float(mapGridCountZ - 1);
- m_axisMinSliderX->setMaximum(mapGridCountX - 2);
- m_axisMinSliderX->setValue(0);
- m_axisMaxSliderX->setMaximum(mapGridCountX - 1);
- m_axisMaxSliderX->setValue(mapGridCountX - 1);
- m_axisMinSliderZ->setMaximum(mapGridCountZ - 2);
- m_axisMinSliderZ->setValue(0);
- m_axisMaxSliderZ->setMaximum(mapGridCountZ - 1);
- m_axisMaxSliderZ->setValue(mapGridCountZ - 1);
- }
-}
-
-void SurfaceGraph::adjustXMin(int min)
-{
- float minX = m_stepX * float(min) + m_rangeMinX;
-
- int max = m_axisMaxSliderX->value();
- if (min >= max) {
- max = min + 1;
- m_axisMaxSliderX->setValue(max);
- }
- float maxX = m_stepX * max + m_rangeMinX;
-
- setAxisXRange(minX, maxX);
-}
-
-void SurfaceGraph::adjustXMax(int max)
-{
- float maxX = m_stepX * float(max) + m_rangeMinX;
-
- int min = m_axisMinSliderX->value();
- if (max <= min) {
- min = max - 1;
- m_axisMinSliderX->setValue(min);
- }
- float minX = m_stepX * min + m_rangeMinX;
-
- setAxisXRange(minX, maxX);
-}
-
-void SurfaceGraph::adjustZMin(int min)
-{
- float minZ = m_stepZ * float(min) + m_rangeMinZ;
-
- int max = m_axisMaxSliderZ->value();
- if (min >= max) {
- max = min + 1;
- m_axisMaxSliderZ->setValue(max);
- }
- float maxZ = m_stepZ * max + m_rangeMinZ;
-
- setAxisZRange(minZ, maxZ);
-}
-
-void SurfaceGraph::adjustZMax(int max)
-{
- float maxX = m_stepZ * float(max) + m_rangeMinZ;
-
- int min = m_axisMinSliderZ->value();
- if (max <= min) {
- min = max - 1;
- m_axisMinSliderZ->setValue(min);
- }
- float minX = m_stepZ * min + m_rangeMinZ;
-
- setAxisZRange(minX, maxX);
-}
-
-//! [5]
-void SurfaceGraph::setAxisXRange(float min, float max)
-{
- m_graph->axisX()->setRange(min, max);
-}
-
-void SurfaceGraph::setAxisZRange(float min, float max)
-{
- m_graph->axisZ()->setRange(min, max);
-}
-//! [5]
-
-//! [6]
-void SurfaceGraph::changeTheme(int theme)
-{
- m_graph->activeTheme()->setType(Q3DTheme::Theme(theme));
-}
-//! [6]
-
-void SurfaceGraph::setBlackToYellowGradient()
-{
- //! [7]
- QLinearGradient gr;
- gr.setColorAt(0.0, Qt::black);
- gr.setColorAt(0.33, Qt::blue);
- gr.setColorAt(0.67, Qt::red);
- gr.setColorAt(1.0, Qt::yellow);
-
- m_graph->seriesList().at(0)->setBaseGradient(gr);
- m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- //! [7]
-}
-
-void SurfaceGraph::setGreenToRedGradient()
-{
- QLinearGradient gr;
- gr.setColorAt(0.0, Qt::darkGreen);
- gr.setColorAt(0.5, Qt::yellow);
- gr.setColorAt(0.8, Qt::red);
- gr.setColorAt(1.0, Qt::darkRed);
-
- m_graph->seriesList().at(0)->setBaseGradient(gr);
- m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-}
-
diff --git a/examples/datavisualization/surface/surfacegraph.h b/examples/datavisualization/surface/surfacegraph.h
deleted file mode 100644
index f23370f7..00000000
--- a/examples/datavisualization/surface/surfacegraph.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#ifndef SURFACEGRAPH_H
-#define SURFACEGRAPH_H
-
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QSurfaceDataProxy>
-#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtWidgets/QSlider>
-
-class SurfaceGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit SurfaceGraph(Q3DSurface *surface);
- ~SurfaceGraph();
-
- void enableHeightMapModel(bool enable);
- void enableSqrtSinModel(bool enable);
-
- //! [0]
- void toggleModeNone() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionNone); }
- void toggleModeItem() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItem); }
- void toggleModeSliceRow() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow
- | QAbstract3DGraph::SelectionSlice); }
- void toggleModeSliceColumn() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndColumn
- | QAbstract3DGraph::SelectionSlice); }
- //! [0]
-
- void setBlackToYellowGradient();
- void setGreenToRedGradient();
-
- void setAxisMinSliderX(QSlider *slider) { m_axisMinSliderX = slider; }
- void setAxisMaxSliderX(QSlider *slider) { m_axisMaxSliderX = slider; }
- void setAxisMinSliderZ(QSlider *slider) { m_axisMinSliderZ = slider; }
- void setAxisMaxSliderZ(QSlider *slider) { m_axisMaxSliderZ = slider; }
-
- void adjustXMin(int min);
- void adjustXMax(int max);
- void adjustZMin(int min);
- void adjustZMax(int max);
-
-public Q_SLOTS:
- void changeTheme(int theme);
-
-private:
- Q3DSurface *m_graph;
- QHeightMapSurfaceDataProxy *m_heightMapProxy;
- QSurfaceDataProxy *m_sqrtSinProxy;
- QSurface3DSeries *m_heightMapSeries;
- QSurface3DSeries *m_sqrtSinSeries;
-
- QSlider *m_axisMinSliderX;
- QSlider *m_axisMaxSliderX;
- QSlider *m_axisMinSliderZ;
- QSlider *m_axisMaxSliderZ;
- float m_rangeMinX;
- float m_rangeMinZ;
- float m_stepX;
- float m_stepZ;
- int m_heightMapWidth;
- int m_heightMapHeight;
-
- void setAxisXRange(float min, float max);
- void setAxisZRange(float min, float max);
- void fillSqrtSinProxy();
-};
-
-#endif // SURFACEGRAPH_H
diff --git a/examples/datavisualization/texturesurface/CMakeLists.txt b/examples/datavisualization/texturesurface/CMakeLists.txt
deleted file mode 100644
index ef1a6706..00000000
--- a/examples/datavisualization/texturesurface/CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(texturesurface LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-qt_add_executable(texturesurface
- custominputhandler.cpp custominputhandler.h
- highlightseries.cpp highlightseries.h
- main.cpp
- surfacegraph.cpp surfacegraph.h
- topographicseries.cpp topographicseries.h
-)
-set_target_properties(texturesurface PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(texturesurface PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
- Qt::DataVisualization
-)
-
-set_source_files_properties("maptexture.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "maptexture"
-)
-set_source_files_properties("topography.png"
- PROPERTIES QT_RESOURCE_ALIAS "topography"
-)
-set(texturedsurface_resource_files
- "maptexture.jpg"
- "topography.png"
-)
-
-qt6_add_resources(texturesurface "texturedsurface"
- PREFIX
- "/maps"
- FILES
- ${texturedsurface_resource_files}
-)
-
-install(TARGETS texturesurface
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/datavisualization/texturesurface/doc/images/texturesurface-example.png b/examples/datavisualization/texturesurface/doc/images/texturesurface-example.png
deleted file mode 100644
index 76819607..00000000
--- a/examples/datavisualization/texturesurface/doc/images/texturesurface-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc b/examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc
deleted file mode 100644
index 887d1b8f..00000000
--- a/examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example texturesurface
- \meta tags {DataVisualization, Q3DSurface, Textured Surface}
- \meta category {Graphics}
- \title Textured Surface Graph
- \ingroup qtdatavisualization_examples
- \brief Using texture with Q3DSurface.
- \since QtDataVisualization 1.2
-
- The textured surface graph example shows how to add an image as a texture for a surface. The
- example shows also how to:
-
- \list
- \li Create a surface series from an image
- \li Use custom input handler to enable zooming and panning
- \li Highlight an area of the surface
- \endlist
-
- \image texturesurface-example.png
-
- \include examples-run.qdocinc
-
- \section1 Texture to a Surface Series
-
- The image to be set as a texture to a surface can be set using QSurface3DSeries::setTextureFile().
- In this example we have added a check box to control if the texture is set or not. The
- following code extract is for reacting to the check box selections. The image in this
- example is read from the resource file where it is as a JPG file. Setting an empty file
- with the method clears the texture, and the surface uses the gradients or colors from the theme.
-
- \snippet texturesurface/surfacegraph.cpp 0
-
- \section1 Topographic Surface Series
-
- The topographic data for this example is obtained from National Land Survey of Finland. It
- provides a product called \c{Elevation Model 2 m}, which was suitable for our needs. We selected
- Levi fell to be shown. The accuracy of the data was well beyond our needs and therefore it
- is compressed and encoded into a PNG file. The height value from the original ASCII data is
- encoded into RGB format using a multiplier, which you will see later on a code extract.
- The multiplier is calculated simply by dividing the largest 24 bit value with the highest point
- in Finland.
-
- Qt Data Visualization has a special proxy for height map image files, but it converts
- only one byte values. So to utilize the bigger accuracy on the data from National Land
- Survey of Finland, we read the data from the PNG file and decode it into QSurface3DSeries.
- The following code samples show how this is done.
-
- First the encoding multiplier.
- \snippet texturesurface/topographicseries.cpp 0
-
- And then the actual decoding.
- \snippet texturesurface/topographicseries.cpp 1
-
- \section1 Use Custom Input Handler to Enable Zooming and Panning
-
- For the panning the implementation is similar to the \l{Input Handling for Axes}.
- The difference is that in this example we follow only dragging of X and Z axis and we don't
- allow dragging the surface outside the graph. The control for this is very simple and done as
- on the following example for the X axis.
-
- \snippet texturesurface/custominputhandler.cpp 0
-
- For the zooming we catch the \c wheelEvent and adjust the X and Y axis ranges according to delta
- value on QWheelEvent. The Y axis is also adjusted so that the aspect ratio between Y axis and
- XZ plane stays the same, and we don't get silly looking graph with height exaggerated too much.
-
- \snippet texturesurface/custominputhandler.cpp 1
-
- In this case we want to control the zoom level so that it won't get too near to or far from the
- surface. For instance, if the value for the X axis gets below the allowed, i.e. zooming gets too
- far, the value is set to the minimum allowed value. If the range is going to below the range
- minimum, both ends of the axis are adjusted so that the range stays at the limit.
-
- \snippet texturesurface/custominputhandler.cpp 2
-
- \section1 Highlight an Area of the Surface
-
- The main idea on creating a highlight on the surface is to create a copy of the series and add
- a bit of offset to the y value. On this example the class \c HighlightSeries implements the
- creation of the copy on its \c handlePositionChange method. Firstly the \c HighlightSeries
- needs to get the pointer to the original series and then it starts to listen the
- QSurface3DSeries::selectedPointChanged signal.
-
- \snippet texturesurface/highlightseries.cpp 0
-
- When the signal arrives, first thing is to check that the position is valid. Then the ranges
- for the copied area are calculated and checked that they stay within the bounds. Finally
- we simply fill the data array of the highlight series with the range from the data array of
- topography series.
-
- \snippet texturesurface/highlightseries.cpp 1
-
- \section1 A Gradient to the Highlight Series
-
- Since the \c HighlightSeries is QSurface3DSeries, we can use all the decoration methods series can
- have. In this example we added a gradient to emphasize the elevation. Because the suitable gradient
- style depends on the range of the Y axis and we change the range when zooming, we need to adjust
- the gradient color positions as the range change.
-
- For the gradient color positions we define proportional values.
-
- \snippet texturesurface/highlightseries.cpp 2
-
- The gradient modification is done on \c handleGradientChange method and we connect it to react to
- changes on Y axis.
-
- \snippet texturesurface/surfacegraph.cpp 1
-
- When a change on Y axis max value happens, we calculate the gradient color positions.
-
- \snippet texturesurface/highlightseries.cpp 3
-*/
diff --git a/examples/datavisualization/texturesurface/main.cpp b/examples/datavisualization/texturesurface/main.cpp
deleted file mode 100644
index fbc8c6e2..00000000
--- a/examples/datavisualization/texturesurface/main.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "surfacegraph.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QPainter>
-
-int main(int argc, char **argv)
-{
- qputenv("QSG_RHI_BACKEND", "opengl");
- QApplication app(argc, argv);
- Q3DSurface *graph = new Q3DSurface();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.6));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- vLayout->setAlignment(Qt::AlignTop);
-
- widget->setWindowTitle(QStringLiteral("Textured surface example"));
-
- QCheckBox *enableTexture = new QCheckBox(widget);
- enableTexture->setText(QStringLiteral("Surface texture"));
-
- int height = 400;
- int width = 100;
- int border = 10;
- QLinearGradient gr(0, 0, 1, height - 2 * border);
- gr.setColorAt(1.0f, Qt::black);
- gr.setColorAt(0.8f, Qt::darkGreen);
- gr.setColorAt(0.6f, Qt::green);
- gr.setColorAt(0.4f, Qt::yellow);
- gr.setColorAt(0.2f, Qt::red);
- gr.setColorAt(0.0f, Qt::darkRed);
-
- QPixmap pm(width, height);
- pm.fill(Qt::transparent);
- QPainter pmp(&pm);
- pmp.setBrush(QBrush(gr));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(border, border, 35, height - 2 * border);
- pmp.setPen(Qt::black);
- int step = (height - 2 * border) / 5;
- for (int i = 0; i < 6; i++) {
- int yPos = i * step + border;
- pmp.drawLine(border, yPos, 55, yPos);
- pmp.drawText(60, yPos + 2, QString("%1 m").arg(550 - (i * 110)));
- }
-
- QLabel *label = new QLabel(widget);
- label->setPixmap(pm);
-
- QGroupBox *heightMapGroupBox = new QGroupBox(QStringLiteral("Highlight color map"));
- QVBoxLayout *colorMapVBox = new QVBoxLayout;
- colorMapVBox->addWidget(label);
- heightMapGroupBox->setLayout(colorMapVBox);
-
- vLayout->addWidget(enableTexture);
- vLayout->addWidget(heightMapGroupBox);
-
- widget->show();
-
- SurfaceGraph *modifier = new SurfaceGraph(graph);
-
- QObject::connect(enableTexture, &QCheckBox::stateChanged,
- modifier, &SurfaceGraph::toggleSurfaceTexture);
-
- enableTexture->setChecked(true);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/texturesurface/surfacegraph.cpp b/examples/datavisualization/texturesurface/surfacegraph.cpp
deleted file mode 100644
index a7900914..00000000
--- a/examples/datavisualization/texturesurface/surfacegraph.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include "surfacegraph.h"
-#include "topographicseries.h"
-
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtDataVisualization/Q3DTheme>
-
-const float areaWidth = 8000.0f;
-const float areaHeight = 8000.0f;
-const float aspectRatio = 0.1389f;
-const float minRange = areaWidth * 0.49f;
-
-SurfaceGraph::SurfaceGraph(Q3DSurface *surface)
- : m_graph(surface)
-{
- m_graph->setAxisX(new QValue3DAxis);
- m_graph->setAxisY(new QValue3DAxis);
- m_graph->setAxisZ(new QValue3DAxis);
- m_graph->axisX()->setLabelFormat("%i");
- m_graph->axisZ()->setLabelFormat("%i");
- m_graph->axisX()->setRange(0.0f, areaWidth);
- m_graph->axisY()->setRange(100.0f, areaWidth * aspectRatio);
- m_graph->axisZ()->setRange(0.0f, areaHeight);
- m_graph->axisX()->setLabelAutoRotation(30);
- m_graph->axisY()->setLabelAutoRotation(90);
- m_graph->axisZ()->setLabelAutoRotation(30);
- m_graph->activeTheme()->setType(Q3DTheme::ThemePrimaryColors);
-
- QFont font = m_graph->activeTheme()->font();
- font.setPointSize(20);
- m_graph->activeTheme()->setFont(font);
-
- m_topography = new TopographicSeries();
- m_topography->setTopographyFile(":/maps/topography", areaWidth, areaHeight);
- m_topography->setItemLabelFormat(QStringLiteral("@yLabel m"));
-
- m_highlight = new HighlightSeries();
- m_highlight->setTopographicSeries(m_topography);
- m_highlight->setMinHeight(minRange * aspectRatio);
- m_highlight->handleGradientChange(areaWidth * aspectRatio);
-//! [1]
- QObject::connect(m_graph->axisY(), &QValue3DAxis::maxChanged,
- m_highlight, &HighlightSeries::handleGradientChange);
-//! [1]
-
- m_graph->addSeries(m_topography);
- m_graph->addSeries(m_highlight);
-
- m_inputHandler = new CustomInputHandler(m_graph);
- m_inputHandler->setHighlightSeries(m_highlight);
- m_inputHandler->setAxes(m_graph->axisX(), m_graph->axisY(), m_graph->axisZ());
- m_inputHandler->setLimits(0.0f, areaWidth, minRange);
- m_inputHandler->setAspectRatio(aspectRatio);
-
- m_graph->setActiveInputHandler(m_inputHandler);
-}
-
-SurfaceGraph::~SurfaceGraph()
-{
- delete m_graph;
-}
-
-//! [0]
-void SurfaceGraph::toggleSurfaceTexture(bool enable)
-{
- if (enable)
- m_topography->setTextureFile(":/maps/maptexture");
- else
- m_topography->setTextureFile("");
-}
-//! [0]
diff --git a/examples/datavisualization/texturesurface/surfacegraph.h b/examples/datavisualization/texturesurface/surfacegraph.h
deleted file mode 100644
index bae10f98..00000000
--- a/examples/datavisualization/texturesurface/surfacegraph.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#ifndef SURFACEGRAPH_H
-#define SURFACEGRAPH_H
-
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtWidgets/QSlider>
-#include "topographicseries.h"
-#include "highlightseries.h"
-
-#include "custominputhandler.h"
-
-class SurfaceGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit SurfaceGraph(Q3DSurface *surface);
- ~SurfaceGraph();
-
- void toggleSurfaceTexture(bool enable);
-
-private:
- Q3DSurface *m_graph;
-
- TopographicSeries *m_topography;
- HighlightSeries *m_highlight;
- int m_highlightWidth;
- int m_highlightHeight;
-
- CustomInputHandler *m_inputHandler;
-};
-
-#endif // SURFACEGRAPH_H
diff --git a/examples/datavisualization/texturesurface/texturedsurface.qrc b/examples/datavisualization/texturesurface/texturedsurface.qrc
deleted file mode 100644
index 94b96d24..00000000
--- a/examples/datavisualization/texturesurface/texturedsurface.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/maps">
- <file alias="topography">topography.png</file>
- <file alias="maptexture">maptexture.jpg</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/texturesurface/texturesurface.pro b/examples/datavisualization/texturesurface/texturesurface.pro
deleted file mode 100644
index efef1944..00000000
--- a/examples/datavisualization/texturesurface/texturesurface.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- surfacegraph.cpp \
- topographicseries.cpp \
- highlightseries.cpp \
- custominputhandler.cpp
-
-HEADERS += surfacegraph.h \
- topographicseries.h \
- highlightseries.h \
- custominputhandler.h
-
-QT += widgets
-
-RESOURCES += texturedsurface.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/volumetric/CMakeLists.txt b/examples/datavisualization/volumetric/CMakeLists.txt
index 1fbbb521..fcbf4e0f 100644
--- a/examples/datavisualization/volumetric/CMakeLists.txt
+++ b/examples/datavisualization/volumetric/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(volumetric LANGUAGES CXX)
diff --git a/examples/datavisualization/volumetric/doc/images/volumetric-example.png b/examples/datavisualization/volumetric/doc/images/volumetric-example.png
index 277d4fe4..6cc231d9 100644
--- a/examples/datavisualization/volumetric/doc/images/volumetric-example.png
+++ b/examples/datavisualization/volumetric/doc/images/volumetric-example.png
Binary files differ
diff --git a/examples/datavisualization/volumetric/doc/src/volumetric.qdoc b/examples/datavisualization/volumetric/doc/src/volumetric.qdoc
index ed177c87..54ac6b86 100644
--- a/examples/datavisualization/volumetric/doc/src/volumetric.qdoc
+++ b/examples/datavisualization/volumetric/doc/src/volumetric.qdoc
@@ -4,13 +4,12 @@
/*!
\example volumetric
\meta tags {DataVisualization, QCustom3DVolume, Custom Item}
- \meta category {Graphics}
\title Volumetric Rendering
\ingroup qtdatavisualization_examples
\brief Rendering volumetric objects.
\since QtDataVisualization 1.2
- This example shows how to use QCustom3DVolume items to display volumetric data.
+ \e {Volumetric Rendering} shows how to use QCustom3DVolume to display volumetric data.
\image volumetric-example.png
@@ -20,41 +19,41 @@
The QCustom3DVolume items are special custom items (see QCustom3DItem), which can be used
to display volumetric data. The volume items are only supported with orthographic projection,
- so first we make sure the graph is using it:
-
- \snippet volumetric/volumetric.cpp 6
-
- The following code shows how to create a volumetric item tied to the data ranges of the axes:
+ so first make sure the graph is using it:
\snippet volumetric/volumetric.cpp 0
- By setting the QCustom3DItem::scalingAbsolute property to \c{false}, we indicate that the
- scaling of the volume should follow the changes in the data ranges. Next we define the
- internal contents of the volume:
+ Create a volumetric item tied to the data ranges of the axes:
\snippet volumetric/volumetric.cpp 1
- We use eight bit indexed color for our texture, as it is compact and makes it easy to adjust the
- colors without needing to reset the whole texture. For the texture data we use the data we
- created earlier based on some height maps.
- Typically the data for volume items comes pregenerated in a form of a stack of images, so we are
- not going to explain the data generation in detail. Please refer to the example code if you
- are interested in the actual data generation process.
-
- Since we are using eight bit indexed colors, we need a color table to map the eight bit color
- indexes to actual colors. We use one we populated on our own, but in a typical use case you
- would get the color table from the source images:
+ Indicate that the scaling of the volume should follow the changes in the data ranges by setting
+ the QCustom3DItem::scalingAbsolute property to \c{false}. Next, define the internal contents of
+ the volume:
\snippet volumetric/volumetric.cpp 2
- We want to optionally show slice frames around the volume, so we initialize their properties.
+ Use eight bit indexed color for the texture, as it is compact and makes it easy to adjust the
+ colors without needing to reset the whole texture. For the texture data, use the data created
+ earlier based on height maps.
+ Typically, the data for volume items comes pregenerated in the form of a stack of images, so
+ the data generation details can be skipped. For more information about the actual data
+ generation process, see the example code.
+
+ Since eight bit indexed colors are used, a color table is needed to map the eight bit color
+ indexes to actual colors. In a typical use case, you would get the color table from the source
+ images instead of using one manually defined:
+
+ \snippet volumetric/volumetric.cpp 3
+
+ To have an option to show slice frames around the volume, initialize their properties.
Initially, the frames will be hidden:
- \snippet volumetric/volumetric.cpp 5
+ \snippet volumetric/volumetric.cpp 4
- Finally we add the volume as a custom item to the graph to display it:
+ Finally, add the volume as a custom item to the graph to display it:
- \snippet volumetric/volumetric.cpp 3
+ \snippet volumetric/volumetric.cpp 5
\section1 Slicing into the Volume
@@ -62,28 +61,27 @@
not very helpful. One way to inspect the internal structure of the volume is to view the slices
of the volume. QCustom3DVolume provides two ways to display the slices. The first is to show
the selected slices in place of the volume. For example, to specify a slice perpendicular to
- the X-axis, you can use the following method:
+ the X-axis, use the following method:
- \snippet volumetric/volumetric.cpp 7
+ \snippet volumetric/volumetric.cpp 6
- To actually draw the slice specified above, the QCustom3DVolume::drawSlices property must be
- also set:
+ To display the slice specified above, the QCustom3DVolume::drawSlices property must also be set:
- \snippet volumetric/volumetric.cpp 8
+ \snippet volumetric/volumetric.cpp 7
The second way to view slices is to use QCustom3DVolume::renderSlice() method, which produces
a QImage from the specified slice. This image can then be displayed on another widget, such
- as a QLabel here:
+ as a QLabel:
- \snippet volumetric/volumetric.cpp 9
+ \snippet volumetric/volumetric.cpp 8
\section1 Adjusting Volume Transparency
- Sometimes viewing just the slices doesn't give you a good understanding of the volume's internal
- structure. QCustom3DVolume provides two properties that can be used to adjust the volume
- transparency:
+ Sometimes, viewing just the slices doesn't give you a good understanding of the volume's
+ internal structure. QCustom3DVolume provides two properties that can be used to adjust the
+ volume transparency:
- \snippet volumetric/volumetric.cpp 11
+ \snippet volumetric/volumetric.cpp 9
\dots
\snippet volumetric/volumetric.cpp 10
@@ -93,26 +91,25 @@
doesn't affect colors that are fully opaque, unless the QCustom3DVolume::preserveOpacity
property is set to \c{false}.
- An alternative way to adjust the transparency of the volume is adjust the alpha values of the
- voxels directly. For eight bit indexed textures, this is done simply by modifying and
- resetting the color table:
+ An alternative way to adjust the transparency of the volume is to adjust the alpha values of the
+ voxels directly. For eight bit indexed textures, this is done simply by modifying and resetting
+ the color table:
- \snippet volumetric/volumetric.cpp 12
+ \snippet volumetric/volumetric.cpp 11
\section1 High Definition vs. Low Definition Shader
- By default the volume rendering uses the high definition shader. It accounts for each
- voxel of the volume with correct weight when ray-tracing the volume contents,
- providing an accurate representation of even the finer details of the volume.
+ By default, the volumetric rendering uses a high definition shader. It accounts for each
+ voxel of the volume with the correct weight when ray-tracing the volume contents, providing an
+ accurate representation of even the finer details of the volume.
However, this is computationally very expensive, so the frame rate suffers.
- If rendering speed is more important than pixel-perfect
- accuracy of the volume contents, you can take the much faster low definition shader into use
- by setting \c{false} for QCustom3DVolume::useHighDefShader property. The low definition shader
- achieves the speed by making compromises on the accuracy, so it doesn't guarantee each voxel
- of the volume will be sampled. This can lead to flickering and/or other rendering artifacts
- on the finer details of the volume.
-
- \snippet volumetric/volumetric.cpp 13
+ If rendering speed is more important than pixel-perfect accuracy of the volume contents, take
+ the much faster low definition shader into use by setting QCustom3DVolume::useHighDefShader
+ property \c{false}. The low definition shader achieves the speed by making compromises on
+ accuracy, so it doesn't guarantee that every voxel of the volume will be sampled. This can lead
+ to flickering or other rendering artifacts on the finer details of the volume.
+
+ \snippet volumetric/volumetric.cpp 12
\section1 Example Contents
*/
diff --git a/examples/datavisualization/volumetric/main.cpp b/examples/datavisualization/volumetric/main.cpp
index e8016bd7..7bbf1d1d 100644
--- a/examples/datavisualization/volumetric/main.cpp
+++ b/examples/datavisualization/volumetric/main.cpp
@@ -1,19 +1,18 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "volumetric.h"
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qwidget.h>
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qradiobutton.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qgroupbox.h>
+#include <QtWidgets/qmessagebox.h>
+#include <QtGui/qscreen.h>
int main(int argc, char **argv)
{
@@ -30,7 +29,7 @@ int main(int argc, char **argv)
}
QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 3, screenSize.height() / 3));
+ container->setMinimumSize(QSize(screenSize.width() / 3, screenSize.height() / 2));
container->setMaximumSize(screenSize);
container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
container->setFocusPolicy(Qt::StrongFocus);
@@ -43,7 +42,7 @@ int main(int argc, char **argv)
hLayout->addLayout(vLayout);
hLayout->addLayout(vLayout2);
- widget->setWindowTitle(QStringLiteral("Volumetric object example - 3D terrain"));
+ widget->setWindowTitle(QStringLiteral("Volumetric Rendering - 3D Terrain"));
QCheckBox *sliceXCheckBox = new QCheckBox(widget);
sliceXCheckBox->setText(QStringLiteral("Slice volume on X axis"));
@@ -79,7 +78,7 @@ int main(int argc, char **argv)
QGroupBox *textureDetailGroupBox = new QGroupBox(QStringLiteral("Texture detail"));
QRadioButton *lowDetailRB = new QRadioButton(widget);
- lowDetailRB->setText(QStringLiteral("Low (128x64x128)"));
+ lowDetailRB->setText(QStringLiteral("Low (256x128x256)"));
lowDetailRB->setChecked(true);
QRadioButton *mediumDetailRB = new QRadioButton(widget);
diff --git a/examples/datavisualization/volumetric/volumetric.cpp b/examples/datavisualization/volumetric/volumetric.cpp
index dab8caa8..3475c85b 100644
--- a/examples/datavisualization/volumetric/volumetric.cpp
+++ b/examples/datavisualization/volumetric/volumetric.cpp
@@ -1,24 +1,16 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "volumetric.h"
#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/q3dtheme.h>
#include <QtDataVisualization/qcustom3dlabel.h>
-#include <QtDataVisualization/q3dscatter.h>
#include <QtDataVisualization/q3dinputhandler.h>
#include <QtCore/qmath.h>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSlider>
-#include <QtCore/QDebug>
-#include <QtGui/QOpenGLContext>
-
-const int lowDetailSize(128);
-const int mediumDetailSize(256);
-const int highDetailSize(512);
+#include <QtGui/qopenglcontext.h>
+
+const int lowDetailSize(256);
+const int mediumDetailSize(512);
+const int highDetailSize(1024);
const int colorTableSize(256);
const int layerDataSize(512);
const int mineShaftDiameter(1);
@@ -41,8 +33,6 @@ static bool isOpenGLES()
{
#if QT_CONFIG(opengles2)
return true;
-#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0))
- return false;
#else
return QOpenGLContext::currentContext()->isOpenGLES();
#endif
@@ -50,36 +40,16 @@ static bool isOpenGLES()
VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
: m_graph(scatter),
- m_volumeItem(0),
m_sliceIndexX(lowDetailSize / 2),
m_sliceIndexY(lowDetailSize / 4),
- m_sliceIndexZ(lowDetailSize / 2),
- m_slicingX(false),
- m_slicingY(false),
- m_slicingZ(false),
- m_mediumDetailRB(0),
- m_highDetailRB(0),
- m_lowDetailData(0),
- m_mediumDetailData(0),
- m_highDetailData(0),
- m_mediumDetailIndex(0),
- m_highDetailIndex(0),
- m_mediumDetailShaftIndex(0),
- m_highDetailShaftIndex(0),
- m_sliceSliderX(0),
- m_sliceSliderY(0),
- m_sliceSliderZ(0),
- m_usingPrimaryTable(true),
- m_sliceLabelX(0),
- m_sliceLabelY(0),
- m_sliceLabelZ(0)
-{
- m_graph->activeTheme()->setType(Q3DTheme::ThemeQt);
+ m_sliceIndexZ(lowDetailSize / 2)
+{
+ m_graph->activeTheme()->setType(Q3DTheme::ThemePrimaryColors);
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
- //! [6]
+ m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricLeft);
+ //! [0]
m_graph->setOrthoProjection(true);
- //! [6]
+ //! [0]
m_graph->activeTheme()->setBackgroundEnabled(false);
// Only allow zooming at the center and limit the zoom to 200% to avoid clipping issues
@@ -89,10 +59,12 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
toggleAreaAll(true);
if (!isOpenGLES()) {
- m_lowDetailData = new QList<uchar>(lowDetailSize * lowDetailSize * lowDetailSize / 2);
- m_mediumDetailData =
- new QList<uchar>(mediumDetailSize * mediumDetailSize * mediumDetailSize / 2);
- m_highDetailData = new QList<uchar>(highDetailSize * highDetailSize * highDetailSize / 2);
+ m_lowDetailData
+ = new QList<uchar>(lowDetailSize * lowDetailSize * lowDetailSize / 2);
+ m_mediumDetailData
+ = new QList<uchar>(mediumDetailSize * mediumDetailSize * mediumDetailSize / 2);
+ m_highDetailData
+ = new QList<uchar>(highDetailSize * highDetailSize * highDetailSize / 2);
initHeightMap(QStringLiteral(":/heightmaps/layer_ground.png"), m_groundLayer);
initHeightMap(QStringLiteral(":/heightmaps/layer_water.png"), m_waterLayer);
@@ -103,7 +75,7 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
createVolume(lowDetailSize, 0, lowDetailSize, m_lowDetailData);
excavateMineShaft(lowDetailSize, 0, m_mineShaftArray.size(), m_lowDetailData);
- //! [0]
+ //! [1]
m_volumeItem = new QCustom3DVolume;
// Adjust water level to zero with a minor tweak to y-coordinate position and scaling
m_volumeItem->setScaling(
@@ -116,16 +88,16 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
(m_graph->axisY()->max() + m_graph->axisY()->min()) / 2.0f,
(m_graph->axisZ()->max() + m_graph->axisZ()->min()) / 2.0f));
m_volumeItem->setScalingAbsolute(false);
- //! [0]
//! [1]
+ //! [2]
m_volumeItem->setTextureWidth(lowDetailSize);
m_volumeItem->setTextureHeight(lowDetailSize / 2);
m_volumeItem->setTextureDepth(lowDetailSize);
m_volumeItem->setTextureFormat(QImage::Format_Indexed8);
m_volumeItem->setTextureData(new QList<uchar>(*m_lowDetailData));
- //! [1]
+ //! [2]
- // Generate color tables.
+ // Generate color tables
m_colorTable1.resize(colorTableSize);
m_colorTable2.resize(colorTableSize);
@@ -156,13 +128,17 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
if (i < magmaColorsMax) {
m_colorTable2[i] = qRgba(((i - aboveWaterGroundColorsMax) * 2),
((i - aboveWaterGroundColorsMax) * 2),
- ((i - aboveWaterGroundColorsMax) * 2), 255);
+ ((i - aboveWaterGroundColorsMax) * 2),
+ 255);
} else if (i < underWaterGroundColorsMax) {
m_colorTable2[i] = qRgba(((i - aboveWaterGroundColorsMax) * 2),
((i - aboveWaterGroundColorsMax) * 2),
- ((i - aboveWaterGroundColorsMax) * 2), terrainTransparency);
+ ((i - aboveWaterGroundColorsMax) * 2),
+ terrainTransparency);
} else if (i < waterColorsMax) {
- m_colorTable2[i] = qRgba(0, 0, ((i - underWaterGroundColorsMax) * 2) + 120,
+ m_colorTable2[i] = qRgba(0,
+ 0,
+ ((i - underWaterGroundColorsMax) * 2) + 120,
terrainTransparency);
} else {
m_colorTable2[i] = qRgba(0, 0, 0, 0); // Not used
@@ -171,21 +147,21 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_colorTable2[airColorIndex] = qRgba(0, 0, 0, 0);
m_colorTable2[mineShaftColorIndex] = qRgba(255, 255, 0, 255);
- //! [2]
+ //! [3]
m_volumeItem->setColorTable(m_colorTable1);
- //! [2]
+ //! [3]
- //! [5]
+ //! [4]
m_volumeItem->setSliceFrameGaps(QVector3D(0.01f, 0.02f, 0.01f));
m_volumeItem->setSliceFrameThicknesses(QVector3D(0.0025f, 0.005f, 0.0025f));
m_volumeItem->setSliceFrameWidths(QVector3D(0.0025f, 0.005f, 0.0025f));
m_volumeItem->setDrawSliceFrames(false);
- //! [5]
+ //! [4]
handleSlicingChanges();
- //! [3]
+ //! [5]
m_graph->addCustomItem(m_volumeItem);
- //! [3]
+ //! [5]
m_timer.start(0);
} else {
@@ -269,13 +245,13 @@ void VolumetricModifier::adjustSliceX(int value)
if (m_sliceIndexX == m_volumeItem->textureWidth())
m_sliceIndexX--;
if (m_volumeItem->sliceIndexX() != -1)
- //! [7]
+ //! [6]
m_volumeItem->setSliceIndexX(m_sliceIndexX);
- //! [7]
- //! [9]
+ //! [6]
+ //! [8]
m_sliceLabelX->setPixmap(
QPixmap::fromImage(m_volumeItem->renderSlice(Qt::XAxis, m_sliceIndexX)));
- //! [9]
+ //! [8]
}
}
@@ -431,7 +407,7 @@ void VolumetricModifier::setPreserveOpacity(bool enabled)
void VolumetricModifier::setTransparentGround(bool enabled)
{
if (m_volumeItem) {
- //! [12]
+ //! [11]
int newAlpha = enabled ? terrainTransparency : 255;
for (int i = aboveWaterGroundColorsMin; i < underWaterGroundColorsMax; i++) {
QRgb oldColor1 = m_colorTable1.at(i);
@@ -443,7 +419,7 @@ void VolumetricModifier::setTransparentGround(bool enabled)
m_volumeItem->setColorTable(m_colorTable1);
else
m_volumeItem->setColorTable(m_colorTable2);
- //! [12]
+ //! [11]
adjustSliceX(m_sliceSliderX->value());
adjustSliceY(m_sliceSliderY->value());
adjustSliceZ(m_sliceSliderZ->value());
@@ -453,9 +429,9 @@ void VolumetricModifier::setTransparentGround(bool enabled)
void VolumetricModifier::setUseHighDefShader(bool enabled)
{
if (m_volumeItem) {
- //! [13]
+ //! [12]
m_volumeItem->setUseHighDefShader(enabled);
- //! [13]
+ //! [12]
}
}
@@ -467,9 +443,9 @@ void VolumetricModifier::adjustAlphaMultiplier(int value)
mult = float(value - 99) / 2.0f;
else
mult = float(value) / float(500 - value * 4);
- //! [11]
+ //! [9]
m_volumeItem->setAlphaMultiplier(mult);
- //! [11]
+ //! [9]
QString labelFormat = QStringLiteral("Alpha multiplier: %1");
m_alphaMultiplierLabel->setText(labelFormat.arg(
QString::number(m_volumeItem->alphaMultiplier(), 'f', 3)));
@@ -624,8 +600,6 @@ int VolumetricModifier::excavateMineShaft(int textureSize, int startIndex, int c
dataIndex += (textureSize * textureSize / 2) * shaftSize;
}
}
-
-
}
return endIndex;
}
@@ -643,7 +617,6 @@ void VolumetricModifier::excavateMineBlock(int textureSize, int dataIndex, int s
(*textureData)[curIndex] = mineShaftColorIndex;
curIndex++;
}
-
}
}
}
@@ -653,9 +626,9 @@ void VolumetricModifier::handleSlicingChanges()
if (m_volumeItem) {
if (m_slicingX || m_slicingY || m_slicingZ) {
// Only show slices of selected dimensions
- //! [8]
+ //! [7]
m_volumeItem->setDrawSlices(true);
- //! [8]
+ //! [7]
m_volumeItem->setSliceIndexX(m_slicingX ? m_sliceIndexX : -1);
m_volumeItem->setSliceIndexY(m_slicingY ? m_sliceIndexY : -1);
m_volumeItem->setSliceIndexZ(m_slicingZ ? m_sliceIndexZ : -1);
diff --git a/examples/datavisualization/volumetric/volumetric.h b/examples/datavisualization/volumetric/volumetric.h
index ae03a3ad..68bbb0dc 100644
--- a/examples/datavisualization/volumetric/volumetric.h
+++ b/examples/datavisualization/volumetric/volumetric.h
@@ -1,16 +1,16 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VOLUMETRICMODIFIER_H
#define VOLUMETRICMODIFIER_H
#include <QtDataVisualization/q3dscatter.h>
#include <QtDataVisualization/qcustom3dvolume.h>
-#include <QtCore/QTimer>
-#include <QtGui/QRgb>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QRadioButton>
+#include <QtCore/qtimer.h>
+#include <QtGui/qrgb.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qradiobutton.h>
class VolumetricModifier : public QObject
{
@@ -57,39 +57,39 @@ private:
void excavateMineBlock(int textureSize, int dataIndex, int size, QList<uchar> *textureData);
void handleSlicingChanges();
- Q3DScatter *m_graph;
- QCustom3DVolume *m_volumeItem;
- int m_sliceIndexX;
- int m_sliceIndexY;
- int m_sliceIndexZ;
- bool m_slicingX;
- bool m_slicingY;
- bool m_slicingZ;
- QLabel *m_fpsLabel;
- QRadioButton *m_mediumDetailRB;
- QRadioButton *m_highDetailRB;
- QList<uchar> *m_lowDetailData;
- QList<uchar> *m_mediumDetailData;
- QList<uchar> *m_highDetailData;
+ Q3DScatter *m_graph = nullptr;
+ QCustom3DVolume *m_volumeItem = nullptr;
+ int m_sliceIndexX = 0;
+ int m_sliceIndexY = 0;
+ int m_sliceIndexZ = 0;
+ bool m_slicingX = false;
+ bool m_slicingY = false;
+ bool m_slicingZ = false;
+ QLabel *m_fpsLabel = nullptr;
+ QRadioButton *m_mediumDetailRB = nullptr;
+ QRadioButton *m_highDetailRB = nullptr;
+ QList<uchar> *m_lowDetailData = nullptr;
+ QList<uchar> *m_mediumDetailData = nullptr;
+ QList<uchar> *m_highDetailData = nullptr;
+ int m_mediumDetailIndex = 0;
+ int m_highDetailIndex = 0;
+ int m_mediumDetailShaftIndex = 0;
+ int m_highDetailShaftIndex = 0;
+ QSlider *m_sliceSliderX = nullptr;
+ QSlider *m_sliceSliderY = nullptr;
+ QSlider *m_sliceSliderZ = nullptr;
+ QList<QRgb> m_colorTable1 = {};
+ QList<QRgb> m_colorTable2 = {};
+ bool m_usingPrimaryTable = true;
+ QLabel *m_sliceLabelX = nullptr;
+ QLabel *m_sliceLabelY = nullptr;
+ QLabel *m_sliceLabelZ = nullptr;
+ QLabel *m_alphaMultiplierLabel = nullptr;
+ QList<uchar> m_magmaLayer = {};
+ QList<uchar> m_waterLayer = {};
+ QList<uchar> m_groundLayer = {};
+ QList<QPair<QVector3D, QVector3D>> m_mineShaftArray = {};
QTimer m_timer;
- int m_mediumDetailIndex;
- int m_highDetailIndex;
- int m_mediumDetailShaftIndex;
- int m_highDetailShaftIndex;
- QSlider *m_sliceSliderX;
- QSlider *m_sliceSliderY;
- QSlider *m_sliceSliderZ;
- QList<QRgb> m_colorTable1;
- QList<QRgb> m_colorTable2;
- bool m_usingPrimaryTable;
- QLabel *m_sliceLabelX;
- QLabel *m_sliceLabelY;
- QLabel *m_sliceLabelZ;
- QLabel *m_alphaMultiplierLabel;
- QList<uchar> m_magmaLayer;
- QList<uchar> m_waterLayer;
- QList<uchar> m_groundLayer;
- QList<QPair<QVector3D, QVector3D>> m_mineShaftArray;
};
#endif
diff --git a/licenseRule.json b/licenseRule.json
new file mode 100644
index 00000000..6d75da27
--- /dev/null
+++ b/licenseRule.json
@@ -0,0 +1,89 @@
+[
+ {
+ "comment" : ["file_pattern_ending: strings matched against the end of a file name.",
+ "location keys: regular expression matched against the beginning of",
+ "the file path (relative to the git submodule root).",
+ "spdx: list of SPDX-License-Expression's allowed in the matching files.",
+ "-------------------------------------------------------",
+ "Files with the following endings are Build System licensed,",
+ "unless they are examples",
+ "Files with other endings can also be build system files"
+ ],
+ "file_pattern_ending" : ["CMakeLists.txt", ".cmake", ".pro", ".pri", ".prf",
+ "configure", "configure.bat", "cmake.in", "plist.in", "CMakeLists.txt.in"],
+ "location" : {
+ "" : {
+ "comment" : "Default",
+ "file type" : "build system",
+ "spdx" : ["BSD-3-Clause"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Example takes precedent",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ },
+ {
+ "comments" : ["Files with the following endings are Tool licensed,",
+ "unless they are examples.",
+ "Files with other endings can also be tool files."],
+ "file_pattern_ending" : [".sh", ".py", ".pl", ".bat", ".ps1"],
+ "location" :{
+ "" : {
+ "comment" : "Default",
+ "file type" : "tools and utils",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Example takes precedent",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ },
+ {
+ "comment" : "Files with the following endings are Documentation licensed.",
+ "file_pattern_ending" : [".qdoc", ".qdocinc" , ".qdocconf", ".txt", "README", "qt_attribution.json"],
+ "location" :{
+ "" : {
+ "comment" : "",
+ "file type" : "documentation",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only"]
+ }
+ }
+ },
+ {
+ "comment" : ["All other files",
+ "The licensing is defined only by the file location in the Qt module repository.",
+ "NO <file_pattern_ending> key for this case!",
+ "This needs to be the last entry of the file."],
+ "location" : {
+ "" : {
+ "comment" : "Default",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "src/" : {
+ "comment" : "Default",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "tests/" : {
+ "comment" : "Default",
+ "file type" : "test",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Default",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ },
+ "tests/auto/cpptest/common/cpptestutil\\.h" : {
+ "comment" : "",
+ "file type" : "util",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ }
+ }
+ }
+]
diff --git a/src/datavisualization/CMakeLists.txt b/src/datavisualization/CMakeLists.txt
index 0d76f126..27f82340 100644
--- a/src/datavisualization/CMakeLists.txt
+++ b/src/datavisualization/CMakeLists.txt
@@ -80,6 +80,20 @@ qt_internal_add_module(DataVisualization
utils/texturehelper.cpp utils/texturehelper_p.h
utils/utils.cpp utils/utils_p.h
utils/vertexindexer.cpp utils/vertexindexer_p.h
+ NO_PCH_SOURCES
+ # undef QT_NO_FOREACH:
+ engine/abstract3dcontroller.cpp
+ engine/abstract3drenderer.cpp
+ engine/axisrendercache.cpp
+ engine/bars3dcontroller.cpp
+ engine/bars3drenderer.cpp
+ engine/q3dscatter.cpp
+ engine/q3dsurface.cpp
+ engine/scatter3dcontroller.cpp
+ engine/scatter3drenderer.cpp
+ engine/surface3dcontroller.cpp
+ engine/surface3drenderer.cpp
+ # end undef QT_NO_FOREACH
INCLUDE_DIRECTORIES
axis
data
@@ -88,13 +102,10 @@ qt_internal_add_module(DataVisualization
input
theme
utils
- ../datavisualizationqml
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui
Qt::OpenGL
- Qt::Qml
- Qt::Quick
GENERATE_CPP_EXPORTS
)
@@ -402,6 +413,17 @@ qt_internal_extend_target(DataVisualization CONDITION MACOS
PRIVATE_MODULE_INTERFACE
Qt::GuiPrivate
)
+
+qt_internal_extend_target(DataVisualization CONDITION MINGW
+ NO_UNITY_BUILD_SOURCES
+ data/qbardataitem.cpp
+ data/qscatterdataitem.cpp
+ data/qsurfacedataitem.cpp
+ # MinGW triggers `-Werror=maybe-uninitialized` on d_ptr while
+ # proper checks are in place and d_ptr is initialized in
+ # operator=()
+)
+
qt_internal_add_docs(DataVisualization
doc/qtdatavis3d.qdocconf
)
diff --git a/src/datavisualization/data/abstractitemmodelhandler_p.h b/src/datavisualization/data/abstractitemmodelhandler_p.h
index 9bdd8683..64e61838 100644
--- a/src/datavisualization/data/abstractitemmodelhandler_p.h
+++ b/src/datavisualization/data/abstractitemmodelhandler_p.h
@@ -65,6 +65,8 @@ private:
Q_DISABLE_COPY(AbstractItemModelHandler)
};
+static constexpr int noRoleIndex = -1;
+
QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/baritemmodelhandler.cpp b/src/datavisualization/data/baritemmodelhandler.cpp
index dfc0640e..4a8c8faa 100644
--- a/src/datavisualization/data/baritemmodelhandler.cpp
+++ b/src/datavisualization/data/baritemmodelhandler.cpp
@@ -5,8 +5,6 @@
QT_BEGIN_NAMESPACE
-static const int noRoleIndex = -1;
-
BarItemModelHandler::BarItemModelHandler(QItemModelBarDataProxy *proxy, QObject *parent)
: AbstractItemModelHandler(parent),
m_proxy(proxy),
diff --git a/src/datavisualization/data/scatteritemmodelhandler.cpp b/src/datavisualization/data/scatteritemmodelhandler.cpp
index d7e61a92..8aa4ba7d 100644
--- a/src/datavisualization/data/scatteritemmodelhandler.cpp
+++ b/src/datavisualization/data/scatteritemmodelhandler.cpp
@@ -5,8 +5,6 @@
QT_BEGIN_NAMESPACE
-static const int noRoleIndex = -1;
-
ScatterItemModelHandler::ScatterItemModelHandler(QItemModelScatterDataProxy *proxy, QObject *parent)
: AbstractItemModelHandler(parent),
m_proxy(proxy),
diff --git a/src/datavisualization/data/surfaceitemmodelhandler.cpp b/src/datavisualization/data/surfaceitemmodelhandler.cpp
index 31af3f6e..bdec0308 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler.cpp
+++ b/src/datavisualization/data/surfaceitemmodelhandler.cpp
@@ -5,8 +5,6 @@
QT_BEGIN_NAMESPACE
-static const int noRoleIndex = -1;
-
SurfaceItemModelHandler::SurfaceItemModelHandler(QItemModelSurfaceDataProxy *proxy, QObject *parent)
: AbstractItemModelHandler(parent),
m_proxy(proxy),
diff --git a/src/datavisualization/doc/qtdatavis3d.qdocconf b/src/datavisualization/doc/qtdatavis3d.qdocconf
index 3e0309a0..952cac3e 100644
--- a/src/datavisualization/doc/qtdatavis3d.qdocconf
+++ b/src/datavisualization/doc/qtdatavis3d.qdocconf
@@ -47,5 +47,3 @@ qhp.QtDataVis3D.subprojects.types.sortPages = true
navigation.landingpage = Qt Data Visualization
navigation.cppclassespage = Qt Data Visualization C++ Classes
navigation.qmltypespage = Qt Data Visualization QML Types
-
-manifestmeta.highlighted.names = "QtDataVis3D/Textured Surface Example"
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp b/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
index 5cae4483..2f10a988 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [3]
#include <QtDataVisualization>
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp b/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
index b8369526..5bf508f3 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [3]
#include <QtDataVisualization>
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp b/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
index c2baaf15..3946ede6 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [5]
#include <QtDataVisualization>
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp b/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp
index f0802549..a192976d 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtDataVisualization/Q3DBars>
#include <QtDataVisualization/Q3DTheme>
diff --git a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
index a6e45d48..488d3a6f 100644
--- a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
import QtDataVisualization 1.2
diff --git a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
index 89a34cfe..fa4e5178 100644
--- a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
#include <QtDataVisualization>
diff --git a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro
index 195567b3..00652a42 100644
--- a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro
+++ b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro
@@ -1,5 +1,5 @@
// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
QT += datavisualization
diff --git a/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc b/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc
index 3db3a8f7..0bf83ec4 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc
@@ -5,6 +5,7 @@
\title Qt Data Visualization Overview
\page qtdatavisualization-overview.html
\brief An overview of the Qt Data Visualization module.
+ \ingroup explanation
The Qt Data Visualization module provides a way to develop rapidly
responding, complex, and dynamic 3D visualization for analytical demanding
@@ -55,8 +56,8 @@
\image q3dbars-minimal.png
- For more information, see \l{How to construct a minimal Q3DBars graph},
- \l {Bar Graph}, and \l {Simple Bar Graph} examples.
+ For more information, see \l{How to construct a minimal Q3DBars graph}, and
+ \l {Simple Bar Graph} examples.
\section2 3D Scatter Graphs
@@ -68,8 +69,8 @@
\image q3dscatter-minimal.png
- For more information, see \l{How to construct a minimal Q3DScatter graph},
- \l{Scatter Graph}, and \l{Simple Scatter Graph} examples.
+ For more information, see \l{How to construct a minimal Q3DScatter graph}, and
+ \l{Simple Scatter Graph} examples.
\section2 3D Surface Graphs
@@ -81,8 +82,8 @@
\image q3dsurface-minimal.png
- For more information, see \l{How to construct a minimal Q3DSurface graph},
- \l{Surface Graph}, \l{Textured Surface Graph}, and \l{Surface Graph from Height Data} examples.
+ For more information, see \l{How to construct a minimal Q3DSurface graph}, \l{Graph Gallery},
+ and \l{Surface Graph Gallery} examples.
\section1 Using OpenGL for Rendering Data
@@ -186,7 +187,7 @@
If a graph displays the data from several data series, some settings can be
specified separately for each series. For example, different gradients can
be specified for different layers of the graph to make it look more
- realistic. For an example, see \l{Custom Items in Graph}.
+ realistic. For an example, see \l{Surface Graph Gallery}.
\section1 Customizing 3D Scenes
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
index 922a9c03..c2bb0cc5 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
@@ -284,7 +284,7 @@
* \c selectedElementChanged signal is emitted.
*
* The signal can be used for example for implementing customized input
- * handling, as demonstrated by the \l {Axis Dragging} example.
+ * handling, as demonstrated by the \l {Axis Handling} example.
*
* \sa selectedLabelIndex(), selectedAxis(), selectedCustomItemIndex(), selectedCustomItem(),
* Bars3D::selectedSeries, Scatter3D::selectedSeries, Scene3D::selectionQueryPosition,
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc
index 12fb6650..cb8b70d2 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc
@@ -17,4 +17,6 @@
The color property describes the color of this ThemeColor.
The default color is black.
+
+ \note Transparency is not supported and will result in undefined behavior.
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc
index d3375a90..36277944 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc
@@ -30,6 +30,8 @@
The default color is black.
+ \note Transparency in a gradient is not supported and will result in undefined behavior.
+
\sa ColorGradient
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
index 438d6163..b8f47fd3 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
@@ -19,7 +19,7 @@
\snippet doc_src_qmldatavisualization.cpp 3
- See \l{Surface Graph from Height Data} for more thorough usage example.
+ See \l{Surface Graph Gallery} for more thorough usage example.
\sa Surface3DSeries, ItemModelSurfaceDataProxy, Bars3D, Scatter3D, {Qt Data Visualization C++ Classes}
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization.qdoc b/src/datavisualization/doc/src/qtdatavisualization.qdoc
index ea5b2047..5b91c2da 100644
--- a/src/datavisualization/doc/src/qtdatavisualization.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization.qdoc
@@ -27,7 +27,6 @@
/*!
\group datavisualization_examples
- \ingroup all-examples
\title Qt Data Visualization Examples
\brief Examples for the Qt Data Visualization.
@@ -113,9 +112,9 @@
QHeightMapSurfaceDataProxy is a specialized proxy for generating a surface graph from a
heightmap image. See the QHeightMapSurfaceDataProxy documentation for more information.
- The \l{Data from Custom Proxy}{Custom Proxy} example shows how a custom proxy can be created. It
- defines a custom data set based on variant lists and an extension of the basic proxy to resolve
- that data with an associated mapper.
+ The \l{Graph Gallery} example shows how a custom proxy can be created, under the
+ \uicontrol {Bar Graph} tab. It defines a custom data set based on variant lists and an
+ extension of the basic proxy to resolve that data with an associated mapper.
\section1 Dealing with Real-time Data
@@ -163,8 +162,8 @@
the default touch controls, see QTouch3DInputHandler. The default handlers
must be disabled when using customized input handlers.
- The \l{Input Handling for Axes} illustrates how to use a custom input handler
- to drag an axis label to move the visible part of the data.
+ The \l{Graph Gallery} example, under \uicontrol {Scatter Graph} tab, illustrates how to use
+ a custom input handler to drag an axis label to move the visible part of the data.
In addition to perspective projection, orthographic projection can be used
to create 2D graphs by replacing the default input handler with one that
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 700af4fe..f7d7f206 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -1,7 +1,9 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-#include "abstractdeclarative_p.h"
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
+#include "abstractdeclarativeinterface_p.h"
#include "abstract3dcontroller_p.h"
#include "qabstract3daxis_p.h"
#include "qvalue3daxis_p.h"
@@ -1592,7 +1594,7 @@ bool Abstract3DController::isOrthoProjection() const
void Abstract3DController::setAspectRatio(qreal ratio)
{
- if (m_aspectRatio != ratio) {
+ if (m_aspectRatio != ratio && ratio > 0) {
m_aspectRatio = ratio;
m_changeTracker.aspectRatioChanged = true;
emit aspectRatioChanged(m_aspectRatio);
@@ -1608,7 +1610,7 @@ qreal Abstract3DController::aspectRatio()
void Abstract3DController::setHorizontalAspectRatio(qreal ratio)
{
- if (m_horizontalAspectRatio != ratio) {
+ if (m_horizontalAspectRatio != ratio && ratio > 0) {
m_horizontalAspectRatio = ratio;
m_changeTracker.horizontalAspectRatioChanged = true;
emit horizontalAspectRatioChanged(m_horizontalAspectRatio);
@@ -1639,7 +1641,7 @@ bool Abstract3DController::reflection() const
void Abstract3DController::setReflectivity(qreal reflectivity)
{
- if (m_reflectivity != reflectivity) {
+ if (m_reflectivity != reflectivity && reflectivity > 0) {
m_reflectivity = reflectivity;
m_changeTracker.reflectivityChanged = true;
emit reflectivityChanged(m_reflectivity);
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 1fab2bdb..a39a6079 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "abstract3drenderer_p.h"
#include "texturehelper_p.h"
#include "q3dcamera_p.h"
@@ -1636,7 +1638,7 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
m_drawer->drawObject(shader, item->mesh(), item->texture());
}
}
- } else if (RenderingSelection == state) {
+ } else if (RenderingSelection == state && !volumeDetected) {
// Selection render
shader->setUniformValue(shader->MVP(), MVPMatrix);
QVector4D itemColor = indexToSelectionColor(item->index());
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 401665f9..560e6d2e 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -24,6 +24,8 @@
#include "seriesrendercache_p.h"
#include "customrenderitem_p.h"
+#include <QtCore/qpointer.h>
+
QT_FORWARD_DECLARE_CLASS(QOffscreenSurface)
QT_BEGIN_NAMESPACE
diff --git a/src/datavisualization/engine/axisrendercache.cpp b/src/datavisualization/engine/axisrendercache.cpp
index 6fc80cd6..1218eec2 100644
--- a/src/datavisualization/engine/axisrendercache.cpp
+++ b/src/datavisualization/engine/axisrendercache.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "axisrendercache_p.h"
#include <QtGui/QFontMetrics>
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index fd6aae65..a307f2f4 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "bars3dcontroller_p.h"
#include "bars3drenderer_p.h"
#include "qvalue3daxis_p.h"
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 76b616cd..8d2d9cce 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "bars3drenderer_p.h"
#include "q3dcamera_p.h"
#include "shaderhelper_p.h"
diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp
index 4e5ac2d8..07c86110 100644
--- a/src/datavisualization/engine/q3dscatter.cpp
+++ b/src/datavisualization/engine/q3dscatter.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "q3dscatter.h"
#include "q3dscatter_p.h"
diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp
index 0c66c32f..2b456814 100644
--- a/src/datavisualization/engine/q3dsurface.cpp
+++ b/src/datavisualization/engine/q3dsurface.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "q3dsurface.h"
#include "q3dsurface_p.h"
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index 8ef9ecf1..3b7eca01 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -15,7 +15,7 @@
#include <QtGui/QPainter>
#include <QtOpenGL/QOpenGLFramebufferObject>
#include <QtGui/QOffscreenSurface>
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
#include <qpa/qplatformnativeinterface.h>
#endif
@@ -200,7 +200,7 @@ QAbstract3DGraph::QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFor
d_ptr->renderLater();
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
// Enable touch events for Mac touchpads
typedef void * (*EnableTouch)(QWindow*, bool);
EnableTouch enableTouch =
@@ -567,7 +567,7 @@ QCustom3DItem *QAbstract3DGraph::selectedCustomItem() const
* \c selectedElementChanged signal is emitted.
*
* The signal can be used for example for implementing custom input handlers, as
- * demonstrated by the \l {Input Handling for Axes} example.
+ * demonstrated in the \l {Graph Gallery} example under \uicontrol {Scatter Graph} tab.
*
* \sa selectedLabelIndex(), selectedAxis(), selectedCustomItemIndex(), selectedCustomItem(),
* Q3DBars::selectedSeries(), Q3DScatter::selectedSeries(), Q3DSurface::selectedSeries(),
diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp
index d26eac7c..af7bb204 100644
--- a/src/datavisualization/engine/scatter3dcontroller.cpp
+++ b/src/datavisualization/engine/scatter3dcontroller.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "scatter3dcontroller_p.h"
#include "scatter3drenderer_p.h"
#include "qvalue3daxis_p.h"
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 16bae194..6a224ebd 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "scatter3drenderer_p.h"
#include "q3dcamera_p.h"
#include "shaderhelper_p.h"
diff --git a/src/datavisualization/engine/selectionpointer.cpp b/src/datavisualization/engine/selectionpointer.cpp
index 15020acd..d78171e3 100644
--- a/src/datavisualization/engine/selectionpointer.cpp
+++ b/src/datavisualization/engine/selectionpointer.cpp
@@ -10,7 +10,7 @@
QT_BEGIN_NAMESPACE
-const GLfloat sliceUnits = 2.5;
+const GLfloat spSliceUnits = 2.5;
SelectionPointer::SelectionPointer(Drawer *drawer)
: QObject(0),
@@ -68,7 +68,7 @@ void SelectionPointer::renderSelectionPointer(GLuint defaultFboHandle, bool useO
QMatrix4x4 projectionMatrix;
GLfloat viewPortRatio = (GLfloat)m_mainViewPort.width() / (GLfloat)m_mainViewPort.height();
if (m_cachedIsSlicingActivated) {
- GLfloat sliceUnitsScaled = sliceUnits / m_autoScaleAdjustment;
+ GLfloat sliceUnitsScaled = spSliceUnits / m_autoScaleAdjustment;
viewMatrix.lookAt(QVector3D(0.0f, 0.0f, 1.0f), zeroVector, upVector);
projectionMatrix.ortho(-sliceUnitsScaled * viewPortRatio, sliceUnitsScaled * viewPortRatio,
-sliceUnitsScaled, sliceUnitsScaled,
@@ -138,7 +138,7 @@ void SelectionPointer::renderSelectionLabel(GLuint defaultFboHandle, bool useOrt
QMatrix4x4 projectionMatrix;
GLfloat viewPortRatio = (GLfloat)m_mainViewPort.width() / (GLfloat)m_mainViewPort.height();
if (m_cachedIsSlicingActivated) {
- GLfloat sliceUnitsScaled = sliceUnits / m_autoScaleAdjustment;
+ GLfloat sliceUnitsScaled = spSliceUnits / m_autoScaleAdjustment;
viewMatrix.lookAt(QVector3D(0.0f, 0.0f, 1.0f), zeroVector, upVector);
projectionMatrix.ortho(-sliceUnitsScaled * viewPortRatio, sliceUnitsScaled * viewPortRatio,
-sliceUnitsScaled, sliceUnitsScaled,
diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp
index 03c870c1..13b32666 100644
--- a/src/datavisualization/engine/surface3dcontroller.cpp
+++ b/src/datavisualization/engine/surface3dcontroller.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "surface3dcontroller_p.h"
#include "surface3drenderer_p.h"
#include "qvalue3daxis_p.h"
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 4faeea44..cffed56d 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "surface3drenderer_p.h"
#include "q3dcamera_p.h"
#include "shaderhelper_p.h"
diff --git a/src/datavisualization/input/q3dinputhandler.cpp b/src/datavisualization/input/q3dinputhandler.cpp
index c22a99be..f62aaf70 100644
--- a/src/datavisualization/input/q3dinputhandler.cpp
+++ b/src/datavisualization/input/q3dinputhandler.cpp
@@ -16,7 +16,7 @@ static const int nearZoomRangeDivider = 12;
static const int midZoomRangeDivider = 60;
static const int farZoomRangeDivider = 120;
-static const float rotationSpeed = 100.0f;
+[[maybe_unused]] static const float rotationSpeed = 100.0f;
/*!
* \class Q3DInputHandler
diff --git a/src/datavisualization/input/qtouch3dinputhandler.cpp b/src/datavisualization/input/qtouch3dinputhandler.cpp
index 9edbd87e..35b79a9f 100644
--- a/src/datavisualization/input/qtouch3dinputhandler.cpp
+++ b/src/datavisualization/input/qtouch3dinputhandler.cpp
@@ -15,7 +15,7 @@ static const int maxSelectionJitter = 10;
static const int maxSelectionJitter = 5;
#endif
static const int tapAndHoldTime = 250;
-static const float rotationSpeed = 200.0f;
+static const float t3ihRotationSpeed = 200.0f;
static const float touchZoomDrift = 0.02f;
/*!
@@ -239,9 +239,9 @@ void QTouch3DInputHandlerPrivate::handleRotation(const QPointF &position)
float yRotation = camera->yRotation();
QPointF inputPos = q_ptr->inputPosition();
float mouseMoveX = float(inputPos.x() - position.x())
- / (scene->viewport().width() / rotationSpeed);
+ / (scene->viewport().width() / t3ihRotationSpeed);
float mouseMoveY = float(inputPos.y() - position.y())
- / (scene->viewport().height() / rotationSpeed);
+ / (scene->viewport().height() / t3ihRotationSpeed);
xRotation -= mouseMoveX;
yRotation -= mouseMoveY;
camera->setXRotation(xRotation);
diff --git a/src/datavisualization/theme/q3dtheme.cpp b/src/datavisualization/theme/q3dtheme.cpp
index 8832ad0d..0b56210b 100644
--- a/src/datavisualization/theme/q3dtheme.cpp
+++ b/src/datavisualization/theme/q3dtheme.cpp
@@ -309,6 +309,8 @@ QT_BEGIN_NAMESPACE
* \qmlproperty color Theme3D::gridLineColor
*
* The color of the grid lines.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -317,6 +319,8 @@ QT_BEGIN_NAMESPACE
* The highlight color for a selected object. Used if
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionItem flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -326,6 +330,8 @@ QT_BEGIN_NAMESPACE
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionRow or \c AbstractGraph3D.SelectionColumn
* flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -354,6 +360,8 @@ QT_BEGIN_NAMESPACE
* The highlight gradient for a selected object. Used if
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionItem flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -363,6 +371,8 @@ QT_BEGIN_NAMESPACE
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionRow or \c AbstractGraph3D.SelectionColumn
* flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -606,6 +616,8 @@ QColor Q3DTheme::labelBackgroundColor() const
* \property Q3DTheme::gridLineColor
*
* \brief The color of the grid lines.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
void Q3DTheme::setGridLineColor(const QColor &color)
{
@@ -996,11 +1008,13 @@ Q3DTheme::ColorStyle Q3DTheme::colorStyle() const
*/
void Q3DTheme::setType(Theme themeType)
{
- d_ptr->m_dirtyBits.themeIdDirty = true;
- if (d_ptr->m_themeId != themeType) {
- d_ptr->m_themeId = themeType;
- ThemeManager::setPredefinedPropertiesToTheme(this, themeType);
- emit typeChanged(themeType);
+ if (themeType >= ThemeQt && themeType <= ThemeUserDefined) {
+ d_ptr->m_dirtyBits.themeIdDirty = true;
+ if (d_ptr->m_themeId != themeType) {
+ d_ptr->m_themeId = themeType;
+ ThemeManager::setPredefinedPropertiesToTheme(this, themeType);
+ emit typeChanged(themeType);
+ }
}
}
diff --git a/src/datavisualization/theme/q3dtheme.h b/src/datavisualization/theme/q3dtheme.h
index 3da755d1..5087d854 100644
--- a/src/datavisualization/theme/q3dtheme.h
+++ b/src/datavisualization/theme/q3dtheme.h
@@ -50,7 +50,7 @@ public:
};
enum Theme {
- ThemeQt,
+ ThemeQt = 0,
ThemePrimaryColors,
ThemeDigia,
ThemeStoneMoss,
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper.cpp b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
index f4e6268e..0a04d038 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
@@ -9,7 +9,7 @@
QT_BEGIN_NAMESPACE
-const GLfloat itemScaler = 3.0f;
+const GLfloat ScatterObjectBufferHelper::itemScaler = 3.0f;
ScatterObjectBufferHelper::ScatterObjectBufferHelper()
: m_scaleY(0.0f)
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper_p.h b/src/datavisualization/utils/scatterobjectbufferhelper_p.h
index a428ab9b..5328e029 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper_p.h
+++ b/src/datavisualization/utils/scatterobjectbufferhelper_p.h
@@ -37,6 +37,7 @@ private:
const QList<QVector3D> &indexed_vertices);
float m_scaleY;
+ static const GLfloat itemScaler;
};
QT_END_NAMESPACE
diff --git a/src/datavisualizationqml/CMakeLists.txt b/src/datavisualizationqml/CMakeLists.txt
index 9e394b97..110a5ef0 100644
--- a/src/datavisualizationqml/CMakeLists.txt
+++ b/src/datavisualizationqml/CMakeLists.txt
@@ -44,17 +44,20 @@ qt_internal_add_qml_module(DataVisualizationQml
enumtostringmap.cpp enumtostringmap_p.h
foreigntypes_p.h
glstatestore.cpp glstatestore_p.h
+ NO_PCH_SOURCES
+ declarativetheme.cpp # undef QT_NO_FOREACH
QML_FILES
${qml_files}
RESOURCES
${resources}
LIBRARIES
- Qt::Core
+ Qt::CorePrivate
Qt::Gui
Qt::OpenGL
Qt::Qml
Qt::Quick
Qt::DataVisualizationPrivate
+ NO_GENERATE_CPP_EXPORTS
)
qt_internal_extend_target(DataVisualizationQml CONDITION MACOS
diff --git a/src/datavisualizationqml/abstractdeclarative.cpp b/src/datavisualizationqml/abstractdeclarative.cpp
index 5358050a..af19d46f 100644
--- a/src/datavisualizationqml/abstractdeclarative.cpp
+++ b/src/datavisualizationqml/abstractdeclarative.cpp
@@ -8,7 +8,7 @@
#if defined(Q_OS_IOS)
#include <QtCore/QTimer>
#endif
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
#include <qpa/qplatformnativeinterface.h>
#endif
@@ -64,8 +64,11 @@ AbstractDeclarative::~AbstractDeclarative()
void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mode)
{
- if (mode == m_renderMode)
+ if (mode == m_renderMode
+ || mode <= AbstractDeclarative::RenderingMode::RenderDirectToBackground
+ || mode >= AbstractDeclarative::RenderingMode::RenderIndirect) {
return;
+ }
RenderingMode previousMode = m_renderMode;
@@ -425,7 +428,7 @@ void AbstractDeclarative::handleWindowChanged(QQuickWindow *window)
if (!window)
return;
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
bool previousVisibility = window->isVisible();
// Enable touch events for Mac touchpads
window->setVisible(true);
@@ -562,7 +565,7 @@ void AbstractDeclarative::render()
QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions();
- if (isVisible()) {
+ if (funcs && isVisible()) {
funcs->glDepthMask(GL_TRUE);
funcs->glEnable(GL_DEPTH_TEST);
funcs->glDepthFunc(GL_LESS);
@@ -644,8 +647,8 @@ void AbstractDeclarative::checkWindowList(QQuickWindow *window)
}
QList<QQuickWindow *> windowList;
-
- foreach (AbstractDeclarative *graph, graphWindowList.keys()) {
+ const auto graphs = graphWindowList.keys();
+ for (AbstractDeclarative *graph : graphs) {
if (graph->m_renderMode == RenderDirectToBackground
|| graph->m_renderMode == RenderDirectToBackground_NoClear) {
windowList.append(graphWindowList.value(graph));
diff --git a/src/datavisualizationqml/declarativetheme.cpp b/src/datavisualizationqml/declarativetheme.cpp
index 18dc4f8e..02f3becc 100644
--- a/src/datavisualizationqml/declarativetheme.cpp
+++ b/src/datavisualizationqml/declarativetheme.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "declarativetheme_p.h"
QT_BEGIN_NAMESPACE
diff --git a/sync.profile b/sync.profile
deleted file mode 100644
index 5a56ccc6..00000000
--- a/sync.profile
+++ /dev/null
@@ -1,16 +0,0 @@
-%modules = ( # path to module name map
- "QtDataVisualization" => "$basedir/src/datavisualization",
- "QtDataVisualizationQml" => "$basedir/src/datavisualizationqml",
-);
-%moduleheaders = ( # restrict the module headers to those found in relative path
-);
-# Module dependencies.
-# Every module that is required to build this module should have one entry.
-# Each of the module version specifiers can take one of the following values:
-# - A specific Git revision.
-# - any git symbolic ref resolvable from the module's repository (e.g. "refs/heads/master" to track master branch)
-#
-%dependencies = (
- "qtbase" => "",
- "qtdeclarative" => "",
-);
diff --git a/tests/auto/cpptest/q3daxis-category/CMakeLists.txt b/tests/auto/cpptest/q3daxis-category/CMakeLists.txt
index a8e3fb98..f148b184 100644
--- a/tests/auto/cpptest/q3daxis-category/CMakeLists.txt
+++ b/tests/auto/cpptest/q3daxis-category/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3daxis-category
+qt_internal_add_test(q3daxis-category_datavis
SOURCES
tst_axis.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt b/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt
index 46cb5048..0bba27a9 100644
--- a/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt
+++ b/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3daxis-logvalue
+qt_internal_add_test(q3daxis-logvalue_datavis
SOURCES
tst_axis.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3daxis-value/CMakeLists.txt b/tests/auto/cpptest/q3daxis-value/CMakeLists.txt
index b105991e..5c412106 100644
--- a/tests/auto/cpptest/q3daxis-value/CMakeLists.txt
+++ b/tests/auto/cpptest/q3daxis-value/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3daxis-value
+qt_internal_add_test(q3daxis-value_datavis
SOURCES
tst_axis.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt b/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt
index 63d4ba0b..f9b05902 100644
--- a/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dbars-modelproxy
+qt_internal_add_test(q3dbars-modelproxy_datavis
SOURCES
tst_proxy.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt b/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt
index f92844fe..23c6997d 100644
--- a/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dbars-proxy
+qt_internal_add_test(q3dbars-proxy_datavis
SOURCES
tst_proxy.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dbars-series/CMakeLists.txt b/tests/auto/cpptest/q3dbars-series/CMakeLists.txt
index 75c4d5b1..f160c81c 100644
--- a/tests/auto/cpptest/q3dbars-series/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dbars-series/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dbars-series
+qt_internal_add_test(q3dbars-series_datavis
SOURCES
tst_series.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dbars/CMakeLists.txt b/tests/auto/cpptest/q3dbars/CMakeLists.txt
index 804de8cc..c2f05908 100644
--- a/tests/auto/cpptest/q3dbars/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dbars/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dbars
+qt_internal_add_test(q3dbars_datavis
SOURCES
tst_bars.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dbars/tst_bars.cpp b/tests/auto/cpptest/q3dbars/tst_bars.cpp
index 2b8cc340..96219cb0 100644
--- a/tests/auto/cpptest/q3dbars/tst_bars.cpp
+++ b/tests/auto/cpptest/q3dbars/tst_bars.cpp
@@ -186,9 +186,9 @@ void tst_bars::invalidProperties()
m_graph->setLocale(QLocale("XX"));
QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
- QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
+ QCOMPARE(m_graph->aspectRatio(), 2.0);
+ QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
+ QCOMPARE(m_graph->reflectivity(), 0.5);
QCOMPARE(m_graph->locale(), QLocale("C"));
}
diff --git a/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt b/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt
index 5927b21c..3baea7fa 100644
--- a/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dcustom-label
+qt_internal_add_test(q3dcustom-label_datavis
SOURCES
tst_custom.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt b/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt
index 5efa94b7..858f2dfc 100644
--- a/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dcustom-volume
+qt_internal_add_test(q3dcustom-volume_datavis
SOURCES
tst_custom.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dcustom/CMakeLists.txt b/tests/auto/cpptest/q3dcustom/CMakeLists.txt
index 260cea9d..4126a884 100644
--- a/tests/auto/cpptest/q3dcustom/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dcustom/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dcustom
+qt_internal_add_test(q3dcustom_datavis
SOURCES
tst_custom.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt b/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt
index 2704803c..7550bf2b 100644
--- a/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dinput-touch
+qt_internal_add_test(q3dinput-touch_datavis
SOURCES
tst_input.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dinput/CMakeLists.txt b/tests/auto/cpptest/q3dinput/CMakeLists.txt
index 0f1ffd1b..ac0fe9a9 100644
--- a/tests/auto/cpptest/q3dinput/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dinput/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dinput
+qt_internal_add_test(q3dinput_datavis
SOURCES
tst_input.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt b/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt
index 37b71270..438c05f8 100644
--- a/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscatter-modelproxy
+qt_internal_add_test(q3dscatter-modelproxy_datavis
SOURCES
tst_proxy.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt b/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt
index e76a3566..c813e9fb 100644
--- a/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscatter-proxy
+qt_internal_add_test(q3dscatter-proxy_datavis
SOURCES
tst_proxy.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt b/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt
index d15def6e..c2eb2c4a 100644
--- a/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscatter-series
+qt_internal_add_test(q3dscatter-series_datavis
SOURCES
tst_series.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dscatter/CMakeLists.txt b/tests/auto/cpptest/q3dscatter/CMakeLists.txt
index 34777ead..176fb66e 100644
--- a/tests/auto/cpptest/q3dscatter/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscatter/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscatter
+qt_internal_add_test(q3dscatter_datavis
SOURCES
tst_scatter.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dscatter/tst_scatter.cpp b/tests/auto/cpptest/q3dscatter/tst_scatter.cpp
index e8b26baf..f6ac402e 100644
--- a/tests/auto/cpptest/q3dscatter/tst_scatter.cpp
+++ b/tests/auto/cpptest/q3dscatter/tst_scatter.cpp
@@ -148,9 +148,9 @@ void tst_scatter::invalidProperties()
m_graph->setLocale(QLocale("XX"));
QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
- QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
+ QCOMPARE(m_graph->aspectRatio(), 2.0);
+ QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
+ QCOMPARE(m_graph->reflectivity(), 0.5);
QCOMPARE(m_graph->locale(), QLocale("C"));
}
diff --git a/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt b/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt
index af5feab6..63cd964c 100644
--- a/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscene-camera
+qt_internal_add_test(q3dscene-camera_datavis
SOURCES
tst_camera.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dscene-light/CMakeLists.txt b/tests/auto/cpptest/q3dscene-light/CMakeLists.txt
index 9c6ad4ec..fc70b804 100644
--- a/tests/auto/cpptest/q3dscene-light/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscene-light/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscene-light
+qt_internal_add_test(q3dscene-light_datavis
SOURCES
tst_light.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dscene/CMakeLists.txt b/tests/auto/cpptest/q3dscene/CMakeLists.txt
index 32b864be..a7c25ff2 100644
--- a/tests/auto/cpptest/q3dscene/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dscene/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dscene
+qt_internal_add_test(q3dscene_datavis
SOURCES
tst_scene.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt
index 70c96a5a..b7285b3a 100644
--- a/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dsurface-heightproxy
+qt_internal_add_test(q3dsurface-heightproxy_datavis
SOURCES
tst_proxy.cpp
LIBRARIES
@@ -13,7 +13,7 @@ set(q3dsurface-heightproxy_resource_files
"customtexture.jpg"
)
-qt_internal_add_resource(q3dsurface-heightproxy "q3dsurface-heightproxy"
+qt_internal_add_resource(q3dsurface-heightproxy_datavis "q3dsurface-heightproxy"
PREFIX
"/"
FILES
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt
index 85b1b76b..835a3bad 100644
--- a/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dsurface-modelproxy-nan
+qt_internal_add_test(q3dsurface-modelproxy-nan_datavis
SOURCES
tst_proxy.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt
index c9636b9e..4b42431a 100644
--- a/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dsurface-modelproxy
+qt_internal_add_test(q3dsurface-modelproxy_datavis
SOURCES
tst_proxy.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt
index c28fe62b..5553d635 100644
--- a/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dsurface-proxy
+qt_internal_add_test(q3dsurface-proxy_datavis
SOURCES
tst_proxy.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt
index 47336ea7..283829bd 100644
--- a/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dsurface-series
+qt_internal_add_test(q3dsurface-series_datavis
SOURCES
tst_series.cpp
LIBRARIES
diff --git a/tests/auto/cpptest/q3dsurface/CMakeLists.txt b/tests/auto/cpptest/q3dsurface/CMakeLists.txt
index c62803d3..71f78da8 100644
--- a/tests/auto/cpptest/q3dsurface/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dsurface/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dsurface
+qt_internal_add_test(q3dsurface_datavis
SOURCES
tst_surface.cpp
INCLUDE_DIRECTORIES
diff --git a/tests/auto/cpptest/q3dsurface/tst_surface.cpp b/tests/auto/cpptest/q3dsurface/tst_surface.cpp
index 0da7fa50..b27dfa0c 100644
--- a/tests/auto/cpptest/q3dsurface/tst_surface.cpp
+++ b/tests/auto/cpptest/q3dsurface/tst_surface.cpp
@@ -158,9 +158,9 @@ void tst_surface::invalidProperties()
m_graph->setLocale(QLocale("XX"));
QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
- QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
+ QCOMPARE(m_graph->aspectRatio(), 2.0);
+ QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
+ QCOMPARE(m_graph->reflectivity(), 0.5);
QCOMPARE(m_graph->locale(), QLocale("C"));
}
diff --git a/tests/auto/cpptest/q3dtheme/CMakeLists.txt b/tests/auto/cpptest/q3dtheme/CMakeLists.txt
index 0b55423d..0b59ed6e 100644
--- a/tests/auto/cpptest/q3dtheme/CMakeLists.txt
+++ b/tests/auto/cpptest/q3dtheme/CMakeLists.txt
@@ -1,7 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-qt_internal_add_test(q3dtheme
+qt_internal_add_test(q3dtheme_datavis
SOURCES
tst_theme.cpp
LIBRARIES
diff --git a/tests/auto/qmltest/CMakeLists.txt b/tests/auto/qmltest/CMakeLists.txt
index 7c62fa34..3f891438 100644
--- a/tests/auto/qmltest/CMakeLists.txt
+++ b/tests/auto/qmltest/CMakeLists.txt
@@ -6,7 +6,7 @@ file(GLOB_RECURSE test_data_glob
*)
list(APPEND test_data ${test_data_glob})
-qt_internal_add_test(tst_qmltest
+qt_internal_add_test(tst_qmltest_datavis
QMLTEST
SOURCES
tst_qmltest.cpp
@@ -20,7 +20,7 @@ set(qmltest_resource_files
"customtexture.jpg"
)
-qt_internal_add_resource(tst_qmltest "qmltest"
+qt_internal_add_resource(tst_qmltest_datavis "qmltest"
PREFIX
"/"
FILES
diff --git a/tests/auto/qmltest/bars3d/tst_bars.qml b/tests/auto/qmltest/bars3d/tst_bars.qml
index 56530319..03638501 100644
--- a/tests/auto/qmltest/bars3d/tst_bars.qml
+++ b/tests/auto/qmltest/bars3d/tst_bars.qml
@@ -14,7 +14,7 @@ Item {
function constructBars() {
bars3d = Qt.createQmlObject("
- import QtQuick 2.2
+ import QtQuick
import QtDataVisualization
Bars3D {
anchors.fill: parent
@@ -85,7 +85,7 @@ Item {
function constructBarsWithCustomItemList() {
bars3d = Qt.createQmlObject("
- import QtQuick 2.2
+ import QtQuick
import QtDataVisualization
Bars3D {
anchors.fill: parent
diff --git a/tests/auto/qmltest/bars3d/tst_basic.qml b/tests/auto/qmltest/bars3d/tst_basic.qml
index 34cc6f66..881d629e 100644
--- a/tests/auto/qmltest/bars3d/tst_basic.qml
+++ b/tests/auto/qmltest/bars3d/tst_basic.qml
@@ -17,7 +17,7 @@ Item {
function constructEmpty() {
empty = Qt.createQmlObject("
- import QtQuick 2.2
+ import QtQuick
import QtDataVisualization
Bars3D {
}", top)
@@ -25,7 +25,7 @@ Item {
function constructBasic() {
basic = Qt.createQmlObject("
- import QtQuick 2.2
+ import QtQuick
import QtDataVisualization
Bars3D {
anchors.fill: parent
@@ -43,7 +43,7 @@ Item {
function constructCommon() {
common = Qt.createQmlObject("
- import QtQuick 2.2
+ import QtQuick
import QtDataVisualization
Bars3D {
anchors.fill: parent
@@ -53,7 +53,7 @@ Item {
function constructCommonInit() {
common_init = Qt.createQmlObject("
- import QtQuick 2.2
+ import QtQuick
import QtDataVisualization
Bars3D {
anchors.fill: parent
@@ -101,8 +101,6 @@ Item {
compare(empty.rowAxis.type, AbstractAxis3D.AxisTypeCategory)
compare(empty.valueAxis.type, AbstractAxis3D.AxisTypeValue)
waitForRendering(top)
- empty.destroy()
- waitForRendering(top)
}
}
@@ -147,8 +145,6 @@ Item {
compare(basic.barSpacing, Qt.size(-1.0, -1.0), "barSpacing")
compare(basic.barSeriesMargin, Qt.size(-1.0, -1.0), "barSeriesMargin")
waitForRendering(top)
- basic.destroy()
- waitForRendering(top)
}
}
@@ -157,13 +153,16 @@ Item {
when: windowShown
function test_1_common() {
+ if (Qt.platform.os === "android")
+ return;
+
constructCommon()
+ if (common.shadowsSupported === false)
+ return;
+
compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 4, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.msaaSamples, 4, "msaaSamples")
compare(common.theme.type, Theme3D.ThemeQt, "theme")
compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common.measureFps, false, "measureFps")
@@ -184,14 +183,14 @@ Item {
}
function test_2_change_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
- compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
common.msaaSamples = 8
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 8, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
+ compare(common.msaaSamples, 8, "msaaSamples")
common.theme.type = Theme3D.ThemeRetro
common.renderingMode = AbstractGraph3D.RenderDirectToBackground_NoClear
common.measureFps = true
@@ -225,6 +224,9 @@ Item {
}
function test_3_change_invalid_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
common.theme.type = -2
common.renderingMode = -1
@@ -236,28 +238,30 @@ Item {
common.reflection = false
common.reflectivity = -1.0
compare(common.selectionMode, AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice, "selectionMode")
- compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
- compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground_NoClear*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
- compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done
-
- waitForRendering(top)
- common.destroy()
+ compare(common.theme.type, Theme3D.ThemeRetro, "theme")
+ compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground_NoClear, "renderingMode")
+ compare(common.aspectRatio, 1.0, "aspectRatio")
+ compare(common.horizontalAspectRatio, 1.0, "horizontalAspectRatio")
+ compare(common.reflectivity, 1.0, "reflectivity")
waitForRendering(top)
}
+ }
+
+ TestCase {
+ name: "Bars3D Common Initialized"
+ when: windowShown
+
+ function test_1_common_initialized() {
+ if (Qt.platform.os === "android")
+ return;
- function test_4_common_initialized() {
constructCommonInit()
+ if (common_init.shadowsSupported === false) // This test is flaky on VM, use shadowsSupported to detect being run in VM
+ return;
compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- if (common_init.shadowsSupported === true) {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
- compare(common_init.msaaSamples, 2, "msaaSamples")
- } else {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
- compare(common_init.msaaSamples, 0, "msaaSamples")
- }
+ tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
+ compare(common_init.msaaSamples, 2, "msaaSamples")
compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common_init.measureFps, true, "measureFps")
@@ -272,9 +276,6 @@ Item {
compare(common_init.reflectivity, 0.1, "reflectivity")
compare(common_init.locale, Qt.locale("UK"), "locale")
compare(common_init.margin, 0.2, "margin")
-
- waitForRendering(top)
- common_init.destroy();
waitForRendering(top)
}
}
diff --git a/tests/auto/qmltest/scatter3d/tst_basic.qml b/tests/auto/qmltest/scatter3d/tst_basic.qml
index 7680008f..7320ac49 100644
--- a/tests/auto/qmltest/scatter3d/tst_basic.qml
+++ b/tests/auto/qmltest/scatter3d/tst_basic.qml
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -17,16 +17,16 @@ Item {
function constructEmpty() {
empty = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
}", top)
}
function constructBasic() {
basic = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
anchors.fill: parent
}", top)
@@ -35,8 +35,8 @@ Item {
function constructCommon() {
common = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
anchors.fill: parent
}", top)
@@ -45,8 +45,8 @@ Item {
function constructCommonInit() {
common_init = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
anchors.fill: parent
selectionMode: AbstractGraph3D.SelectionNone
@@ -86,8 +86,6 @@ Item {
compare(empty.axisZ.type, AbstractAxis3D.AxisTypeValue)
compare(empty.axisY.type, AbstractAxis3D.AxisTypeValue)
waitForRendering(top)
- empty.destroy()
- waitForRendering(top)
}
}
@@ -100,8 +98,6 @@ Item {
compare(basic.width, 150, "width")
compare(basic.height, 150, "height")
waitForRendering(top)
- basic.destroy()
- waitForRendering(top)
}
}
@@ -110,13 +106,16 @@ Item {
when: windowShown
function test_1_common() {
+ if (Qt.platform.os === "android")
+ return;
+
constructCommon()
+ if (common.shadowsSupported === false)
+ return;
+
compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 4, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.msaaSamples, 4, "msaaSamples")
compare(common.theme.type, Theme3D.ThemeQt, "theme")
compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common.measureFps, false, "measureFps")
@@ -137,14 +136,14 @@ Item {
}
function test_2_change_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionNone
common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
- compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
common.msaaSamples = 8
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 8, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
+ compare(common.msaaSamples, 8, "msaaSamples")
common.theme.type = Theme3D.ThemeRetro
common.renderingMode = AbstractGraph3D.RenderDirectToBackground_NoClear
common.measureFps = true
@@ -178,6 +177,9 @@ Item {
}
function test_3_change_invalid_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
common.theme.type = -2
common.renderingMode = -1
@@ -189,28 +191,30 @@ Item {
common.reflection = false
common.reflectivity = -1.0
compare(common.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
- compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground_NoClear*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
- compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done
-
- waitForRendering(top)
- common.destroy()
+ compare(common.theme.type, Theme3D.ThemeRetro, "theme")
+ compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground_NoClear, "renderingMode")
+ compare(common.aspectRatio, 1.0, "aspectRatio")
+ compare(common.horizontalAspectRatio, 1.0, "horizontalAspectRatio")
+ compare(common.reflectivity, 1.0, "reflectivity")
waitForRendering(top)
- }
+ }
+ }
+
+ TestCase {
+ name: "Scatter3D Common Initialized"
+ when: windowShown
+
+ function test_1_common_initialized() {
+ if (Qt.platform.os === "android")
+ return;
- function test_4_common_initialized() {
constructCommonInit()
+ if (common_init.shadowsSupported === false)
+ return;
compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- if (common_init.shadowsSupported === true) {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
- compare(common_init.msaaSamples, 2, "msaaSamples")
- } else {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
- compare(common_init.msaaSamples, 0, "msaaSamples")
- }
+ tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
+ compare(common_init.msaaSamples, 2, "msaaSamples")
compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common_init.measureFps, true, "measureFps")
@@ -225,9 +229,6 @@ Item {
compare(common_init.reflectivity, 0.1, "reflectivity")
compare(common_init.locale, Qt.locale("UK"), "locale")
compare(common_init.margin, 0.2, "margin")
-
- waitForRendering(top)
- common_init.destroy();
waitForRendering(top)
}
}
diff --git a/tests/auto/qmltest/scene3d/tst_scene.qml b/tests/auto/qmltest/scene3d/tst_scene.qml
index 1c352c4a..b9f84202 100644
--- a/tests/auto/qmltest/scene3d/tst_scene.qml
+++ b/tests/auto/qmltest/scene3d/tst_scene.qml
@@ -41,7 +41,7 @@ Item {
function test_initial() {
verify(initial.scene.activeCamera)
verify(initial.scene.activeLight)
- compare(initial.scene.devicePixelRatio, 1.0)
+ compare(initial.scene.devicePixelRatio, Screen.devicePixelRatio)
compare(initial.scene.graphPositionQuery, Qt.point(-1, -1))
compare(initial.scene.invalidSelectionPoint, Qt.point(-1, -1))
compare(initial.scene.primarySubViewport.x, 0)
diff --git a/tests/auto/qmltest/surface3d/tst_basic.qml b/tests/auto/qmltest/surface3d/tst_basic.qml
index 0d3284c6..2979d6d5 100644
--- a/tests/auto/qmltest/surface3d/tst_basic.qml
+++ b/tests/auto/qmltest/surface3d/tst_basic.qml
@@ -17,16 +17,16 @@ Item {
function constructEmpty() {
empty = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
}", top)
}
function constructBasic() {
basic = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
anchors.fill: parent
flipHorizontalGrid: true
@@ -36,8 +36,8 @@ Item {
function constructCommon() {
common = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
anchors.fill: parent
}", top)
@@ -46,8 +46,8 @@ Item {
function constructCommonInit() {
common_init = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
anchors.fill: parent
selectionMode: AbstractGraph3D.SelectionNone
@@ -88,8 +88,6 @@ Item {
compare(empty.axisZ.type, AbstractAxis3D.AxisTypeValue)
compare(empty.axisY.type, AbstractAxis3D.AxisTypeValue)
waitForRendering(top)
- empty.destroy()
- waitForRendering(top)
}
}
@@ -108,8 +106,6 @@ Item {
basic.flipHorizontalGrid = false
compare(basic.flipHorizontalGrid, false, "flipHorizontalGrid")
waitForRendering(top)
- basic.destroy()
- waitForRendering(top)
}
}
@@ -118,13 +114,16 @@ Item {
when: windowShown
function test_1_common() {
+ if (Qt.platform.os === "android")
+ return;
+
constructCommon()
+ if (common.shadowsSupported === false)
+ return;
+
compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 4, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.msaaSamples, 4, "msaaSamples")
compare(common.theme.type, Theme3D.ThemeQt, "theme")
compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common.measureFps, false, "measureFps")
@@ -145,14 +144,14 @@ Item {
}
function test_2_change_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
- compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
common.msaaSamples = 8
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 8, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
+ compare(common.msaaSamples, 8, "msaaSamples")
common.theme.type = Theme3D.ThemeRetro
common.renderingMode = AbstractGraph3D.RenderDirectToBackground_NoClear
common.measureFps = true
@@ -186,6 +185,9 @@ Item {
}
function test_3_change_invalid_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
common.theme.type = -2
common.renderingMode = -1
@@ -197,28 +199,30 @@ Item {
common.reflection = false
common.reflectivity = -1.0
compare(common.selectionMode, AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice, "selectionMode")
- compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
- compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground_NoClear*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
- compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done
-
- waitForRendering(top)
- common.destroy()
+ compare(common.theme.type, Theme3D.ThemeRetro, "theme")
+ compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground_NoClear, "renderingMode")
+ compare(common.aspectRatio, 1.0, "aspectRatio")
+ compare(common.horizontalAspectRatio, 1.0, "horizontalAspectRatio")
+ compare(common.reflectivity, 1.0, "reflectivity")
waitForRendering(top)
}
+ }
+
+ TestCase {
+ name: "Surface3D Common Initialized"
+ when: windowShown
+
+ function test_1_common_initialized() {
+ if (Qt.platform.os === "android")
+ return;
- function test_4_common_initialized() {
constructCommonInit()
+ if (common_init.shadowsSupported === false)
+ return;
compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- if (common_init.shadowsSupported === true) {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
- compare(common_init.msaaSamples, 2, "msaaSamples")
- } else {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
- compare(common_init.msaaSamples, 0, "msaaSamples")
- }
+ tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
+ compare(common_init.msaaSamples, 2, "msaaSamples")
compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common_init.measureFps, true, "measureFps")
@@ -233,9 +237,6 @@ Item {
compare(common_init.reflectivity, 0.1, "reflectivity")
compare(common_init.locale, Qt.locale("UK"), "locale")
compare(common_init.margin, 0.2, "margin")
-
- waitForRendering(top)
- common_init.destroy();
waitForRendering(top)
}
}
diff --git a/tests/manual/barstest/CMakeLists.txt b/tests/manual/barstest/CMakeLists.txt
index 399ae44c..391b98aa 100644
--- a/tests/manual/barstest/CMakeLists.txt
+++ b/tests/manual/barstest/CMakeLists.txt
@@ -11,6 +11,8 @@ qt_internal_add_manual_test(barstest
buttonwrapper.cpp buttonwrapper.h
custominputhandler.cpp custominputhandler.h
main.cpp
+ NO_PCH_SOURCES
+ chart.cpp # undef QT_NO_FOREACH
)
target_link_libraries(barstest PUBLIC
Qt::Gui
diff --git a/tests/manual/barstest/chart.cpp b/tests/manual/barstest/chart.cpp
index 6a6291cc..d427921a 100644
--- a/tests/manual/barstest/chart.cpp
+++ b/tests/manual/barstest/chart.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "chart.h"
#include "custominputhandler.h"
#include <QtDataVisualization/qcategory3daxis.h>
diff --git a/tests/manual/itemmodeltest/main.cpp b/tests/manual/itemmodeltest/main.cpp
index b2fadaea..feebd1b1 100644
--- a/tests/manual/itemmodeltest/main.cpp
+++ b/tests/manual/itemmodeltest/main.cpp
@@ -208,8 +208,8 @@ void GraphDataGenerator::changeSelectedButtonClicked()
{
// Change all selected cells to a random value 1-10
QVariant value = QVariant::fromValue(QRandomGenerator::global()->bounded(10.0) + 1);
- QList<QTableWidgetItem *> selectedItems = m_tableWidget->selectedItems();
- foreach (QTableWidgetItem *item, selectedItems) {
+ const QList<QTableWidgetItem *> selectedItems = m_tableWidget->selectedItems();
+ for (QTableWidgetItem *item : selectedItems) {
QString oldData = item->data(Qt::DisplayRole).toString();
item->setData(Qt::DisplayRole,
oldData.left(5)
@@ -266,7 +266,7 @@ int main(int argc, char **argv)
barProxy->setValueRoleReplace(QStringLiteral("\\4"));
barProxy->setRotationRoleReplace(QStringLiteral("\\5"));
surfaceProxy->setXPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
- surfaceProxy->setZPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
+ surfaceProxy->setYPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
surfaceProxy->setXPosRolePattern(QRegularExpression(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
surfaceProxy->setXPosRoleReplace(QStringLiteral("\\2"));
surfaceProxy->setYPosRolePattern(QRegularExpression(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
diff --git a/tests/manual/qmlbarsrowcolors/CMakeLists.txt b/tests/manual/qmlbarsrowcolors/CMakeLists.txt
index 8a89909f..62a2ed98 100644
--- a/tests/manual/qmlbarsrowcolors/CMakeLists.txt
+++ b/tests/manual/qmlbarsrowcolors/CMakeLists.txt
@@ -9,20 +9,6 @@ qt_internal_add_manual_test(qmlbarsrowcolors
main.cpp
)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS DataVisualization)
-
-set_target_properties(qmlbarsrowcolors PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_compile_definitions(qmlbarsrowcolors PUBLIC
- QT_DISABLE_DEPRECATED_UP_TO=0x050F00
-)
-
target_link_libraries(qmlbarsrowcolors PUBLIC
Qt::Core
Qt::Gui
@@ -43,9 +29,3 @@ qt6_add_resources(qmlbarsrowcolors "qmlbarsrowcolors"
FILES
${qmlbarsrowcolors_resource_files}
)
-
-install(TARGETS qmlbarsrowcolors
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/tests/manual/qmldynamicdata/CMakeLists.txt b/tests/manual/qmldynamicdata/CMakeLists.txt
index b692f0ce..739ecd15 100644
--- a/tests/manual/qmldynamicdata/CMakeLists.txt
+++ b/tests/manual/qmldynamicdata/CMakeLists.txt
@@ -8,6 +8,8 @@ qt_internal_add_manual_test(qmldynamicdata
)
target_link_libraries(qmldynamicdata PUBLIC
Qt::Gui
+ Qt::Qml
+ Qt::Quick
Qt::DataVisualization
)
diff --git a/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml b/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml
index 30b1087a..1d0e65bf 100644
--- a/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml
+++ b/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml
@@ -129,12 +129,12 @@ Item {
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
- property int mouseX: -1
- property int mouseY: -1
+ property int mouseXPos: -1
+ property int mouseYPos: -1
onPositionChanged: (mouse)=> {
- mouseX = mouse.x;
- mouseY = mouse.y;
+ mouseXPos = mouse.x;
+ mouseYPos = mouse.y;
}
onWheel: (wheel)=> {
@@ -161,7 +161,8 @@ Item {
running: true
repeat: true
onTriggered: {
- scatterGraph.scene.selectionQueryPosition = Qt.point(inputArea.mouseX, inputArea.mouseY);
+ scatterGraph.scene.selectionQueryPosition = Qt.point(inputArea.mouseXPos,
+ inputArea.mouseYPos);
}
}
}
diff --git a/tests/manual/qmlgradient/CMakeLists.txt b/tests/manual/qmlgradient/CMakeLists.txt
index 8b51f614..8288e1b2 100644
--- a/tests/manual/qmlgradient/CMakeLists.txt
+++ b/tests/manual/qmlgradient/CMakeLists.txt
@@ -8,6 +8,8 @@ qt_internal_add_manual_test(qmlgradient
)
target_link_libraries(qmlgradient PUBLIC
Qt::Gui
+ Qt::Qml
+ Qt::Quick
Qt::DataVisualization
)
diff --git a/tests/manual/qmlheightmap/CMakeLists.txt b/tests/manual/qmlheightmap/CMakeLists.txt
index 7bb4a2b3..17e7f3f2 100644
--- a/tests/manual/qmlheightmap/CMakeLists.txt
+++ b/tests/manual/qmlheightmap/CMakeLists.txt
@@ -10,6 +10,8 @@ qt_internal_add_manual_test(qmlheightmap
)
target_link_libraries(qmlheightmap PUBLIC
Qt::Gui
+ Qt::Qml
+ Qt::Quick
Qt::DataVisualization
)
diff --git a/tests/manual/qmlmultitest/CMakeLists.txt b/tests/manual/qmlmultitest/CMakeLists.txt
index 282097f7..a92ff8db 100644
--- a/tests/manual/qmlmultitest/CMakeLists.txt
+++ b/tests/manual/qmlmultitest/CMakeLists.txt
@@ -8,6 +8,8 @@ qt_internal_add_manual_test(qmlmultitest
)
target_link_libraries(qmlmultitest PUBLIC
Qt::Gui
+ Qt::Qml
+ Qt::Quick
Qt::DataVisualization
)
diff --git a/tests/manual/qmlperf/CMakeLists.txt b/tests/manual/qmlperf/CMakeLists.txt
index baf1102a..31235e32 100644
--- a/tests/manual/qmlperf/CMakeLists.txt
+++ b/tests/manual/qmlperf/CMakeLists.txt
@@ -11,6 +11,8 @@ qt_internal_add_manual_test(qmlperf
)
target_link_libraries(qmlperf PUBLIC
Qt::Gui
+ Qt::Qml
+ Qt::Quick
Qt::DataVisualization
)
diff --git a/tests/manual/qmlvolume/CMakeLists.txt b/tests/manual/qmlvolume/CMakeLists.txt
index 649f9125..5a0e446a 100644
--- a/tests/manual/qmlvolume/CMakeLists.txt
+++ b/tests/manual/qmlvolume/CMakeLists.txt
@@ -11,6 +11,8 @@ qt_internal_add_manual_test(qmlvolume
)
target_link_libraries(qmlvolume PUBLIC
Qt::Gui
+ Qt::Qml
+ Qt::Quick
Qt::DataVisualization
)
diff --git a/tests/manual/qmlvolume/datasource.cpp b/tests/manual/qmlvolume/datasource.cpp
index bb38f7a4..6a16278e 100644
--- a/tests/manual/qmlvolume/datasource.cpp
+++ b/tests/manual/qmlvolume/datasource.cpp
@@ -24,7 +24,7 @@ void DataSource::fillVolume(QCustom3DVolume *volumeItem)
// This can take a while if the dimensions are large, so we support incremental data generation.
int index = 0;
- int textureSize = 256;
+ int textureSize = 1024;
QVector3D midPoint(float(textureSize) / 2.0f,
float(textureSize) / 2.0f,
float(textureSize) / 2.0f);
diff --git a/tests/manual/qmlvolume/qml/qmlvolume/main.qml b/tests/manual/qmlvolume/qml/qmlvolume/main.qml
index 631a72a3..da061483 100644
--- a/tests/manual/qmlvolume/qml/qmlvolume/main.qml
+++ b/tests/manual/qmlvolume/qml/qmlvolume/main.qml
@@ -34,7 +34,7 @@ Item {
itemLabelVisible: false
onItemLabelChanged: {
- if (surfaceSeries.selectedPoint === surfaceSeries.invalidSelectionPosition)
+ if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
selectionText.text = "No selection"
else
selectionText.text = surfaceSeries.itemLabel
@@ -101,7 +101,7 @@ Item {
text: "Slice"
onClicked: {
- if (volumeItem.sliceIndexZ == -1) {
+ if (volumeItem.sliceIndexZ === -1) {
volumeItem.sliceIndexZ = 128
volumeItem.drawSlices = true
volumeItem.drawSliceFrames = true
@@ -123,7 +123,27 @@ Item {
}
}
}
+ }
+
+ SequentialAnimation {
+ running: volumeItem.drawSlices
+ loops: Animation.Infinite
+ PropertyAnimation {
+ target: volumeItem
+ property: "sliceIndexZ"
+ from: 0
+ to: 1024
+ duration: 5000
+ }
+
+ PropertyAnimation {
+ target: volumeItem
+ property: "sliceIndexZ"
+ from: 1024
+ to: 0
+ duration: 5000
+ }
}
Custom3DVolume {
diff --git a/tests/manual/scattertest/CMakeLists.txt b/tests/manual/scattertest/CMakeLists.txt
index ac131567..89013c12 100644
--- a/tests/manual/scattertest/CMakeLists.txt
+++ b/tests/manual/scattertest/CMakeLists.txt
@@ -8,6 +8,8 @@ qt_internal_add_manual_test(scattertest
SOURCES
main.cpp
scatterchart.cpp scatterchart.h
+ NO_PCH_SOURCES
+ scatterchart.cpp # undef QT_NO_FOREACH
)
target_link_libraries(scattertest PUBLIC
Qt::Gui
diff --git a/tests/manual/scattertest/scatterchart.cpp b/tests/manual/scattertest/scatterchart.cpp
index 8a521a2e..fce115d4 100644
--- a/tests/manual/scattertest/scatterchart.cpp
+++ b/tests/manual/scattertest/scatterchart.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "scatterchart.h"
#include <QtDataVisualization/qscatterdataproxy.h>
#include <QtDataVisualization/qscatter3dseries.h>
diff --git a/tests/manual/surfacetest/CMakeLists.txt b/tests/manual/surfacetest/CMakeLists.txt
index 42e8bf07..bb3f0500 100644
--- a/tests/manual/surfacetest/CMakeLists.txt
+++ b/tests/manual/surfacetest/CMakeLists.txt
@@ -10,6 +10,8 @@ qt_internal_add_manual_test(surfacetest
checkboxwrapper.cpp checkboxwrapper.h
graphmodifier.cpp graphmodifier.h
main.cpp
+ NO_PCH_SOURCES
+ graphmodifier.cpp # undef QT_NO_FOREACH
)
target_link_libraries(surfacetest PUBLIC
Qt::Gui
diff --git a/tests/manual/surfacetest/graphmodifier.cpp b/tests/manual/surfacetest/graphmodifier.cpp
index fb0e4e6d..f406513d 100644
--- a/tests/manual/surfacetest/graphmodifier.cpp
+++ b/tests/manual/surfacetest/graphmodifier.cpp
@@ -1,6 +1,8 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "graphmodifier.h"
#include <QtDataVisualization/QValue3DAxis>
#include <QtDataVisualization/QSurfaceDataProxy>