2010-12-12 5 views
0

皆さん。私に簡単な紹介を許可してください。例えばPHPを使用してマップサーバでクリックされたポリゴンをクエリする方法はありますか?


:私のMapServerはCGIモードを使用します。私は'us_states.shp'という名前のシェープファイルを持っています。そこには'state_name'の列があります。正しい'.map'ファイルと'.html'テンプレートを作成した場合は、「フォーム」タグで地図画像をクリックすると、特定の米国州の名前を取得する必要があります。なぜこれが起こるのですか? '.html'テンプレートには文字列:[state_name]があるためです。


は今、私はいくつかの変更を行います。

  1. 空間データは、postgreSQLのデータベースであり、かつ'state_name'をという名前の列もあります。
  2. 私はPHPを使用してクエリマップを表示しています。

次に、'state_name'の値はどのように取得できますか?クリックした状態の色を変更するにはどうすればよいですか?

私の進捗率:

  • 。私はpostgreSQLを使って '.map'ファイルから元の地図画像を表示することができ、画像内のすべての状態の名前も表示できます。
  • b。簡単な'QUERYMAP'段落がすでに '.map'ファイルに存在しています。
  • c。私は 'の.php' ファイルにこれらのコードを追加:

$ポイント - > setXY($ img_x、$ img_y)。

$ map-> queryByPoint($ point、 'MS_SINGLE'、-1);

$ image = $ map-> drawQuery();

しかし、最初は、画像の座標は、データベース内のデータベースのもの、並びに座標がいずれかの緯度または経度されていないません!私はそれらを変換する必要がありますか? の2番目のメソッド'queryByPoint'は状態名を取得できませんでした。'queryByAttributes'を使用しますか?それの使い方?

私は分かりません...本当にわかりません...あなたの助けが必要です。

答えて

0

完全には解決されていませんが、私は私の質問に答えることができると思います。


私は2つの目的があります:色をクリック

  1. の変化を、
  2. 状態の名前を取得します。

実際、MapServerですべての問題を解決する必要はありません。最初のタスクはMapserverに依存し、秒はpostgreSQLPHPに依存します。


最初のタスク:

変更古いコード:新しいコードに

$point->setXY($img_x, $img_y); 
$map->queryByPoint($point, 'MS_SINGLE', -1); 
$image=$map->drawQuery(); 

$point->setXY($map_x, $map_y); 
$map->queryByPoint($point, 'MS_SINGLE', -1); 
$image=$map->drawQuery(); 

状態の色が変更されますクリックします。私はちょうどに$ map_x$ img_yに$ map_y$ img_xを変更します。しかし、どのようにポイントの正しい座標を取得するには?変数は2つだけ必要です:地図の範囲画像のサイズ。あなたがそれらを得るとき、イメージポイントからマップ座標への変換は簡単です。私はそれらを繰り返さないことを恐れている。


2番目のタスク:

あなたがマップの座標を取得した場合、あなたは簡単にPostgreSQLのデータベースから状態を照会します。ここ は、PHPを使用してクエリのコードです:

$query = "select state_name from country where within(GeomFromText('Point($map_x $map_y)', 4269), the_geom)"; 
$result = pg_query($query); 
if($result) { 
    list($state) = pg_fetch_row($result); 
} 

あなたが見ることができるように、あなたはすべてを完了するのMapServerは必要ありません。

ところで、私はBill Kroplaの著書「Beginning MapServer:オープンソースGIS開発」からインスピレーションを得ました。それは素晴らしい本です、そして、私に多くを教えてください!

関連する問題