ユーザーが地図上にポリゴンを作成すると、データベースが関心のあるポイントを返す Web ベースのアプリケーションを開発しています。
問題は、postgreSQL が Google マップのポリゴンとは異なる方法でポリゴンを保存することです。
では、ユーザーポリゴンをpostgisに保存するにはどうすればよいですか?
私はすでにGoogle Maps v3 APIとgeojsonを使用しています
ユーザーが地図上にポリゴンを作成すると、データベースが関心のあるポイントを返す Web ベースのアプリケーションを開発しています。
問題は、postgreSQL が Google マップのポリゴンとは異なる方法でポリゴンを保存することです。
では、ユーザーポリゴンをpostgisに保存するにはどうすればよいですか?
私はすでにGoogle Maps v3 APIとgeojsonを使用しています
いくつかのコードが役立ちます。それがない場合、最も一般的な答えは次のとおりです。一般的には、各フォーマットを他のフォーマットにマップ (変換) する方法を考え出す必要があります。その後、保存する前にデータベースに適した形式に変換し、取得するときにデータベース形式から Google マップ形式に変換できます。各ポリゴンは、両方の形式の緯度/経度のペアのセットであるため、それほど難しくはないと思います。
または、JSON を使用しているため、JSON をデータベースのテキスト フィールド (または、PostgreSQL の今後の 9.2 リリースの JSON フィールド) に保存することもできます。
http://www.postgresql.org/docs/9.2/static/datatype-json.html
ただし、データベースで地理的なクエリを実行したい場合は、選択肢が明らかに制限されます。
私のjsファイルで、多角形の形状を作成します
shape = new google.maps.Polygon({
Editable:true,
strokeColor: 'FF0000',
strokeOpacity: 0.8,
strokeWeight: 1,
fillColor: 'FF0000',
fillOpacity: 0.4
});
次に、関数 addPoint を作成します
function addPoint(e) {
shape.setMap(map);
vertices= shape.getPath();
vertices.push(e.latLng);
polygon.push(e.latLng);
}
addPoint 関数を map オブジェクトに渡します
map = new google.maps.Map(document.getElementById("map"), mapOptions);
google.maps.event.addListener(map,'click',addPoint);
私のhtmlには、id = polygonのボタンがあります。座標をpostgres形式(long、lat)に変換します
$("#polygon").click(function(e){
a=JSON.stringify(polygon);
var c=JSON.parse(a);
console.info(c);
vertices.forEach(function(xy, i) {
x.push(xy.lng()+" "+xy.lat());
});
shape.setMap(map);
ポリゴンを含む変数は、私がそれを x と呼んだ配列です。ポリゴン配列 x をモデルに渡すための ajax 呼び出しがあります。
$.ajax({
url: 'myurl',
type: 'post',
data: {'polygon':x},
datatype: 'json',
success: function(data) {
console.info(data)
}
});
私のモデル(Codeigniter)では、ポリゴン(lat、long)をpostgresポリゴン(long、lat)に変換します
public function getPolygon($polygon){
header('Content-type: application/json');
$upolygon="";
$length=count($polygon);
for ($i=0;$i<$length;$i++){
$upolygon.=$polygon[$i].' ,';
}
$upolygon.=$polygon[0];
$query = "some query with the formated polygon";
foreach ($query->result() as $row)
{
$data[]= array("some data");
}
echo json_encode($data);
}