>  기사  >  데이터 베이스  >  Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.

Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.

王林
王林앞으로
2023-06-03 16:19:041575검색

    머리말

    최근에 프로젝트를 진행하다가 이런 필요성을 느꼈습니다.

    Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.

    쿠폰을 사용하려면 카드 패키지를 클릭하고, 쿠폰을 사용하는 주변 매장을 표시해야 합니다.

    ideas

    데이터베이스 주소 테이블 디자인

    • 범용 지역 주소 테이블 tz_sys_area

    필드 이름 type Remarks
    area_id bigint 지역 ID
    area_name varchar (32) 지역 이름
    parent_id bigint 상위 지역 ID
    level int level
    type char 지역 유형 0 국가 1 도 자치단체 2 도, 시, 군 및 군
    area_name varchar(32) area name
    parent_id bigint 상위 지역 ID
    level int 레벨

    Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.

    배경도 수정 가능

    Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.

    4차 지역 주소 데이터의 출처는 제가 온라인에서 찾은 json 파일이고, 포맷에 맞춰 데이터베이스에 쏟아 부었습니다

    • 스토어 주소 테이블 tz_address

    Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.

    요구사항 여기서

    • 를 구현하려면 경도와 위도를 사용해야 합니다.

    주소 위도를 얻으려면 Amap API 인터페이스 지리/역 지오코딩을 사용해야 합니다. 경도를 입력하고 저장하세요

     /**
         * 地理/逆地理编码
         * 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;
        }

     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을 사용하여 경도와 위도를 기준으로 주소 거리를 계산하세요 Location

     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}

    위 내용은 Mysql을 사용하여 주소 경도, 위도, 거리 및 실시간 위치를 계산합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제