From e5a090685df3d5e96a37b141d9a1d002d36f16f2 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 14 二月 2025 16:53:43 +0800
Subject: [PATCH] 1.web地图添加管网显示。 2.安卓原生添加管网信息的获取。 3.安卓原生添加管网信息的本地持久化(SQLite数据库)。 4.实现图例用户的选择状态按钮的持久化。 5.实现自定义搜索按钮的实现。 6.实现搜索后弹出界面的相关功能开发。
---
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | 205 +++++++++++++++++++++++++++++++++++++++------------
1 files changed, 156 insertions(+), 49 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
index 27486c3..e01d39b 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -32,7 +32,9 @@
import com.dayu.pipirrapp.bean.db.InspectionLocationBean;
import com.dayu.pipirrapp.bean.db.LatLonBean;
import com.dayu.pipirrapp.bean.db.MarkerBean;
+import com.dayu.pipirrapp.bean.db.PipeNetWorkDataBean;
import com.dayu.pipirrapp.bean.db.PipeNetworkBean;
+import com.dayu.pipirrapp.bean.db.PipeNetworkDataCoordinateBean;
import com.dayu.pipirrapp.bean.net.CenterPointResult;
import com.dayu.pipirrapp.bean.net.DivideListResult;
import com.dayu.pipirrapp.bean.net.DivideResult;
@@ -61,7 +63,9 @@
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.utils.WebViewUtils;
import com.dayu.pipirrapp.view.ConfirmDialog;
+import com.dayu.pipirrapp.view.SearchResultDialog;
import com.dayu.pipirrapp.view.TipUtil;
+import com.example.expand_button.ExpandButton;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
@@ -81,6 +85,8 @@
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import kotlin.Triple;
+import kotlin.Unit;
+import kotlin.jvm.functions.Function1;
/**
* author: zuo
@@ -108,6 +114,7 @@
//web鍔犺浇鏃剁綉椤佃繕娌″姞杞藉畬鏃剁殑鏁版嵁
List<MarkerBean> webNoFinishMarkerData = new ArrayList<>();
List<DivideBean> webNoFinishDivideData = new ArrayList<>();
+ List<PipeNetworkBean> webNoFinishPipeNetworkData = new ArrayList<>();
//鎵�鏈夌殑Marker鏁版嵁閿负marker鐨処d
Map<String, MarkerBean> markerBeanSet = new HashMap<>();
//鎵�鏈夊垎姘存埧
@@ -117,6 +124,9 @@
public double centerLat;
MarkerBean mMarkerBean;
+
+ //鏄惁鏄剧ずMarker
+ boolean isShowMarker, isShowPipeNetwork, isShowDivide;
// 娣诲姞CompositeDisposable鏉ョ鐞嗘墍鏈夎闃�
private CompositeDisposable compositeDisposable = new CompositeDisposable();
@@ -178,6 +188,8 @@
* 寮傛鍔犺浇鏈湴鏁版嵁
*/
private void loadLocalData() {
+
+
// 寮傛鍔犺浇涓績鐐规暟鎹�
compositeDisposable.add(
DaoSingleton.getAsynchInstance(this.getContext()).centerPointDao().findFirst()
@@ -198,7 +210,7 @@
getCenterPoint();
})
);
-
+ isShowMarker = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.markerKeyIsShow, true);
// 寮傛鍔犺浇鍙栨按鍙f暟鎹�
compositeDisposable.add(
DaoSingleton.getAsynchInstance(this.getContext()).markerDao().getAll()
@@ -221,7 +233,7 @@
getMarkerData();
})
);
-
+ isShowDivide = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.divideIsShow, true);
// 寮傛鍔犺浇鍒嗘按鎴挎暟鎹�
compositeDisposable.add(
DaoSingleton.getAsynchInstance(this.getContext()).divideDao().getAll()
@@ -244,6 +256,8 @@
getDivideList();
})
);
+
+ isShowPipeNetwork = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.pipeNetworkIsShow, true);
//寮傛鍔犺浇绠$綉鏁版嵁
compositeDisposable.add(
DaoSingleton.getAsynchInstance(this.getContext()).pipeNetDao().getAll()
@@ -254,16 +268,15 @@
getPipeNetworkList();
} else {
for (PipeNetworkBean pipeNetworkBean : pipeNetworkBeans) {
-
-
+ setMapPipe(pipeNetworkBean);
}
}
}, throwable -> {
- Log.e(TAG, "Load divides error: " + throwable.getMessage());
- getDivideList();
+ Log.e(TAG, "Load PipeNetworkBean error: " + throwable.getMessage());
+ getPipeNetworkList();
}, () -> {
// 褰揗aybe涓虹┖鏃惰皟鐢�
- getDivideList();
+ getPipeNetworkList();
})
);
}
@@ -353,6 +366,12 @@
setMapDivide(bean);
}
}
+ if (!webNoFinishPipeNetworkData.isEmpty()) {
+ for (PipeNetworkBean bean : webNoFinishPipeNetworkData) {
+ setMapPipe(bean);
+ }
+ }
+
//鏄剧ず鎵�鏈夊彇姘村彛
MarkerUtils.showLocoMarks(MapFragment.this);
//鏄剧ず宸℃鐘舵�佸苟涓旀樉绀哄洜鎰忓鍏抽棴鐨勫巻鍙叉暟鎹�
@@ -391,7 +410,7 @@
return markerBean;
})
.collect(Collectors.toList());
-
+ DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().deleteAll();
// 浣跨敤 CompositeDisposable 绠$悊鏁版嵁搴撴彃鍏ユ搷浣�
compositeDisposable.add(
DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans)
@@ -424,7 +443,7 @@
//宸℃鎸夐挳
binding.inspectButton.setOnClickListener(v -> {
if (XXPermissions.isGranted(MapFragment.this.getContext(), Permission.ACCESS_BACKGROUND_LOCATION)) {
- new ConfirmDialog(MapFragment.this.getActivity(), (confirmDialog, v1) -> {
+ new ConfirmDialog(MapFragment.this.getActivity(), "纭寮�濮嬪贰妫�鍚楋紵",(confirmDialog, v1) -> {
chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
confirmDialog.dismiss();
}).show();
@@ -456,28 +475,88 @@
Intent issue = new Intent(MapFragment.this.getActivity(), AddIssueActivity.class);
MapFragment.this.getActivity().startActivity(issue);
});
- binding.expandButton.setLegendsArray(new Triple<>(
+ binding.expandButton.setLegendsArray(new ExpandButton.Quadruple(
ContextCompat.getDrawable(requireContext(), R.drawable.marker_blue),
ContextCompat.getDrawable(requireContext(), R.drawable.marker_unselected),
- "鍙栨按鍙�"
+ "鍙栨按鍙�", isShowMarker
),
- new Triple<>(
+ new ExpandButton.Quadruple(
ContextCompat.getDrawable(requireContext(), R.drawable.divide_home_blue),
ContextCompat.getDrawable(requireContext(), R.drawable.divide_home_unselected),
- "鍒嗘按鎴�"
- ));
+ "鍒嗘按鎴�", isShowDivide
+ ),
+ new ExpandButton.Quadruple(
+ ContextCompat.getDrawable(requireContext(), R.drawable.ic_pipenetwork_line),
+ ContextCompat.getDrawable(requireContext(), R.drawable.ic_pipenetwork_line_unselected),
+ "绠$綉", isShowPipeNetwork
+ )
+ );
binding.expandButton.setOnLegendItemClickListener((position, isSelected) -> {
switch (position) {
case 0:
showMarkers(isSelected);
+ SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.markerKeyIsShow, isSelected);
break;
case 1:
showDivideMarkers(isSelected);
+ SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.divideIsShow, isSelected);
+ break;
+ case 2:
+ showPipeLine(isSelected);
+ SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.pipeNetworkIsShow, isSelected);
break;
}
});
+ binding.searchButton.setOnSearchClickListener(s -> {
+ if (s != null && !s.isEmpty()) {
+ SearchResultDialog searchDialog = new SearchResultDialog(requireContext());
+ searchDialog.setOnItemClickListener(item -> {
+ // 鏍规嵁绫诲瀷澶勭悊鐐瑰嚮浜嬩欢
+// if ("marker".equals(item.getType())) {
+// MarkerBean markerBean = new MarkerBean();
+// markerBean.setId(item.getId());
+// getInstakeDetail(markerBean);
+// } else {
+// DivideBean divideBean = new DivideBean();
+// divideBean.setDivideId(item.getId());
+// getDivideDetail(divideBean);
+// }
+ // 璺宠浆鍒伴�夋嫨鐨勪綅缃�
+ mWebView.evaluateJavascript(
+ String.format("javascript:setCenterAndZoom(\"%s\",\"%s\",\"17\")",
+ item.getLng(),
+ item.getLat()),
+ null
+ );
+ });
+
+ // 鎵ц鎼滅储
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(requireContext())
+ .divideDao()
+ .searchAllByKeyword(s)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ results -> {
+ if (results != null && !results.isEmpty()) {
+ searchDialog.setData(results);
+ searchDialog.show();
+ } else {
+ ToastUtil.showToast(requireContext(), "鏈壘鍒扮浉鍏崇粨鏋�");
+ }
+ },
+ throwable -> {
+ ToastUtil.showToast(requireContext(), "鎼滅储澶辫触锛�" + throwable.getMessage());
+ }
+ )
+ );
+ }
+ return null;
+ });
}
+
/**
* 鏄剧ず鍙栨按鍙h鎯�
@@ -522,6 +601,7 @@
centerPointBean.setLat(t.getContent().getLat());
centerPointBean.setLng(t.getContent().getLng());
centerPointBean.setZoomMp(t.getContent().getZoomMp());
+ DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().deleteAll();
DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().insert(centerPointBean);
jumpCenterPoint();
} else {
@@ -715,13 +795,13 @@
}
/**
- * 娣诲姞鏍囨敞鐐�
+ * 娣诲姞鍙栨按鍙�
*/
public void setMapMarker(MarkerBean markerBean) {
if (markerBean != null) {
if (webViewIsFinished) {
if (!TextUtils.isEmpty(markerBean.getLng()) && !TextUtils.isEmpty(markerBean.getLat())) {
- mWebView.evaluateJavascript("javascript:addMarker(\"" + markerBean.getId() + "\",\"" + markerBean.getLng() + "\",\"" + markerBean.getLat() + "\",\"" + markerBean.getName() + "\")", new ValueCallback<String>() {
+ mWebView.evaluateJavascript("javascript:addMarker(\"" + markerBean.getId() + "\",\"" + markerBean.getLng() + "\",\"" + markerBean.getLat() + "\",\"" + markerBean.getName() + "\",\"" + isShowMarker + "\")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
}
@@ -737,13 +817,13 @@
}
/**
- * 娣诲姞鍙栨按鍙f爣娉�
+ * 娣诲姞鍒嗘按鎴�
*/
public void setMapDivide(DivideBean divide) {
if (divide != null) {
if (webViewIsFinished) {
if (!TextUtils.isEmpty(divide.getLng()) && !TextUtils.isEmpty(divide.getLat())) {
- mWebView.evaluateJavascript("javascript:addDivide(\"" + divide.getId() + "\",\"" + divide.getLng() + "\",\"" + divide.getLat() + "\",\"" + divide.getDivideName() + "\")", new ValueCallback<String>() {
+ mWebView.evaluateJavascript("javascript:addDivide(\"" + divide.getId() + "\",\"" + divide.getLng() + "\",\"" + divide.getLat() + "\",\"" + divide.getDivideName() + "\",\"" + isShowDivide + "\")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
}
@@ -761,24 +841,24 @@
/**
* 娣诲姞绠$綉鏍囨敞
*/
- public void setMapDivide(PipeNetworkBean pipeNetworkBean) {
-// if (divide != null) {
-// if (webViewIsFinished) {
-// for ()
-// if (!TextUtils.isEmpty(divide.getLng()) && !TextUtils.isEmpty(divide.getLat())) {
-// mWebView.evaluateJavascript("javascript:addDivide(\"" + divide.getId() + "\",\"" + divide.getLng() + "\",\"" + divide.getLat() + "\",\"" + divide.getDivideName() + "\")", new ValueCallback<String>() {
-// @Override
-// public void onReceiveValue(String value) {
-// }
-// });
-// divideBeanMap.put(divide.getId(), divide);
-// } else {
-// MyLog.d("setMapDivide>" + divide.getDivideName() + "缁忕含搴︿负绌�");
-// }
-// } else {
-// webNoFinishDivideData.add(divide);
-// }
-// }
+ public void setMapPipe(PipeNetworkBean pipeNetworkBean) {
+ if (pipeNetworkBean != null) {
+ if (webViewIsFinished) {
+ boolean isfrist = true;
+ for (PipeNetworkDataCoordinateBean data : pipeNetworkBean.getData().getCoordinates()) {
+ if (!TextUtils.isEmpty(data.getLat()) && !TextUtils.isEmpty(data.getLng())) {
+ mWebView.evaluateJavascript("javascript:addPipeNetwork(\"" + data.getLng() + "\",\"" + data.getLat() + "\",\"" + isfrist + "\",\"" + isShowPipeNetwork +"\")", new ValueCallback<String>() {
+ @Override
+ public void onReceiveValue(String value) {
+ }
+ });
+ isfrist = false;
+ }
+ }
+ } else {
+ webNoFinishPipeNetworkData.add(pipeNetworkBean);
+ }
+ }
}
/**
@@ -1053,7 +1133,7 @@
setMapDivide(divideBean);
divideBeans.add(divideBean);
}
-
+ DaoSingleton.getInstance(MapFragment.this.getContext()).divideDao().deleteAll();
// 浣跨敤 CompositeDisposable 绠$悊鏁版嵁搴撴彃鍏ユ搷浣�
compositeDisposable.add(
DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans)
@@ -1094,23 +1174,40 @@
if (t.getContent() != null && t.getContent().size() > 0) {
List<PipeNetworkBean> pipeNetBeans = new ArrayList<>();
- PipeNetworkBean pipeNetBean = new PipeNetworkBean();
+
for (PipeNetworkResult pipeNetworkResult : t.getContent()) {
+ PipeNetworkBean pipeNetBean = new PipeNetworkBean();
pipeNetBean.setNetworkId(pipeNetworkResult.getNetworkId());
pipeNetBean.setType(pipeNetworkResult.getType());
- pipeNetBean.setData(pipeNetworkResult.getData());
+ PipeNetWorkDataBean data = new PipeNetWorkDataBean();
+ data.setType(pipeNetworkResult.getData().getType());
+ List<PipeNetworkDataCoordinateBean> coordinates = new ArrayList<>();
+ for (PipeNetworkResult.Data.Coordinate dataBean : pipeNetworkResult.getData().getCoordinates()) {
+ PipeNetworkDataCoordinateBean coordinate = new PipeNetworkDataCoordinateBean();
+ coordinate.setLat(dataBean.getLat());
+ coordinate.setLng(dataBean.getLng());
+ coordinates.add(coordinate);
+ }
+ data.setCoordinates(coordinates);
+ pipeNetBean.setData(data);
+ setMapPipe(pipeNetBean);
+ pipeNetBeans.add(pipeNetBean);
}
+
+ DaoSingleton.getInstance(MapFragment.this.getContext()).pipeNetDao().deleteAll();
// 浣跨敤 RxJava 寮傛鎻掑叆鏁版嵁
- DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).pipeNetDao().insertAll(pipeNetBeans)
- .subscribeOn(Schedulers.io()) // 鍦� IO 绾跨▼涓婃墽琛�
- .observeOn(AndroidSchedulers.mainThread()) // 鍦ㄤ富绾跨▼涓婅瀵�
- .subscribe(() -> {
- // 鎻掑叆鎴愬姛
- Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
- }, throwable -> {
- // 鎻掑叆澶辫触
- Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
- });
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).pipeNetDao().insertAll(pipeNetBeans)
+ .subscribeOn(Schedulers.io()) // 鍦� IO 绾跨▼涓婃墽琛�
+ .observeOn(AndroidSchedulers.mainThread()) // 鍦ㄤ富绾跨▼涓婅瀵�
+ .subscribe(() -> {
+ // 鎻掑叆鎴愬姛
+ Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
+ }, throwable -> {
+ // 鎻掑叆澶辫触
+ Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
+ })
+ );
}
@@ -1233,4 +1330,14 @@
}
}
+ private void showPipeLine(boolean isSelected) {
+ if (isSelected) {
+ mWebView.evaluateJavascript("javascript:showAllPipeLines()", value -> {
+ });
+ } else {
+ mWebView.evaluateJavascript("javascript:hideAllPipeLines()", value -> {
+ });
+ }
+ }
+
}
--
Gitblit v1.8.0