Added OSM map partial, Place model function and added it to home.
This commit is contained in:
		@@ -55,6 +55,19 @@ class Place (models.Model):
 | 
			
		||||
    longitude = models.FloatField()
 | 
			
		||||
    description = models.TextField()
 | 
			
		||||
 | 
			
		||||
    # Get center position of all LP-geocoordinates.
 | 
			
		||||
 | 
			
		||||
    def average_latlon():
 | 
			
		||||
        place_list = Place.objects.all()
 | 
			
		||||
        amount = len(place_list)
 | 
			
		||||
        longitude = 0
 | 
			
		||||
        latitude = 0
 | 
			
		||||
    
 | 
			
		||||
        for place in place_list:
 | 
			
		||||
            longitude += place.longitude
 | 
			
		||||
            latitude += place.latitude
 | 
			
		||||
        return (latitude / amount, longitude / amount)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
 | 
			
		||||
<div class="LP-PlaceGrid">
 | 
			
		||||
    <h1 class="LP-Headline LP-Headline">Explore the latest locations</h1>
 | 
			
		||||
    {% include 'partials/osm_map.html' %}
 | 
			
		||||
    <ul class="LP-PlaceGrid__Grid">
 | 
			
		||||
        {% for place in place_list %}
 | 
			
		||||
        <li class="LP-PlaceGrid__Item">
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										67
									
								
								lostplaces/lostplaces_app/templates/partials/osm_map.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								lostplaces/lostplaces_app/templates/partials/osm_map.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
<div id="map" class="map"></div>
 | 
			
		||||
    <div id="info" class="map-popup"></div>
 | 
			
		||||
    <script type="text/javascript">
 | 
			
		||||
        var map = new ol.Map({
 | 
			
		||||
        target: 'map',
 | 
			
		||||
        layers: [
 | 
			
		||||
            new ol.layer.Tile({
 | 
			
		||||
            source: new ol.source.OSM()
 | 
			
		||||
            }),
 | 
			
		||||
        ],
 | 
			
		||||
        view: new ol.View({
 | 
			
		||||
            center: ol.proj.fromLonLat([{{average_latlon|last}}, {{average_latlon|first}}]),
 | 
			
		||||
            zoom: 6
 | 
			
		||||
        })
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
          var vectorSource = new ol.source.Vector({
 | 
			
		||||
            features: [
 | 
			
		||||
            {% for place in place_list %}
 | 
			
		||||
            new ol.Feature({
 | 
			
		||||
              geometry: new ol.geom.Point(
 | 
			
		||||
                ol.proj.fromLonLat([{{place.longitude}},{{place.latitude}}])
 | 
			
		||||
              ), 
 | 
			
		||||
              url: '/{{place.pk}}',
 | 
			
		||||
              name: '{{place.name}}'
 | 
			
		||||
            }),
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
            ]
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          var markerVectorLayer = new ol.layer.Vector({
 | 
			
		||||
            source: vectorSource,
 | 
			
		||||
            style: new ol.style.Style({
 | 
			
		||||
                image: new ol.style.Icon({
 | 
			
		||||
                  anchor: [0.5, 46],
 | 
			
		||||
                  anchorXUnits: 'fraction',
 | 
			
		||||
                  anchorYUnits: 'pixels',
 | 
			
		||||
                  scale: 0.3,
 | 
			
		||||
                  src: 'http://icons.iconarchive.com/icons/paomedia/small-n-flat/128/map-marker-icon.png'
 | 
			
		||||
                })
 | 
			
		||||
            })
 | 
			
		||||
          });
 | 
			
		||||
          map.addLayer(markerVectorLayer);
 | 
			
		||||
 | 
			
		||||
          var overlay = new ol.Overlay({
 | 
			
		||||
            element: document.getElementById('info'),
 | 
			
		||||
            positioning: 'bottom-left'
 | 
			
		||||
          });
 | 
			
		||||
          overlay.setMap(map);
 | 
			
		||||
 | 
			
		||||
          map.on(['singleclick'], function(evt) {
 | 
			
		||||
            var feature = map.forEachFeatureAtPixel(evt.pixel, function(feature) {
 | 
			
		||||
              window.open(feature.get('url'), '_blank');
 | 
			
		||||
            });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          map.on(['pointermove'], function(evt) {
 | 
			
		||||
            var feature = map.forEachFeatureAtPixel(evt.pixel, function(feature) {
 | 
			
		||||
              overlay.setPosition(evt.coordinate.map(element => element + 1));
 | 
			
		||||
              overlay.getElement().innerHTML = feature.get('name');
 | 
			
		||||
              return feature;
 | 
			
		||||
            });
 | 
			
		||||
            overlay.getElement().style.display = feature ? '' : 'none';
 | 
			
		||||
            document.body.style.cursor = feature ? 'pointer' : '';
 | 
			
		||||
          });
 | 
			
		||||
        
 | 
			
		||||
    </script>
 | 
			
		||||
		Reference in New Issue
	
	Block a user