Maison > Article > base de données > Utilisez MySQL pour calculer la longitude, la latitude, la distance et la localisation en temps réel de l'adresse
Lorsque je travaillais sur un projet récemment, j'ai rencontré un besoin comme celui-ci,
Cliquez sur le paquet de cartes pour utiliser les coupons, et vous devez afficher les magasins à proximité où les coupons sont utilisés,
Table universelle des adresses postales régionales tz_sys_area
Nom du champ | type | Remarques |
---|---|---|
sont a_id | bigint | identifiant de zone |
area_name | varchar (32) | Region name |
parent_id | bigint | L'ID de la région parent |
level | int | level |
type | char | Région Type 0 Pays 1 Province Municipalité 2 Préfecture, ville, district et comté |
area_name | varchar(32) | area name |
parent_id | bigint | parent Area ID |
level | int | Niveaux |
L'arrière-plan peut également être modifié
La source des données d'adresse régionale de quatrième niveau est le fichier json que j'ai trouvé en ligne puis versé dans la base de données selon le format
Table d'adresses du magasin tz_address
ici, vous devez utiliser la longitude et la latitude
Vous devez utiliser l'interface API Amap géographie/géocodage inversé pour obtenir la latitude de l'adresse et la longitude et enregistrez-la
/** * 地理/逆地理编码 * 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; }
Utilisez
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 pour calculer la distance de l'adresse actuelle en fonction de la longitude et de la latitude Emplacement
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}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!