コード例 #1
0
ファイル: decode_data.go プロジェクト: paulmach/go.osm
func (dec *dataDecoder) parseDenseNodes(pb *osmpbf.PrimitiveBlock, dn *osmpbf.DenseNodes) {
	st := pb.GetStringtable().GetS()
	granularity := int64(pb.GetGranularity())

	latOffset := pb.GetLatOffset()
	lonOffset := pb.GetLonOffset()
	ids := dn.GetId()
	lats := dn.GetLat()
	lons := dn.GetLon()
	di := dn.GetDenseinfo()

	tu := tagUnpacker{st, dn.GetKeysVals(), 0}
	state := &denseInfoState{
		DenseInfo:       di,
		StringTable:     st,
		DateGranularity: int64(pb.GetDateGranularity()),
	}

	var id, lat, lon int64
	for index := range ids {
		id = ids[index] + id
		lat = lats[index] + lat
		lon = lons[index] + lon
		info := state.Next()

		dec.q = append(dec.q, osm.Element{
			Node: &osm.Node{
				ID:          osm.NodeID(id),
				Lat:         1e-9 * float64((latOffset + (granularity * lat))),
				Lon:         1e-9 * float64((lonOffset + (granularity * lon))),
				User:        info.User,
				UserID:      osm.UserID(info.UID),
				Visible:     info.Visible,
				Version:     int(info.Version),
				ChangesetID: osm.ChangesetID(info.Changeset),
				Timestamp:   info.Timestamp,
				Tags:        tu.Next(),
			},
		})
	}
}