[Android]곡곡λ°μ΄ν° 'λ―Όλ°©μ λνΌμμ 보 μλΉμ€' API νμ±νκΈ°
λ보기 [π¨πνκ΅ μμ π¨π/[3-2]Android] - [Android] T-Map APIμ μ¬μ©νμ¬ μ§λ λμ보기 [Android] T-Map APIμ μ¬μ©νμ¬ μ§λ λμ보기 [π¨πνκ΅ μμ π¨π/[3-2]Android] - [Android]..
sungmin.dev
[Android] T-Map APIμ μ¬μ©νμ¬ μ§λ λμ보기
[π¨πνκ΅ μμ π¨π/[3-2]Android] - [Android] μλ°λ‘ μλλ‘μ΄λ μ± λ€μ μ§λ APIμ¬μ©νμ¬ μ§λ λμ보기 [Android] μλ°λ‘ μλλ‘μ΄λ μ± λ€μ μ§λ APIμ¬μ©νμ¬ μ§λ λμ보기 λ€μμ§λ API ν€ λ°..
sungmin.dev
λ³Έ κΈμ NYλμ κΈ(http://blog.naver.com/PostView.nhn?blogId=yandul83&logNo=220436066801)μ μ°Έκ³ νμ¬ μμ±νμμ΅λλ€.
μ΄μ κΈμ 보면 곡곡λ°μ΄ν°μΈ 'λ―Όλ°©μ λνΌμ μ 보 μλΉμ€'λ₯Ό νμ± νλ κ²μ νμΈν μ μλ€.
νμ¬ λλ μΆ©λ¨λμ² κ³΅κ³΅λ°μ΄ν° μν¬ν°μ¦ 1κΈ°λ‘ νλ μ€μ΄λ©°, μμ 곡곡λ°μ΄ν°λ₯Ό νμ©νμ¬ λͺ¨λ°μΌ SW νλ‘μ νΈ μμ
μ
νλ‘μ νΈλ₯Ό μ§ννκ³ μλ€.
곡곡λ°μ΄ν°λ₯Ό νμ±νν 1μ£ΌμΌ λμ μ§λμ λ§μ»€λ₯Ό λμ°κΈ° μν΄ λ§μ μ½μ§μ νμκ³ T-Mapμ μλ£κ° λ§μ΄ μμ΄
μ§μ μμ±νκΈ°λ‘ νμλ€.
μ°μ κΈ°λ³Έμ μΈ κ°λ°νκ²½μ λ€μκ³Ό κ°λ€.
κ°λ° μΈμ΄ : Java 12.0.2 κ°λ° ν΄ : Android Studio 3.5.2 μ§λ : T-Map (http://tmapapi.sktelecom.com/index.html) 곡곡 λ°μ΄ν° : λ―Όλ°©μ λνΌμ μ 보 μλΉμ€ (https://www.data.go.kr/dataset/3038747/openapi.do?mypageFlag=Y) |
μ΄ κΈμμλ 곡곡λ°μ΄ν° νμ± νλ λΆλΆμ μ μΈνκ³ κΈμ μμ±νλ €κ³ νλ€.
νμ± λΆλΆμ μ΄μ κΈμ μ°Έκ³ νκΈ° λ°λλ€.
1. 곡곡λ°μ΄ν° νμ±μ μν Class λ§λ€κΈ°
κ°μ₯ λ¨Όμ ν΄λΉ λ°μ΄ν°λ₯Ό μ¬μ©νκΈ° μν΄μλ 곡곡λ°μ΄ν° ν¬νΈμμ μ 곡νλ κΈ°μ λ¬Έμλ₯Ό νμΈμ ν΄μΌ νλ€.
κ·Έ μ΄μ λ λ°μ΄ν°λ§λ€ tagκ°μ΄ λ€λ₯΄κ³ μΈν°λ·μ μ 곡λ μ½λλ₯Ό λ°λΌ νλ€ λ³΄λ©΄ tagκ°μ΄ λ¬λΌμ Έμ νμ±μ΄ μ λλ κ²½μ°κ° λ§μ΄ μκΈ° λλ¬Έμ΄λ€.
μ°μ λ΄κ° νμν λνΌμ μ΄λ¦, μλ, κ²½λλ₯Ό λΆλ¬μ€κΈ° μν ν΄λμ€λ₯Ό λ§λ λ€.
MapPoint.java
public class MapPoint {
private String Name; //λνΌμ μ΄λ¦
private double latitude; //μλ
private double longitude; //κ²½λ
public MapPoint() {
super();
}
public MapPoint(String Name, double latitude, double longitude) {
this.Name = Name;
this.latitude = latitude;
this.longitude = longitude;
}
public String getName() { //λνΌμ μ΄λ¦
return Name;
}
public void setName(String Name){
this.Name = Name;
}
public double getLatitude() { //μλ
return latitude;
}
public void setLatitude(double latitude){
this.latitude = latitude;
}
public double getLongitude() { //κ²½λ
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
2. API νμ± Class ν΄λμ€ λ§λ€κΈ°
곡곡λ°μ΄ν°λ₯Ό λ§μ»€λ‘ μ°κΈ° μν΄μ ArrayListλ₯Ό ν΅ν΄ λ°°μ΄μ κ°κ°μ λ°μ΄ν°λ€μ νμ± ν΄ μΆκ°ν΄μ£Όλ κ²μΌλ‘ ꡬνμ νμλ€.
λν νμ± λ κ²°κ³Όκ° μΆκ°λ κ²½μ° trueκ°μΌλ‘ λ³κ²½ ν΄μ£Όλ©° κ°μ΄ λ€μ΄κ°κ²μ νμΈνν falseκ°μΌλ‘ λ°κΏμ£Όμ΄ νμ±λ κ²°κ³Όλ₯Ό νμΈνμλ€.
ν΄λΉ λ°μ΄ν°λ jsonκ³Ό xmlμ λͺ¨λ μ§μνλλ° λλ xmlμΌλ‘ νμ± νμ¬ λ§μ»€λ₯Ό μ°μ΄ μ£Όμλ€.
ShelterApi.java
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedInputStream;
import java.net.URL;
import java.util.ArrayList;
public class ShelterApi {
private static String ServiceKey = "APIν€"; //곡곡λ°μ΄ν° μ¬μ΄νΈλ₯Ό ν΅ν΄ λ°κΈ λ°μ APIν€
public ShelterApi() {
try {
apiParserSearch();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ArrayList<MapPoint> apiParserSearch() throws Exception {
URL url = new URL(getURLParam(null));
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
BufferedInputStream bis = new BufferedInputStream(url.openStream());
xpp.setInput(bis, "utf-8");
String tag = null;
int event_type = xpp.getEventType();
ArrayList<MapPoint> mapPoint = new ArrayList<MapPoint>();
String facility_name = null, longitude= null,latitude=null;
boolean bfacility_name = false, blatitude = false, blongitude = false;
while (event_type != XmlPullParser.END_DOCUMENT) {
if (event_type == XmlPullParser.START_TAG) {
tag = xpp.getName();
if(tag.equals("facility_name")) {
bfacility_name = true;
}
if(tag.equals("latitude")) {
blatitude = true;
}
if(tag.equals("longitude")){
blongitude = true;
}
} else if (event_type == XmlPullParser.TEXT) {
if(bfacility_name == true){
facility_name = xpp.getText();
bfacility_name = false;
} else if(blatitude == true){
latitude = xpp.getText();
blatitude = false;
}else if(blongitude ==true){
longitude = xpp.getText();
blongitude = false;
}
} else if (event_type == XmlPullParser.END_TAG) {
tag = xpp.getName();
if (tag.equals("row")) {
MapPoint entity = new MapPoint();
entity.setName(facility_name);
entity.setLatitude(Double.valueOf(latitude));
entity.setLongitude(Double.valueOf(longitude));
mapPoint.add(entity);
System.out.println(mapPoint.size());
}
}
event_type = xpp.next();
}
System.out.println(mapPoint.size());
return mapPoint;
}
private String getURLParam(String search){
String url = "http://apis.data.go.kr/1741000/CivilDefenseShelter2/getCivilDefenseShelterList?ServiceKey=" + ServiceKey + "&type=xml&pageNo=1&numOfRows=300&flag=Y";
return url;
}
public static void main(String[] args) {
new ShelterApi();
}
}
λν κ°λ° λ¬Έμλ₯Ό 보면 μμ² λ©μΈμ§μ defailt κ°λ€μ type = xml, pageNo = 1, numOfRows = 10μΈ κ²μ νμΈν μ μλ€. μ΄ λ§μ url λΆλΆμ target κ°μ λ³κ²½ μ ν΄μ£Όλ©΄ xml νμμΌλ‘ 1νμ΄μ§μ 10κ° μ λμ λ°μ΄ν°λ§ μΆλ ₯λκΈ° λλ¬Έμ
target κ°μ λ³κ²½ν΄ μ£Όμ΄μΌ νλ€. (μμ μ½λλ xmlνμμΌλ‘ νμ± νμ¬ 300κ°μ λ°μ΄ν°λ₯Ό 1νμ΄μ§μ μΆλ ₯νκ³ μλ€.)
3. μ§λμ νμ± ν κ²°κ³Ό λ§μ»€λ‘ νμνκΈ°
κ·ΈλΌ μ΄μ νμ±ν κ²°κ³Όλ₯Ό λ§μ»€λ‘ νμν΄μ£Όλ©΄ λλ€.
μ°μ λ€μ€ λ§μ»€μμΌλ‘ ꡬνμ ν΄μΌ νκΈ° λλ¬Έμ νμ±ν κ²°κ³Όλ₯Ό forλ¬Έμ ν΅ν΄ ꡬνμ νμλ€.
MainActivity.java
package dev.sungmin.Shelter;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.LinearLayout;
import android.location.Location;
import com.skt.Tmap.TMapGpsManager;
import com.skt.Tmap.TMapView;
import com.skt.Tmap.TMapMarkerItem;
import com.skt.Tmap.TMapPoint;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements TMapGpsManager.onLocationChangedCallback {
private boolean TrackingMode = true;
private TMapView tMapView = null;
private TMapGpsManager tmapgps = null;
private static String TMapAPIKey = "μ±";
@Override
public void onLocationChange(Location location) {
if (TrackingMode) {
tMapView.setLocationPoint(location.getLongitude(), location.getLatitude());
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
LinearLayout linearLayoutTmap = (LinearLayout) findViewById(R.id.linearLayoutTmap);
tMapView = new TMapView(this);
tMapView.setHttpsMode(true);
//λ°κΈ λ°μ APIν€ λ³΄μμ λ¬Έμ λ‘ μΈνμ¬ κΉνλΈ μ»€λ°μ μ§μμ 컀λ°ν κ²!
tMapView.setSKTMapApiKey(TMapAPIKey);
linearLayoutTmap.addView(tMapView);
setUpMap();
/*νμ¬ λ³΄λ λ°©ν₯μΌλ‘ μ€μ */
tMapView.setCompassMode(true);
/*ν μμΉ μμ΄μ½ μ€μ */
tMapView.setIconVisibility(true);
tMapView.setZoomLevel(15);
tMapView.setMapType(TMapView.MAPTYPE_STANDARD);
tMapView.setLanguage(TMapView.LANGUAGE_KOREAN);
tmapgps = new TMapGpsManager(MainActivity.this);
tmapgps.setMinTime(1000);
tmapgps.setMinDistance(5);
tmapgps.setProvider(tmapgps.NETWORK_PROVIDER); //λ€νΈμν¬μμ κ°μ Έμ΄
tmapgps.OpenGps(); //κ°μμΌλ‘ ν
μ€νΈμ μ΄λΆλΆμ μ§μμ£Όμ΄μΌ μ€λ₯κ° μμ
tMapView.setTrackingMode(true);
tMapView.setSightVisible(true);
}
private void setUpMap() {
ShelterApi parser = new ShelterApi();
ArrayList<MapPoint> mapPoint = new ArrayList<MapPoint>();
try {
mapPoint = parser.apiParserSearch();
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i < mapPoint.size(); i++) {
for (MapPoint entity : mapPoint) {
TMapPoint point = new TMapPoint(mapPoint.get(i).getLatitude(), mapPoint.get(i).getLongitude());
TMapMarkerItem markerItem1 = new TMapMarkerItem();
markerItem1.setPosition(0.5f, 1.0f);
markerItem1.setTMapPoint(point);
markerItem1.setName(entity.getName());
tMapView.setCenterPoint(mapPoint.get(i).getLongitude(), mapPoint.get(i).getLatitude());
tMapView.addMarkerItem("markerItem1" + i, markerItem1);
}
}
}
}
* κ²°κ³Ό
μμ μ½λλ₯Ό ν΅ν΄ ꡬν μ μλμ κ°μ μ¬μ§μΌλ‘ ꡬλλ¨μ νμΈν μ μλ€.
Comments