ตัวอย่าง JSFiddle
ฉันได้สร้างJSFiddle เพื่อแสดงวิธีแก้ปัญหาของคุณโดยใช้ไลบรารีJavaScript Topology Suite (JSTS) (JSTS)
ชี้แจง
วิธีนี้มีสองขั้นตอน ขั้นตอนแรกแปลงรูปทรงเรขาคณิตของ Google ของคุณให้เป็นนิพจน์ทางเรขาคณิตWellKnownText (WKT)ซึ่งเป็นรูปแบบที่ได้รับการสนับสนุนอย่างกว้างขวาง ขั้นตอนที่สองใช้ JSTS เพื่อทำการgeometry.intersects()
เปรียบเทียบJSTS ของรูปทรง WKT สองรูปแบบ
หากต้องการทำความเข้าใจกับสิ่งนี้คุณจะต้องมีความเข้าใจพื้นฐานของ WKT เนื่องจากรูปหลายเหลี่ยมรูปเรขาคณิตใน Google แผนที่ของคุณไม่รองรับรูปแบบที่กว้างขวางฉันจึงแปลงเป็นรูปแบบ WKT ทันทีเพื่อที่เราจะได้ทำงานกับพวกมันใน JSTS
การทำเช่นนี้ได้อย่างง่ายดายผมใช้ห้องสมุดประตู แน่นอนคุณสามารถม้วนวิธี Google-Polygon-to-WKT ของคุณเองหรือคุณยินดีที่จะใช้วิธีการที่ฉันเขียนครั้งละครั้งหรือคุณสามารถใช้โซลูชันอื่นที่คุณอาจพบ โดยส่วนตัวแล้ววันนี้ฉันแค่ใช้ Wicket ซึ่งตามที่คุณเห็นมันเป็นเรื่องง่าย - ชั่วร้าย:
// Pass in two Google Polygon objects.
// It returns two WellKnownText (WKT) geometry expressions.
//
function UseWicketToGoFromGooglePolysToWKT( poly1, poly2 )
{
var wicket = new Wkt.Wkt();
wicket.fromObject(poly1);
var wkt1 = wicket.write();
wicket.fromObject(poly2);
var wkt2 = wicket.write();
return [wkt1, wkt2];
}
ถัดไปคือเนื้อและมันฝรั่ง - ใช้ JSTS เพื่อใช้รูปทรง WKT สองรูปแบบและทดสอบว่าพวกมันตัดกันหรือไม่ อีกครั้งที่พึ่งพาไลบรารีมีไม่มาก:
// Pass in two WKT geometry expressions.
// It performs a JSTS intersects() comparison.
//
function UseJstsToTestForIntersection( wkt1, wkt2 )
{
// Instantiate JSTS WKTReader and get two JSTS geometry objects
var wktReader = new jsts.io.WKTReader();
var geom1 = wktReader.read(wkt1);
var geom2 = wktReader.read(wkt2);
if (geom2.intersects(geom1)) {
alert('intersection confirmed!');
} else {
alert('..no intersection.');
}
}
ฉันจะเชื่อมโยงห้องสมุดต่าง ๆ ใน Fiddle ได้อย่างไร
ซอเชื่อมโยงด้านบนและโซลูชันที่ฉันแสดงให้เห็นต้องเพิ่มห้องสมุดบุคคลที่สามสองแห่งในโครงการของคุณ - JSTS และประตู การรับรหัสจาก Github ที่เกี่ยวข้องและรวมเข้ากับโครงการของคุณเป็นแบบฝึกหัดที่แตกต่างกัน แต่สำหรับไวโอลินที่ฉันเชื่อมโยงกับห้องสมุดเหล่านั้นโดยการอ้างอิงถึงพวกเขาในการเป็นตัวอย่างที่มีอยู่ JSTSผมพบว่าโพสต์โดยคริสแมนนิ่งเช่นเดียวกับหน้าสาธิตเองประตูของ โดยทั่วไปฉันเปิดหน้าเลือก "View Source" และดึงการอ้างอิงที่เกี่ยวข้องไปยังไลบรารีทั้งสอง นี่เป็นจุดสิ้นสุดของห้องสมุดที่แน่นอนที่ฉันใช้:
http://arthur-e.github.io/Wicket/wicket.js
http://arthur-e.github.io/Wicket/wicket-gmap3.js
http://bl.ocks.org/christophermanning/raw/4450188/javascript.util.min.js
http://bl.ocks.org/christophermanning/raw/4450188/jsts.min.js