簡體   English   中英

C#中的谷歌幾何圖書館

[英]google Geometry Library in C#

我有一個點(緯度,經度)ex:25,-80我正在尋找c#中的一種方法來檢查這個點是否在特定的多邊形中。

我做了一些研究,發現Google Maps Geometry Library中包含的containsLocation函數正是我所需要的,但它不適用於c#。 這是一個在JS中使用此方法的示例:

 // This example requires the Geometry library. Include the libraries=geometry // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry"> function initMap() { var triangleCoords = [ {lat: 25.774, lng: -80.19}, {lat: 18.466, lng: -66.118}, {lat: 32.321, lng: -64.757} ]; var coords = new google.maps.LatLng(25.774, -80.19); var bermudaTriangle = new google.maps.Polygon({paths: triangleCoords}); var result = google.maps.geometry.poly.containsLocation(coords, bermudaTriangle); alert('The location exist in polygon: '+result); } 
 <div id="map"></div> <!-- Replace the value of the key parameter with your own API key. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=geometry&callback=initMap" async defer></script> 

我發現ac#library for gmaps google maps API for C#但是它不支持函數containsLocation有沒有辦法在c#中執行上面所需的操作?

光線投射算法通常用於確定給定點是否位於多邊形內。 這個答案包含C#中的實現。

此外,還可以使用NetTopologySuite ,特別是NetTopologySuite.Algorithm.Locate.IndexedPointInAreaLocator class

var triangleCoords = new[] {
      new Coordinate(25.774, -80.19),
      new Coordinate(18.466, -66.118),
      new Coordinate(32.321, -64.757),
      new Coordinate(25.774, -80.19)
};
IGeometryFactory geometryFactory = new GeometryFactory();
var poly = geometryFactory.CreatePolygon(triangleCoords);


var locator = new NetTopologySuite.Algorithm.Locate.IndexedPointInAreaLocator(poly);
var location = locator.Locate(new Coordinate(24.886, -70.269));
if (location == GeoAPI.Geometries.Location.Interior)
{
     Console.WriteLine("Polygon contains the location");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM