Клуб API Карт

Прокси для использования Яндекс и Google карт

AndrewSumin
14 ноября 2008, 10:04
Если вы пользуетесь гугловыми картами и хотите перейти на яндекс карты или вообще сделать выбор карт опциональным, то могу вас обрадовать это достаточно просто.

Самое главное — координаты совпадают, т.е. никаких конверторов не нужно.

По поводу API все просто, я написал небольшой прокси, вот главная его часть:



HHMaps.Google = new function(){
  if (typeof GMap2 == 'undefined'){
    return;
  }
 
  // Point
  GLatLng.prototype.getLng = function(){
    return this.lng();
  };
  GLatLng.prototype.getLat = function(){
    return this.lat();
  };
  GLatLng.prototype.distance = GLatLng.prototype.distanceFrom;
  this.point = function(lng, lat){
    return new GLatLng(lat, lng);
  };
 
  // Zoom
  this.zoom = GSmallZoomControl;
 
  // Map
  GMap2.prototype.enableScrollZoom = GMap2.prototype.enableScrollWheelZoom;
  this.map = GMap2;
 
  // Marker
  GMarker.prototype.setGeoPoint = GMarker.prototype.setLatLng;
  GMarker.prototype.setBalloonContent = GMarker.prototype.bindInfoWindow;
  GMarker.prototype.getGeoPoint = GMarker.prototype.getLatLng;
  this.marker = GMarker;
 
  // Geocoder
  this.geocoder = function(){
    var geocoder = new GClientGeocoder();
    geocoder.setBaseCountryCode('ru');
    return geocoder;
  };
 
  // Bounds
  this.bounds = function(map, points){
    var point = points.shift();
    var bounds = new GLatLngBounds(point, point);
    while((point = points.shift())){
      bounds.extend(point);
    }
    this.getCenter = function(){
      return bounds.getCenter();
    };
    this.getZoom = function(){
      return map.getBoundsZoomLevel(bounds);
    };
  };
};

HHMaps.Yandex = new function(){
  if (typeof YMaps == 'undefined'){
    return;
  }
 
  YMaps.GeoPoint.prototype.getlng = function(){
    return this.lng;
  };
  YMaps.GeoPoint.prototype.getlat = function(){
    return this.lat;
  };
  this.point = YMaps.GeoPoint;
 
  this.zoom = YMaps.Zoom;
 
  YMaps.Map.prototype.enableContinuousZoom = jsx.Vars.NULL;
  this.map = YMaps.Map;
 
  this.marker = YMaps.Placemark;
 
  this.geocoder = function(){
    this.getLatLng = function(text, callback){
      var geocoder = new YMaps.Geocoder(text);
      YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
        var point = this.length() ? this.get(0).getGeoPoint() : null;
        if (!point){
          return;
        }
        callback(new HHMaps.Yandex.point(point.getLng(), point.getLat()));
      });
    };
  };
 
  this.bounds = function(map, points){
    var bounds = new YMaps.GeoCollectionBounds(points);
    this.getCenter = function(){
      return bounds.getCenter();
    };
    this.getZoom = function(){
      return bounds.getMapZoom(map);
    };
  };
};



Тут только те методы, которые нужны мне, дописываете нужные вам.

Еще раз про карты.
Если вы пользуетесь гугловыми картами и хотите перейти на яндекс карты или вообще сделать выбор карт опциональным, то могу вас обрадовать это достаточно просто.

Самое главное — координаты совпадают, т.е. никаких конверторов не нужно.

По поводу API все просто, я написал небольшой прокси, вот главная его часть:

HHMaps.Google = new function(){
  if (typeof GMap2 == 'undefined'){
    return;
  }
  
  // Point
  GLatLng.prototype.getLng = function(){
    return this.lng();
  };
  GLatLng.prototype.getLat = function(){
    return this.lat();
  };
  GLatLng.prototype.distance = GLatLng.prototype.distanceFrom;
  this.point = function(lng, lat){
    return new GLatLng(lat, lng);
  };
  
  // Zoom
  this.zoom = GSmallZoomControl;
  
  // Map
  GMap2.prototype.enableScrollZoom = GMap2.prototype.enableScrollWheelZoom;
  this.map = GMap2;
  
  // Marker
  GMarker.prototype.setGeoPoint = GMarker.prototype.setLatLng;
  GMarker.prototype.setBalloonContent = GMarker.prototype.bindInfoWindow;
  GMarker.prototype.getGeoPoint = GMarker.prototype.getLatLng;
  this.marker = GMarker;
  
  // Geocoder
  this.geocoder = function(){
    var geocoder = new GClientGeocoder();
    geocoder.setBaseCountryCode('ru');
    return geocoder;
  };
  
  // Bounds
  this.bounds = function(map, points){
    var point = points.shift();
    var bounds = new GLatLngBounds(point, point);
    while((point = points.shift())){
      bounds.extend(point);
    }
    this.getCenter = function(){
      return bounds.getCenter();
    };
    this.getZoom = function(){
      return map.getBoundsZoomLevel(bounds);
    };
  };
};

HHMaps.Yandex = new function(){
  if (typeof YMaps == 'undefined'){
    return;
  }
  
  YMaps.GeoPoint.prototype.getlng = function(){
    return this.lng;
  };
  YMaps.GeoPoint.prototype.getlat = function(){
    return this.lat;
  };
  this.point = YMaps.GeoPoint;
  
  this.zoom = YMaps.Zoom;
  
  YMaps.Map.prototype.enableContinuousZoom = jsx.Vars.NULL;
  this.map = YMaps.Map;
  
  this.marker = YMaps.Placemark;
  
  this.geocoder = function(){
    this.getLatLng = function(text, callback){
      var geocoder = new YMaps.Geocoder(text);
      YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
        var point = this.length() ? this.get(0).getGeoPoint() : null;
        if (!point){
          return;
        }
        callback(new HHMaps.Yandex.point(point.getLng(), point.getLat()));
      });
    };
  };
  
  this.bounds = function(map, points){
    var bounds = new YMaps.GeoCollectionBounds(points);
    this.getCenter = function(){
      return bounds.getCenter();
    };
    this.getZoom = function(){
      return bounds.getMapZoom(map);
    };
  };
};



Тут только те методы, которые нужны мне, дописываете нужные вам.
1 комментарий
Подписаться на комментарии к посту

Скажите, пожалуйста, а как сделать выбор между Яндекс и Гуглокартами? Как сделать кнопки выбора?