2012-08-08 83 views
0

可以在android中顯示地圖視圖嗎?允許用戶選擇一個區域,例如一個國家或州?在MapView中選擇區域Android

澄清:

我希望讓用戶在地圖視圖中選擇一個國家,怎麼可能?

我不關心所選擇的國家是突出與否,我只在乎它被選中的國家檢索/觸摸/用戶標記

+0

選擇意味着你想標記特定區域或個別區域? – Braj 2012-08-08 09:52:25

+0

ya允許用戶將其標記並獲取該信息,以便我可以做一些有用的工作 – Gautam 2012-08-08 09:53:07

+0

好吧,沒有辦法突出顯示一個國家,您必須親自編寫代碼來爲每個國家劃定邊界線,而不是這將成爲蛋糕:p – 2012-08-08 10:16:52

回答

3

有一個方法,從地圖 how to get lat and long on touch event from google map?

獲得緯度,經度之後,你可以調用谷歌地理代碼API轉換這個緯度,經度到物理地址,

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false 

以上鍊接將返回JSON

{ 
    "status": "OK", 
    "results": [ { 
    "types": street_address, 
    "formatted_address": "275-291 Bedford Ave, Brooklyn, NY 11211, USA", 
    "address_components": [ { 
     "long_name": "275-291", 
     "short_name": "275-291", 
     "types": street_number 
    }, { 
     "long_name": "Bedford Ave", 
     "short_name": "Bedford Ave", 
     "types": route 
    }, { 
     "long_name": "New York", 
     "short_name": "New York", 
     "types": [ "locality", "political" ] 
    }, { 
     "long_name": "Brooklyn", 
     "short_name": "Brooklyn", 
     "types": [ "administrative_area_level_3", "political" ] 
    }, { 
     "long_name": "Kings", 
     "short_name": "Kings", 
     "types": [ "administrative_area_level_2", "political" ] 
    }, { 
     "long_name": "New York", 
     "short_name": "NY", 
     "types": [ "administrative_area_level_1", "political" ] 
    }, { 
     "long_name": "United States", 
     "short_name": "US", 
     "types": [ "country", "political" ] 
    }, { 
     "long_name": "11211", 
     "short_name": "11211", 
     "types": postal_code 
    } ], 
    "geometry": { 
     "location": { 
     "lat": 40.7142298, 
     "lng": -73.9614669 
     }, 
     "location_type": "RANGE_INTERPOLATED", 
     "viewport": { 
     "southwest": { 
      "lat": 40.7110822, 
      "lng": -73.9646145 
     }, 
     "northeast": { 
      "lat": 40.7173774, 
      "lng": -73.9583193 
     } 
     } 
    } 
    }, 

    ... Additional results[] ... 

現在,您可以解析JSON,並得到國家名城市名地區,州等等等等

或者另一種選擇是得到公正的國家代碼。

http://ws.geonames.org/countryCode?lat=25.03&lng=67.2 

這將返回國家代碼PK =巴基斯坦 您可以得到國家代碼列表,或

+0

請閱讀澄清 – Gautam 2012-08-08 10:03:19

1

一個解決方案,我知道的是,你可以標記特定區域通過地圖引腳並通過在地圖中延伸OverLay類來填充該區域,如下所示。希望這是有用的。

public class MapOverlay extends Overlay 
{ 
    private GeoPoint new_geopoint = null; 

    public MapOverlay(GeoPoint geoPoint) 
    { 

    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     super.draw(canvas, mapView, shadow); 

     Paint mPaint = new Paint(); 
     mPaint.setDither(true); 
     mPaint.setStyle(Style.FILL_AND_STROKE); 
     mPaint.setColor(Color.RED); 
     mPaint.setAlpha(9); 
     mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(2); 

     Path path = new Path(); 

     Projection projection = mapView.getProjection(); 

     for(int j = 0; j < geoArrayist.size(); j++) 
     { 
      Iterator<GeoPoint> it = geoArrayist.iterator(); 
      while(it.hasNext()) 
      { 
       GeoPoint arrayListGeoPoint = it.next(); 

       Point currentScreenPoint = new Point(); 
       projection.toPixels(arrayListGeoPoint, currentScreenPoint); 

       if(j == 0) 
        path.moveTo(currentScreenPoint.x, currentScreenPoint.y); 
       else 
        path.lineTo(currentScreenPoint.x, currentScreenPoint.y); 
      }     
     } 
     // old_geopoint = new_geopoint; 
     canvas.drawPath(path, mPaint); 
    }  
} 
+0

謝謝,但請檢查澄清 – Gautam 2012-08-08 10:00:18