2012-08-15 6 views
7

リーフレットのドキュメント:http://leafletjs.com/reference-1.2.0.html#circlemarker CircleMakerはCircleを拡張し、半径はメートルではなくピクセル単位で指定されていることを除いて同じことを言います地図をズームしても一定の大きさになります。リーフレット:CircleMarkerとは異なる動作をする円

マップ上に100mの円を描画しようとしているので、サークルが必要です。

var geojsonLayer = new L.GeoJSON(null,{ 
pointToLayer: function (latlng){ 
    return new L.CircleMarker(latlng, { 
     radius: 5, 
     fillColor: "#ff7800", 
     color: "#000", 
     weight: 1, 
     opacity: 1, 
     fillOpacity: 0.8, 
    }); 
}}); 

map.addLayer(osm); 
map.addLayer(geojsonLayer); 
geojsonLayer.addGeoJSON(jsonExample); 

私はマップ全体の読み込みに失敗した代わりにCircleMakerの「サークル」を使用するようにコードを変更する場合、これは、しかし、完璧に動作し、私はjavascriptのエラーが表示されます。これを行うには、私は次のコードを使用します。

Error: Error: Invalid LatLng object: (56.229917, NaN) 

Iは、緯度と経度の両方を欠いている、これらの点を除去するためにGeoJSONをプレフィルタリングすることによりこの問題を解決することができ、私は困惑している:サークルとCircleMakerの両方それらが仕様としてのLatLngオブジェクトを取るように指定します特定のLatLngオブジェクトがCircleMarkerの中心点としてどのように有効であるかを知ることはできませんが、Circleの中心点として使用される場合は無効です。

明らかに何かを見落としているのですか、これは単なるリーフレットの弱点やバグですか?

答えて

4

L.circleのleaflet.jsの_getLngRadius()メソッドを変更してこれを修正しました。リーフレットバージョン0.4.4では、4913行目です。

このメソッドは、サークルの半径を動的に計算するため、circleMarkerのメソッドとは異なります。あなたが持っている行を変更した場合

this._mRadius/hLength

this._mRadius.radius/hLength

に、それは大丈夫でなければなりません。

+0

恐ろしい!ありがとうございました。これは一般的に価値があると思われるので、パッチはリーフレットの開発者にも送られなければならないと思います。 – Agrajag

+0

これはどういうことでしたか? –

+0

これに関するアップデートはありますか? – kuanb

1

あなたは、障害のある件のデータを無視するあなたの関数の初めに(緯度経度)

(& & latlng.lat & & latlng.lngを緯度と経度)場合は追加することができます。

+0

ええ、私が知っているように、私が書いたように:私は問題を避けるためにどのポイントを含めるかをフィルタすることができます。私はそれを避けようとは思っていませんでしたが、それを理解するためでした。ドキュメントの中には、この点で「Circle」と「CircleMarker」の間に違いがあるはずがありません。 – Agrajag

4

コードに問題はありません。この同じ問題は、別のコンストラクタを簡単に発生する可能性がありますが:

L.CircleMarker(<LatLng> latlng, <Path options> options?) 

L.Circle(<LatLng> latlng, <Number> radius, <Path options> options?) 

があなたの新しい円に半径を渡すようにしてください。

関連する問題