Search in sources :

Example 1 with GeoDef

use of com.quickutil.platform.def.GeoDef in project quickutil by quickutil.

the class GeoUtil method geoCodeyByBaidu.

/**
 * 根据经纬度查询地理信息-百度世界
 *
 * @param latitude-纬度
 * @param longitude-经度
 * @return
 */
public static GeoDef geoCodeyByBaidu(double latitude, double longitude) {
    try {
        double[] delta = WGSToGCJPointer(latitude, longitude);
        delta = GCJToBDPointer(delta[0], delta[1]);
        String queryUrl = String.format("http://api.map.baidu.com/geocoder/v2/?ak=%s&location=%s,%s&output=json", baiduKeyIn, delta[0], delta[1]);
        JsonObject object = JsonUtil.toJsonMap(FileUtil.stream2string(HttpUtil.httpGet(queryUrl).getEntity().getContent()));
        String country = object.getAsJsonObject("result").getAsJsonObject("addressComponent").get("country").getAsString();
        if (country.equals("中国"))
            country = "China";
        if (country.equals("England"))
            country = "United Kingdom";
        String countryCode = countryCodeByCountryName(country);
        String countryChinese = countryChineseByCountryCode(countryCode);
        String state = object.getAsJsonObject("result").getAsJsonObject("addressComponent").get("province").getAsString();
        String stateCode = "";
        if (country.equals("China"))
            stateCode = stateCodeByStateChinese(countryCode, state);
        else
            stateCode = stateCodeByStateName(countryCode, state);
        state = stateNameByStateCode(countryCode, stateCode);
        String stateChinese = stateChineseByStateCode(countryCode, stateCode);
        String city = object.getAsJsonObject("result").getAsJsonObject("addressComponent").get("city").getAsString();
        String description = object.getAsJsonObject("result").getAsJsonObject("addressComponent").get("district").getAsString();
        countryCode = (countryCode == null) ? UNKNOWN : countryCode;
        country = (country == null) ? UNKNOWN : country;
        countryChinese = (countryChinese == null) ? UNKNOWN : countryChinese;
        stateCode = (stateCode == null) ? UNKNOWN : stateCode;
        state = (state == null) ? UNKNOWN : state;
        stateChinese = (stateChinese == null) ? UNKNOWN : stateChinese;
        city = (city == null) ? UNKNOWN : city;
        return new GeoDef(latitude, longitude, countryCode, country, countryChinese, stateCode, state, stateChinese, city, description);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
Also used : JsonObject(com.google.gson.JsonObject) GeoDef(com.quickutil.platform.def.GeoDef) UnknownHostException(java.net.UnknownHostException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException)

Example 2 with GeoDef

use of com.quickutil.platform.def.GeoDef in project quickutil by quickutil.

the class GeoUtil method geoCodeyByBaidu.

/**
 * 根据经纬度查询地理信息-百度批量
 *
 * @param points-纬度经度数组,下标偶数位为纬度,奇数位为经度,必须成对,最多20条经纬度
 * @return
 */
public static List<GeoDef> geoCodeyByBaidu(List<GeoPoint> points) {
    try {
        if (points.size() > 20)
            return null;
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < points.size(); i++) {
            double[] delta = WGSToGCJPointer(points.get(i).latitude, points.get(i).longitude);
            delta = GCJToBDPointer(delta[0], delta[1]);
            builder.append(delta[0] + "," + delta[1] + "|");
        }
        String queryUrl = String.format("http://api.map.baidu.com/geocoder/v2/?ak=%s&location=%s&output=json&batch=true", baiduKeyIn, URLEncoder.encode(builder.substring(0, builder.length() - 1), "UTF-8"));
        JsonObject object = JsonUtil.toJsonMap(FileUtil.stream2string(HttpUtil.httpGet(queryUrl).getEntity().getContent()));
        JsonArray array = object.getAsJsonArray("areas");
        List<GeoDef> geodefList = new ArrayList<GeoDef>();
        for (int i = 0; i < points.size(); i++) {
            object = array.get(i).getAsJsonObject();
            String country = object.get("country").getAsString();
            if (country.equals("中国"))
                country = "China";
            if (country.equals("England"))
                country = "United Kingdom";
            String countryCode = countryCodeByCountryName(country);
            String countryChinese = countryChineseByCountryCode(countryCode);
            String state = object.get("province").getAsString();
            String stateCode = "";
            if (country.equals("China"))
                stateCode = stateCodeByStateChinese(countryCode, state);
            else
                stateCode = stateCodeByStateName(countryCode, state);
            state = stateNameByStateCode(countryCode, stateCode);
            String stateChinese = stateChineseByStateCode(countryCode, stateCode);
            String city = object.get("city").getAsString();
            String description = object.get("district").getAsString();
            countryCode = (countryCode == null) ? UNKNOWN : countryCode;
            country = (country == null) ? UNKNOWN : country;
            countryChinese = (countryChinese == null) ? UNKNOWN : countryChinese;
            stateCode = (stateCode == null) ? UNKNOWN : stateCode;
            state = (state == null) ? UNKNOWN : state;
            stateChinese = (stateChinese == null) ? UNKNOWN : stateChinese;
            city = (city == null) ? UNKNOWN : city;
            geodefList.add(new GeoDef(points.get(i).latitude, points.get(i).longitude, countryCode, country, countryChinese, stateCode, state, stateChinese, city, description));
        }
        return geodefList;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
Also used : JsonArray(com.google.gson.JsonArray) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) GeoPoint(com.quickutil.platform.def.GeoPoint) GeoDef(com.quickutil.platform.def.GeoDef) UnknownHostException(java.net.UnknownHostException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException)

Example 3 with GeoDef

use of com.quickutil.platform.def.GeoDef in project quickutil by quickutil.

the class GeoUtil method geoCodeyByAmap.

/**
 * 根据经纬度查询地理信息-高德中国
 *
 * @param latitude-纬度
 * @param longitude-经度
 * @return
 */
public static GeoDef geoCodeyByAmap(double latitude, double longitude) {
    try {
        double[] delta = WGSToGCJPointer(latitude, longitude);
        String queryUrl = String.format("http://restapi.amap.com/v3/geocode/regeo?output=json&location=%s,%s&key=%s", delta[1], delta[0], amapKeyIn);
        JsonObject object = JsonUtil.toJsonMap(FileUtil.stream2string(HttpUtil.httpGet(queryUrl).getEntity().getContent()));
        String country = object.getAsJsonObject("regeocode").getAsJsonObject("addressComponent").get("country").getAsString();
        if (country.equals("中国"))
            country = "China";
        if (country.equals("England"))
            country = "United Kingdom";
        String city = "";
        if (!object.getAsJsonObject("regeocode").getAsJsonObject("addressComponent").get("city").isJsonArray())
            city = object.getAsJsonObject("regeocode").getAsJsonObject("addressComponent").get("city").getAsString();
        String description = object.getAsJsonObject("regeocode").get("formatted_address").getAsString();
        String countryCode = countryCodeByCountryName(country);
        String countryChinese = countryChineseByCountryCode(countryCode);
        String state = object.get("province").getAsString();
        String stateCode = "";
        if (country.equals("China"))
            stateCode = stateCodeByStateChinese(countryCode, state);
        else
            stateCode = stateCodeByStateName(countryCode, state);
        state = stateNameByStateCode(countryCode, stateCode);
        String stateChinese = stateChineseByStateCode(countryCode, stateCode);
        countryCode = (countryCode == null) ? UNKNOWN : countryCode;
        country = (country == null) ? UNKNOWN : country;
        countryChinese = (countryChinese == null) ? UNKNOWN : countryChinese;
        stateCode = (stateCode == null) ? UNKNOWN : stateCode;
        state = (state == null) ? UNKNOWN : state;
        stateChinese = (stateChinese == null) ? UNKNOWN : stateChinese;
        city = (city == null) ? UNKNOWN : city;
        return new GeoDef(latitude, longitude, countryCode, country, countryChinese, stateCode, state, stateChinese, city, description);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
Also used : JsonObject(com.google.gson.JsonObject) GeoDef(com.quickutil.platform.def.GeoDef) UnknownHostException(java.net.UnknownHostException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException)

Example 4 with GeoDef

use of com.quickutil.platform.def.GeoDef in project quickutil by quickutil.

the class GeoUtil method GeoIPByMMDB.

public static GeoDef GeoIPByMMDB(String ip) {
    String countryCode = UNKNOWN;
    String country = UNKNOWN;
    String countryChinese = UNKNOWN;
    String stateCode = UNKNOWN;
    String state = UNKNOWN;
    String stateChinese = UNKNOWN;
    String city = UNKNOWN;
    Double latitude = 0.0;
    Double longitude = 0.0;
    try {
        InetAddress ipAddr = InetAddress.getByName(ip);
        CityResponse result;
        result = databaseReader.city(ipAddr);
        countryCode = result.getCountry().getIsoCode();
        country = result.getCountry().getName();
        countryChinese = countryChineseByCountryCode(countryCode);
        stateCode = result.getMostSpecificSubdivision().getIsoCode();
        state = stateNameByStateCode(countryCode, stateCode);
        stateChinese = stateChineseByStateCode(countryCode, stateCode);
        city = result.getCity().getName();
        if (countryCode != null && countryCode.equals("CN") && city != null && result.getCity().getNames().containsKey("zh-CN")) {
            if (!result.getCity().getNames().get("zh-CN").endsWith("市")) {
                city = result.getCity().getNames().get("zh-CN") + "市";
            } else {
                city = result.getCity().getNames().get("zh-CN");
            }
        }
        latitude = result.getLocation().getLatitude();
        longitude = result.getLocation().getLongitude();
    } catch (AddressNotFoundException ae) {
    } catch (UnknownHostException ue) {
    } catch (Exception e) {
        e.printStackTrace();
    }
    countryCode = (countryCode == null) ? UNKNOWN : countryCode;
    country = (country == null) ? UNKNOWN : country;
    countryChinese = (countryChinese == null) ? UNKNOWN : countryChinese;
    stateCode = (stateCode == null) ? UNKNOWN : stateCode;
    state = (state == null) ? UNKNOWN : state;
    stateChinese = (stateChinese == null) ? UNKNOWN : stateChinese;
    city = (city == null) ? UNKNOWN : city;
    latitude = (latitude == null) ? 0.0 : latitude;
    longitude = (longitude == null) ? 0.0 : longitude;
    return new GeoDef(latitude, longitude, countryCode, country, countryChinese, stateCode, state, stateChinese, city, "");
}
Also used : CityResponse(com.maxmind.geoip2.model.CityResponse) UnknownHostException(java.net.UnknownHostException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException) InetAddress(java.net.InetAddress) UnknownHostException(java.net.UnknownHostException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException) GeoDef(com.quickutil.platform.def.GeoDef)

Aggregations

AddressNotFoundException (com.maxmind.geoip2.exception.AddressNotFoundException)4 GeoDef (com.quickutil.platform.def.GeoDef)4 UnknownHostException (java.net.UnknownHostException)4 JsonObject (com.google.gson.JsonObject)3 JsonArray (com.google.gson.JsonArray)1 CityResponse (com.maxmind.geoip2.model.CityResponse)1 GeoPoint (com.quickutil.platform.def.GeoPoint)1 InetAddress (java.net.InetAddress)1 ArrayList (java.util.ArrayList)1