当前位置: 代码迷 >> Android >> 多流在线与离线数据读取之五(Android移动端开发读取四川地理信息中心地名搜索服务)
  详细解决方案

多流在线与离线数据读取之五(Android移动端开发读取四川地理信息中心地名搜索服务)

热度:83   发布时间:2016-05-01 17:50:33.0
多源在线与离线数据读取之五(Android移动端开发读取四川地理信息中心地名搜索服务)

本实例在前一博客的基础上,主要是针对四川地理信息中心的地名搜索服务,如果利用ArcGIS for Android API进行解析,并接入地理编码信息进行搜索定位。

1)基础准备:下载Java版的Json库(http://code.google.com/p/json-simple/)、熟悉四川地理信息中心地名搜索规则

2)关于地理地理信息中心地名搜索服务规则,说见其网站,这里不多介绍(http://www.scgis.net/serviceshow.aspx?serviceID=cf917508-8033-4d74-9762-c8c07b7083a0)

 

3)代码说明:

         上一博客提取的代码说明这里就不再介绍了,主要介绍跟地名搜索服务相关的几个文件。

 AddressT.java:地名的参数信息

package com.esri.arcgis.android.samples;public class AddressT {	private int _ID;	private double _X;	private double _Y;	private String _Name;	private String _Type;	private String _Region;	private String _County;	private String _PhoneNumber;	private String _AddressName;	public void set_ID(int _ID) {		this._ID = _ID;	}	public int get_ID() {		return _ID;	}	public void set_X(double _X) {		this._X = _X;	}	public double get_X() {		return _X;	}	public void set_Y(double _Y) {		this._Y = _Y;	}	public double get_Y() {		return _Y;	}	public void set_Name(String _Name) {		this._Name = _Name;	}	public String get_Name() {		return _Name;	}	public void set_Type(String _Type) {		this._Type = _Type;	}	public String get_Type() {		return _Type;	}	public void set_Region(String _Region) {		this._Region = _Region;	}	public String get_Region() {		return _Region;	}	public void set_County(String _County) {		this._County = _County;	}	public String get_County() {		return _County;	}	public void set_PhoneNumber(String _PhoneNumber) {		this._PhoneNumber = _PhoneNumber;	}	public String get_PhoneNumber() {		return _PhoneNumber;	}	public void set_AddressName(String _AddressName) {		this._AddressName = _AddressName;	}	public String get_AddressName() {		return _AddressName;	}}


 EscapeUnescape.java字符串编码及解码文件

package com.esri.arcgis.android.samples;public class EscapeUnescape {	public static String escape(String src) {		int i;		char j;		StringBuffer tmp = new StringBuffer();		tmp.ensureCapacity(src.length() * 6);		for (i = 0; i < src.length(); i++) {			j = src.charAt(i);			if (Character.isDigit(j) || Character.isLowerCase(j)					|| Character.isUpperCase(j))				tmp.append(j);			else if (j < 256) {				tmp.append("%");				if (j < 16)					tmp.append("0");				tmp.append(Integer.toString(j, 16));			} else {				tmp.append("%u");				tmp.append(Integer.toString(j, 16));			}		}		return tmp.toString();	}	public static String unescape(String src) {		StringBuffer tmp = new StringBuffer();		tmp.ensureCapacity(src.length());		int lastPos = 0, pos = 0;		char ch;		while (lastPos < src.length()) {			pos = src.indexOf("%", lastPos);			if (pos == lastPos) {				if (src.charAt(pos + 1) == 'u') {					ch = (char) Integer.parseInt(							src.substring(pos + 2, pos + 6), 16);					tmp.append(ch);					lastPos = pos + 6;				} else {					ch = (char) Integer.parseInt(							src.substring(pos + 1, pos + 3), 16);					tmp.append(ch);					lastPos = pos + 3;				}			} else {				if (pos == -1) {					tmp.append(src.substring(lastPos));					lastPos = src.length();				} else {					tmp.append(src.substring(lastPos, pos));					lastPos = pos;				}			}		}		return tmp.toString();	}}


  FindAddress.java:地名搜索类

 

package com.esri.arcgis.android.samples;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;//import org.json.simple.JSONArray;//import org.json.simple.JSONObject;//import org.json.simple.parser.JSONParser;import org.json.JSONArray;import org.json.JSONObject;public class FindAddress {		//&pretty=true	private String BaseLocation="http://www.scgis.net.cn/imap/iMapServer/NewRest/services/SCNameSearch/Search?StartIndex=0&StopIndex=5&pretty=true";	private String tokenURL="http://www.scgis.net.cn/imap/iMapServer/Token/getToken?username=test20110703&password=test20110703&IpAddress=&TimeSpan=100M";	private String keyname="";	private String token="";	private String city="";	private String county="";		public FindAddress(String keyname)	{		this.keyname=EscapeUnescape.escape(keyname);		this.token=EscapeUnescape.escape(new GetToken().sendPost(tokenURL));	}	public FindAddress(String keyname,String city)	{		this.keyname=EscapeUnescape.escape(keyname);		this.city=EscapeUnescape.escape(city);		this.token=new GetToken().sendPost(tokenURL);	}	public FindAddress(String keyname,String city,String county)	{		this.keyname=EscapeUnescape.escape(keyname);		this.city=EscapeUnescape.escape(city);		this.county=EscapeUnescape.escape(county);		this.token=new GetToken().sendPost(tokenURL);	}		public ArrayList<AddressT> GetResult()	{		ArrayList<AddressT> result=new ArrayList<AddressT>();						String url=this.BaseLocation+		//"&DiQuKey"+this.city+		//"&QuXianKey"+this.county+		"&keyname="+this.keyname+		"&token="+this.token;			//URLEncoder.encode();				StringBuilder lineJson=new StringBuilder (); 		try {              URL httpurl = new URL(url);              HttpURLConnection httpConn = (HttpURLConnection) httpurl                      .openConnection();                          httpConn.setDoInput(true);              BufferedReader in = new BufferedReader(new InputStreamReader(                      httpConn.getInputStream(),"UTF-8"));              String line;              AddressT oneAddress;            while ((line = in.readLine()) != null) {            	            	//System.out.println(line);            	lineJson.append(line);            	            }              in.close();             //test			/*oneAddress=new AddressT();			oneAddress.set_ID(1);			oneAddress.set_X(31.1);			oneAddress.set_Y(101.2);			oneAddress.set_Name(lineJson.toString());			result.add(oneAddress);*/			            //System.out.println(lineJson);            //decode            //JSONParser parser = new JSONParser();            //Object obj = parser.parse(lineJson.toString());                        //JSONObject allPackage = (JSONObject) obj;			JSONObject allPackage = new JSONObject(lineJson.toString());						            //get false  return            if(!(Boolean) allPackage.get("success"))            {            	return null;            }            //frome  message to features...decode            //Object objFeatures=((JSONObject)allPackage.get("message")).get("features");                        // to array			//JSONArray arrayFeatures = (JSONArray) objFeatures;            JSONArray arrayFeatures=allPackage.getJSONObject("message").getJSONArray("features");			//int count=arrayFeatures.size();            									for(int i=0;i<arrayFeatures.length();i++)			{				//JSONArray oneFeature = (JSONArray) ((JSONObject) objT).get("attributes");				JSONArray oneFeature=arrayFeatures.getJSONObject(i).getJSONArray("attributes");				oneAddress=new AddressT();				//Integer.parseInt(oneFeature.get(0).toString());								oneAddress.set_ID(Integer.parseInt(oneFeature.get(0).toString()));				oneAddress.set_X(Double.parseDouble(oneFeature.get(1).toString()));				oneAddress.set_Y(Double.parseDouble(oneFeature.get(2).toString()));				oneAddress.set_Name(oneFeature.get(3).toString());				oneAddress.set_Type(oneFeature.get(4).toString());				oneAddress.set_Region(oneFeature.get(5).toString());				oneAddress.set_County(oneFeature.get(6).toString());				//oneAddress.set_PhoneNumber(oneFeature.get(7).toString());				//oneAddress.set_AddressName(oneFeature.get(8).toString());								//add it				result.add(oneAddress);			}                    } catch (Exception e) {         	//test        	AddressT oneAddress=new AddressT();			oneAddress.set_ID(3);			oneAddress.set_X(31.1);			oneAddress.set_Y(101.2);			oneAddress.set_Name(e.getMessage());			result.add(oneAddress);            e.printStackTrace();                   }				return result;	}}

效果如图:







由于系列代码比较多,需要学习此系列编码的同学,可以留下邮箱,空了我给你们发过去!



  相关解决方案