2013-06-03 8 views
19

क्या पॉलीगॉन, आयत और सर्कल के अंदर या बाहर मार्कर की जांच करने के लिए कोई एल्गोरिदम है। मैंने इस link का उपयोग करके एक फ़ंक्शन लिखने का प्रयास किया। लेकिन कोई सफलता नहीं।पत्रक :: पॉलीगॉन या आयताकार के अंदर/बाहर बिंदु की जांच कैसे करें

+0

क्या इसके लायक है के लिए, पत्रक एपीआई सीमा 'contains' समारोह का उपयोग कर आयतों के लिए जाँच की जाती है। http://leafletjs.com/reference.html#bounds बहुभुज और मंडलियों के लिए कोई उपयोग नहीं है, हालांकि। –

+3

https://github.com/mapbox/leaflet-pip क्या एक पुस्तिका है जो उस क्रिया को प्रदान करती है जो कि एक पॉलीगॉन के भीतर एक बिंदु निर्धारित करने के लिए किरण ट्रेसिंग तकनीक लागू करती है। –

+0

पुस्तिका-पीआईपी स्वीकृत उत्तर होना चाहिए। अच्छी तरह से काम करें (स्रोत फ़ाइल को पैच करने के बाद: "एल उदाहरण के लिए एल। मल्टीपीलीयन" हटाएं, https://github.com/mapbox/leaflet-pip/issues/8) – AlainIb

उत्तर

5

आप PHP का उपयोग कर रहे हैं तो यह समारोह

$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

बहुत धन्यवाद @ कोमल –

+0

यह फ़ंक्शन आयताकार के साथ काम करेगा कुंआ? – user2485649

17

पत्रक में एक समारोह इस जांच करने के लिए नहीं है काम करता है।

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

यह केवल यह देखने के लिए जांच करेगा कि क्या बिंदु बहुभुज के बाध्य आयत के भीतर है - न कि यह बहुभुज द्वारा स्वयं निहित है। –

+4

इसे और अधिक बुद्धिमान बनाने के लिए, ** रे-कास्टिंग एल्गोरिदम ** का उपयोग करें ([यहां समझाया गया है] (http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html))। [कार्यान्वयन का उदाहरण] (https://github.com/substack/point-in-polygon/blob/master/index.js) – szymonm

+0

काम कर रहे जावास्क्रिप्ट कोड उपलब्ध है [यहां] (https://github.com/ substack/प्वाइंट-इन-बहुभुज/ब्लॉब/मास्टर/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

धन्यवाद .. लेकिन आपका कोड google apis के साथ काम करता है। और मैं पुस्तिका पुस्तिका के साथ बिंदु की जांच करना चाहता हूँ –

संबंधित मुद्दे