tile38/pkg/geojson/multipolygon_test.go

255 lines
14 KiB
Go

package geojson
import (
"testing"
)
func TestMultiPolygon(t *testing.T) {
testJSON(t, `
{
"type": "MultiPolygon",
"coordinates": [
[
[
[-84.32281494140625,34.9895035675793],
[-84.29122924804688,35.21981940793435],
[-84.24041748046875,35.25459097465022],
[-84.22531127929688,35.266925688950074],
[-84.20745849609375,35.26580442886754],
[-84.19921875,35.24674063355999],
[-84.16213989257812,35.24113278166642],
[-84.12368774414062,35.24898366572645],
[-84.09072875976562,35.24898366572645],
[-84.08798217773438,35.264683153268116],
[-84.04266357421875,35.27701633139884],
[-84.03030395507812,35.291589484566124],
[-84.0234375,35.306160014550784],
[-84.03305053710936,35.32745068492882],
[-84.03579711914062,35.34313496028189],
[-84.03579711914062,35.348735749472546],
[-84.01657104492188,35.35545618392078],
[-84.01107788085938,35.37337460834958],
[-84.00970458984374,35.39128905521763],
[-84.01931762695312,35.41479572901859],
[-84.00283813476562,35.429344044107154],
[-83.93692016601562,35.47409160773029],
[-83.91220092773438,35.47632833265728],
[-83.88885498046875,35.504282143299655],
[-83.88473510742186,35.516578738902936],
[-83.8751220703125,35.52104976129943],
[-83.85314941406249,35.52104976129943],
[-83.82843017578125,35.52104976129943],
[-83.8092041015625,35.53446133418443],
[-83.80233764648438,35.54116627999813],
[-83.76800537109374,35.56239491058853],
[-83.7432861328125,35.56239491058853],
[-83.71994018554688,35.56239491058853],
[-83.67050170898438,35.569097520776054],
[-83.6334228515625,35.570214567965984],
[-83.61007690429688,35.576916524038616],
[-83.59634399414061,35.574682600980914],
[-83.5894775390625,35.55904339525896],
[-83.55239868164062,35.56574628576276],
[-83.49746704101562,35.563512051219696],
[-83.47000122070312,35.586968406786475],
[-83.4466552734375,35.60818490437746],
[-83.37936401367188,35.63609277863135],
[-83.35739135742188,35.65618041632016],
[-83.32305908203124,35.66622234103479],
[-83.3148193359375,35.65394870599763],
[-83.29971313476561,35.660643649881614],
[-83.28598022460938,35.67180064238771],
[-83.26126098632811,35.6907639509368],
[-83.25714111328125,35.69968630125201],
[-83.25576782226562,35.715298012125295],
[-83.23516845703125,35.72310272092263],
[-83.19808959960936,35.72756221127198],
[-83.16238403320312,35.753199435570316],
[-83.15826416015625,35.76322914549896],
[-83.10333251953125,35.76991491635478],
[-83.08685302734375,35.7843988251953],
[-83.0511474609375,35.787740890986576],
[-83.01681518554688,35.78328477203738],
[-83.001708984375,35.77882840327371],
[-82.96737670898438,35.793310688351724],
[-82.94540405273438,35.820040281161],
[-82.9193115234375,35.85121343450061],
[-82.9083251953125,35.86902116501695],
[-82.90557861328125,35.87792352995116],
[-82.91244506835938,35.92353244718235],
[-82.88360595703125,35.94688293218141],
[-82.85614013671875,35.951329861522666],
[-82.8424072265625,35.94243575255426],
[-82.825927734375,35.92464453144099],
[-82.80670166015625,35.927980690382704],
[-82.80532836914062,35.94243575255426],
[-82.77923583984375,35.97356075349624],
[-82.78060913085938,35.99245209055831],
[-82.76138305664062,36.00356252895066],
[-82.69546508789062,36.04465753921525],
[-82.64465332031249,36.060201412392914],
[-82.61306762695312,36.060201412392914],
[-82.60620117187499,36.033552893400376],
[-82.60620117187499,35.991340960635405],
[-82.60620117187499,35.97911749857497],
[-82.5787353515625,35.96133453736691],
[-82.5677490234375,35.951329861522666],
[-82.53067016601562,35.97244935753683],
[-82.46475219726562,36.006895355244666],
[-82.41668701171875,36.070192281208456],
[-82.37960815429686,36.10126686921446],
[-82.35488891601562,36.117908916563685],
[-82.34115600585936,36.113471382052175],
[-82.29583740234375,36.13343831245866],
[-82.26287841796874,36.13565654678543],
[-82.23403930664062,36.13565654678543],
[-82.2216796875,36.154509006695],
[-82.20382690429688,36.15561783381855],
[-82.19009399414062,36.144528857027744],
[-82.15438842773438,36.15007354140755],
[-82.14065551757812,36.134547437460064],
[-82.1337890625,36.116799556445024],
[-82.12142944335938,36.10570509327921],
[-82.08984375,36.10792411128649],
[-82.05276489257811,36.12678323326429],
[-82.03628540039062,36.12900165569652],
[-81.91268920898438,36.29409768373033],
[-81.89071655273438,36.30959215409138],
[-81.86325073242188,36.33504067209607],
[-81.83029174804688,36.34499652561904],
[-81.80145263671875,36.35605709240176],
[-81.77947998046874,36.34610265300638],
[-81.76162719726562,36.33835943134047],
[-81.73690795898438,36.33835943134047],
[-81.71905517578125,36.33835943134047],
[-81.70669555664062,36.33504067209607],
[-81.70669555664062,36.342784223707234],
[-81.72317504882812,36.357163062654365],
[-81.73278808593749,36.379279167407965],
[-81.73690795898438,36.40028364332352],
[-81.73690795898438,36.41354670392876],
[-81.72454833984374,36.423492513472326],
[-81.71768188476562,36.445589751779174],
[-81.69845581054688,36.47541104282962],
[-81.69845581054688,36.51073994146672],
[-81.705322265625,36.53060536411363],
[-81.69158935546875,36.55929085774001],
[-81.68060302734375,36.56480607840351],
[-81.68197631835938,36.58686302344181],
[-81.04202270507812,36.56370306576917],
[-80.74264526367186,36.561496993252575],
[-79.89120483398438,36.54053616262899],
[-78.68408203124999,36.53943280355122],
[-77.88345336914062,36.54053616262899],
[-76.91665649414062,36.54163950596125],
[-76.91665649414062,36.55046568575947],
[-76.31103515625,36.551568887374],
[-75.79605102539062,36.54936246839778],
[-75.6298828125,36.07574221562703],
[-75.4925537109375,35.82226734114509],
[-75.3936767578125,35.639441068973916],
[-75.41015624999999,35.43829554739668],
[-75.43212890625,35.263561862152095],
[-75.487060546875,35.18727767598896],
[-75.5914306640625,35.17380831799959],
[-75.9210205078125,35.04798673426734],
[-76.17919921875,34.867904962568744],
[-76.41540527343749,34.62868797377061],
[-76.4593505859375,34.57442951865274],
[-76.53076171875,34.53371242139567],
[-76.5911865234375,34.551811369170494],
[-76.651611328125,34.615126683462194],
[-76.761474609375,34.63320791137959],
[-77.069091796875,34.59704151614417],
[-77.376708984375,34.45674800347809],
[-77.5909423828125,34.3207552752374],
[-77.8326416015625,33.97980872872457],
[-77.9150390625,33.80197351806589],
[-77.9754638671875,33.73804486328907],
[-78.11279296875,33.8521697014074],
[-78.2830810546875,33.8521697014074],
[-78.4808349609375,33.815666308702774],
[-79.6728515625,34.8047829195724],
[-80.782470703125,34.836349990763864],
[-80.782470703125,34.91746688928252],
[-80.9307861328125,35.092945313732635],
[-81.0516357421875,35.02999636902566],
[-81.0516357421875,35.05248370662468],
[-81.0516357421875,35.137879119634185],
[-82.3150634765625,35.19625600786368],
[-82.3590087890625,35.19625600786368],
[-82.40295410156249,35.22318504970181],
[-82.4688720703125,35.16931803601131],
[-82.6885986328125,35.1154153142536],
[-82.781982421875,35.06147690849717],
[-83.1060791015625,35.003003395276714],
[-83.616943359375,34.99850370014629],
[-84.05639648437499,34.985003130171066],
[-84.22119140625,34.985003130171066],
[-84.32281494140625,34.9895035675793]
],
[
[-75.69030761718749,35.74205383068037],
[-75.5914306640625,35.74205383068037],
[-75.5419921875,35.585851593232356],
[-75.56396484375,35.32633026307483],
[-75.69030761718749,35.285984736065735],
[-75.970458984375,35.16482750605027],
[-76.2066650390625,34.994003757575776],
[-76.300048828125,35.02999636902566],
[-76.409912109375,35.07946034047981],
[-76.5252685546875,35.10642805736423],
[-76.4208984375,35.25907654252574],
[-76.3385009765625,35.294952147406576],
[-76.0858154296875,35.29943548054543],
[-75.948486328125,35.44277092585766],
[-75.8660888671875,35.53669637839501],
[-75.772705078125,35.567980458012094],
[-75.706787109375,35.634976650677295],
[-75.706787109375,35.74205383068037],
[-75.69030761718749,35.74205383068037]
]
],
[
[
[-109.0283203125,36.98500309285596],
[-109.0283203125,40.97989806962013],
[-102.06298828125,40.97989806962013],
[-102.06298828125,37.00255267215955],
[-109.0283203125,36.98500309285596]
]
]
]
}
`)
}
func TestIssue244(t *testing.T) {
json := `{"type":"MultiPolygon","coordinates":[[[[180.0,40.0],[180.0,50.0],[170.0,50.0],[170.0,40.0],[180.0,40.0]]],[[[-170.0,40.0],[-170.0,50.0],[-180.0,50.0],[-180.0,40.0],[-170.0,40.0]]]]}`
g := testJSON(t, json).(MultiPolygon)
if !(SimplePoint{180.0, 40.0}).Within(g) {
t.Fatal("!")
}
if !(SimplePoint{179.0, 45.0}).Within(g) {
t.Fatal("!")
}
if !(SimplePoint{179.0, 45.0}).Within(Polygon{Coordinates: g.Coordinates[0]}) {
t.Fatal("!")
}
if (SimplePoint{179.0, 45.0}).Within(Polygon{Coordinates: g.Coordinates[1]}) {
t.Fatal("!")
}
}
func TestIssue268(t *testing.T) {
// Simplified geojson of Jersey City from https://github.com/tidwall/tile38/issues/268.
var json = `{"type":"MultiPolygon","coordinates":[[[[-74.116904,40.710477],[-74.103844,40.718665],[-74.103774,40.718694],[-74.094018,40.735138],[-74.093956,40.735199],[-74.080262,40.741407],[-74.077047,40.743248],[-74.075202,40.747395],[-74.078686,40.750601],[-74.075259,40.752693],[-74.075229,40.752748],[-74.076518,40.754725],[-74.076522,40.754807],[-74.074893,40.755611],[-74.074865,40.755663],[-74.074799,40.758149],[-74.074768,40.758186],[-74.065019,40.763723],[-74.06493,40.763755],[-74.060077,40.762508],[-74.06002,40.762542],[-74.060007,40.765648],[-74.05998,40.765723],[-74.057029,40.768911],[-74.056969,40.768987],[-74.052873,40.761349],[-74.05262,40.761053],[-74.044837,40.757022],[-74.04365,40.756586],[-74.042444,40.752501],[-74.042373,40.752416],[-74.038769,40.750888],[-74.037784,40.750317],[-74.043674,40.740008],[-74.043781,40.739849],[-74.042816,40.736036],[-74.042821,40.735952],[-74.038596,40.736322],[-74.038572,40.736322],[-74.022888,40.731061],[-74.020405,40.730321],[-74.02597,40.701624],[-74.026284,40.699902],[-74.048937,40.662702],[-74.049594,40.661622],[-74.065826,40.666881],[-74.097399,40.680376],[-74.098129,40.680685],[-74.102849,40.69536],[-74.102851,40.695424],[-74.114231,40.700944],[-74.114559,40.701072],[-74.113338,40.702477],[-74.112787,40.703102],[-74.116904,40.710477]],[[-74.047285,40.690503],[-74.043556,40.689147],[-74.043513,40.689274],[-74.04586,40.691102],[-74.04607,40.691185],[-74.047285,40.690503]],[[-74.04074,40.700131],[-74.038372,40.698669],[-74.038368,40.698687],[-74.04074,40.700131]]]]}`
g := testJSON(t, json).(MultiPolygon)
p := testJSON(t, `{"type":"Point","coordinates":[-74.03466,40.767623]}`).(SimplePoint)
if p.Intersects(g) {
t.Fatal("expected false")
}
if g.Intersects(p) {
t.Fatal("expected false")
}
}