【问题标题】:How to get only City, State, Country from lat, long in android如何在 android 中仅从 lat, long 获取 City, State, Country
【发布时间】:2012-09-22 07:22:09
【问题描述】:

我有以下代码将 lat、long 转换为人类可读的地址。现在我正在获取完整的详细信息,包括街道名称。我怎样才能只得到城市、州、国家?我不想要更多细节。请帮我。

Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
try {
   List<Address> addresses = geoCoder.getFromLocation(latitude, longitude, 1);

   String add = "";
   if (addresses.size() > 0) 
   {
      for (int i=0; i<addresses.get(0).getMaxAddressLineIndex();i++)
     add += addresses.get(0).getAddressLine(i) + "\n";
   }

   showToastMessage(add);
}
catch (IOException e1) {                
   e1.printStackTrace();
}   

【问题讨论】:

    标签: android google-geocoder street-address


    【解决方案1】:

    对来自地址的对象使用以下方法:

    getLocality()

    getCountryName()

    使用

    getAdminArea() 返回状态。

    我不知道这对于其他国家/地区有多准确,但对于美国的地址,这会返回正确的州名。

    附:很抱歉写了一个完整的单独答案,我还不能制作 cmets。

    【讨论】:

    • getAdminArea() 不起作用.. 它为法国返回 null
    • getAdminArea() 似乎被忽略了。 “状态”不是指编程中的一块实际土地,这无济于事。
    【解决方案2】:

    反向地理编码位置描述中的详细信息量可能会有所不同,例如,一个可能包含最近建筑物的完整街道地址,而另一个可能仅包含城市名称和邮政编码。这将返回城市名称和国家名称

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

    有关详细信息,您可以查看Address 对象

    【讨论】:

    • 非常有趣的是,locality 通常为空。例如,我目前在捷克首都布拉格。 locality 为空,并且城市实际上位于地理位置的“子管理”部分。地址本身是正确的。因此,如果您构建国际应用程序,您应该非常清楚地理编码器信息和可靠性不能真正被信任。
    • 这对我来说是一个很棒的发现。好点@John,我想我们应该在这种情况下使用addresses.get(0).getSubAdminArea() 包裹在条件语句中来检测locality 是否为null。可能是?我自己还是新手;)
    • 所以地址中没有可用的状态?
    【解决方案3】:

    查看从地理编码器返回的Address (javadoc)。 这有单独的方法,例如 getLocality() 返回城市组织 getCountry() 返回国家名称等。

    【讨论】:

      【解决方案4】:

      通过以下方式获取城市、州和国家使用代码-

      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());
      }
      

      【讨论】:

        【解决方案5】:

        对来自地址的对象使用以下方法:

         getLocality()
         getCountryName()
        

        我不确定如何获取状态。

        【讨论】:

        • 请注意,在某些情况下,getLocality() 可能为 null,并且在获取国家/地区名称时会出现空指针异常。
        【解决方案6】:

        在您的字符串文件中添加这个国家代码列表。

        <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>
        

        然后用下面的代码添加位置更改方法。

        @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;
            }
        

        【讨论】:

          猜你喜欢
          • 2015-01-25
          • 1970-01-01
          • 1970-01-01
          • 2015-05-20
          • 2012-11-17
          • 2020-12-31
          • 1970-01-01
          • 1970-01-01
          • 2018-07-10
          相关资源
          最近更新 更多