희소 공간 맵 삭제
EasyAR은 더 이상 필요하지 않은 공간 맵 데이터를 처리하는 두 가지 방법을 제공합니다: 영구 삭제와 임시 비활성화. 프로덕션 환경의 안정성을 보장하기 위해 다음 운영 지침을 주의 깊게 읽어보시기 바랍니다.
Easyar 웹을 통한 삭제
- EasyAR 개발 센터에 로그인 -> SpatialMap -> 해당 맵 라이브러리 선택 -> 관리 클릭하여 맵 라이브러리 관리 페이지로 이동합니다.
- 공간 맵 상세 페이지로 들어가 페이지 내 삭제 버튼을 클릭합니다.

베스트 프랙티스: 임시 비활성화
대부분의 비즈니스 시나리오에서 특정 맵을 미래에 다시 사용할지 확실하지 않다면, 삭제 대신 비활성화를 사용하는 것이 좋습니다.
- 기능 특징: 비활성화된 공간 맵은 데이터베이스 목록에 유지되지만 인식 및 위치 지정 과정에 참여하지 않습니다. 다만 인식 할당량은 차지합니다.
- 비활성화 방법: 관리 페이지에서 맵을 선택하고 비활성화를 클릭합니다.

- API 비활성화: Spatial Map 업데이트 API 호출을 통해
status속성을inactive로 설정합니다.
API를 사용한 삭제
REST API를 통해 희소 공간 맵의 자동화된 정리가 가능합니다.
사전 준비
시작 전 Spatial Map 삭제 API 문서를 읽고 다음 리소스를 준비하세요:
- Spatial Map AppId
- API Key / Secret 또는 Token
- Cloud URL
- 중국 및 동남아 사용자:
https://armap-api.easyar.com - 기타 사용자:
https://armap-api-na1.easyar.com
- 중국 및 동남아 사용자:
- MapId: 삭제할 맵의 고유 ID. MapId가 존재하지 않을 경우 API는
Http Status 404를 반환합니다.
아래 자리 표시자를 실제 파라미터로 대체하고 curl 스크립트를 실행하세요
- Your-Cloud-URL → 실제 API URLs
- Your-Token → 실제 API Key Authorization Token
- Your-SpatialMap-AppId → 당신의 appId
- Your-todo-MapId → 삭제할 MapId
curl -X DELETE "https://armap-api-<cn1|na1>.easyar.com/map/<Your-todo-MapId>?appId=<Your-SpatialMap-AppId>" \
-H "Content-Type: application/json" \
-H "Authorization: <Your-Token>"
Java 예제 코드 다운로드
Maven 방식으로 프로젝트 가져오기
Step 1. 코드 예제 RemoveMap.java 열기
Step 2. 전역 변수 수정, 준비 목록의 인증 매개변수로 대체
- SpatialMap AppId
- API Key / API Secret
- Cloud URL
RemoveMap.java
import okhttp3.*;
import org.json.JSONObject;
import java.io.IOException;
import java.util.Set;
public class RemoveMap {
private static final String CLOUD_URL = "https://armap-api-<cn1|na1>.easyar.com";
private static final String SPATIALMAP_APPID= "--here is your SpatialMap AppId--";
private static final String API_KEY = "--here is your API Key--";
private static final String API_SECRET = "--here is your API Secret--";
private static final String MAPID = "my_mapId";
public String remove(Auth auth, String mapId) throws IOException {
okhttp3.Request request = new okhttp3.Request.Builder()
.url(auth.getCloudURL()+"/map/"+mapId+"?"+ Auth.toParam(
Auth.signParam(new JSONObject(), auth.getAppId(), auth.getApiKey(), auth.getApiSecret())
))
.delete()
.build();
return new OkHttpClient.Builder().build().newCall(request).execute().body().string();
}
public static void main(String[] args) throws IOException{
Auth accessInfo = new Auth(SPATIALMAP_APPID, API_KEY, API_SECRET, CLOUD_URL);
System.out.println(new RemoveMap().remove(accessInfo, MAPID));
}
}
Step 3. Main 실행
Step 1. 예제 코드를 removemap.php에 복사
- 인증 파라미터를 실제 리소스로 수정: Token, appId 및 Cloud URL
- 삭제할 지도 MapId
<?php
class MapDeleteService {
private $baseURL;
private $token;
private $appId;
public function __construct($baseURL, $token, $appId) {
$this->baseURL = $baseURL;
$this->token = $token;
$this->appId = $appId;
}
public function deleteMap($mapId) {
// 쿼리 파라미터 구성
$queryParams = [
'appId' => $this->appId
];
$queryString = http_build_query($queryParams);
$url = $this->baseURL . '/map/' . urlencode($mapId) . '?' . $queryString;
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: ' . $this->token,
'Content-Type: application/json'
],
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30
]);
echo "=== API 요청 ===" . PHP_EOL;
echo "URL: " . $url . PHP_EOL;
echo "Method: DELETE" . PHP_EOL;
echo "Headers: Authorization: " . $this->token . PHP_EOL;
echo "Query Params: " . json_encode($queryParams, JSON_PRETTY_PRINT) . PHP_EOL;
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
echo "=== API 응답 ===" . PHP_EOL;
echo "Status Code: " . $httpCode . PHP_EOL;
echo "Timestamp: " . date('c') . PHP_EOL;
if ($error) {
echo "cURL 오류: " . $error . PHP_EOL;
return null;
}
$responseData = json_decode($response, true);
echo "Response Data: " . json_encode($responseData, JSON_PRETTY_PRINT) . PHP_EOL;
return $responseData;
}
}
$mapId = 'your_map_id_here';
$config = [
'baseURL' => 'https://armap-api-cn1.easyar.com',
'token' => 'your_token_here',
'appId' => 'your_app_id_here'
];
$mapDeleteService = new MapDeleteService($config['baseURL'], $config['token'], $config['appId']);
$result = $mapDeleteService->deleteMap($mapId);
if ($result) {
echo PHP_EOL . "=== 삭제 요청 성공 ===" . PHP_EOL;
if (isset($result['statusCode']) && $result['statusCode'] == 200) {
echo "Result: " . json_encode($result['result'], JSON_PRETTY_PRINT) . PHP_EOL;
}
} else {
echo PHP_EOL . "=== 실패 ===" . PHP_EOL;
}
?>
Step 2. 실행
php removemap.php
새로운 관련 코드 파일 main.go를 생성하고, 전역 변수를 수정한 다음 실행합니다
go run main.go
main.go 파일:
package main
import (
"crypto/sha256"
"fmt"
"io"
"net/http"
"sort"
"strconv"
"time"
)
var (
ApiKey = "YOUR_API_KEY"
ApiSecret = "YOUR_API_SECRET"
AppId = "YOUR_APP_ID"
Host = "https://armap-api-<cn1|na1>.easyar.com"
MapId = "YOUR_MAP_ID"
)
func main() {
ts := strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
params := map[string]string{
"apiKey": ApiKey,
"appId": AppId,
"timestamp": ts,
}
keys := []string{"apiKey", "appId", "timestamp"}
sort.Strings(keys)
builder := ""
for _, k := range keys { builder += k + params[k] }
builder += ApiSecret
signature := fmt.Sprintf("%x", sha256.Sum256([]byte(builder)))
url := fmt.Sprintf("%s/map/%s?apiKey=%s&appId=%s×tamp=%s&signature=%s",
Host, MapId, ApiKey, AppId, ts, signature)
req, _ := http.NewRequest("DELETE", url, nil)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Printf("Response: %s\n", string(body))
}
Cargo.toml에 reqwest, tokio, sha2, hex 의존성을 추가합니다.
cargo run을 실행합니다.
use sha2::{Sha256, Digest};
use std::collections::BTreeMap;
use std::time::{SystemTime, UNIX_EPOCH};
const API_KEY: &str = "YOUR_API_KEY";
const API_SECRET: &str = "YOUR_API_SECRET";
const APP_ID: &str = "YOUR_APP_ID";
const HOST: &str = "https://armap-api-<cn1|na1>.easyar.com";
const MAP_ID: &str = "YOUR_MAP_ID";
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let ts = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis().to_string();
// 1. 서명 구성 요소
let mut params = BTreeMap::new();
params.insert("apiKey", API_KEY);
params.insert("appId", APP_ID);
params.insert("timestamp", &ts);
// 2. 키와 값을 연결하고, 시크릿을 추가합니다
let mut sign_str = String::new();
for (k, v) in ¶ms {
sign_str.push_str(k);
sign_str.push_str(v);
}
sign_str.push_str(API_SECRET);
let mut hasher = Sha256::new();
hasher.update(sign_str.as_bytes());
let signature = hex::encode(hasher.finalize());
// 3. URL을 구성하고 DELETE를 전송합니다
let url = format!("{}/map/{}?apiKey={}&appId={}×tamp={}&signature={}",
HOST, MAP_ID, API_KEY, APP_ID, ts, signature);
let res = reqwest::Client::new().delete(url).send().await?;
println!("응답: {}", res.text().await?);
Ok(())
}
.NET 콘솔 프로젝트 생성.
dotnet new console
dotnet run
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Net.Http;
class Program {
static string API_KEY = "YOUR_API_KEY";
static string API_SECRET = "YOUR_API_SECRET";
static string APP_ID = "YOUR_APP_ID";
static string HOST = "https://armap-api-<cn1|na1>.easyar.com";
static string MAP_ID = "YOUR_MAP_ID";
static async System.Threading.Tasks.Task Main() {
string timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString();
// 1. 매개변수 정렬
var dict = new SortedDictionary<string, string> {
{ "apiKey", API_KEY },
{ "appId", APP_ID },
{ "timestamp", timestamp }
};
// 2. 연결하고 Secret 추가
StringBuilder sb = new StringBuilder();
foreach (var kv in dict) sb.Append(kv.Key).Append(kv.Value);
sb.Append(API_SECRET);
string signature = Sha256(sb.ToString());
// 3. DELETE 요청 실행
using var client = new HttpClient();
string query = string.Join("&", dict.Select(x => $"{x.Key}={x.Value}")) + $"&signature={signature}";
string url = $"{HOST}/map/{MAP_ID}?{query}";
var response = await client.DeleteAsync(url);
Console.WriteLine($"결과: {await response.Content.ReadAsStringAsync()}");
}
static string Sha256(string str) {
byte[] bytes = SHA256.HashData(Encoding.UTF8.GetBytes(str));
return BitConverter.ToString(bytes).Replace("-", "").ToLower();
}
}
- 실행 환경
- Unity 2020 LTS 이상 버전
- Scripting Backend: Mono 또는 IL2CPP 모두 가능
- API Compatibility Level: .NET Standard 2.1 (권장)
Step 1: 이미지 파일 준비
- Unity 프로젝트에 디렉토리 생성:
Assets/
└── Scripts/
└── DeleteMap.cs
- Assets 디렉토리명에 따라
- 아래 예제 코드 DeleteMap.cs 복사
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class DeleteMap : MonoBehaviour
{
[Header("Config")]
public string mapId = "Your mapId";
public string apiBaseUrl = "https://armap-api-<cn1|na1>.easyar.com";
public string authorizationToken = "YOUR API KEY AUTH TOKEN";
public string spatialMapAppId = "Your Spatial Map appId";
private void Start()
{
StartCoroutine(DeleteAMap());
}
private IEnumerator DeleteAMap()
{
string url =
$"{apiBaseUrl}/map/{mapId}?appId={spatialMapAppId}";
UnityWebRequest request = UnityWebRequest.Delete(url);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Authorization", authorizationToken);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log("Delete map success:");
Debug.Log(request.downloadHandler.text);
}
else
{
Debug.LogError("Delete map failed:");
Debug.LogError(request.error);
Debug.LogError(request.downloadHandler.text);
}
}
}
- Unity Editor에서:
- 빈 GameObject 생성
- 이름을 DeleteMap으로 지정
- DeleteMap 스크립트를 해당 객체에 드래그
Step 3: 파라미터 설정 (Inspector)
Inspector 패널에서 수정:
- Api Url
- Authorization Token
- Spatial Map App Id
- Map Id : 삭제할 맵의 mapId
이 항목들만 수정 후 실행, 준비된 파라미터 입력
Step 4: 실행
- Play 버튼 클릭
- Console에서 결과 확인:
- 성공: JSON 반환 (result 포함)
- 실패: HTTP/오류 메시지
관련 주제: