2013-06-03 73 views
19

là có bất kỳ thuật toán nào để kiểm tra điểm đánh dấu nằm bên trong hoặc bên ngoài Đa giác, Hình chữ nhật và hình tròn. Tôi đã cố gắng viết một hàm bằng cách sử dụng link này. nhưng không thành công.Tờ rơi :: Cách kiểm tra điểm nằm bên trong/bên ngoài đa giác hoặc hình chữ nhật

+0

Đối với những gì nó có giá trị, Leaflet API cung cấp giới hạn kiểm tra các hình chữ nhật bằng cách sử dụng chức năng 'contains'. http://leafletjs.com/reference.html#bounds Mặc dù không sử dụng cho đa giác và hình tròn. –

+3

https://github.com/mapbox/leaflet-pip Là một tờ rơi bổ sung cung cấp một hàm thực hiện kỹ thuật dò tìm tia để xác định xem một điểm nằm trong một đa giác hay không. –

+0

tờ rơi-pip phải là câu trả lời được chấp nhận. làm việc tốt (sau khi vá tập tin nguồn: loại bỏ "l instanceof L.MultiPolygon", https://github.com/mapbox/leaflet-pip/issues/8) – AlainIb

Trả lời

5

Nếu bạn đang sử dụng PHP sau đó chức năng này hoạt động

$c = false; 

$vertices_x = array(22.333,22.222,22,444); //latitude points of polygon 
$vertices_y = array(75.111,75.2222,76.233); //longitude points of polygon 
$points_polygon = count($vertices_x); 
$longitude = 23.345; //latitude of point to be checked 
$latitude = 75.123; //longitude of point to be checked 

if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude, $latitude)){ 
    echo "Is in polygon!"."<br>"; 
} 
else { 
    echo "Is not in polygon"; 
} 

function is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y) { 
    $i = $j = $c = 0; 

    for ($i = 0, $j = $points_polygon-1; $i < $points_polygon; $j = $i++) { 
     if (($vertices_y[$i] > $latitude_y != ($vertices_y[$j] > $latitude_y)) && ($longitude_x < ($vertices_x[$j] - $vertices_x[$i]) * ($latitude_y - $vertices_y[$i])/($vertices_y[$j] - $vertices_y[$i]) + $vertices_x[$i])) { 
      $c = !$c; 
     } 
    } 

    return $c; 
} 
+1

cảm ơn rất nhiều @komal –

+0

chức năng này sẽ hoạt động với hình chữ nhật như tốt? – user2485649

17

có một chức năng trong tờ rơi để kiểm tra này.

Polygon.getBounds().contains(MarketLatLng); 
+21

Điều này sẽ chỉ kiểm tra xem điểm có nằm trong hình chữ nhật bao quanh của đa giác không - nếu nó được chứa bởi chính đa giác đó. –

+4

Để làm cho nó thông minh hơn, sử dụng thuật toán ** đúc ** ([được giải thích tại đây] (http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html)). [Ví dụ về việc triển khai] (https://github.com/substack/point-in-polygon/blob/master/index.js) – szymonm

+0

Mã javascript hoạt động có sẵn [ở đây] (https://github.com/ substack/point-in-polygon/blob/master/index.js). – Aneesh

0
<!-- <!DOCTYPE html> 
<html> 
    <head> 
    <title>Simple Map</title> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <style> 
     #map-canvas { 
     margin: 0; 
     padding: 0; 
     width: 700px; 
     height: 500px; 
     } 
    </style> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
    <script> 
var map; 
var marker; 
var latlong = [["21.001663","75.486069"], 
["20.108977","73.914672"], 
["21.1458","79.088155"], 
["19.153061","77.305847"], 
["20.0831","73.79095"], 
["18.52043","73.856744"], 
["16.774832","74.486265"], 
["16.691308","74.244866"], 
["19.876165","75.343314"], 
["19.997453","73.789802"], 
["20.532949","76.184303"], 
["21.013321","75.563972"], 
["18.9513","72.82831"], 
["18.515752","73.182162"], 
["19.075984","72.877656"], 
["19.218331","72.97809"], 
["19.844006","79.36266"], 
["20.745319","78.602195"], 
["21.267052","78.577973"], 
["18.52043","73.856744"], 
["19.96955","79.304654"], 
["19.450585","72.799155"], 
["18.52043","73.856744"], 
["20.745319","78.602195"], 
["18.9833","75.7667"], 
["21.013321","75.563972"], 
["21.1458","79.088155"], 
["19.153061","77.305847"]]; 

function initialize() { 
    var mapOptions = { 
    zoom: 4, 
    center: new google.maps.LatLng(21.7679, 78.8718), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById('map-canvas'), 
     mapOptions); 
     drawCircle(); 
} 
function drawCircle() 
{ 
var options = { 
     strokeColor: '#800000', 
     strokeOpacity: 1.0, 
     strokeWeight: 1, 
     fillColor: '#C64D45', 
     fillOpacity: 0.5, 
     map: map, 
     center: new google.maps.LatLng(21.7679, 78.8718), 
     radius: 100000 
    }; 

    circle = new google.maps.Circle(options); 
    var bounds= circle.getBounds(); 
    for (var i = 0; i < latlong.length; i++){ 
    var hello =new google.maps.LatLng(latlong[i][0], latlong[i][1]); 
    if(bounds.contains(hello)) 
    { 
     marker= new google.maps.Marker({ 
     position:hello, 
     }); 
     marker.setMap(map); 
      console.log("Hi iam in bound"); 

      } 
      else 
      { 
      console.log("Iam not in bound"); 
} 
} 

} 
google.maps.event.addDomListener(window, 'load', initialize); 

    </script> 
    </head> 
    <body> 
    <div id="map-canvas"></div> 
    </body> 
</html> --> 
+2

cảm ơn .. nhưng mã của bạn hoạt động với google apis. và tôi muốn kiểm tra điểm với aplet tờ rơi –

Các vấn đề liên quan