From e316f98e267e608876f666698bf4ad36f6d9a5e2 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Mon, 17 Oct 2016 20:56:00 +0100 Subject: [PATCH] Squashed commit of the following: commit 02c0896ab21422c7b2ee63ad87276de97d2649d1 Author: Jonny Barnes Date: Mon Oct 17 20:55:08 2016 +0100 Add change to log commit 05946ce17bf81f4965da4c241c8b636b81fb15cd Author: Jonny Barnes Date: Mon Oct 17 19:06:22 2016 +0100 The docs implied a different format response, adjusting my code to the actual response commit 55e3fab71eed3d44591d3742a9e30ae840427d2c Author: Jonny Barnes Date: Mon Oct 17 17:16:07 2016 +0100 Add a missing bracket/semi-colon to end of return statement commit 08c5b687db7228ebbecb0cd975857c886c6e0851 Author: Jonny Barnes Date: Mon Oct 17 17:10:42 2016 +0100 Only add a map for actual places commit eef45a3ab36015ffd3ce1129afd15f570e4e8496 Author: Jonny Barnes Date: Mon Oct 17 17:08:24 2016 +0100 Allow a name to be used instead of co-ordinates --- app/Http/Controllers/NotesController.php | 59 +++++++++++++++++++++--- changelog.md | 3 ++ resources/views/templates/note.blade.php | 2 +- 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/NotesController.php b/app/Http/Controllers/NotesController.php index dda192ec..7b2bc7fd 100644 --- a/app/Http/Controllers/NotesController.php +++ b/app/Http/Controllers/NotesController.php @@ -2,14 +2,15 @@ namespace App\Http\Controllers; -use Cache; use Twitter; use App\Tag; use App\Note; use HTMLPurifier; +use GuzzleHttp\Client; use HTMLPurifier_Config; use Jonnybarnes\IndieWeb\Numbers; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Facades\Cache; use Jonnybarnes\WebmentionsParser\Authorship; // Need to sort out Twitter and webmentions! @@ -40,9 +41,7 @@ class NotesController extends Controller $latlng = explode(',', $pieces[0]); $note->latitude = trim($latlng[0]); $note->longitude = trim($latlng[1]); - if (count($pieces) == 2) { - $note->address = $pieces[1]; - } + $note->address = $this->reverseGeoCode((float) trim($latlng[0]), (float) trim($latlng[1])); } if ($note->place !== null) { $lnglat = explode(' ', $note->place->location); @@ -129,9 +128,7 @@ class NotesController extends Controller $latlng = explode(',', $pieces[0]); $note->latitude = trim($latlng[0]); $note->longitude = trim($latlng[1]); - if (count($pieces) == 2) { - $note->address = $pieces[1]; - } + $note->address = $this->reverseGeoCode((float) trim($latlng[0]), (float) trim($latlng[1])); } if ($note->place !== null) { $lnglat = explode(' ', $note->place->location); @@ -280,4 +277,52 @@ class NotesController extends Controller return $purifier->purify($html); } + + /** + * Do a reverse geocode lookup of a `lat,lng` value. + * + * @param float The latitude + * @param float The longitude + * @return string The location name + */ + public function reverseGeoCode(float $latitude, float $longitude): string + { + $latlng = $latitude . ',' . $longitude; + + return Cache::get($latlng, function () use ($latlng, $latitude, $longitude) { + $guzzle = new Client(); + $response = $guzzle->request('GET', 'https://nominatim.openstreetmap.org/reverse', [ + 'query' => [ + 'format' => 'json', + 'lat' => $latitude, + 'lon' => $longitude, + 'zoom' => 18, + 'addressdetails' => 1, + ], + 'headers' => ['User-Agent' => 'jonnybarnes.uk via Guzzle, email jonny@jonnybarnes.uk'] + ]); + $json = json_decode($response->getBody()); + if (isset($json->address->town)) { + $address = $json->address->town . ', ' . $json->address->country; + Cache::forever($latlng, $address); + + return $address; + } + if (isset($json->address->city)) { + $address = $json->address->city . ', ' . $json->address->country; + Cache::forever($latlng, $address); + + return $address; + } + if (isset($json->address->county)) { + $address = $json->address->county . ', ' . $json->reversegeocode->country; + Cache::forever($latlng, $address); + + return $address; + } + Cache::forever($latlng, $json->address->country); + + return $json->reversegeocode->addressparts->country; + }); + } } diff --git a/changelog.md b/changelog.md index 4773c976..9828cd52 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## Version {next} + - Allow co-ordinates to be used for note location, reverse geocode place name will be used (w/o map) + ## Version 0.0.14.2 (2016-10-17) - Update .lock, particularly trying to get medialibrary working diff --git a/resources/views/templates/note.blade.php b/resources/views/templates/note.blade.php index 2c976ff6..377b3794 100644 --- a/resources/views/templates/note.blade.php +++ b/resources/views/templates/note.blade.php @@ -19,7 +19,7 @@ @if($note->address)in @if($note->placeLink)@endif{{ $note->address }}@if($note->placeLink)@endif@endif @if($note->replies > 0)Replies: {{ $note->replies }}@endif @if($note->tweet_id)@include('templates.social-links', ['tweet_id' => $note->tweet_id, 'nb60id' => $note->nb60id])@endif -@if ($note->latitude) +@if ($note->placeLink)
@endif