OPenLayersでVectorのPointにアイコン設定
OpenLayersにはMarkerがあり、ポイントをアイコンで表示する時に非常に便利に使える。
同様にVectorにもPointがあり、これにもアイコンが設定できそう。
とりあえずリンク
http://gis.stackexchange.com/questions/33141/change-icon-of-single-vector-feature-in-layer
http://www.codechewing.com/library/add-external-graphic-icon-to-geometry-point-openlayers/
http://www.codechewing.com/demo/add-icon-to-geometry-point-openlayers/
OpenLayers タイルサーバー
以下もとりあえず、リンク
http://www.finds.jp/docs/tms/index.html.ja
OpenLayersのクラスター表示
以下はリンク集、今後まとめる
http://openlayers.org/dev/examples/strategy-cluster-threshold.html
http://openflights.org/blog/2009/10/21/customized-openlayers-cluster-strategies/
http://openlayers.org/dev/examples/strategy-cluster-extended.html
http://openlayers.org/dev/examples/strategy-cluster.html
http://stackoverflow.com/questions/6641919/openlayers-nice-marker-clustering
http://openlayers.org/dev/examples/strategy-cluster.html
OpenLayersの地図ドラッグでスクロールしすぎ!
OpenLayersの地図をdrug panすると、暫くスクロールが続いて予想以上はなれた位置まで飛んでしまう。
これを防ぐ方法はいかのようにenableKineticを無効にする
map_canvas = new OpenLayers.Map(id_map, { controls: [] });
map_canvas.addControl(new OpenLayers.Control.Navigation(dragPanOptions: {enableKinetic: false}}));
※上記の記述ではNavigation以外の全てのコントロールが無効になるため必用なコントロールを適時追加
map_canvas = new OpenLayers.Map(id_map, { controls: [] });
map_canvas.addControl(new OpenLayers.Control.Navigation({mouseWheelOptions: {interval: 1000},dragPanOptions: {enableKinetic: false}}));
//map_canvas.addControl(new OpenLayers.Control.DradPan({interval: 0}));
map_canvas.addControl(new OpenLayers.Control.PanZoomBar());
map_canvas.addControl(new OpenLayers.Control.KeyboardDefaults());
OpenLayersの円の半径
半径100mの円を表示
GoogleMap
var p = new google.maps.LatLng(y,x);
var options = {
clickable: false,
strokeColor: "#FF0000",
strokeOpacity: 1.0,
strokeWeight: 4,
fillOpacity: 0.0,
center: p,
radius: Number(100)
};
var circle = new google.maps.Circle(options);
circle.setMap(get_map());
OpenLayers(その1)
var style = {
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWidth: 5,
fillOpacity: 0
};
var lonlat = layer_lonlat_to_map_lonlat(x, y);
var circle = OpenLayers.Geometry.Polygon.createRegularPolygon
(
new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat),
100,
20,
0
);
var feature= new OpenLayers.Feature.Vector(circle, null, style);
layer_vector.addFeatures(feature);
何か半径が違う!
OpenLayers(その2)
以下にしたがって各頂点の座標を求めてVectorとして表示
var apex = 40;
var latlon = new OpenLayers.LonLat(x, y);
var angle;
var new_lonlat;
var points = [];
for (var i = 0; i < apex+1; i++) {
angle = (i * 360 / apex) + 0;
new_lonlat = OpenLayers.Util.destinationVincenty(latlon, angle, radius);
points.push([new_lonlat.lon, new_lonlat.lat]);
}
黒い円(ちょっと切れているが)

どうやら、こちらのほうがよい。
OpenLayers.Util.destinationVincentyは測地線からの距離と角度を指定して座標を求めるらしい。
今度、値を確認しよう
EPPlus ExcelPackage を使用してグラフの載ったExcelのWorksheetをコピー
EPPlus ExcelPackage を使用してExcelのWorksheetを行うにはExcelWorksheetsの関数Copyを使用する
string dstName = “新しいシート”;
ExcelPackage ep = new ExcelPackage(new FileInfo(@”c:\public\template.xlsx”));
string srcName = ep.Workbook.Worksheets[1].Name;
ep.Workbook.Worksheets.Copy(srcName, dstName);
コピー対象のWorksheetにグラフがなければ上記の方法でコピー可能。
Worksheet上にグラフがあるとグラフ上のオブジェクトの参照先が
EPPlus ExcelPackage を使用してExcelのWorksheetを削除
シート名を指定して削除
ExcelPackage ep = new ExcelPackage(new FileInfo(@"c:\public\book1.xlsx"));
ExcelWorksheet ws = ep.Workbook.Worksheets[シート名];
ws.WorksheetXml.RemoveAll();
ep.Workbook.Worksheets.Delete(ws);
ep.SaveAs( new FileInfo (@"c:\public\book1.xlsx"));
シートポジション(※先頭が1)を指定して削除
ExcelPackage ep = new ExcelPackage(new FileInfo(@"c:\public\book1.xlsx"));
string name = ep.Workbook.Worksheets[シートポジション].Name;
ExcelWorksheet ws = ep.Workbook.Worksheets[name];
ws.WorksheetXml.RemoveAll();
ep.Workbook.Worksheets.Delete(ws);
gettextを使用してPHPを多国語対応(windows版)
gettextは様々な環境、言語に対応した多国語対応のライブラリ。
PHPも拡張機能として標準で提供されている。
※PHPのextディレクトリにあるphp_gettext.dllが実装
※php.iniのphp_gettext.dllのコメントを予め外して置く
※PHPファイルはUTF-8に設定
カタログファイルについて
gettextでは各言語ごとに辞書ファイル(gettextではカタログと呼ぶ)を用意する。
※拡張子はpo
カタログは全て共通のファイル名。(カタログのファイル名はドメインとして後ほど設定)
カタログファイルの作成方法は後述する。
カタログファイルのディレクトリ構成
実行環境(ここではWindowsサーバー、IISを想定)では各カタログのファイルを以下に従って配置する。
例)
c:¥temp¥locale¥言語¥LC_MESSAGES¥カタログファイル
※1.c:¥temp¥localeは任意のパスを設定可能。(ドメインのパスと呼ぶ)
※2.言語は言語コード_国コード。(日本はja_JP、英語は)
PHPでの実装
PHPでは以下を各PHPの最初に挿入する。
多国語対応の文字は以下のように埋め込む
カタログの作成
カタログはpoEditで作成する。
poEditをダウンロードサイトよりダウンロード
poEditはソースファイルを解析してカタログファイルを作成する
poEditを使用してカタログファイルを作成する際には実行環境とは別に以下のディレクトリ構成で作業することを前提に説明。
c:¥workにカタログファイルを保存
c:¥work¥root以下にソースファイル(*.php)を配置
メニューの新規作成を選択
言語にカタログ作成対象の言語を指定(最初は日本語)

カタログの設定メニューで以下を設定
「プロジェクトの名前とバージョン」任意の名称
「文字符号化法」UTF-8
「ソースコードの文字符号化法」UTF-8
それ以外はデフォルト値

ファイルを保存
一旦、ファイルを上述のC:¥workに保存。
ファイル名はdic.poとする。(既に述べた通り、ファイル名=ドメイン名)

カタログの設定メニューで以下を設定
「ソースの検索パスーベースのパス」ピリオド(=C:¥work)を指定。
「ソースの検索パスーパス」各ソースのフォルダの絶対パス(=root)
「ソース中のキーワード」アンダーバーを指定

カタログの更新を実行するとカタログファイル「dic.mo」に反映される。
カタログファイルを以下にコピー
c:¥temp¥locale¥jp_JA¥LC_MESSAGES¥dic.mo
以上
log4netを使用するとSystem.Security.SecurityExceptionが発生
log4netを使用した実行ファイルを管理者権限以外で実行すると以下のエラーが発生。
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [EventLogAppender] of type [log4net.Appender.EventLogA
ppender]. Reported error follows.
System.Security.SecurityException: ソースが見つかりませんでしたが、いくつかまたはすべてのログを検索できませんでした。ア
クセス不可能なログ: Security
場所 System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly)
場所 System.Diagnostics.EventLog.SourceExists(String source, String machineName)
場所 log4net.Appender.EventLogAppender.ActivateOptions()
場所 log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
失敗したアセンブリのゾーン:
調査するとイベントログにアクセスしようとして発生するらしい
確認するとconfigファイルにイベントログに関する記述が残っていた。これを削除して解決








