func (dec *dataDecoder) parseNodes(pb *OSMPBF.PrimitiveBlock, nodes []*OSMPBF.Node) { st := pb.GetStringtable().GetS() granularity := int64(pb.GetGranularity()) dateGranularity := int64(pb.GetDateGranularity()) latOffset := pb.GetLatOffset() lonOffset := pb.GetLonOffset() for _, node := range nodes { id := node.GetId() lat := node.GetLat() lon := node.GetLon() latitude := 1e-9 * float64((latOffset + (granularity * lat))) longitude := 1e-9 * float64((lonOffset + (granularity * lon))) tags := extractTags(st, node.GetKeys(), node.GetVals()) info := extractInfo(st, node.GetInfo(), dateGranularity) dec.q = append(dec.q, &Node{id, latitude, longitude, tags, info}) panic("Please test this first") } }
func (dec *dataDecoder) parseDenseNodes(pb *OSMPBF.PrimitiveBlock, dn *OSMPBF.DenseNodes) { st := pb.GetStringtable().GetS() granularity := int64(pb.GetGranularity()) latOffset := pb.GetLatOffset() lonOffset := pb.GetLonOffset() dateGranularity := int64(pb.GetDateGranularity()) ids := dn.GetId() lats := dn.GetLat() lons := dn.GetLon() di := dn.GetDenseinfo() tu := tagUnpacker{st, dn.GetKeysVals(), 0} var id, lat, lon int64 var state denseInfoState for index := range ids { id = ids[index] + id lat = lats[index] + lat lon = lons[index] + lon latitude := 1e-9 * float64((latOffset + (granularity * lat))) longitude := 1e-9 * float64((lonOffset + (granularity * lon))) tags := tu.next() info := extractDenseInfo(st, &state, di, index, dateGranularity) dec.q = append(dec.q, &Node{id, latitude, longitude, tags, info}) } }
func (dec *dataDecoder) parseRelations(pb *OSMPBF.PrimitiveBlock, relations []*OSMPBF.Relation) { st := pb.GetStringtable().GetS() dateGranularity := int64(pb.GetDateGranularity()) for _, rel := range relations { id := rel.GetId() tags := extractTags(st, rel.GetKeys(), rel.GetVals()) members := extractMembers(st, rel) info := extractInfo(st, rel.GetInfo(), dateGranularity) dec.q = append(dec.q, &Relation{id, tags, members, info}) } }
func (dec *dataDecoder) parseWays(pb *OSMPBF.PrimitiveBlock, ways []*OSMPBF.Way) { st := pb.GetStringtable().GetS() dateGranularity := int64(pb.GetDateGranularity()) for _, way := range ways { id := way.GetId() tags := extractTags(st, way.GetKeys(), way.GetVals()) refs := way.GetRefs() var nodeID int64 nodeIDs := make([]int64, len(refs)) for index := range refs { nodeID = refs[index] + nodeID // delta encoding nodeIDs[index] = nodeID } info := extractInfo(st, way.GetInfo(), dateGranularity) dec.q = append(dec.q, &Way{id, tags, nodeIDs, info}) } }