Android引路蜂地圖開發示例:路徑查詢

可以通過RasterMap的getDirection()方法來查詢路徑,和查詢地址類似,路徑查詢的結果也是通過回調函數的方式來通知應用程序的,下面的例子返回南京到北京的路徑。返回結果存放在MapDirection中,MapDirection包含瞭路徑的詳細信息,包括路徑的每個步驟,長度,時間,方向等。

[java] 
package com.pstreets.gisengine.demo; 
  
import com.mapdigit.gis.MapDirection; 
import com.mapdigit.gis.MapPoint; 
import com.mapdigit.gis.geometry.GeoLatLng; 
import com.mapdigit.gis.service.IRoutingListener; 
import com.pstreets.gisengine.R; 
import com.pstreets.gisengine.SharedMapInstance; 
  
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
  
public class MapRouting extends Activity implements IRoutingListener { 
  
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.main); 
 } 
  
 @Override 
 public void onStart() { 
  super.onStart(); 
  GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778); 
  SharedMapInstance.map.setCenter(center, 15, 
    com.mapdigit.gis.raster.MapType.MICROSOFTCHINA); 
  SharedMapInstance.map.setRoutingListener(this); 
  
 } 
  
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
  MenuInflater inflater = getMenuInflater(); 
  inflater.inflate(R.menu.maprouting_menu, menu); 
  return true; 
 } 
  
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
  // Handle item selection  
  switch (item.getItemId()) { 
  case R.id.getdirection: 
   String name1 = "南京"; 
   String name2 = "北京"; 
   SharedMapInstance.map.getDirections("from: " + name1 + " to: " 
     + name2); 
  
   return true; 
  
  default: 
   return super.onOptionsItemSelected(item); 
  } 
  
 } 
  
 @Override 
 public void done(String query, MapDirection result) { 
  if (result != null) { 
   SharedMapInstance.map.setMapDirection(result); 
   SharedMapInstance.map.resize(result.getBound()); 
   SharedMapInstance.map.zoomOut(); 
   SharedMapInstance.map.zoomOut(); 
  
  } 
  
 } 
  
 @Override 
 public void readProgress(int bytes, int total) { 
  
 } 
  

package com.pstreets.gisengine.demo;
 
import com.mapdigit.gis.MapDirection;
import com.mapdigit.gis.MapPoint;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.service.IRoutingListener;
import com.pstreets.gisengine.R;
import com.pstreets.gisengine.SharedMapInstance;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
 
public class MapRouting extends Activity implements IRoutingListener {
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }
 
 @Override
 public void onStart() {
  super.onStart();
  GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
  SharedMapInstance.map.setCenter(center, 15,
    com.mapdigit.gis.raster.MapType.MICROSOFTCHINA);
  SharedMapInstance.map.setRoutingListener(this);
 
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.maprouting_menu, menu);
  return true;
 }
 
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // Handle item selection
  switch (item.getItemId()) {
  case R.id.getdirection:
   String name1 = "南京";
   String name2 = "北京";
   SharedMapInstance.map.getDirections("from: " + name1 + " to: "
     + name2);
 
   return true;
 
  default:
   return super.onOptionsItemSelected(item);
  }
 
 }
 
 @Override
 public void done(String query, MapDirection result) {
  if (result != null) {
   SharedMapInstance.map.setMapDirection(result);
   SharedMapInstance.map.resize(result.getBound());
   SharedMapInstance.map.zoomOut();
   SharedMapInstance.map.zoomOut();
 
  }
 
 }
 
 @Override
 public void readProgress(int bytes, int total) {
 
 }
 
}

地圖服務可以選擇使用Google 地圖服務,CloudMade地圖服務,在中國還可能選擇MapAbc地圖服務,缺省使用Google 地圖服務。
getDirections()具有三個重載函數,例子中是采用的文字描述方式。上述示例采用瞭from: address1 to: address2 的格式, CloudMade地圖服務和MapAbc地圖服務則必需采用 經度1,緯度1,經度2,緯度2和格式。
為避免混淆,可以使用下述格式。
public void getDirection(GeoLatLng[] waypoints, IRoutingListener listener);
其中 waypoints 為途徑點坐標數組經緯值,可以支持多點路徑查詢。
此外對於MapAbc 地圖服務,還可以指定城市編碼,如南京編碼為25。
public void getDirection(int citycode,String query, IRoutingListener listener);

 作者:mapdigit
 

發佈留言