GDG London & Google Developer Experts
at Google London
Next 2 hours● Who is GDG London & GDE● What we trying to do● Retrospective Game on Google Cloud Platform● Interview with Developer Jose Luis Arenas● Retrospective Game continue● Wrap up
● 8:15pm Live Broadcast After Party
Goal of the Group
● Hold event every 2 months● Work with PHP, Java, Python and other user
groups● Spread the knowledge of Google Cloud
Platform● Give feedback to Google
Where to find us
● Find out about our events & goals at http://www.meetup.com/Google-Cloud-Platform-App-Engine-Compute-Engine-BigQuery/
Google Cloud Platform HackathonBuilding apps with opendata from data.gov.uk
● Friday 18th July to 20th● Build apps in 48 hours using data from data.
gov.uk● 13,000+ government dataset● Hosted at Google Campus
Retrospective GameWrite on coloured Post-it note your ideas for the following.
Only 1 idea per Post-it note
Green - Favourite announcement in the keynotePink - Feature Request for Google App EngineOrange - Feature Request for Google Compute Engine Yellow - Other Feature
Other info Job Role & Which product you're using.
Interview with Developer Jose Luis Arenas
Jose Luis Arenas from NDS & TeamUno
Rif Kiamil from FOODit & TeamUno
Problem
Need to find all the names of streets in a radius.
Wanted to take open source data “OS Locator” from Ordnance Survey and make it into an API.
Application Architecture v1
Search API is the forgotten database of Google Cloud Platform. It has it’s own SLA and totally different to datastore
Search API still learning to count
Search API - Giving us results outside search radius
Link to source code https://github.com/FOODit/street-geo-search/blob/master/streetsearch.py#L123
Issue 8824: Distance queries in Search API return results that are further away than specified https://code.google.com/p/googleappengine/issues/detail?id=8824
We could have● Used CloudSQL - Cost a lot more!
Customer said No (see mySQL geo euery example)
● Tried GeoHashing with a Project called “geomodel” - But it was too slow. But we liked to idea of it using datastore over
search api. (see geomodel example)
Went back to Search API, but with our workaround
Latitude
Latitude & Longitude
Check which 4 results are 3km away
Using Haversine Formula found objects
Why not do this in datastore?Inequality Filters Are Allowed On One Property Only
Street.query().filter(‘lat >’, min_lat).filter(‘lat <’ max_lat).filter(‘lon >’, min_lon).filter(‘lon <’,max_lon)
Workarround:
[s for s Street.query().filter(‘lat >’, min_lat).filter(‘lat <’ max_lat) if s.lon > and s.lon < max_lon]
but an stripe of 2 km wide from East to West in UK has lots of streets….
Application Architecture v2
Why I love endpoints
Google APIs ExplorerField filtering and versioningGenerate client libraries for iOS and Android
End Points
What I like about End Points & GAE
I like this style as never have to think about it again..
I know always going to work and not going to cost me or client much!
I liked Endpoints so much that..
My new startup TeamUno using just Google End Points and AngularJS
We don’t have any server side templates.
I would love to see it Google make it easier to bind datastore/cloudsql to End Points ( LESS CODE)
Find us online at
Jose Luis Arenas [email protected] from NDS & TeamUno
Rif Kiamil [email protected] from FOODit & TeamUno
Notes - Import
How did you do the import… https://github.com/FOODit/street-geo-search/blob/master/tools/OSLocator-Import.php
How did covert OS Grid References to Lat & LongPHPCoord http://www.jstott.me.uk/phpcoord/
Notes - mySQL Geo Query $query = <<<EODSELECT NAME, CLASSIFICATION, SETTLEMENT, LOCALITY, COU_UNIT, LOCAL_AUTHORITY, TILE_10K, TILE_25K, SOURCE, CENTLAT, CENTLNG, DISTANCE FROM (SELECT NAME, CLASSIFICATION, SETTLEMENT, LOCALITY, COU_UNIT, LOCAL_AUTHORITY, TILE_10K, TILE_25K, SOURCE, CENTLAT, CENTLNG, r, (6378.10 * ACOS(COS(RADIANS(latpoint)) * COS(RADIANS(CENTLAT)) * COS(RADIANS(longpoint) - RADIANS(CENTLNG)) + SIN(RADIANS(latpoint)) * SIN(RADIANS(CENTLAT)))) AS DISTANCE FROM OSL JOIN ( SELECT $lat AS latpoint, $lng AS longpoint, $rad AS r ) AS p WHERE CENTLAT BETWEEN latpoint - (r / 111.045) AND latpoint + (r / 111.045) AND CENTLNG BETWEEN longpoint - (r / (111.045 * COS(RADIANS(latpoint)))) AND longpoint + (r / (111.045 * COS(RADIANS(latpoint)))) ) d WHERE DISTANCE <= r ORDER BY DISTANCEEOD;
Notes - Example of GeoHashing geomodel Project https://code.google.com/p/geomodel/
from geo.geomodel import GeoModel
class OSLocator(GeoModel, ndb.Model):
…….
entity = OSLocator()
entity.location = ndb.GeoPt(item.centlat, item.centlng)
……
results = OSLocator.proximity_fetch(
OSLocator.query(),
ndb.GeoPt(request.latitude, request.longitude),
max_results=10000,
max_distance=int(request.radius * 1000.0))
Retrospective Game Summary
Retrospective GameWrite on coloured Post-it note your ideas for the following.
Only 1 idea per Post-it note
Green - Favourite announcement in the keynotePink - Feature Request for Google App EngineOrange - Feature Request for Google Compute Engine Yellow - Other Feature
Other info Job Role & Which product you're using.