【发布时间】:2020-03-26 07:27:36
【问题描述】:
我正在使用 android studio 上的谷歌地图,我在地图上绘制多边形。直到一切顺利,但现在我想将此多边形存储到 sqlite 数据库,然后将这些数据检索到 listView。现在我不明白如何在我的代码中实现这一点。如果有人对此有任何想法,请救救我。
这是我绘制多边形的代码:
@Override
public void onMapReady(final GoogleMap googleMap) {
final List<LatLng> latLngList = new ArrayList<>(); // list of polygons
final List<Marker> markerList = new ArrayList<>();
mMap = googleMap;
LatLng center = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
final MarkerOptions markerOptions = new MarkerOptions().position(center).title(center.latitude + ":" + center.longitude);
mMap.clear();
googleMap.animateCamera(CameraUpdateFactory.newLatLng(center));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(center, 18));
googleMap.addMarker(markerOptions);
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng latLng) {
int height = 50;
int width = 30;
BitmapDrawable bitmapdraw = (BitmapDrawable)getResources().getDrawable(R.mipmap.marker);
Bitmap b = bitmapdraw.getBitmap();
Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false);
/*Marker marker = googleMap.addMarker(markerOptions);*/
Marker marker = mMap.addMarker(new MarkerOptions().position(latLng).draggable(true).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));
markerList.add(marker);
latLngList.add(latLng);
drawPolygon(latLngList);
polygon.setClickable(true);
}
});
mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
polygon.remove();
/*marker.remove();
markerList.remove(marker);*/
}
});
}
private void drawPolygon(List<LatLng> latLngList) {
if (polygon != null) {
polygon.remove();
}
PolygonOptions polygonOptions = new PolygonOptions();
polygonOptions.fillColor(0x7F228B22);
polygonOptions.strokeColor(Color.GREEN);
polygonOptions.strokeWidth(5);
polygonOptions.addAll(latLngList);
polygon = mMap.addPolygon(polygonOptions);
}
我的列表视图看起来像 [![this][1]][1]
【问题讨论】:
-
"将此多边形存储到 sqlite 数据库,然后将这些数据检索到 listView" 在 ListView 中如何显示?作为坐标列表?还是图形化为多边形?无论如何,您的代码中都有坐标。将这些存储到 SQLite。如果您不知道如何使用 SQLite,请查看文档和教程并尝试一下。
-
@MarkusKauppinen 我想以 kml 文件格式存储我的多边形,但我不知道该怎么做
-
为什么要将其存储为 KML? kml 文件格式 是什么意思?如上一条评论中所述,您已经拥有制作多边形的所有坐标。为什么不直接存储它们?
-
KML 只是 XML,XML 只是文本,文本可以存储到 SQLite 中。所以最初的问题是 a) 将坐标写入符合 KML 规范的
String和 b) 将String写入 SQLite。然后稍后将执行相反的步骤。您可能会找到一些用 Java 编写 XML 的指南/教程/库。并且使用 SQLite 应该有据可查。 (虽然 Google 的文档会推荐使用Room。)Android 应该很好地支持 XML 解析(读取)。 -
@MarkusKauppinen 好的。那么哪种方法好,存储KML或将多边形坐标存储到sqlite。我想澄清的一件事是,我喜欢在我的列表视图中以图形方式显示多边形
标签: android google-maps android-sqlite polygon