Rumah > pangkalan data > tutorial mysql > Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata

Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata

王林
Lepaskan: 2023-06-03 16:19:04
ke hadapan
1601 orang telah melayarinya

    Kata Pengantar

    Semasa mengerjakan projek baru-baru ini, saya menghadapi keperluan seperti itu,

    Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata

    Klik pada pakej kad untuk menggunakan kad dan kupon Anda perlu memaparkan kedai berdekatan tempat kad dan kupon digunakan

    Idea

    Reka bentuk jadual alamat pangkalan data

      .
    • Umum Jadual alamat jalan serantau tz_sys_area

    字段名称 类型 备注
    area_id bigint 区域ID
    area_name varchar(32) 区域名称
    parent_id bigint 所属父区域ID
    level int 层级
    type char 区域类型0国家1省份直辖市2地市3区县
    area_name varchar(32) 区域名称
    parent_id bigint 所属父区域ID
    level int 层级

    Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata

    juga boleh diubah suai di latar belakang

    Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata

    IV Sumber data alamat wilayah peringkat ialah fail json yang saya temui dalam talian dan kemudian menuangkannya ke dalam pangkalan data mengikut format

    • jadual alamat kedai tz_address

    Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata

    Realisasi keperluan

    • Di sini anda perlu menggunakan longitud dan latitud untuk mengira jarak

    Anda perlu menggunakan geografi antara muka API Amap/ Geokod terbalik untuk mendapatkan latitud dan longitud alamat dan menyimpannya

     /**
         * 地理/逆地理编码
         * https://lbs.amap.com/api/webservice/guide/api/georegeo
         *
         * @return
         */
        public String addressToLongitude(String address) {
            String longitude = "";
            String urlString = "?key={key}&address={address}&output=JSON";
            String response = restTemplate.getForObject(ApiAction.API_GEOREGO_TEST + urlString, String.class, apiKey, address);
            if (StrUtil.isEmpty(response)) {
                return null;
            }
            JSONObject jsonObject = JSON.parseObject(response);
            String code = jsonObject.getString("infocode");
            if (code.equals("10000")) {
                JSONArray jsonArray = jsonObject.getJSONArray("geocodes");
                JSONObject jsonObject1 = (JSONObject) jsonArray.get(0);
                longitude = jsonObject1.get("location").toString();
            } else {
                return null;
            }
            return longitude;
        }
    Salin selepas log masuk

    Gunakan

     private Address setlngAndLat(Address address) {
            String addr = address.getProvince() + address.getCity() + address.getArea() + address.getAddr();
            String longitude = gaoDeService.addressToLongitude(addr);
            if (StrUtil.isBlank(longitude)) {
                throw new BusinessException("地址经纬度识别识别");
            }
            String lat = longitude.split(",")[1];
            String lng = longitude.split(",")[0];
    
            address.setLat(lat);
            address.setLng(lng);
            return address;
        }
    Salin selepas log masuk
    • MySQL untuk mengira jarak alamat dari lokasi semasa berdasarkan latitud dan longitud

     SELECT
                   (
                           6371 * acos(
                                       cos(radians(#{lat}))
                                       * cos(radians(lat))
                                       * cos(radians(lng) - radians(#{lng}))
                                   + sin(radians(#{lat}))
                                           * sin(radians(lat))
                           )
                       ) AS distance
            FROM tz_user_addr where addr_id=#{storeAddrId}
    Salin selepas log masuk

    Atas ialah kandungan terperinci Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan