在 Google 地图中为 Android 突出显示整个国家/地区

Highlight whole countries in Google Maps for Android

参考:

Highlight whole countries in Google Maps

我正在尝试 return 用户在 Google 地图 Android 应用程序中选择的国家/地区的位置。

类似的东西,但在 Android google 地图中。有没有可能在 android 中做到这一点?

可以离线进行吗?

Google 地图 API 中关于国家或其他地图项边界的问题已被问过很多次,但遗憾的是 Google 并未公开此数据。

要突出显示国家/地区,您应该将自己的数据应用为 Google 地图图层。在以下答案中提出了很好的解决方法

您可以从 OSM 下载 GeoJSON 格式的国家边界。之后你可以在你的应用程序中使用 Google 地图 Android API Utility Library to add GeoJsonLayer

在我的示例中,我下载了 GeoJSON 格式的西班牙边界,并使用 GeoJsonLayer 加载了 GeoJSON 文件。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        mMap.getUiSettings().setZoomControlsEnabled(true);

        LatLng madrid = new LatLng(40.416775,-3.70379);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(madrid, 3F));

        try {
            GeoJsonLayer layer = new GeoJsonLayer(mMap, R.raw.es_geojson, getApplicationContext());

            GeoJsonPolygonStyle style = layer.getDefaultPolygonStyle();
            style.setFillColor(Color.MAGENTA);
            style.setStrokeColor(Color.MAGENTA);
            style.setStrokeWidth(1F);

            layer.addLayerToMap();

        } catch (IOException ex) {
            Log.e("IOException", ex.getLocalizedMessage());
        } catch (JSONException ex) {
            Log.e("JSONException", ex.getLocalizedMessage());
        }
    }
}

您可以从 github 下载完整的示例项目,不要忘记更改 values/google_maps_api 中的 API 键。xml

https://github.com/xomena-so/so41431384

希望对您有所帮助!

基本上您要尝试做两件事。

1- 反向地理编码以获得点击国家的位置。为此,我使用了在 GitHub 上找到的回购协议。因为它很高效并且可以离线工作。 --> https://github.com/AReallyGoodName/OfflineReverseGeocode

2- 一旦你得到点击的国家,你需要突出显示它。正如@xomena

所解释的

你也可以查看我制作的这个 repo,它基本上实现了这个。

https://github.com/moumen7/Map_picker