-
-
Save skp33/ecaa0fd1996cee4f4834bdd1b4b2ad01 to your computer and use it in GitHub Desktop.
Sample reactive Leaflet code for Zeppelin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- place this in an %angular paragraph --> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.5/leaflet.css" /> | |
<div id="map" style="height: 800px; width: 100%"></div> | |
<script type="text/javascript"> | |
function initMap() { | |
var map = L.map('map').setView([30.00, -30.00], 3); | |
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { | |
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors', | |
maxZoom: 12, | |
minZoom: 3 | |
}).addTo(map); | |
var geoMarkers = L.layerGroup().addTo(map); | |
var el = angular.element($('#map').parent('.ng-scope')); | |
angular.element(el).ready(function() { | |
window.locationWatcher = el.scope().compiledScope.$watch('locations', function(newValue, oldValue) { | |
// geoMarkers.clearLayers(); -- if you want to only show new data clear the layer first | |
angular.forEach(newValue, function(tweet) { | |
var marker = L.marker([ tweet.loc.lat, tweet.loc.lon ]) | |
.bindPopup(tweet.user + ": " + tweet.tweet) | |
.addTo(geoMarkers); | |
}); | |
}) | |
}); | |
} | |
if (window.locationWatcher) { | |
// clear existing watcher otherwise we'll have duplicates | |
window.locationWatcher(); | |
} | |
// ensure we only load the script once, seems to cause issues otherwise | |
if (window.L) { | |
initMap(); | |
} else { | |
console.log('Loading Leaflet library'); | |
var sc = document.createElement('script'); | |
sc.type = 'text/javascript'; | |
sc.src = 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.5/leaflet.js'; | |
sc.onload = initMap; | |
sc.onerror = function(err) { alert(err); } | |
document.getElementsByTagName('head')[0].appendChild(sc); | |
} | |
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// place this in a Spark paragraph | |
import org.apache.spark.streaming._ | |
import org.apache.spark.streaming.scheduler.StreamingListener | |
import org.apache.spark.streaming.scheduler.StreamingListenerBatchCompleted | |
import org.apache.spark.streaming.twitter._ | |
case class Loc(lat: Double, lon: Double) | |
case class Tweet(timestamp: java.util.Date, user: String, tweet: String, loc: Loc) | |
val ssc = new StreamingContext(sc, Seconds(2)) | |
val input = TwitterUtils.createStream(ssc, None) | |
input.foreachRDD(rdd => { | |
val df = rdd | |
.filter(_.getGeoLocation() != null) | |
.map(s => Tweet( | |
s.getCreatedAt, | |
s.getUser.getName, | |
s.getText, | |
Loc(s.getGeoLocation.getLatitude, s.getGeoLocation.getLongitude))) | |
var items = df.collect | |
z.angularBind("locations", items) // this is what sends the data to the frontend | |
}) | |
ssc.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment