How to get only City, State, Country from lat, long in android

一笑奈何 提交于 2019-12-03 22:52:17

The amount of detail in a reverse geocoded location description may vary, for example one might contain the full street address of the closest building, while another might contain only a city name and postal code. This will return the city name and country name

    if (addresses.size() > 0) {
        System.out.println(addresses.get(0).getLocality());
        System.out.println(addresses.get(0).getCountryName());
    }

For details you can look into the Address object

Use the following methods on the objects from addresses:

getLocality()

getCountryName()

Use

getAdminArea() to return state.

I do not know how accurate this is for other countries but for addresses in the USA, this returns the correct state name.

P.S. Sorry for writing a whole separate answer, I am not able to make comments yet.

Have a look at Address (javadoc) which is returned from the geocoder. This has separate methods like getLocality() to return the city org getCountry() to return the country name etc.

Use the following methods on the objects from addresses:

 getLocality()
 getCountryName()

I am not sure how to get the state though.

Add this list of country code in the your string file.

<string-array name="CountryCodes">
        <item>93,AF</item>
        <item>355,AL</item>
        <item>213,DZ</item>
        <item>376,AD</item>
        <item>244,AO</item>
        <item>672,AQ</item>
        <item>54,AR</item>
        <item>374,AM</item>
        <item>297,AW</item>
        <item>61,AU</item>
        <item>43,AT</item>
        <item>994,AZ</item>
        <item>973,BH</item>
        <item>880,BD</item>
        <item>375,BY</item>
        <item>32,BE</item>
        <item>501,BZ</item>
        <item>229,BJ</item>
        <item>975,BT</item>
        <item>591,BO</item>
        <item>387,BA</item>
        <item>267,BW</item>
        <item>55,BR</item>
        <item>673,BN</item>
        <item>359,BG</item>
        <item>226,BF</item>
        <item>95,MM</item>
        <item>257,BI</item>
        <item>855,KH</item>
        <item>237,CM</item>
        <item>1,CA</item>
        <item>238,CV</item>
        <item>236,CF</item>
        <item>235,TD</item>
        <item>56,CL</item>
        <item>86,CN</item>
        <item>61,CX</item>
        <item>61,CC</item>
        <item>57,CO</item>
        <item>269,KM</item>
        <item>242,CG</item>
        <item>243,CD</item>
        <item>682,CK</item>
        <item>506,CR</item>
        <item>385,HR</item>
        <item>53,CU</item>
        <item>357,CY</item>
        <item>420,CZ</item>
        <item>45,DK</item>
        <item>253,DJ</item>
        <item>670,TL</item>
        <item>593,EC</item>
        <item>20,EG</item>
        <item>503,SV</item>
        <item>240,GQ</item>
        <item>291,ER</item>
        <item>372,EE</item>
        <item>251,ET</item>
        <item>500,FK</item>
        <item>298,FO</item>
        <item>679,FJ</item>
        <item>358,FI</item>
        <item>33,FR</item>
        <item>689,PF</item>
        <item>241,GA</item>
        <item>220,GM</item>
        <item>995,GE</item>
        <item>49,DE</item>
        <item>233,GH</item>
        <item>350,GI</item>
        <item>30,GR</item>
        <item>299,GL</item>
        <item>502,GT</item>
        <item>224,GN</item>
        <item>245,GW</item>
        <item>592,GY</item>
        <item>509,HT</item>
        <item>504,HN</item>
        <item>852,HK</item>
        <item>36,HU</item>
        <item>91,IN</item>
        <item>62,ID</item>
        <item>98,IR</item>
        <item>964,IQ</item>
        <item>353,IE</item>
        <item>44,IM</item>
        <item>972,IL</item>
        <item>39,IT</item>
        <item>225,CI</item>
        <item>81,JP</item>
        <item>962,JO</item>
        <item>7,KZ</item>
        <item>254,KE</item>
        <item>686,KI</item>
        <item>965,KW</item>
        <item>996,KG</item>
        <item>856,LA</item>
        <item>371,LV</item>
        <item>961,LB</item>
        <item>266,LS</item>
        <item>231,LR</item>
        <item>218,LY</item>
        <item>423,LI</item>
        <item>370,LT</item>
        <item>352,LU</item>
        <item>853,MO</item>
        <item>389,MK</item>
        <item>261,MG</item>
        <item>265,MW</item>
        <item>60,MY</item>
        <item>960,MV</item>
        <item>223,ML</item>
        <item>356,MT</item>
        <item>692,MH</item>
        <item>222,MR</item>
        <item>230,MU</item>
        <item>262,YT</item>
        <item>52,MX</item>
        <item>691,FM</item>
        <item>373,MD</item>
        <item>377,MC</item>
        <item>976,MN</item>
        <item>382,ME</item>
        <item>212,MA</item>
        <item>258,MZ</item>
        <item>264,NA</item>
        <item>674,NR</item>
        <item>977,NP</item>
        <item>31,NL</item>
        <item>599,AN</item>
        <item>687,NC</item>
        <item>64,NZ</item>
        <item>505,NI</item>
        <item>227,NE</item>
        <item>234,NG</item>
        <item>683,NU</item>
        <item>850,KP</item>
        <item>47,NO</item>
        <item>968,OM</item>
        <item>92,PK</item>
        <item>680,PW</item>
        <item>507,PA</item>
        <item>675,PG</item>
        <item>595,PY</item>
        <item>51,PE</item>
        <item>63,PH</item>
        <item>870,PN</item>
        <item>48,PL</item>
        <item>351,PT</item>
        <item>1,PR</item>
        <item>974,QA</item>
        <item>40,RO</item>
        <item>7,RU</item>
        <item>250,RW</item>
        <item>590,BL</item>
        <item>685,WS</item>
        <item>378,SM</item>
        <item>239,ST</item>
        <item>966,SA</item>
        <item>221,SN</item>
        <item>381,RS</item>
        <item>248,SC</item>
        <item>232,SL</item>
        <item>65,SG</item>
        <item>421,SK</item>
        <item>386,SI</item>
        <item>677,SB</item>
        <item>252,SO</item>
        <item>27,ZA</item>
        <item>82,KR</item>
        <item>34,ES</item>
        <item>94,LK</item>
        <item>290,SH</item>
        <item>508,PM</item>
        <item>249,SD</item>
        <item>597,SR</item>
        <item>268,SZ</item>
        <item>46,SE</item>
        <item>41,CH</item>
        <item>963,SY</item>
        <item>886,TW</item>
        <item>992,TJ</item>
        <item>255,TZ</item>
        <item>66,TH</item>
        <item>228,TG</item>
        <item>690,TK</item>
        <item>676,TO</item>
        <item>216,TN</item>
        <item>90,TR</item>
        <item>993,TM</item>
        <item>688,TV</item>
        <item>971,AE</item>
        <item>256,UG</item>
        <item>44,GB</item>
        <item>380,UA</item>
        <item>598,UY</item>
        <item>1,US</item>
        <item>998,UZ</item>
        <item>678,VU</item>
        <item>39,VA</item>
        <item>58,VE</item>
        <item>84,VN</item>
        <item>681,WF</item>
        <item>967,YE</item>
        <item>260,ZM</item>
        <item>263,ZW</item>
    </string-array>

Then after add location change method with below code.

@Override
    public void onLocationChanged(Location location) {
        super.onLocationChanged(location);
        try {
            Geocoder gcd = new Geocoder(context, Locale.getDefault());
            List<Address> addresses = gcd.getFromLocation(location.getLatitude(),
                    location.getLongitude(), 1);

            if (addresses.size() > 0) {
                String countryName = addresses.get(0).getCountryCode();
                LogUtils.LOGE("TAG_DATA", getCountryZipCode(countryName), Const.LOG_VISIBILITY);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getCountryZipCode(String country) {
        String CountryZipCode = "";

        String[] rl = this.getResources().getStringArray(R.array.CountryCodes);
        for (String aRl : rl) {
            String[] g = aRl.split(",");
            if (g[1].trim().equals(country)) {
                CountryZipCode = "+" + g[0];
                break;
            }
        }
        return CountryZipCode;
    }
Megha Kalmegh

To get City, State and Country use code in following way-

if (addresses.size() > 0) {
    System.out.println(addresses.get(0).getLocality());
    System.out.println(addresses.get(0).getAdminArea());
    System.out.println(addresses.get(0).getCountryName());
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!