2012-04-24 11 views
3

折れ線グラフが必要なAndroidアプリを作っているので、サーバーから(x、y)座標が必要です。ネットワーク上でたくさんの(x、y)座標を送信する方法は?

私たちは、Ruboku on Rails with Herokuを使ってバックエンドを構築しています(ただし、Google AppEngineも検討していますが)。

ネットワーク上で数百(x、y)の座標(JSON?でエンコードされています)をAndroidデバイスに送信する最良の方法は何ですか?

+0

もしそれが1行だとすると、_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-dグリッドが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バイトのスペースを消費します。 – d11wtq

+1

エンコードする前に値をイントロスペクションして、適切なパック形式を選択することもできます。問題はバイトを解凍する方法を知っていることです。基本的なアプローチは、ストリームに1バイトのヘッダを付加することであり、これは列挙型、例えば0 = 8ビット、1 = 16ビット、2 = 24ビット、3 = 32ビットを表す。そのバイトを読み込んだら、それに応じて残りの文字列を展開します。 – d11wtq

0

JSONまたはXMLでエンコードするのが最善の方法です。

0

私はルビーの経験はありませんが、改行で区切られた座標を、XMLで(おそらく、ルビスクリプト内の各座標に対して<coordinate use='errorbar'>1,2</coordinate>の行に沿って)配列のエントリとしてあなたのXML出力は、各ラインを取得し、その後、あなただけの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を解析する必要がなくプレーンテキストで送ることができます。

1

を、あなたは、Googleのチャートサービスの単純なものからインスピレーションを取りたいとtext encodingsを延長することがあります。主なテイクアウトは、実際の値を送信する必要はないということです。それらの相対的な値と限界値だけです。

関連する問題