Options ExecCGI is off in this directory

Apache

Options ExecCGI is off in this directory というエラーが出てCGIが動作しない

CGIを実行しても、403 Forbiddenになる、エラーログを見ると

 Options ExecCGI is off in this directory

となっている場合は、次の点を確認してみましょう。
Apacheの設定ファイル、httpd.confに

 <Directory /home/*/public_html>
    Options SymLinksIfOwnerMatch ExecCGI IncludesNoExec
 </Directory>

Directoryは該当のディレクトリ、その下のoptionsにExecCGIが入っているか、です。
httpd.confを修正したら、Apache 再起動しましょう。

httpd.confを直しても同じ、なんて時は、バーチャルホストでまた設定ファイルが別だった、なんてこともありますよね。(^_^;

参考:httpd.confの設定などについて
LAMPサーバーの基本設定

OpenStreetMapをAndroidアプリに組み込む

Android

OpenStreetMapをAndroidアプリに組み込む

OpenStreetMapをWebサイトに組み込む話は日本語でも検索してヒットしますが、Androidアプリに組み込む話はなかなかWeb上になかったので、書いておきます。

まず、どうやってAndroidアプリに組み込むか。
osmdroidというライブラリを利用します。
派生ライブラリもいくつかありますが、まずはこれが基本でとっつきやすいでしょう。

osmdroid 公式サイト
http://code.google.com/p/osmdroid/

早速、Androidアプリプロジェクトにどうやって組み込むか、書いていきます。

公式サイトを見ると、Mavenを利用するとイイヨ!と書いてあります。
Mavenはメイブンと呼びます。メイブン。それは、君が見た光。僕が見た希望。。。

個人的な感想かもしれませんが、Mavenを利用すると、エラーばかりでかえって苦労します。多分、現行のバージョンとあっていないのではないでしょうか。
なので、手っ取り早いプロジェクトへの組込み方法は、次の通りです。

  • slf4j-android logging libraryが必要なので、

http://www.slf4j.org/android/
に行き、slf4j-android logging libraryをダウンロードして、libsの下に置きます。

  • AndroidManifest.xmlで、APIレベル7以上にします。
  •  <uses-sdk android:targetSdkVersion="16" android:minSdkVersion="7" />
    
    • AndroidManifest.xmlで、次のパーミッションを許可します。
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    • osmdroid本体を下記のサイトの下の方からダウンロードします。

    osmdroid-android-4.1.jar と書いてあるリンクをクリックするだけです。

    http://code.google.com/p/osmdroid/wiki/Downloads

    • libsの下に osmdroid-android-4.1.jarとslf4j-android-1.6.1-RC1.jarがおかれたら、準備OKです。次は、osmdroidを利用して、OpenStreetMapをAndroidアプリで表示する サンプルコードに続きます。

OpenStreetMapをAndroidアプリで表示する サンプルコード

OpenStreetMapをAndroidアプリで表示する サンプルコード

前段階として、
OpenStreetMapをAndroidアプリに組み込む
でライブラリとしてosmdroidの準備ができていることが前提です。

さて、ここではさくっとOpenStreetMapを表示しましょう。
GoogleMapと利用方法はほぼ同じです。

  • MainActivity
  •  package com.example.osmsample;
     
     import org.osmdroid.api.IMapController;
     import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
     import org.osmdroid.util.GeoPoint;
     import org.osmdroid.views.MapView; 
     
     import android.os.Bundle;
     import android.widget.LinearLayout;
     import android.app.Activity;
     
     public class MainActivity extends Activity {
     
     	@Override
     	public void onCreate(Bundle savedInstanceState) {
     		super.onCreate(savedInstanceState);
     		setContentView(R.layout.activity_main);
     		
     		IMapController m_mapController;
     
     		MapView map = new org.osmdroid.views.MapView(this, 256);
     		map.setBuiltInZoomControls(true);
     		map.setTileSource(TileSourceFactory.MAPNIK);
     		map.setMultiTouchControls(true);
     
     		org.osmdroid.views.MapView.LayoutParams mapParams = new org.osmdroid.views.MapView.LayoutParams(
     				org.osmdroid.views.MapView.LayoutParams.MATCH_PARENT,
     				org.osmdroid.views.MapView.LayoutParams.MATCH_PARENT, null,
     				0, 0, org.osmdroid.views.MapView.LayoutParams.BOTTOM_CENTER);
     
     
     		LinearLayout map_layout = (LinearLayout) findViewById(R.id.mapview);
     		map_layout.addView(map, mapParams);
     
      		m_mapController = map.getController();
     		m_mapController.setZoom(15);
     
     		double tempo_center_lat = 35.45797; //横浜みなとみらいの緯度
     		double tempo_center_lng = 139.632314; //横浜みなとみらいの経度
     		GeoPoint center_gpt = new GeoPoint(tempo_center_lat, tempo_center_lng);
     		m_mapController.setCenter(center_gpt);
     	
     	}
     
     }
    
    • activity_main.xml
     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <LinearLayout
            android:id="@+id/mapview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">
        </LinearLayout>
     </LinearLayout>
    

OpenStreetMapでジオコーディング

Javascript

OpenStreetMapでジオコーディング

Google Map APIを利用せずにOpenStreetMapでジオコーディング する方法を調査中です。
とりあえず調査の経過を書いておきます。

OpenStreetMapでジオコーディング を利用しようとすると、Nominatimと言うツールがあげられます。

Nominatim解説サイト
http://wiki.openstreetmap.org/wiki/JA:Nominatim

しかし、残念ながらNominatimは日本語のジオコーディングはまだまだのようです。(この記事を書いている、2014年4月3日現在)

弊社の住所は

 神奈川県横浜市神奈川区鶴屋町2-21-1 ダイヤビル5F

ですが、

たとえば横浜市神奈川区までは成功します。
http://nominatim.openstreetmap.org/search/%E7%A5%9E%E5%A5%88%E5%B7%9D%E5%8C%BA%20%E6%A8%AA%E6%B5%9C%E5%B8%82?format=xml&polygon=0&addressdetails=1

xmlで帰ってくる結果です。

しかし、鶴屋町まで入れると結果は帰ってきません。
http://nominatim.openstreetmap.org/search/%E9%B6%B4%E5%B1%8B%E7%94%BA%20%E7%A5%9E%E5%A5%88%E5%B7%9D%E5%8C%BA%20%E6%A8%AA%E6%B5%9C%E5%B8%82?format=xml&polygon=0&addressdetails=1

上の問い合わせのxmlで帰ってくる結果です。

ふぇぇ…

東京や熊本市などの住所で調べてみても、まだまだ市区レベルでしか結果が帰ってこないようです。

リバースジオコーディング

Nominatimはリバースジオコーディングの方はもう少しイケています。

下記はみなとみらいの緯度経度ですが

http://nominatim.openstreetmap.org/reverse?format=xml&lat=35.45797&lon=139.632314&zoom=18&addressdetails=1

上の問い合わせのxmlで帰ってくる結果です。

リバースジオコーディングできています。

弊社の住所の緯度経度ですが
http://nominatim.openstreetmap.org/reverse?format=xml&lat=35.4693&lon=139.624557&zoom=18&addressdetails=1

上の問い合わせのxmlで帰ってくる結果です。

ま、こんなもんか。

ところでmapquestでもNominatimを利用してジオコーディングできるらしいというのでやってみたかったのですが、Get Mapquest App KeyというボタンをクリックしてもLoadingがひたすらグルグル回るだけで、登録できません。残念。

https://developer.mapquest.com/web/products/open/geocoding-service

WebAPIを利用しなくっても、ジオコーディングのデータをサーバーにストックしておいて、それを自前で検索する…というのもできそうです。

Planet.osm
http://wiki.openstreetmap.org/wiki/Planet.osm

しかし、ヨーロッパやアメリカ・カナダが主流なのか?
日本のデータは?

というと、なんと日本のジオコーディングのデータを国土交通省が配布してくれています。

位置参照情報ダウンロードサービス
http://nlftp.mlit.go.jp/isj/

いい国だな、ニッポン!⊂(^-^)⊃

これをサーバーにダウンロードして、ジオコーディングを自前で作ることができますね!

下記のサイト様を大変参考にさせて頂きました。m(_ _)m

各種ジオコーディングapiの罠と対処法
http://treeapps.hatenablog.com/entry/2012/11/17/%E5%90%84%E7%A8%AE%E3%82%B8%E3%82%AA%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0api%E3%81%AE%E7%BD%A0%E3%81%A8%E5%AF%BE%E5%87%A6%E6%B3%95

しかし、差分のメンテナンスとか考えると、やっぱりどっかオープンソースのWeb APIで、パラメーターをURLで投げるとxmlかjsonで帰ってくる方が楽ですよね(^_^;

Nominatimでぜひ日本のデータを取れるようになる日が一日も早く来るように願っています!

OpenStreetMap 編集する

業務効率Up

OpenStreetMap 編集する

OpenStreetMap、略してOSMを編集するのは超簡単です。
専用のソフトなどは必要ありません。
ブラウザさえあればできます。
ブラウザは、Chromeなど、動作の早いものがおすすめです。

  1. 下記のサイトにアクセス

https://www.openstreetmap.org/

  1. 下記のように、「マッピングを開始」というボタンが表示されますので、そこをクリックし、後は画面の指示に従ってください。


チュートリアルが最初にあるので、何も知らなくても編集ができます。
ただ、動作はかなり遅いので、動作の遅いPCで編集すると、ストレスがたまるでしょうw

自分で地図が作れるのは楽しいですよ!