From 093bc6e3275ce89b72c5fe7dd9d440fa669c3023 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Sat, 20 Aug 2022 19:37:08 +0800 Subject: [PATCH] Add reverse geocoder --- app/assets/cities.sqlite | Bin 0 -> 10829824 bytes app/lib/mobile/db_util.dart | 28 +++++- app/lib/reverse_geocoder.dart | 172 ++++++++++++++++++++++++++++++++++ app/pubspec.lock | 9 +- app/pubspec.yaml | 2 + 5 files changed, 208 insertions(+), 3 deletions(-) create mode 100644 app/assets/cities.sqlite create mode 100644 app/lib/reverse_geocoder.dart diff --git a/app/assets/cities.sqlite b/app/assets/cities.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..1e249ed2ff81f4cce0a7f6892f341968a5679b19 GIT binary patch literal 10829824 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