開発日記 - ecorismap/ecorismap GitHub Wiki
- 辞書入力とサーバーへのアップロードの実装が一通り済んだのでドッグフィーディングテスト
- google翻訳がreactの挙動に影響を与えるので、無効にする
- 地図のURLを変更してもキャッシュが残る不具合を修正。表示をカチカチ切り替えないと更新されない問題はそのうち対応したい。
- mapMemoのライン消しゴムの不具合修正。turf7.0にself-intersectionのバグがあるため6.5にダウングレード
- 以下のインストール手順にしたがって、Android、iOSを設定する。mecab,ipadicはios/ecorismapにコピーする必要はなく、xcodeからAdd Files to "ecorismap" で追加する。https://github.com/swkidd/react-native-japanese-text-analyzer
- iOSはregisterのエラーがエラーがでているコードからregisterを削除する。
- Darwin.C.timeのエラーがでるので-Wno-module-import-in-extern-cをApple CLang - Custom Compiler Flagsに追加する。
- no template named 'binary_function' in namespace 'std'; did you mean '__binary_function'?のエラーがでるので、__binary_functionに変更する
- HPの手順にある-fcxx-modulesを加えるとビルドが通らないので消す。なくてもビルドはとおる。
- マイクを有効にするためにNSSpeechRecognitionUsageDescriptionをInfo.plistに追加
- build.gradleのsdkバージョンが古いためエラーになるのでreact-native-japanese-text-analyzerのsdkバージョンを34にあげてパッチ作成
-
patch-packageがうまく動作しないので以下で対応 https://github.com/ds300/patch-package/issues/300
-
react-native-draggable-flatlistでwarningが出るので以下で対応 https://github.com/computerjazz/react-native-draggable-flatlist/issues/539
-
@react-native-voiceが原因の new NativeEventEmitter()` was called with a non-null argument がconsoleから消えない問題を以下で対応。warningは実行に影響ないので放置でOK https://github.com/expo/expo/issues/17773#issuecomment-1218301931
- 地図グループを作成
- kmlの出力を追加
- 当初、geojsonからtokmlを利用して変換しようとしたが、色も反映させるために自分で書く
- 今までS3に置いてあったタイルを会社のサーバーに移動して問題が発生。
- タイルがない場所をfetchすると404になるが、会社のサーバーだと、その処理が遅いのが原因。
- S3だとファイルがなくても余計な処理が発生しないため遅くなかったと思われる。
- 会社のサーバーでもiOSやWebだとデフォルトで上手く処理していて遅くはならない。
- Androidでの問題に対処するため、最初にheader情報を取得して、ファイルがあるかどうかを先にチェックするように変更。
- これで問題解消
- ズーム8ぐらいだとterrainを有効にした状態で植生タイルを重ねるとぼやける問題が発覚。
- 原因は不明だが、terrainの切り替えボタンを設置することで対応。
- react-map-glにはterrainControlがまだないのでHomeTerrainComponetを自作する。
- 以下の致命的なバグがiOSにあったので、更新してリリース。Androidは0.4.0のまま。
- https://github.com/expo/expo/issues/30108
- この修正をして npx patch-package expo-module-core でパッチを作成して対応
- expoを51.0.28にupdateすれば修正されそうだが、ほかの依存関係にも影響しそうなので、今はしない
- 利用規約を更新した際に、Confirmがでるように修正。利用規約のバージョン番号をAppConstantsで管理する。
- 通常版を更新
- storage.rulesで管理者(オーナー)のみが削除できる権限を与えられない問題。
- プロジェクトの参加者のみreadできる権限も設定できない。(暗号化のkeyがあるので一応制限があるとも言える)
- webpackされたsvgのファイル名が.abc123のように先頭に.がついて、隠しファイルのようになってブラウザで読み込みエラーになる。
- @expo/webpack-configのsrc/webpack.config.jsの該当箇所が[name].[hash][ext]のようになってて[name]がない場合に.が先頭になってしまうのが問題。.を_に置き換えて問題解決。issueに上げるべきだがやってない
- pdfjs-distでpdfを読み込んでpngに保存
- pdfjs-distのbuild/pdf.worker.mjsを修正してgeo情報を取得できるようにする
- gdal3.jsでEPSG:3857のgeoTiffにする
- webpack.config.jsにwasmをstaticにコピーする設定を追加する
- yarn build:webで/appにアップロードする場合は以下のようにパスを指定する。yarn webの場合は/staticにする
- const Gdal = await initGdalJs({ path: '/app/static'});
- 以下のようにuseWorker: falseにすると、yarn webでもyarn build:webでもコードを変更せずに動作する.ただし、gdal3.jsのコードにパッチを当てる必要がある
- initGdalJs({ path: 'static', useWorker: false });
- dist/package/gdal3.jsの相対パスを絶対パスに修正する部分を無効にする(||trueを加える)。難読化コードなのでsrc/index.jsのif (!isNode && output.substring(0, 4) !== 'http' && output[0] !== '/') output =
/${output}
;の部分を参考にした。
- geotiff.jsでpdfから変換したgeotiffを読み込む。
- webpack.config.jsに設定を追加する必要がある。
- https://qiita.com/shi-works/items/a2e68c077c801b409563
- test.ymlを作成してpush時にunit testをするように設定
- githubのsettingsのbranchesでルールセットを追加して、unit testが成功しないとmergeしないようにする
- yarn add expo@^49.0.0
- npx expo install --fix
- npx expo-doctor@latest
- 以下に従い手動で修正 https://react-native-community.github.io/upgrade-helper/?from=0.72.4&to=0.74.3
- expo用の修正 https://docs.expo.dev/bare/installing-expo-modules/#manual-installation
- firebaseの設定やfileの読み込み設定を消さないように注意。
Androidのビルドで[undefined symbol: std::__ndk1::basic_string](ld.lld: error: undefined symbol expo-module-core)となる問題
-
Android Studioでndkを一旦アンインストールして、もう一回インストールする。また、不要なバージョンのndkは削除する。おそらく別のバージョンのndkでビルドかリンクしようとしていることが問題だったぽい
-
Tools -> SDK Manager -> Languages & Frameworks -> Android SDK -> SDK Tools
-
show packages detailにチェックを入れてNDKのインストールされているチェックを外してApply。もう一回いれてApply。
-
これでyarn androidで治るのを確認。
-
以下の処理は不要だったかもしれないが、以下でキャッシュを削除すると改善することも
-
cd android
-
./gradlew --stop
-
rm -rf .gradle
-
rm -rf~/.gradle/caches
-
./gradlw clean
- https://github.com/expo/expo/issues/26846
- FOREGROUND_SERVICE_LOCATIONをAndroidManifest.xmlに追加
- 以下の対応と同じでOK。対処2はXcodeで設定した。https://qiita.com/littleossa/items/ff75b19e0ac6713941f8
- nodeが見つからないのが原因。ios/.xcode.env.localをexport NODE_BINARY=$(which node)にする。もしかすると何かのタイミングで書き変わってエラーになるのかも。
- expo-module-coreをrequireDynamic('crypto')に変更。https://github.com/expo/expo/issues/26706
- babel.config.jsを変更にともないwebpack.config.jsも以下の修正を加える。
- https://github.com/webpack/webpack/issues/11467#issuecomment-691873586
- https://github.com/expo/expo-webpack-integrations/issues/10
- react-native-webを0.19にするにあたってfirebaseをwebと分ける。そうしないとエラーになる。
Pickerの遅延処理の影響で値が変更されたようになってしまう?のかも。ModalPickerに変更して解決。選択画面もModalPickerの方が見やすいため
- トラックログがバックグラウンドの復帰時に重くなる。向きの処理が原因?
useDataEditの初期化と、データの変更ボタンで「その他」が続くPDF作成でポイントとラインの重なり順序とかラベル位置とか- iosのデバイスでmultipagePDFの読み込みが変
- 整理番号の自動入力?もしくは調査票と位置情報を紐づけるなにか(河川水辺システムのGISのような方式)
- プロジェクトを開いているときに.ecorismapを読み込みたい(デバッグモード)
- ドローツール。ライン保存。カット。
- トラック単純化
- データアップロード
- グループ化
登場人物
- 調査員A、調査員B、担当(調査員Cを兼ねる)、情報室
- 調査員 データ入力、アップロード
- Aさん
- Bさん
- 調査員 他人のデータダウンロード
- 調査員 調査終了後、データアップロード
- 担当 全員のデータダウンロード
- 速報作成
- 翌日調査
- 情報室 全てのデータダウンロード
- Privateで作成したレイヤを一旦アップロード-->メンバーアップロード-->Commonに変更してデータ追加-->ダウンロードするとメンバーはOK、管理者はだめ。Privateと被っておかしくなる??
リリース時に確認すること!
- GPS、トラックログが起動するか
- Webも問題ないか
- iOS、Androidも問題ないか
- Pro版でもビルドが通るか
使い方動画のためのアプリを選定
- 画面の録画は、Andorid付属のスクリーンレコーダーを使用
- 編集は、Microsoft Clipchamp にする。シンプルな図形とテキストを追加できるため。フォントの選択肢が2種類なのが残念。
- Cutecut は使い勝手が良いが危険性がともなうのでやめる。
- Canva他色々試すが、無料の範囲ではシンプルな図形やテキストの追加ができないためだめ。
- 原因不明だがreact nativeとかexpoのバージョンに合わせた方が良さそう。一旦、1.7.1に戻す。
- iosでビルドするときに上記エラーがでるようになった。ビルドのログをみるとgdalがx86_64用にビルドされてないwarningがでていた。実際、x86_64用にはビルドしていない。
対応は、xcodeを開いてproject->build settings->architectures->architecturesのdebugをarm64に変更する。- ↑をすると他に影響がでて、ダメだったので、gdalのビルドにx86_64を加えるように修正
- firebase functionsのnodeを20にあげる。間違って.envが新しいアカウントの方になっていてプロジェクトが読み込めなくて焦る。
- react-native-maps 1.13.2にあげる。更新方法は、過去のログ参照
- ver3.1.1だとweb版でエラーになるため4.2にアップデート。patchは3.1.1で変更したファイルをそのまま上書きして更新。4.2の変更を無視しているので、追従するのであればoffsetがマイナスでもクリップできるように修正した箇所のみ変更すべき。
- 地理院のレベル15以外のタイルをiOSでgdalwarpをしてPDFで書き出すと画像が壊れる問題があった。PNGがColor Tableになっているのが原因で、それにiOSのPdfiumがうまく対応できていないのが問題ぽい。
- ImageManipuratorをかますことで解決。(おそらくCOLOR TableのPNGをRGBAのPNGに変換してくれている)
- Pro版でreact-native-gdalwarpを統合してビルドする際に"Multiple commands produce"のエラーがでる。原因は、Firebaseを使用するためにPodfileで設定している use_frameworks! :linkage => :static
- gdalwarpで使用しているgdalとかのFrameworksでアーキテクチャとかライブラリ間でヘッダーが重複していて、それがエラーを出している。staticの設定がなければ、うまいこと処理していてエラーにならなかった。
- Firebaseを使いつつ、上記エラーを回避するためecorismapのPodfileでstatic_frameworkに'react-native-gdalwarp'を追加する。
$static_framework += [
'react-native-gdalwarp',
'react-native-maps',
'react-native-google-maps',
'Google-Maps-iOS-Utils',
'GoogleMaps',
'RNPermissions',
'Permission-LocationWhenInUse',
'Permission-Notifications',
'react-native-paste-input',
'vision-camera-code-scanner',
'VisionCamera'
]
- 変換中のLoading処理
- PDFの範囲を設定してジャンプできるように
- 複数ページのPDFを読み込めるように
- ジオ情報付きの複数ページの単一ファイルPDFはQGISでは現状書き出せない。地図帳から単一ファイルにしないで書き出して、それをjustPDFで結合すればOK
- geoPDFの書き出し。
- react-native-mapsのiOSでtileSizeを反映できないようになってたので修正
- iOSではtileSizeを小さくすると、ひとつ上のズームからタイルを取得する仕様のため、overZoomやdrawFromHighResolutionでは、画像のサイズを取得して作成している。
- Androidでは、Tile()でtileSizeに画像を調整しているので、画像からではなく、tileSizeを元に画像を作成している。
- doubleTileSizeは、Androidでは1つ上のズームレベルを使って画像サイズを2倍にして、iOSはtileSizeを半分にすることで同様の効果になる。
- 解像度をあげるためにGDAL_PDF_DPIを300を設定する。GDALAllRegisterを呼ぶ前に、CPLSetConfigOptionかsetenvで設定する。
- 出力ドライバがPNGだと、GDALCreateCopy後のadfGeoTransformの解像度が正しくない。(2倍になってて、おそらくDPIの設定が反映されない?PNGライブラリを外部のものを使えば改善する?Mac用にコンパイルしたものは問題なしなので、iOS用のビルドの問題かも?)
- 出力ドライバをJPEGにするば、解像度の問題は解決。変換時に4バンドのJPEGはCMYKを使用されるwarnigがでて、色味が若干変わるのが気になる。写真であれば問題なし?
- 複数ページのPDF、読み込み範囲を設定して範囲にジャンプできる機能があると良いかも。
- https://github.com/paulocoutinhox/pdfium-lib
- gdal用のpatchをあてる。https://github.com/rouault/pdfium_build_gdal_3_8/tree/master
- /Users/mizutani/prg/pdfium-lib/build/ios/pdfium/core/fxge/apple/fx_apple_impl.cppのconst pdfium::span& pCharPos,を二箇所かえる
- ios.pyにargs.append("use_rtti=true",ほか、androidでの設定と同じなるように追加、変更する)追加
- buildでできたlibpdfuium.aをgdalのbuild/...にコピー。includeは、androidで作ったgdal用をコピー
- https://gis.stackexchange.com/questions/434514/build-gdal-3-x-for-ios
- gdalのgdal.cmakeでtarget_link_libraries(${GDAL_LIB_TARGET_NAME} PRIVATE ${GDAL_PRIVATE_LINK_LIBRARIES} ${GDAL_EXTRA_LINK_LIBRARIES} "-framework CoreFoundation" "-framework CoreGraphics")に変更
- gdal/frmts/pdf/CMakeLists.txtの70-84行を削除
- ecorismap内で npx create-react-native-library@latest react-native-gdalwarp --reactNativeVersion 0.72.4 --local
- ios内にFrameworksを作成して、gdal.xcframeworks,proj,sqlite3をコピー
- ios内にshareをコピー
- react-native-gdalwarp.podspecに s.vendored_frameworks = "ios/Frameworks/gdal.xcframework", "ios/Frameworks/proj.xcframework", "ios/Frameworks/sqlite3.xcframework", "ios/Frameworks/pdfium.xcframework" s.resources = "ios/share/**/*" を追加して ios/pod install
- firebaseと共存させるには、追加で2024.2.29の設定も必要
- gdalを組み込むとサイズが大きすぎる?ogrとから使用しないドライバは削除する?
- iOSは未実行。これから
- wsl2で実行。Android用のビルドはlinuxでしかサポートしてない。
- git clone https://github.com/rouault/pdfium_build_gdal_3_8.git
- build_linux.shを変更
- INSTALL_DIR=/tmp/install に変更
- echo "target_os = [ 'android' ]" >> .gclient を挿入
- args_release_linux.gnを修正
- target_os = "android" に変更
- target_cpu = "arm64" に変更
- use_system_libjepg,png,lcms2,openjpeg2をすべてfalseに変更
- ./build_linux.sh を実行
- git clone https://github.com/OSGeo/gdal.git
- .github/workflows/android_cmake/start.sh を変更
- apt-get installはコメントアウト。sudoで手動でインストールしておく。 swig, ant, openjdk-17-jdkを追加でインストール
- export WORK_DIR = $PWD/workを追加
- cmakeを3.28.3に変更。古いままだとjniでエラーになる
- android-ndk-r26bに変更
- proj ビルド後のcdを ../../../ に変更
- cmakeの設定に以下を追加
-DBUILD_JAVA_BINDINGS=ON
-DGDAL_JAVA_INSTALL_DIR=/tmp/install/java
-DGDAL_JAVA_JNI_INSTALL_DIR=/tmp/install/lib/jni
-DBUILD_APPS=OFF
-DBUILD_PYTHON_BINDINGS=OFF
-DBUILD_TESTING=OFF -DGDAL_USE_PDFIUM=ON
- gdal/frmts/pdf/CMakeLists.txtの70-84行を削除
- mkdir work
- ./.github/workflows/android_cmake/start.sh で実行
- /tmp/install以下のファイルを使用する。
- react-native-pdf-to-imageをgdal対応に改造-->その後、modules/react-native-gdalwarpに変更
- node_modules/react-native-pdf-to-image/android にlibsを作成
- libs直下にgdal-3.9.0.jarを入れる
- libs直下にarm64-v8aフォルダを作成
- arm64-v8aに作成したlibgdalalljni.so,libgdal.so,libproj.so,libsqlite3.so,libpdfium.aを入れる
- build.gradleを修正
- 追加 sourceSets {main {jniLibs.srcDir 'libs'}}
- dependenciesに追加 implementation fileTree(dir: 'libs/', include: ['.aar', '.jar'], exclude: [])
- android/src/main にassetsフォルダを追加
- shareのgdaとprojフォルダをassetsにコピー
- PdfToImageModule.javaのコードの中でassetsの中身をコピーするコードを追加
AssetManager assetManager = reactContext.getAssets(); String[] files = assetManager.list("proj"); File projDir = new File(reactContext.getFilesDir(), "proj"); if (!projDir.exists()) { projDir.mkdirs(); } for (String filename : files) { Log.d(TAG, "PdfToImageModule: copy_proj_files: filename: " + filename); InputStream is = assetManager.open("proj/" + filename); OutputStream os = new FileOutputStream(new File(projDir, filename)); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } is.close(); os.close(); } gdal.SetConfigOption("PROJ_LIB", projDir.getAbsolutePath()); Log.d( TAG, "PdfToImageModule: copy_proj_files: PROJ_LIB: " + projDir.getAbsolutePath() );
- https://gdal.org/development/building_from_source.html
- https://chromium.googlesource.com/libyuv/libyuv/+/HEAD/docs/getting_started.md
- Android、iOSともにcrop範囲が負だとエラーになるので修正してパッチを作成。
- webメルカトルのPDFを、四隅の座標を与えれば、タイルに読み込める実装はできた。
- GeoPDFから座標を読み込む、投影変換は挫折。
- pdf-parse
- geoTiff.js
- loam,gdal.js
- gdal3.js
- fsとかpathとかnode前提のコードがだめ。
- wasmは、hermesでだめ。対処中?
- gdalをiosやandroidでbuildする方法は、公式にあるっぽいけど、react native化するには先が長すぎる。
- 矢印はラインで実装。戻るでは、矢印だけ消える。
- スタンプは1点だけのラインの場合にMarkerのSVGで実装。
- 猛禽での利用にどうすべきか?
- MapMemoの現場での共有
- MapMemoの社内での共有
- PDFの書き出し
- スタンプをポイントにするか?ライン1点のままか。
- ラインのノードをMarkerにしてスタンプ表示するか?
- react-native-pdf-to-imageでpdfを画像に変換は可
- 実用には投影変換が必須だが、react nativeで使えるgdalは現時点ではないので諦める。
- geoTIFF.jsは投影変換はできないがgeotiff-geokeys-to-proj4を組み合わせればできそう。でも処理が重そうなので実用的でないかも。
- 紙用のレイアウトを整えたPDFを読み込めれば、ラベルズレる問題は解消するか。
- ローカルのPMTilesが読み込めると良い??
- バッテリー消費の問題のためGPSの精度の設定を追加。実地テストできていないので、intervalなどの微調整が必要
- Android Studioでのバッテリー消費の個別確認は、Pixel6以降で対応らしい。 https://developer.android.com/studio/profile/power-profiler?hl=ja&authuser=3
- データPDFのテーブルのヘッダーをページごとに出力するために使用するが、iOSではバグ?のためページごとにヘッダーが出力されない。
- ベクトルタイルはPDF出力に対応していない。
- Expo Printを使用して実装
- ウェブメルカトルのためスケールは目安。スケールは、図面中心の緯度に応じてCosθで長さを調整。
- QGISでは、調整なしでY軸方向でスケールを決定しているため、freehandRasterGeoReferencerで合わせる際はスケールの値は、pdfに記載されているものとは異なる。(プログラム中のscaleForWebMercatorが正解)解像度は150を指定。
- QGISで直接読み込めるようにVRTも出力。gdal_translateでgcpを指定してvrtを作成しても良い。
- composition.xmlでGeoPDFも作成できるが、現時点ではvrtを利用のためコメントアウト
- iPadでポイントを入力する調査に対応するため、pickerを変更、横向きのレイアウト変更、ApplePencilに最適化、などを行う。
- datejsでenのロケールだとLフォーマットを解釈できずにnullになるバグがあったので修正。
- MapViewのscrollEnabledをtrue-->falseは正常だが、false-->trueは反映されないバグ? panResponderの中での変更だからかもしれない。現状どうしようもないので放置。
- bottomSheetで導入したgesture-handlerのバグが原因。gesture-handlerをバージョンアップしたら解決
- self.tileSizeをCGSizeMakeで参照しているのが原因。値に変更して解決。なぜかは不明。
- UIGraphicsBeginImageContextWithOptions(CGSizeMake(256, 256), NO, 1);の0-->1に変更。0だとRetinaディスプレイに合わせてスケーリングされてしまってサイズが大きくなる原因となっていた。
- ベクタータイルもtileSizeを256にした。メモリを抑え、フォントサイズを大きくするため。ラインは荒くなったので、512に戻した方が良いかも
- 描画中はlineCapを設定で解決
- 保存したlineは、始点や終点のハネの削除を試みたが、いまいちなので結局何もしない。
- Map SDK for google のlineCapは未対応。
- useSelectorでshallowEqualを指定することでobjectが変更になったときだけ更新するように修正
- point,line,polygonのデータをfilterする処理は、reselectでmemo化したものをuseSelectに渡すように修正
- point,line,polygonの描画で、selectedRecordが更新されたときに、関係ないタイプなのに再レンダリングされないようにReact.memoにカスタムの比較関数を追加
- android版でstyleを保存するときにディレクトリがないためエラーになるバグ修正
- MapMemoでラインに不要なレンダルングが発生していたのを修正
- MapMemoで連続して書くと保存処理で中断してしまうので、timerを追加して一定時間書かなければ保存するように修正
- DataEditでdispatchでSettingsを更新すると地物の再描画が走り、重くなる問題あり。WIP
- 0.3.3をリリース
- ベクトルタイル、MapMemo、ボトムシート、最新のReact Nativeに対応
- 次期リリースの構想。GeoPDFの読み込み対応など
- アプリをkillした際のTrackingの挙動を修正。AndroidはForground ServiceとしてkillしてもTrackingを取得可能。iOSはBackground Serviceを有効にすることで可能のはずだが、現時点ではStopしてしまう。バグ?が治るまでそのまま放置。
- MapMemoが重くなるのでタイル化したgeojsonを保存して、表示領域のタイルだけを読み込むように実装テストをした。インポート、エクスポート、全削除、表示表示の切り替えが未実装。動作は悪くはないが必要か不明。Web版ではFileSystemの関係で使用できない。
- 現在のMapMemoが重かったのは、書いている時にLineの再レンダリングが走っていたため。React.memoで囲って不要なonPressを削除することで修正。
- MapMemoのタイル化のようにLineも表示範囲を限定することで軽くなるか試したが、そんなに変わらないので、すでに内部で処理されている可能性がある。
- ひとまず再レンダリングの修正で軽くなったので、MapMemoをタイルに移行するかは様子見
- yarn add expo@^49.0.0
- npx expo install --fix
- npx expo-doctor@latest
- 以下に従い手動で修正 https://react-native-community.github.io/upgrade-helper/?from=0.71.8&to=0.72.4
- expo用の修正 https://docs.expo.dev/bare/installing-expo-modules/#manual-installation
- firebaseの設定やfileの読み込み設定を消さないように注意。
- バージョンアップしてこれまでのパッチがerrorになる場合は以下の手順
- yarn add [email protected] でpatchが適用されない状態でインストール
- インストールされたreact-native-mapsをコピーして別のところに退避(ecorismapの中にいれてはいけない。node_moduleが混乱するため)
- git apply --reject --ignore-whitespace patches/react-native-maps+1.3.1.patch とかで以前のpatchをあてる
- find ./ -name "*.rej" でエラーになったファイルを確認して手動で修正。
- 自分が変更した部分がない場合は、退避したファイルをコピーすると楽。
- MapTileProvider.javaは丸々入れ替えるので、patchesにあるものをコピーする。
- 基本これに従う。https://gist.github.com/ryanbaumann/e5c7d76f6eeb8598e66c5785b677726e
- sudo apt-get install -y g++-5 はエラーになるので無視
- export CXX=g++ に変更
- あと同じ
- AWS S3にアップする
- ファイルを選択してアクション--> 署名付きURLで共有する
- バケットのアクセス許可 --> Cross-Origin Resource Sharing (CORS)を編集
gdal_createoutput.pdf-co COMPOSITION_FILE=input.xml
https://gdal.org/drivers/raster/pdf.html http://www.rtwilson.com/downloads/StaticToInteractivePDFs_RWilson_FOSS4G21.pdf
以下の方法でメモリの状況を確かめると、ベクトルタイルのレンダリングでメモリリークが起きている可能性がある。Simulatorだと大丈夫に見える。未解決 https://qiita.com/mashunzhe/items/8073d32d7aee28578cab
npx npm-license-crawler --dependencies --production --onlyDirectDependencies --omitVersion --json ./src/licenses.json
ios/ecorismap.xcodeproj/project.pbxproj のbuildphasesの[EXPO]が二重になっていたのが原因。git mergeでコンフリクトした際に間違えたのかもしれない。
データが0かチェックすることで解決
https://github.com/facebook/react-native/issues/39421
BottomSheetの高さをSnapPointと同じにしないと、内部のコンテンツのflexが効かないので以下の方法を適用
https://github.com/gorhom/react-native-bottom-sheet/issues/1411#issuecomment-1645491578
react-native-gesture-handlerからインポートすることで解決
https://gorhom.github.io/react-native-bottom-sheet/troubleshooting/
[email protected]. だとfirebase関連でyarn webでエラーになるので、0.18.に戻す。まだissueはあがってない。
以下を参照 https://blog.expo.dev/expo-sdk-49-c6d398cdf740
tippecanoe -o kitakami.pmtiles -L kuiL:キロ杭Line.geojson -L kuiP:キロ杭Point.geojson -pf -pk -r1 -d1 -Z 0 -z 20 --force
tippecanoe -o kitakami_h30.pmtiles -L kitakami_h30:植生図.geojson -pf -pk -Z 5 -z 20 --force
[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET", "HEAD" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ]
- brew install protobuf
- ここからvector_tile.protoを取ってくる。https://github.com/mapbox/vector-tile-spec/tree/master/2.1
- protoc --objc_out=. vector_tile.proto
- 作成されたVectorTile.pbobjc.mとVectorTile.pbobjc.hをnode_modules/react-native-maps/ios/AirGoogleMapsの中に入れる
- node_modules/react-native-maps/react-native-google-maps.podspecに以下を追加(ポイント!)
s.dependency 'Protobuf' s.subspec 'NonARCFiles' do |ss| ss.source_files = "ios/AirGoogleMaps/VectorTile.pbobjc.m" ss.compiler_flags = '-fno-objc-arc' end
- Pod install
- yarn ios
- protoc --java_out=./ vector_tile.proto
- 作成されたvector_tileフォルダをnode_modules/react-native-maps/android/src/...(略)に入れる
- react-native-mapsのbuild.gradleにimplementation 'com.google.protobuf:protobuf-java:3.24.0'を追加
その1だとfirebase関連のProtobufと衝突してduplicateエラーとなるためバージョンを合わせる。
- ここから3.21.11用のprotocを取得 https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.21.11/
- vector_tile.protoの先頭にsyntax = "proto2";を追加
- protoc --java_out=lite:./ vector_tile.proto
- 作成されたvector_tileフォルダをnode_modules/react-native-maps/android/src/...(略)に入れる
- react-native-mapsのbuild.gradleにimplementation 'com.google.protobuf:protobuf-javalite:3.21.11'を追加
expo-image-pickerのバグのようなので、こちらのパッチをあてて修正
https://github.com/expo/expo/issues/22122
expo-media-libraryも同様なバグなので、こちらのパッチをあてて修正
https://github.com/expo/expo/issues/20496
expo48?49?では修正済みのようなので、expoをアップグレードした際にはパッチは不要のはず。
iOSのみ重なったポイントを選択すると黄色と赤で点滅する問題があった。選択したポイントのzIndexを最上位に指定することで治った。
FlatListでタイミングによってitemがinitialNumToRenderのデフォルト値である10個だけしか表示されない問題があった。disableVirtualization={true}を指定することで解決したが、このオプションは推奨されないていない。react navigationの表示タイミングの問題を疑ってuseFocusEffectなどを設定してみたが解決せず。VirtualizedListの_updateCellsToRenderでのdisableVirtualization={false}の場合の分岐で問題があるようだがそれ以上は原因を突き止められず。react native 0.72でVirtualizedListのコードが大きく変更になっているようなので、それで解決しているかもしれない。
https://github.com/facebook/react-native/blob/v0.70.12/Libraries/Lists/VirtualizedList.js#L1759
iOSのみLineがあると背景地図を切り替えても表示が更新されない問題があった。LineのコンポーネントをPolygonと同じようにしたら治った。PolylineをViewで囲っていたのが原因だった可能性がある。もしくは、コンポーネントに抽出したのが良かったのかもしれない。
iOSのみ大量のデータがある場合のテーブル表示のパフォーマンスに問題があった。原因はiOSのみPickerでonValueChangeが複数回呼び出されるバグ?があったため。値が変更しなければ呼び出さない処理を追加することで対処。以下を参考にした。
https://github.com/lawnstarter/react-native-picker-select/issues/112
AsyncStorageのpersist:rootのキーに保存されるサイズがトータルで2MBを超えると問題が発生するので、以下のスレッド中にあるonCreateに容量変更を設定する方法で解決
https://github.com/rt2zz/redux-persist/issues/284
さらにデフォルトで総容量の制限が6MBなので、それを以下を参考に100MBに変更
https://react-native-async-storage.github.io/async-storage/docs/limits
ただし、18MBぐらいを超えると重くて動かないので、起動時に総容量をチェックして15MBを超えたらAlertを出すようにする。
おそらくAsyncStorageの制限の問題(android)
https://react-native-async-storage.github.io/async-storage/docs/limits
https://github.com/react-native-async-storage/async-storage/
これのissues/847の設定をしてみた。next storageを有効にすると解決する?
トラックログの保存処理で2MBを超えたら保存しないように変更してみる。
MarkerのtracksViewChangesをtrueにしておくと表示の切り替えやrecordの更新で重くなる問題がある。
tracksViewChangesを常時falseにすると選択時に色が更新されないので、選択されたものだけtrueに変更して、それ以外をfalseにするように変更。
これで一応、重くなる問題が解決。色やラベルの変更も問題ないように見えるが、もしかすると不具合があるかもしれないので要注意。
duplicateのエラーメッセージがでる。エラーメッセージを読んで重複のファイルを正しく削除することで解決。
原因は、android studioでビルドできないエラーの解決のために以下のnpx react-native bundleのコマンドを実行したためと思われる。
マニュアル通りだが、ダッシュボードに反映できないトラブル。
firebaseのプラグインの指定の仕方が違ってた?ので修正。
もしくはtmizu23のアプリが登録されていたので削除。
上記のどちらかの対応で治った。
https://firebase.google.com/docs/android/setup?hl=ja
https://firebase.google.com/docs/perf-mon/get-started-android?authuser=0&hl=ja
Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
というエラーがでる。素のプロジェクトでも同様なのでexpoのバグと思われる。
以下を実行で解決
npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
以下を参考にreact-nativeのパッチを作成。修正されたら削除する。
https://github.com/facebook/react-native/issues/27483
useKeybordを導入して、keybordを表示中は保存できないようにして対応
https://github.com/react-native-community/hooks