プロジェクトの中で、緯度と経度に基づいてサードパーティのナビゲーションにジャンプする必要が生じ、インターネットで検索したところ、すべて同じ記事であり、目的地の住所が正しく表示されませんでした。 Baidu と Gaode Maps の公式ウェブサイトに行って検索しましたが、場所は非常に隠されています。
1. Gaode Map APPを呼び出す
Gaode Map APP を呼び出す方法は 2 つあります。
-
1 つは、Web の URI アドレスにアクセスすることで実現します。この方法で記述すると、APP がブラウザにジャンプして、H5 ページの Gaode マップにアクセスします。パラメータが 1 に設定されている場合、ブラウザは次の質問をします。 Gaode
callnative
マップ アプリを開く必要があるかどうかhttps://uri.amap.com/navigation?from=116.478346,39.997361,startpoint&to=116.3246,39.966577,endpoint&via=116.402796,39.936915,midwaypoint&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0
-
もう 1 つは、一般的に使用される直接ジャンプ方法で、
URL_TYPE
Gaode APP を通じて直接実現されます。この方法は、出発地の緯度経度データベースと目的地の緯度経度、および目的地の住所に基づく必要があります。目的地住所が空の場合、地図上にない地点も表示されます//访问地址示例(直接发起导航) iosamap://navi?sourceApplication=applicationName&poiname=fangheng&poiid=BGVIS&lat=36.547901&lon=104.258354&dev=1&style=2 //访问地址示例(路线规划) iosamap://path?sourceApplication=applicationName&sid=&slat=39.92848272&slon=116.39560823&sname=A&did=&dlat=39.98848272&dlon=116.47560823&dname=B&dev=0&t=0
2. APP は Baidu Map APP を呼び出します
Baidu Maps はURL_TYPE
メソッドを通じて Baidu Maps APP に直接ジャンプし、リンクで目的地アドレスを設定できます。Baidu Maps が目的地アドレスを設定する場合、文書にはかなり曖昧であると記載されています。次の形式で設定する必要があります。 : destination=name:destination address|latlng:40.007623, 116.360582、縦線で区切る
//访问地址示例(路线规划)
baidumap://map/direction?origin={
{
我的位置}}&destination=name:目的地地址|latlng:40.007623,116.360582&coord_type=bd09ll&mode=driving&src=ios.baidu.openAPIdemo
3. Baidu と Gaode 座標の相互変換
/** 百度地图转高德地图坐标 */
- (CLLocationCoordinate2D) bd_decrypt:(double)bd_lat bd_lon:(double)bd_lon
{
double x = bd_lon - 0.0065, y = bd_lat - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(z * sin(theta), z * cos(theta));
return coordinate;
}
/** 高德地图转百度地图坐标 */
- (CLLocationCoordinate2D) bd_decrypt:(double)gg_lat gg_lon:(double)gg_lon
{
double x = gg_lon, y = gg_lat;
double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(z * sin(theta)+0.006, z * cos(theta)+0.0065);
return coordinate;
}