0

みんな。簡単な紹介をさせてください。


例: 私のマップサーバーは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」ファイルに追加しました。

$point->setXY($img_x, $img_y);

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

$image=$map->drawQuery();

ただし、まず、画像の座標はデータベースの座標ではなく、データベースの座標も緯度または経度ではありません! それらを変換する必要がありますか?第二に、メソッド'queryByPoint'は状態名を取得できませんでした。使用する必要があります'queryByAttributes'か? それの使い方?

わからない... 本当にわからない... 助けてください。

4

1 に答える 1

0

完全に解決されていなくても、質問に答えることができると思います。


私には2つの目的があります:

  1. クリックした色を変更します。
  2. 州の名前を取得します。

実は、すべての問題を MapServer で解決する必要はありません。最初のタスクは に依存しMapserver、2 番目のタスクは および に依存しpostgreSQLますPHP


最初のタスク:

古いコードを変更します。

$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();

クリックした状態の色が変わります。$img_x$map_xに、$img_y$ map_y に変更するだけです。しかし、ポイントの正しい座標を取得するにはどうすればよいでしょうか? 必要な変数は 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: Open Source GIS Development 」からインスピレーションを得ました。色々教えてくれる良い本です!

于 2010-12-13T14:16:46.717 に答える