では、なぜGoogleからの外国の地図に縛られているのでしょうか?
私たちはロシアに住んでいて、彼女にはカードがあります。 親Relative。 これらはYandexのカードです。
現在、 eNeighborsはYandex.Mapsと友達です。 サイトにアクセスすると、家やコテージを見ることができ、必要に応じてGoogleマップと比較できます。
Yandex.Mapsへの移行は、愛国的な理由だけでなく、:)
場合によっては、ロシアでのGoogleの報道は理想からはほど遠いものです。 同時に、Yandex.Mapsが間違いなく優れているとは言えません。 ただし、Googleマップに欠けているものが表示される場合があります。 質の高いサイトのほぼ鏡像の好奇心の強い例を次に示します。
Googleを既にお持ちの場合は、サイトでYandexを使用する方法についてお読みください。
YandexとGoogleの違い
1. GLatLngおよびYMaps.GeoPointは、それぞれGおよびZで使用されます。
あるシステムから別のシステムへの移行は簡単です。
function G2YA(a){return new YMaps.GeoPoint(a.lng(),a.lat())}
function YA2G(a){return new GLatLng(a.getLat(),a.getLng());}
2. Yandexは別の投影標準を使用し、epsgが少し狭くなっています:3395( 詳細 )
3.一部の関数は単に異なる方法で呼び出されますが、一部は少し異なる方法で動作します。
YandexとGoogleマップを接続する方法は?
オプション-プロキシを使用する( クラブ内のプロキシの説明 )
要点は簡単です-GoogleとYandexの両方をインターフェースでラップします。
私たちの場合、それは少し簡単でした-座標への集中呼び出しがあり、SETは1か所にあり、プロキシを介してGETを許可しました。
次のようなことが判明しました。
map.getPane=function(a){return 0;}
map.checkResize=function(){this.redraw(true);}
map.disableScrollWheelZoom=function(){this.disableScrollZoom();}
map.enableScrollWheelZoom=function(){this.enableScrollZoom();}
map.fromLatLngToDivPixel=function(a){ YA=G2YA(a);return this.converter.coordinatesToMapPixels(YA);}
map.fromContainerPixelToLatLng=function(a){ return YA2G(geo_map.converter.localPixelsToCoordinates(GP2YA(a)));}
map.getMapCenter=function(){return YA2G(this.getCenter());}
map.setMapType=function(a)
{
if(a==G_NORMAL_MAP )this.setType(YMaps.MapType.MAP);
if(a==G_HYBRID_MAP )this.setType(YMaps.MapType.HYBRID);
if(a==G_PHYSICAL_MAP )this.setType(YMaps.MapType.SATELLITE );
}
map.getCurrentMapType=function()
{
a=this.getType();
if(a==YMaps.MapType.MAP )return G_NORMAL_MAP;
if(a==YMaps.MapType.HYBRID )return G_HYBRID_MAP;
if(a==YMaps.MapType.SATELLITE)return G_PHYSICAL_MAP;
}
YMaps.GeoBounds.prototype.getSouthWest=function(){ return YA2G(this.getLeftBottom());}
YMaps.GeoBounds.prototype.getNorthEast=function(){ return YA2G(this.getRightTop());}
Googleのマップシフトイベントは次のように設定されています
GEvent.addListener(geo_map, "moveend", map_moveend_event );
Yandexでは異なります-2つのイベントに参加する必要があります。
YMaps.Events.observe(map, map.Events.Update,map_moveend_event);
YMaps.Events.observe(map, map.Events.MoveEnd,map_moveend_event);
eNeiglesのマーカーと「バルーン」は使用しませんが、オーバーレイを使用します。これにより、マップ上に何でも表示できます。
これを行う方法の学習に興味がある場合、 kasheyはそれをより詳細に、しかし別のトピックで説明できます。
オーバーレイGとIで友達を作る方法は?
繰り返しますが、すべてが非常に簡単です。
GOverlay.prototype.onAddToMap = function(map,to)
{
this.initialize(map);
to.appendChild(this.div_);
this.onMapUpdate(map);
return obj;
}
GOverlay.prototype.onRemoveFromMap = function(map)
{
return this.remove();
}
GOverlay.prototype.onMapUpdate = function(map)
{
this.redraw(true);
}
onAddToMap関数は、任意のデータを配置できるdiv(_div)を作成します。
Gカードの場合、マップへの追加は、コマンドを使用して初期化関数で実行されます。
if(GetMap().getPane(defmappane))
GetMap().getPane(defmappane).appendChild(div);
Iカードの場合、このコマンドは機能しません。
原則として、GMarkerは同様の方法でダウンロードでき、「機能する」か、逆関数を記述します。 その後、美しいYandex.BalunasはGカードで獲得します...
カードの新しいバージョンを起動するのに十分な説明されたパッチがありました。 おそらく私たちは何かを考慮しなかったかもしれませんが、テストの1週間の間、不具合は発生しませんでした。