mirror of https://github.com/tidwall/tile38.git
301 lines
13 KiB
Go
301 lines
13 KiB
Go
package geojson
|
|
|
|
import "testing"
|
|
|
|
func TestPolygon(t *testing.T) {
|
|
testJSON(t, `
|
|
{
|
|
"type": "Polygon",
|
|
"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]
|
|
]
|
|
]
|
|
}
|
|
`)
|
|
}
|
|
|
|
func TestPolygonWithinBBox(t *testing.T) {
|
|
bbox := BBox{Min: Position{0, 0, 0}, Max: Position{100, 100, 0}}
|
|
p := testJSON(t, `{"type":"Polygon","coordinates":[[[10,10],[10,20],[20,10],[10,10]]],"bbox":[0,0,100,100]}`).(Polygon)
|
|
if !p.WithinBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
p = testJSON(t, `{"type":"Polygon","coordinates":[[[10,10],[10,20],[20,10],[10,10]]]}`).(Polygon)
|
|
if !p.WithinBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
p = testJSON(t, `{"type":"Polygon","coordinates":[[[10,10],[10,20],[20,10],[10,10]]],"bbox":[-10,-10,100,100]}`).(Polygon)
|
|
if p.WithinBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
p = testJSON(t, `{"type":"Polygon","coordinates":[[[-10,-10],[10,20],[20,10],[-10,-10]]]}`).(Polygon)
|
|
if p.WithinBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
}
|
|
|
|
func TestPolygonIntersectsBBox(t *testing.T) {
|
|
bbox := BBox{Min: Position{0, 0, 0}, Max: Position{100, 100, 0}}
|
|
p := testJSON(t, `{"type":"Polygon","coordinates":[[[-10,-10],[10,20],[20,10],[-10,-10]]],"bbox":[0,0,100,100]}`).(Polygon)
|
|
if !p.IntersectsBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
p = testJSON(t, `{"type":"Polygon","coordinates":[[[-10,-10],[10,20],[20,10],[-10,-10]]]}`).(Polygon)
|
|
if !p.IntersectsBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
p = testJSON(t, `{"type":"Polygon","coordinates":[[[-10,-10],[-30,-40],[-30,-90],[-10,-10]]]}`).(Polygon)
|
|
if p.IntersectsBBox(bbox) {
|
|
t.Fatal("!")
|
|
}
|
|
}
|
|
|
|
func TestIssue241(t *testing.T) {
|
|
g, _ := ObjectJSON(`{
|
|
"type": "Polygon",
|
|
"coordinates": [
|
|
[
|
|
[2.2571754455566406, 48.84472294197522],
|
|
[2.252626419067383, 48.8473212003792],
|
|
[2.2455883026123047, 48.847660093710566],
|
|
[2.2386789321899414, 48.846022088028505],
|
|
[2.2353315353393555, 48.842152792889486],
|
|
[2.235288619995117, 48.83966724854628],
|
|
[2.236189842224121, 48.836870863722986],
|
|
[2.240910530090332, 48.83461104476972],
|
|
[2.2461462020874023, 48.8343568087582],
|
|
[2.2527122497558594, 48.83540199299912],
|
|
[2.2573471069335938, 48.837746516162916],
|
|
[2.259106636047363, 48.84003443899817],
|
|
[2.259106636047363, 48.84302835299516],
|
|
[2.2571754455566406, 48.84472294197522]
|
|
],
|
|
[
|
|
[2.2546112537384033, 48.84285183001222],
|
|
[2.254890203475952, 48.842774159702614],
|
|
[2.255094051361084, 48.84197626682054],
|
|
[2.2551369667053223, 48.84108656596295],
|
|
[2.254589796066284, 48.8398649668164],
|
|
[2.2528302669525146, 48.83974492367404],
|
|
[2.2515535354614253, 48.839942641637556],
|
|
[2.2512423992156982, 48.84047223948045],
|
|
[2.2509634494781494, 48.841891534086436],
|
|
[2.2513389587402344, 48.84261881872204],
|
|
[2.2546112537384033, 48.84285183001222]
|
|
]
|
|
]
|
|
}`)
|
|
p1, _ := ObjectJSON(`{"type":"Point","coordinates":[2.253119945526123,48.841404318083505]}`)
|
|
if g.Intersects(p1) {
|
|
t.Fatalf("expected %v, got %v", false, g.Intersects(p1))
|
|
}
|
|
if g.Within(p1) {
|
|
t.Fatalf("expected %v, got %v", false, g.Within(p1))
|
|
}
|
|
p2, _ := ObjectJSON(`{"type":"Point","coordinates":[2.2564244270324703,48.83788774899389]}`)
|
|
if !g.Intersects(p2) {
|
|
t.Fatalf("expected %v, got %v", true, g.Intersects(p2))
|
|
}
|
|
if !g.Within(p2) {
|
|
t.Fatalf("expected %v, got %v", false, g.Within(p2))
|
|
}
|
|
|
|
}
|