2014年4月2日水曜日

Google Maps API をとりあえず使う

Google Maps APIのサンプルを作ったのでメモ。
とりあえず動くものにしてある。
おもしろそうな機能があれば更新する予定。
文字コードはUTF-8にすること。

■GoogleMapsAPIサンプル.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps API サンプル</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=places&sensor=false&language=ja"></script>
<script type="text/javascript" src="js/map.js"></script>
</head>
<body>
<p>Google Maps APIを使ったサンプルです。</p>
X座標:<input type="text" id="locationX" value="35.709984" />&nbsp;
Y座標:<input type="text" id="locationY" value="139.810703" />&nbsp;
<input type="button" onClick="mapCreate(map_canvas, latlng, locationX, locationY);" value="地図表示" />&nbsp;
<input type="button" onClick="mapUpdate(locationX.value, locationY.value);" value="地図更新" /><br />
住所:<input type="text" id="address" />&nbsp;
<input type="button" onClick="setLatlngZip(address.value, locationX, locationY);" value="座標取得" /><br />
キーワード:<input type="text" id="keyword" />&nbsp;
<input type="button" onClick="setLatlngKeyword(keyword.value, locationX, locationY);" value="座標取得" /><br />
<div id="map_canvas" style="width:500px; height:300px"></div>
<p id="latlng"></p>
</body>
</html>


■js/maps.js
var map=null;
var marker=null;
var latlngLabel=null;
var locationXText=null;
var locationYText=null;

// マップの作成
function mapCreate(canvasObject, latlngLabelObject, positionX, positionY) {
// 座標を設定
var latlng = new google.maps.LatLng(positionX.value, positionY.value);
locationXText = positionX;
locationYText = positionY;
// マップオブジェクトのオプションを設定
var opts = {
zoom: 15,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// マップを作成し、対象のオブジェクトへ描画
map = new google.maps.Map(canvasObject, opts);
// マーカーを作成
markerCreate();
// 情報ウインドウを作成
infoWindowCreate();
// 地図のドラッグイベントに各座標を表示
latlngLabel = latlngLabelObject;
google.maps.event.addListener(map, 'drag', dispLatLng);
return;
}

// マップの座標更新
function mapUpdate(positionX, positionY) {
if(map != null) {
var latlng = new google.maps.LatLng(positionX, positionY);
// マップの座標更新
map.setCenter(latlng);

// マーカーの再作成
markerCreate();

// 情報ウインドウの再作成
markerCreate();
}
return;
}

// ドラッグ時に座標を表示
function dispLatLng(latlngObject){
var latlng = map.getCenter();
var str = "[中心座標]=[" + latlng.lat() + ", " + latlng.lng() + "]<br />";

var latlngBounds = map.getBounds();
var swLatlng = latlngBounds.getSouthWest();
str = str + "[南西端座標]=[" + swLatlng.lat() + ", " + swLatlng.lng() + "]<br />";

var neLatlng = latlngBounds.getNorthEast();
str = str + "[北東端座標]=[" + neLatlng.lat() + ", " + neLatlng.lng() + "]";
locationXText.value = latlng.lat();
locationYText.value = latlng.lng();

latlngLabel.innerHTML = str;
return;
}

// マーカーを作成
function markerCreate() {
var latlng = map.getCenter();
if(marker != null) {
marker.setMap(null);
}
marker = new google.maps.Marker({
position: latlng,
map: map,
clickable : true
});
}

// 情報ウインドウを作成
function infoWindowCreate() {
var latlng = map.getCenter();
var iwopts = {
content: 'Hello',
position: latlng
};

var infowindow = new google.maps.InfoWindow(iwopts);
    infowindow.open(map);

}

// 住所から座標を取得
function setLatlngZip(address,locationX, locationY) {
//ジオコードオブジェクト
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
address: address,
region: 'jp'
},
function(results, status){
if(status==google.maps.GeocoderStatus.OK){
//処理
locationX.value = results[0].geometry.location.lat();
locationY.value = results[0].geometry.location.lng();
}
});
}

// キーワードから座標を取得
function setLatlngKeyword(keyword,locationX, locationY) {
// 位置情報オブジェクト
var service = new google.maps.places.PlacesService(map);
service.textSearch({
location: map.center,
radius: '500',
query: keyword
},
function(results, status){
if(status==google.maps.places.PlacesServiceStatus.OK){
//処理
locationX.value = results[0].geometry.location.lat();
locationY.value = results[0].geometry.location.lng();
}
});
}

2013年9月8日日曜日

jQuery入門

Webシステムの開発で欠かせないのがJavaScript。
さらに発展した使い方をしたいときはjQueryを使うことが多いなーと感じる。
半分フレームワークだし、あまり好きではないけど便利なものは使わないともったいない。
ということでjQueryの入門。
※これも随時更新の予定

jQuery日本語リファレンス

jQuery事始め・コピペに頼らず、基礎知識を理解して実際に動かしてみる

2013年9月3日火曜日

PHPの基本

PHPを本格的にはじめそうなので、入門サイトのリンクをはっておく。
※随時追加予定

PHP入門

別のPHP入門

PHP 5.3.x から PHP 5.4.x への移行


2013年9月2日月曜日

PostgreSQLのチューニング情報

VACUUM FULL(データベースの最適化)をしても性能が向上しない現象が発生した。
原因は、統計精度が小さすぎることで、統計情報が荒くなって性能が低下するという現象が起きていた。

PostgreSQLのバージョン8.1で、postgresql.confのdefault_statistics_target(統計精度)がデフォルトで10になっていた。(8.4以降はデフォルトが100)
10では大きなテーブルでは統計情報が荒くなる。

対策は、統計精度を拡張することだが、default_statistics_targetを単純に増やしてしまうと
VACUUMの処理時間が長くなる。
よって、性能が低下しているSQLで参照しているテーブル、カラムを個別に拡張することが効果的だと思われる。
設定方法は以下の通り。
 ALTER TABLE テーブル名 ALTER COLUMN カラム名 SET STATISTICS 200;

上記設定が適用されるのはVACUUM実行時。
早くなるのは、統計精度を拡張したカラムを条件としたSELECTのみ。
統計精度が関係ないカラムのSELECTやINSERTには何の影響もない

履歴テーブルから各IDの最新レコードを取得する方法(PostgreSQL)

PostgreSQL8.4 以降に限るが、分析関数を使用すると以下のように取得することができる。
   OVER (PARTITION BY ...) : 区間に分割
   OVER (ORDER BY ...) : 区間ごとに並び替え

select * from (
 select *,
        row_number() over(partition by code order by kaiteiymd desc) as rowNo
 from history
) list
where rowNo = 1

Firefox・ThunderBirdの移行方法


======================================
Firefoxのデータ移行手順
======================================
※実行前に移行元・先のFirefoxを停止しておくこと

1.以下のプロファイル情報を移行元からコピーする
 WinXPの場合
  C:\Documents and Settings\ユーザー名\Application Data(隠しフォルダ)\Mozilla\Firefox\Profiles\任意の英数字.default
 
 Win7の場合
  C\Users\ユーザー名\Appdata(隠しフォルダ)\Roaming\Mozilla\Firefox\Profiles\任意の英数字.default

2.移行先の同様のフォルダ(~\Firefox\Profiles)に設置する
3.移行先の「任意の英数字.default」をコピーしておき、持ってきたファイルの名称を同じに変える

======================================
ThunderBirdのデータ移行手順
======================================
※実行前に移行元・先のThunderBirdを停止しておくこと

1.以下のプロファイル情報を移行元からコピーする
 WinXPの場合
  C:\C:\Documents and Settings\ユーザー名\Application Data(隠しフォルダ)\Thunderbird\Profiles\任意の英数字.default
 
 Win7の場合
  C:\Users\ユーザー名\Appdata(隠しフォルダ)\Roaming\Thunderbird\Profiles\任意の英数字.default

2.移行先の同様のフォルダ(~\Thunderbird\Profiles)に設置する
3.移行先の「任意の英数字.default」をコピーしておき、持ってきたファイルの名称を同じに変える

Windows7でクイックランチャ・送る

Windows7でXPみたいにクイックランチャを使用する方法。
右クリック→「送る」 に追加する方法も一緒に記載する。


【クイックランチャ表示】
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
上記を新規ツールバーで追加する。
追加したツールバーを右クリックし、「ボタン名の表示」・「タイトルの表示」のチェックを外す。

【「送る」の追加先】
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo