需要 GeoIP

IP地理位置使用
IP地理定位本质上是不精确的。位置通常靠近人口中心。GeoIP数据库提供的任何位置均不得用于识别特定地址或家庭。

使用Accuracy Radius作为我们为IP地址返回的纬度和经度坐标的地理位置精度的指示。IP地址的实际位置可能在此半径以及经纬度坐标定义的区域内。

下载链接

pom

<!-- 根据ip获取位置 --><dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>2.8.1</version></dependency>

测试和工具

package com.sh.util;import java.io.File;
import java.io.IOException;
import java.net.InetAddress;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.aliyuncs.utils.StringUtils;
import com.maxmind.geoip2.DatabaseReader;/*** * @description: 获取客户端IP地址* @author: paulandcode* @email: paulandcode@gmail.com* @since: 2018年9月17日 下午3:44:51*/
public class IPUtils {private static Logger logger = LoggerFactory.getLogger(IPUtils.class);/*** 获取客户端IP地址* * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址* 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址*/public static String getIP(HttpServletRequest request) {String ip = null;try {ip = request.getHeader("x-forwarded-for");if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}} catch (Exception e) {logger.error("IPUtils ERROR ", e);}return ip;}/*** * @description: 获得国家 * @param reader* @param ip* @return* @throws Exception*/public static String getCountry(DatabaseReader reader, String ip) throws Exception {return reader.city(InetAddress.getByName(ip)).getCountry().getNames().get("zh-CN");}/*** * @description: 获得省份 * @param reader* @param ip* @return* @throws Exception*/public static String getProvince(DatabaseReader reader, String ip) throws Exception {return reader.city(InetAddress.getByName(ip)).getMostSpecificSubdivision().getNames().get("zh-CN");}/*** * @description: 获得城市 * @param reader* @param ip* @return* @throws Exception*/public static String getCity(DatabaseReader reader, String ip) throws Exception {return reader.city(InetAddress.getByName(ip)).getCity().getNames().get("zh-CN");}/*** * @description: 获得经度 * @param reader* @param ip* @return* @throws Exception*/public static Double getLongitude(DatabaseReader reader, String ip) throws Exception {return reader.city(InetAddress.getByName(ip)).getLocation().getLongitude();}/*** * @description: 获得纬度* @param reader* @param ip* @return* @throws Exception*/public static Double getLatitude(DatabaseReader reader, String ip) throws Exception {return reader.city(InetAddress.getByName(ip)).getLocation().getLatitude();}public static void main(String[] args) throws Exception {// String path = req.getSession().getServletContext().getRealPath("/WEB-INF/classes/GeoLite2-City.mmdb");String path = "E:/GeoLite2-City.mmdb";// 创建 GeoLite2 数据库File database = new File(path);// 读取数据库内容DatabaseReader reader = new DatabaseReader.Builder(database).build();// 访问IPString ip = "180.109.64.94";String site = IPUtils.getCountry(reader, ip) + "-" + IPUtils.getProvince(reader, ip) + "-" + IPUtils.getCity(reader, ip)+ "-" + IPUtils.getLongitude(reader, ip)+ "-" + IPUtils.getLatitude(reader, ip);System.out.println(site);}
}

java根据ip获取经纬度城市地址相关推荐

  1. Java 通过 ip 获取所属城市信息

    文章目录 1 摘要 2 核心 Maven 依赖 3 离线数据 db 保存 4 核心代码 5 测试 6 推荐参考资料 1 摘要 在实际项目中可能会用到统计用户地理位置的需求,这时可以通过客户端的 ip ...

  2. java通过ip获取网卡MAC地址

    参考:http://www.jb51.net/article/73882.htm /** * 获取MAC地址 * @author * 2011-12 */ public static class Ge ...

  3. java 根据ip获取mac地址,java服务器端根据ip获取客户端mac地址

    java服务器端根据ip获取客户端mac地址 2014/8/20 22:01:29  475900947  程序员俱乐部  我要评论(1) 摘要://判断系统publicStringcheckSys( ...

  4. java根据IP获取当前区域天气信息

    java根据IP获取当前区域天气信息 大致思路是客户端发起请求,我们首先根据请求获取到外网IP,然后再根据外网IP获取到用户所在城市,最后根据城市获取到天气信息 获取外网IP 万网获取外网IP地址: ...

  5. C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市

    接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsCC9UTk ...

  6. 百度地图AK申请注意+百度地图API生成热力图+调用百度地图API自动获取经纬度和地址

    文章目录 一.百度地图AK密钥申请 二.调用百度地图API生成热力图 三.调用百度地图API自动获取经纬度和地址 一.百度地图AK密钥申请 点击百度地图API控制台,输入登录账户,即可进入,若账户未完 ...

  7. JAVA通过ip获取所在地址与经纬度

    ip,经纬度,taobao和百度api获取地址的方法 import java.io.BufferedReader; import java.io.DataOutputStream; import ja ...

  8. 根据IP获取具体城市名称及经纬度坐标

    用到两款工具, geoip-api 这个可以根据IP获取城市以及经纬度 但是获取的城市是拼音不是汉字 导致山西和陕西的拼音相同 无法分辨,所以引入第二款工具ip2region 可以根据ip获取到具体的 ...

  9. java 根据ip获取mac地址_利用java如何根据IP获取mac地址

    利用java如何根据IP获取mac地址 发布时间:2020-11-25 15:49:42 来源:亿速云 阅读:74 作者:Leah 利用java如何根据IP获取mac地址?针对这个问题,这篇文章详细介 ...

  10. java获取经纬度和地址等工具类

    此工具类是, 模拟请求去调用百度地图api,来根据输入的地址获取相关信息.或者根据经纬度确定地址等. 注意看下面代码的注解,注解写的很清楚. 注意:需要自行申请百度key,在代码相应位置替换,参考官方 ...

最新文章

  1. 《中国人工智能ABC人才发展报告》发布,算法和应用类人才短缺
  2. 机器学习笔记:线性规划,梯度下降
  3. vsftp配置日志及其启用本地时间
  4. 用ASP.NETCore构建可检测的高可用服务
  5. 无根树的同构:Hash最小表示法(bzoj 4337: BJOI2015 树的同构)
  6. vuex state使用
  7. Android模拟器adb命令介绍
  8. IT人 不要一辈子靠技术生存(转
  9. 会话技术——Cookie和Session
  10. PMP搞心态,解读最新『三大领域』考试内容:(附上第7版教材)
  11. hive plsql使用示例
  12. R语言编写简单的函数
  13. 多次请求后tomcat网页假死
  14. 用html做祝福语朋友,朋友关怀祝福语(把祝福语化作露带给你)
  15. 庄子《天下》:道与术,取与予,利与害,方与圆,常与变,生与死
  16. 中文和英文论文哪个比较容易发表
  17. 文档级关系抽取:A Densely Connected Criss-Cross Attention Network for Document-level Relation Extraction
  18. MySQL如何同时删除主外键关联的两张表中的数据
  19. 移动端微信里打开H5页面,页面字体放大
  20. 使用libjpeg进行图片压缩

热门文章

  1. 机器人开发--OS系统介绍
  2. C语言实现数据结构——单链表
  3. java插件-IE浏览器配置方法
  4. 直播视频网站源码,延迟的几种方式
  5. python 输出语句
  6. 罗技g402鼠标宏设置教程
  7. C语言练习题~分数求和
  8. java怎么反编译_Java入门教程-Java的反编译
  9. 火山安卓自定义组件封装源码讲解
  10. java订餐系统简单版