2008/10/8 水曜日 by kouichi
そんなことが必要な今日この頃です。
こちらを参考にコーディングしました。
基点となる地点:lat,lon
距離:dis
確度(真北が0):tc
単位はすべてラジアン
double la=Math.asin(Math.sin(lat)*Math.cos(dis)+Math.cos(lat)*Math.sin(dis)*Math.cos(tc));
double lo=lon;
if (Math.cos(lat)!=0){
lo=(lon-Math.asin(Math.sin(tc)*Math.sin(dis)/Math.cos(lat))+Math.PI) % (2*Math.PI) -Math.PI;
}
というところです。
距離のラジアンて?
地球の平均半径は6371kmということなので、10kmだと10÷6371ということになります。
確度のラジアンて?
真北が0°、真南が180°になりますが、真南なら180×π÷180になります。
ということで、ためしに
東京駅(北緯35度40分53秒、東経139度46分03秒)から6キロ真北は、北緯35度44分07秒、東経139度46分03秒
こちらで調べてみると5.979と21m誤差が。
これは地球は実際は楕円球なので「地球の平均半径は6371km」だと誤差が生じるわけです。
でも、一応式はあってそうなので、今日はここまで。
Posted in Java | 1 Comment
2008/10/2 木曜日 by kouichi
久々に仕事でJavaを使っています。
WebアプリだとPHPの要件が多かったのですが、現在はJavaでコーディングです。
PHPもJavaもeclipseでコーディングしているのですが、元々はJavaのIDEなので、PHPは若干使いづらかったです。
例えば、PHPでは
・閉じ括弧が閉じられない時がある
・エラーがわからない
・宣言の参照元が開けない
などなど
やっぱりJavaがいいですよ。
Posted in Java | No Comments
2008/7/1 火曜日 by kouichi
Exceptionのスタックトレースを文字列に落としたい。
ということがたまにあります。
例えばNullPointerExceptionだと
}catch(Exception ex){
System.out.println(ex.toString());
System.out.println(ex.getMessage());
System.out.println(ex.getLocalizedMessage());}の場合結果はそれぞれ
java.lang.NullPointerException
null
nullになるのでトレース情報まで取得できません。
方法としてはException(実際にはThrowable)のprintStackTrace(PrinterWriter)を使います。
/**
* スタックトレース文字列を取得する
* @param throwable
* @return
*/
public static final String getStackTrace(Throwable throwable){
String value = null;
try{
StringWriter sw = null;
try{
sw = new StringWriter();
throwable.printStackTrace(new PrintWriter(sw));
value = sw.toString();
}finally{
if(sw!=null){
sw.close();
sw = null;
}
}
}catch(Exception ex){
value = throwable.getMessage();
}
return value;
}このような感じです。
Posted in Java | No Comments