たとえば、ロシアの領土をカバーするポリゴンがあります(Googleマップのジオコーディングによる):
POLYGON ((19.64053 41.18535, -169.0465 41.18535, -169.0465 81.85812, 19.64053 81.85812, 19.64053 41.18535))
このポリゴンは、北半球と2つの反対側の半球(東半球と西半球)と交差しています。
シベリアのどこかでポイントを取りましょう:
POINT (93.3252301 56.1171069)
そして、シベリアがまだロシアにとどまっているものを確認してください:
var russia = DbGeography.FromText("POLYGON ((19.64053 41.18535, -169.0465 41.18535, -169.0465 81.85812, 19.64053 81.85812, 19.64053 41.18535))", 4326);
var point = DbGeography.FromText("POINT (93.3252301 56.1171069)", 4326);
var isSiberiaInRussia = russia.Intersects(point);
// isSiberiaInRussia equals false, and it's wrong.
北半球と東半球だけが交差するポリゴンを考えてみましょう。モスクワにしましょう:
POLYGON ((37.31933 55.48993, 37.94566 55.48993, 37.94566 56.00966, 37.31933 56.00966, 37.31933 55.48993))
そしてそこに横たわっている誰かを連れて行ってください:
POINT (37.622504899999967 55.753602)
それを確認しましょう:
var moscow = DbGeography.FromText("POLYGON ((37.31933 55.48993, 37.94566 55.48993, 37.94566 56.00966, 37.31933 56.00966, 37.31933 55.48993))", 4326);
var lenin = DbGeography.FromText("POINT (37.622504899999967 55.753602)", 4326);
var isLeninLaysInMoscow = moscow.Intersects(lenin);
// He's still there...
それで、以下の基準を満たす地理的ヒットテストを行う方法はありますか?
- LINQと互換性がある
- EFコードファーストと互換性がある