摘要:每一个联网的设备都有一个IP地址,移动设备也不例外,如何定位Android手机当前的地理位置呢?很简单,我们依然可以利用 IP地址来获取Android手机的当前位置,可以精确到经纬度。
本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的例子中演示的就是由58.192.32.1这个IP地址查询到其所在的经纬度坐标为(118.777802,32.061699)。
package eoe.demo;
import com.mapdigit.gis.DigitalMap;
import com.mapdigit.gis.MapPoint;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.service.IIpAddressGeocodingListener;
import com.mapdigit.gis.service.IpAddressLocation;
import com.pstreets.gisengine.R;
import com.pstreets.gisengine.SharedMapInstance;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class MapIpSearch extends Activity implements
IIpAddressGeocodingListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onStart() {
super.onStart();
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
SharedMapInstance.map.setCenter(center, 15,
com.mapdigit.gis.raster.MapType.MICROSOFTCHINA);
SharedMapInstance.map.setIpAddressGeocodingListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mapgeocoding_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.findaddress:
SharedMapInstance.map.getIpLocations(“58.192.32.1″);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void done(String query, IpAddressLocation result) {
if (result != null && result.error.length() == 0
&& result.longitude.length() > 0
&& result.longitude.length() > 0) {
try {
MapPoint mapPoint = new MapPoint();
String latLng = ”[" + result.longitude + "," + result.latitude+ ",0]“;
mapPoint.point = DigitalMap.fromStringToLatLng(latLng);
mapPoint.setName(result.organization);
mapPoint.setNote(result.city + ” ” + result.country);
SharedMapInstance.map.panTo(mapPoint.point);
} catch (Exception e) {
result.error = ”IP_NOT_FOUND”;
}
}
}
@Override
public void readProgress(int bytes, int total) {
}
}