Sunday, July 17, 2011

Back from ESRI User Conference 2011

Finally done with the work and presentations of user conference this year, and I’m very glad to hear some positive feedback of my demo theatre presentation (“Leverage OGC capabilities of ArcGIS Server using Open Source GIS technology”) and technical workshop (“Leverage OGC capabilities of ArcGIS Server”) from users and colleagues. Now it’s time for a little break, then keep working and also look forward to the FOSS4G conference in Denver.

Monday, June 20, 2011

Google Earth Builder is really coming

Just as many of others, I heard the announcement of Google Earth Builder (GEB) and also watched the informative GEB webinar on Directions Magazine very recently, so Google’s Enterprise Cloud GIS is really coming (Q3, 2011 as mentioned in the webinar).

Here are some of the the highlights I perceived from the the online webinar:

1. Google Earth Builder will have similar functionalities as other existing Cloud GIS solutions, e.g., GeoCommons, SimpleGeo, GloudGIS etc. So basically user can upload and manage their own dataset, style the dataset and mash them up with Google’s basemap layers as well as dataset shared by others, and finally share your mash up maps with others. But it doesn’t mean Google Earth Builder is just another Cloud GIS service at all, a few thing I notice will potential make it outstand.

Supports both vector and raster dataset in their native projections;

Leverage the base map layers and data from Google Maps and Google Earth API;

Google’s superior and reliable cloud infrastructure;

Same user experience of authentication and search as other Google products and services.

2. Support for OGC output

KML is obviously supported and it’s now an OGC standard, but that is just a special case. Now WMS and WMTS are also mentioned to be supported soon which will make it possible for much more non-Google to consume data and map from Google Earth Builder. One thing great to have though is to allow users to upload/import data from various types of OGC services e.g. Web Coverage Service and Web Feature Service.


Things that are missing or unknown to me from the webinar though are:

1. Unknown about Metadata

OGC/ISO 19115/19139 mentioned in Q&A section but I don’t think it will ever be supported.

2. You won’t be able to directly access the data from Google Maps and Google Earth

Finally when Google comes into an area, there is always question regarding whether Google will killer everybody in the same area or not. I don’t know about that but I feel if you’re doing the same thing as Google does, then you’d better be more creative and do it a little better.

Monday, June 13, 2011

Cloud GIS, it’s all about sharing the map

Cloud GIS is obviously NOT just about sharing the map, but it is just cool to share a beautiful and useful map with others through blog, Facebook or Twitter.

Google Maps

View Trip to Washington D.C. in a larger map

View Larger Map



Wednesday, June 1, 2011

Mashup WMS in GeoCommons

WMS, whether dying or not, still has its place in the world of GIS. Given that many organizations have published their spatial data through WMS, it is a very important data source especially in the era of cloud GIS today. GeoCommon’s is one of the first cloud GIS platform that allows users to add WMS as one type of data sources which can mashup on the base map. Follow the blog post “Adding WMS and Tiles in GeoCommons and GeoIQ” I gave it a try using one public WMS called “StatesCitiesRivers_USA”  from ArcGIS Online sample server and another from OSGeo.

After log in, select “Make a Map” and pick whatever base map as you like, which in my case is OSM.


Click “+Add” at top-right corner, and select “Upload” tab and “Add a URL Link” tab, and finally select “Web Map Service” in the format dropdown list, and type in the url to WMS’s capabilities files (the url must point to the capabilities XML file either static or dynamic).


Since ArcGIS Server supports WMS 1.3.0, so I tried this highest version of capabilities file, but unfortunate it doesn’t display the WMS layers on top of base layer although it is able to get the list of layers from that WMS.

Next I switched to version 1.1.1, which actually worked for me.


For the WMS overlay in GeoCommons, users are able to turn and off individual or all layers, and also change the opacity of the whole WMS overlay which obviously happens at client side (because WMS itself doesn’t support opacity). But none of other style or filter options are available to WMS layer. What is also observed is that WMS map is requested from server as multiple tiles instead of a single map image, which may be because GeoCommons platform currently doesn’t support any dynamic mapping service like WMS. Unless those tiles from WMS are cached at client-side, it’s not quite efficient.

One big problem I see, which is also quite obvious from the screenshot , is that GeoCommons requests WMS map in EPSG:4326 even though the base map is Web Mercator (EPSG:3857 or EPSG":900913 for most open source GIS community). This is caused by the fact that the public ArcGIS Server WMS service doesn’t list EPSG:900913 as one of the supported SRS.

I then added the public WMS from OSGeo, which supports EPSG:900913, which is side proof of what happened to ArcGIS Online Sample Server.


Since ArcGIS Server WMS doesn’t support EPSG:900913 (not in the way when it’s named as 900913) at this point, the only workaround is to choose one of the base map marked as (4326).


Now it overlays perfectly.


There are still a lot of data source published as WMS, and in my opinion there will only be more in the near future. So supporting WMS will give huge benefit to today’s Cloud GIS providers. It will be really nice to see similar WMS support in other major Cloud GIS player like, Google Maps and so on.

Tuesday, May 31, 2011

World-wide routing, MapQuest + OpenStreetMap

MapQuest was THE first and only web routing service I relied on. But once up on a time, I almost forgot its existence because of Google Maps, Yahoo, and even others. Recently MapQuest seems to be coming back really strong especially with its Open Initiative and integration with OpenStreetMap data. One of the most amazing things I have seen is this Dublin-to-Shanghai world-wide routing:

Although I don’t think it has much practical use to most people except for professional backpacker traveler, it is still amazing and seriously no one else can do it.

Friday, May 27, 2011

Choosing China’s location check-in platform

Like many other Chinese people (I am not talking about the those who were born or grown up here in States) here in Unite States, I’m facing a dilemma when choosing a location check-in game service to share location, pictures and tips with my friends. There seems to be quite a lot options. We have the popular Foursquares, Gowalla, and Facebook, and Google Latitude which jumped in recently, plus Yelp, Booyah, MyTown, and the list can go on and on. However, the problem is that many of my friends are in mainland China who want to see where I have been to and how I felt about those places, but they probably don’t want to install any of those clients on their mobile devices (actually even if they do, they can’t because many social networks applications are blocked in China). For the same reason I can’t see their move and tips either because obviously they don’t share it through any of the location check-in platform above.

The only workaround seems to be choosing one of China’s location check-in platform. Fortunately there is also a long list of those to choose, but none of them made a perfect solution. My top candidate list includes: Jiepang (街旁), Sina (微领地), Sifang (四方), and kaikai (开开). Which one to choose is certainly subjective to each individual person, but here is a list of things (ordered by priority) that I will base my choice on.

1. Size and accuracy of the existing foreign (U.S in this case) venue database;
2. Share check-in with friends on other check-in platform or social networks (Facebooks, Foursquares, Kaixin001, Sina Weibo etc);
3. Being able to add new venue.

To me both #1 and #2 are must for a check-in platform be to usable, and #3 is nice to have but also important.
Venue database

This almost dominates my decision. Sina has its decisive advantage over others in its complete and accurate U.S venue database, which even overcomes its shortage in all other aspects. Just as an example, I live in Rancho Cucamonga, a small size city in southern California, which is not famous and probably unknown to most people in China. No one would expect a Chinese location check-in service to have much venues in this area in its databases. But I was really surprised the first time when I checked in at home, Sina accurately lists closest everything nearby which include a KFC, a RiteAid pharmacy, a Ralphs grocery store, a US Bank (a small local bank I’ve been to), …, and a lot of other small places. None of others have a similar or even close size and accuracy of the venue database as Sina does.

Sharing check-in with others

This is the second most important thing because first I obviously want my check-in to be shared with my friends in other check-in platforms or social networks, and second I obviously don’t want to repeat my check-in on every check-in platform either for my friends in U.S or in China. This seems to be possible in two aspects: either (a) I check-in once on one of them (e.g. Sina) and my check-in will spread out through synchronization to Facebook, Foursquare, Twitter, Kaixin (开心网), Weibo (新浪微博) an so on; or (b) I check in through a 3rd party proxy app which takes my check in and broadcast to all my location check in services. Option #b is only possible when everyone has a free open API for venues and check-in which is NOT true for any of the location check-in platform in China, so it is ruled out. Option a is possible in one direction (China check-in spread to U.S platform), and almost all Chinese location check-in services provide you such capability except for Sina.

Adding new venues

This is also very important to both users and location check-in service providers. I am true believer of the fact that a real complete and accurate venue database can only be evolved from volunteered geographic information from those locals who know where they live well. Unfortunately Sina again doesn’t support this feature while all other check-in platforms supports it which is quite disappointing to me. As latest version of Sina (微领地) goes, users are allowed to create new venue and submit to service provide for reviewing and I guess if it is approved then it will be added into existing venue database. This is a big leap to me and makes Sina (微领地) outstands other options in my particular use case.


No one wins because neither Sina or any other candidates has both #1 and #2, but it provokes some interesting thinking on the current situation in the location check-in services market in China. Sina is close because it is the only one who is either interested in or can afford building a relatively complete and accurate foreign venue database. It is also easy to prove that those venues in sina’s database are not coming from any major open free sources (e.g. OpenStreetMap or Foursquare API etc.) So it’s probably from a commercial provider, which in turns logically explains why there are restrictions on adding new venues or modifying existing ones, and why check-in on cannot be spread out to other platforms. Other location check-in platforms in China are still missing a solid venue database to start with, and importing from OpenStreetMap database or relying on the venue API from a popular U.S provider like Foursquares or so seem to be possible solutions.

Wednesday, February 9, 2011

Thoughts on OSM and the Bing automatic vector detect service

In Mike Dobson’s recent blog post OSM vs. the Mechanical Turk – A New Option For Mappers?, he brought a point, which I think is more than reasonable:

“…I guess that when I thought about the term Volunteered Geographic Information, I made the mental leap that these volunteers were providing content in the form of spatial information reflecting the geographic areas in which they lived or with which they were more than casually familiar. It has now occurred to me that there may not always be a direct beneficial relationship between geographical knowledge and Volunteered Geographic Information…”

And then he did an analogous comparison between OSM and Mechanical Turk, in which he points out that:

“…If the majority of OSM contributors to the UK database are spending their time digitizing imagery for the UK portion of the OSM database, as opposed to contributing GPS traces and attributes from paths along which they have traveled or know something about, how likely is it that the OSM effort in the UK benefits from local knowledge to the same extent that it benefits from “free” digitizing?…”

to him, the way how some people contribute to OSM database is similar to a modern version of Mechanical Turk. It looks like the data are contributed with valuable local geographical knowledge, but it is only artificially generated from aerial imagery.

Now this reminds me of another exciting post I came across from Bing, in which Steve Coast announced the experimental service from Bing which can automatically derive street vector data from Bing aerial imagery. I am pretty sure it will boost the popularity of OSM in short term, but in the long run is it really helping?

Friday, February 4, 2011

Create your public WMS through

More and more cloud based GIS infrastructures are popping up these days. GISCloud is just one of those many and probably not the most famous one. But it does have some interesting features that attracts me. Today, with its free account, I was able to quickly publish a public WMS (OGC Web Map Service) simply with a few clicks. Although the service seems a little buggy in it beta but the features are promising.

To get started, simply go to and then sign up for a free account. After verification log in you will be able to things like upload/manage/share your dataset, create mashup maps with built-in layers (OSM, Google, etc.), your own dataset or public dataset shared by others, and of course your maps can be shared to other through different flavors. These are quite standard across different cloud GIS platforms nowadays.

The aspect I like most of is the fact that it has a broad list of supported input/export formats, which by the way is very open source friendly. Especially the claim of “all OGC and GDAL formats”, which sounds quite powerful.


© 2011 GIS Cloud Ltd

The particular feature I tried is simply publishing a world boundary layer as a WMS. The user experience is quite smooth, since the world boundary is a default built-in layer, so I end up having a public WMS in literally just a few seconds.


Select “world” map on left, click Project->Share and Publish


In “Share and Publish” dialog, go to WMS tab and click “Enable”, and below that is the url endpoint of your public WMS.

The next thing is simply consume it in a free 3rd party client like Gaia


This is really fantastic start, and I really like it.

A few things to improve though:

  • None of the built-in tiles layers (OSM, Google) come through as WMS, which I don’t think is technical issue but probably licensing issues;
  • The world I configure in website seems to be in Mercator projection but the output WMS only claims EPSG:4326 in capabilities files;
  • Still a little unstable when I enable/disable WMS back and forth with/without tiled layer like OSM, need to refresh the page to get rid of it.

Thursday, February 3, 2011

Configure GDAL/OGR Python debug environment in Pydev on Windows

Recently I am involved in a project that requires some Geospatial development in Python. So I decide to take this chance to get familiar with using GDAL/OGR in Python because it is the most popular open source GIS library plus it has a python binding.

The first thing you need is obviously a Python development environment for GDAL/OGR. I know IDLE or even a plain text editor plus “print …” will do the job just fine, but I still prefer a decent IDE. Why not? Especially when it is free. So I choose the Eclipse based Python IDE Pydev. The only problem is that the process of configuring it with GDAL/OGR on Windows isn’t that obvious, or at least to me it is not. So in this post I will go through it step by step.

1. Install Python

Installing Python is quite straight forward, just go to, pick up the installer for your version and OS, and install it. I would recommend Python 2.6 or 2.7 because there are pre-compiled GDAL/OGR python binding for both versions.

2. Install GDAL/OGR Python binding

First of all, this website is really helpful for you to get pre-compiled GDAL/OGR Python binding. It has different stable released version and the version latest trunk, and the best part is that it also has the installer version and non-installer (zipped version) versions for both 32bit and 64bit.

Use installer version

Find the .exe or .msi installer file, which usually comes with name GDAL-1.x.0-win32-py2.x.msi () e.g. here is the download link to the one for GDAL 1.8.0 32bit for python 2.7 (GDAL-1.8.0.win32-py2.7.msi). So basically just follow the installation wizards to finish the installation. Under the hood, my understanding is that the installer just simply copy a bunch of files and folder into \Lib\site-packages folder of your Python install location.

Note: the installer version requires you to have an appropriate version of Python installed and registered in registry first. The normal installation of Python takes care of the registry, but if not (e.g. you want to use the Python that comes with ArcGIS Server), then you will have to manually install a standard version of Python at a different location, install the GDAL Python binding, then copy those GDAL related files and folders back to the site-packages folder of that unregistered Python.

Use non-installer version

Instead of using installer version, you can choose to use a non-installer version which avoid adding stuff upon your vanilla Python install and registry. So from the same website just download those zip files with name e.g. (don’t worry it comes with  a copy of UNM MapServer), and unzip it on your local disk. The “information” link gives you very detailed information about the folder structure and versions of packages included.

After unzipping, I highly recommend you to take a look at the SDKShell.bat, which usually contains code similar to below:

SET PATH=%CD%\bin;%CD%\bin;%CD%\bin\gdal\python\osgeo;%CD%\bin\proj\apps;%CD%\bin\gdal\apps;%CD%\bin\ms\apps;%CD%\bin\gdal\csharp;%CD%\bin\ms\csharp;%CD%\bin\curl;%PATH%
SET GDAL_DATA=%CD%\bin\gdal-data
SET GDAL_DRIVER_PATH=%CD%\bin\gdal\plugins
SET PYTHONPATH=%CD%\bin\gdal\python\osgeo

This basically tells you what environment variables and paths must be included in PATH system environment variable, which we need when later configuring Pydev.

3. Install Pydev Python IDE

Install Pydev IDE is also easy and straightforward. Either download it from sourceforge, or update it through Eclipse by adding in software update sites.

After installation, just launch it.

4. Configure GDAL/OGR Python debug environment in Pydev

This is the most trick part. Depend on whether you’re using the installer version or the non-installer version, the steps are different.

First of all, you need to specify the Python interpreter in Pydev. So just go to Windows->Preference. and navigate to “Pydev”


Click “New”, type in a name and specify the path to python.exe of your Python installation, and finally click ok.

If you install GDAL Python binding with installer, then you should be good to go.

If you install GDAL Python binding with non-installer zip file, then you will have to configure a few more things. Still in the “Python Interpreters” configure dialog box, at the bottom part, select “libraries” tab and click “New Folder” on the right, navigate and select the <GDAL_Python_Install>\bin\gdal\python, finally click ok.


Assume you unzip the GDAL Python package at E:\programs\gdal\1.8.0, then you should add E:\programs\gdal\1.8.0\bin\gdal\python to the list of libraries.

Next go to “Environment” table, and there you need to add a few environment variables to reflect the settings in SDKShell.bat (mentioned earlier) except for “PYTHONPATH”.


Assume again you unzip the GDAL Python package at E:\programs\gdal\1.8.0, then you should add following


Note: these environment setting only applies within your Pydev IDE when you choose to use this particular Python interpreter, and it doesn’t affect your existing system environment settings.

Finally save the changes and you are good to go. To verify it, just launch a Python console window in Pydev, and execute following:

from osgeo import gdal

from osgeo import ogr

from osgeo import osr

They should just execute fine without any error message.

Sunday, January 9, 2011

Retire my T-Mobile G1

I know this is not quite relevant to what I usually blogged, and I am also pretty sure that there are a lot better up-to-date articles on Internet which are related to the same topic. But I just feel I must write it down because it took me almost a day and half to finally retire my T-Mobile G1 phone, by that I mean two things:

  • Flash a custom Android 2.2 Froyo ROM on G1
  • Activate G1 without T-Mobile data plan

Here are detailed steps that worked for me, and the text are mostly copied and pasted from following two posts:

Downgrade to RC29

  1. Format your phone’s microSD card to FAT32 mode
  2. Download and unzip the RC29 or RC7 image file. Copy the DREAMIMG.nbh file to the SD card. (RC29 for US, RC7 is for UK)
  3. Turn the device power off.
  4. Hold Camera button, and press Power button to entry bootloader mode. You should see a gray/white screen with instructions to flash your phone with the update on your SD card. If you don’t see that, make sure you followed the instructions properly.
  5. As per the on-screen instructions, press the Power button to start upgrade procedure. DO NOT DO ANYTHING TO INTERRUPT THIS PROCESS.
  6. After it is finished, perform the restart your phone by pressing the Action key (press down on the scroll ball).

Root the phone - Automatically replace your recovery image with FlashRec

The purpose of this method is to use a bluetooth security exploit that existed in Android build CRC1 or lower.  It downloads and installs the Cyanogen recovery image to your phone.  Using this method is preferred because it does not overwrite your radio and SPL file like the manual install method.  Future updates to Android are likely to block this hack, but you should always be able to revert to the official CRC1 build and gain access using this method.

1. Download and install the 1-click root app flashrec-20090815.apk

First we need to download the application file that was created by Zinx.  This file is named flashrec-20090815.apk and can be located at Zen Thought or RyeBlog.  I suggest downloading the file on your PC to avoid corruption.  Copy the app to your SD card and install it using your favorite file manager like Astro or AppManager.

2. Launch the FlashRec application and backup your current recovery image

Before you can flash a new recovery image, you must backup your original once first.  Press the large button that says “Backup Recovery Image”

Step 1. Press Backup Recovery Image

Step 1. Press Backup Recovery Image

3. Flash the new Cyanogen recovery image

After backing up your recovery image, you should see a message that says “Backed up”.  Now you should see the button “Flash Cyanogen Recovery 1.4″ light up.  Click the button to perform the flash and do not touch your phone until you see “Flashed new recovery image.”  When you see the flashed image below it is ok to reboot your phone and check that the new recovery image loaded.

Easiest root method to date.

Easiest root method to date.

Stop and Verify:  Reboot your phone with the steps below to see if the new recovery image is loading correctly.

Power off your phone.
Press and hold the Home key and then power the phone back on.
You should be greeted by the new Cyanogen recovery image screen.

Cyanogen recovery image v1.4

Cyanogen recovery image v1.4

Now that you have the Cyanogen recovery image, you can begin flashing custom builds of Android.  Jump to the bottom for Part 2: Install a custom build of Android.

Upgrade the Radio Image to “”

Since I downgraded G1 phone to RC29 using the DREAIMG.nbh method, the radio image was downgraded as well.  So I have to update to the latest Radio Image so you can load the latest roms and flash a new SPL file.

1. The new radio image has been posted on HTC’s support website, Android Roms page, or Haykuro’s Sapphire Port page.  In order to apply the Radio update, we must download the file “”.

2.  After the file is downloaded, it must be placed in the root directory of your SD card.  This means to place it in the main directory and not inside any folder.  When the radio image file is placed on your SD card perform the following steps:

  • Power off your phone.
  • Hold down the Home key and power the phone back on.
  • Select apply any zip from sd or press Alt+A
  • When prompted, hit Home to write the image file.
  • When the radio image is finished updating, it should reboot your phone to the recovery screen.  You can select reboot system now or press Home+Back .

Stop and Verify:  You can check the version of your radio image to make sure it updated.  Go to Settings > About Phone > Baseband version.  The version number should end in just like the original name of the update file.

Flash the SPL

Flashing a new secondary program loader(SPL) will rewrite your internal partition tables and free up more space on your phone.  This new SPL is required to load certain roms.  You must have the latest radio installed before flashing the new SPL.  If you do not have the latest radio loaded, flashing the new SPL can prevent your phone from booting.

Once again, this new SPL is only for:

  • Phone: US T-Mobile G1
  • Radio:
  • Recovery Image: Recovery Image that allows you to flash custom roms (Cyanogen)

Flashing a new SPL will rewrite all your partition tables and will delete all data from your phone.  The main reason people flash a new SPL is because it increases your system partition from 70 MB to 90 MB.

  1. Download the latest SPL(1.33.2005) from Haykuro’s Sapphire-port page. It must be 1.33.2005!!!
  2. Copy the SPL file( to your SD card.
  3. Reboot your phone into recovery mode.  (Power off phone.  Press and hold Home key then press power)
  4. Wait for Cyanogen’s recovery image to load and select “apply any zip from sd”.  Flash the file.
  5. After flashing the SPL, you must flash a custom rom or your phone will not boot.

Flash Cyanogen Android 2.2 Custom ROM

Now that the hard parts are over, we are ready to install a custom build of Android.  There are many to choose from and I will let you decide what to flash.  For daily use, I suggest using the latest stable release from Cyanogen.  For a complete list of ROM’s, visit the Android ROM Build Database.

All rom files come in zip format.  Download the rom of your choice and place it in the root directory of you SD card.

  • Power off your phone.
  • Boot into recovery mode.  (Press and hold the Home key, then hit the power button).
  • Before you flash a rom file, perform a wipe.  Press Alt+W to wipe the data and cache folders.  You must wipe when going form different builds of Android.
  • Wait for the wipe to finish and the recovery  image to display again, then select “apply any zip from sd”.  Flash the zip file of your choice.
  • After flashing any zip you should be able to reboot your system and watch it load to the home screen.

After changing Android builds, it came take several minutes for the first boot.  If you phone hangs on the animated Android logo, this is because you did not perform a wipe.  If you are stuck in a boot loop, return to the recovery image and make sure you wipe.

Activate wireless on the phone without data plan (only with a dead T-Mobile sim card)

Note: You must have latest Android SDK, adb tools and Android USB driver correctly installed first, so that your phone can be debugged through adb tools on your conputer.

  1. After the restart, you will see the “android” icon telling you to “touch” it. I did NOT touch it. I just touch an “blank” area so that the “emergency” call is not highlighted anymore. (you can test to see if you have root by typing on the PHONE this: <enter>reboot<enter>)
    [<enter> means press the enter key]
  2. Plug the phone to you computer.
  3. On the PHONE, type the following:
    • <enter>setprop persist.service.adb.enable 1<enter>
    • The computer will see a new device and try to install it. On the hardware setup, tell it to get the driver from where you unziped the Android USB Driver. This will enable the phone to “really” connect with the computer and mount the SD. If you don’t do this, the following steps will NOT work.
    • IF it didn’t work, restart by holding down the power button and turning off and on again. And do the <enter>reboot<enter> test. If the test did not work, you did something wrong. If it the test did work, it means you press Something! DO NOT PRESS ANY KEYS.
  4. You should be connected with the computer now. On the COMPUTER:
    • Open command prompt (start>run>cmd)
    • Type (all that are in bold):
      • cd C:\android-sdk-windows-1.1_r1 (assuming that you unziped to this location)
      • adb shell (This should give you “#” on the next line. If you get an error message “No device” or something, it means that your COMPUTER is not connected to the PHONE)
      • am start -a android.intent.action.MAIN -n (this will force the “Setting” menu to popup on your PHONE)
  5. Now on you PHONE, you should see the Settings menu. Activate the wifi setting and connect to your wifi.
  6. Once you have wifi connection, you can sign into your Google account.

Tuesday, January 4, 2011

Using MapQuest OSM Tiles in OpenLayers

With the recent launch of Open.Mapquest U.S, people now have one more way to view and contribute to OpenStreetMap data. Among those cool things of new Open Mapquest initiative, my favorite is the look and feel of those tiles generated from OSM data:
In my own opinion, it has much better looking than the original OSM Mapnik or Osmarender style. Since the structure of Open.Mapquest tiles are exactly the same as OSM tiles except for the base url, it can not be easier to use them as base layer in an OpenLayers application. Here is how to do it:
1: ...
2: // in place where you use to add OSM layer 
3: // var osm = new OpenLayers.Layer.OSM();
4: // map.addLayers([osm]);
6: // create a new class for Open.Mapquest tiles
7: OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
8:     name: "MapQuestOSM",
9:     //attribution: "Data CC-By-SA by <a href=''>OpenStreetMap</a>",
10:     sphericalMercator: true,
11:     url: '${z}/${x}/${y}.png',
12:     clone: function(obj) {
13:         if (obj == null) {
14:             obj = new OpenLayers.Layer.OSM(
15:   , this.url, this.getOptions());
16:         }
17:         obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [obj]);
18:         return obj;
19:     },
20:     CLASS_NAME: "OpenLayers.Layer.MapQuestOSM"
21: });
23: var mapquestosm = new OpenLayers.Layer.MapQuestOSM();
24: // map.addLayers([mapquestosm]);
25: ...
This is a screen shot of how Open.Mapquest tiles look like in OpenLayers app