坐标系统

main
huangwei 9 months ago
parent 0814bc4f89
commit 133941b13f
  1. BIN
      app/libs/repository-release.aar
  2. BIN
      app/libs/surveyorBase-release.aar
  3. 9
      app/src/main/AndroidManifest.xml
  4. 44
      app/src/main/java/com/project/survey/App.java
  5. 55
      app/src/main/java/com/project/survey/ui/home/InstrumentFragment.kt
  6. 445
      app/src/main/java/com/project/survey/ui/instrument/basestationtranslation/RtkBaseCorrectActivity.java
  7. 4
      app/src/main/java/com/project/survey/ui/instrument/mobilestationmode/base/RtkPointCorrectActivity.java
  8. 5
      app/src/main/res/drawable/icon_vector_folder.xml
  9. 178
      app/src/main/res/layout/activity_rtk_correct.xml
  10. 3
      app/src/main/res/layout/fragment_instrument.xml
  11. 14
      app/src/main/res/menu/menu_activity_rtk_correct.xml
  12. 5
      app/src/main/res/values/strings.xml

Binary file not shown.

Binary file not shown.

@ -134,6 +134,15 @@
android:name=".ui.instrument.mobilestationmode.GnssConfigSetActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.instrument.basestationtranslation.RtkBaseCorrectActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.instrument.mobilestationmode.base.RtkPointCorrectActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize|stateHidden" />
</application>
</manifest>

@ -6,7 +6,19 @@ import android.app.Application;
import android.util.Log;
import com.bingce.AppChannel;
import com.bingce.BaseApp;
import com.bingce.data.database.DBQueryConstant;
import com.bingce.data.database.KeyValueDb;
import com.bingce.data.database.ProjectCoordinateDatabase;
import com.bingce.data.database.ProjectDb;
import com.bingce.data.database.SurveyRecordDatabase;
import com.bingce.data.database.SyncRecordDatabase;
import com.bingce.data.surveyor.designdata.project.ProjectConstants;
import com.bingce.data.surveyor.designdata.project.ProjectRecord;
import com.bingce.device.Device;
import com.bingce.device.DeviceProgressDialogBuilderImpl;
import com.bingce.rtk.command.RTK;
import com.bingce.utils.CoordinatorSystemNotifierImpl;
import com.bingce.utils.ThreadPoolUtil;
import org.polaric.colorful.Colorful;
@ -15,6 +27,7 @@ import io.reactivex.functions.Consumer;
import io.reactivex.plugins.RxJavaPlugins;
public class App extends Application {
private final CoordinatorSystemNotifierImpl coordinatorSystemNotifier = new CoordinatorSystemNotifierImpl();
private static App app;
@ -40,9 +53,38 @@ public class App extends Application {
initThemeDark();
Utils.init(this);
initDatabase();
initDevice();
}
private void initDevice() {
//初始化设备相关代码
Device.init(
DeviceProgressDialogBuilderImpl.builder(),
coordinatorSystemNotifier,
coordinateSystem -> {
ThreadPoolUtil.execute(() -> {
//查询当前项目
String currentProjectId = KeyValueDb.currentProjectId();
ProjectRecord currentProject = ProjectDb.getInstance()
.rawQueryData(DBQueryConstant.findById(ProjectConstants.DB_NAME, currentProjectId));
if (currentProject != null) {
currentProject.coordinateSystem = coordinateSystem;
ProjectDb.getInstance().save(currentProject);
}
});
});
RTK.init(coordinatorSystemNotifier);
}
private void initDatabase() {
ProjectCoordinateDatabase.openDb(this, null);
SurveyRecordDatabase.openDb(this, null);
SyncRecordDatabase.openDb(this, null);
}
public boolean isThemeDark() {
return false;

@ -5,15 +5,21 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import blankj.utilcode.util.AppUtils
import blankj.utilcode.util.ToastUtils
import blankj.utilcode.util.Utils
import com.bingce.device.Device
import com.bingce.device.enums.ConnectTypeEnum
import com.bingce.device.enums.DeviceTypeEnum
import com.bingce.device.ui.ConnectRtkActivity
import com.bingce.device.ui.ConnectTSActivity
import com.bingce.rtk.command.RTK
import com.bingce.rtk.config.GnssConfigManager
import com.bingce.ui.coordinatesystem.BingCeCoordinateSystemActivity
import com.project.survey.R
import com.project.survey.databinding.FragmentInstrumentBinding
import com.project.survey.ui.base.BaseFragmentBinding
import com.project.survey.ui.instrument.basestationtranslation.RtkBaseCorrectActivity
import com.project.survey.ui.instrument.mobilestationmode.GnssConfigSetActivity
import com.project.survey.ui.instrument.mobilestationmode.base.RtkPointCorrectActivity
import com.project.survey.ui.instrument.satellitosis.SatelliteStatusActivity
import com.project.survey.ui.instrument.setupstation.InstrumentSetFragmentSetupStationTypeUtils
@ -54,10 +60,59 @@ class InstrumentFragment : BaseFragmentBinding<FragmentInstrumentBinding>() {
ToastUtils.showShort(R.string.rtk_not_connected)
}
}
mBinding.tvBaseStationMode.setOnClickListener {
//基准站模式
if (Device.getInstance().isDeviceConnected || AppUtils.isAppDebug()) {
if (RTK.getInstance().isSupportBaseSetting) {
GnssConfigManager.reset() //重置配置,防止未退出重新连接其他品牌型号导致配置集未改变的问题
val baseIntent = Intent(requireContext(), GnssConfigSetActivity::class.java)
baseIntent.putExtra("sysMode", 1)
startActivity(baseIntent)
} else {
ToastUtils.showShort(R.string.device_not_support_this_mode)
}
} else {
ToastUtils.showShort(R.string.rtk_not_connected)
}
}
mBinding.tvBaseStationTranslation.setOnClickListener {
//基站平移
startBaseStationTranslation()
}
mBinding.tvCoordinateSystem.setOnClickListener {
//坐标系统
BingCeCoordinateSystemActivity.viewAndModifyCurrentCoordinateSystem(requireContext())
}
mBinding.tvPointCorrection.setOnClickListener {
//点校正
startActivity(Intent(Utils.getApp(), RtkPointCorrectActivity::class.java))
}
}
private fun startBaseStationTranslation() {
if (!AppUtils.isAppDebug()) {
if (Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_TS) {
ToastUtils.showShort(R.string.please_choose_rtk_instrument)
return
}
if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_PHONE_LOCATION) {
ToastUtils.showShort(R.string.rtk_native_unnecessary)
return
}
if (!Device.getInstance().isDeviceConnected) {
ToastUtils.showShort(R.string.please_connect_bluetooth)
return
}
}
val intent504 = Intent(
Utils.getApp(),
RtkBaseCorrectActivity::class.java
)
startActivity(intent504)
}
override fun initData() {
}
}

@ -0,0 +1,445 @@
package com.project.survey.ui.instrument.basestationtranslation;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.PreferenceManager;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bingce.coordlib.model.Blh;
import com.bingce.coordlib.model.Coordinate;
import com.bingce.coordlib.model.CoordinateSystem;
import com.bingce.data.cache.AbstractCachedObserver;
import com.bingce.data.cache.CachedCurrentCoordinateSystem;
import com.bingce.data.database.ProjectDb;
import com.bingce.device.Device;
import com.bingce.device.enums.ConnectTypeEnum;
import com.bingce.log.BCLog;
import com.bingce.rtk.gnss.Gnss;
import com.bingce.rtk.gnss.setting.BaseCorrect;
import com.bingce.rtk.model.GnssPosition;
import com.bingce.rtk.util.CoordTransUtil;
import com.bingce.surveyor.agentweb.HelpWebActivity;
import com.bingce.utils.ThreadPoolUtil;
import com.bingce.utils.Util;
import com.project.survey.App;
import com.project.survey.R;
import com.project.survey.databinding.ActivityRtkCorrectBinding;
import com.project.survey.ui.base.BaseSurveyNewActivity;
import com.project.survey.ui.instrument.setupstation.ControlPointsNewActivity;
import com.project.survey.ui.instrument.setupstation.CoordinatePointsLibraryActivity;
import com.project.survey.ui.instrument.setupstation.StakingNewJobActivity;
import com.project.survey.util.CommonUtils;
import com.project.survey.util.DrawableUtils;
import blankj.utilcode.util.StringUtils;
import blankj.utilcode.util.ToastUtils;
import blankj.utilcode.util.Utils;
public class RtkBaseCorrectActivity extends BaseSurveyNewActivity {
private int mTimes = -1;
double latSum = 0, lngSum = 0, altSum = 0;
private double originalLatitude, originalLongitude, originalAltitude;
protected final CachedCurrentCoordinateSystem cachedCoordinateSystem = new CachedCurrentCoordinateSystem(this);
private ActivityRtkCorrectBinding binding;
@Override
public View getContentView() {
binding = ActivityRtkCorrectBinding.inflate(getLayoutInflater());
return binding.getRoot();
}
@Override
protected void initView() {
// setTitle(R.string.rtk_base_correct);
cachedCoordinateSystem.observe(new AbstractCachedObserver<CoordinateSystem>() {
@Override
public void onChanged(boolean isFirstTimeDataChanged, CoordinateSystem coordinateSystem) {
if (isFirstTimeDataChanged) {
binding.activityRtkCorrectTvCorrectCurrent.setText(String.format("%s:\n%s:%s\n%s:%s\n%s:%s",
getString(R.string.current), getString(R.string.rtk_correct_x),
Util.formatDouble2StringDotAuto(coordinateSystem.correctN),
getString(R.string.rtk_correct_y),
Util.formatDouble2StringDotAuto(coordinateSystem.correctE),
getString(R.string.rtk_correct_z),
Util.formatDouble2StringDotAuto(coordinateSystem.correctH)));
}
}
});
binding.activityRtkCorrectBtnSmoothCollectTenTimes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
binding.activityRtkCorrectEt0.requestFocus();//作用:输入框不聚焦,防止实测坐标后页面自动滑动到顶部,同样避免RTK继续后输入框没有失效焦点,导致再输入内容输入法自动隐藏的问题
CommonUtils.hideSoftInput();
Device.getInstance().isRtkRunning = true;
mTimes = 0;
latSum = 0;
lngSum = 0;
altSum = 0;
originalLatitude = 0;
originalLongitude = 0;
originalAltitude = 0;
binding.activityRtkCorrectMetOriginalLatitude.setText("");
binding.activityRtkCorrectMetOriginalLongitude.setText("");
binding.activityRtkCorrectMetOriginalAltitude.setText("");
binding.activityRtkCorrectProgressbar.setProgress(0);
}
});
binding.activityRtkCorrectBtnCorrect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
binding.activityRtkCorrectEt0.requestFocus();//作用:输入框不聚焦,防止实测坐标后页面自动滑动到顶部
CommonUtils.hideSoftInput();
if (checkCalEnable()) {
double control_x = Double.parseDouble(binding.activityRtkCorrectMetControlPointX.getText().toString());
double control_y = Double.parseDouble(binding.activityRtkCorrectMetControlPointY.getText().toString());
double control_z = Double.parseDouble(binding.activityRtkCorrectMetControlPointZ.getText().toString());
Coordinate coordinate = CoordTransUtil.blh2Xyz(originalLatitude, originalLongitude, originalAltitude, false, cachedCoordinateSystem.coordinateSystem());
if (coordinate == null) {
ToastUtils.showShort(R.string.input_illegal);
return;
}
double correctN = control_x - coordinate.getX();
double correctE = control_y - coordinate.getY();
double correctH = control_z - coordinate.getZ();
new AlertDialog.Builder(RtkBaseCorrectActivity.this).setTitle(R.string.rtk_correct_result)
.setMessage(getString(R.string.rtk_correct_x) + ":" + Util.formatDouble2StringDotAuto(correctN) + "\n"
+ getString(R.string.rtk_correct_y) + ":" + Util.formatDouble2StringDotAuto(correctE) + "\n"
+ getString(R.string.rtk_correct_z) + ":" + Util.formatDouble2StringDotAuto(correctH) + "\n")
.setPositiveButton(R.string.global_apply, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
binding.activityRtkCorrectBtnCorrect.setEnabled(false);
cachedCoordinateSystem.coordinateSystem().correctN = correctN;
cachedCoordinateSystem.coordinateSystem().correctE = correctE;
cachedCoordinateSystem.coordinateSystem().correctH = correctH;
BCLog.BugCoordinateSystem.log(cachedCoordinateSystem.coordinateSystem(), () -> "坐标系校正后");
Coordinate correctPoint = new Coordinate(binding.activityRtkCorrectMetControlPointName.getText().toString(), control_x, control_y, control_z);
ThreadPoolUtil.execute(() -> {
CachedCurrentCoordinateSystem.saveCurrentCoordinateSystem(cachedCoordinateSystem.coordinateSystem());
BCLog.BugCoordinateSystem.log(cachedCoordinateSystem.coordinateSystem(), () -> "执行坐标系存储");
Gnss.getInstance().getSetting().setBaseCorrect(new BaseCorrect(correctPoint));
Gnss.getInstance().save();
runOnUiThread(new Runnable() {
@Override
public void run() {
binding.activityRtkCorrectTvCorrectCurrent.setText(String.format("%s:\n%s:%s\n%s:%s\n%s:%s",
getString(R.string.current), getString(R.string.rtk_correct_x),
Util.formatDouble2StringDotAuto(cachedCoordinateSystem.coordinateSystem().correctN),
getString(R.string.rtk_correct_y),
Util.formatDouble2StringDotAuto(cachedCoordinateSystem.coordinateSystem().correctE),
getString(R.string.rtk_correct_z),
Util.formatDouble2StringDotAuto(cachedCoordinateSystem.coordinateSystem().correctH)));
ToastUtils.showShort(R.string.apply_success);
}
});
});
}
}).setNegativeButton(R.string.close, null).show();
}
}
});
binding.activityRtkCorrectBtnCorrect.setEnabled(false);
DrawableUtils.tintModifyColorVector(binding.activityRtkCorrectBtnOpen1, R.drawable.icon_vector_folder);
binding.activityRtkCorrectBtnOpen1.setOnClickListener(v -> {
binding.activityRtkCorrectEt0.requestFocus();//作用:输入框不聚焦,防止实测坐标后页面自动滑动到顶部
CommonUtils.hideSoftInput();
new MaterialDialog.Builder(RtkBaseCorrectActivity.this)
.title(R.string.data_source)
.items(new String[]{getString(R.string.road_control_point), getString(R.string.global_control_point), getString(R.string.point_survey_point_library), getString(R.string.staking_point_library)})
.itemsCallback((dialog, itemView, which, text) -> {
switch (which) {
case 0:
ControlPointsNewActivity.pickPoint(this, false, (name, code, x, y, z, remarks) -> {
onPicked(name, x, y, z);
});
break;
case 1:
ControlPointsNewActivity.pickPoint(this, true, (name, code, x, y, z, remarks) -> {
onPicked(name, x, y, z);
});
break;
case 2:
CoordinatePointsLibraryActivity.pickPoint(RtkBaseCorrectActivity.this, (name, code, x, y, z, b, l, h) -> {
onPicked(name, x, y, z);
});
break;
case 3:
StakingNewJobActivity.pickPoint(RtkBaseCorrectActivity.this, (name, x, y, z) -> {
onPicked(name, x, y, z);
});
break;
}
}).show();
});
initMaterialEditTextColor();
if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_PHONE_LOCATION) {
new AlertDialog.Builder(this)
.setTitle(R.string.hint)
.setMessage("使用手机自带GPS时,请在RTK坐标系统里,坐标转换方法选择:手机gps校正,再点击校正;如果您想使用RTK放样,请重启软件,选择对应的RTK型号,再进入此界面校正")
.setPositiveButton(R.string.i_know, null)
.show();
} else {
if (Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint() != null
&& !StringUtils.isEmpty(Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint().getName())) {
try {
new AlertDialog.Builder(this)
.setTitle(R.string.hint)
.setMessage(getString(R.string.ask_use_last_rtk_coordinate) + Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint().getName())
.setPositiveButton(R.string.use, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
binding.activityRtkCorrectMetControlPointName.setText(Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint().getName());
binding.activityRtkCorrectMetControlPointX.setText(Util.formatDouble2StringDotAuto(Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint().getX()));
binding.activityRtkCorrectMetControlPointY.setText(Util.formatDouble2StringDotAuto(Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint().getY()));
binding.activityRtkCorrectMetControlPointZ.setText(Util.formatDouble2StringDotAuto(Gnss.getInstance().getSetting().getBaseCorrect().getCorrectPoint().getZ()));
}
})
.setNegativeButton(R.string.cancel, null)
.show();
} catch (NumberFormatException ignored) {
}
}
}
}
@Override
protected void initData() {
}
private boolean checkCalEnable() {
//已知点检查
if ("".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())
&& "".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())
&& "".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointX.setError(getString(R.string.known_point_cannot_be_empty));
binding.activityRtkCorrectMetControlPointY.setError(getString(R.string.known_point_cannot_be_empty));
binding.activityRtkCorrectMetControlPointZ.setError(getString(R.string.known_point_cannot_be_empty));
return false;
} else if ("-".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())
|| "-.".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())
|| ".".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())
|| "+.".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())
|| "+".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointX.setError(getString(R.string.input_illegal));
return false;
} else if ("-".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())
|| "-.".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())
|| ".".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())
|| "+.".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())
|| "+".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointY.setError(getString(R.string.input_illegal));
return false;
} else if ("-".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())
|| "-.".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())
|| ".".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())
|| "+.".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())
|| "+".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointZ.setError(getString(R.string.input_illegal));
return false;
}
if ("".equals(binding.activityRtkCorrectMetControlPointX.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointX.setText("0");
}
if ("".equals(binding.activityRtkCorrectMetControlPointY.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointY.setText("0");
}
if ("".equals(binding.activityRtkCorrectMetControlPointZ.getText().toString().trim())) {
binding.activityRtkCorrectMetControlPointZ.setText("0");
}
return true;
}
private void onPicked(String name, double x, double y, double z) {
String lastCorrectStr = null;
// int jobIndex = data.getIntExtra("returnJobIndex", -1);
// int coordIndex = data.getIntExtra("returnCoordIndex", -1);
// IStakingJobDataSource stakingJobDataSource = VersionController.instance.getStakingJobDataSource();
// if (jobIndex >= 0 && jobIndex < stakingJobDataSource.size()) {
// if (coordIndex >= 0 && coordIndex < stakingJobDataSource.get(jobIndex).getPointList().size()) {
// Point point = stakingJobDataSource.get(jobIndex).getPointList().get(coordIndex);
// binding.activityRtkCorrectMetControlPointName.setText(point.getName());
// binding.activityRtkCorrectMetControlPointX.setText(Util.formatDouble2String(point.getX()));
// binding.activityRtkCorrectMetControlPointY.setText(Util.formatDouble2String(point.getY()));
// binding.activityRtkCorrectMetControlPointZ.setText(Util.formatDouble2String(point.getZ()));
// lastCorrectStr = point.getName() + "," + point.getX() + "," + point.getY() + "," + point.getZ();
// ToastUtils.showShort(R.string.open_point_successful);
// }
// } else {
// String name = data.getStringExtra("name");
// double x = data.getDoubleExtra("x", 0);
// double y = data.getDoubleExtra("y", 0);
// double z = data.getDoubleExtra("z", 0);
binding.activityRtkCorrectMetControlPointName.setText(name);
binding.activityRtkCorrectMetControlPointX.setText(Util.formatDouble2StringDotAuto(x));
binding.activityRtkCorrectMetControlPointY.setText(Util.formatDouble2StringDotAuto(y));
binding.activityRtkCorrectMetControlPointZ.setText(Util.formatDouble2StringDotAuto(z));
lastCorrectStr = name + "," + x + "," + y + "," + z;
ToastUtils.showShort(R.string.open_point_successful);
// }
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("lastRtkCorrectPoint", lastCorrectStr);
editor.apply();
ToastUtils.showShort(R.string.open_point_successful);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_activity_rtk_correct_reset:
cachedCoordinateSystem.coordinateSystem().correctN = 0;
cachedCoordinateSystem.coordinateSystem().correctE = 0;
cachedCoordinateSystem.coordinateSystem().correctH = 0;
binding.activityRtkCorrectTvCorrectCurrent.setText(String.format("%s:\n%s:%s\n%s:%s\n%s:%s",
getString(R.string.current), getString(R.string.rtk_correct_x),
Util.formatDouble2StringDotAuto(cachedCoordinateSystem.coordinateSystem().correctN),
getString(R.string.rtk_correct_y),
Util.formatDouble2StringDotAuto(cachedCoordinateSystem.coordinateSystem().correctE),
getString(R.string.rtk_correct_z),
Util.formatDouble2StringDotAuto(cachedCoordinateSystem.coordinateSystem().correctH)));
ThreadPoolUtil.execute(() -> {
ProjectDb.getInstance().updateCurrentCoordinator(cachedCoordinateSystem.coordinateSystem());
ToastUtils.showShort(R.string.rtk_correct_reset);
});
break;
case R.id.menu_help:
HelpWebActivity.navigation2RtkBaseCorrectHelp(this);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_activity_rtk_correct, menu);
return true;
}
private void initMaterialEditTextColor() {
if (((App) Utils.getApp()).isThemeDark) {
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetControlPointX.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetControlPointY.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetControlPointZ.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalLatitude.setPrimaryColor(Color.LTGRAY);
binding.activityRtkCorrectMetOriginalLongitude.setPrimaryColor(Color.LTGRAY);
binding.activityRtkCorrectMetOriginalAltitude.setPrimaryColor(Color.LTGRAY);
binding.activityRtkCorrectMetControlPointX.setPrimaryColor(Color.LTGRAY);
binding.activityRtkCorrectMetControlPointY.setPrimaryColor(Color.LTGRAY);
binding.activityRtkCorrectMetControlPointZ.setPrimaryColor(Color.LTGRAY);
binding.activityRtkCorrectMetOriginalLatitude.setFocusFraction(1.0f);
binding.activityRtkCorrectMetOriginalLongitude.setFocusFraction(1.0f);
binding.activityRtkCorrectMetOriginalAltitude.setFocusFraction(1.0f);
binding.activityRtkCorrectMetControlPointX.setFocusFraction(1.0f);
binding.activityRtkCorrectMetControlPointY.setFocusFraction(1.0f);
binding.activityRtkCorrectMetControlPointZ.setFocusFraction(1.0f);
binding.activityRtkCorrectMetOriginalLatitude.setMetHintTextColor(Color.GRAY);
binding.activityRtkCorrectMetOriginalLongitude.setMetHintTextColor(Color.GRAY);
binding.activityRtkCorrectMetOriginalAltitude.setMetHintTextColor(Color.GRAY);
binding.activityRtkCorrectMetControlPointX.setMetHintTextColor(Color.GRAY);
binding.activityRtkCorrectMetControlPointY.setMetHintTextColor(Color.GRAY);
binding.activityRtkCorrectMetControlPointZ.setMetHintTextColor(Color.GRAY);
binding.activityRtkCorrectMetOriginalLatitude.setUnderlineColor(Color.GRAY);
binding.activityRtkCorrectMetOriginalLongitude.setUnderlineColor(Color.GRAY);
binding.activityRtkCorrectMetOriginalAltitude.setUnderlineColor(Color.GRAY);
binding.activityRtkCorrectMetControlPointX.setUnderlineColor(Color.GRAY);
binding.activityRtkCorrectMetControlPointY.setUnderlineColor(Color.GRAY);
binding.activityRtkCorrectMetControlPointZ.setUnderlineColor(Color.GRAY);
}
}
@Override
public void onRtkPositionReceived(double antennaHeight, Blh blh, Blh originalBlh, Coordinate coordinate, double hdop, double vdop, double pdop) {
super.onRtkPositionReceived(antennaHeight, blh, originalBlh, coordinate, hdop, vdop, pdop);
if (mTimes >= 0 && mTimes < 10) {
latSum += originalBlh.getLatitude();
lngSum += originalBlh.getLongitude();
altSum += originalBlh.getAltitude();
mTimes++;
binding.activityRtkCorrectProgressbar.setProgress(mTimes);
if (mTimes == 10) {
originalLatitude = latSum / mTimes;
originalLongitude = lngSum / mTimes;
originalAltitude = altSum / mTimes;
binding.activityRtkCorrectMetOriginalLatitude.setText(Util.radianToDmsDoubleString(Math.toRadians(originalLatitude), 6, false));
binding.activityRtkCorrectMetOriginalLongitude.setText(Util.radianToDmsDoubleString(Math.toRadians(originalLongitude), 6, false));
binding.activityRtkCorrectMetOriginalAltitude.setText(Util.formatDouble2StringDotAuto(originalAltitude));
binding.activityRtkCorrectBtnCorrect.setEnabled(true);
}
}
if (Device.getInstance().isRtkRunning) {
if (Gnss.getInstance().getDevice().isTiltOpen()) {
if (GnssPosition.getInstance().isTiltEnable()) {
if (((App) Utils.getApp()).isThemeDark) {
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.WHITE);
} else {
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.BLACK);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.BLACK);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.BLACK);
}
} else {
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.RED);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.RED);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.RED);
}
} else {
switch (GnssPosition.getInstance().getPosType()) {
case GnssPosition.POS_TYPE_FIXED:
if (((App) Utils.getApp()).isThemeDark) {
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.WHITE);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.WHITE);
} else {
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.BLACK);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.BLACK);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.BLACK);
}
break;
case GnssPosition.POS_TYPE_FLOAT:
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(getResources().getColor(R.color.md_deep_orange_400));
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(getResources().getColor(R.color.md_deep_orange_400));
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(getResources().getColor(R.color.md_deep_orange_400));
break;
default:
binding.activityRtkCorrectMetOriginalLatitude.setMetTextColor(Color.RED);
binding.activityRtkCorrectMetOriginalLongitude.setMetTextColor(Color.RED);
binding.activityRtkCorrectMetOriginalAltitude.setMetTextColor(Color.RED);
}
}
}
}
@Override
public void onPause() {
super.onPause();
binding.activityRtkCorrectEt0.requestFocus();//作用:输入框不聚焦,防止实测坐标后页面自动滑动到顶部
}
}

@ -19,7 +19,9 @@ import com.bingce.utils.ThreadPoolUtil;
import com.project.survey.R;
import com.project.survey.ui.instrument.mobilestationmode.adapter.MatchingPointRecyclerViewAdapter;
/**
* 点校正
*/
public class RtkPointCorrectActivity extends AbstractRtkPointCorrectActivity {
@Override

@ -0,0 +1,5 @@
<vector android:alpha="0.9" android:autoMirrored="true"
android:height="200dp" android:viewportHeight="200"
android:viewportWidth="200" android:width="200dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M99.69,47.5C101.25,52.81 106.25,56.25 111.56,56.25H162.19C162.19,49.38 156.56,43.75 149.69,43.75H98.44L99.69,47.5ZM94.69,31.25H149.69C163.44,31.25 174.69,42.5 174.69,56.25V61.25C180.63,65.94 184.69,73.13 184.69,81.25V156.25C184.69,170 173.44,181.25 159.69,181.25H40.63C26.88,181.25 15.63,170 15.63,156.25V43.75C15.63,30 26.88,18.75 40.63,18.75H72.81C81.88,18.75 90.31,23.75 94.69,31.25ZM72.81,31.25H40.63C33.75,31.25 28.13,36.88 28.13,43.75V156.25C28.13,163.13 33.75,168.75 40.63,168.75H159.38C166.25,168.75 171.88,163.13 171.88,156.25V81.25C171.88,74.38 166.25,68.75 159.38,68.75H112.19C101.25,68.75 91.56,61.56 88.44,51.25L84.69,40C83.13,34.69 78.44,31.25 72.81,31.25ZM53.13,137.5H103.13C106.56,137.5 109.38,140.31 109.38,143.75C109.38,147.19 106.56,150 103.13,150H53.13C49.69,150 46.88,147.19 46.88,143.75C46.88,140.31 49.69,137.5 53.13,137.5Z"/>
</vector>

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/activity_rtk_correct_et_0"
android:layout_width="0px"
android:layout_height="0px" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.daimajia.numberprogressbar.NumberProgressBar
android:id="@+id/activity_rtk_correct_progressbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
custom:progress_current="0"
custom:progress_max="10"
custom:progress_reached_bar_height="4dp"
custom:progress_reached_color="?colorPrimary"
custom:progress_text_size="10sp"
custom:progress_text_visibility="visible"
custom:progress_unreached_bar_height="3dp" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/activity_rtk_correct_met_original_latitude"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/latitude"
android:textSize="@dimen/myTextSize"
app:met_floatingLabel="normal"
app:met_floatingLabelText="@string/latitude" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/activity_rtk_correct_met_original_longitude"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/longitude"
android:textSize="@dimen/myTextSize"
app:met_floatingLabel="normal"
app:met_floatingLabelText="@string/longitude" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/activity_rtk_correct_met_original_altitude"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/altitude"
android:textSize="@dimen/myTextSize"
app:met_floatingLabel="normal"
app:met_floatingLabelText="@string/altitude" />
</LinearLayout>
<TextView
android:id="@+id/activity_rtk_correct_met_control_point_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/point_name" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/activity_rtk_correct_met_control_point_x"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/control_x"
android:inputType="numberDecimal|numberSigned"
android:textSize="@dimen/myTextSize"
app:met_clearButton="true"
app:met_floatingLabel="normal"
app:met_floatingLabelText="@string/control_x" />
<ImageView
android:id="@+id/activity_rtk_correct_btn_open1"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:layout_marginBottom="15dp"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_vector_folder" />
</LinearLayout>
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/activity_rtk_correct_met_control_point_y"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/control_y"
android:inputType="numberDecimal|numberSigned"
android:textSize="@dimen/myTextSize"
app:met_clearButton="true"
app:met_floatingLabel="normal"
app:met_floatingLabelText="@string/control_y" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/activity_rtk_correct_met_control_point_z"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/control_z"
android:inputType="numberDecimal|numberSigned"
android:textSize="@dimen/myTextSize"
app:met_clearButton="true"
app:met_floatingLabel="normal"
app:met_floatingLabelText="@string/control_z" />
</LinearLayout>
<TextView
android:id="@+id/activity_rtk_correct_tv_correct_current"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
tools:text="当前点: 0/10" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/rtk_base_correct_tips"
android:textSize="11sp" />
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/activity_rtk_correct_btn_smooth_collect_ten_times"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="@dimen/bt_height"
android:layout_weight="1"
android:text="@string/smooth_collect_ten_times" />
<Button
android:id="@+id/activity_rtk_correct_btn_correct"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="@dimen/bt_height"
android:layout_weight="1"
android:text="@string/correcting" />
</LinearLayout>
</LinearLayout>

@ -167,6 +167,7 @@
android:weightSum="3">
<TextView
android:id="@+id/tvBaseStationTranslation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -178,6 +179,7 @@
app:drawableTopCompat="@drawable/base_station_translation" />
<TextView
android:id="@+id/tvCoordinateSystem"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -189,6 +191,7 @@
app:drawableTopCompat="@drawable/coordinate_system" />
<TextView
android:id="@+id/tvPointCorrection"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"

@ -0,0 +1,14 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_activity_rtk_correct_reset"
android:title="@string/reset"
app:showAsAction="ifRoom" />
<item
android:id="@+id/menu_help"
android:title="@string/help"
app:showAsAction="ifRoom" />
</menu>

@ -162,5 +162,10 @@
<string name="record_none">无(长按记录按钮可以添加备注)</string>
<string name="current_rtk_type_not_support_this_action">当前仪器类型不支持此操作</string>
<string name="device_not_support_this_mode">当前设备不支持此模式</string>
<string name="rtk_native_unnecessary">手机自带GPS不需要校正</string>
<string name="rtk_base_correct_tips">1、移动站立在某个控制点,平滑采集控制点的大地坐标;\n2、输入这个控制点的平面坐标;\n3、点击【校正】计算平移量,应用后,完成基站平移;\n4、最好再用其他控制点复核一下。\n注:使用电台1+1时使用本功能,CORS模式如软件未提示,不需要做基站平移。</string>
<string name="ask_use_last_rtk_coordinate">是否使用上次的控制点进行校正?</string>
<string name="use">使用</string>
<string name="reset">重置</string>
</resources>
Loading…
Cancel
Save