[[439635]] 詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ https://harmonyos..com 序文HarmonyOS は、Internet of Everything の時代に向けたまったく新しい分散型オペレーティング システムです。 HarmonyOS の分散技術機能 (分散ソフト バス、分散デバイス仮想化、分散データ管理、分散タスク スケジューリング) は常に開発者から大きな注目を集めており、ユーザーから高く評価されています。 私たちは、日常生活において、道路上で交通事故が発生すると、事故に巻き込まれた人が三角形の反射警告標識を持って目的地まで歩いて設置することが多いという事実に基づいて、「分散型インテリジェント三角形警告標識アプリケーション」を開発しました。手動での設置は二次事故を引き起こすリスクがあるため、この問題を解決するためにインテリジェントな移動式三角警告標識を設計しました。このインテリジェントな三角警告標識は、HAP を介して携帯電話に接続して移動方向と速度を制御し、事故現場の後ろの適切な位置に駐車できるため、ユーザーの人身および財産の安全を確保できます。 警告標識の動作を制御する過程で緊急事態などが発生した場合、現在の操作フローを別の装置に転送して操作することができます。移動軌跡は、分散データ サービスを通じて 2 つのデバイス間のデータの一貫性を確保することを目的としています。 エフェクト表示1. 「スマートトライアングル警告サイン」HAPプロジェクトを作成する1. DevEco Studioをインストールして設定する2.1 リリース インストールリンク: https://developer.harmonyos.com/cn/develop/deveco-studio IDE の使用ガイドは非常に詳細です: https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387 私の場合は最新バージョン2.1.0.501、SDK: APIバージョン5を使用しています 2. テンプレートを選択してJava Phoneアプリケーションを作成する==次へをクリック== [完了] をクリックして、HAP プロジェクトの作成を完了します。 3. インテリジェント三角警告標識アプリケーションパッケージ構造まず、インテリジェント三角形警告標識アプリケーションパッケージ構造の設計を完了します。構造は次のとおりです。 2. インテリジェント三角警告標識アプリケーションのコアコードの実装1. config.json 権限設定- 「必要な権限」 : [
- {
- 「名前」 : 「ohos.permission.INTERNET」
- },
- {
- 「名前」 : 「ohos.permission.GET_NETWORK_INFO」
- },
- {
- 「名前」 : 「ohos.permission.MICROPHONE」
- },
- {
- 「名前」 : 「android.permission.RECORD_AUDIO」
- },
- {
- 「名前」 : 「ohos.permission.DISTRIBUTED_DATASYNC」
- },
- {
- 「名前」 : 「ohos.permission.servicebus.ACCESS_SERVICE」
- },
- {
- 「名前」 : 「com.huawei.hwddmp.servicebus.BIND_SERVICE」
- },
- {
- 「名前」 : 「ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE」
- },
- {
- 「名前」 : 「ohos.permission.GET_DISTRIBUTED_DEVICE_INFO」
- },
- {
- 「名前」 : 「ohos.permission.GET_BUNDLE_INFO」
- },
- {
- "名前" : "ohos.p
- 権限.場所"
- }
- ]
2. 分散データサービスコアコード- com.google.gson.Gson をインポートします。
- com.google.gson.reflect.TypeToken をインポートします。
- com.isoftstone.smartcar.app.common.Constant をインポートします。
- com.isoftstone.smartcar.app.model.DrivingMap をインポートします。
- com.isoftstone.smartcar.app.model.DrivingRecord をインポートします。
- com.isoftstone.smartcar.app.model.ReportRecord をインポートします。
- com.isoftstone.smartcar.app.utils.DrivingReportComparator をインポートします。
- com.isoftstone.smartcar.app.utils.ReportRecordComparator をインポートします。
- com.isoftstone.smartcar.app.utils.StringUtils をインポートします。
- ohos.app.Context をインポートします。
- ohos.data.distributed.common.* をインポートします。
- ohos.data.distributed.device.DeviceFilterStrategy をインポートします。
- ohos.data.distributed.device.DeviceInfo をインポートします。
- ohos.data.distributed.user .SingleKvStoreをインポートします。
- ohos.hiviewdfx.HiLog をインポートします。
- ohos.hiviewdfx.HiLogLabel をインポートします。
- java.util.ArrayList をインポートします。
- java.util.List をインポートします。
- /**
- * 分散データベースサービス
- */
- パブリッククラス SmartShareService {
- プライベート静的最終 HiLogLabel ラベル = 新しい HiLogLabel(HiLog.LOG_APP、0x00201、 "SmartshareService" );
- プライベート静的SmartShareService smartShareService;
- プライベート静的SingleKvStore singleKvStore;
- プライベート静的KvManager kvManager;
- プライベート最終コンテキストコンテキスト;
- 公共 静的SmartShareService getInstance(コンテキスト コンテキスト) {
- スマートシェアサービスがnullの場合
- smartShareService = 新しい SmartShareService(コンテキスト);
- }
- smartShareServiceを返します。
- }
- プライベートSmartShareService(コンテキストコンテキスト){
- this.context = コンテキスト;
- }
- /**
- * 分散データベースの初期化
- */
- パブリックvoid init() {
- KvManagerConfig config = 新しい KvManagerConfig(コンテキスト);
- kvManager = KvManagerFactory.getInstance().createKvManager(config);
- オプション options = new Options(); options.setCreateIfMissing( true ).setEncrypt( false ).setKvStoreType(KvStoreType.SINGLE_VERSION).setAutoSync( true );
- 単一のKvStore = kvManager.getKvStore(オプション、Constant.SMART_SHARE_NAME);
- HiLog.info(label, "初期化に成功しました!" );
- // singleKvStoreを返します。
- }
- /**
- * 運転記録を追加しました
- * @param drivingRecord 運転記録オブジェクト
- */
- パブリックvoid insertDrivingRecord(DrivingRecord drivingRecord){
- Gson を新しい Gson() に変換します。
- 文字列 resultJson = gson.toJson(drivingRecord); singleKvStore.putString(Constant.DRIVING_REPORT_PREFIX+drivingRecord.getId(),resultJson);
- HiLog.info(label, "新しい運転記録が正常に追加されました!" );
- }
- /**
- * 新しい運転記録トラックを一括で追加
- * @param drivingId 運転記録ID
- * @param drivingMapLst 運転記録トラックリスト
- */
- パブリックvoid insertDrivingMap(String drivingId, List<DrivingMap> drivingMapLst){
- Gson を新しい Gson() に変換します。
- 文字列 resultJson = gson.toJson(drivingMapLst); singleKvStore.putString(Constant.DRIVING_MAP_PREFIX+drivingId、resultJson);
- HiLog.info(label, "運転記録トラックを一括追加しました!" );
- }
- /**
- * 報告記録を追加
- * @param drivingId 運転記録ID
- * @param reportRecord レポートレコードオブジェクト
- */
- パブリックvoid insertReportRecord(String drivingId, ReportRecord reportRecord){
- Gson を新しい Gson() に変換します。
- リスト<Entry> エントリ = singleKvStore.getEntries(Constant.REPORT_RECORD_PREFIX+drivingId);
- エントリ == null || エントリ.size ( ) == 0 の場合{
- リスト<ReportRecord> reportRecordLst = 新しいArrayList<>();
- reportRecordLst.add (レポートレコード) ;
- 文字列 resultJson1 = gson.toJson(reportRecordLst); singleKvStore.putString(Constant.REPORT_RECORD_PREFIX+drivingId、resultJson1);
- HiLog.info(label, "新しいレポートレコードが正常に作成されました!" );
- }それ以外{
- 文字列 resultJson = entrys.get(0).getValue().getString();
- リスト<ReportRecord> reportRecordLst = gson.fromJson(resultJson, 新しい TypeToken<List<ReportRecord>>() {}.getType());
- reportRecordLst.add (レポートレコード) ;
- 文字列 resultJson1 = gson.toJson(reportRecordLst);
- singleKvStore.putString(Constant.REPORT_RECORD_PREFIX+drivingId、resultJson1);
- HiLog.info(label, "レポートレコードリストが新しく追加されました!" );
- }
- }
- /**
- * 保険の電話番号を設定する
- * @param key保険キー
- * @param 電話保険キーに対応する値
- */
- パブリックvoid setupInsuranceTelphone(文字列キー、文字列電話番号){
- singleKvStore.putString(Constant.TEL_PREFIX+キー、電話番号);
- HiLog.info(label, "保険の電話番号の設定に成功しました!" );
- }
- /**
- * 保険の電話番号を取得する
- * @param key保険電話キー
- * @保険の電話番号を返す
- */
- パブリック文字列 getInsuranceTelphone(文字列キー){
- 文字列 tel = "" ;
- リスト<Entry> エントリ = singleKvStore.getEntries(Constant.TEL_PREFIX+ key );
- エントリ数 != null && エントリ数.size ()>0 の場合 {
- tel = エントリ.get(0).getValue().getString();
- HiLog.info(label, "保険の電話番号を正常に取得しました!" +tel);
- }それ以外{
- HiLog.info(label, "保険の電話番号が取得されませんでした!" );
- }
- 電話番号を返す;
- }
- /**
- * IPを設定する
- * @param key IPキー
- * @param value IP値
- */
- public void setIp(文字列キー、文字列値){
- singleKvStore.putString(Constant.IP_PREFIX+キー、値);
- HiLog.info(label, "IP設定に成功しました!" );
- }
- /**
- * IPを取得
- * @param key IPキー
- * @return IP値
- */
- パブリック文字列 getIp(文字列キー){
- 文字列 tmpIp = "" ;
- リスト<Entry> エントリ = singleKvStore.getEntries(Constant.IP_PREFIX+ key );
- エントリ数 != null && エントリ数.size ()>0 の場合 {
- tmpIp = エントリ.get(0).getValue().getString();
- HiLog.info(label, "IP を正常に取得しました!" +tmpIp);
- }それ以外{
- HiLog.info(label, "IPが取得されませんでした!" );
- }
- tmpIpを返します。
- }
- /**
- * 運転記録リストを取得
- * @運転記録リストを返す
- */
- パブリックリスト<DrivingRecord> getDrivingRecords(){
- リスト<DrivingRecord> drivingReporList = new ArrayList<>();
- リスト<Entry> エントリ = singleKvStore.getEntries(Constant.DRIVING_REPORT_PREFIX);
- (エントリ entry:entrys){
- 文字列キー= entry.getKey();
- 文字列値 = entry.getValue().getString();
- HiLog.info(label, "運転記録データを取得します: キー:" + key + "、値:" + value);
- Gson を新しい Gson() に変換します。
- 運転記録 drivingRecord = gson.fromJson(値、 DrivingRecord.class);
- //HiLog.info(label,drivingRecord.getId());
- 運転記録リストに運転記録を追加します。
- }
- //選別
- 運転レポートリストのサイズ() > 0の場合{
- DrivingReportComparator を新しい DrivingReportComparator() に追加します。
- 運転レポートリストをソートします(運転レポート比較);
- }
- drivingReporListを返します。
- }
- /**
- * 運転記録トラックリストを取得する
- * @param drivingId 運転記録ID
- * @運転記録トラックリストを返す
- */
- パブリックリスト<DrivingMap> getDrivingMap(String drivingId){
- 文字列 resultJson = singleKvStore.getString(Constant.DRIVING_MAP_PREFIX+drivingId);
- Gson を新しい Gson() に変換します。
-
- gson.fromJson(resultJson、新しい TypeToken<List<DrivingMap>>() {}.getType())を返します。
- }
- /**
- * レポートレコードリストを取得する
- * @param drivingId 運転記録ID
- * @returnレポートレコードリスト
- */
- パブリックリスト<ReportRecord> getReportRecords(String drivingId){
- リスト<Entry> エントリ = singleKvStore.getEntries(Constant.REPORT_RECORD_PREFIX+drivingId);
- エントリ == null || エントリ.size ( ) == 0 の場合{
- HiLog.info(label, "レポートレコードは空です!" );
- 戻る ヌル;
- }それ以外{
- Gson を新しい Gson() に変換します。
- エントリ entry = entrys.get(0);
- 文字列 resultJson = entry.getValue().getString();
- リスト<ReportRecord> reportRecordLst = gson.fromJson(resultJson, 新しい TypeToken<List<ReportRecord>>() {}.getType());
- HiLog.info(label, "レポートレコードを正常に取得しました!" + reportRecordLst.size ());
-
- reportRecordLst!= null && reportRecordLst.size () > 0の場合{
- //選別
- レポートレコードコンパレーター reportRecordComparator = 新しいレポートレコードコンパレーター();
- reportRecordLst.sort(reportRecordComparator);
- }
- reportRecordLstを返します。
- }
- }
- /**
- * データを同期する
- */
- パブリックボイドsyncData() {
- リスト<デバイス情報> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER);
- リスト<String> deviceIdList = 新しいArrayList<>();
- 文字列デバイスID;
- (デバイス情報デバイス情報:デバイス情報リスト) {
- デバイスID = デバイス情報.getId();
- HiLog.info(ラベル、 "デバイスID = " + デバイスID);
- デバイスIDリスト。 (デバイスID)を追加します。
- }
- HiLog.info(ラベル、 "deviceIdList.size() = " + deviceIdList.size ());
- ( deviceIdList.size () > 0)の場合{
- 単一のKvStore.sync(デバイスIDリスト、SyncMode.PUSH_ONLY);
- }それ以外{
- HiLog.error(label, "共有デバイスがありません" );
- }
- }
- /**
- * コールバックインターフェースを登録する
- * @param kvStoreObserver kvStore オブジェクト
- */
- パブリックvoid registerCallback(KvStoreObserver kvStoreObserver) {
- 単一の KvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL、kvStoreObserver);
- }
- /**
- * データを消去
- */
- パブリックボイドクリアオールデータ() {
- リスト<Entry> エントリ = singleKvStore.getEntries( "" );
- エントリ!= null && エントリ.size ()>0){
- (エントリ entry:entrys){
- 単一のKvStoreを削除します(entry.getKey());
- }
- HiLog.info(label, "データが正常にクリアされました" );
- }それ以外{
- HiLog.info(label, "クリアするデータがありません" );
- }
- }
- /**
- * 既存の運転記録から運転IDを取得する
- * @return運転記録IDを返します
- */
- パブリック文字列 getDrivingId(){
- 文字列 drivingId = "" ;
- リスト<Entry> エントリ = singleKvStore.getEntries(Constant.DRIVING_REPORT_PREFIX);
- エントリがnullでエントリがsize () > 0 の場合{
- リスト<DrivingRecord> drivingReporList = new ArrayList<>();
- (エントリ entry:entrys){
- 文字列値 = entry.getValue().getString();
- Gson を新しい Gson() に変換します。
- 運転記録 drivingRecord = gson.fromJson(値、 DrivingRecord.class);
- 文字列 dateStr = drivingRecord.getDrivingDate();
- StringUtils.isDiffHour(dateStr)の場合{
- 運転記録リストに運転記録を追加します。
- }
- HiLog.info(ラベル、運転記録.getId());
- 運転記録リストに運転記録を追加します。
- }
- 運転レポートリストのサイズ() > 0の場合{
- //選別
- DrivingReportComparator を新しい DrivingReportComparator() に追加します。
- 運転レポートリストをソートします(運転レポート比較);
-
- 運転ID = 運転レポートリスト.get(0).getId();
- HiLog.info(label, "条件を満たす drivingId が見つかりました:" + drivingId);
- }それ以外{
- HiLog.info(label, "条件に一致する drivingId が見つかりませんでした" );
- }
- }それ以外{
- HiLog.info(label, "運転記録が空です。条件に一致する運転IDが見つかりませんでした" );
- }
-
- drivingIdを返します。
- }
- }
3. 運転記録コード- com.isoftstone.smartcar.app.ResourceTable をインポートします。
- com.isoftstone.smartcar.app.model.DrivingRecord をインポートします。
- com.isoftstone.smartcar.app.provider.DrivingRecordProvider をインポートします。
- com.isoftstone.smartcar.app.service.SmartShareService をインポートします。
- ohos.aafwk.ability.AbilitySlice をインポートします。
- ohos.aafwk.content.Intent をインポートします。
- ohos.aafwk.content.Operation をインポートします。
- ohos.agp.components.Component をインポートします。
- ohos.agp.components.Image をインポートします。
- ohos.agp.components.ListContainer をインポートします。
- java.util.List をインポートします。
- /**
- * 運転記録
- */
- パブリッククラス DrivingRecordsAbilitySlice は AbilitySlice を拡張し、Component.ClickedListener を実装します {
- プライベート ListContainer lcRecords;
- プライベート SmartShareService shareService;
- プライベート List<DrivingRecord> drivingRecordList;
- プライベート DrivingRecordProvider drivingRecordProvider;
- @オーバーライド
- パブリックvoid onStart(インテント インテント) {
- super.onStart(インテント);
- super.setUIContent(ResourceTable.Layout_ability_driving_records);
- UI を初期化します。
- }
- プライベートvoidinitUI() {
- shareService = SmartShareService.getInstance(これ);
- shareService.init();
- 画像 iBack = (画像) findComponentById(ResourceTable.Id_i_back);
- iBack.setClickedListener(これを);
- lcRecords = (ListContainer) findComponentById(ResourceTable.Id_lc_records);
- 運転記録リスト = getData();
- drivingRecordProvider = 新しい DrivingRecordProvider(drivingRecordList、this);
- lcRecords.setItemProvider(ドライブレコードプロバイダー);
- lcRecords.setItemClickedListener(新しいListContainer.ItemClickedListener() {
- @オーバーライド
- パブリックvoid onItemClicked(ListContainer listContainer、コンポーネント コンポーネント、 int i、long l) {
- インテントのintent = 新しいIntent();
- 運転記録 drivingRecord = (DrivingRecord) drivingRecordProvider.getItem(i);
- 意図を設定します。
- intent.setParam( "lat" 、 drivingRecord.getLatitude());
- intent.setParam( "lng" 、 drivingRecord.getLongitude());
- 操作 operation = new Intent.OperationBuilder()
- .withDeviceId( "" )
- .withBundleName( "com.isoftstone.smartcar.app" )
- .withAbilityName( "com.isoftstone.smartcar.app.DrivingRecordsDetailAbility" )
- 。建てる();
- インテントをsetOperation(操作);
- 開始アビリティ(インテント);
- //終了();
- }
- });
- }
- @オーバーライド
- パブリックvoid onActive() {
- スーパーのonActive();
- 運転記録リスト = getData();
- drivingRecordProvider = 新しい DrivingRecordProvider(drivingRecordList、this);
- lcRecords.setItemProvider(ドライブレコードプロバイダー);
- }
- @オーバーライド
- パブリックvoid onForeground(インテント インテント) {
- super.onForeground(インテント);
- }
- @オーバーライド
- パブリックvoid onClick(コンポーネント コンポーネント) {
- (component.getId() == ResourceTable.Id_i_back) の場合 {
- 終了能力();
- }
- }
- プライベートリスト<DrivingRecord> getData() {
- shareService.getDrivingRecords()を返します。
- }
- }
4. 運転記録詳細コード- com.isoftstone.smartcar.app.ResourceTable をインポートします。
- com.isoftstone.smartcar.app.model.DrivingMap をインポートします。
- com.isoftstone.smartcar.app.model.ReportRecord をインポートします。
- com.isoftstone.smartcar.app.provider.ReportRecordProvider をインポートします。
- com.isoftstone.smartcar.app.service.SmartShareService をインポートします。
- com.isoftstone.smartcar.app.utils.CoordinateConverter をインポートします。
- com.isoftstone.smartcar.app.widget.carmap.LatLng をインポートします。
- com.isoftstone.smartcar.app.widget.carmap.TinyMap をインポートします。
- ohos.aafwk.ability.AbilitySlice をインポートします。
- ohos.aafwk.content.Intent をインポートします。
- ohos.agp.components.Component をインポートします。
- ohos.agp.components.Image をインポートします。
- ohos.agp.components.ListContainer をインポートします。
- ohos.agp.utils.Point をインポートします。
- ohos.hiviewdfx.HiLog をインポートします。
- ohos.hiviewdfx.HiLogLabel をインポートします。
- ohos.multimodalinput.event.KeyEvent をインポートします。
- java.util.ArrayList をインポートします。
- java.util.List をインポートします。
- java.util.Timer をインポートします。
- java.util.TimerTask をインポートします。
-
- /**
- * 運転記録の詳細
- */
- パブリッククラス DrivingRecordsDetailAbilitySlice は AbilitySlice を拡張し、Component.ClickedListener を実装します {
- プライベート静的最終 HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP, 0x00100, "DrivingRecordsDetailAbilitySlice" );
-
- プライベートTinyMapマップ;
- プライベート文字列 drivingId;
- プライベート SmartShareService shareService;
-
- @オーバーライド
- 保護されたvoid onStart(インテントインテント) {
- super.onStart(インテント);
- super.setUIContent(ResourceTable.Layout_ability_driving_records_detail);
- UIを初期化します(インテント);
- }
-
- プライベートvoid initUI(インテントインテント) {
- 画像 iBack = (画像) findComponentById(ResourceTable.Id_i_back);
- iBack.setClickedListener(これを);
- マップ = (TinyMap) findComponentById(ResourceTable.Id_map);
- リストコンテナー reportListContainer = (リストコンテナー) findComponentById(ResourceTable.Id_report_records);
- 運転ID = intent.getStringParam( "運転ID" );
- shareService = SmartShareService.getInstance(これ);
- shareService.init();
-
- 新しいタイマー()。スケジュール(新しいタイマータスク() {
- @オーバーライド
- パブリックボイド実行(){
- getUITaskDispatcher().asyncDispatch(新しいRunnable() {
- @オーバーライド
- パブリックボイド実行(){
- マップを設定します。
- }
- });
- }
- },500);
-
- リスト<ReportRecords> reportRecords = shareService.getReportRecords(drivingId);
- レポート レコード プロバイダー reportRecordProvider = 新しいレポート レコード プロバイダー (reportRecords、this)。
- reportListContainer.setItemProvider(reportRecordProvider);
- }
-
- @オーバーライド
- パブリックvoid onClick(コンポーネント コンポーネント) {
- (component.getId() == ResourceTable.Id_i_back) の場合、新しい DrivingRecordsAbilitySlice() と新しい Intent() が存在します。
- 終了();
- }
- }
-
- @オーバーライド
- パブリックブールonKeyUp( intキーコード、キーイベントキーイベント) {
- HiLog.error(logLabel、keyEvent.getKeyCode()+ "" );
- (keyCode==KeyEvent.KEY_BACK)の場合{
- //present(新しい DrivingRecordsAbilitySlice()、新しい Intent());
- 終了();
- 戻る 真実;
- }
- super.onKeyDown(keyCode, keyEvent)を返します。
- }
-
- プライベート LatLng WGS84ToMercator(LatLng latLng) {
- CoordinateConverter.WGS84ToMercator(latLng.getLng(), latLng.getLat())を返します。
- }
-
- プライベートvoidsetMap() {
- マップを初期化します。
- リスト<DrivingMap> drivingMaps = shareService.getDrivingMap(drivingId);
-
- LatLng startLatLng0 = new LatLng( Double .parseDouble(drivingMaps.get(0).getLatitude()), Double .parseDouble(drivingMaps.get(0).getLongitude()));
- LatLng startLatLng = new LatLng(( float ) WGS84ToMercator(startLatLng0).getLat(), ( float ) WGS84ToMercator(startLatLng0).getLng());
- map.setCenterPoint(( float ) startLatLng.getLng(), ( float ) startLatLng.getLat());
-
- LatLng endLatLng0 = new LatLng( Double .parseDouble(drivingMaps.get(drivingMaps. size () - 1).getLatitude()), Double .parseDouble(drivingMaps.get(drivingMaps. size () - 1).getLongitude()));
- LatLng endLatLng = new LatLng(( float ) WGS84ToMercator(endLatLng0).getLat(), ( float ) WGS84ToMercator(endLatLng0).getLng());
- map.setStartElement(( float ) startLatLng.getLng(), ( float ) startLatLng.getLat(), ResourceTable.Media_start_location);
- map.setEndElement(( float ) endLatLng.getLng(), ( float ) endLatLng.getLat(), ResourceTable.Media_end_location);
- リスト<LatLng> latLngs = 新しいArrayList<>();
- (DrivingMap drivingMap : drivingMaps)の場合{
- LatLng latLng = new LatLng( Double .parseDouble(drivingMap.getLatitude()), Double .parseDouble(drivingMap.getLongitude()));
- ポイント p = new Point(( float ) WGS84ToMercator(latLng).getLng(), ( float ) WGS84ToMercator(latLng).getLat());
- 緯度経度。 (新しいLatLng(p.getPointY(), p.getPointX()))を追加します。
- }
- マップにパスを設定します。
- }
- }
詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ https://harmonyos..com |