Jawaban:
Google maps API belum menyediakan metode untuk memeriksa titik dalam poligon. Setelah meneliti sedikit, saya menemukan algoritma Ray-casting yang akan menentukan apakah koordinat XY berada di dalam bentuk yang diplot. Ini akan menerjemahkan ke garis lintang dan bujur. Berikut ini memperluas google.maps.polygon.prototype untuk menggunakan algoritma ini. Cukup sertakan kode ini pada satu titik dalam kode setelah google.maps memuat:
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);
}
};
Di sini kami telah memperluas fungsionalitas google.maps.Polygon dengan mendefinisikan fungsi dengan nama 'Berisi' yang dapat digunakan untuk menentukan apakah garis bujur yang disediakan dalam parameter fungsi berada dalam poligon atau tidak. Di sini kita menggunakan algoritma Ray-casting dan mengembangkan fungsi menggunakan hal yang sama. Setelah melakukan banyak latihan sekarang, kita dapat memeriksa titik sebagai berikut:
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
}
Untuk kode dan demo lengkap silakan kunjungi: http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
Saya akan membuka plugin Open Layers; ambil, dan Anda bahkan dapat menambahkan lapisan dinamis apa pun ke peta Anda dan ekspor.
* Sebelum melakukannya, pastikan Anda memiliki CRS proyek Anda (EPSG) diatur ke WGS84, dan bahwa transformasi CRS 'on the fly' diaktifkan di bawah pengaturan Properti Proyek Anda.
Semoga ini membantu.
jika Anda menggunakan program pihak ketiga sebagai geodjango, Anda dapat memeriksa poin Anda apakah dalam satu set poligon atau tidak. info lebih lanjut ada di sini .
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)
Saya harap ini membantu Anda ...
Saya tahu ini agak terlambat tetapi mungkin membantu jika SomeOne tidak mencoba perpustakaan Android-Map-Utils. Saya telah memposting metode khusus Pertanyaan ini hanya untuk Android. Ini dia: