Rumah > Artikel > pangkalan data > Gunakan Mysql untuk mengira alamat longitud, latitud, jarak dan lokasi masa nyata
Semasa mengerjakan projek baru-baru ini, saya menghadapi keperluan seperti itu,
Klik pada pakej kad untuk menggunakan kad dan kupon Anda perlu memaparkan kedai berdekatan tempat kad dan kupon digunakan
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 | 层级 |
juga boleh diubah suai di latar belakang
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
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!