Câu trả lời:
API Google maps chưa cung cấp phương pháp kiểm tra các điểm trong đa giác. Sau khi nghiên cứu một chút, tôi tình cờ tìm thấy thuật toán đúc Ray sẽ xác định xem tọa độ XY có nằm trong hình được vẽ không. Điều này sẽ dịch sang vĩ độ và kinh độ. Sau đây mở rộng google.maps.polygon.prototype để sử dụng thuật toán này. Chỉ cần bao gồm mã này tại một điểm trong mã sau khi google.maps đã tải:
google.maps.Polygon.prototype.Contains = function (point) {
var crossings = 0,
path = this.getPath();
// for each edge
for (var i = 0; i < path.getLength(); i++) {
var a = path.getAt(i),
j = i + 1;
if (j >= path.getLength()) {
j = 0;
}
var b = path.getAt(j);
if (rayCrossesSegment(point, a, b)) {
crossings++;
}
}
// odd number of crossings?
return (crossings % 2 == 1);
function rayCrossesSegment(point, a, b) {
var px = point.lng(),
py = point.lat(),
ax = a.lng(),
ay = a.lat(),
bx = b.lng(),
by = b.lat();
if (ay > by) {
ax = b.lng();
ay = b.lat();
bx = a.lng();
by = a.lat();
}
// alter longitude to cater for 180 degree crossings
if (px < 0) {
px += 360;
}
if (ax < 0) {
ax += 360;
}
if (bx < 0) {
bx += 360;
}
if (py == ay || py == by) py += 0.00000001;
if ((py > by || py < ay) || (px > Math.max(ax, bx))) return false;
if (px < Math.min(ax, bx)) return true;
var red = (ax != bx) ? ((by - ay) / (bx - ax)) : Infinity;
var blue = (ax != px) ? ((py - ay) / (px - ax)) : Infinity;
return (blue >= red);
}
};
Ở đây, chúng tôi đã mở rộng chức năng của google.maps.Polygon bằng cách xác định hàm có tên 'Chứa' có thể được sử dụng để xác định xem kinh độ vĩ độ được cung cấp trong tham số hàm có nằm trong đa giác hay không. Ở đây chúng tôi sử dụng thuật toán đúc Ray và phát triển một hàm sử dụng tương tự. Sau khi thực hiện phần lớn bài tập này, chúng ta có thể kiểm tra một điểm như sau:
var point = new google.maps.LatLng(52.05249047600099, -0.6097412109375);
var polygon = new google.maps.Polygon({path:[INSERT_PATH_ARRAY_HERE]});
if (polygon.Contains(point)) {
// point is inside polygon
}
Để có mã và bản demo hoàn chỉnh, vui lòng truy cập: http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
Tôi sẽ đi plugin Open Layer; tìm nạp nó và sau đó bạn thậm chí có thể thêm bất kỳ lớp động nào vào bản đồ và xuất.
* Trước khi làm như vậy, hãy đảm bảo rằng CRS dự án của bạn (EPSG) được đặt thành WGS84 và chuyển đổi CRS 'đang hoạt động' được bật trong cài đặt Thuộc tính dự án của bạn.
Hi vọng điêu nay co ich.
nếu bạn sử dụng chương trình của bên thứ ba làm geodjango, bạn có thể kiểm tra quan điểm của mình xem có trong một tập hợp đa giác hay không. Thêm thông tin ở đây .
contains
Availability: PostGIS, Oracle, MySQL, SpatiaLite
Tests if the geometry field spatially contains the lookup geometry.
Example:
Zipcode.objects.filter(poly__contains=geom)
Backend SQL Equivalent
PostGIS ST_Contains(poly, geom)
Oracle SDO_CONTAINS(poly, geom)
MySQL MBRContains(poly, geom)
SpatiaLite Contains(poly, geom)
Tôi hy vọng nó sẽ giúp bạn...
Tôi biết điều này hơi muộn nhưng nó có thể hữu ích trong trường hợp Một số người không dùng thử thư viện Android-Map-Utils. Tôi đã đăng các phương pháp cụ thể của Câu hỏi này chỉ dành cho Android. Ở đây bạn đi: