Android 如何将google地图中的多边形存储到sqLite数据库
我在android studio上使用谷歌地图,我在地图上绘制多边形。在这之前,一切都很顺利,但现在我想将这个多边形存储到sqlite数据库,然后将这些数据检索到listView。现在我不明白如何在我的代码中实现这一点。如果有人对此有任何想法,请救我 以下是我绘制多边形的代码:Android 如何将google地图中的多边形存储到sqLite数据库,android,google-maps,android-sqlite,polygon,Android,Google Maps,Android Sqlite,Polygon,我在android studio上使用谷歌地图,我在地图上绘制多边形。在这之前,一切都很顺利,但现在我想将这个多边形存储到sqlite数据库,然后将这些数据检索到listView。现在我不明白如何在我的代码中实现这一点。如果有人对此有任何想法,请救我 以下是我绘制多边形的代码: @Override public void onMapReady(final GoogleMap googleMap) { final List<LatLng> latLngList = n
@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);
}
@覆盖
4月1日公开作废(最终谷歌地图谷歌地图){
final List latLngList=new ArrayList();//多边形列表
最终列表标记列表=新的ArrayList();
mMap=谷歌地图;
LatLng中心=新LatLng(currentLocation.getLatitude(),currentLocation.getLength());
最终标记选项标记选项=新标记选项().位置(中心).title(中心.纬度+“:”+中心.经度);
mMap.clear();
谷歌地图。动画美拉(CameraUpdateFactory。newLatLng(中));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(中,18));
googleMap.addMarker(markerOptions);
mMap.setOnMapClickListener(新的GoogleMap.OnMapClickListener(){
@凌驾
公共无效(最终板条){
整数高度=50;
整数宽度=30;
BitmapDrawable bitmapdraw=(BitmapDrawable)getResources().getDrawable(R.mipmap.marker);
位图b=bitmapdraw.getBitmap();
位图smallMarker=Bitmap.createScaledBitmap(b,宽度,高度,false);
/*Marker=googleMap.addMarker(markerOptions)*/
Marker Marker=mMap.addMarker(新的MarkerOptions().position(latLng).draggable(true).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));
markerList.add(marker);
latLngList.add(latLng);
绘图多边形(latLngList);
多边形。可点击设置(真);
}
});
mMap.setOnMapLongClickListener(新的GoogleMap.OnMapLongClickListener(){
@凌驾
在MaplongClick(LatLng LatLng)上的公共无效{
polygon.remove();
/*marker.remove();
标记列表。删除(标记)*/
}
});
}
私有void drawPolygon(列表latLngList){
如果(多边形!=null){
polygon.remove();
}
PolygonOptions PolygonOptions=新PolygonOptions();
多边形选项。填充颜色(0x7F228B22);
多功能选择。strokeColor(颜色。绿色);
脉冲宽度(5);
polygonooptions.addAll(拉丁英语);
多边形=mMap.addPolygon(多边形选项);
}
我的列表视图看起来像[![this][1][1]您可以保存所需的主要属性。例如在我的例子中,我需要保存坐标和相机缩放。然后您可以创建这样的自定义类
class CustomLatLng : Serializable{
var latitudeList : MutableList<String> = mutableListOf()
var longitudeList : MutableList<String> = mutableListOf()
var cameraPositionLat : Double = 0.0
var cameraPositionLng : Double = 0.0
var zoomCamera : Float = 12f
fun add(latitude : Double, longitude : Double ){
latitudeList.add(latitude.toString())
longitudeList.add(longitude.toString())
}
fun clearLatLng(){
latitudeList.clear()
longitudeList.clear()
}
fun isNotEmpty(): Boolean{
return !(latitudeList.isEmpty() || longitudeList.isEmpty())
}
}
只要有多边形,请仅保存重新创建多边形所需的数据
val customLatLng = CustomLatLng()
polygon?.points?.forEach {
customLatLng.add(it.latitude, it.longitude)
}
customLatLng.zoomCamera = 10f
savePolygon(customLatLng)
注意:我只保存我需要的数据,您必须根据需要创建尽可能多的变量,我希望这有助于“将此多边形存储到sqlite数据库,然后将此数据检索到listView”如何在listView中显示?作为坐标列表?还是以多边形的形式?无论如何,代码中都有坐标。将这些存储到SQLite。如果您不知道如何使用SQLite,那么请查看文档和教程,并尝试一些方法。@MarkusKauppinen我想以kml文件格式存储多边形,但我不知道确切的方法。为什么要将其存储为kml?你说的kml文件格式是什么意思?正如前面的评论中提到的,您已经拥有了生成多边形的所有坐标。为什么不直接存储它们呢?KML只是XML,XML只是文本,文本可以存储到SQLite中。因此,最初的问题是a)将坐标写入符合KML规范的
字符串,以及b)将字符串写入SQLite。然后,稍后将执行相反的步骤。您可能会找到一些用Java编写XML的指南/教程/库。使用SQLite应该有很好的文档记录。(尽管谷歌的文档会建议使用Room
)Android应该很好地支持XML解析(读取)。@MarkusKauppinen ok。那么,存储KML还是将多边形坐标存储到sqlite,哪种方法好呢。我想澄清的一点是,我喜欢在列表视图中以图形方式显示多边形
val customLatLng = CustomLatLng()
polygon?.points?.forEach {
customLatLng.add(it.latitude, it.longitude)
}
customLatLng.zoomCamera = 10f
savePolygon(customLatLng)