2012-08-08 43 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