/* * Copyright (C) 2010-2013 The SINA WEIBO Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sina.weibo.sdk.openapi.legacy; import android.content.Context; import android.util.SparseArray; import com.sina.weibo.sdk.auth.Oauth2AccessToken; import com.sina.weibo.sdk.net.RequestListener; import com.sina.weibo.sdk.net.WeiboParameters; import com.sina.weibo.sdk.openapi.AbsOpenAPI; /** * 地理信息相关接口。 * 详情请参考<a href="http://t.cn/8FdRdk0">评论接口</a> * * @author SINA * @since 2013-12-4 */ public class LocationAPI extends AbsOpenAPI { /** API URL */ private static final String API_BASE_URL = API_SERVER + "/location"; /** * API 类型。 * 命名规则: * <li>读取接口:READ_API_XXX * <li>写入接口:WRITE_API_XXX */ private static final int READ_API_GPS_TO_OFFSET = 0; private static final int READ_API_SEARCH_POIS_BY_GEO = 1; private static final int READ_API_GET_TO_ADDRESS = 2; private static final SparseArray<String> sAPIList = new SparseArray<String>(); static { sAPIList.put(READ_API_GPS_TO_OFFSET, API_BASE_URL + "/geo/gps_to_offset.json"); sAPIList.put(READ_API_SEARCH_POIS_BY_GEO, API_BASE_URL + "/pois/search/by_geo.json"); sAPIList.put(READ_API_GET_TO_ADDRESS, API_BASE_URL + "/geo/geo_to_address.json"); } /** * 构造函数,使用各个 API 接口提供的服务前必须先获取 Token。 * * @param accesssToken 访问令牌 */ public LocationAPI(Context context, String appKey, Oauth2AccessToken accessToken) { super(context, appKey, accessToken); } /** * 根据GPS坐标获取偏移后的坐标 * * @param longtitude 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。 * @param latitude 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。 * @param listener 异步请求回调接口 */ public void gps2Offset(Double longtitude, Double latitude, RequestListener listener) { WeiboParameters params = buildGPS2OffsetParams(longtitude, latitude); requestAsync(sAPIList.get(READ_API_GPS_TO_OFFSET), params, HTTPMETHOD_GET, listener); } /** * 根据关键词按坐标点范围获取POI点的信息。 * * @param latitude 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。 * @param longtitude 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0。 * @param keyWord 查询的关键词,必须进行URLencode。 * @param listener 异步请求回调接口 */ public void searchPoisByGeo(Double longtitude, Double latitude, String keyWord, RequestListener listener) { WeiboParameters params = buildSerarPoiByGeoParmas(longtitude, latitude, keyWord); requestAsync(sAPIList.get(READ_API_SEARCH_POIS_BY_GEO), params, HTTPMETHOD_GET, listener); } /** * 根据地理信息坐标返回实际地址。 * * @param longtitude 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0。 * @param latitude 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。 * @param listener 异步请求回调接口 */ public void geo2Address(Double longtitude, Double latitude, RequestListener listener) { WeiboParameters params = buildGeo2AddressParam(longtitude, latitude); requestAsync(sAPIList.get(READ_API_GET_TO_ADDRESS), params, HTTPMETHOD_GET, listener); } /** * @see #gps2Offset(Double, Double, RequestListener) */ public String gps2OffsetSync(Double longtitude, Double latitude) { WeiboParameters params = buildGPS2OffsetParams(longtitude, latitude); return requestSync(sAPIList.get(READ_API_GPS_TO_OFFSET), params, HTTPMETHOD_GET); } /** * @see #searchPoisByGeo(Double, Double, String, RequestListener) */ public String searchPoisByGeoSync(Double longtitude, Double latitude, String keyWord) { WeiboParameters params = buildSerarPoiByGeoParmas(longtitude, latitude, keyWord); return requestSync(sAPIList.get(READ_API_SEARCH_POIS_BY_GEO), params, HTTPMETHOD_GET); } /** * @see #geo2Address(Double, Double, RequestListener) */ public String geo2AddressSync(Double longtitude, Double latitude) { WeiboParameters params = buildGeo2AddressParam(longtitude, latitude); return requestSync(sAPIList.get(READ_API_GET_TO_ADDRESS), params, HTTPMETHOD_GET); } private WeiboParameters buildGPS2OffsetParams(Double longtitude, Double latitude) { WeiboParameters params = new WeiboParameters(mAppKey); String coordinate = longtitude + "," + latitude; params.put("coordinate", coordinate); return params; } private WeiboParameters buildSerarPoiByGeoParmas(Double longtitude, Double latitude, String keyWord) { WeiboParameters params = new WeiboParameters(mAppKey); String coordinate = longtitude + "," + latitude; params.put("coordinate", coordinate); params.put("q", keyWord); return params; } private WeiboParameters buildGeo2AddressParam(Double longtitude, Double latitude) { WeiboParameters params = new WeiboParameters(mAppKey); String coordinate = longtitude + "," + latitude; params.put("coordinate", coordinate); return params; } }