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

Post on 21-May-2015

565 views 2 download

Tags:

description

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.

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

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

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.

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 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)

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.