Làm cách nào tôi có thể sửa các Đa giác phức tạp của mình để chúng hiển thị chính xác trong Google Maps?


15

Vấn đề : Tôi đang cố gắng tìm cách khắc phục một số hình đa giác bị hỏng và tôi không chắc mình có thể làm điều này như thế nào.


Chi tiết :

Tôi đã nhận được một số đa giác mà về cơ bản tôi đã nhập từ TIGERLINE.

Tôi đã chuyển đổi chúng thành các tệp hình dạng, sau đó nhập chúng vào Sql Server 2008.

Trong máy chủ sql 2008, chúng trông rất tuyệt :) Vì vậy, điều đó cho thấy rằng việc nhập ít nhiều có hiệu quả. Đây là thành phố Los Angeles: -

nhập mô tả hình ảnh ở đây

Nhưng vì các poly của tôi có rất nhiều điểm, REDUCEnên chúng là khi mức độ xem bản đồ không được phóng to. Vì vậy, trong trường hợp của tôi, tôi hiện đang cố gắng đưa ra một Los Angeles giảm : -

nhập mô tả hình ảnh ở đây

Tuyệt vời!

Đây là polys như một định dạng Văn bản được biết đến ..

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)))

Bây giờ, để hiển thị các polys trên bản đồ Google, tôi cần trích xuất dữ liệu từ Sql Server, chuyển đổi nó sang định dạng Google Maps và sau đó hiển thị. Điều này làm việc tuyệt vời cho .. nói .. 95% polys. 5% còn lại nhìn .. rất rất rối.

Không-Ok Los Angeles: -

nhập mô tả hình ảnh ở đây

Vì vậy, tôi đoán bạn sẽ đề xuất -> kiểm tra xem có bất kỳ lỗi nào trong mã không? Chúng ta có thể xem mã? Đó là một cái gì đó để làm với mã!

Chà, đây là thư viện mã mẫu tôi đã đưa vào Codeplex. Nó bao gồm một bài kiểm tra đơn vị với dữ liệu nhị phân của hình dạng. ( SELECT MediumReducedBoundary.STAsBinary() FROM Table WHERE Id=1)

Tôi sau đó Parsenày byte[].. và hiển thị nó trên Google Map.

Mã chuyển đổi của tôi trả về HAI đa giác, không phải một.

Đây là những gì Json của tôi trông giống như .. chú ý làm thế nào nó có hai đa giác bây giờ?

Các mã phía khách hàng javascript được tìm thấy ở đây . Đây là nơi tôi giải mã json của mình và thử và hiển thị thủ công bản đồ này trên bản đồ google.

Tôi hy vọng có thể có một cách / chương trình có thể đọc trong kết quả json của tôi và cho tôi biết nếu dữ liệu này là xấu (tôi đã chuyển đổi nó, không chính xác). Hoặc nếu ai đó có thể thấy nơi tôi đã chuyển đổi WKT không chính xác thành JSON được định dạng google của tôi?


FWIW, đa đường là hợp lệ / đơn giản, do đó không nên có vấn đề với điều đó. Thứ hai, vâng, có hai đối tượng. Đa giác đầu tiên là một hình tam giác nhỏ POINT (-118.37024428585559 33.981550635199085), rất thú vị, nhưng tôi không nghĩ đó là nguyên nhân của vấn đề.
Mike T

Vì vậy, bạn có thể đề xuất rằng lỗi có thể là do Sql Server 2008 'giảm' poly này không?
Pure.Krom

không, đa tuyến có vẻ tốt, vì vậy tôi nghĩ rằng vấn đề là do ứng dụng khách / javascript .. nhưng đó là tôi bị lạc
Mike T

Bạn có thể hiển thị WKT đó trong một ứng dụng GIS khác để xem liệu nó có hiển thị nó độc đáo không?
Pure.Krom

Vâng, WKT hiển thị trong JTS TestBuilder giống như hình ảnh thứ 2 của bạn sau đó REDUCEvà vượt qua các bài kiểm tra hợp lệ / đơn giản. Tuy nhiên, tôi không thể tìm ra cách xác nhận json.
Mike T

Câu trả lời:


4

Đa giác được hiển thị trong API Google Maps bằng Canvas, sử dụng quy tắc điền không có cuộn dây. Để hiển thị một lỗ, bạn sẽ cần xác định lỗ bằng cách sử dụng cuộn dây đối diện với đường dẫn bên ngoài.


Xin chào! cảm ơn rất nhiều vì đã nhảy vào đây và trả lời! Thực sự đánh giá cao nó :) Bất kỳ cơ hội bạn có thể cung cấp một hoặc hai liên kết, quá một số ví dụ về điều này, xin vui lòng? Sau đó tôi sẽ gửi một phiến bia đến văn phòng của bạn để cảm ơn :) Chúc mừng người bạn đời!
Pure.Krom

Chắc chắn - đây là một trong những chiếc bánh rán tốt: geocodezip.com/v3_polygon_example_donut.html
broady

chúc mừng cho liên kết :) nhưng tôi không thể nhấp chuột phải để xem cách nó được thực hiện :(
Pure.Krom

Chỉ cần xem nguồn!
rộng

3

Đối với tôi, có vẻ như phiên bản Google Maps không hiểu các lỗ hổng giống như nguồn ban đầu của bạn. Bạn cần tìm hiểu các lỗ hổng dự kiến ​​sẽ được xác định trong Google Maps.

Có thể là bạn đang thiếu một số điểm cần đóng từng lỗ đa giác trước khi đi tới điểm tiếp theo. Tôi không biết Google Maps định nghĩa điều này như thế nào, đó chỉ là phỏng đoán ...


Hmm .. điều này nghe có vẻ khá chính xác. Hmmmm .. có vẻ như tôi cần tìm một chuyên gia javascript của Google Map? Bất cứ ai xung quanh đây, biết một?
Pure.Krom

@ Pure.Krom: Tôi nghĩ không nhất thiết phải là chuyên gia Javascript , nhưng ai đó biết mô hình dữ liệu Google Maps.
kinh ngạc

ahh .. điểm tốt. Điều đó có thể khiến việc tìm kiếm trở nên khó khăn hơn ...: ~ (
Pure.Krom

Bạn cần tìm một tham chiếu API json mô tả cách xác định đa giác có lỗ. Nó có thể được gọi là đa điểm để hỗ trợ các lỗ.
kinh ngạc

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.