2

線ストリング DbGeography オブジェクトがあり、合計距離の小数値を指定して、線ストリングに沿ってポイントを見つけたいと考えています。たとえば、0.5 を指定すると、ポイント WKT (Well Known Text) を持つ DbGeography オブジェクトとして線の中点を取得する必要があります。

DbGeography のドキュメントを調べてみましたが、明らかな「簡単な」方法は存在しないようです。

この方法は、Google Maps JS API の球状ジオメトリ補間方法に似ていると思います。助言がありますか?

4

1 に答える 1

2

次のアプローチを使用する前に、これを行いました。

  1. ターゲットポイントが間にある必要がある隣接するポイントのペアが見つかるまで、LineString のポイントを繰り返します (ターゲット距離は指定されているか、言及した距離の割合から簡単に計算できます)。それから

  2. DbGeography.Buffer2 つのポイントのそれぞれで使用し、 "remaining distance to the target" + "small distance padding"*を最初と"distance between the two points" - "remaining distance to the target" + "small distance padding"2 番目に指定します。それから

  3. ポイントではなく、DbGeography.Intersection小さなポリゴンを取得して、2 つのポイントで使用します。それから

  4. DbGeometryそのポリゴンをオブジェクトに変換し、そのCentroid; それから

  5. DbGeography必要に応じて、その結果ポイントをオブジェクトに変換します。

通常、幾何学的重心は地理的中心と同一ではないため、これは技術的に最も正確ではないことに注意してください。ただし、重心が取得されるポリゴンが非常に小さい場合があるため (たとえば、バッファー距離のパディングとして 1 メートルを使用することにより)、この場合はほぼ確実に十分です。

*: 浮動小数点の丸め誤差による「ニアミス」を回避するために、距離パディングが提供されます。無限の精度があれば、明らかに、パディングなしでバッファーを取得するだけで、交点から探している正確なポイントが得られます。

于 2015-06-23T16:40:26.953 に答える