Google Map API Performance

June 30, 2009 § 2 Comments

I am summarizing a session on Google Map API Performance here. This help you to evaluate using Google Map for iphone app.

Google JavaScript Map API

The total sequence of loading the script and resources is about 4.6 sec on avg web. However, it takes 18 sec to load on Android and iphone.

JavaScript library is 220 KB unzipped. It takes more than 4 sec to parse the API on iphone. Since engineers can’t reduce the codebase size after modularizing classes, Google map team decides to create Google Map API v3.

This v3 offers a few features – markers, infowindows, geocoding.

On v2 GMarker class is designed for features not for performance. Each marker is consisting of up to 5 divs. To show 10,000 GMarkers, you are loading 50,000 DOM nodes in the browser.

Google extends GOverlay class to create a custom lightweight marker. This MakerLight, overlay contains only 2 divs per marker.

Google Flash API is faster in rendering but it suffers from a slow DOM.

How to use Google Map with Objective-C Part I

May 24, 2009 § Leave a comment

You want to build an iphone app that open Google map. You would like to show the map in certain ways.

You can consider using Google Map API. Sometimes you would use Google Map Parameters rather than Google API where certain featurse are not supported in API eg Google map displaying driving directions.

It all starts with maps.google.com (.co.uk etc).

=q

Exaction location can be specified as latitude and longitude in

1) decimal form

52.123N,2.456W

52.123,-2.456

2) degrees, minutes and seconds

52 7 22.8N,2 27 21.6W

52 7 22.8,-2 27 21.6

3) degrees and minutes

52 7.38N,2 27.36W

52 7.38,-2 27.36

Any text added in parentheses () is displayed in the info window and sidebar in bold.

Example:

http://maps.google.com/?q=New+York,+NY+(Mapki%A0is%A0a%A0very%A0good%A0Wiki%A0for%A0Google%A0Maps!%A0%A0%A0%A0%A0%A0%A0%A0+The%A0previous%A0line%A0is%A0now%A0sufficiently%A0long!)

The words “to” and “from” cause the driving directions function to be activated.

The word “near” or “loc:” causes the local search function to be activated.

space-ampersand-space (use +%26+ or %20%26%20 in URLs, not +&+ or +&+ otherwise the ampersand gets treated as a separator) can be used between the names of two streets to specify an intersection.

A location can also be specified after an @, in decimal form (@52.123,-2.456). This gives a lower zoom level than using the same values without the at sign. Using this format interferes with other options of the query parameter. The @ sign instead of “near” or “loc:” tends to cause only a single business result to be displayed.To place a custom labeled marker at an arbitrary location,

http://maps.google.com/?q=10+Downing+Str+is+not+here@51.50335,-0.227721

The label can’t be a country name, or no marker will be shown; but it can be empty, when the co-ordinates will be used.

prefix the query with “sky:” to search KML content created for Sky, q=sky:Leo, designed for use with Google Sky and KML output.

near= Can be used as the location part of a query instead of putting the whole thing into q=.

http://maps.google.com/?near=us

g= a address/location, provides extra context for the q param

ll= Latitude,longitude of map centre – Note the order. Only decimal format is accepted.

If this is used without a query, then the map is centred at the point but no marker or info window is displayed.

sll= Latitude,longitude of the point from which the business search should be performed. You could use this to perform an off-centre busness search. Google use it so “link to this page” can record a map that has had the centre moved after performing a business search. When requesting a route map.getBounds().getSouthWest().toUrlValue() returns the same value maps.google.com uses.

spn= Approximate lat/long span. The zoom level will be adjusted to fit if there’s no z= parameter. Use this Mapki tool to find a lat and long.

sspn= Stands for “Screen span”. Map bounds dimensions in Degrees, to calculate this use:
newGLatLng(map.getBounds().getNorthEast().lat() − map.getBounds().getSouthWest().lat(),map.getBounds().getNorthEast().lng() − map.getBounds().getSouthWest().lng()).toUrlValue()

latlng= This is a weird one. It takes three numbers separated by commas. The first two numbers (presumably representing latitude and longitude multiplied by 1000000) are ignored. The third number seems to be a Google internal “Company ID” number for a particular business. E.g. latlng=0,0,14944637421527611642 represents Blackpool Community Church. Specifying this parameter performs a Google Search for pages that reference that business, and displays a tiny map. Other parameters, in particular q=, must have valid contents (but need not relate to the target business) for this to work.

cid= Similar to latlng, but generating a different map size. It takes three numbers separated by commas. The first two numbers (presumably representing latitude and longitude multiplied by 1000000) are ignored. The third number seems to be a Google internal “Company ID” number for a particular business. E.g. cid=0,0,14944637421527611642 represents Blackpool Community Church. Specifying this parameter displays a large map of the identified company location. Other parameters, in particular q=, must have valid contents (but need not relate to the target business) for this to work.

geocode= Concatination of “geocode” encoded values for waypoints used in Directions. Appears when waypoints in “from: blah to: blah” are potentially ambigious. E.g, &saddr=Were+St&daddr=Kings+Hwy+to:Princes+Hwy+to:Princes+Hwy+to:Monaro+Hwy+to:-35.43483,149.112175&hl=en&geocode=FbBP4_0dSEXjCA%3BFWIj4_0dpMDtCA%3BFe4g3_0dunvzCA%3BFfBf0P0dEGzuCA%3BFSoL1_0dtorjCA%3B
is the end result from joining the “geocode” values for each waypoint with %3B.

Map Display

  • t= Map Type. The available options are “m” map, “k” satellite, “h” hybrid, “p” terrain.
  • z= Sets the zoom level.
  • layer= Activates overlays. Current options are “t” traffic, “c” street view. Append (e.g. layer=tc) for simultaneous.
  • view= Can be used to select text view (view=text) or the normal map view (view=map).

Directions

  • saddr= Source address. Use this when asking for driving directions.
Any text added in brackets is displayed in the sidebar in bold.
  • daddr= Destination address(es). Use this when asking for driving directions
Any text added in brackets is displayed in the sidebar in bold.
“+to:” clauses can be appended to the destination to request multiple destination routing, like this daddr=Blackpool+to:Manchester+to:Leeds
Text in brackets can also be added to the “+to:” clauses.
  • mra ?? what does mean this route parameter? known possible values=dm, dpe, cc, ls, …
  • mrcr ?? what does mean this route parameter? known possible values=0
  • mrsp ?? what does mean this route parameter? known possible values=0,1
  • mrad= Additional destination address.
If you’ve got three points in your trip you can use saddr=, daddr= and mrad= instead of “+to:” clauses.
  • dirflg Route type.
    • dirflg=h Switches on “Avoid Highways” route finding mode.
    • dirflg=t Switches on “Avoid Tolls” route finding mode.
    • dirflg=r Switches on “Public Transit” – only works in some areas.
    • dirflg=w Switches to walking directions – still in beta.
  • via= Comma separated list of intermediate addresses for directions, that should be ‘via points’. In the example via=1,3 addresses 1 and 3 will be via points without their own entry in the sidebar. The start (0), the 2nd intermediate (2) and the end (4) will be full addresses.
  • doflg= Distance Units. (Defaults to prevalent units in country of origin.)
    • doflg=ks ??
    • doflg=ptk Outputs directions in metric (km).
    • doflg=ptm Outputs directions in imperial (miles).

Street View

  • cbll= Latitude,longitude for Street View.
  • cbp= Street View window that accepts 5 parameters:
    1. Street View/map arrangement, 11=upper half Street View and lower half map, 12=mostly Street View with corner map
    2. Rotation angle/bearing (in degrees)
    3. Tilt angle, -90 (straight up) to 90 (straight down)
    4. Zoom level, 0-2
    5. Pitch (in degrees) -90 (straight up) to 90 (straight down), default 5
  • panoid= Panorama ID. The ID of the current nearby panorama object. Panorama objects ids are used in the little arrows you can click on in Street View to move you to the next object/property. Eg panoid=eTnPNGoy4bxR9LpjjfFuOw

Tool to find lat and long

Credits:http://mapki.com/wiki/Google_Map_Parameters

Free Open Source Geo Data

May 11, 2009 § Leave a comment

Free Open Source Geo Data here

GeoLite Country
GeoLite City
Free GeoIP City lookup
GeoIP APIs

Free US postal code databases

Free World postal code

Free UK postal code

US City Code here

US Metropolitan Region Code here

ISO 3166-1 country and territory codes here

World City Code here

Word Region Code here

Open Source Objective-C library that mimic Google Map APIs

April 10, 2009 § Leave a comment

By default UIWebView is designed for viewing quick loading web pages. If you intend to view any AJAX-loaded application such as Google map with JavaScript API calls and compiling tiles with data network, you are not going to get good user experience.

This open source project gives you Objective-C library you can integrate to your project. It adds Objective-C methods to mimic Google JavaScript API calls and AJAX responses.

– (NSString*) evalJS:(NSString*)script;

//– Methods corresponding to Google Maps Javascript API methods —————
– (int)       getZoom;
– (void)      setZoom:(int)zoomLevel;
– (void)      zoomIn;
– (void)      zoomOut;
– (GLatLng)   getCenterLatLng;
– (GPoint)    getCenterPixel;
– (void)      setCenterWithPixel:(GPoint)pixel;
– (void)      setCenterWithLatLng:(GLatLng)latlng;
– (void)      panToCenterWithPixel:(GPoint)pixel;
– (GLatLng)   fromContainerPixelToLatLng:(GPoint)pixel;
– (GPoint)    fromLatLngToContainerPixel:(GLatLng)latlng;
– (int)       getBoundsZoomLevel:(GLatLngBounds)bounds;
– (void)      setMapType:(NSString*)mapType;

http://code.google.com/p/iphone-google-maps-component/

This open source project allows your iPhone application to access all basic features of Google Maps (similar to Android’s MapView). It uses a UIWebView in the background to load the HTML/Javascript version of Google Maps.

It offers a set of Objective-C methods that mimic a subset of the original Javascript methods for controlling the map. It currently supports setting the center location and zooming & panning using the touch interface.

It supports for adding clickable and draggable non-javascript markers.

Opening Google Map from UIWebView

April 10, 2009 § 2 Comments

iPhone OS 1.0+ use this URL method to open maps in the map app

http://maps.google.com/q=<query string>

iPhone OS 2.0+ use another URL method to open maps in the map app

maps:q=<query string>

UIWebView won’t open maps app by default.

You can consider using stringByAppendingString to add q=<query string>to maps:.

Below is not related to opening Google map app from UIWebView. However, it is nice to be able to open content links within UIWebView in Safari.

You can use openURL: method to open any links in safari within UIWebView. By default, links are opened within UIWebView. Target=’_blank’ option on url won’t work on UIWebView. It won’t open another new window using Safari app.

(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:request.URL];
return false;
}
return true;
}

Another approach

(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {

NSURL *requestURL =[ [ request URL ] retain ];
// Check to see what protocol/scheme the requested URL is.
if ( ( [ [ requestURL scheme ] isEqualToString: @”http” ]
|| [ [ requestURL scheme ] isEqualToString: @”https” ] )
&& ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) {
return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ];
}
// Auto release
[ requestURL release ];
// If request url is something other than http or https it will open in UIWebView.
return YES;
}

Google map on UIWebView

April 10, 2009 § 1 Comment

It seems to be common problem in getting map to display fast and well on UIWebView.

Any javascript running in the UIWebView will be terminated after 5 sec. Calling Google map API directly to display the entire map or any attempt to zoom and pan around will be slow, even on 3G network.

A good approach will be using static map image, or preload map images on web server.

Open source mapping alternatives:
http://mapstraction.com/

http://openlayers.org/
http://www.pushpin.com/api/1.3/docs/rest/tile.html

Where Am I?

You are currently browsing the Google Map category at Web Builders.