Geolocating Google News

Suppose you want to get news depending on their location — the only tool i have found is (no surprise) Google News! It has almost unkown functionality of locating news articles, not perfect one, but IMHO quite sufficient. The Google's geo search parameter seems to work in US only.

Va bene! Monkey see, monkey do: to get news from Rome and Lazio region (Italy) use this RSS URL: http://news.google.com/news?output=rss&q=location:Roma+OR+location:Lazio. The "OR" parameter has reason here, because some sources are possibly marked as originating from Lazio (Rome itself is in Lazio region) but concern to Rome also.

Google.News request parameters:

q
query string,location — subparameter to define news location. In the example above i defined that i search news from either Rome OR Lazio. NB! Substitute white spaces and hyphens in geographical names with underline "_": Addis Abbaba → Addis_Ababa. This is the hack! The feature is not documented by Google. Уou can use national geographical names in your requests Odessa OR Одесса OR Одеса OR Одесская область: the second usefulness of "OR" operation — news source location is marked either in english or national language, you'd better search for both.
ned
national "news edition". See Googel News France
hl
means "human language" i presume. Forces to set news language in spite of ned parameter. News from Paris in ITALIAN language for english edition
as_scoring
News sorting order. Seems to be useful only when searching with keywords. as_scoring=n sort by date, as_scoring=n sort by relevance. Sorted by date News from Paris in italian

Bing maps driving directions

Bing Maps (formely VirtualEarth Maps) has a splendid driving direction service, covering the whole world — neither Google Maps no another webmaps do that.

As a GIS-web developer you can face a little problem - driving direction has limited API access and you cat get generalized route only (i.e. curve of few points VERouteItineraryItem instead of shape VEShape), because API property VERoute.ShapePoints is available with explicit permission from Microsoft, in other words — they encrypt shape data and if you subscribe the service will give you the key. I have figured out there are limitations for number of requests - 1000 per day for developer and $0.01 per request for enterprise.

Bing directions with OpenLayers

The idea:

  1. create Bing layer without tiles VEMapOptions.LoadBaseTiles=false
  2. get route with Bing API
  3. maximum zoom layer to get detailed shape
  4. parse SVG or VML poliline with pixel-to-LonLat function
It seems to be easier than breaking encrypted VERoute.ShapePoints data. In a couple of days i will upload working sample to OpenLayers sandbox.

Google AdSense keywords hack

AdSense is placed in iframe on webpage by adsenes's javascript. This fact has given me an idea to put adsense in my own iframe where i can define my own keywords, the result - ads will differ from top page content!! Cool - keyword hack! But adsense script checks for 'window.top' and if true - script will show adsense according to top page content. The trick is to set window.top=window.self before adsense script (may not work in some IE, because MSIE doesn't allow javascript to rewrite «window» - DOM object).

EXAMPLE (Topic: Online education)

OpenLayers and Yandex.Maps (Яндекс.Карты)

15 May 2009

FIXED version is available

Hello all! At last i have uploaded the fixed version of Yandex maps for openlayers. Look here: Yandex maps for OpenLayers (in sandbox). This fix removes latitude distortion because of ellipsoid globe model used in YandexMaps in contrast to spheroid in Google and Bing. I can't make these changes in simple version (beneath)— i have no idea about projection (EPSG) used in this webmap. If you have — send me description (see Spatialreference).

There are 2 files Yandex.html and OL_Yandex.js

OpenLayers is splendid opensource javascript framework for webmapping. "Yandex.Maps" (russian:Яндекс.Карты) - russian webmapping service (like Google Maps or VirtualEarth)

This is example map (up) and here is the code (down):

<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<div id="map" style="border: 1px solid lightgray; margin: 0pt 0pt 30px; padding: 0pt; width: 350px; height: 256px;"/>
<script type="text/javascript">
function yandex_getTileURL(bounds){
  var res = this.map.getResolution();
  var maxExtent = (this.maxExtent) ? this.maxExtent : yandexBounds;
  var tileW = (this.tileSize)?this.tileSize.w:256;
  var tileH = (this.tileSize)?this.tileSize.h:256;
  var x = Math.round((bounds.left - maxExtent.left)/(res * tileW));
  var y = Math.round((maxExtent.top - bounds.top)/(res * tileH));
  var z = this.map.getZoom();var limit = Math.pow(2, z);
  if (y <0>= limit) {
    return OpenLayers.Util.getImagesLocation() + "404.png";
  }else {
    x = ((x % limit) + limit) % limit;
    url = (this.url)?this.url:"http://vec02.maps.yandex.net/";
    return url+"tiles?l=map&v=2.2.3&x="+x+"&y="+y+"&z="+z;
  }
};

var yandexBounds = new OpenLayers.Bounds(-20037508,-20002151,20037508,20072865);

var map = new OpenLayers.Map('map', {
  projection: new OpenLayers.Projection("EPSG:900913"),
  displayProjection: new OpenLayers.Projection("EPSG:4326"),
  units: "m",
  maxResolution: 156543.0339,
  maxExtent:new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508.34)
});

var yandexMaps =
  new OpenLayers.Layer.TMS("Yandex","http://vec02.maps.yandex.net/",
  {
    maxExtent:yandexBounds,
    type:"png",
    getURL:yandex_getTileURL,
    numZoomLevels:18,
    attribution:'<a href="http://beta-maps.yandex.ru/">Яндекс.Карты</a>',
    transitionEffect:'resize'
  });
map.addLayers([yandexMaps]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomTo(4);
</script>