0

Androidでマップビューを表示して、ユーザーが国や州などの地域を選択できるようにすることは可能ですか?

明確化:

ユーザーがマップビューから国を選択できるようにしたいのですが、どうすればそれが可能ですか?

選択した国が強調表示されているかどうかは関係ありません。ユーザーが選択/タッチ/マークした国を取得するだけです。

4

2 に答える 2

3

地図から緯度、経度を取得する方法があります Google マップからタッチ イベントで緯度と経度を取得する方法はありますか?

その後、Google Geo Code 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 = パキスタンを返します。国コード リストを取得するか、

于 2012-08-08T10:01:02.427 に答える
1

私が知っている解決策の 1 つは、マップ ピンで特定の領域をマークし、以下のように Map の 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);
    }       
}
于 2012-08-08T09:57:47.497 に答える