forked from cfjedimaster/Cordova-Examples
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5bdeb0d
commit 189d400
Showing
42 changed files
with
132,978 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# http://editorconfig.org | ||
root = true | ||
|
||
[*] | ||
charset = utf-8 | ||
indent_style = space | ||
indent_size = 2 | ||
end_of_line = lf | ||
insert_final_newline = true | ||
trim_trailing_whitespace = true | ||
|
||
[*.md] | ||
insert_final_newline = false | ||
trim_trailing_whitespace = false |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# Specifies intentionally untracked files to ignore when using Git | ||
# http://git-scm.com/docs/gitignore | ||
|
||
node_modules/ | ||
platforms/ | ||
plugins/ |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
/* Empty. Add your own CSS if you like */ | ||
|
||
#selImage { | ||
max-width:300px; | ||
max-height:300px; | ||
display: block; | ||
margin: 0 auto; | ||
} | ||
|
||
.map { | ||
display:block; | ||
margin: 0 auto; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> | ||
<title></title> | ||
|
||
<link href="lib/ionic/css/ionic.css" rel="stylesheet"> | ||
<link href="css/style.css" rel="stylesheet"> | ||
|
||
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above | ||
<link href="css/ionic.app.css" rel="stylesheet"> | ||
--> | ||
|
||
<!-- ionic/angularjs js --> | ||
<script src="lib/ionic/js/ionic.bundle.js"></script> | ||
|
||
<!-- cordova script (this will be a 404 during development) --> | ||
<script src="cordova.js"></script> | ||
|
||
<!-- your app's js --> | ||
<script src="js/app.js"></script> | ||
<script src="js/controllers.js"></script> | ||
<script src="js/services.js"></script> | ||
<script src="lib/exif.js"></script> | ||
</head> | ||
|
||
<body ng-app="starter"> | ||
|
||
<ion-pane> | ||
<ion-header-bar class="bar-stable"> | ||
<h1 class="title">Photo Locator</h1> | ||
</ion-header-bar> | ||
|
||
<ion-content class="padding" ng-controller="MainCtrl"> | ||
<button class="button button-assertive button-full" ng-click="selectPicture()">Select Photo</button> | ||
|
||
<img ng-src="{{img.url}}" id="selImage"> | ||
|
||
<div><p ng-bind-html="status.text"></p></div> | ||
|
||
</ion-content> | ||
|
||
</ion-pane> | ||
|
||
</body> | ||
</html> |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services']) | ||
|
||
.run(function($ionicPlatform) { | ||
$ionicPlatform.ready(function() { | ||
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard | ||
// for form inputs) | ||
if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) { | ||
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); | ||
cordova.plugins.Keyboard.disableScroll(true); | ||
|
||
} | ||
if (window.StatusBar) { | ||
// org.apache.cordova.statusbar required | ||
StatusBar.styleDefault(); | ||
} | ||
}); | ||
}) | ||
.config(function($compileProvider) { | ||
|
||
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|mailto|content|assets-library|file):/); | ||
|
||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
angular.module('starter.controllers', []) | ||
|
||
.controller('MainCtrl', function($scope,Location) { | ||
|
||
$scope.img = {url:""}; | ||
$scope.status = {text:""}; | ||
|
||
$scope.selectPicture = function() { | ||
navigator.camera.getPicture(gotPic, errHandler, { | ||
sourceType:Camera.PictureSourceType.PHOTOLIBRARY, | ||
destinationType:Camera.DestinationType.NATIVE_URI | ||
}); | ||
}; | ||
|
||
var errHandler = function(e) { | ||
alert('Error with Camera: '+e); | ||
}; | ||
|
||
//utility funct based on https://en.wikipedia.org/wiki/Geographic_coordinate_conversion | ||
var convertDegToDec = function(arr) { | ||
return (arr[0].numerator + arr[1].numerator/60 + (arr[2].numerator/arr[2].denominator)/3600).toFixed(4); | ||
}; | ||
|
||
var gotPic = function(u) { | ||
console.log('Got image '+u); | ||
$scope.img.url = u; | ||
//scope.apply can KMA | ||
$scope.$apply(); | ||
|
||
}; | ||
|
||
var img = document.querySelector("#selImage"); | ||
|
||
img.addEventListener("load", function() { | ||
console.log("load event for image "+(new Date())); | ||
$scope.status.text = "Loading EXIF data for image."; | ||
EXIF.getData(document.querySelector("#selImage"), function() { | ||
console.log("in exif"); | ||
|
||
//console.dir(EXIF.getAllTags(img)); | ||
var long = EXIF.getTag(img,"GPSLongitude"); | ||
var lat = EXIF.getTag(img,"GPSLatitude"); | ||
if(!long || !lat) { | ||
$scope.status.text = "Unfortunately, I can't find GPS info for the picture"; | ||
return; | ||
} | ||
long = convertDegToDec(long); | ||
lat = convertDegToDec(lat); | ||
//handle W/S | ||
if(EXIF.getTag(this,"GPSLongitudeRef") === "W") long = -1 * long; | ||
if(EXIF.getTag(this,"GPSLatitudeRef") === "S") lat = -1 * lat; | ||
console.log(long,lat); | ||
locateAddress(long,lat); | ||
}); | ||
}, false); | ||
|
||
/* | ||
Given a long lat, first I try to Foursquare it, then geocode, then just print it with a map. | ||
*/ | ||
var locateAddress = function(long,lat) { | ||
|
||
$scope.status.text = "Trying to locate the photo."; | ||
|
||
Location.getInfo(long, lat).then(function(result) { | ||
console.log('Result was '+JSON.stringify(result)); | ||
if(result.type === 'foursquare') { | ||
$scope.status.text = 'Your photo was taken at ' + result.name + ' located at ' + result.address; | ||
} else if (result.type === 'geocode') { | ||
$scope.status.text = 'Your photo appears to have been taken at ' + result.address; | ||
} else { | ||
var map = 'https://maps.googleapis.com/maps/api/staticmap?center='+lat+','+long+'zoom=13&size=300x300&maptype=roadmap&markers=color:blue%7Clabel:X%7C'+lat+','+long; | ||
$scope.status.text = 'Sorry, I\'ve got nothing. But here is a map!<br><img class="map" src="' + map + '">'; | ||
} | ||
}); | ||
}; | ||
|
||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
angular.module('starter.services', []) | ||
|
||
.factory('Foursquare', function($http) { | ||
|
||
var CLIENT_ID = 'mahsecretismahsecret'; | ||
var CLIENT_SECRET = 'soylentgreenispeople'; | ||
|
||
function whatsAt(long,lat) { | ||
return $http.get('https://api.foursquare.com/v2/venues/search?ll='+lat+','+long+'&intent=browse&radius=30&client_id='+CLIENT_ID+'&client_secret='+CLIENT_SECRET+'&v=20151201'); | ||
} | ||
|
||
return { | ||
whatsAt:whatsAt | ||
}; | ||
}) | ||
.factory('Geocode', function($http) { | ||
var KEY = 'google should let me geocode for free'; | ||
|
||
function lookup(long,lat) { | ||
return $http.get('https://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+long+'&key='+KEY); | ||
} | ||
|
||
return { | ||
lookup:lookup | ||
}; | ||
|
||
}) | ||
.factory('Location', function($q,Foursquare,Geocode) { | ||
|
||
function getInfo(long,lat) { | ||
console.log('ok, in getInfo with '+long+','+lat); | ||
var deferred = $q.defer(); | ||
Foursquare.whatsAt(long,lat).then(function(result) { | ||
//console.log('back from fq with '+JSON.stringify(result)); | ||
if(result.status === 200 && result.data.response.venues.length >= 1) { | ||
var bestMatch = result.data.response.venues[0]; | ||
//convert the result to something the caller can use consistently | ||
var result = { | ||
type:"foursquare", | ||
name:bestMatch.name, | ||
address:bestMatch.location.formattedAddress.join(", ") | ||
} | ||
console.dir(bestMatch); | ||
deferred.resolve(result); | ||
} else { | ||
//ok, time to try google | ||
Geocode.lookup(long,lat).then(function(result) { | ||
console.log('back from google with '); | ||
if(result.data && result.data.results && result.data.results.length >= 1) { | ||
console.log('did i come in here?'); | ||
var bestMatch = result.data.results[0]; | ||
console.log(JSON.stringify(bestMatch)); | ||
var result = { | ||
type:"geocode", | ||
address:bestMatch.formatted_address | ||
} | ||
deferred.resolve(result); | ||
} | ||
}); | ||
} | ||
}); | ||
|
||
return deferred.promise; | ||
} | ||
return { | ||
getInfo:getInfo | ||
}; | ||
|
||
}); |
Oops, something went wrong.