twitter連携テスト
テスト投稿。
viewでエスケーピングしたくない場合。
// in action <?php $this->hoge = array('<a>foo</a>');
// in template <?php echo $hoge->getRaw(0);
genURL()でQueryStringをパス形式にしたくない場合
id:bucci-r に教えてもらった。
symfonyってデフォルトだと以下のようなクエリストリングをつける場合
?a=A&b=B
/a/A/b/B
ってしちゃうんだよね。これを普通にクエリストリングで渡すことができるっぽい!
extra_parameters_as_query_string in factories.yml
ただハマリどころが一点あって、ここにも書いているように
ルート生成に使われていないパラメーターをクエリ文字列に変換することが可能です。
とあります。これって以下が該当するんだよね。
routings.yml
default: url: /:module/:action/*
これがデフォルトだと必ず書いてあるので、上のアスタリスクのせいで、必ずルート生成に利用されちゃう。
"*" を取ってあげると希望する動きになるっぽい!
thx!! id:bucci-r
ControllerのURI PATHのPrefixにごにょごにょしたい場合
Reverse Proxy経由で複数のapplicationを動かしたいってことは良くあると思うんだが、
その時に http://example.com/application -> http://application.backend.local/ みたいな事をすると、
PATHがfrontendとbackendで異なるのでめんどくさい事がある。よね?
thx!! id:bucci-r
PostGISを使う
http://d.hatena.ne.jp/kopug/20091011/1255240821
上記のエントリでPostGISのインストールについて書いたが、今度は実際に使ってみる
やりたい事としては以下のとおり
- 携帯のGPSから緯度、経度を取得し、近隣(半径200m以内)の店舗を検索する
- 近い順にソートをして一覧を出す
1. DBの作成
$ createdb -U postgres -T template_postgis geomanse
2. テーブルの作成 (※1)
$ psql -U postgres geomanse CREATE TABLE SAMPLE (id serial); SELECT AddGeometryColumn('sample', 'point', 4326, 'POINT', 2);
3. データを突っ込む
東京都港区芝公園4丁目2−8の緯度、経度を突っ込む場合(WGS84) GeomFromText('POINT(35.658671 139.7454)', 4326)
INSERT INTO SAMPLE (point) VALUES (GeomFromText('POINT(35.658671 139.7454)', 4326));
4. 任意の緯度、経度からの距離を求める
SELECT ST_Distance(point, GeomFromText('POINT(35.681382 139.766084)', 4326)) FROM SAMPLE;
ただこの単位だと度になっていると思われるので、メートルにする場合はまた次回で。
位置情報をSQLでごにょごにょ検索する
位置情報を扱うサービスで求められる要件に以下のようなのが良くあります。
- 現在地から半径○○mに登録されている店舗情報を取得
- 上で取得した結果を近い順に表示する
これをまともに自力でやろうとするとめんどくさいので、
PostgreSQL拡張のPostGisを使ってあげます。
下記のリポジトリを事前に追加してください。
http://d.hatena.ne.jp/kopug/20080824/1219541381
1. PostGisをインストールする
$ sudo yum install postgis
====================================================================================================== Package Arch Version Repository Size ====================================================================================================== Installing: postgis x86_64 1.3.6-1.rhel5 pgdg84 1.0 M Installing for dependencies: geos x86_64 3.1.0-1.el5.rf rpmforge 265 k geos-devel x86_64 3.1.0-1.el5.rf rpmforge 4.8 M proj x86_64 4.6.1-1.rhel5 pgdg84 172 k Transaction Summary ====================================================================================================== Installed: postgis.x86_64 0:1.3.6-1.rhel5 Dependency Installed: geos.x86_64 0:3.1.0-1.el5.rf geos-devel.x86_64 0:3.1.0-1.el5.rf proj.x86_64 0:4.6.1-1.rhel5 Complete!
2. PostgreSQLの再起動
$ sudo /sbin/service postgresql restart
3. テンプレートDBの作成と関数の作成
$ createdb -U postgres template_postgis $ createlang -U postgres plpgsql template_postgis $ psql -U postgres -d template_postgis -f /usr/share/pgsql/contrib/lwpostgis-64.sql $ psql -U postgres -d template_postgis -f /usr/share/pgsql/contrib/lwpostgis_upgrade-64.sql $ psql -U postgres -d template_postgis -f /usr/share/pgsql/contrib/postgis_comments.sql $ psql -U postgres -d template_postgis -f /usr/share/pgsql/contrib/spatial_ref_sys.sql
4. PostGisの関数を利用したい場合DBを作成する場合はテンプレート指定で
$ createdb -U postgres -T template_postgis <DB NAME>
こうすることでDB毎にfunctionの読み込みをしなくてすみます。
正常にできたかどうかを確認するってことで、以下のSQLを流して見ましょう。
$ psql -U postgres -c "SELECT postgis_version();" <DB NAME> postgis_version --------------------------------------- 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1 (1 row)
インストールと設定はこんな感じです。
実際の利用方法については、以下のサイトで丁寧に書かれていました。
http://bubble.atnifty.com/modules/bwiki/PostGIS.html