7

私は「自分でやる」タイプの男ですが、噛むことができる以上に噛むことで自分自身をやろうとしないようにしたい.

エンド ユーザーのマシンでスタンドアロン (インターネット接続なし) を実行するオプションが必要なブラウザー ベースのマッピング アプリケーションを作成しています。つまり、アプリケーションは、多くの場合、エンド ユーザーのマシンにインストールされるある種のサーバーであり、ブラウザーはそれにアクセスするために何らかの localhost URL を指します。

クライアント側で MapLayers を使用し、サーバー側には、特定のカスタム方法でマップ上のクリック イベントを処理したり、特定の時間にマップ上にさまざまなカスタム オブジェクトを作成したりするなど、アプリケーションに固有の一連のカスタム ロジックがあります。等々。

サーバーの「ビジネス ロジック」部分については、python で paste/webob を使用して満足しています。これは、このすべてのカスタム ロジックを簡単に配置できる単純なインフラストラクチャです。

私は、クライアントが 2 つのサーバーと通信することを考えていました。この貼り付け/webob ビジネス ロジック サーバーと、WMS および WFS マップ要素を提供するためだけのサーバーです。そこで、マップ パーツを処理するために MapServer と GeoServer を検討していましたが、満足できませんでした。

クライアント マシンに "獣" をインストールして心配する必要がないので、私は満足していません。MapServer については、Apache のような本格的な Web サーバーをインストールしたくありません。また、CGI と PHP と MapScript を処理する必要があります。GeoServer の場合、(潜在的に) Java をインストールし、GeoServer のセットアップと管理のさまざまな複雑さを処理します。

これの一部は、単に学習曲線の問題です。それを避けることができれば、MapServer や GeoServer の複雑さを学ぶことに特に興味はありません。私は GeoServer をインストールし、それを私のデータの一部に向け、GeoServer の優れた Web 管理に組み込まれている MapLayers プレビューを使用して私のデータを表示することができました。しかし、GeoServer を指す自分の MapLayers Web ページを使用して実際にデータを提供しようとすると、GeoServer がクラッシュしました。クライアントからおそらく不正な形式のリクエストを送信するだけでサーバーをクラッシュさせることができるということは、私にとって非常に驚くべきことでした。そして、GeoServer のログを調べて、何が間違っていたのかを突き止めようとすることもできますが、そのために多くの時間を費やしたくありません。

そのため、既に持っているペースト/webob サーバーを使用して、WMS および WFS インターフェイスの一部を自分で実装することを検討しています。実際には、WMS だけが必要なのかもしれません。クライアントにデータを渡すために作成した単純なカスタム プロトコルを介してベクトル オブジェクトを処理し、OpenLayers を使用してオブジェクトを直接作成および操作できるからです。

私は、WMS の仕様とメッセージの例を見てきました (WFS の場合は少し少なくなりました)。特にこの場合、クライアントを完全に制御できるため、このプロトコルを自分で実装することはそれほど難しくないようです。一般的な WMS または WFS サーバーとして機能する必要があるわけではありません。自分の OpenLayers クライアントを満足させるだけです。

WMS サーバーに必要な 2 つの主な機能は次のとおりです。

  • 事前に作成したレンダリング済みタイルのストアからタイルを提供します (レンダリング エンジンとして OpenStreetMap データと mapnik を使用してタイルを事前レンダリングします。通常の Google マップ スタイルのタイル命名スキームを使用してそれらを保存し、アクセスしますOpenLayers が期待するもの)

  • ローカルに保存した特定のデータがタイルの上に描画される、これらのタイルの変更されたバージョンをサーバーする機能があります。たとえば、ある「レイヤー」に 10000 個のポイントがあり、別のレイヤーに 10000 個のポリゴンがあるとします。ユーザーがこれらのレイヤーをアクティブにすると、同じベース タイルを提供しますが、これらのタイルを提供するときにレンダリングしますそれらの上にこれらの追加機能を追加し、おそらく単純なキャッシング スキームを実装して、これらの過度にレンダリングされたタイルをしばらく保持します。

私の質問は、これらのことを行う既存のツール (MapServer、GeoServer、TileCache など) があることは知っていますが、実際には、単純な WMS メッセージに応答するだけの作業は少ないと感じています。 Python で自分のタイルにこの追加のオーバードローイングを行い、すべてが正しく投影されていることを確認します。これらのオーバーレイヤーには派手な広い通りや何かを描く必要はなく、単純な線、アイコン、およびおそらくラベルだけです。Pythonのみのソリューションを持つことは、確かに素晴らしくシンプルに聞こえます。

WMS/WFS プロトコルのサポートを拡大したり、より複雑なオーバードローを行う必要がある場合は、その時点で MapServer/GeoServer を挿入するだけでよいと思います。

私が考慮していない落とし穴はありますか?

4

3 に答える 3

2

Mapserver は、セットアップと学習が非常に簡単です。あらゆる種類のレンダリングを自分で実装するには、さらに多くの労力が必要になり、予期しない多くの落とし穴が見つかる可能性があります。

mapserver cgi で十分です。非常に具体的な微調整が必​​要な場合は、mapscript が役立ちます。

純粋な JavaScript アプリケーションを作成して、Web サーバー (およびマップ サーバー) をインストールする手間を省くことができれば、興味深いと思います。タイル モザイクをブラウズするだけなら、JavaScript だけでできるかもしれません (各タイルのセルを含む html テーブルを生成します)。JavaScript を使用して、キャンバスを使用し、基本的な座標変換を行って地理的なポイントをピクセルに変換することで、ポイントまたはポリゴンをレンダリングできます。Openlayersにはこの機能があると思います。

編集:確認したところ、 Openlayersを使用するとローカル タイルを閲覧でき、kml やその他の vect データをレンダリングできます。ですから、Openlayers を試してみるべきだと思います。

于 2011-03-22T14:48:03.723 に答える
2

wms/wfs は必要ありません。必要なのはタイルの実装です。基本的に、タイルを生成する何らかの中央サービスまたはデスクトップ サービスが必要です。これらのタイルが生成されたら、単純に「非リアル Web サーバー アーキテクチャ」ファイル システムに変換できます。/{x}/{y}/{z}.png に準拠したディレクトリ構造を作成し、javascript から呼び出すことができます。

openstreetmap がこれを行う方法の例は、次の場所にあります: http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example

于 2011-04-27T20:06:32.087 に答える
0

featureserver: http://featureserver.org/が好きかもしれません。独自の WFS があります。私は今それを使用しています。

于 2013-12-01T11:29:07.077 に答える