271 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html lang="en">
 | 
						|
 | 
						|
<head>
 | 
						|
    <meta charset="UTF-8" />
 | 
						|
    <title>Overlay</title>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    <script src="../../3rdparty/highlight/highlight.pack.js"></script>
 | 
						|
 | 
						|
    <link rel="stylesheet" href="../../../fonts/material-icon-font/material-icons.css">
 | 
						|
    <link rel='stylesheet' href='../../3rdparty/highlight/styles/vs2015.css'>
 | 
						|
    <link rel='stylesheet' href='../../../css/doctest.css'>
 | 
						|
 | 
						|
    <script src="../../../dist/iwmlib.3rdparty.js"></script>
 | 
						|
    <script src="../../../dist/iwmlib.js"></script>
 | 
						|
    <script src="../../../dist/iwmlib.pixi.js"></script>
 | 
						|
 | 
						|
 | 
						|
    <style>
 | 
						|
        .inline-showcase {
 | 
						|
            display: flex;
 | 
						|
        }
 | 
						|
 | 
						|
        .map-example {
 | 
						|
            display: inline-block;
 | 
						|
            width: 256px;
 | 
						|
            margin: 5px;
 | 
						|
        }
 | 
						|
    </style>
 | 
						|
</head>
 | 
						|
 | 
						|
<body onload="Doctest.run()">
 | 
						|
    <h1 class="title">Overlay</h1>
 | 
						|
    <p class="description">
 | 
						|
        The overlayclass creates a convenient way to create and design
 | 
						|
        complex map overlays.
 | 
						|
    </p>
 | 
						|
    <canvas id="view" class="center"> </canvas>
 | 
						|
    <script>
 | 
						|
        let app = new MapApp({
 | 
						|
            view,
 | 
						|
            width: 512,
 | 
						|
            height: 512,
 | 
						|
            coordsLogging: true
 | 
						|
        })
 | 
						|
        var osmworld = '../assets/maps/osm/0/0/0.png'
 | 
						|
        let worlOSMData = new MapData(new Projection.Mercator())
 | 
						|
 | 
						|
 | 
						|
        function setupMap(textures) {
 | 
						|
 | 
						|
            // Create the map!
 | 
						|
            let map = new ImageMap(
 | 
						|
                new PIXI.Sprite(textures.get(osmworld)),
 | 
						|
                worlOSMData
 | 
						|
            )
 | 
						|
 | 
						|
            // Setup the map in the mapapp.
 | 
						|
            app.setMap('osm', map)
 | 
						|
            app.setup().run()
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
    </script>
 | 
						|
 | 
						|
    <script class="doctest" data-collapsible data-collapsed data-title="Overlay Data">
 | 
						|
 | 
						|
        /**
 | 
						|
         *  To create an overlay you just need to create a JSON file.
 | 
						|
         *  The styles defined in the styles are cascading, meaning that
 | 
						|
         *  the styles can be defined on the top level, or directly at the
 | 
						|
         *  single items. If the style is not defined in the item, the top-level style will be used.
 | 
						|
         *  If the top-level style is not defined either, the default style is applied.
 | 
						|
         * 
 | 
						|
         * The structure of an overlay file is as follows:
 | 
						|
         * 
 | 
						|
         * {
 | 
						|
         *    //COMMENT: Top-Level
 | 
						|
         * 
 | 
						|
         *      //COMMENT: Frequently used properties are:
 | 
						|
         *      size: 500,
 | 
						|
         *      color: 0xFF00FF,
 | 
						|
         *      fillAlpha:0.5
 | 
						|
         *  
 | 
						|
         *      icon: 'path/to/icon.png'
 | 
						|
         *      iconColor: 0xFFFFFF,
 | 
						|
         *    "items": [
 | 
						|
         *      //COMMENT: Items are defined in the items array.
 | 
						|
         *          {
 | 
						|
         *              location: {
 | 
						|
         *                  //COMMENT: Location must be defined.
 | 
						|
         *                  x: LAT_VALUE,
 | 
						|
         *                  y: LNG_VALUE
 | 
						|
         *              }
 | 
						|
         *          },{
 | 
						|
         *              color: 0xFF0000,
 | 
						|
         *              location: {
 | 
						|
         *                  //COMMENT: Location must be defined.
 | 
						|
         *                  x: LAT_VALUE,
 | 
						|
         *                  y: LNG_VALUE
 | 
						|
         *              }
 | 
						|
         *          }
 | 
						|
         *      ]
 | 
						|
         * }
 | 
						|
         */
 | 
						|
 | 
						|
        let exampleOverlayJSON = {
 | 
						|
            icon: '../../../assets/icons/place.png',
 | 
						|
            iconColor: '0x000000',
 | 
						|
            iconAnchor: { x: 0.5, y: 1 },
 | 
						|
            scale: 0.2,
 | 
						|
            color: '0xFF00FF',
 | 
						|
            fillAlpha: 0,
 | 
						|
            items: [
 | 
						|
                {
 | 
						|
                    name: 'Abidjan',
 | 
						|
                    fontWeight: "bold",
 | 
						|
                    icon: '../../../assets/icons//beenhere.png',
 | 
						|
                    iconColor: 0x00ff00,
 | 
						|
                    labelVerticalAlignment: "underneath",
 | 
						|
                    label: 'Abidjan',
 | 
						|
                    location: {
 | 
						|
                        x: 5.34947,
 | 
						|
                        y: -4.006472
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... der größte städtische Ballungsraum der Elfenbeinküste.'
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Berlin',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: 52.52543,
 | 
						|
                        y: 13.385291
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... ist die Bundeshauptstadt der Bundesrepublik Deutschland.'
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Canberra',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: -35.282025,
 | 
						|
                        y: 149.128648
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... ist die Hauptstadt und achtgrößte Stadt Australiens.'
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Kapstadt',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: -33.925448,
 | 
						|
                        y: 18.416962
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... ist eine Hafenstadt an der Südwestküste Südafrikas auf einer Halbinsel, die vom beeindruckenden Tafelberg dominiert wird.'
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Moskau',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: 55.750892,
 | 
						|
                        y: 37.622799
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... die kosmopolitische Hauptstadt Russlands, liegt im Westen des Landes und wird von der Moskwa durchflossen.'
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Washington, D.C.',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: 38.89565,
 | 
						|
                        y: -77.031407
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '...  ist die Hauptstadt der USA und eine kompakte Stadt am Potomac River, die an die Bundesstaaten Maryland und Virginia grenzt.'
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Rio de Janeiro',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: -22.8714,
 | 
						|
                        y: -43.28049
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... ist eine ausgedehnte brasilianische Küstenmetropole. '
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    name: 'Tokio',
 | 
						|
 | 
						|
                    location: {
 | 
						|
                        x: 35.696278,
 | 
						|
                        y: 139.731366
 | 
						|
                    },
 | 
						|
                    information:
 | 
						|
                        '... ist eine Global City in der Kantō-Region im Osten der japanischen Hauptinsel Honshū.'
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }
 | 
						|
    </script>
 | 
						|
 | 
						|
    <script class="doctest" data-collapsible data-title="Overlay">
 | 
						|
 | 
						|
        let overlay = new Overlay(exampleOverlayJSON)
 | 
						|
 | 
						|
        /**
 | 
						|
         * Textures should be loaded using the app's texture loader.
 | 
						|
         * With the findTexture method all required Textures within the 
 | 
						|
         * overlays are loaded.
 | 
						|
         */
 | 
						|
        let overlayTextures = overlay.findAllTextures()
 | 
						|
 | 
						|
        let list = [osmworld].concat(overlayTextures)
 | 
						|
        app.loadTextures(list, textures => texturesLoaded(textures), {
 | 
						|
            resolutionDependent: false
 | 
						|
        })
 | 
						|
 | 
						|
        function texturesLoaded(textures) {
 | 
						|
 | 
						|
            /** When all textures are loaded .... */
 | 
						|
            setupMap(textures)
 | 
						|
 | 
						|
            //Retrieve all overlay textures.
 | 
						|
            overlay.selectTextures(textures)
 | 
						|
 | 
						|
            // Just some Helpers for the Popups.
 | 
						|
            let popup = null
 | 
						|
            let cleaner = null
 | 
						|
            const vanishingTime = 1000
 | 
						|
 | 
						|
            /**
 | 
						|
             * 
 | 
						|
             * The actual PIXI elements are created when the overlay.create() is called.
 | 
						|
             * This returns an GeoLayer which can be directly put onto the map's Maplayer (or any other GeoLayer).
 | 
						|
             * 
 | 
						|
             * INFO: MapLayer and GeoLayer are specialized container for PIXI. They are meant to
 | 
						|
             * place PIXI Elements according to their world-coordinates (lat/lng position), instead
 | 
						|
             * of actual pixel values.
 | 
						|
             * 
 | 
						|
             */
 | 
						|
 | 
						|
            let exampleOverlayGeoLayer = overlay.create()
 | 
						|
 | 
						|
            // When placed on the mapLayer, the PIXI Graphic elements, that
 | 
						|
            // reside inside GeoGraphic Objects are placed automatically at the
 | 
						|
            // correct coordinates of the map.
 | 
						|
            app.mapLayer.addLayer(exampleOverlayGeoLayer)
 | 
						|
 | 
						|
 | 
						|
            // Just a helper function that clears the popups and removes 
 | 
						|
            // a remaining cleaner timeout.
 | 
						|
            function clearPopup() {
 | 
						|
                if (popup) {
 | 
						|
                    popup.parent.removeChild(popup)
 | 
						|
                    popup = null
 | 
						|
                }
 | 
						|
 | 
						|
                if (cleaner != null) {
 | 
						|
                    clearTimeout(cleaner)
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    </script>
 | 
						|
    <script>
 | 
						|
    </script>
 | 
						|
</body>
 | 
						|
 | 
						|
</html> |