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

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

王林
王林ke hadapan
2023-06-03 16:19:041559semak imbas

    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;
        }

    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;
        }
    • 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}

    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!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam