2012-04-24 2 views
3

서버에서 (x, y) 좌표가 필요하므로 선 그래프가 필요한 Android 앱을 만들고 있습니다.네트워크에서 (x, y) 좌표를 많이 보내는 방법은 무엇입니까?

우리는 Heroku와 함께 Ruby on Rails를 사용하여 백엔드를 구축하고 있습니다 (Google AppEngine도 고려하고 있지만).

네트워크를 통해 수백 (x, y) 좌표 (Android에서 JSON으로 인코딩 됨)를 전송하는 가장 좋은 방법은 무엇입니까?

+0

한 줄이면 _two_ (x, y) 좌표 만 필요합니다. 맞습니까? – paislee

+1

[스택 오버플로는 개인 연구 비서가 아닙니다] (http://meta.stackexchange.com/a/128553/172496) –

+1

이것은 수백 개의 포인트가있을 수있는 선 그래프입니다. 이처럼 http://www.mathgoodies.com/lessons/graphs/images/line_example1.jpg – BinRoot

답변

6

대역폭에 많은 관심이있는 경우 좌표를 이진 형식으로 채 웁니다. 예를 들어, (x, y)의 2 차원 그리드가 32 비트 정수로 좌표한다고 가정합니다. 루비 사용 : 당신이 라인 차트를 생성하고 있기 때문에

points = [[107897,598654], [876432,30001], [15,754689]] 
# => [[107897, 598654], [876432, 30001], [15, 754689]] 

# json size 
points.to_json.length 
# => 44 

# make a byte stream of points 
data = points.flatten.pack("V*") 
# => "y\xA5\x01\x00~\"\t\x00\x90_\r\x001u\x00\x00\x0F\x00\x00\x00\x01\x84\v\x00" 

# binary size 
data.length 
# => 24 

# read a byte stream to points 
points = data.unpack("V*").each_slice(2).to_a 
# => [[107897, 598654], [876432, 30001], [15, 754689]] 
+1

정수가 16 비트 내부에 항상 들어 있으면 작은 팩 형식을 사용하십시오. 분명히 각각의 32 비트 정수는 1000 바이트 이하의 공간에서도 4 바이트의 공간을 소비합니다. ASCII에서는이 공간이 더 적습니다. – d11wtq

+1

인코딩하기 전에 값을 검사하여 적합한 팩 형식을 선택할 수도 있습니다. 문제는 그 때 바이트 압축을 푸는 방법을 알고 있습니다. 초보적인 접근법은 스트림에 1 바이트 헤더를 추가하는 것으로 열거 형을 나타내며, 0 = 8 비트, 1 = 16 비트, 2 = 24 비트, 3 = 32 비트라고합니다. 바이트를 읽었 으면 그에 따라 나머지 문자열의 압축을 풉니 다. – d11wtq

0

아마도 가장 좋은 방법은 JSON 또는 XML으로 인코딩하는 것입니다.

0

나는 루비 경험이 없지만 개행 문자로 구분 된 좌표를 XML로 (아마도 루비 스크립트의 각 좌표에 대해 <coordinate use='errorbar'>1,2</coordinate> 행을 따라) 순서대로 보낼 수 있으며, 당신에게 XML 출력, 배열의 항목으로 각 라인을 얻을 것이다

public static String[] download(String web_url) throws IOException{ 
    URL website = new URL(web_url); 
    BufferedReader in = new BufferedReader(
       new InputStreamReader(
       website.openStream())); 
    String input; 
    ArrayList<String> stringList = new ArrayList<String>(); 
    while ((input = in.readLine()) != null) { 
     stringList.add(input); 
    } 
    String[] itemArray = new String[stringList.size()]; 
    String[] returnedArray = stringList.toArray(itemArray); 
    return returnedArray; 
} 
// Of course, call this function with web_url as the URL to your script 

을, 그리고 당신은 바로 XML을 구문 분석 할 수 있습니다 및 사용하여 안드로이드에 결과를 다운로드합니다. 추가 데이터가 필요 없다는 것이 확실하다면 XML을 구문 분석 할 필요없이 일반 텍스트로 보낼 수 있습니다.

1

을, 당신은 구글 차트 서비스의 간단한에서 영감을 먹고 싶어하고 text encodings을 확장 할 수도 있습니다. 주요 테이크 어웨이는 실제 값을 전송할 필요가 없다는 것입니다. 그들의 상대적인 가치와 한계.

관련 문제