本文整理匯總了Golang中github.com/omniscale/imposm3/geom/geos.NewGeos函數的典型用法代碼示例。如果您正苦於以下問題:Golang NewGeos函數的具體用法?Golang NewGeos怎麽用?Golang NewGeos使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了NewGeos函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: TestInsertMultipleTags
func TestInsertMultipleTags(t *testing.T) {
w1 := makeWay(1, element.Tags{"landusage": "forest", "highway": "secondary"}, []coord{
{1, 0, 0},
{2, 10, 0},
{3, 10, 10},
})
w2 := makeWay(2, element.Tags{"highway": "secondary"}, []coord{
{3, 10, 10},
{4, 0, 10},
{1, 0, 0},
})
rel := element.Relation{OSMElem: element.OSMElem{Id: 1, Tags: element.Tags{"landusage": "forest"}}}
rel.Members = []element.Member{
{1, element.WAY, "outer", &w1}, // also highway=secondary
{2, element.WAY, "inner", &w2},
}
BuildRelation(&rel, 3857)
g := geos.NewGeos()
defer g.Finish()
if rel.Tags["landusage"] != "forest" {
t.Fatal("wrong rel tags", rel.Tags)
}
if !g.IsValid(rel.Geom.Geom) {
t.Fatal("geometry not valid", g.AsWkt(rel.Geom.Geom))
}
if area := rel.Geom.Geom.Area(); area != 100 {
t.Fatal("area invalid", area)
}
}
示例2: TestSplitPolygonAtGrids
func TestSplitPolygonAtGrids(t *testing.T) {
expected := []geos.Bounds{
{0, 0, 0.05, 0.05},
{0, 0.05, 0.05, 0.1},
{0.05, 0, 0.1, 0.05},
{0.05, 0.05, 0.1, 0.1},
{0, 0.1, 0.05, 0.11},
{0.05, 0.1, 0.1, 0.11},
{0.1, 0, 0.15, 0.05},
{0.1, 0.05, 0.15, 0.1},
{0.1, 0.1, 0.15, 0.11},
}
g := geos.NewGeos()
defer g.Finish()
geom := g.BoundsPolygon(geos.Bounds{0, 0, 0.15, 0.11})
geoms, _ := splitPolygonAtGrid(g, geom, 0.05, 0.2)
for _, geom := range geoms {
t.Log(geom.Bounds())
}
for i, geom := range geoms {
if expected[i] != geom.Bounds() {
t.Fatalf("%v != %v\n", expected[i], geom.Bounds())
}
}
}
示例3: ParseGeoJson
func ParseGeoJson(r io.Reader) ([]Feature, error) {
decoder := json.NewDecoder(r)
obj := &object{}
err := decoder.Decode(obj)
if err != nil {
return nil, err
}
polygons, err := constructPolygonFeatures(obj)
if err != nil {
return nil, err
}
g := geos.NewGeos()
defer g.Finish()
result := []Feature{}
for _, p := range polygons {
geom, err := geosPolygon(g, p.polygon)
if err != nil {
return nil, err
}
result = append(result, Feature{geom, p.properties})
}
return result, err
}
示例4: loop
func (ww *WayWriter) loop() {
geos := geos.NewGeos()
geos.SetHandleSrid(ww.srid)
defer geos.Finish()
for w := range ww.ways {
ww.progress.AddWays(1)
if len(w.Tags) == 0 {
continue
}
insertedAsRelation, err := ww.osmCache.InsertedWays.IsInserted(w.Id)
if err != nil {
log.Warn(err)
continue
}
err = ww.osmCache.Coords.FillWay(w)
if err != nil {
continue
}
ww.NodesToSrid(w.Nodes)
w.Id = ww.wayId(w.Id)
inserted := false
if matches := ww.lineMatcher.MatchWay(w); len(matches) > 0 {
err := ww.buildAndInsert(geos, w, matches, false)
if err != nil {
if errl, ok := err.(ErrorLevel); !ok || errl.Level() > 0 {
log.Warn(err)
}
continue
}
inserted = true
}
if w.IsClosed() && !insertedAsRelation {
// only add polygons that were not inserted as a MultiPolygon relation
if matches := ww.polygonMatcher.MatchWay(w); len(matches) > 0 {
err := ww.buildAndInsert(geos, w, matches, true)
if err != nil {
if errl, ok := err.(ErrorLevel); !ok || errl.Level() > 0 {
log.Warn(err)
}
continue
}
inserted = true
}
}
if inserted && ww.expireor != nil {
expire.ExpireNodes(ww.expireor, w.Nodes)
}
if ww.diffCache != nil {
ww.diffCache.Coords.AddFromWay(w)
}
}
ww.wg.Done()
}
示例5: TestMultiPolygonWithMultipleHoles
func TestMultiPolygonWithMultipleHoles(t *testing.T) {
w1 := makeWay(1, element.Tags{"landusage": "forest"}, []coord{
{1, 0, 0},
{2, 10, 0},
{3, 10, 10},
{4, 0, 10},
{1, 0, 0},
})
w2 := makeWay(1, element.Tags{"water": "basin"}, []coord{
{1, 1, 1},
{2, 2, 1},
{3, 2, 2},
{4, 1, 2},
{1, 1, 1},
})
w3 := makeWay(3, element.Tags{"landusage": "scrub"}, []coord{
{1, 3, 3},
{2, 4, 3},
{3, 4, 4},
{4, 3, 4},
{1, 3, 3},
})
rel := element.Relation{
OSMElem: element.OSMElem{Id: 1, Tags: element.Tags{"landusage": "forest"}}}
rel.Members = []element.Member{
{1, element.WAY, "outer", &w1},
{2, element.WAY, "inner", &w2},
{3, element.WAY, "inner", &w3},
}
geom, err := buildRelation(&rel, 3857)
if err != nil {
t.Fatal(err)
}
g := geos.NewGeos()
defer g.Finish()
// if len(rel.Tags) != 1 {
// t.Fatal("wrong rel tags", rel.Tags)
// }
// if rel.Tags["landusage"] != "forest" {
// t.Fatal("wrong rel tags", rel.Tags)
// }
if !g.IsValid(geom.Geom) {
t.Fatal("geometry not valid", g.AsWkt(geom.Geom))
}
if area := geom.Geom.Area(); area != 100-1-1 {
t.Fatal("area invalid", area)
}
}
示例6: TestTouchingPolygonsWithHole
func TestTouchingPolygonsWithHole(t *testing.T) {
w1 := makeWay(1, element.Tags{"water": "riverbank"}, []coord{
{1, 0, 0},
{2, 10, 0},
{3, 10, 10},
{4, 0, 10},
{1, 0, 0},
})
w2 := makeWay(2, element.Tags{"water": "riverbank"}, []coord{
{2, 10, 0},
{5, 30, 0},
{6, 30, 10},
{3, 10, 10},
{2, 10, 0},
})
w3 := makeWay(3, element.Tags{"landusage": "forest"}, []coord{
{7, 2, 2},
{8, 8, 2},
{9, 8, 8},
{10, 2, 8},
{7, 2, 2},
})
rel := element.Relation{OSMElem: element.OSMElem{Id: 1, Tags: element.Tags{"water": "riverbank"}}}
rel.Members = []element.Member{
{1, element.WAY, "outer", &w1},
{2, element.WAY, "outer", &w2},
{3, element.WAY, "inner", &w3},
}
geom, err := buildRelation(&rel, 3857)
if err != nil {
t.Fatal(err)
}
g := geos.NewGeos()
defer g.Finish()
// if len(rel.Tags) != 1 {
// t.Fatal("wrong rel tags", rel.Tags)
// }
// if rel.Tags["water"] != "riverbank" {
// t.Fatal("wrong rel tags", rel.Tags)
// }
if !g.IsValid(geom.Geom) {
t.Fatal("geometry not valid", g.AsWkt(geom.Geom))
}
if area := geom.Geom.Area(); area != 100+200-36 {
t.Fatal("area invalid", area)
}
}
示例7: BenchmarkLineString
func BenchmarkLineString(b *testing.B) {
size := 16
nodes := make([]element.Node, size)
for i := 0; i < size; i++ {
nodes[i] = element.Node{Lat: 0, Long: float64(i)}
}
g := geos.NewGeos()
defer g.Finish()
for i := 0; i < b.N; i++ {
LineString(g, nodes)
}
}
示例8: TestPolygonNotClosed
func TestPolygonNotClosed(t *testing.T) {
nodes := []element.Node{
element.Node{Lat: 0, Long: 0},
element.Node{Lat: 0, Long: 10},
element.Node{Lat: 10, Long: 10},
}
g := geos.NewGeos()
defer g.Finish()
_, err := Polygon(g, nodes)
if err == nil {
t.Fatal("no error")
}
}
示例9: TestClipperWithBuffer
func TestClipperWithBuffer(t *testing.T) {
g := geos.NewGeos()
defer g.Finish()
limiter, err := NewFromGeoJsonWithBuffered("./hamburg_clip.geojson", 10000.0)
if err != nil {
t.Fatal(err)
}
if limiter.IntersectsBuffer(g, 1106543, 7082055) != true {
t.Fatal()
}
if limiter.IntersectsBuffer(g, 1006543, 7082055) != false {
t.Fatal()
}
}
示例10: loop
func (nw *NodeWriter) loop() {
geos := geos.NewGeos()
geos.SetHandleSrid(nw.srid)
defer geos.Finish()
for n := range nw.nodes {
nw.progress.AddNodes(1)
if matches := nw.pointMatcher.MatchNode(n); len(matches) > 0 {
nw.NodeToSrid(n)
if nw.expireor != nil {
nw.expireor.Expire(n.Long, n.Lat)
}
point, err := geom.Point(geos, *n)
if err != nil {
if errl, ok := err.(ErrorLevel); !ok || errl.Level() > 0 {
log.Warn(err)
}
continue
}
n.Geom, err = geom.AsGeomElement(geos, point)
if err != nil {
log.Warn(err)
continue
}
if nw.limiter != nil {
parts, err := nw.limiter.Clip(n.Geom.Geom)
if err != nil {
log.Warn(err)
continue
}
if len(parts) >= 1 {
if err := nw.inserter.InsertPoint(n.OSMElem, matches); err != nil {
log.Warn(err)
continue
}
}
} else {
if err := nw.inserter.InsertPoint(n.OSMElem, matches); err != nil {
log.Warn(err)
continue
}
}
}
}
nw.wg.Done()
}
示例11: TestLineString
func TestLineString(t *testing.T) {
nodes := make([]element.Node, 2)
nodes[0] = element.Node{Lat: 0, Long: 0}
nodes[1] = element.Node{Lat: 0, Long: 10}
g := geos.NewGeos()
defer g.Finish()
geom, err := LineString(g, nodes)
if err != nil {
t.Fatal(err)
}
if geom.Length() != 10.0 {
t.Fatal(geom.Length)
}
}
示例12: TestClipperWithBuffer
func TestClipperWithBuffer(t *testing.T) {
g := geos.NewGeos()
defer g.Finish()
limiter, err := NewFromGeoJSON("./clipping.geojson", 0.1, 3857)
if err != nil {
t.Fatal(err)
}
if limiter.IntersectsBuffer(g, 9.94, 53.53) != true {
t.Fatal()
}
if limiter.IntersectsBuffer(g, 9.04, 53.53) != false {
t.Fatal()
}
}
示例13: Build
// Build creates the (multi)polygon Geometry of the Relation.
func (prep *PreparedRelation) Build() (Geometry, error) {
g := geos.NewGeos()
g.SetHandleSrid(prep.srid)
defer g.Finish()
geom, err := buildRelGeometry(g, prep.rel, prep.rings)
if err != nil {
return Geometry{}, err
}
wkb := g.AsEwkbHex(geom)
if wkb == nil {
return Geometry{}, errors.New("unable to create WKB for relation")
}
return Geometry{Geom: geom, Wkb: wkb}, nil
}
示例14: TestFilterGeometryByType
func TestFilterGeometryByType(t *testing.T) {
g := geos.NewGeos()
defer g.Finish()
var result []*geos.Geom
// filtered out
result = filterGeometryByType(g, g.FromWkt("POINT(0 0)"), "Polygon")
if len(result) != 0 {
t.Fatal()
}
result = filterGeometryByType(g, g.FromWkt("POINT(0 0)"), "Point")
if len(result) != 1 {
t.Fatal()
}
// filtered out
result = filterGeometryByType(g, g.FromWkt("LINESTRING(0 0, 10 0)"), "Polygon")
if len(result) != 0 {
t.Fatal()
}
// polygon <-> multipolygon types are compatible in both directions
result = filterGeometryByType(g, g.FromWkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"), "Polygon")
if len(result) != 1 {
t.Fatal()
}
result = filterGeometryByType(g, g.FromWkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"), "MultiPolygon")
if len(result) != 1 {
t.Fatal()
}
result = filterGeometryByType(g, g.FromWkt("MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))"), "Polygon")
if len(result) != 1 {
t.Fatal()
}
result = filterGeometryByType(g, g.FromWkt("LINESTRING(0 0, 10 0)"), "LineString")
if len(result) != 1 {
t.Fatal()
}
// multilinestrings are split
result = filterGeometryByType(g, g.FromWkt("MULTILINESTRING((0 0, 10 0), (20 0, 30 0))"), "LineString")
if len(result) != 2 {
t.Fatal()
}
}
示例15: TestSingleTable_Prepare
func TestSingleTable_Prepare(t *testing.T) {
ts.dir = "/tmp/imposm3test"
ts.config = importConfig{
connection: "postgis://",
cacheDir: ts.dir,
osmFileName: "build/single_table.pbf",
mappingFileName: "single_table_mapping.json",
}
ts.g = geos.NewGeos()
var err error
ts.db, err = sql.Open("postgres", "sslmode=disable")
if err != nil {
t.Fatal(err)
}
ts.dropSchemas()
}