Wie kann ich meine komplexen Polygone korrigieren, damit sie in Google Maps korrekt angezeigt werden?


15

Problem : Ich versuche einen Weg zu finden, um gebrochene Polygonformen zu reparieren, und ich bin nicht sicher, wie ich das tun kann.


Details :

Ich habe eine Reihe von Polygonen, die ich vor einiger Zeit im Grunde genommen aus TIGERLINES importiert habe.

Ich habe sie in Formdateien umgewandelt und sie dann in Sql Server 2008 importiert.

In SQL Server 2008 sehen sie großartig aus :) Das deutet darauf hin, dass der Import mehr oder weniger funktioniert hat. Hier ist die Stadt Los Angeles: -

Bildbeschreibung hier eingeben

Aber weil meine Polys viele Punkte haben, habe ich REDUCEsie, wenn die Kartenansicht nicht vergrößert ist. In meinem Fall versuche ich jetzt, ein verkleinertes Los Angeles zu rendern :

Bildbeschreibung hier eingeben

Genial!

Dies ist das polys als ein bekanntes Textformat.

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

Um nun die Polys auf einer Google-Karte anzuzeigen, muss ich die Daten von SQL Server extrahieren, in ein Google Maps-Format konvertieren und dann anzeigen. Das funktioniert gut für .. sagen wir .. 95% der Polys. Die anderen 5% sehen sehr, sehr durcheinander aus.

Nicht-Ok Los Angeles: -

Bildbeschreibung hier eingeben

Vermutlich schlagen Sie vor , ob der Code Fehler enthält. Können wir den Code sehen? Es hat etwas mit dem Code zu tun!

Hier ist die Beispielcodebibliothek, die ich in Codeplex erstellt habe. Es enthält einen Komponententest mit den Binärdaten der Form. ( SELECT MediumReducedBoundary.STAsBinary() FROM Table WHERE Id=1)

Ich dann Parsediese byte[].. und zeige sie auf einer Google Map an.

Mein Transformationscode gibt ZWEI Polygone zurück, nicht eines.

So sieht mein Json aus ... merkst du , wie er jetzt zwei Polygone hat?

Den clientseitigen Javascript-Code finden Sie hier . Hier dekodiere ich meinen JSON und versuche, ihn manuell auf einer Google-Karte zu rendern.

Ich hoffe, dass es einen Weg / ein Programm gibt, der / das mein json-Ergebnis einliest und mir mitteilt, ob diese Daten schlecht sind (ich habe sie falsch konvertiert). Oder kann jemand sehen, wo ich die WKT falsch in mein google-formatiertes JSON konvertiert habe?


FWIW, das Multipolygon ist gültig / einfach, es sollte also kein Problem damit geben. Zweitens gibt es ja zwei Objekte. Das erste Polygon ist ein kleines Dreieck POINT (-118.37024428585559 33.981550635199085), was interessant ist, aber ich denke nicht, dass es die Ursache des Problems ist.
Mike T

Würden Sie also vorschlagen, dass der Fehler darin bestehen könnte, wie Sql Server 2008 diese Poly "reduziert" hat?
Pure.Krome

nee, das Multipolygon sieht gut aus , so dass ich denke , das Problem mit dem Client / javascript ist .. aber das ist war ich verloren gehen
Mike T

Können Sie das WKT in einer anderen GIS-Anwendung anzeigen, um zu sehen, ob es dort gut dargestellt wird?
Pure.Krome

Ja, die WKT rendert in JTS TestBuilder dasselbe wie Ihr zweites Image REDUCEund besteht gültige / einfache Tests. Ich kann jedoch nicht herausfinden, wie ich den JSON validieren soll.
Mike T

Antworten:


4

Polygone werden in der Google Maps-API mithilfe von Canvas gerendert, wobei eine Füllregel mit Nullwindung verwendet wird. Um ein Loch anzuzeigen, müssen Sie das Loch mit der entgegengesetzten Windung zum äußeren Pfad definieren.


Hallo Broady! Vielen Dank fürs Hineinspringen und Antworten! Wirklich zu schätzen :) Könnten Sie eine oder zwei Links anbieten, auch einige Beispiele dafür, bitte? Ich schicke dann dankend eine Scheibe Bier in dein Büro :) Prost Kumpel!
Pure.Krome

Klar - hier ist ein guter Donut: geocodezip.com/v3_polygon_example_donut.html
am

Prost für den Link :), aber ich kann nicht mit der rechten
Maustaste

Einfach auf Quelltext klicken!
5.

3

Für mich sieht es so aus, als würde die Google Maps-Version die Lücken nicht so verstehen wie Ihre ursprüngliche Quelle. Sie müssen herausfinden, wie Löcher in Google Maps definiert werden sollen.

Möglicherweise fehlen Ihnen einige Punkte, die jedes Lochpolygon schließen müssen, bevor Sie mit dem nächsten fortfahren können. Ich weiß nicht, wie Google Maps dies definiert, es ist nur eine Vermutung ...


Hmm .. das klingt ziemlich genau. Hmmmm .. sieht so aus, als müsste ich einen JavaScript-Experten für Google Map finden? Weiß hier jemand Bescheid?
Pure.Krome

@ Pure.Krome: Ich denke nicht unbedingt ein Javascript- Experte, sondern jemand, der das Google Maps-Datenmodell kennt.
Ehrfurcht

ahh .. guter Punkt. Das könnte es noch schwieriger machen, ... zu finden: ~ (
Pure.Krome 15.11.11

Sie müssen eine json-API-Referenz finden, die beschreibt, wie Sie Polygone mit Löchern definieren. Man könnte es Multipolygone nennen, um Löcher zu stützen.
Ehrfurcht

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.