在 Android Studio 中创建一个新的 Google Map Activity。 在数据库表中存储体检机构的地址(经纬度)。 从数据库中获取所有的体检机构地址,并将它们显示在 Google Map 上的 Marker 上。实现他们的代码
时间: 2023-06-24 07:07:15 浏览: 215
首先,需要在 AndroidManifest.xml 文件中添加以下权限:
```
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
```
接下来,在 build.gradle 文件中添加 Google Maps API 和 Google Play Services 库的依赖:
```
dependencies {
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
}
```
然后,在布局文件中添加一个 Fragment:
```
<fragment
android:id="@+id/map_fragment"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />
```
在 MainActivity 中,初始化 Google Map,并从数据库中获取所有的体检机构地址,并将它们显示在 Google Map 上的 Marker 上:
```
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private List<LatLng> mLocations = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取地图Fragment
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map_fragment);
mapFragment.getMapAsync(this);
// 从数据库中获取所有的体检机构地址
List<String> addresses = getAddressesFromDatabase();
// 地址转换为经纬度,并添加到 mLocations 列表中
for (String address : addresses) {
LatLng location = getLocationFromAddress(address);
if (location != null) {
mLocations.add(location);
}
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// 添加 Marker
for (LatLng location : mLocations) {
mMap.addMarker(new MarkerOptions().position(location));
}
// 移动地图到第一个 Marker 的位置
if (mLocations.size() > 0) {
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLocations.get(0), 10));
}
}
private List<String> getAddressesFromDatabase() {
// 从数据库中获取所有的体检机构地址
return new ArrayList<>();
}
private LatLng getLocationFromAddress(String address) {
Geocoder geocoder = new Geocoder(this);
try {
List<Address> addresses = geocoder.getFromLocationName(address, 1);
if (addresses != null && addresses.size() > 0) {
Address location = addresses.get(0);
return new LatLng(location.getLatitude(), location.getLongitude());
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
```
在上面的代码中,getAddressesFromDatabase() 方法从数据库中获取所有的体检机构地址,getLocationFromAddress(String address) 方法将地址转换为经纬度。在 onMapReady(GoogleMap googleMap) 方法中,添加 Marker,并移动地图到第一个 Marker 的位置。
需要注意的是,getLocationFromAddress(String address) 方法需要在子线程中执行,否则会抛出 NetworkOnMainThreadException 异常。可以使用 AsyncTask 或者 RxJava 等方式将其放到子线程中执行。
阅读全文