Interview with Developer Jose Luis Arenas regarding Google App Engine & Geospatial Data search. Plus detail about opensource project on using Search API & Google Datastore with Geospatial Datas from UK Government.
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
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 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
4. Where to find us
● Find out about our events & goals at http:
//www.meetup.com/Google-Cloud-Platform-
App-Engine-Compute-Engine-BigQuery/
5. 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
6. 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.
8. 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.
9.
10. Application Architecture v1
Search API is the forgotten database of Google Cloud Platform. It has it’s own SLA and totally different to datastore
11. 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
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 to Search API, but with
our workaround
18. 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….
25. 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!
26. 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)
27. Find us online at
Jose Luis Arenas jla@sblk.co from NDS & TeamUno
Rif Kiamil rif@foodit.com from FOODit & TeamUno
28. 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/
29. 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;
30. 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))
32. 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.