Google Maps V2 と Baidu Maps を同じバージョンで実装した人がいるかどうか疑問に思っています。GMが中国で意図したとおりに機能しないためですか?
または、代わりにプロジェクトを 2 つのブランチに分割する必要がありますか? ただし、2 つのブランチを維持する必要はありません。
Google Maps V2 と Baidu Maps を同じバージョンで実装した人がいるかどうか疑問に思っています。GMが中国で意図したとおりに機能しないためですか?
または、代わりにプロジェクトを 2 つのブランチに分割する必要がありますか? ただし、2 つのブランチを維持する必要はありません。
これに対する私の解決策は、通常どおり GM を実装することでしたが、ユーザーが中国を設定している場合 (設定を介して) 静的マップが使用されますが、静的マップは Google ではなく Baidu から取得されます。
staticUrl = "http://api.map.baidu.com/staticimage?center="
+ location.getLongitude() + "," + location.getLatitude()
+ "&width=" + width + "&height=" + width + "&zoom=15"
+ "&markers=" + location.getLongitude() + "," + location.getLatitude();
https://api.map.baidu.com/staticimage?center=121,31&width=300&height=300&zoom=15の結果:
実際のマップ ソリューションを実装しようとしている場合、この方法はお勧めできません。さまざまな国でのみ使用されるさまざまな場所があるため、このソリューションを使用できます。
それで、それが私がそれを解決した方法です。誰かがこれが役立つことを願っています。
また、中国でhttp://ditu.google.cnを使用すると機能することがわかりました。
アプリケーションに中国のオンライン マップを使用する場合、それが Google Maps であろうと Baidu であろうと、法的な理由から緯度と経度の変換があります。
Google マップの衛星ビューでは、「地球」(WGS-84) 座標が使用されます。中国の GMaps のマップ ビューは「火星」座標 (GCJ-02)を使用しており、2 つの間で変換するコードがあります。Baidu マップは、オフセットが異なる「Bearpaw」座標を使用します。Baidu Map API には、Google の座標と独自のシステムの間で変換するデモがあります。
中国では、GPS は、他のすべてと同様に、さらに複雑なレイヤーを持っています :)
このアプリを作成した場合は、詳細を投稿してください。Baidu マップへの英語のインターフェイスがあれば、すばらしいでしょう。
おそらくパーティーに少し遅れましたが、最近、あなたの助けになるかもしれないものに偶然出くわしました.
Baidu マップを試してみましたが、セットアップが驚くほど難しく、使用するのがひどかったので、周りを見回したところ、突然、VPN なしで Google マップが機能しました。
古いGoogle中国サーバーがまだアクティブであることに気付きました。試してみると:
maps.google.cn
google.cn アドレスを使用して iframe を作成すると機能することがわかります。
Google マップとバイドゥ マップの両方を並べて使用できますが、WGS-84 座標 (世界のほとんどで使用されている) からバイドゥの座標 (中国の GCJ-02 とは異なる BD-09 ) に必ず変換してください。Baidu Maps API の例に基づいて、これを行うコードを次に示します。
// Google coordinates
var gPoint = new BMap.Point(121.4914, 31.2423); // lon, lat of the Bund Museum in Shanghai - https://www.google.com/maps/@31.2423,121.4914,19z
// gPoint = new BMap.Point(-122.0851053, 37.4219593); // lon, lat of the Googleplex (no Baidu map data but zooms out in Mountain View)
var labelOffset = { offset: new BMap.Size(20, -10) };
// Initialize map
var map = new BMap.Map('allmap');
map.centerAndZoom(gPoint, 15);
map.addControl(new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT})); // add scale
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.MapTypeControl()); // map type control: street/satellite/2.5D
map.enableScrollWheelZoom(); // mouse wheel scroll is disabled by default
// Add Google marker and label
var markerG = new BMap.Marker(gPoint);
map.addOverlay(markerG);
markerG.setLabel(new BMap.Label('Google coordinates marker appears<br/>at incorrect location on Baidu Map', labelOffset));
// Coordinate conversion ... GCJ-02 coordinates ... Baidu coordinates
BMap.Convertor.translate(gPoint, 2, function (point) {
var marker = new BMap.Marker(point);
map.addOverlay(marker);
marker.setLabel(new BMap.Label('Converted to Baidu coordinates:<br/>' +
point.lng + ', ' +
point.lat +
'<br/>(note the offset of ' + (map.getDistance(gPoint, point)).toFixed(2) + ' meters)',
labelOffset));
map.addOverlay(new BMap.Polyline([gPoint, point])); // draw a line between points
});
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=gd0GyxGUxSCoAbmdyQBhyhrZ"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
<div id="allmap"></div>
StackOverflow がスクリプトをサンドボックス化する方法が原因で上記のスニペットが機能しない場合は、代わりに Google の JSbin デモ -> Baidu 座標変換を試してください。
変換をオフラインで実行する必要がある場合は、GitHubの邪悪な変換プロジェクトを確認してください。
navigator.geolocation
ただし、中国語にローカライズされたブラウザがAPI経由で返す座標タイプは不明です。そのためのテスト アプリを作成し、「
百度マップで navigator.geolocation.getCurrentPosition を表示する」に質問を投稿しました。
参考文献:
Google座標でこの方法を使用してみてください
http://api.map.baidu.com/marker?location=39.916979519873,116.41004950566&output=html
サーバーが問題なく GM にアクセスできる場合 (たとえば、ホストが中国本土にない、または中国本土にあるが検閲されていない接続がある場合)、サーバーに GM からデータをロードさせ、代わりにユーザーにルーティングさせませんか? 過去にいくつかのプロジェクトでそれを行いましたが、魔法のように機能しました。
ps 要求された long/lat の GM から php に静的マップをプルさせ、それをサーバー上の一時ファイルに保存してから、url を一時ファイルに戻すことができます。ユーザーの観点からは、(静的) GM を見ていることになります。
pps ユーザーが GM の UI (パン/ズームを行う) を使用できるようにする必要がある場合は、GM からロードされたすべての JS を変更するもう少し複雑な php が必要になるため、すべてのデータが引き続きサーバーに要求されます。マップ - 基本的に、クライアント マシンからの要求が GM サーバーに送信されるのを回避しますが、代わりにすべてがあなたのマシンに送信されます。