From e9363ddf4e0a12b4099f88adb580e785e8bf213e Mon Sep 17 00:00:00 2001 From: Oliver Tonnhofer Date: Mon, 30 Jun 2014 08:58:22 +0200 Subject: [PATCH] add support for 4326 --- config/config.go | 6 +++--- writer/nodes.go | 3 +-- writer/relations.go | 3 +-- writer/ways.go | 3 +-- writer/writer.go | 30 ++++++++++++++++++++++++++++-- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/config/config.go b/config/config.go index a5d6114..06ca89b 100644 --- a/config/config.go +++ b/config/config.go @@ -84,7 +84,7 @@ func (o *_BaseOptions) updateFromConfig() error { if conf.Srid == 0 { conf.Srid = defaultSrid } - if o.Srid != defaultSrid { + if o.Srid == defaultSrid { o.Srid = conf.Srid } if o.MappingFile == "" { @@ -116,8 +116,8 @@ func (o *_BaseOptions) updateFromConfig() error { func (o *_BaseOptions) check() []error { errs := []error{} - if o.Srid != 3857 { - errs = append(errs, errors.New("srid!=3857 not implemented")) + if o.Srid != 3857 && o.Srid != 4326 { + errs = append(errs, errors.New("only -srid=3857 or -srid=4326 are supported")) } if o.MappingFile == "" { errs = append(errs, errors.New("missing mapping")) diff --git a/writer/nodes.go b/writer/nodes.go index ff90955..e691203 100644 --- a/writer/nodes.go +++ b/writer/nodes.go @@ -7,7 +7,6 @@ import ( "imposm3/geom" "imposm3/geom/geos" "imposm3/mapping" - "imposm3/proj" "imposm3/stats" "sync" ) @@ -49,7 +48,7 @@ func (nw *NodeWriter) loop() { for n := range nw.nodes { nw.progress.AddNodes(1) if matches := nw.pointMatcher.MatchNode(n); len(matches) > 0 { - proj.NodeToMerc(n) + nw.NodeToSrid(n) if nw.expireor != nil { nw.expireor.Expire(n.Long, n.Lat) } diff --git a/writer/relations.go b/writer/relations.go index e7f98a6..07396e4 100644 --- a/writer/relations.go +++ b/writer/relations.go @@ -8,7 +8,6 @@ import ( "imposm3/geom" "imposm3/geom/geos" "imposm3/mapping" - "imposm3/proj" "imposm3/stats" "sync" "time" @@ -71,7 +70,7 @@ NextRel: } continue NextRel } - proj.NodesToMerc(m.Way.Nodes) + rw.NodesToSrid(m.Way.Nodes) } // BuildRelation updates r.Members but we need all of them diff --git a/writer/ways.go b/writer/ways.go index 58bde18..a7c04a6 100644 --- a/writer/ways.go +++ b/writer/ways.go @@ -8,7 +8,6 @@ import ( "imposm3/geom" "imposm3/geom/geos" "imposm3/mapping" - "imposm3/proj" "imposm3/stats" "sync" ) @@ -66,7 +65,7 @@ func (ww *WayWriter) loop() { if err != nil { continue } - proj.NodesToMerc(w.Nodes) + ww.NodesToSrid(w.Nodes) inserted := false if matches := ww.lineMatcher.MatchWay(w); len(matches) > 0 { diff --git a/writer/writer.go b/writer/writer.go index 8ee8ff1..881077e 100644 --- a/writer/writer.go +++ b/writer/writer.go @@ -1,14 +1,17 @@ package writer import ( + "runtime" + "sync" + "imposm3/cache" "imposm3/database" + "imposm3/element" "imposm3/expire" "imposm3/geom/limit" "imposm3/logging" + "imposm3/proj" "imposm3/stats" - "runtime" - "sync" ) var log = logging.NewLogger("writer") @@ -60,3 +63,26 @@ func (writer *OsmElemWriter) SetExpireor(exp expire.Expireor) { func (writer *OsmElemWriter) Wait() { writer.wg.Wait() } + +func (writer *OsmElemWriter) NodesToSrid(nodes []element.Node) { + if writer.srid == 4326 { + return + } + if writer.srid != 3857 { + panic("invalid srid. only 4326 and 3857 are supported") + } + + for i, nd := range nodes { + nodes[i].Long, nodes[i].Lat = proj.WgsToMerc(nd.Long, nd.Lat) + } +} + +func (writer *OsmElemWriter) NodeToSrid(node *element.Node) { + if writer.srid == 4326 { + return + } + if writer.srid != 3857 { + panic("invalid srid. only 4326 and 3857 are supported") + } + node.Long, node.Lat = proj.WgsToMerc(node.Long, node.Lat) +}