ฉันจะแก้ไขรูปหลายเหลี่ยมเชิงซ้อนเพื่อให้แสดงอย่างถูกต้องใน Google Maps ได้อย่างไร


15

ปัญหา : ฉันกำลังพยายามหาวิธีแก้ไขรูปหลายเหลี่ยมที่หักและฉันไม่แน่ใจว่าจะทำอย่างไร


รายละเอียด :

ฉันมีรูปหลายเหลี่ยมจำนวนหนึ่งซึ่งโดยทั่วไปฉันนำเข้าจาก TIGERLINES สักพัก

ฉันแปลงมันให้เป็นไฟล์รูปร่างแล้วนำเข้ามาใน Sql Server 2008

ใน sql server 2008 พวกเขาดูดีมาก :) ดังนั้นนั่นแสดงว่าการนำเข้าทำงานได้ไม่มากก็น้อย นี่คือเมืองลอสแองเจลิส: -

ป้อนคำอธิบายรูปภาพที่นี่

แต่เนื่องจากโพลีของฉันมีคะแนนมากมายฉันจึงทำREDUCEเมื่อระดับมุมมองแผนที่ไม่ได้ซูมเข้าดังนั้นในกรณีของฉันฉันกำลังพยายามลดลอสแองเจลิสลง : -

ป้อนคำอธิบายรูปภาพที่นี่

! น่ากลัว

นี่คือ polys เป็นรูปแบบข้อความที่รู้จักกันดี ..

MULTIPOLYGON (((-118.37033296865027 33.981437119998084, -118.37005887887605 33.981578692036159, -118.37034101004039 33.981636093563019, -118.37033296865027 33.981437119998084)), ((-118.66815694082851 34.181234948814819, -118.62915309690062 34.14689902389253, -118.56475201393673 34.130168028388276, -118.5992039806748 34.074336925351339, -118.57039497030522 34.069345957209549, -118.56968692628638 33.988811006799452, -118.55134001501617 33.982488918901176, -118.49446792996977 34.050559988837591, -118.44342601159182 34.016625025023124, -118.53748592914029 33.96667393391462, -118.49898897162241 33.916299091437473, -118.43732802504242 33.91651401198633, -118.4580839734636 33.961275936767734, -118.42944687485486 33.916317947202252, -118.4287748805515 33.93096998019935, -118.36821587274666 33.92901995236047, -118.37033296865027 33.981437119998084, -118.38014006025271 33.976370879899918, -118.40620312831412 33.9894040312244, -118.40276798429554 34.003464906235209, -118.44721596021705 33.990835906868767, -118.36957705476188 34.035079980519519, -118.37898513570399 34.01930701338695, -118.35780514530173 33.997145063915781, -118.33148511073327 34.001491938133285, -118.37005887887605 33.981578692036159, -118.3177468750705 33.970922985911365, -118.31338700532739 33.93821409504941, -118.29159591706274 33.959494911587832, -118.29062400107088 33.866332991682327, -118.30914811626086 33.865608026065182, -118.30099998201904 33.757721074150069, -118.33305692619008 33.721861951611757, -118.29415704014427 33.704554033590789, -118.23180307928671 33.71500194765504, -118.24896594980441 33.755902076278147, -118.22066886552763 33.782536959833138, -118.22662214917852 33.829531051866013, -118.23026099256474 33.792772095531092, -118.2565120484562 33.804774040894074, -118.2991459834285 33.797795976339046, -118.29920702986115 33.846318895031622, -118.28155507034047 33.86280202135606, -118.28208595952513 33.923201066885447, -118.23032405030229 33.929000895691168, -118.23399502457268 33.953263926662473, -118.25364008888438 33.943276983800338, -118.25643608790811 33.989497954281944, -118.23791790420275 33.989393059909709, -118.23970793049459 34.014713121327667, -118.19142810960136 34.012760956499392, -118.19262502907846 34.061762066095284, -118.1648349431549 34.062282928139695, -118.15528996126079 34.098672108789643, -118.17799390878898 34.098595067874996, -118.16558689825808 34.125466989766352, -118.18258002511257 34.129185991443848, -118.18392009154192 34.148673011439996, -118.22623088187513 34.149788973944844, -118.25425797615566 34.11876096748162, -118.28169102368197 34.156473098182232, -118.30964606995528 34.1612589323332, -118.34566505636386 34.142366926730304, -118.37031291768209 34.196379107293332, -118.33992999453659 34.206502959021506, -118.33746198396433 34.221312054601036, -118.26687107795063 34.221846086487439, -118.26667204057179 34.250779088440183, -118.2387889442851 34.281588919772553, -118.28669401126965 34.278336948162604, -118.29939493959903 34.293259048809304, -118.35470798399948 34.278848025464875, -118.3857618914668 34.284817020858974, -118.38739588298223 34.298779939448842, -118.4061680961638 34.2859269071303, -118.40520195114632 34.329811005464386, -118.50380990538876 34.337305995327178, -118.54629607559784 34.317332026288142, -118.5408208870528 34.2988139356695, -118.58853302357504 34.303219086876425, -118.59620799129411 34.274520945225589, -118.63346111715893 34.269525030054467, -118.63072510622223 34.2377719451453, -118.65873494162602 34.224578011901244, -118.66815694082851 34.181234948814819), (-118.46636404681055 34.0590670662609, -118.45468090186466 34.066799004274742, -118.44817495570614 34.049578023438457, -118.46636404681055 34.0590670662609), (-118.42624590643248 34.083052060665487, -118.39585612350398 34.112414074702421, -118.39584401878872 34.091055026539784, -118.34338194827956 34.09432806847537, -118.37695090866218 34.088630040183155, -118.3702939050842 34.0801689603087, -118.39070402303155 34.072083071358719, -118.37224405760227 34.062199935390908, -118.40602306576152 34.052665897923667, -118.42624590643248 34.083052060665487), (-118.45592304445982 34.284612059955819, -118.43256891423674 34.304687007226292, -118.41566704665274 34.2939320092269, -118.4437338970905 34.273310001969548, -118.45592304445982 34.284612059955819), (-118.3623419482557 34.1386959352159, -118.34569798267972 34.14235601789391, -118.34877496666293 34.131385983468121, -118.3623419482557 34.1386959352159), (-118.46233312716733 33.979751022958048, -118.43225893050703 33.9750159246595, -118.4513010127346 33.964230958845896, -118.46233312716733 33.979751022958048)))

ตอนนี้เพื่อแสดง polys บนแผนที่ Google ฉันต้องดึงข้อมูลจาก SQL Server แปลงเป็นรูปแบบ Google Maps แล้วแสดง มันใช้งานได้ดีสำหรับ .. พูด .. 95% ของ polys อีก 5% ดูสิ .. สับสนมากขึ้น

ไม่ตกลงลอสแองเจลิส: -

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นฉันเดาว่าคุณจะแนะนำ -> ตรวจสอบว่ามีข้อบกพร่องในรหัสหรือไม่ เราเห็นรหัสได้ไหม มันมีบางอย่างที่ทำกับรหัส!

นี่คือไลบรารีโค้ดตัวอย่างที่ฉันใส่ลงไปใน Codeplex มันรวมถึงการทดสอบหน่วยที่มีข้อมูลไบนารีของรูปร่าง ( SELECT MediumReducedBoundary.STAsBinary() FROM Table WHERE Id=1)

จากนั้นผมก็Parseนี้byte[].. และแสดงบน Google แผนที่

รหัสการแปลงของฉันคืนค่าสองรูปหลายเหลี่ยมไม่ใช่หนึ่ง

นี่คือสิ่งที่ Json ของฉันดูเหมือน .. สังเกตว่ามันมีรูปหลายเหลี่ยมสองอันตอนนี้หรือไม่

รหัสด้านลูกค้าจาวาสคริปต์ที่พบได้ที่นี่ นี่คือที่ฉันถอดรหัส json ของฉันและลองและแสดงผลนี้ด้วยตนเองบนแผนที่ google

ฉันหวังว่าอาจมีวิธี / โปรแกรมที่สามารถอ่านผลลัพธ์ json ของฉันและบอกฉันว่าข้อมูลนี้ไม่ดี (ฉันแปลงมันไม่ถูกต้อง) หรือถ้ามีใครสามารถดูว่าฉันแปลง WKT ไปเป็น JSON ในรูปแบบ google ของฉันไม่ถูกต้องหรือไม่


FWIW รูปหลายเหลี่ยมนั้นถูกต้อง / ง่ายดังนั้นจึงไม่น่ามีปัญหา ประการที่สองใช่มีสองวัตถุ รูปหลายเหลี่ยมแรกเป็นรูปสามเหลี่ยมเล็ก ๆ ที่POINT (-118.37024428585559 33.981550635199085)น่าสนใจ แต่ฉันไม่คิดว่ามันเป็นสาเหตุของปัญหา
Mike T

ดังนั้นคุณจะแนะนำว่าข้อผิดพลาดอาจเป็นวิธี SQL Server 2008 'ลด' โพลีนี้หรือไม่
Pure.Krome

ไม่, รูปหลายเหลี่ยมดูดี, ดังนั้นฉันคิดว่าปัญหาอยู่ที่ไคลเอนต์ / จาวาสคริปต์ .. แต่นั่นคือสิ่งที่ฉันหลงทาง
Mike T

คุณสามารถแสดง WKT นั้นในแอปพลิเคชั่น GIS อื่นเพื่อดูว่ามันแสดงได้อย่างนั้นหรือไม่?
Pure.Krome

ใช่ WKT แสดงผลใน JTS TestBuilder เหมือนกับภาพที่ 2 ของคุณหลังจากREDUCEนั้นและผ่านการทดสอบที่ถูกต้อง / ใช้งานง่าย อย่างไรก็ตามฉันไม่สามารถหาวิธีตรวจสอบ json ได้
Mike T

คำตอบ:


4

รูปหลายเหลี่ยมมีการแสดงผลใน Google Maps API โดยใช้ Canvas ซึ่งใช้กฎการเติมแบบไม่มีการหมุน ในการแสดงหลุมคุณจะต้องกำหนดหลุมโดยใช้ขดลวดตรงกันข้ามกับเส้นทางด้านนอก


สวัสดีโบรดี้! ขอบคุณสำหรับการกระโดดเข้ามาที่นี่และตอบกลับ! ขอบคุณจริง ๆ :) โอกาสใดที่คุณสามารถให้ลิงก์หรือสองลิงก์ด้วยเช่นกัน ฉันจะส่งเบียร์ไปที่สำนักงานของคุณด้วยขอบคุณ :) ไชโยเพื่อน!
Pure.Krome

แน่นอนว่า - นี่เป็นหนึ่งที่ดีของโดนัท: geocodezip.com/v3_polygon_example_donut.html
Broady

ไชโยสำหรับลิงค์ :) แต่ฉันไม่สามารถคลิกขวาเพื่อดูวิธีการทำ :(
Pure.Krome

เพียงแค่กดดูแหล่งที่มา!
โบรดี้

3

สำหรับฉันดูเหมือนว่าเวอร์ชัน Google Maps จะไม่เข้าใจช่องโหว่ในลักษณะเดียวกับที่มาดั้งเดิมของคุณ คุณต้องทราบว่าจะมีการกำหนดหลุมใน Google แผนที่อย่างไร

อาจเป็นเพราะคุณพลาดจุดที่ต้องปิดรูปหลายเหลี่ยมแต่ละหลุมก่อนที่จะไปยังจุดถัดไป ฉันไม่ทราบว่า Google แผนที่กำหนดสิ่งนี้อย่างไรมันเป็นเพียงการคาดเดา ...


อืมมม .. นี่ฟังดูค่อนข้างแม่นยำ Hmmmm .. ดูเหมือนว่าฉันต้องการค้นหาผู้เชี่ยวชาญ javascript ของ Google Map? มีใครรอบ ๆ ที่นี่รู้จักบ้างไหม
Pure.Krome

@ Pure.Krome: ฉันคิดว่าไม่จำเป็นต้องเป็นผู้เชี่ยวชาญJavascriptแต่เป็นคนที่รู้จักโมเดลข้อมูลของ Google Maps
กลัว

อ่า .. จุดดี นั่นอาจทำให้หายากยิ่งขึ้น ... : ~ (
Pure.Krome

คุณต้องค้นหาข้อมูลอ้างอิง json API ที่อธิบายวิธีกำหนดรูปหลายเหลี่ยมด้วยรู อาจเรียกว่า multipolygons เพื่อรองรับรู
กลัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.