Самое главное — координаты совпадают, т.е. никаких конверторов не нужно.
По поводу 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); }; }; };
Тут только те методы, которые нужны мне, дописываете нужные вам.