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 Hackathon
Building 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 Game
Write on coloured Post-it note your ideas for the following.
Only 1 idea per Post-it note
Green - Favourite announcement in the keynote
Pink - Feature Request for Google App Engine
Orange - 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
End Points
Go to https://street-geo-search.appspot.com/
Why I love endpoints
Google APIs Explorer
Field filtering and versioning
Generate 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 jla@sblk.co from NDS & TeamUno
Rif Kiamil rif@foodit.com 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 &
Long
PHPCoord http://www.jstott.me.uk/phpcoord/
Notes - mySQL Geo Query
$query = <<<EOD
SELECT 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 DISTANCE
EOD;
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 Game
Write on coloured Post-it note your ideas for the following.
Only 1 idea per Post-it note
Green - Favourite announcement in the keynote
Pink - Feature Request for Google App Engine
Orange - Feature Request for Google Compute Engine
Yellow - Other Feature
Other info Job Role & Which product you're using.

Interview with Developer Jose Luis Arenas regarding Google App Engine & Geospatial Datas

  • 1.
    GDG London &Google Developer Experts at Google London
  • 2.
    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
  • 3.
    Goal of theGroup ● 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
  • 4.
    Where to findus ● Find out about our events & goals at http: //www.meetup.com/Google-Cloud-Platform- App-Engine-Compute-Engine-BigQuery/
  • 5.
    Google Cloud PlatformHackathon Building 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
  • 6.
    Retrospective Game Write oncoloured Post-it note your ideas for the following. Only 1 idea per Post-it note Green - Favourite announcement in the keynote Pink - Feature Request for Google App Engine Orange - Feature Request for Google Compute Engine Yellow - Other Feature Other info Job Role & Which product you're using.
  • 7.
    Interview with Developer JoseLuis Arenas Jose Luis Arenas from NDS & TeamUno Rif Kiamil from FOODit & TeamUno
  • 8.
    Problem Need to findall the names of streets in a radius. Wanted to take open source data “OS Locator” from Ordnance Survey and make it into an API.
  • 10.
    Application Architecture v1 SearchAPI is the forgotten database of Google Cloud Platform. It has it’s own SLA and totally different to datastore
  • 11.
    Search API stilllearning 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
  • 12.
    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)
  • 13.
    Went back toSearch API, but with our workaround
  • 14.
  • 15.
  • 16.
    Check which 4results are 3km away
  • 17.
  • 18.
    Why not dothis 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….
  • 19.
  • 20.
    End Points Go tohttps://street-geo-search.appspot.com/
  • 21.
    Why I loveendpoints Google APIs Explorer Field filtering and versioning Generate client libraries for iOS and Android
  • 22.
  • 25.
    What I likeabout 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!
  • 26.
    I liked Endpointsso 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)
  • 27.
    Find us onlineat Jose Luis Arenas jla@sblk.co from NDS & TeamUno Rif Kiamil rif@foodit.com from FOODit & TeamUno
  • 28.
    Notes - Import Howdid 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 & Long PHPCoord http://www.jstott.me.uk/phpcoord/
  • 29.
    Notes - mySQLGeo Query $query = <<<EOD SELECT 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 DISTANCE EOD;
  • 30.
    Notes - Exampleof 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))
  • 31.
  • 32.
    Retrospective Game Write oncoloured Post-it note your ideas for the following. Only 1 idea per Post-it note Green - Favourite announcement in the keynote Pink - Feature Request for Google App Engine Orange - Feature Request for Google Compute Engine Yellow - Other Feature Other info Job Role & Which product you're using.