I know, I know, this is a bit niche but, given the ubiquity of embedded Google Maps (and having done my fair share of Google Maps hacking), I found two utilities from CloudSync interesting.
The second is CSGeoXML, a handy wrapper API that makes it easy to overlay local KML files into an embedded Google Map. This works around a limitation in the Google Maps GGeoXML API that requires that KML files be located on a publicly accessible server. There’s also a blog entry for this one.
Alexander (aka Sasha) Maryanovsky has been hacking away with GWT, and has some come up with a couple of interesting project.
The first, is a fun chess diagram builder that lets you build out a chess diagram and export it out:
Also, he has created Sasha Maps, an API that abstracts mapping implementations allowing you to plugin your own system (but Google Maps and WMS are implemented).
The appropriate Hello World could look something like this:
When you link to Google Maps on the iPhone, it opens up the naive application to give you the full iPhone experience. Alastair James wanted to use the Google Maps JavaScript API on the iPhone, and wrote up his thoughts:
Before the newest version of mobile Safari, this would not have been possible. Fundamentally you cant drag the map! However, with the new version Apple introduced a javascript API for sensing single and double finger drag events.
So, I went about knocking up a very basic test version (try it on your iPhone). Is buggy, basic and sub-optimal, but proves it could work nicely. Try zooming with the double finger pinch action!
I also tried the new webkit CSS transforms to allow free zooming and rotation, however they are buggy and slow on the iphone! Oh well! Anyway, maybe we can have google maps lite on the iphone?
Last week I wrote a simple WhereAreYou? application that used the Google Ajax APIs ClientLocation API to access your location via your IP address.
At the same time, we announced support for the Gears Geolocation API that can calculate your address using a GPS device, WiFi info, cell tower ids, and IP address lookups.
Add to all of that, the W3C Geolocation API that Andrei Popescu of the Gears team is editing. You will notice that it looks similar to the Gears API, with subtle differences. The ClientLocation API is quite different.
To make life easier, I decided to put together a shim called GeoMeta that give you the W3C Geolocation API, and happens to use the other APIs under the hood.
If you have the Geolocation API native in your browser (no one does yet, future proof!) that will be used. If you have Gears, that API will be used, and finally, with nothing the ClientLocation API will be used behind the scenes.
To you the API will look similar:
// navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options)
navigator.geolocation.getCurrentPosition(function(position) {
var location = [position.address.city, position.address.region, position.address.country].join(', ');
createMap(position.latitude, position.longitude, location);
}, function() {
document.getElementById('cantfindyou').innerHTML = "Crap, I don't know. Good hiding!";
});
At least, that is what I would like. Unfortunately, there are a few little differences that leak through.
The W3C API only seems to give you a lat / long, so you have to do the geocoding to get address info
The Gears API gives you an additional gearsAddress object attached to the resulting position object. This can contain a lot of information on the resulting area (street address to city to ...) however for certain providers the API returns that as null, the same as the W3C standard
That gearsAddress object has slightly different information from the address data that the ClientLocation API returns. NOTE: I would love to see this just called 'address' to help the shim.
To give you control when you need it, you can ask the navigator.geolocation object what type it is. navigator.geolocation.type will be null if it is native, but 'Gears' or 'ClientLocation' if a shim kicks in. You can also check navigator.geolocation.shim to see if it is augmented code.
Implementation
There is some fun implementation code in there if you poke around. For example, for the ClientLocation API, when you make a call, it will be added to a queue if the Google Loader hasn't fully loaded yet, and it will kick off that call when finished. Dealing with dynamically creating <script src> as a loading mechanism sure is fun!
I like the idea of jumping straight to the W3C standard and updating the shim as the APIs change. That way, when browsers catch up, the code will still work using the native APIs and you don't have to change a thing.
I also hope that we get general reverse geocoding in place, which would enable me to even take the native "standard" and strap on useful address info to the bare bones lat/long.
Andre Lewis has a new site out there, Placeshout which offers a way to quickly call out your favourites place in various locations.
You could argue that we have other places for this... Yelp for example, or My Maps themselves. So, why Placeshout?
Sometimes, you just want a quick suggestion
When Andre and I are looking for a hole-in-the-wall Mexican restaurant or a park with a softball field, we usually just want a quick suggestion, not a lengthy review. We want to know if a place is worth visiting in 30 seconds.
Placeshout isn't about volume - it's about trying to express the positives and negatives of a destination in as few of words as possible. If people agree, that "shoutout" moves up...if they don't, the shoutout moves down and begins to disappear.
We hope Placeshout makes it easier for you to find local destinations.
There are some interesting features in this, very Web 2.0-looking, site. One that stands out is the enhanced mapping experience on top of Google Maps. As you move around, directional arrows tell you how far various other cities are away. It is kinda fun to watch:
Luke Birdeau has remixed Craigslist to produce a desktop-esque Ajax application view on the data that adds features such as being able to save your favorites, add notes to them, and even use the app offline (e.g. take your laptop on the road to go see the stuff for sale of meet that blind date). The app combines aspects of 3 libraries – TIBCO GI 3.5 for the interface, plus Dojo (for offline) and Google Maps.
To get started you first pick a locale, then a category, then do a search. You can also add multiple regions and categories too.
Here is a quick demonstration of the app in action:
I don't normally post many "mashups" but Prague 360 is to beautiful to pass up.
Jeffrey Martin and his brother David have created some high quality views on some of the cities, and they use the Google Maps API as the platform to show the content.
If you head over to Prague, you will see that along with the usual normal map, satellite, and hybrid options, there are gigapixel versions for Winter and Spring. Jeffrey finds a high spot where he sets up his camera and takes lots of photos of the area. These pictures are with a very nice, zoomed in lens, and then he stitches them together to make one REALLY large photo.
Then David takes the image over to matlab world and cuts it up into tiles for the various zoom levels on the map. Now, on the map, when you click on one of the gigapixel options the new tiles are overlayed.
You will also notice that on the various mapping views not all of the points of interest are shown. Instead, they use the MarkerManager component to package items that are close together as one point on the map.
You will also notice that the right hand side has 360 closeup views of the given areas. We all remember the original "VR" versions of this with poor quality. These are definitely a 2007 version. One of the use cases for the site is for people to check out real estate. With this level of quality, you really can get a good view of the property, easily enough to narrow it down.
We have seen other companies taking photos of the content, but being able to walk around the Map was very cool. If I am visiting a new building, or area, I find myself checking out the area before I drive there, as it is a lot easier to find the end point if you have seen it, and walked around the outside.
There was also a release of Mapplets, which are embeddable Google Maps mashups. You are able to overlay multiple mashups onto the one map, which means that you can combine the old favourites: HousingMaps.com and ChicagoCrime.org to make sure you get your new home in a decent area!
What is exciting about these new features is that we have more tools to play with (writting Mapplets), and a nice showcase of using Flash within an Ajax application (Maps).
InfiView is a mapping development tool that empowers engineers to build infinite-sized Web 2.0 mind maps, network topologies, organization charts, LDAP tools and technical diagrams.
InfiView uses Ajax technology and its own unique dynamic memory management to enable developers to systematically create graphical web applications using any amount of data (from very small all the way to infinite). With InfiView-built web-applications, end-users seamlessly interact (pan, zoom, right-click for actions…) with all types of graphical data - such as network topologies, DNA sequences or genealogy charts - oblivious to the vast amounts of data available.
100% built in Bindows (www.bindows.net), InfiView is built on top of the Bindows framework which is back-end/server agnostic, and provides best-in-industry support for section-508 accessibility compliance, internationalization and localization.
Brennan Stehling has updated his GPlotter project "to make use of the revised Google Maps API. I also completely restructured the Javascript to a much more object oriented coding style. I am using the latest release of Prototype, which recently moved to a new location as well as posted a great deal of new documentation. I am using Prototype for the object inheritance and AJAX functionality."