1

現在、Mono4Droidを使用してマップアプリを実装しており、WebViewを使用して自分のタイルサーバーによって提供されるマップを表示しています。OpenLayersを使用してこのマップを表示していますが、テキストレイヤーを使用してカスタムPOIを表示したいと思います。残念ながら、マップは90013投影を使用しています。

map = new OpenLayers.Map ("map", {
            controls:[
                new OpenLayers.Control.Navigation(),
                new OpenLayers.Control.PanZoomBar(),
                new OpenLayers.Control.Permalink(),
                new OpenLayers.Control.ScaleLine({geodesic: true}),
                new OpenLayers.Control.Permalink('permalink'),
                new OpenLayers.Control.MousePosition(),                    
                new OpenLayers.Control.Attribution()],
            //maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
            maxResolution: 156543.0339,
            numZoomLevels: 19,
            units: 'm',
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:900913")
        } );

したがって、TextLayerによって提供されるマークを表示する場合は、正しい形式の座標を使用する必要があります。マップを中央に配置するのは簡単です。

var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
            map.setCenter (lonLat, zoom);

しかし、TextLayerに対してこの変換を自動的に行うにはどうすればよいですか?よく知られているEPSG4326に準拠した緯度経度の値をテキストレイヤーデータファイル(緯度経度の列)に入れたいのですが、900913に準拠した値(現在動作させるために行っていること)ではありません。

OpenLayersにテキストレイヤーの座標をマップで使用されている形式に自動的に変換させる方法はありますか?たぶん、onShowのようにオーバーライドするコールバック関数?

ご協力いただきありがとうございます!そうしないと、自分で緯度経度の値を変換し、計算された値をテキストファイルに入れる必要があります。これにより、パフォーマンスが低下します...

4

1 に答える 1

4

最後に、私は自分で答えを見つけました、そして私は私が非常に感銘を受けたと言わなければなりません!OpenLayersは非常に強力です!これが私の解決策です:map-objectのオプションでは、displayOptionsをレイヤーの投影に設定する必要があります。私の場合、EPSG:4326をサポートするには次のようになります。

displayProjection: new OpenLayers.Projection("EPSG:4326")

次に、レイヤーがこのプロジェクションを使用するように注意する必要があります(まだデフォルト値でない場合)。私の場合、Android(WebView内)でテキストレイヤーが正しく機能しませんでした。テキストファイルからマーカーの画像をクリックしたときにポップアップを開くことができませんでした。代わりに、私は日時計に従ってベクターレイヤーを使用しています-例:

new OpenLayers.Layer.Vector("TextLayer", {
            projection: map.displayProjection,
            strategies: [new OpenLayers.Strategy.Fixed()],
            protocol: new OpenLayers.Protocol.HTTP({
                url: "layerdata/chargingstationsmaptxtlayer.txt",
                format: new OpenLayers.Format.Text({
                    extractStyles: true,
                    extractAttributes: true
                })
            })
        });

テキストファイルで、EPSG-4326形式のLatLon値を使用できるようになりました。とても簡単です;-)

于 2012-07-02T20:12:30.460 に答える