利用GeoLite2-City.mmdb开源库将IP转换成经纬度—java项目小Demo

利用GeoLite2-City.mmdb开源库将IP转换成经纬度

开源库下载地址
https://dev.maxmind.com/geoip/geoip2/geolite2/
GeoLite2数据库是免费的IP地理定位数据库,但是不太准确,通过IP转换成的经纬度与真实地址相比较还有有一定偏差,大家看看官网,根据自己需求选择。
本人小Demo需求要做一个热力图,数据只有IP,需要一个工具类将IP转成经纬度

maven项目里面,我临时将放在了src/main/resources(库文件还是比较大的,根据需求选择存放位置,这只是一个Demo)
工具类如下:

public final class IpConvertUtil {
	private static org.apache.log4j.Logger log = org.apache.log4j.LogManager.getLogger(IpConvertUtil.class);
	//public static final String url = "/home/admin/GeoLite2-City.mmdb";

	public static CityResponse coordinateTransformation(String ip) {
		DatabaseReader reader = null;
		CityResponse response = null;
		try {
			// 创建 GeoLite2 数据库(如果路径中包含中文,路径名会被转码)
			String url = IpConvertUtil.class.getClassLoader().getResource("GeoLite2-City.mmdb").getPath();
			//解码
			String decodeStr = URLDecoder.decode(url, "utf-8");
			File database = new File(decodeStr);
			// 读取数据库内容   
			reader = new DatabaseReader.Builder(database).build();
			InetAddress ipAddress = InetAddress.getByName(ip);
			// 获取查询结果      
			response = reader.city(ipAddress);
		} catch (Exception e) {
			log.error("ip:" + ip + "转换经纬度失败!", e);

		} finally {
			if (reader != null) {
				try {
					reader.close();
					return response;
				} catch (IOException e) {
					log.error("ip:" + ip + "转换经纬度失败,关闭失败!", e);
				}
			}

		}
		return response;
	}

}

如果自己路径名中有中文的话,一定不要忘记解码!
通过返回的CityResponse对象里面可以获取到经纬度以及其他的信息(自己可以查下)
测试类:

@Test
	@Rollback(value = false)
	public void IPConvert() {
		String ip = "";
		CityResponse response = IpConvertUtil.coordinateTransformation(ip);
		//经度
		String lng = response.getLocation().getLongitude().toString();
		//纬度
		String lat = response.getLocation().getLatitude().toString();
		System.out.println("lng:" + lng);
		System.out.println("lat:" + lat);
	}

结果肯定跟实际情况有一定的出入,慎重使用!
希望能帮到大家。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: geolite2-city.mmdb是一个数据文件,用于通过IP地址获取地理位置信息的JavaGeoLite2-City.mmdb是由MaxMind开发的一个IP地理位置。它基于IP地址段与地理位置之间的映射关系,提供了一个精确的地理位置数据Java是一种通用的面向对象的编程语言,也是一种非常流行的编程语言之一。Java有许多用于处理文件和数据,包括用于读取和解析数据文件的工具。 geolite2-city.mmdb java是一个特定的Java,它可以与GeoLite2-City.mmdb文件一起使用,以便在Java应用程序中方便地使用地理位置信息。这个允许开发人员根据IP地址检索地理位置信息,例如国家、城市、邮政编码、经纬度等。 通过使用geolite2-city.mmdb java,开发人员可以轻松地实现IP地址到地理位置的映射功能。它可以帮助开发人员实现一些常见的功能,比如根据用户IP地址显示用户所在地区的特定内容,或者根据用户地理位置来提供定制化的服务。 总之,geolite2-city.mmdb java是一个用于处理GeoLite2-City地理位置数据文件的Java,它可以帮助开发人员在Java应用程序中实现方便的地理位置信息处理功能。 ### 回答2: geolite2-city.mmdb是一个用于Java编程语言的,用于将IP地址映射到对应的城市信息。这个在处理大量的IP地址时非常有用,它可以从IP地址中提取出国家、地区、城市、经纬度等信息,帮助开发人员进行定位和地理信息相关的应用开发。 在Java中使用geolite2-city.mmdb非常简单。首先,我们需要将文件导入到项目中,通常是把它放在项目的资源文件夹中。然后,我们可以通过以下几个步骤来使用这个: 1. 创建一个DatabaseReader对象:这个对象是的核心类,用于读取和查询IP地址对应的城市信息。 ```java File database = new File("path/to/geolite2-city.mmdb"); DatabaseReader reader = new DatabaseReader.Builder(database).build(); ``` 2. 查询IP地址对应的城市信息:可以通过调用DatabaseReader对象的`city()`方法来查询。 ```java InetAddress ipAddress = InetAddress.getByName("192.168.0.1"); CityResponse response = reader.city(ipAddress); ``` 3. 获取城市信息:可以从CityResponse对象中获取城市、地区、国家、经纬度等信息。 ```java Country country = response.getCountry(); Subdivision subdivision = response.getMostSpecificSubdivision(); City city = response.getCity(); Location location = response.getLocation(); String countryName = country.getName(); String countryCode = country.getIsoCode(); String cityName = city.getName(); double latitude = location.getLatitude(); double longitude = location.getLongitude(); ``` 这样,我们就可以在Java程序中使用geolite2-city.mmdb来获取IP地址对应的城市信息了。这对于各种需要根据地理位置进行业务逻辑的应用程序非常有用,比如根据用户IP地址显示对应的语言、区域设置、增强安全验证等。 ### 回答3: GeoLite2-City.mmdb是一个由MaxMind提供的免费地理位置数据,它用于将IP地址与对应的地理位置信息进行匹配。它采用了MMDB(MaxMind DB)文件格式,这是一种用于高性能IP地址查找的数据格式。 在Java中使用GeoLite2-City.mmdb文件,我们可以利用MaxMind提供的Java API来实现IP地址与地理位置的查询。首先,我们需要将.mmdb文件加载到我们的Java应用程序中。可以使用MaxMind提供的Java API的`DatabaseReader.Builder`类来加载.mmdb文件,然后使用其`build()`方法来创建一个`DatabaseReader`对象。 一旦我们有了`DatabaseReader`对象,就可以使用它的`get()`方法来查询特定IP地址的地理位置信息。这个方法接受一个`InetAddress`对象作为参数,并返回一个`CityResponse`对象。通过`CityResponse`对象,我们可以获取查询IP地址的国家、省/州、城市、经度和纬度等详细信息。 下面是一个简单的Java代码示例,演示了如何使用GeoLite2-City.mmdb文件进行地理位置查询: ```java import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.model.CityResponse; import java.io.File; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; public class GeoLite2CityExample { public static void main(String[] args) { File database = new File("/path/to/GeoLite2-City.mmdb"); try (DatabaseReader reader = new DatabaseReader.Builder(database).build()) { InetAddress ipAddress = InetAddress.getByName("8.8.8.8"); CityResponse response = reader.city(ipAddress); String countryName = response.getCountry().getName(); String cityName = response.getCity().getName(); String latitude = response.getLocation().getLatitude().toString(); String longitude = response.getLocation().getLongitude().toString(); System.out.println("Country: " + countryName); System.out.println("City: " + cityName); System.out.println("Latitude: " + latitude); System.out.println("Longitude: " + longitude); } catch (IOException | UnknownHostException e) { e.printStackTrace(); } } } ``` 以上代码将输出查询IP地址的国家、城市、经度和纬度信息。可以根据自己的需求,进一步扩展代码以适应不同的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值